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
|
@@ -18,6 +18,7 @@ import { TERMINAL_RUNTIME_VERSION_TIMEOUT_MS, buildRuntimeExecPrefix, buildRunti
|
|
|
18
18
|
import { runWithWallClock, teardownSandbox } from "./sandbox.js";
|
|
19
19
|
import { DEFAULT_REQUEST_TIMEOUT_MS, PRODUCT_SETUP_TIMEOUT_MS, SANDBOX_WORKDIR, UPLOAD_MAX_BYTES, } from "./types.js";
|
|
20
20
|
import { terminalSandboxTimeoutMs } from "./lifetime.js";
|
|
21
|
+
import { plural } from "../../run/text.js";
|
|
21
22
|
export class LiveTerminalSandbox {
|
|
22
23
|
status = "failed";
|
|
23
24
|
completionReason = "harness_error";
|
|
@@ -109,7 +110,7 @@ export class LiveTerminalSandbox {
|
|
|
109
110
|
// able to reach, without the ledger carrying any secret.
|
|
110
111
|
recordLifecycle("terminal-lab.egress.policy", egressAllow === undefined
|
|
111
112
|
? "Egress is unrestricted (no execution.egressAllow declared)."
|
|
112
|
-
: `Egress routing allowlist: ${egressAllow.length
|
|
113
|
+
: `Egress routing allowlist: ${plural(egressAllow.length, "declared host")}: ${egressAllow.join(", ")}; deny-all fallback. Domain routing is not strict destination isolation on shared infrastructure.`);
|
|
113
114
|
recordLifecycle("terminal-lab.runtime-auth", runtimeEnv.mode === "openai-egress"
|
|
114
115
|
? "Runtime auth openai-egress: raw key remains outside the sandbox in the api.openai.com HTTPS Authorization transform; Codex receives an inert CODEX_API_KEY placeholder and the default OpenAI endpoint. Every sandbox process, including bootstrap/setup, can spend via this proxy; no added routing restriction or provider spending limit."
|
|
115
116
|
: `Runtime auth openai-env: raw key from ${runtimeEnv.keyName} is passed command-scoped to Codex and inherited by its child processes.`);
|
|
@@ -207,7 +208,7 @@ export class LiveTerminalSandbox {
|
|
|
207
208
|
// Same channel and same guarantees as the runtime bootstrap above: no runtime key touches it,
|
|
208
209
|
// and a failure fails the run closed rather than handing the agent a half-built world. It
|
|
209
210
|
// exists so a study can put the participant in a prepared project: asking an agent what
|
|
210
|
-
// studies a project contains, in an empty directory, measures the
|
|
211
|
+
// studies a project contains, in an empty directory, measures the study and not the product
|
|
211
212
|
// (learned the hard way on the desktop route, labs/tui-self-study.yaml).
|
|
212
213
|
const install = plan.product.install;
|
|
213
214
|
if (install === undefined)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { normalizeLocalActorTranscript } from "../../run/terminal-contract.js";
|
|
2
2
|
import { MESSAGE_CHARS, PENDING_LINE_CHARS, TEXT_ITEMS_BYTES, TEXT_ITEMS_MAX } from "./types.js";
|
|
3
|
+
import { plural } from "../../run/text.js";
|
|
3
4
|
const itemEvents = new Set(["item.started", "item.updated", "item.completed"]);
|
|
4
5
|
const nonempty = (value) => typeof value === "string" && value.trim().length > 0;
|
|
5
6
|
const object = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
@@ -148,7 +149,7 @@ export function createTerminalParticipantReader(sanitize) {
|
|
|
148
149
|
if (droppedLines > 0)
|
|
149
150
|
notices.push([
|
|
150
151
|
"agent output lines skipped",
|
|
151
|
-
`Skipped ${droppedLines
|
|
152
|
+
`Skipped ${plural(droppedLines, "stdout line")} that ran past ${PENDING_LINE_CHARS} characters without a newline. Items on those lines are not in this trace or its counts.`,
|
|
152
153
|
]);
|
|
153
154
|
notices.forEach(([title, text], index) => items.push({
|
|
154
155
|
id: `notice-${String(index + 1).padStart(3, "0")}`,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ActorPersonaRef } from "../../actors/contract.js";
|
|
2
|
-
import { type ResolvedPersona } from "../../
|
|
3
|
-
import type { TerminalPlan } from "../../
|
|
2
|
+
import { type ResolvedPersona } from "../../study/persona.js";
|
|
3
|
+
import type { TerminalPlan } from "../../study/plan-types.js";
|
|
4
4
|
/** A terminal run's persona, resolved against the project's committed persona files. */
|
|
5
5
|
export interface TerminalPersona {
|
|
6
6
|
personaId: string;
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
// record come from one place. Each path keeps its own prompt and its own set of scrubbed secrets.
|
|
4
4
|
import { realpath } from "node:fs/promises";
|
|
5
5
|
import path from "node:path";
|
|
6
|
-
import { personaBrief, personaToDirectives, renderPersonaPromptSection, } from "../../
|
|
7
|
-
import { resolveCommittedPersona } from "../../
|
|
6
|
+
import { personaBrief, personaToDirectives, renderPersonaPromptSection, } from "../../study/persona.js";
|
|
7
|
+
import { resolveCommittedPersona } from "../../study/persona-resolve.js";
|
|
8
8
|
import { prepareSelectedOutputDirectory } from "../../run/contained-output.js";
|
|
9
9
|
/** Resolves the plan's persona; the resolver's warnings go into `warnings`. */
|
|
10
10
|
export async function resolveTerminalPersona(args) {
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import type { RoutePlanResult, RouteRefusal, TerminalPlan } from "../../
|
|
2
|
-
import type {
|
|
3
|
-
import { type
|
|
4
|
-
/** The error a terminal
|
|
5
|
-
export interface TerminalRefusal extends RouteRefusal<"terminal", NonNullable<
|
|
1
|
+
import type { RoutePlanResult, RouteRefusal, TerminalPlan } from "../../study/plan-types.js";
|
|
2
|
+
import type { StudyConfig } from "../../study/types.js";
|
|
3
|
+
import { type TerminalProductStudyResult } from "./types.js";
|
|
4
|
+
/** The error a terminal study returns before a run starts. `actor` names the registered actor. */
|
|
5
|
+
export interface TerminalRefusal extends RouteRefusal<"terminal", NonNullable<TerminalProductStudyResult["error"]>["code"]> {
|
|
6
6
|
readonly actor?: string;
|
|
7
7
|
}
|
|
8
8
|
export type TerminalPlanResult = RoutePlanResult<TerminalPlan, TerminalRefusal>;
|
|
9
9
|
/**
|
|
10
|
-
* Plan a terminal-product
|
|
10
|
+
* Plan a terminal-product study. It is called for any config handed to the terminal runner, not
|
|
11
11
|
* only one routeOf sends here, so a config for another route gets this route's refusal.
|
|
12
12
|
*/
|
|
13
|
-
export declare function
|
|
13
|
+
export declare function planTerminalStudy(config: StudyConfig, input: {
|
|
14
14
|
readonly dryRun: boolean;
|
|
15
15
|
/** A test's costProbe can measure spend lines, so a positive maxUsd can trip. */
|
|
16
16
|
readonly hasCostProbe?: boolean;
|
|
@@ -5,24 +5,24 @@ import { DEFAULT_OPENAI_CU_MODEL } from "../../actors/computer-use/openai-provid
|
|
|
5
5
|
import { resolveAutomaticAnalysis } from "../../analysis/automatic-config.js";
|
|
6
6
|
import { isReasoningEffort } from "../../actors/reasoning-effort.js";
|
|
7
7
|
import { actorRegistry, isTerminalActorDescriptor } from "../../actors/registry.js";
|
|
8
|
-
import { isNonEmpty, planBase } from "../../
|
|
9
|
-
import { desktopMediaValidationReason, taskProtocolValidationReason, } from "../../
|
|
8
|
+
import { isNonEmpty, planBase } from "../../study/plan-base.js";
|
|
9
|
+
import { desktopMediaValidationReason, taskProtocolValidationReason, } from "../../study/validation.js";
|
|
10
10
|
import { MAX_SANDBOX_MS } from "../../substrates/e2b/lifetime.js";
|
|
11
11
|
import { NODE_BOOTSTRAP_TIMEOUT_MS } from "../../subject/node-bootstrap.js";
|
|
12
12
|
import { terminalSandboxTimeoutMs } from "./lifetime.js";
|
|
13
13
|
import { isExactRuntimeVersion, TERMINAL_RUNTIME_VERSION_TIMEOUT_MS } from "./runtime.js";
|
|
14
14
|
import { PRODUCT_SETUP_TIMEOUT_MS, TERMINAL_SANDBOX_TIMEOUT_BUFFER_MS, } from "./types.js";
|
|
15
15
|
/**
|
|
16
|
-
* Plan a terminal-product
|
|
16
|
+
* Plan a terminal-product study. It is called for any config handed to the terminal runner, not
|
|
17
17
|
* only one routeOf sends here, so a config for another route gets this route's refusal.
|
|
18
18
|
*/
|
|
19
|
-
export function
|
|
19
|
+
export function planTerminalStudy(config, input) {
|
|
20
20
|
const refuse = (code, message, actor) => ({
|
|
21
21
|
ok: false,
|
|
22
22
|
refusal: { route: "terminal", code, message, ...(actor === undefined ? {} : { actor }) },
|
|
23
23
|
});
|
|
24
24
|
if (String(config.comms?.email?.kind) === "real")
|
|
25
|
-
return refuse("HUMANISH_TERMINAL_SUBJECT_INVALID", "Real email receiving is unsupported on the terminal route. Use a supported hosted computer-use browser
|
|
25
|
+
return refuse("HUMANISH_TERMINAL_SUBJECT_INVALID", "Real email receiving is unsupported on the terminal route. Use a supported hosted computer-use browser study.");
|
|
26
26
|
const mediaReason = desktopMediaValidationReason(config);
|
|
27
27
|
if (mediaReason)
|
|
28
28
|
return refuse("HUMANISH_TERMINAL_SUBJECT_INVALID", mediaReason);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ObserverResult } from "../../observer/render.js";
|
|
2
2
|
import type { ActorCompletionReason, ActorStatus, ActorTrace } from "../../actors/contract.js";
|
|
3
3
|
import { type ExecutionFailure, type ExecutionOutcome, type Judgment, type ParticipantFacts } from "../../run/judge.js";
|
|
4
|
-
import { type NoSpendProof, type TerminalCostLedger, type TerminalLedgers, type
|
|
4
|
+
import { type NoSpendProof, type TerminalCostLedger, type TerminalLedgers, type TerminalProductStudyResult } from "./types.js";
|
|
5
5
|
/**
|
|
6
6
|
* What judge.ts reads from a finished terminal session, after a blown cap has overridden it. It has
|
|
7
7
|
* no engagement or blocker rule: the agent's nonce-verified marker is its declared outcome.
|
|
@@ -20,10 +20,10 @@ export declare function terminalExecutionFailures(args: {
|
|
|
20
20
|
cleanup: TerminalLedgers["cleanup"];
|
|
21
21
|
observer: Pick<ObserverResult, "ok" | "error">;
|
|
22
22
|
}): ExecutionFailure[];
|
|
23
|
-
/** The terminal-product
|
|
24
|
-
export declare function
|
|
23
|
+
/** The terminal-product study result for a live run, from its session, cleanup and cost ledger. */
|
|
24
|
+
export declare function terminalStudyResult(args: {
|
|
25
25
|
cwd: string;
|
|
26
|
-
|
|
26
|
+
studyId: string;
|
|
27
27
|
actorId: string;
|
|
28
28
|
productName: string;
|
|
29
29
|
runId: string;
|
|
@@ -44,4 +44,4 @@ export declare function terminalLabResult(args: {
|
|
|
44
44
|
execution: ExecutionOutcome;
|
|
45
45
|
observer: ObserverResult;
|
|
46
46
|
warnings: string[];
|
|
47
|
-
}):
|
|
47
|
+
}): TerminalProductStudyResult;
|
|
@@ -39,17 +39,17 @@ export function terminalExecutionFailures(args) {
|
|
|
39
39
|
: [
|
|
40
40
|
{
|
|
41
41
|
kind: "evidence",
|
|
42
|
-
message: observer.error?.message ?? "Observer failed for the terminal-product
|
|
42
|
+
message: observer.error?.message ?? "Observer failed for the terminal-product run.",
|
|
43
43
|
},
|
|
44
44
|
]),
|
|
45
45
|
];
|
|
46
46
|
}
|
|
47
|
-
/** The terminal-product
|
|
48
|
-
export function
|
|
49
|
-
const { cwd,
|
|
50
|
-
// The
|
|
47
|
+
/** The terminal-product study result for a live run, from its session, cleanup and cost ledger. */
|
|
48
|
+
export function terminalStudyResult(args) {
|
|
49
|
+
const { cwd, studyId, actorId, productName, runId, sessionStatus, completionReason, sessionReason, sessionError, sandboxId, cleanup, cost, noSpendProof, capFailure, declaredScorerFailure, judgment, execution, observer, warnings, } = args;
|
|
50
|
+
// The run's exit code: verified evidence, no harness error and proven cleanup. A blocked/
|
|
51
51
|
// timed-out agent run is still ok-as-evidence at the bundle level (the failure is the evidence),
|
|
52
|
-
// but the
|
|
52
|
+
// but the study result surfaces ok:false on a harness error or unproven teardown (fail-closed).
|
|
53
53
|
// remaining===0 is the by-id-confirmed-reclaimed state; remaining===1 (still present) and
|
|
54
54
|
// remaining===-1 (kill(id) itself failed) are both unproven by design.
|
|
55
55
|
const cleanupProven = cleanup.killed && cleanup.remaining === 0;
|
|
@@ -63,7 +63,7 @@ export function terminalLabResult(args) {
|
|
|
63
63
|
policy: OUTCOME_POLICIES.terminal,
|
|
64
64
|
});
|
|
65
65
|
return {
|
|
66
|
-
...studyResultIdentity("terminal",
|
|
66
|
+
...studyResultIdentity("terminal", studyId),
|
|
67
67
|
ok,
|
|
68
68
|
cwd,
|
|
69
69
|
actor: actorId,
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { type TerminalRefusal } from "./plan.js";
|
|
2
|
-
import type { TerminalPlan } from "../../
|
|
3
|
-
import type { AdmittedPlan } from "../../run-
|
|
4
|
-
import { type
|
|
2
|
+
import type { TerminalPlan } from "../../study/plan-types.js";
|
|
3
|
+
import type { AdmittedPlan } from "../../run-study.js";
|
|
4
|
+
import { type RunTerminalProductStudyOptions, type TerminalProductStudyResult, type TerminalRunInput } from "./types.js";
|
|
5
5
|
/**
|
|
6
6
|
* The config-taking entry point. It plans, returns a refusal with the same envelope and analysis
|
|
7
7
|
* record the route has always returned, and otherwise runs the plan.
|
|
8
8
|
*/
|
|
9
|
-
export declare function
|
|
10
|
-
/** A refused terminal
|
|
11
|
-
export declare function
|
|
9
|
+
export declare function runTerminalProductStudy(options: RunTerminalProductStudyOptions): Promise<TerminalProductStudyResult>;
|
|
10
|
+
/** A refused terminal study's result: the route's envelope, and the analysis record a refusal gets. */
|
|
11
|
+
export declare function terminalStudyRefusal(options: RunTerminalProductStudyOptions, refusal: TerminalRefusal): Promise<TerminalProductStudyResult>;
|
|
12
12
|
/**
|
|
13
13
|
* Run a terminal plan. The run scope gives a direct library caller the same run lifetime the CLI
|
|
14
|
-
* gets: whichever of its fail-closed exits the
|
|
14
|
+
* gets: whichever of its fail-closed exits the run takes, the run it started is closed, and only a
|
|
15
15
|
* run that published its final bundle reaches automatic analysis.
|
|
16
16
|
*/
|
|
17
|
-
export declare function runTerminalPlan(plan: TerminalPlan, input: TerminalRunInput): Promise<
|
|
17
|
+
export declare function runTerminalPlan(plan: TerminalPlan, input: TerminalRunInput): Promise<TerminalProductStudyResult>;
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* runStudyWith's step for a terminal plan. It runs a live plan's local checks (checkLiveTerminalMachine)
|
|
20
20
|
* before any run scope opens, so the CLI can present their refusal before it loads a declared
|
|
21
21
|
* scorer, and returns the run that continues from them with that scorer.
|
|
22
22
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// The terminal-product route: a real autonomous agent (Codex) studies a CLI or product from its
|
|
2
2
|
// public surfaces only, inside an E2B shell. The flow:
|
|
3
|
-
// 1. admit:
|
|
3
|
+
// 1. admit: planTerminalStudy refuses what the plan cannot hold, then a live plan's machine checks
|
|
4
4
|
// (checkLiveTerminalMachine) run before any run scope opens, so the CLI can refuse before it
|
|
5
5
|
// loads a declared scorer;
|
|
6
6
|
// 2. open the run scope;
|
|
@@ -47,29 +47,29 @@ import { resolveAutomaticAnalysis } from "../../analysis/automatic-config.js";
|
|
|
47
47
|
import { completeAutomaticAnalysis } from "../../analysis/automatic-completion.js";
|
|
48
48
|
import path from "node:path";
|
|
49
49
|
import { runScope } from "../../run/run.js";
|
|
50
|
-
import {
|
|
51
|
-
import {
|
|
50
|
+
import { planTerminalStudy } from "./plan.js";
|
|
51
|
+
import { runDryTerminalStudy } from "./dry-run.js";
|
|
52
52
|
import { checkLiveTerminalMachine, runLiveTerminalSession } from "./session.js";
|
|
53
|
-
import { terminalRouteScorer } from "../../
|
|
54
|
-
import { withLateScorer } from "../../
|
|
53
|
+
import { terminalRouteScorer } from "../../study/adapter-scorer-loader.js";
|
|
54
|
+
import { withLateScorer } from "../../study/route-inputs.js";
|
|
55
55
|
import {} from "./types.js";
|
|
56
56
|
import { studyResultIdentity } from "../../run/study-result.js";
|
|
57
57
|
/**
|
|
58
58
|
* The config-taking entry point. It plans, returns a refusal with the same envelope and analysis
|
|
59
59
|
* record the route has always returned, and otherwise runs the plan.
|
|
60
60
|
*/
|
|
61
|
-
export async function
|
|
61
|
+
export async function runTerminalProductStudy(options) {
|
|
62
62
|
const { config, dryRun, ...input } = options;
|
|
63
|
-
const planned =
|
|
63
|
+
const planned = planTerminalStudy(config, {
|
|
64
64
|
dryRun,
|
|
65
65
|
hasCostProbe: input.deps?.costProbe !== undefined,
|
|
66
66
|
});
|
|
67
67
|
if (planned.ok)
|
|
68
68
|
return runTerminalPlan(planned.plan, input);
|
|
69
|
-
return
|
|
69
|
+
return terminalStudyRefusal(options, planned.refusal);
|
|
70
70
|
}
|
|
71
|
-
/** A refused terminal
|
|
72
|
-
export function
|
|
71
|
+
/** A refused terminal study's result: the route's envelope, and the analysis record a refusal gets. */
|
|
72
|
+
export function terminalStudyRefusal(options, refusal) {
|
|
73
73
|
const { config, dryRun } = options;
|
|
74
74
|
const refused = {
|
|
75
75
|
...studyResultIdentity("terminal", config.id),
|
|
@@ -88,7 +88,7 @@ export function terminalLabRefusal(options, refusal) {
|
|
|
88
88
|
}
|
|
89
89
|
/**
|
|
90
90
|
* Run a terminal plan. The run scope gives a direct library caller the same run lifetime the CLI
|
|
91
|
-
* gets: whichever of its fail-closed exits the
|
|
91
|
+
* gets: whichever of its fail-closed exits the run takes, the run it started is closed, and only a
|
|
92
92
|
* run that published its final bundle reaches automatic analysis.
|
|
93
93
|
*/
|
|
94
94
|
export async function runTerminalPlan(plan, input) {
|
|
@@ -96,7 +96,7 @@ export async function runTerminalPlan(plan, input) {
|
|
|
96
96
|
return admission.ok ? runAdmittedTerminalRun(admission.admitted, input) : admission.result;
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
|
-
*
|
|
99
|
+
* runStudyWith's step for a terminal plan. It runs a live plan's local checks (checkLiveTerminalMachine)
|
|
100
100
|
* before any run scope opens, so the CLI can present their refusal before it loads a declared
|
|
101
101
|
* scorer, and returns the run that continues from them with that scorer.
|
|
102
102
|
*/
|
|
@@ -141,7 +141,7 @@ function completeTerminalAnalysis(plan, input, result, finished) {
|
|
|
141
141
|
function terminalFailure(plan, input, warnings) {
|
|
142
142
|
const cwd = path.resolve(input.cwd);
|
|
143
143
|
return (code, message) => ({
|
|
144
|
-
...studyResultIdentity("terminal", plan.
|
|
144
|
+
...studyResultIdentity("terminal", plan.studyId),
|
|
145
145
|
ok: false,
|
|
146
146
|
cwd,
|
|
147
147
|
actor: plan.actor,
|
|
@@ -165,5 +165,5 @@ async function runTerminalPlanInScope(admitted, input, scope) {
|
|
|
165
165
|
const { plan, runtimeEnv } = admitted;
|
|
166
166
|
return runLiveTerminalSession({ plan, input, cwd, warnings, failed, scope, runtimeEnv });
|
|
167
167
|
}
|
|
168
|
-
return
|
|
168
|
+
return runDryTerminalStudy({ plan: admitted.plan, input, cwd, warnings, failed, scope });
|
|
169
169
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { LiveTerminalAuth, LiveTerminalPlan, RunLiveTerminalSessionArgs,
|
|
1
|
+
import type { LiveTerminalAuth, LiveTerminalPlan, RunLiveTerminalSessionArgs, TerminalProductStudyErrorCode, TerminalProductStudyResult, TerminalRunInput } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* The checks of this machine a live run makes before its run starts: the runtime key and
|
|
4
4
|
* E2B_API_KEY. They read only the plan and the environment, so the CLI makes them before it loads
|
|
@@ -9,17 +9,17 @@ export declare function checkLiveTerminalMachine(plan: LiveTerminalPlan, input:
|
|
|
9
9
|
readonly runtimeEnv: LiveTerminalAuth;
|
|
10
10
|
} | {
|
|
11
11
|
readonly ok: false;
|
|
12
|
-
readonly code:
|
|
12
|
+
readonly code: TerminalProductStudyErrorCode;
|
|
13
13
|
readonly message: string;
|
|
14
14
|
};
|
|
15
15
|
/**
|
|
16
|
-
* The live in-sandbox agent session orchestrator (mirror of
|
|
16
|
+
* The live in-sandbox agent session orchestrator (mirror of runCuaActorStudy's E2B branch). Enforces
|
|
17
17
|
* the 8-point safety contract by construction; fails closed before any sandbox/key/spend on any
|
|
18
18
|
* precondition miss. Persists the substrate-lifecycle/command-log/interventions/cleanup ledgers,
|
|
19
19
|
* the redacted terminal event stream + normalized transcript, the agent report, and the
|
|
20
20
|
* provider-neutral actor trace; tears the sandbox down in a finally and proves the teardown.
|
|
21
21
|
*/
|
|
22
|
-
export declare function runLiveTerminalSession(args: RunLiveTerminalSessionArgs): Promise<
|
|
23
|
-
/** The default mission when the
|
|
22
|
+
export declare function runLiveTerminalSession(args: RunLiveTerminalSessionArgs): Promise<TerminalProductStudyResult>;
|
|
23
|
+
/** The default mission when the study omits one. Public-safe, product-neutral author text. */
|
|
24
24
|
export declare function defaultMission(productName: string): string;
|
|
25
25
|
export declare function makeTerminalRunId(): string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { randomBytes, randomUUID } from "node:crypto";
|
|
2
|
-
import { missingKeys } from "../../
|
|
2
|
+
import { missingKeys } from "../../study/requirements.js";
|
|
3
3
|
import { declaredRuntimeProvenance } from "./runtime.js";
|
|
4
4
|
import { digestText, redactText, scrubLiterals } from "../../evidence/redaction.js";
|
|
5
5
|
import { describeMissingKeys } from "../../keys/key-resolution.js";
|
|
@@ -18,7 +18,7 @@ import { finishLiveTerminalSession } from "./live-finish.js";
|
|
|
18
18
|
export function checkLiveTerminalMachine(plan, input, warnings) {
|
|
19
19
|
const env = input.env ?? process.env;
|
|
20
20
|
const { maxUsd } = plan.caps;
|
|
21
|
-
//
|
|
21
|
+
// planTerminalStudy refuses a positive maxUsd without a costProbe, so one is present here.
|
|
22
22
|
if (maxUsd > 0) {
|
|
23
23
|
warnings.push(`scenario.caps.maxUsd=${maxUsd} is checked after the session against the lines the costProbe measures; lines it leaves null (unmeasured) never trip it. scenario.caps.maxMinutes bounds the run while it runs.`);
|
|
24
24
|
}
|
|
@@ -32,13 +32,13 @@ export function checkLiveTerminalMachine(plan, input, warnings) {
|
|
|
32
32
|
return {
|
|
33
33
|
ok: false,
|
|
34
34
|
code: "HUMANISH_TERMINAL_KEYS_MISSING",
|
|
35
|
-
message: `Live terminal-product
|
|
35
|
+
message: `Live terminal-product studies need E2B_API_KEY in the environment (values are never persisted). ${describeMissingKeys(["E2B_API_KEY"], env)}`,
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
return { ok: true, runtimeEnv };
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
41
|
-
* The live in-sandbox agent session orchestrator (mirror of
|
|
41
|
+
* The live in-sandbox agent session orchestrator (mirror of runCuaActorStudy's E2B branch). Enforces
|
|
42
42
|
* the 8-point safety contract by construction; fails closed before any sandbox/key/spend on any
|
|
43
43
|
* precondition miss. Persists the substrate-lifecycle/command-log/interventions/cleanup ledgers,
|
|
44
44
|
* the redacted terminal event stream + normalized transcript, the agent report, and the
|
|
@@ -61,7 +61,7 @@ export async function runLiveTerminalSession(args) {
|
|
|
61
61
|
mintRunId: makeTerminalRunId,
|
|
62
62
|
// This entry point is the live terminal route; its dry-run sibling is a separate function.
|
|
63
63
|
mode: "live",
|
|
64
|
-
|
|
64
|
+
study: plan.study,
|
|
65
65
|
renderReview: renderTerminalReviewMarkdown,
|
|
66
66
|
observer: { open: input.open === true, render: deps.renderObserver },
|
|
67
67
|
now,
|
|
@@ -101,7 +101,7 @@ export async function runLiveTerminalSession(args) {
|
|
|
101
101
|
maxMinutes,
|
|
102
102
|
e2bApiKey,
|
|
103
103
|
runPaths,
|
|
104
|
-
metadata: buildSandboxMetadata({
|
|
104
|
+
metadata: buildSandboxMetadata({ studyId: plan.studyId, recordId: "sim-001", runId }),
|
|
105
105
|
warnings,
|
|
106
106
|
recorder,
|
|
107
107
|
});
|
|
@@ -192,7 +192,7 @@ function composeLivePrompt(args) {
|
|
|
192
192
|
`When finished, print exactly one final machine-readable line in this format: HUMANISH_ACTOR_VERDICT=<status> HUMANISH_ACTOR_NONCE=${args.verdictNonce} where <status> is passed, blocked, or failed.`,
|
|
193
193
|
].join("\n");
|
|
194
194
|
}
|
|
195
|
-
/** The default mission when the
|
|
195
|
+
/** The default mission when the study omits one. Public-safe, product-neutral author text. */
|
|
196
196
|
export function defaultMission(productName) {
|
|
197
197
|
return `You are an autonomous agent. Discover ${productName} from its public surfaces and determine whether it can help with a durable real task. Stay within the declared no-spend caps. Leave feedback if the workflow is confusing.`;
|
|
198
198
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ActorCompletionReason, ActorPersonaRef, ActorRuntimeProvenance, ActorStatus, ActorTokenUsage, ActorTrace } from "../../actors/contract.js";
|
|
2
|
-
import type {
|
|
2
|
+
import type { StudyRuntimeAuth } from "../../study/types.js";
|
|
3
3
|
import type { TerminalParticipantText } from "./participant-text.js";
|
|
4
4
|
import { type CommandLogRecord, type TerminalEventRecord } from "./types.js";
|
|
5
5
|
/**
|
|
@@ -27,7 +27,7 @@ export declare function buildTerminalActorTrace(args: {
|
|
|
27
27
|
terminalEvents: TerminalEventRecord[];
|
|
28
28
|
commandLog: CommandLogRecord[];
|
|
29
29
|
transcriptTail: string;
|
|
30
|
-
runtimeAuth:
|
|
30
|
+
runtimeAuth: StudyRuntimeAuth;
|
|
31
31
|
runtime: ActorRuntimeProvenance;
|
|
32
32
|
/** Runtime-turn aggregate usage parsed from the exec stream. Absent when the stream
|
|
33
33
|
* carried no usage record, which stays distinct from a measured zero. */
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { StudyEvent } from "../../study/run-study-events.js";
|
|
2
2
|
import { type AutomaticAnalysisResult } from "../../analysis/automatic-completion.js";
|
|
3
3
|
import type { ActorCompletionReason, ActorRuntimeProvenance, ActorStatus, ActorTrace } from "../../actors/contract.js";
|
|
4
4
|
import type { CostCategory } from "../../run/terminal-contract.js";
|
|
5
5
|
import type { RunScope } from "../../run/run.js";
|
|
6
6
|
import type { buildRuntimeAuth } from "./credentials.js";
|
|
7
|
-
import type { TerminalPlan } from "../../
|
|
8
|
-
import type {
|
|
9
|
-
import type {
|
|
7
|
+
import type { TerminalPlan } from "../../study/plan-types.js";
|
|
8
|
+
import type { StudyDeps } from "../../study/study-deps.js";
|
|
9
|
+
import type { StudyConfig } from "../../study/types.js";
|
|
10
10
|
import type { ObserverResult } from "../../observer/render.js";
|
|
11
11
|
import { type RunAdapterScore, type RunBundle, type RunFeedbackCandidate, type RunScorerProvenance } from "../../run/bundle.js";
|
|
12
12
|
import { type StudyResultIdentity } from "../../run/study-result.js";
|
|
13
|
-
/** Provider-neutral metadata constant: the route's non-secret tag (mirrors
|
|
14
|
-
export declare const
|
|
13
|
+
/** Provider-neutral metadata constant: the route's non-secret tag (mirrors CUA_ACTOR_STUDY_PROVIDER_METADATA). */
|
|
14
|
+
export declare const TERMINAL_PRODUCT_STUDY_PROVIDER_METADATA: {
|
|
15
15
|
readonly mode: "terminal-product-lab";
|
|
16
16
|
readonly tool: "humanish";
|
|
17
17
|
};
|
|
@@ -61,20 +61,20 @@ export interface TerminalProductScoringContext {
|
|
|
61
61
|
transcript: string;
|
|
62
62
|
/** The studied product name (public-safe). */
|
|
63
63
|
product: string;
|
|
64
|
-
/** The
|
|
65
|
-
|
|
64
|
+
/** The study id (the run's scenario scope). */
|
|
65
|
+
studyId: string;
|
|
66
66
|
/** The run id (for building namespaced idempotency keys + evidence pointers). */
|
|
67
67
|
runId: string;
|
|
68
68
|
}
|
|
69
69
|
/**
|
|
70
70
|
* Known spend lines for the terminal cost ledger. Core has no product, media or payment spend
|
|
71
71
|
* signal, so it fills only the provider line from trace tokenUsage when present. A test injects
|
|
72
|
-
* known lines through `
|
|
72
|
+
* known lines through `StudyDeps.costProbe`; absent signals keep the null-discipline default.
|
|
73
73
|
*/
|
|
74
74
|
export type TerminalCostProbe = (context: {
|
|
75
75
|
tokenCostUsd?: number;
|
|
76
76
|
}) => Partial<Record<"product" | "media" | "payment" | "provider", CostLine>> | undefined;
|
|
77
|
-
/** The scorer functions a terminal run calls: `
|
|
77
|
+
/** The scorer functions a terminal run calls: `RunStudyOptions.scorer` without `deriveArtifacts`. */
|
|
78
78
|
export interface TerminalScorer {
|
|
79
79
|
/**
|
|
80
80
|
* The adapter extension seam: product-adapter hooks without forking
|
|
@@ -97,13 +97,13 @@ export interface TerminalScorer {
|
|
|
97
97
|
*/
|
|
98
98
|
deriveFeedback?: (ctx: TerminalProductScoringContext) => RunFeedbackCandidate[] | Promise<RunFeedbackCandidate[]>;
|
|
99
99
|
}
|
|
100
|
-
export interface
|
|
100
|
+
export interface RunTerminalProductStudyOptions {
|
|
101
101
|
/** Cancels post-run analysis only. */
|
|
102
102
|
analysisSignal?: AbortSignal;
|
|
103
|
-
/** Reports the analysis window to onEvent; built by
|
|
104
|
-
emit?: (event:
|
|
103
|
+
/** Reports the analysis window to onEvent; built by normalizeRunStudyOptions. */
|
|
104
|
+
emit?: (event: StudyEvent) => void;
|
|
105
105
|
cwd: string;
|
|
106
|
-
config:
|
|
106
|
+
config: StudyConfig;
|
|
107
107
|
/** Resolved upstream (scenario.mode + CLI override); defaults safe (dry-run). */
|
|
108
108
|
dryRun: boolean;
|
|
109
109
|
open?: boolean;
|
|
@@ -117,7 +117,7 @@ export interface RunTerminalProductLabOptions {
|
|
|
117
117
|
env?: Readonly<Record<string, string | undefined>>;
|
|
118
118
|
scorer?: TerminalScorer;
|
|
119
119
|
/** Test seams: the E2B module, the Observer renderer, the clock and the cost probe. */
|
|
120
|
-
deps?:
|
|
120
|
+
deps?: StudyDeps;
|
|
121
121
|
/**
|
|
122
122
|
* Present only when the scorer was config-declared and loaded by the CLI. Its presence
|
|
123
123
|
* is the "declared" marker: a config-declared terminal scorer returning status:"fail" flips
|
|
@@ -127,10 +127,10 @@ export interface RunTerminalProductLabOptions {
|
|
|
127
127
|
*/
|
|
128
128
|
scorerProvenance?: RunScorerProvenance;
|
|
129
129
|
}
|
|
130
|
-
export interface
|
|
130
|
+
export interface TerminalProductStudyResult extends AutomaticAnalysisResult, StudyResultIdentity<"terminal"> {
|
|
131
131
|
/** True when the bundle verified and (dry-run, or the live session reached a terminal verdict
|
|
132
132
|
* without a harness error + cleanup was proven). The agent's pass/fail is evidence, not the
|
|
133
|
-
*
|
|
133
|
+
* run's exit code. */
|
|
134
134
|
ok: boolean;
|
|
135
135
|
cwd: string;
|
|
136
136
|
/** The registry-resolved actor id that ran (or would run) the session. */
|
|
@@ -171,7 +171,7 @@ export interface TerminalProductLabResult extends AutomaticAnalysisResult, Study
|
|
|
171
171
|
observer?: ObserverResult;
|
|
172
172
|
warnings: string[];
|
|
173
173
|
error?: {
|
|
174
|
-
code: "HUMANISH_STUDY_ANALYSIS_INVALID" | "HUMANISH_STUDY_TASKS_UNSUPPORTED" | "HUMANISH_STUDY_OPTION_UNSUPPORTED" | "HUMANISH_TERMINAL_FAILED" | "HUMANISH_TERMINAL_ACTOR_UNSUPPORTED" | "HUMANISH_TERMINAL_SUBJECT_INVALID" | "HUMANISH_TERMINAL_KEYPLACEMENT_INVALID" | "HUMANISH_TERMINAL_RUNTIME_AUTH_MISSING" | "HUMANISH_TERMINAL_KEYS_MISSING" | "HUMANISH_TERMINAL_CAPS_MISSING" | "HUMANISH_TERMINAL_CAPS_INVALID" | "HUMANISH_TERMINAL_UNPRICED_CAP" | "HUMANISH_TERMINAL_CAPS_EXCEEDED" | "HUMANISH_TERMINAL_CREDENTIAL_DENIED" | "HUMANISH_TERMINAL_CLEANUP_UNPROVEN" | "HUMANISH_RUN_ID_IN_USE";
|
|
174
|
+
code: "HUMANISH_STUDY_ANALYSIS_INVALID" | "HUMANISH_STUDY_TASKS_UNSUPPORTED" | "HUMANISH_STUDY_OPTION_UNSUPPORTED" | "HUMANISH_STUDY_V2_UNSUPPORTED" | "HUMANISH_TERMINAL_FAILED" | "HUMANISH_TERMINAL_ACTOR_UNSUPPORTED" | "HUMANISH_TERMINAL_SUBJECT_INVALID" | "HUMANISH_TERMINAL_KEYPLACEMENT_INVALID" | "HUMANISH_TERMINAL_RUNTIME_AUTH_MISSING" | "HUMANISH_TERMINAL_KEYS_MISSING" | "HUMANISH_TERMINAL_CAPS_MISSING" | "HUMANISH_TERMINAL_CAPS_INVALID" | "HUMANISH_TERMINAL_UNPRICED_CAP" | "HUMANISH_TERMINAL_CAPS_EXCEEDED" | "HUMANISH_TERMINAL_CREDENTIAL_DENIED" | "HUMANISH_TERMINAL_CLEANUP_UNPROVEN" | "HUMANISH_RUN_ID_IN_USE";
|
|
175
175
|
message: string;
|
|
176
176
|
};
|
|
177
177
|
}
|
|
@@ -309,13 +309,13 @@ export interface TerminalLedgers {
|
|
|
309
309
|
/** The no-spend proof derived from `cost`. Never an independent assertion. */
|
|
310
310
|
noSpendProof: NoSpendProof;
|
|
311
311
|
}
|
|
312
|
-
/** What a terminal run takes besides its plan. The plan carries the config, dry run and
|
|
313
|
-
export type TerminalRunInput = Omit<
|
|
314
|
-
/** A live terminal plan: its caps are the fail-closed ones
|
|
312
|
+
/** What a terminal run takes besides its plan. The plan carries the config, dry run and study. */
|
|
313
|
+
export type TerminalRunInput = Omit<RunTerminalProductStudyOptions, "config" | "dryRun">;
|
|
314
|
+
/** A live terminal plan: its caps are the fail-closed ones planTerminalStudy required. */
|
|
315
315
|
export type LiveTerminalPlan = Extract<TerminalPlan, {
|
|
316
316
|
readonly dryRun: false;
|
|
317
317
|
}>;
|
|
318
|
-
export type
|
|
318
|
+
export type TerminalProductStudyErrorCode = NonNullable<TerminalProductStudyResult["error"]>["code"];
|
|
319
319
|
/** The runtime key's command-scoped placement, built by a live run's checks of this machine. */
|
|
320
320
|
export type LiveTerminalAuth = Extract<ReturnType<typeof buildRuntimeAuth>, {
|
|
321
321
|
ok: true;
|
|
@@ -325,8 +325,8 @@ export interface RunLiveTerminalSessionArgs {
|
|
|
325
325
|
input: TerminalRunInput;
|
|
326
326
|
cwd: string;
|
|
327
327
|
warnings: string[];
|
|
328
|
-
failed: (code:
|
|
329
|
-
/** The
|
|
328
|
+
failed: (code: TerminalProductStudyErrorCode, message: string) => TerminalProductStudyResult;
|
|
329
|
+
/** The study's run scope; the live session starts its run in it. */
|
|
330
330
|
scope: RunScope;
|
|
331
331
|
runtimeEnv: LiveTerminalAuth;
|
|
332
332
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {} from "../../analysis/automatic-completion.js";
|
|
2
2
|
import {} from "../../run/bundle.js";
|
|
3
3
|
import {} from "../../run/study-result.js";
|
|
4
|
-
/** Provider-neutral metadata constant: the route's non-secret tag (mirrors
|
|
5
|
-
export const
|
|
4
|
+
/** Provider-neutral metadata constant: the route's non-secret tag (mirrors CUA_ACTOR_STUDY_PROVIDER_METADATA). */
|
|
5
|
+
export const TERMINAL_PRODUCT_STUDY_PROVIDER_METADATA = {
|
|
6
6
|
mode: "terminal-product-lab",
|
|
7
7
|
tool: "humanish",
|
|
8
8
|
};
|
package/dist/run/bundle.d.ts
CHANGED
|
@@ -89,7 +89,7 @@ export interface RunAdapterArtifact {
|
|
|
89
89
|
* Provenance for a config-declared adopter scorer: the repo-relative entry path and a digest
|
|
90
90
|
* of its entry-module bytes, recorded so a `review.scorer.ref`/`--scorer` run states which
|
|
91
91
|
* out-of-tree judgment it attached. Core-computed (path + digest), never adopter-supplied. A library
|
|
92
|
-
* caller (hooks passed directly through
|
|
92
|
+
* caller (hooks passed directly through RunStudyOptions) has implicit provenance, because its code is its
|
|
93
93
|
* provenance, so this block is absent there and every older bundle stays byte-stable + verifiable.
|
|
94
94
|
*
|
|
95
95
|
* The digest pins the entry file's identity only; modules it loads are outside it: a `export { score } from
|
|
@@ -135,7 +135,7 @@ export interface RunEvent {
|
|
|
135
135
|
* One executed (or declared) subject-state seed step. Live records carry execution fields
|
|
136
136
|
* (ok/exitCode/timedOut/durationMs); dry-run "declared, not run" records carry only the
|
|
137
137
|
* declaration (name, phase, command digest). The command itself never persists; the digest
|
|
138
|
-
* pins "same recipe" across bundles while the
|
|
138
|
+
* pins "same recipe" across bundles while the study YAML in the consumer's repo stays the
|
|
139
139
|
* plaintext source of truth (publish-safe by construction).
|
|
140
140
|
*/
|
|
141
141
|
export interface RunSubjectStateStepRecord {
|
|
@@ -336,7 +336,7 @@ export interface RunBundle {
|
|
|
336
336
|
* `lab` and the source convention of older bundles, through studyProvenanceOf.
|
|
337
337
|
*/
|
|
338
338
|
study?: RunStudyProvenance;
|
|
339
|
-
/** `study`'s value,
|
|
339
|
+
/** `study`'s value, as runs saved by 0.108 and earlier wrote it. humanish no longer writes it. */
|
|
340
340
|
lab?: RunStudyProvenance;
|
|
341
341
|
/**
|
|
342
342
|
* Optional, additive run-level cost estimate (humanish.run-cost-summary.v1): the sum of every
|
|
@@ -489,7 +489,7 @@ export interface ReviewSummary {
|
|
|
489
489
|
*/
|
|
490
490
|
participants?: ParticipantOutcomes;
|
|
491
491
|
/**
|
|
492
|
-
* The study's per-task completion rates, present only when the
|
|
492
|
+
* The study's per-task completion rates, present only when the study declared a protocol
|
|
493
493
|
* and at least one session produced a funnel. Absent means no protocol was measured, never that
|
|
494
494
|
* everyone finished.
|
|
495
495
|
*/
|
|
@@ -527,11 +527,11 @@ export interface BundleRun {
|
|
|
527
527
|
readonly mode: RunBundle["mode"];
|
|
528
528
|
readonly createdAt: string;
|
|
529
529
|
/** The manifest the run came from, as the plan carried it to startRun. */
|
|
530
|
-
readonly
|
|
530
|
+
readonly study?: RunStudyProvenance | undefined;
|
|
531
531
|
}
|
|
532
532
|
/**
|
|
533
533
|
* The fields every run bundle starts with, in the saved order. The run supplies its id, mode,
|
|
534
|
-
* start time and
|
|
534
|
+
* start time and study; the route passes the participant count and source. The public target cwd
|
|
535
535
|
* and the run's own artifact root are the defaults.
|
|
536
536
|
*/
|
|
537
537
|
export declare function bundleHead(run: BundleRun, args: {
|
|
@@ -541,7 +541,7 @@ export declare function bundleHead(run: BundleRun, args: {
|
|
|
541
541
|
cwd?: string;
|
|
542
542
|
artifactRoot?: string;
|
|
543
543
|
source: RunBundle["source"];
|
|
544
|
-
}): Pick<RunBundle, "schema" | "publication" | "runId" | "mode" | "simCount" | "createdAt" | "cwd" | "artifactRoot" | "study" | "
|
|
544
|
+
}): Pick<RunBundle, "schema" | "publication" | "runId" | "mode" | "simCount" | "createdAt" | "cwd" | "artifactRoot" | "study" | "source">;
|
|
545
545
|
/** The files every run directory holds, as the bundle names them. */
|
|
546
546
|
export declare function bundleArtifacts(): RunBundle["artifacts"];
|
|
547
547
|
export declare function buildRunSource(args: {
|
package/dist/run/bundle.js
CHANGED
|
@@ -8,7 +8,7 @@ export const REVIEW_SCHEMA = "humanish.review.v1";
|
|
|
8
8
|
export const PUBLIC_TARGET_CWD = "[target-cwd]";
|
|
9
9
|
/**
|
|
10
10
|
* The fields every run bundle starts with, in the saved order. The run supplies its id, mode,
|
|
11
|
-
* start time and
|
|
11
|
+
* start time and study; the route passes the participant count and source. The public target cwd
|
|
12
12
|
* and the run's own artifact root are the defaults.
|
|
13
13
|
*/
|
|
14
14
|
export function bundleHead(run, args) {
|
|
@@ -21,7 +21,7 @@ export function bundleHead(run, args) {
|
|
|
21
21
|
createdAt: run.createdAt,
|
|
22
22
|
cwd: args.cwd ?? PUBLIC_TARGET_CWD,
|
|
23
23
|
artifactRoot: args.artifactRoot ?? path.join(".humanish", "runs", run.runId),
|
|
24
|
-
...studyFields(run.
|
|
24
|
+
...studyFields(run.study),
|
|
25
25
|
source: args.source,
|
|
26
26
|
};
|
|
27
27
|
}
|