humanish 0.107.0 → 0.109.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +73 -69
- package/CHANGELOG.md +27 -0
- package/CONTEXT.md +51 -44
- package/README.md +148 -175
- package/SECURITY.md +16 -26
- package/TELEMETRY.md +8 -6
- package/dist/actors/affordance.d.ts +4 -4
- package/dist/actors/affordance.js +12 -12
- package/dist/actors/agent-session.d.ts +2 -2
- package/dist/actors/agent-session.js +7 -7
- package/dist/actors/codex/app-server-actor-trace.d.ts +1 -1
- package/dist/actors/codex/app-server-actor-trace.js +1 -1
- package/dist/actors/codex/app-server-trace.js +2 -1
- package/dist/actors/codex/app-server-ui.js +1 -1
- package/dist/actors/codex/codex-admission.d.ts +91 -0
- package/dist/actors/codex/codex-admission.js +150 -0
- package/dist/actors/codex/restricted-executable.d.ts +4 -4
- package/dist/actors/codex/restricted-executable.js +8 -8
- package/dist/actors/codex/restricted-launch.d.ts +2 -1
- package/dist/actors/codex/restricted-launch.js +1 -1
- package/dist/actors/codex/restricted-participant.js +20 -18
- package/dist/actors/codex/restricted-policy.d.ts +2 -2
- package/dist/actors/codex/restricted-policy.js +2 -2
- package/dist/actors/codex/restricted-session.d.ts +3 -3
- package/dist/actors/codex/restricted-session.js +10 -5
- package/dist/actors/computer-use/actor.d.ts +18 -18
- package/dist/actors/computer-use/actor.js +4 -4
- package/dist/actors/computer-use/admission-limit.d.ts +3 -3
- package/dist/actors/computer-use/admission-limit.js +4 -4
- package/dist/actors/computer-use/executor-error.d.ts +2 -2
- package/dist/actors/computer-use/executor-error.js +3 -3
- package/dist/actors/computer-use/loop/actions.d.ts +3 -3
- package/dist/actors/computer-use/loop/actions.js +15 -15
- package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
- package/dist/actors/computer-use/loop/backstop.js +14 -12
- package/dist/actors/computer-use/loop/debrief.js +2 -2
- package/dist/actors/computer-use/loop/ending.d.ts +6 -6
- package/dist/actors/computer-use/loop/ending.js +18 -17
- package/dist/actors/computer-use/loop/observation.d.ts +2 -2
- package/dist/actors/computer-use/loop/observation.js +15 -14
- package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
- package/dist/actors/computer-use/loop/provider-call.js +12 -12
- package/dist/actors/computer-use/loop/session.d.ts +4 -4
- package/dist/actors/computer-use/loop/session.js +4 -4
- package/dist/actors/computer-use/loop/spend.d.ts +1 -1
- package/dist/actors/computer-use/loop/spend.js +1 -1
- package/dist/actors/computer-use/loop/trace.js +11 -9
- package/dist/actors/computer-use/loop/types.d.ts +47 -45
- package/dist/actors/computer-use/loop/usage.d.ts +2 -2
- package/dist/actors/computer-use/loop/usage.js +2 -2
- package/dist/actors/computer-use/loop.d.ts +6 -1
- package/dist/actors/computer-use/loop.js +26 -4
- package/dist/actors/computer-use/openai-context.d.ts +37 -0
- package/dist/actors/computer-use/openai-context.js +214 -0
- package/dist/actors/computer-use/openai-provider.d.ts +13 -10
- package/dist/actors/computer-use/openai-provider.js +52 -41
- package/dist/actors/computer-use/openai-requests.d.ts +36 -10
- package/dist/actors/computer-use/openai-requests.js +82 -15
- package/dist/actors/computer-use/openai-wire.d.ts +19 -7
- package/dist/actors/computer-use/openai-wire.js +36 -34
- package/dist/actors/computer-use/provider-error.d.ts +4 -4
- package/dist/actors/computer-use/provider-error.js +6 -6
- package/dist/actors/contract.d.ts +82 -47
- package/dist/actors/contract.js +30 -24
- package/dist/actors/local-agent/claude-session.d.ts +1 -1
- package/dist/actors/local-agent/claude-session.js +13 -12
- package/dist/actors/local-agent/cli.d.ts +9 -7
- package/dist/actors/local-agent/cli.js +24 -28
- package/dist/actors/local-agent/readiness.d.ts +2 -2
- package/dist/actors/local-agent/readiness.js +4 -4
- package/dist/actors/reasoning-effort.js +8 -8
- package/dist/actors/registry.d.ts +12 -12
- package/dist/actors/registry.js +21 -20
- package/dist/actors/scripted-browser/actor.d.ts +10 -10
- package/dist/actors/scripted-browser/actor.js +17 -17
- package/dist/actors/scripted-browser/browser-command.js +1 -1
- package/dist/actors/scripted-browser/steps.js +1 -1
- package/dist/actors/scripted-browser/types.d.ts +1 -1
- package/dist/actors/stop-conditions.d.ts +1 -1
- package/dist/analysis/automatic-completion.d.ts +7 -7
- package/dist/analysis/automatic-completion.js +1 -1
- package/dist/analysis/automatic-config.d.ts +6 -6
- package/dist/analysis/automatic-config.js +1 -1
- package/dist/analysis/codex-config.d.ts +6 -2
- package/dist/analysis/codex-config.js +22 -14
- package/dist/analysis/execute.d.ts +1 -1
- package/dist/analysis/execute.js +1 -1
- package/dist/analysis/service.js +5 -5
- package/dist/analysis/types.d.ts +6 -0
- package/dist/browser-control/client.js +16 -16
- package/dist/browser-control/dispatcher.js +4 -4
- package/dist/browser-control/protocol.js +14 -14
- package/dist/browser-control/recording-transfer.js +4 -4
- package/dist/browser-control/transport.js +7 -7
- package/dist/cli/commands/analysis-signals.d.ts +2 -2
- package/dist/cli/commands/analyze.js +19 -16
- package/dist/cli/commands/codex.js +9 -9
- package/dist/cli/commands/comms.js +48 -35
- package/dist/cli/commands/feedback.js +20 -21
- package/dist/cli/commands/migrate.d.ts +4 -0
- package/dist/cli/commands/migrate.js +65 -0
- package/dist/cli/commands/observe.d.ts +0 -1
- package/dist/cli/commands/observe.js +136 -112
- package/dist/cli/commands/run-command.d.ts +10 -0
- package/dist/cli/commands/run-command.js +85 -0
- package/dist/cli/commands/runs.js +136 -139
- package/dist/cli/commands/setup.d.ts +2 -2
- package/dist/cli/commands/setup.js +27 -24
- package/dist/cli/commands/study-format.d.ts +9 -0
- package/dist/cli/commands/{lab-format.js → study-format.js} +39 -27
- package/dist/cli/commands/{lab-route-computer-use.d.ts → study-route-computer-use.d.ts} +6 -6
- package/dist/cli/commands/{lab-route-computer-use.js → study-route-computer-use.js} +17 -18
- package/dist/cli/commands/{lab-route-open.d.ts → study-route-open.d.ts} +4 -4
- package/dist/cli/commands/{lab-route-open.js → study-route-open.js} +2 -2
- package/dist/cli/commands/{lab-route-preview.d.ts → study-route-preview.d.ts} +7 -7
- package/dist/cli/commands/{lab-route-preview.js → study-route-preview.js} +7 -6
- package/dist/cli/commands/study-route-run.d.ts +19 -0
- package/dist/cli/commands/{lab-route-run.js → study-route-run.js} +6 -6
- package/dist/cli/commands/study-route-scripted.d.ts +17 -0
- package/dist/cli/commands/{lab-route-scripted.js → study-route-scripted.js} +4 -4
- package/dist/cli/commands/{lab-route-shared-world.d.ts → study-route-shared-world.d.ts} +5 -5
- package/dist/cli/commands/{lab-route-shared-world.js → study-route-shared-world.js} +10 -10
- package/dist/cli/commands/study-route-terminal.d.ts +17 -0
- package/dist/cli/commands/{lab-route-terminal.js → study-route-terminal.js} +4 -4
- package/dist/cli/commands/study-run.d.ts +9 -0
- package/dist/cli/commands/{lab-run.js → study-run.js} +44 -45
- package/dist/cli/commands/{lab-scorer.d.ts → study-scorer.d.ts} +7 -7
- package/dist/cli/commands/{lab-scorer.js → study-scorer.js} +2 -2
- package/dist/cli/commands/study.d.ts +3 -0
- package/dist/cli/commands/study.js +146 -0
- package/dist/cli/commands/tui.d.ts +4 -4
- package/dist/cli/commands/tui.js +31 -31
- package/dist/cli/commands/watch.js +71 -121
- package/dist/cli/deprecations.d.ts +6 -0
- package/dist/cli/deprecations.js +18 -0
- package/dist/cli/doctor.d.ts +18 -8
- package/dist/cli/doctor.js +114 -59
- package/dist/cli/first-run-path.d.ts +15 -13
- package/dist/cli/first-run-path.js +35 -33
- package/dist/cli/io.d.ts +44 -9
- package/dist/cli/io.js +98 -23
- package/dist/cli/observer-follow.d.ts +3 -3
- package/dist/cli/observer-follow.js +6 -7
- package/dist/cli/orientation.d.ts +10 -7
- package/dist/cli/orientation.js +89 -47
- package/dist/cli/product-sentence.d.ts +6 -0
- package/dist/cli/product-sentence.js +6 -0
- package/dist/cli/program.d.ts +6 -1
- package/dist/cli/program.js +111 -43
- package/dist/cli/telemetry.d.ts +16 -16
- package/dist/cli/telemetry.js +46 -44
- package/dist/cli.js +1 -1
- package/dist/comms/capture-surface.d.ts +13 -12
- package/dist/comms/capture-surface.js +23 -22
- package/dist/comms/catch-host.d.ts +7 -7
- package/dist/comms/catch-host.js +17 -17
- package/dist/comms/connections.d.ts +1 -1
- package/dist/comms/connections.js +2 -2
- package/dist/comms/email-catch.d.ts +3 -3
- package/dist/comms/email-catch.js +8 -8
- package/dist/comms/external-evidence.d.ts +5 -5
- package/dist/comms/external-evidence.js +5 -4
- package/dist/comms/extract.js +2 -2
- package/dist/comms/fake-inbox.d.ts +3 -3
- package/dist/comms/fake-inbox.js +3 -3
- package/dist/comms/receiving-render.d.ts +1 -1
- package/dist/comms/receiving-render.js +2 -2
- package/dist/comms/receiving-runtime.d.ts +4 -4
- package/dist/comms/sandbox-catch-script.d.ts +6 -6
- package/dist/comms/sandbox-catch-script.js +6 -6
- package/dist/comms/sandbox-catch.d.ts +38 -39
- package/dist/comms/sandbox-catch.js +36 -37
- package/dist/comms/setup.d.ts +2 -2
- package/dist/comms/setup.js +56 -25
- package/dist/comms/thread-evidence.d.ts +1 -1
- package/dist/comms/thread-evidence.js +6 -6
- package/dist/comms/types.d.ts +6 -6
- package/dist/comms/types.js +3 -3
- package/dist/evidence/frame-signature.d.ts +1 -1
- package/dist/evidence/frame-signature.js +4 -4
- package/dist/evidence/redaction.d.ts +3 -3
- package/dist/evidence/redaction.js +4 -4
- package/dist/feedback/draft.js +38 -80
- package/dist/feedback/export-bundle.js +1 -1
- package/dist/feedback/export.d.ts +5 -1
- package/dist/feedback/export.js +10 -10
- package/dist/feedback/feedback.d.ts +2 -2
- package/dist/feedback/feedback.js +21 -3
- package/dist/feedback/proof.d.ts +1 -1
- package/dist/feedback/proof.js +2 -2
- package/dist/guest/bootstrap.js +6 -6
- package/dist/guest/browser-tools.js +8 -8
- package/dist/guest/chromium-text.js +19 -19
- package/dist/guest/desktop-executor.d.ts +2 -2
- package/dist/guest/desktop-executor.js +20 -20
- package/dist/guest/desktop-keys.js +4 -4
- package/dist/guest/desktop-media.d.ts +2 -2
- package/dist/guest/desktop-media.js +16 -16
- package/dist/guest/desktop-native.d.ts +1 -1
- package/dist/guest/desktop-native.js +10 -10
- package/dist/guest/runtime-desktop.js +2 -2
- package/dist/guest/runtime-processes.d.ts +2 -2
- package/dist/guest/runtime-processes.js +2 -2
- package/dist/guest/runtime.js +6 -6
- package/dist/index.d.ts +14 -14
- package/dist/index.js +8 -8
- package/dist/keys/key-resolution.d.ts +5 -5
- package/dist/keys/key-resolution.js +23 -23
- package/dist/observer/artifact.d.ts +2 -2
- package/dist/observer/artifact.js +7 -7
- package/dist/observer/data.d.ts +6 -6
- package/dist/observer/data.js +5 -4
- package/dist/observer/exposure.d.ts +1 -1
- package/dist/observer/exposure.js +11 -11
- package/dist/observer/http.js +1 -1
- package/dist/observer/library.d.ts +3 -1
- package/dist/observer/library.js +8 -3
- package/dist/observer/listen.js +5 -4
- package/dist/observer/render.d.ts +1 -1
- package/dist/observer/render.js +17 -6
- package/dist/observer/run-routes.d.ts +4 -3
- package/dist/observer/run-routes.js +38 -13
- package/dist/observer/serve.d.ts +1 -1
- package/dist/observer/serve.js +7 -3
- package/dist/observer/tunnel.js +1 -1
- package/dist/observer-app.html +4 -4
- package/dist/routes/computer-use/bundle-parts.d.ts +9 -9
- package/dist/routes/computer-use/bundle-parts.js +18 -17
- package/dist/routes/computer-use/bundle.d.ts +2 -2
- package/dist/routes/computer-use/bundle.js +10 -9
- package/dist/routes/computer-use/e2b-desktop/comms.d.ts +6 -6
- package/dist/routes/computer-use/e2b-desktop/comms.js +18 -17
- package/dist/routes/computer-use/e2b-desktop/desktop.js +4 -4
- package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +5 -4
- package/dist/routes/computer-use/e2b-desktop/fidelity.js +11 -10
- package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +1 -1
- package/dist/routes/computer-use/e2b-desktop/prepare.js +10 -10
- package/dist/routes/computer-use/e2b-desktop/start.js +7 -7
- package/dist/routes/computer-use/e2b-desktop/state.d.ts +2 -2
- package/dist/routes/computer-use/e2b-desktop/teardown.js +2 -2
- package/dist/routes/computer-use/external-comms.d.ts +4 -4
- package/dist/routes/computer-use/external-comms.js +1 -1
- package/dist/routes/computer-use/fanout-bundle.js +27 -26
- package/dist/routes/computer-use/fanout-records.js +12 -13
- package/dist/routes/computer-use/live-flush.d.ts +4 -4
- package/dist/routes/computer-use/live-flush.js +6 -6
- package/dist/routes/computer-use/live-phase.d.ts +5 -4
- package/dist/routes/computer-use/live-phase.js +8 -8
- package/dist/routes/computer-use/local-tree-pack.d.ts +5 -5
- package/dist/routes/computer-use/local-tree-pack.js +1 -1
- package/dist/routes/computer-use/local-vm.d.ts +8 -8
- package/dist/routes/computer-use/local-vm.js +3 -3
- package/dist/routes/computer-use/participant-desktop.d.ts +7 -7
- package/dist/routes/computer-use/participant-desktop.js +5 -5
- package/dist/routes/computer-use/participant-execution.d.ts +4 -4
- package/dist/routes/computer-use/participant-execution.js +10 -10
- package/dist/routes/computer-use/participant-model.d.ts +6 -0
- package/dist/routes/computer-use/participant-model.js +33 -15
- package/dist/routes/computer-use/participant-prompt.d.ts +15 -15
- package/dist/routes/computer-use/participant-prompt.js +9 -9
- package/dist/routes/computer-use/participant-runs.d.ts +16 -16
- package/dist/routes/computer-use/participant-runs.js +26 -25
- package/dist/routes/computer-use/plan.d.ts +12 -12
- package/dist/routes/computer-use/plan.js +42 -42
- package/dist/routes/computer-use/preflight.d.ts +5 -5
- package/dist/routes/computer-use/preflight.js +25 -25
- package/dist/routes/computer-use/rerun-selection.d.ts +1 -1
- package/dist/routes/computer-use/rerun-selection.js +4 -3
- package/dist/routes/computer-use/result.d.ts +4 -4
- package/dist/routes/computer-use/result.js +22 -21
- package/dist/routes/computer-use/route.d.ts +12 -11
- package/dist/routes/computer-use/route.js +31 -30
- package/dist/routes/computer-use/self-report.d.ts +7 -7
- package/dist/routes/computer-use/self-report.js +32 -32
- package/dist/routes/computer-use/setup.d.ts +23 -23
- package/dist/routes/computer-use/setup.js +28 -29
- package/dist/routes/computer-use/single-bundle.d.ts +11 -11
- package/dist/routes/computer-use/single-bundle.js +40 -41
- package/dist/routes/computer-use/subject-projection.d.ts +4 -4
- package/dist/routes/computer-use/subject-projection.js +6 -6
- package/dist/routes/computer-use/types.d.ts +71 -73
- package/dist/routes/computer-use/types.js +12 -12
- package/dist/routes/preview.d.ts +13 -7
- package/dist/routes/preview.js +11 -7
- package/dist/routes/scripted/bundle.d.ts +7 -7
- package/dist/routes/scripted/bundle.js +20 -18
- package/dist/routes/scripted/plan.d.ts +8 -8
- package/dist/routes/scripted/plan.js +13 -13
- package/dist/routes/scripted/result.d.ts +3 -3
- package/dist/routes/scripted/result.js +13 -13
- package/dist/routes/scripted/route.d.ts +9 -9
- package/dist/routes/scripted/route.js +15 -16
- package/dist/routes/scripted/scenario.d.ts +1 -1
- package/dist/routes/scripted/scenario.js +5 -5
- package/dist/routes/scripted/setup.d.ts +6 -6
- package/dist/routes/scripted/setup.js +8 -8
- package/dist/routes/scripted/subject.d.ts +5 -5
- package/dist/routes/scripted/subject.js +4 -4
- package/dist/routes/scripted/surface-records.d.ts +1 -1
- package/dist/routes/scripted/surface-records.js +4 -4
- package/dist/routes/scripted/surface-sessions.d.ts +3 -3
- package/dist/routes/scripted/types.d.ts +18 -20
- package/dist/routes/scripted/types.js +2 -2
- package/dist/routes/shared-world/bundle-records.js +11 -10
- package/dist/routes/shared-world/bundle.d.ts +5 -5
- package/dist/routes/shared-world/bundle.js +46 -43
- package/dist/routes/shared-world/checkpoints.d.ts +4 -4
- package/dist/routes/shared-world/checkpoints.js +2 -2
- package/dist/routes/shared-world/comms.d.ts +14 -14
- package/dist/routes/shared-world/comms.js +19 -18
- package/dist/routes/shared-world/external-public.d.ts +4 -3
- package/dist/routes/shared-world/external-public.js +16 -12
- package/dist/routes/shared-world/handoff.d.ts +7 -6
- package/dist/routes/shared-world/handoff.js +65 -57
- package/dist/routes/shared-world/lobby-code.d.ts +2 -2
- package/dist/routes/shared-world/lobby-code.js +9 -9
- package/dist/routes/shared-world/participant-specs.d.ts +10 -9
- package/dist/routes/shared-world/participant-specs.js +38 -31
- package/dist/routes/shared-world/plan.d.ts +9 -9
- package/dist/routes/shared-world/plan.js +16 -16
- package/dist/routes/shared-world/provenance.d.ts +2 -2
- package/dist/routes/shared-world/provenance.js +2 -2
- package/dist/routes/shared-world/provisioned.d.ts +8 -8
- package/dist/routes/shared-world/provisioned.js +18 -17
- package/dist/routes/shared-world/result.d.ts +6 -6
- package/dist/routes/shared-world/result.js +29 -29
- package/dist/routes/shared-world/route.d.ts +11 -11
- package/dist/routes/shared-world/route.js +40 -39
- package/dist/routes/shared-world/setup.d.ts +16 -16
- package/dist/routes/shared-world/setup.js +23 -23
- package/dist/routes/shared-world/types.d.ts +55 -53
- package/dist/routes/shared-world/types.js +4 -4
- package/dist/routes/terminal/adapter.d.ts +5 -5
- package/dist/routes/terminal/adapter.js +9 -9
- package/dist/routes/terminal/bundle.d.ts +13 -13
- package/dist/routes/terminal/bundle.js +28 -27
- package/dist/routes/terminal/credentials.d.ts +8 -8
- package/dist/routes/terminal/credentials.js +12 -12
- package/dist/routes/terminal/dry-run.d.ts +4 -4
- package/dist/routes/terminal/dry-run.js +12 -12
- package/dist/routes/terminal/encoding.js +2 -2
- package/dist/routes/terminal/ledger.d.ts +5 -5
- package/dist/routes/terminal/ledger.js +14 -14
- package/dist/routes/terminal/lifetime.d.ts +1 -1
- package/dist/routes/terminal/lifetime.js +1 -1
- package/dist/routes/terminal/live-finish.d.ts +2 -2
- package/dist/routes/terminal/live-finish.js +10 -10
- package/dist/routes/terminal/live-sandbox.d.ts +2 -2
- package/dist/routes/terminal/live-sandbox.js +15 -15
- package/dist/routes/terminal/participant-text.js +2 -1
- package/dist/routes/terminal/persona.d.ts +2 -2
- package/dist/routes/terminal/persona.js +3 -3
- package/dist/routes/terminal/plan.d.ts +7 -7
- package/dist/routes/terminal/plan.js +15 -15
- package/dist/routes/terminal/recorder.js +2 -2
- package/dist/routes/terminal/result.d.ts +5 -5
- package/dist/routes/terminal/result.js +14 -14
- package/dist/routes/terminal/route.d.ts +9 -9
- package/dist/routes/terminal/route.js +19 -20
- package/dist/routes/terminal/sandbox.d.ts +1 -1
- package/dist/routes/terminal/sandbox.js +1 -1
- package/dist/routes/terminal/session.d.ts +5 -5
- package/dist/routes/terminal/session.js +14 -13
- package/dist/routes/terminal/token-usage.d.ts +1 -1
- package/dist/routes/terminal/token-usage.js +7 -8
- package/dist/routes/terminal/trace.d.ts +4 -4
- package/dist/routes/terminal/trace.js +2 -2
- package/dist/routes/terminal/types.d.ts +48 -50
- package/dist/routes/terminal/types.js +5 -5
- package/dist/run/bundle-shape.js +3 -3
- package/dist/run/bundle.d.ts +49 -49
- package/dist/run/bundle.js +3 -2
- package/dist/run/cost-summary.js +3 -3
- package/dist/run/costs.d.ts +23 -0
- package/dist/run/costs.js +79 -44
- package/dist/run/detail.d.ts +6 -6
- package/dist/run/detail.js +4 -4
- package/dist/run/dry-run-inputs.d.ts +1 -1
- package/dist/run/dry-run-inputs.js +2 -2
- package/dist/run/dry-run.js +20 -20
- package/dist/run/judge.d.ts +19 -13
- package/dist/run/judge.js +18 -8
- package/dist/run/outcomes.d.ts +1 -1
- package/dist/run/participant.d.ts +1 -1
- package/dist/run/paths.d.ts +1 -1
- package/dist/run/paths.js +1 -1
- package/dist/run/preflight-receipts.js +1 -1
- package/dist/run/pricing.d.ts +11 -6
- package/dist/run/pricing.js +22 -15
- package/dist/run/projection.d.ts +46 -46
- package/dist/run/projection.js +57 -57
- package/dist/run/reclaim.d.ts +1 -1
- package/dist/run/reclaim.js +3 -3
- package/dist/run/results.d.ts +5 -5
- package/dist/run/run-cost.d.ts +53 -0
- package/dist/run/run-cost.js +105 -0
- package/dist/run/run-index-analysis.d.ts +15 -0
- package/dist/run/run-index-analysis.js +77 -0
- package/dist/run/run-index.d.ts +19 -7
- package/dist/run/run-index.js +77 -64
- package/dist/run/run-not-found.d.ts +5 -0
- package/dist/run/run-not-found.js +15 -0
- package/dist/run/run.d.ts +6 -5
- package/dist/run/run.js +3 -3
- package/dist/run/sandbox-receipts.d.ts +2 -2
- package/dist/run/sandbox-receipts.js +3 -3
- package/dist/run/shared-world-evidence.d.ts +37 -36
- package/dist/run/shared-world-evidence.js +4 -4
- package/dist/run/shared-world-shape.d.ts +1 -1
- package/dist/run/shared-world-shape.js +7 -7
- package/dist/run/stats.d.ts +14 -8
- package/dist/run/stats.js +121 -63
- package/dist/run/status.d.ts +16 -29
- package/dist/run/status.js +10 -29
- package/dist/run/stored-runs.js +2 -1
- package/dist/run/stream-shape.js +1 -1
- package/dist/run/streams.d.ts +7 -7
- package/dist/run/study-provenance.d.ts +49 -0
- package/dist/run/study-provenance.js +66 -0
- package/dist/run/study-result.d.ts +11 -0
- package/dist/run/study-result.js +9 -0
- package/dist/run/text.d.ts +2 -0
- package/dist/run/text.js +4 -0
- package/dist/run-study.d.ts +112 -0
- package/dist/{run-lab.js → run-study.js} +52 -47
- package/dist/{lab → study}/adapter-extension.d.ts +15 -27
- package/dist/{lab → study}/adapter-extension.js +10 -45
- package/dist/{lab → study}/adapter-scorer-loader.d.ts +17 -17
- package/dist/{lab → study}/adapter-scorer-loader.js +34 -34
- package/dist/study/composition-rules.d.ts +7 -0
- package/dist/{lab → study}/composition-rules.js +53 -53
- package/dist/study/config.d.ts +15 -0
- package/dist/{lab → study}/config.js +98 -41
- package/dist/study/convert.d.ts +33 -0
- package/dist/study/convert.js +432 -0
- package/dist/{lab → study}/device-presets.d.ts +10 -10
- package/dist/{lab → study}/device-presets.js +11 -11
- package/dist/study/discover.d.ts +75 -0
- package/dist/{lab → study}/discover.js +134 -95
- package/dist/{lab → study}/doctor.d.ts +19 -12
- package/dist/{lab → study}/doctor.js +58 -20
- package/dist/study/field-paths.d.ts +12 -0
- package/dist/study/field-paths.js +126 -0
- package/dist/study/files.d.ts +26 -0
- package/dist/study/files.js +44 -0
- package/dist/{lab → study}/init-templates.d.ts +2 -2
- package/dist/study/init-templates.js +421 -0
- package/dist/{lab → study}/init.d.ts +2 -2
- package/dist/{lab → study}/init.js +46 -11
- package/dist/study/keys.d.ts +4 -0
- package/dist/{lab → study}/keys.js +46 -12
- package/dist/study/migrate.d.ts +48 -0
- package/dist/study/migrate.js +408 -0
- package/dist/study/owned-files.d.ts +38 -0
- package/dist/study/owned-files.js +182 -0
- package/dist/{lab → study}/parse/actors.d.ts +5 -5
- package/dist/{lab → study}/parse/actors.js +14 -14
- package/dist/study/parse/comms.d.ts +12 -0
- package/dist/{lab → study}/parse/comms.js +5 -5
- package/dist/study/parse/execution.d.ts +19 -0
- package/dist/{lab → study}/parse/execution.js +13 -13
- package/dist/study/parse/study-v3.d.ts +21 -0
- package/dist/study/parse/study-v3.js +259 -0
- package/dist/study/parse/subject-state.d.ts +30 -0
- package/dist/{lab → study}/parse/subject-state.js +19 -19
- package/dist/{lab → study}/parse/subject.d.ts +3 -3
- package/dist/{lab → study}/parse/subject.js +34 -34
- package/dist/{lab → study}/parse/values.d.ts +3 -3
- package/dist/{lab → study}/parse/values.js +3 -3
- package/dist/{lab → study}/persona-resolve.d.ts +8 -8
- package/dist/{lab → study}/persona-resolve.js +6 -6
- package/dist/{lab → study}/plan-base.d.ts +7 -7
- package/dist/{lab → study}/plan-base.js +1 -1
- package/dist/{lab → study}/plan-participants.d.ts +12 -12
- package/dist/{lab → study}/plan-participants.js +4 -4
- package/dist/{lab → study}/plan-types.d.ts +31 -31
- package/dist/{lab → study}/plan-types.js +2 -2
- package/dist/study/plan.d.ts +13 -0
- package/dist/study/plan.js +101 -0
- package/dist/study/preflight-probes.d.ts +3 -0
- package/dist/{lab → study}/preflight-probes.js +20 -19
- package/dist/study/preflight-result.d.ts +8 -0
- package/dist/{lab → study}/preflight-result.js +5 -4
- package/dist/study/preflight.d.ts +94 -0
- package/dist/{lab → study}/preflight.js +12 -12
- package/dist/{lab → study}/requirements.d.ts +3 -3
- package/dist/{lab → study}/requirements.js +1 -1
- package/dist/study/route-inputs.d.ts +28 -0
- package/dist/{lab → study}/route-inputs.js +1 -1
- package/dist/{lab → study}/routing.d.ts +39 -33
- package/dist/{lab → study}/routing.js +60 -29
- package/dist/{lab/run-lab-events.d.ts → study/run-study-events.d.ts} +10 -13
- package/dist/{lab/run-lab-events.js → study/run-study-events.js} +3 -9
- package/dist/{lab/run-lab-homes.d.ts → study/run-study-homes.d.ts} +21 -18
- package/dist/{lab/run-lab-homes.js → study/run-study-homes.js} +1 -1
- package/dist/study/run-study-options.d.ts +28 -0
- package/dist/{lab/run-lab-options.js → study/run-study-options.js} +29 -25
- package/dist/{lab/lab-deps.d.ts → study/study-deps.d.ts} +8 -13
- package/dist/{lab/lab-deps.js → study/study-deps.js} +2 -2
- package/dist/{lab → study}/summary.d.ts +16 -15
- package/dist/{lab → study}/summary.js +21 -21
- package/dist/{lab → study}/tasks.d.ts +18 -18
- package/dist/{lab → study}/tasks.js +14 -14
- package/dist/{lab → study}/types.d.ts +202 -196
- package/dist/{lab → study}/types.js +3 -1
- package/dist/{lab → study}/validation.d.ts +27 -27
- package/dist/{lab → study}/validation.js +53 -51
- package/dist/study/warnings.d.ts +12 -0
- package/dist/{lab → study}/warnings.js +62 -34
- package/dist/subject/clone.d.ts +7 -7
- package/dist/subject/clone.js +2 -2
- package/dist/subject/desktop-cli.d.ts +1 -1
- package/dist/subject/desktop-cli.js +2 -2
- package/dist/subject/local-tree-archive.d.ts +2 -2
- package/dist/subject/local-tree-archive.js +4 -4
- package/dist/subject/local-tree.d.ts +4 -4
- package/dist/subject/node-bootstrap.js +1 -1
- package/dist/subject/runtime.js +9 -10
- package/dist/subject/serve.d.ts +5 -5
- package/dist/subject/serve.js +3 -3
- package/dist/subject/state.d.ts +4 -4
- package/dist/subject/state.js +1 -1
- package/dist/subject/steps.d.ts +6 -6
- package/dist/subject/steps.js +5 -5
- package/dist/substrates/command-failure.d.ts +3 -3
- package/dist/substrates/command-failure.js +3 -3
- package/dist/substrates/desktop-session.js +2 -2
- package/dist/substrates/detached.d.ts +6 -6
- package/dist/substrates/detached.js +7 -7
- package/dist/substrates/e2b/cdp-probe.d.ts +9 -9
- package/dist/substrates/e2b/cdp-probe.js +14 -17
- package/dist/substrates/e2b/desktop-browser.d.ts +6 -6
- package/dist/substrates/e2b/desktop-browser.js +9 -9
- package/dist/substrates/e2b/desktop-cdp.d.ts +10 -10
- package/dist/substrates/e2b/desktop-cdp.js +9 -9
- package/dist/substrates/e2b/desktop-executor.d.ts +2 -2
- package/dist/substrates/e2b/desktop-executor.js +13 -13
- package/dist/substrates/e2b/desktop-geometry.d.ts +4 -4
- package/dist/substrates/e2b/desktop-geometry.js +8 -8
- package/dist/substrates/e2b/desktop-media.d.ts +4 -4
- package/dist/substrates/e2b/desktop-media.js +1 -1
- package/dist/substrates/e2b/desktop-screenshot-cleanup.d.ts +3 -3
- package/dist/substrates/e2b/desktop-screenshot-cleanup.js +3 -3
- package/dist/substrates/e2b/lifetime.js +1 -1
- package/dist/substrates/e2b/sandbox.d.ts +4 -4
- package/dist/substrates/e2b/sandbox.js +2 -2
- package/dist/substrates/e2b/sdk.d.ts +12 -12
- package/dist/substrates/e2b/sdk.js +7 -7
- package/dist/substrates/local/runtime-config.d.ts +4 -4
- package/dist/substrates/local/runtime-config.js +4 -4
- package/dist/tui/actions.d.ts +1 -1
- package/dist/tui/actions.js +13 -13
- package/dist/tui/contract.d.ts +23 -23
- package/dist/tui/contract.js +11 -11
- package/dist/tui/launch.d.ts +7 -7
- package/dist/tui/launch.js +36 -31
- package/dist/tui/project.js +5 -5
- package/dist/tui-app.js +139 -139
- package/dist/verify/actor.d.ts +8 -8
- package/dist/verify/actor.js +36 -36
- package/dist/verify/artifacts.d.ts +2 -2
- package/dist/verify/artifacts.js +3 -3
- package/dist/verify/context-growth.d.ts +9 -0
- package/dist/verify/context-growth.js +62 -0
- package/dist/verify/costs.d.ts +6 -6
- package/dist/verify/costs.js +8 -8
- package/dist/verify/shared-world-concurrent.d.ts +2 -2
- package/dist/verify/shared-world-concurrent.js +79 -76
- package/dist/verify/shared-world.d.ts +2 -2
- package/dist/verify/shared-world.js +16 -16
- package/dist/verify/subject.d.ts +5 -5
- package/dist/verify/subject.js +19 -19
- package/dist/verify/verify.js +94 -44
- package/docs/README.md +25 -32
- package/docs/architecture/actor-contract.md +60 -91
- package/docs/architecture/browser-control.md +1 -1
- package/docs/architecture/desktop-sessions.md +7 -7
- package/docs/architecture/external-public-shared-world.md +68 -65
- package/docs/architecture/github-feedback-loop.md +2 -5
- package/docs/architecture/guest-desktop.md +2 -2
- package/docs/architecture/observer.md +34 -34
- package/docs/architecture/restricted-codex-analysis.md +34 -28
- package/docs/architecture/serve.md +34 -37
- package/docs/architecture/state-driven-executor.md +55 -58
- package/docs/architecture/task-protocol-support.md +6 -6
- package/docs/architecture/terminal-product-route.md +70 -110
- package/docs/contracts/README.md +24 -0
- package/docs/contracts/adapter-admission.md +3 -3
- package/docs/contracts/adapter-fixtures.md +4 -7
- package/docs/contracts/core.md +1 -3
- package/docs/contracts/errors.md +62 -0
- package/docs/contracts/feedback.md +8 -9
- package/docs/contracts/policy.md +7 -12
- package/docs/contracts/run-bundle.md +42 -44
- package/docs/contracts/schemas.md +446 -368
- package/docs/contracts/study-analysis.md +7 -4
- package/docs/contracts/study-costs.md +28 -9
- package/docs/decisions/0001-run-bundle-is-the-source-of-truth.md +1 -1
- package/docs/decisions/0002-observer-is-one-self-contained-file.md +2 -2
- package/docs/decisions/0003-contained-paths-and-cleanup-authority.md +3 -3
- package/docs/principles/actor-fidelity.md +4 -4
- package/docs/principles/engineering.md +3 -3
- package/docs/principles/invariants-and-defaults.md +38 -38
- package/docs/principles/self-driving-harness.md +1 -5
- package/docs/principles/three-roles.md +1 -1
- package/docs/product/automatic-analysis.md +7 -7
- package/examples/README.md +1 -1
- package/examples/participant/README.md +5 -5
- package/examples/participant/run.mjs +11 -10
- package/examples/scorer/README.md +3 -3
- package/examples/scorer/run.mjs +11 -12
- package/examples/scorer/scorer.mjs +3 -3
- package/package.json +16 -17
- package/skills/humanish/SKILL.md +64 -60
- package/skills/humanish/agents/openai.yaml +1 -1
- package/AGENTS.md +0 -99
- package/CONTRIBUTING.md +0 -148
- package/dist/actors/codex/qualified-versions.d.ts +0 -72
- package/dist/actors/codex/qualified-versions.js +0 -132
- package/dist/cli/commands/lab-format.d.ts +0 -8
- package/dist/cli/commands/lab-route-run.d.ts +0 -19
- package/dist/cli/commands/lab-route-scripted.d.ts +0 -17
- package/dist/cli/commands/lab-route-terminal.d.ts +0 -17
- package/dist/cli/commands/lab-run.d.ts +0 -9
- package/dist/cli/commands/lab.d.ts +0 -3
- package/dist/cli/commands/lab.js +0 -199
- package/dist/cli/renamed-options.d.ts +0 -11
- package/dist/cli/renamed-options.js +0 -18
- package/dist/lab/composition-rules.d.ts +0 -7
- package/dist/lab/config.d.ts +0 -7
- package/dist/lab/discover.d.ts +0 -65
- package/dist/lab/init-templates.js +0 -416
- package/dist/lab/keys.d.ts +0 -2
- package/dist/lab/parse/comms.d.ts +0 -12
- package/dist/lab/parse/execution.d.ts +0 -19
- package/dist/lab/parse/subject-state.d.ts +0 -30
- package/dist/lab/plan.d.ts +0 -19
- package/dist/lab/plan.js +0 -132
- package/dist/lab/preflight-probes.d.ts +0 -3
- package/dist/lab/preflight-result.d.ts +0 -7
- package/dist/lab/preflight.d.ts +0 -92
- package/dist/lab/route-inputs.d.ts +0 -28
- package/dist/lab/run-lab-options.d.ts +0 -28
- package/dist/lab/warnings.d.ts +0 -2
- package/dist/observer/static.d.ts +0 -39
- package/dist/observer/static.js +0 -369
- package/dist/run-lab.d.ts +0 -112
- package/docs/architecture/comms-inbox.md +0 -122
- package/docs/architecture/desktop-recording.md +0 -80
- package/docs/architecture/local-browser-runtime.md +0 -178
- package/docs/architecture/observer-review.md +0 -144
- package/docs/architecture/participant-media.md +0 -90
- package/docs/architecture/project-layout.md +0 -62
- package/docs/architecture/real-email-receiving.md +0 -136
- package/docs/assets/humanish-drawdb-hero.png +0 -0
- package/docs/assets/humanish-observer-hero.png +0 -0
- package/docs/goals/current.md +0 -207
- package/docs/product/lobby-trivia-3player-external-public.md +0 -77
- package/docs/product/open-source-install-experience.md +0 -240
- package/docs/ramp/README.md +0 -295
- package/docs/release/open-source-readiness.md +0 -222
- package/docs/release/public-readiness-standard.md +0 -210
- package/docs/roadmap/world-class-open-source-v0.md +0 -311
- /package/dist/{lab → study}/init-paths.d.ts +0 -0
- /package/dist/{lab → study}/init-paths.js +0 -0
- /package/dist/{lab → study}/init-plan.d.ts +0 -0
- /package/dist/{lab → study}/init-plan.js +0 -0
- /package/dist/{lab → study}/participant-assignment.d.ts +0 -0
- /package/dist/{lab → study}/participant-assignment.js +0 -0
- /package/dist/{lab → study}/persona.d.ts +0 -0
- /package/dist/{lab → study}/persona.js +0 -0
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
// Options renamed in this minor keep their older name for one more minor, so a skill installed
|
|
2
|
-
// before the rename still runs. The older name is hidden from --help, sets the same value and
|
|
3
|
-
// prints one stderr line naming the new name. Each command reads its options through these
|
|
4
|
-
// functions once, at the top of its action, so one invocation prints the line once.
|
|
5
|
-
function renamedOption(io, name, value, olderName, olderValue) {
|
|
6
|
-
if (olderValue !== undefined) {
|
|
7
|
-
io.writeErr(`warning: --${olderName} is deprecated and is removed in the next minor. Use --${name}.\n`);
|
|
8
|
-
}
|
|
9
|
-
return value ?? olderValue;
|
|
10
|
-
}
|
|
11
|
-
/** `--participants`, or `--lanes` when only the older spelling is set. */
|
|
12
|
-
export function participantsOption(io, options) {
|
|
13
|
-
return renamedOption(io, "participants", options.participants, "lanes", options.lanes);
|
|
14
|
-
}
|
|
15
|
-
/** `--count`, or `--sims` when only the older spelling is set. */
|
|
16
|
-
export function countOption(io, options) {
|
|
17
|
-
return renamedOption(io, "count", options.count, "sims", options.sims);
|
|
18
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { LabConfig } from "./types.js";
|
|
2
|
-
/** The first composition rule a config breaks, in the parser's order, or null. */
|
|
3
|
-
export declare function compositionReason(config: LabConfig): string | null;
|
|
4
|
-
/** Why a this-repo lab cannot run live. The parser and the preview planner both refuse with it. */
|
|
5
|
-
export declare const THIS_REPO_DRY_RUN_ONLY = "this-repo labs are dry-run only; use a clone or app-url subject for a live run.";
|
|
6
|
-
/** A desktop-cli subject with no product to study. The computer-use planner checks this too. */
|
|
7
|
-
export declare function desktopCliProductReason(config: LabConfig): string | null;
|
package/dist/lab/config.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { type LabConfigParseResult } from "./types.js";
|
|
2
|
-
/**
|
|
3
|
-
* Validate a parsed YAML object into a LabConfig. Pure: the caller owns file IO. Structural
|
|
4
|
-
* validation only. Fields the engine does not yet consume are accepted but reported in
|
|
5
|
-
* `warnings` so `lab inspect` never silently swallows a setting that does nothing.
|
|
6
|
-
*/
|
|
7
|
-
export declare function parseLabConfig(raw: unknown): LabConfigParseResult;
|
package/dist/lab/discover.d.ts
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import type { ActorPersonaRef } from "../actors/contract.js";
|
|
2
|
-
import { type LabConfig } from "./types.js";
|
|
3
|
-
declare const LAB_LIST_SCHEMA = "humanish.lab-list.v1";
|
|
4
|
-
declare const LAB_INSPECT_SCHEMA = "humanish.lab-inspect.v1";
|
|
5
|
-
type LabOrigin = "committed" | "ignored" | "explicit";
|
|
6
|
-
interface ResolvedLabConfig {
|
|
7
|
-
config: LabConfig;
|
|
8
|
-
origin: LabOrigin;
|
|
9
|
-
path: string;
|
|
10
|
-
warnings: string[];
|
|
11
|
-
}
|
|
12
|
-
export interface LabResolveFailure {
|
|
13
|
-
ok: false;
|
|
14
|
-
cwd: string;
|
|
15
|
-
lab: string;
|
|
16
|
-
error: {
|
|
17
|
-
code: "HUMANISH_LAB_NOT_FOUND" | "HUMANISH_LAB_INVALID";
|
|
18
|
-
message: string;
|
|
19
|
-
};
|
|
20
|
-
warnings: string[];
|
|
21
|
-
}
|
|
22
|
-
export type LabResolveResult = ({
|
|
23
|
-
ok: true;
|
|
24
|
-
} & ResolvedLabConfig) | LabResolveFailure;
|
|
25
|
-
export interface LabListEntry {
|
|
26
|
-
id: string;
|
|
27
|
-
source: LabConfig["subject"]["source"];
|
|
28
|
-
origin: LabOrigin;
|
|
29
|
-
path: string;
|
|
30
|
-
title?: string;
|
|
31
|
-
/**
|
|
32
|
-
* The manifest's own first sentence. The list is where someone decides which study to open, and a
|
|
33
|
-
* list of names cannot answer "what is this one" for a project with twenty labs in it — the
|
|
34
|
-
* stakeholder feedback that added this was, verbatim, "so i know wtf they are".
|
|
35
|
-
*/
|
|
36
|
-
description?: string;
|
|
37
|
-
}
|
|
38
|
-
export interface LabListResult {
|
|
39
|
-
schema: typeof LAB_LIST_SCHEMA;
|
|
40
|
-
ok: true;
|
|
41
|
-
cwd: string;
|
|
42
|
-
labs: LabListEntry[];
|
|
43
|
-
warnings: string[];
|
|
44
|
-
}
|
|
45
|
-
export interface LabInspectResult {
|
|
46
|
-
/** Persona context only, before route instructions and runtime grants. */
|
|
47
|
-
personas?: Array<{
|
|
48
|
-
id: string;
|
|
49
|
-
resolved: boolean;
|
|
50
|
-
brief?: ActorPersonaRef["brief"];
|
|
51
|
-
}>;
|
|
52
|
-
schema: typeof LAB_INSPECT_SCHEMA;
|
|
53
|
-
ok: boolean;
|
|
54
|
-
cwd: string;
|
|
55
|
-
lab: string;
|
|
56
|
-
config?: LabConfig;
|
|
57
|
-
origin?: LabOrigin;
|
|
58
|
-
path?: string;
|
|
59
|
-
error?: LabResolveFailure["error"];
|
|
60
|
-
warnings: string[];
|
|
61
|
-
}
|
|
62
|
-
export declare function resolveLabManifest(cwd: string, lab: string): Promise<LabResolveResult>;
|
|
63
|
-
export declare function listLabManifests(cwd: string): Promise<LabListResult>;
|
|
64
|
-
export declare function inspectLabManifest(cwd: string, lab: string): Promise<LabInspectResult>;
|
|
65
|
-
export {};
|
|
@@ -1,416 +0,0 @@
|
|
|
1
|
-
export const DEFAULT_LOCAL_BROWSER_STARTER = {
|
|
2
|
-
appUrl: "http://127.0.0.1:3000",
|
|
3
|
-
mission: "Use the app's primary flow. Explain anything confusing and stop when the task is complete or you are stuck.",
|
|
4
|
-
};
|
|
5
|
-
function localBrowserLab(starter = DEFAULT_LOCAL_BROWSER_STARTER) {
|
|
6
|
-
return {
|
|
7
|
-
path: "humanish/labs/local-browser.yaml",
|
|
8
|
-
plane: "source",
|
|
9
|
-
contents: `schema: humanish.lab.v2
|
|
10
|
-
id: local-browser
|
|
11
|
-
title: Local browser · your app · Codex account
|
|
12
|
-
description: >-
|
|
13
|
-
Run a Codex-account participant in an isolated local browser against your loopback app—no E2B
|
|
14
|
-
or OpenAI API key. Inference is remote and uses account quota. Before the first live run, use
|
|
15
|
-
humanish doctor --lab local-browser to check the supported Codex login and local runtime.
|
|
16
|
-
subject:
|
|
17
|
-
source: app-url
|
|
18
|
-
appUrl: ${JSON.stringify(starter.appUrl)}
|
|
19
|
-
actors:
|
|
20
|
-
- type: local-agent
|
|
21
|
-
localAgent: codex
|
|
22
|
-
persona: synthetic-new-user
|
|
23
|
-
mission: ${JSON.stringify(starter.mission)}
|
|
24
|
-
execution:
|
|
25
|
-
target: local
|
|
26
|
-
concurrency: 1
|
|
27
|
-
timeoutMs: 120000
|
|
28
|
-
scenario:
|
|
29
|
-
mode: live
|
|
30
|
-
defaults:
|
|
31
|
-
open: true
|
|
32
|
-
`,
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* The flagship live lab. A ChatGPT-account Codex participant has no API-dollar price, so preflight
|
|
37
|
-
* refuses a dollar cap on it (HUMANISH_CUA_LAB_UNPRICED_CAP); that variant is bounded by the
|
|
38
|
-
* session timeout instead of a cap it could never enforce.
|
|
39
|
-
*/
|
|
40
|
-
function tryLiveLab(actor, localAgent = "codex") {
|
|
41
|
-
const account = actor === "local-agent";
|
|
42
|
-
const cost = account
|
|
43
|
-
? ` WHAT IT COSTS: one participant, one small task, a few E2B desktop minutes and your Codex
|
|
44
|
-
account's usage. Account usage has no dollar price humanish can enforce, so the ten-minute
|
|
45
|
-
session limit below bounds the run.`
|
|
46
|
-
: ` WHAT IT COSTS: one participant, one small task, and a $2 cap on estimated model spend. The
|
|
47
|
-
run stops before its next model request once the estimate passes $2, so the last request can take
|
|
48
|
-
it slightly over. Hosted desktop time is billed separately.`;
|
|
49
|
-
const participant = account
|
|
50
|
-
? ` # Your machine has a coding agent signed in, so this lab uses it: no provider API key,
|
|
51
|
-
# only E2B. To use a provider key instead, swap to \`type: openai-computer-use\` and add
|
|
52
|
-
# execution.caps.maxUsd.
|
|
53
|
-
- type: local-agent
|
|
54
|
-
localAgent: ${localAgent}`
|
|
55
|
-
: ` - type: openai-computer-use
|
|
56
|
-
# Bounds each model reply. Under the cap below it also bounds what a stalled or lost request
|
|
57
|
-
# can cost, so the run can retry it instead of stopping.
|
|
58
|
-
maxOutputTokens: 8192`;
|
|
59
|
-
const bound = account
|
|
60
|
-
? " timeoutMs: 600000 # bounds the run; a dollar cap cannot be enforced on account usage"
|
|
61
|
-
: ` timeoutMs: 600000
|
|
62
|
-
caps:
|
|
63
|
-
maxUsd: 2 # estimated model spend; the run stops before its next request once it passes this`;
|
|
64
|
-
return {
|
|
65
|
-
path: "humanish/labs/try-live.yaml",
|
|
66
|
-
plane: "source",
|
|
67
|
-
contents: `schema: humanish.lab.v2
|
|
68
|
-
id: try-live
|
|
69
|
-
title: Your first REAL study — one participant, a real app, a hosted desktop
|
|
70
|
-
description: >-
|
|
71
|
-
This lab runs live out of the box, on purpose. Every other starter file here is a template you
|
|
72
|
-
have to fill in first, and a first live run that cannot succeed is where most people stop.
|
|
73
|
-
THE SUBJECT IS A DEMO, NOT YOUR APP: it clones drawDB, a real public open-source diagram editor,
|
|
74
|
-
and serves it inside the sandbox. That is what makes this runnable with nothing to configure.
|
|
75
|
-
Once you have watched it work, point subject at your own app (see humanish/labs/cua-browser.yaml
|
|
76
|
-
for the shape) — that is the study you actually want.
|
|
77
|
-
${cost}
|
|
78
|
-
WHAT A GOOD RESULT LOOKS LIKE: not necessarily a pass. A participant who gets stuck and says so
|
|
79
|
-
is the most useful thing this tool produces — humanish will refuse to call that a credible pass,
|
|
80
|
-
on purpose, and the friction they describe is the finding. A first run that ends in "I could not
|
|
81
|
-
do it, and here is where I got lost" worked exactly as intended.
|
|
82
|
-
subject:
|
|
83
|
-
source: clone
|
|
84
|
-
repos:
|
|
85
|
-
- drawdb-io/drawdb
|
|
86
|
-
clone:
|
|
87
|
-
depth: 1
|
|
88
|
-
serve:
|
|
89
|
-
# Plain npm — humanish provides the Node runtime the stock desktop image does not ship.
|
|
90
|
-
install: npm install --no-audit --no-fund
|
|
91
|
-
build: npm run build
|
|
92
|
-
start: npx vite preview --host 127.0.0.1 --port 3000
|
|
93
|
-
url: http://127.0.0.1:3000/
|
|
94
|
-
actors:
|
|
95
|
-
${participant}
|
|
96
|
-
persona: synthetic-new-user
|
|
97
|
-
mission: >-
|
|
98
|
-
You have never seen this diagram tool before. Add two tables and give them meaningful names,
|
|
99
|
-
then stop and say what you did, what confused you, and where you hesitated.
|
|
100
|
-
execution:
|
|
101
|
-
target: e2b-desktop
|
|
102
|
-
${bound}
|
|
103
|
-
scenario:
|
|
104
|
-
mode: live # the point of this lab — the others start as dry-run
|
|
105
|
-
defaults:
|
|
106
|
-
open: true
|
|
107
|
-
`,
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
export const starterFiles = [
|
|
111
|
-
{
|
|
112
|
-
path: "humanish/README.md",
|
|
113
|
-
plane: "source",
|
|
114
|
-
contents: `# humanish
|
|
115
|
-
|
|
116
|
-
This directory is the committed source of persona simulation intent for this app.
|
|
117
|
-
|
|
118
|
-
Keep this directory public-safe:
|
|
119
|
-
|
|
120
|
-
- synthetic personas only;
|
|
121
|
-
- synthetic fixtures only;
|
|
122
|
-
- env var names only, never values;
|
|
123
|
-
- no PII, PHI, secrets, raw private transcripts, private screenshots, customer data, or patient data.
|
|
124
|
-
|
|
125
|
-
Generated run bundles, screenshots, traces, logs, and local overrides belong in ignored \`.humanish/\`.
|
|
126
|
-
|
|
127
|
-
Labs:
|
|
128
|
-
|
|
129
|
-
- committed reusable labs live in humanish/labs/*.yaml;
|
|
130
|
-
- private or machine-local labs live in ignored .humanish/labs/*.yaml or .humanish/local/labs/*.yaml;
|
|
131
|
-
- run a lab with \`humanish watch <lab>\` or \`humanish lab run <lab>\`.
|
|
132
|
-
|
|
133
|
-
Format standard:
|
|
134
|
-
|
|
135
|
-
- human-authored humanish source uses .yaml;
|
|
136
|
-
- generated artifacts, synthetic fixtures, and event streams use .json or .ndjson;
|
|
137
|
-
- .yml is reserved for outside ecosystem files such as GitHub Actions, not humanish source.
|
|
138
|
-
`,
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
path: "humanish/personas/synthetic-new-user.yaml",
|
|
142
|
-
plane: "source",
|
|
143
|
-
contents: `schema: humanish.persona.v1
|
|
144
|
-
id: synthetic-new-user
|
|
145
|
-
name: Synthetic New User
|
|
146
|
-
summary: A privacy-safe first-time user evaluating the app with realistic but synthetic needs.
|
|
147
|
-
traits:
|
|
148
|
-
patience: medium
|
|
149
|
-
technical_confidence: medium
|
|
150
|
-
constraints:
|
|
151
|
-
- Do not use real personal data.
|
|
152
|
-
- Do not use production accounts.
|
|
153
|
-
- Treat all credentials as env var names only.
|
|
154
|
-
`,
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
path: "humanish/personas/skeptical-power-user.yaml",
|
|
158
|
-
plane: "source",
|
|
159
|
-
contents: `schema: humanish.persona.v1
|
|
160
|
-
id: skeptical-power-user
|
|
161
|
-
name: Skeptical Power User
|
|
162
|
-
summary: A privacy-safe experienced user looking for speed, reversibility, and clear proof.
|
|
163
|
-
traits:
|
|
164
|
-
patience: low
|
|
165
|
-
technical_confidence: high
|
|
166
|
-
accessibility_needs: keyboard_first
|
|
167
|
-
constraints:
|
|
168
|
-
- Do not use real personal data.
|
|
169
|
-
- Prefer synthetic fixture inputs.
|
|
170
|
-
- Flag unclear recovery paths.
|
|
171
|
-
`,
|
|
172
|
-
},
|
|
173
|
-
{
|
|
174
|
-
path: "humanish/scenarios/first-run-smoke.yaml",
|
|
175
|
-
plane: "source",
|
|
176
|
-
contents: `schema: humanish.scenario.v1
|
|
177
|
-
id: first-run-smoke
|
|
178
|
-
title: First-run smoke
|
|
179
|
-
persona: synthetic-new-user
|
|
180
|
-
goal: Reach the first meaningful product state without using private data.
|
|
181
|
-
mode: dry-run
|
|
182
|
-
steps:
|
|
183
|
-
- name: Open the app
|
|
184
|
-
expectation: The app shell is reachable.
|
|
185
|
-
- name: Complete the first synthetic action
|
|
186
|
-
expectation: The user sees a clear next state.
|
|
187
|
-
- name: Capture review notes
|
|
188
|
-
expectation: Notes are public-safe and evidence-backed.
|
|
189
|
-
`,
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
path: "humanish/scenarios/onboarding-regression.yaml",
|
|
193
|
-
plane: "source",
|
|
194
|
-
contents: `schema: humanish.scenario.v1
|
|
195
|
-
id: onboarding-regression
|
|
196
|
-
title: Onboarding regression
|
|
197
|
-
persona: skeptical-power-user
|
|
198
|
-
goal: Exercise onboarding friction using synthetic inputs and explicit recovery checks.
|
|
199
|
-
mode: dry-run
|
|
200
|
-
steps:
|
|
201
|
-
- name: Start onboarding
|
|
202
|
-
expectation: Required information is clear.
|
|
203
|
-
- name: Use synthetic fixture data
|
|
204
|
-
expectation: No real user data is entered.
|
|
205
|
-
- name: Check recovery path
|
|
206
|
-
expectation: The user can back out or retry safely.
|
|
207
|
-
`,
|
|
208
|
-
},
|
|
209
|
-
{
|
|
210
|
-
path: "humanish/labs/first-run.yaml",
|
|
211
|
-
plane: "source",
|
|
212
|
-
contents: `schema: humanish.lab.v2
|
|
213
|
-
id: first-run
|
|
214
|
-
title: First-run synthetic Observer
|
|
215
|
-
description: Public-safe starter lab that generates a synthetic run bundle and Observer without provider spend.
|
|
216
|
-
subject:
|
|
217
|
-
source: this-repo
|
|
218
|
-
actors:
|
|
219
|
-
- type: synthetic-persona
|
|
220
|
-
count: 4
|
|
221
|
-
scenario:
|
|
222
|
-
mode: dry-run
|
|
223
|
-
defaults:
|
|
224
|
-
open: true
|
|
225
|
-
`,
|
|
226
|
-
},
|
|
227
|
-
tryLiveLab("openai-computer-use"),
|
|
228
|
-
localBrowserLab(),
|
|
229
|
-
{
|
|
230
|
-
path: "humanish/labs/cua-browser.yaml",
|
|
231
|
-
plane: "source",
|
|
232
|
-
contents: `schema: humanish.lab.v2
|
|
233
|
-
id: cua-browser
|
|
234
|
-
title: Computer-use browser lab
|
|
235
|
-
description: >-
|
|
236
|
-
A registered computer-use actor drives your app in a hosted desktop browser and emits an
|
|
237
|
-
evidence bundle into gitignored .humanish/. Screenshots are full-fidelity (raw) by default;
|
|
238
|
-
set policies.redactScreenshots: true to blur at capture for a share-as-is bundle. Typed
|
|
239
|
-
text is recorded as length only. Dry-run by default; switch scenario.mode to live (with
|
|
240
|
-
OPENAI_API_KEY + E2B_API_KEY via --env-file) for a real session. The clone subject below
|
|
241
|
-
serves your repo INSIDE the sandbox; declared subject env NAMES are provisioned from
|
|
242
|
-
--env-file (values are never persisted).
|
|
243
|
-
subject:
|
|
244
|
-
source: clone
|
|
245
|
-
repos: [your-org/your-app]
|
|
246
|
-
serve:
|
|
247
|
-
install: pnpm install --frozen-lockfile
|
|
248
|
-
build: pnpm build
|
|
249
|
-
start: pnpm start
|
|
250
|
-
url: http://127.0.0.1:3000/
|
|
251
|
-
# installTimeoutMs: 1200000 # bump for monorepo-scale installs/builds (default 600000)
|
|
252
|
-
# buildTimeoutMs: 1800000
|
|
253
|
-
# env: [DATABASE_URL]
|
|
254
|
-
# state: # the subject's STATE story (recorded as provenance):
|
|
255
|
-
# seed: # ordered, bounded seed/migration/fixture steps (commands are
|
|
256
|
-
# - name: db-up # author-trusted; evidence records sha256 digests, never text)
|
|
257
|
-
# command: sudo service postgresql start && pg_isready -t 30
|
|
258
|
-
# when: before-start # before-build | before-start (default) | after-ready
|
|
259
|
-
# - name: db-migrate
|
|
260
|
-
# command: pnpm prisma migrate deploy
|
|
261
|
-
# timeoutMs: 300000 # per-step budget (default 300000)
|
|
262
|
-
# - name: admin-user # after-ready steps run against the RUNNING app
|
|
263
|
-
# command: curl -sf -X POST http://127.0.0.1:3000/api/test/bootstrap-admin
|
|
264
|
-
# when: after-ready
|
|
265
|
-
# # Or point at a shared DB you do NOT control — recorded as UNPINNED in provenance;
|
|
266
|
-
# # each name must also be declared in subject.env:
|
|
267
|
-
# # external: [DATABASE_URL]
|
|
268
|
-
# clone:
|
|
269
|
-
# keep: true # leave the sandbox up on FAILURE so you can debug install/boot
|
|
270
|
-
# Alternative: drive a deployment you own (Vercel preview, staging) instead of a clone:
|
|
271
|
-
# source: app-url
|
|
272
|
-
# appUrl: https://your-preview.vercel.app/
|
|
273
|
-
actors:
|
|
274
|
-
- type: openai-computer-use
|
|
275
|
-
persona: first-time-visitor
|
|
276
|
-
mission: >-
|
|
277
|
-
Explore the app as a brand-new user trying to complete its primary flow. Note anything
|
|
278
|
-
confusing. Stop when the flow completes or you are stuck.
|
|
279
|
-
execution:
|
|
280
|
-
target: e2b-desktop
|
|
281
|
-
# 20 minutes: a session should end because the participant finished, not because a timer fired,
|
|
282
|
-
# so this is as long as the substrate allows rather than as long as seems reasonable. This route
|
|
283
|
-
# clones, installs, builds and serves the subject before the actor starts, so the sandbox deadline
|
|
284
|
-
# is this budget PLUS 40 minutes of provisioning and teardown headroom — and a sandbox may not
|
|
285
|
-
# live longer than 60. Raising this above 20 minutes fails the run closed before it starts; raise
|
|
286
|
-
# execution.desktop.sandboxTimeoutMs deliberately if you need more.
|
|
287
|
-
# Spend protection belongs to the dollar caps, not the clock.
|
|
288
|
-
timeoutMs: 1200000
|
|
289
|
-
desktop:
|
|
290
|
-
device: desktop # mobile | small-mobile | narrow-mobile | tablet | desktop | wide
|
|
291
|
-
# browser: chrome # default | chrome | chromium | firefox; concrete values fail closed
|
|
292
|
-
# Presets size the physical screen; Chrome's window width has a ~500px minimum.
|
|
293
|
-
# For mobile presets, opt into CSS viewport, touch, DPR and mobile user-agent emulation:
|
|
294
|
-
# fidelity: { mobileEmulation: true } # Chrome/Chromium only; desktop/tablet lanes unchanged
|
|
295
|
-
# The bundle records measured screen, page viewport and emulation fidelity separately.
|
|
296
|
-
scenario:
|
|
297
|
-
mode: dry-run
|
|
298
|
-
# policies:
|
|
299
|
-
# redactScreenshots: true # blur persisted frames (default off — full fidelity for local use)
|
|
300
|
-
# allowPublicTargets: true # required to drive a non-loopback app-url (a deployment you own)
|
|
301
|
-
defaults:
|
|
302
|
-
open: true
|
|
303
|
-
`,
|
|
304
|
-
},
|
|
305
|
-
{
|
|
306
|
-
path: "humanish/labs/lobby-trivia-3player.yaml",
|
|
307
|
-
plane: "source",
|
|
308
|
-
contents: `schema: humanish.lab.v2
|
|
309
|
-
id: lobby-trivia-3player
|
|
310
|
-
title: External-public shared world (N mobile personas share ONE public app at once)
|
|
311
|
-
description: >-
|
|
312
|
-
A worked example of the EXTERNAL-PUBLIC shared-world route (#164 phase 2): N mobile-LAYOUT
|
|
313
|
-
personas play the SAME multiplayer lobby on a REAL public deployment AT ONCE. The public site is
|
|
314
|
-
the shared plane DIRECTLY — NO clone, NO getHost, NO subject sandbox, NO seed. A host-first barrier
|
|
315
|
-
extracts the shared-session code from the host seat's CDP-observed URL and threads it into the
|
|
316
|
-
follower join missions (followers go through the real Join flow). Dry-run (the default) emits ONE
|
|
317
|
-
external-public evidence bundle at $0. A live run needs OPENAI_API_KEY + E2B_API_KEY and
|
|
318
|
-
scenario.mode: live. Point appUrl + publicTarget at a public deployment YOU own/operate.
|
|
319
|
-
MOBILE FIDELITY: by default Chrome's physical window has a 500px minimum width, no touch
|
|
320
|
-
emulation and desktop DPR/user-agent behavior. Set execution.desktop.fidelity.mobileEmulation to true
|
|
321
|
-
to request the mobile preset's CSS viewport, touch, DPR and mobile user agent on Chrome/Chromium.
|
|
322
|
-
The bundle records measured geometry and emulation fidelity. HONESTY: attribution stays
|
|
323
|
-
shared-world, but every strength claim degrades honestly — provenance external-public (not seeded),
|
|
324
|
-
NO synthetic attestation (you cannot claim synthetic on a real site), NO authoritative shared-state
|
|
325
|
-
proof, concurrency by temporal co-occupancy + observed lobby convergence.
|
|
326
|
-
subject:
|
|
327
|
-
source: app-url # the real public deployment IS the shared plane (no clone, no getHost)
|
|
328
|
-
topology: shared-world # the declared override of the per-lane-worlds default
|
|
329
|
-
appUrl: https://your-public-app.example/ # a deployment YOU own/operate
|
|
330
|
-
publicTarget: # REQUIRED ownership attestation (the honest analog of exposure: synthetic)
|
|
331
|
-
owner: your-org/your-app
|
|
332
|
-
authorized: true
|
|
333
|
-
policies:
|
|
334
|
-
allowPublicTargets: true # REQUIRED: the shared plane is a real non-loopback public deployment
|
|
335
|
-
actors:
|
|
336
|
-
- type: openai-computer-use
|
|
337
|
-
mission: You are one of several users on the same shared session at once. Play your role, then stop.
|
|
338
|
-
lanes: # the roster (>=2) with EXACTLY ONE host: true seat
|
|
339
|
-
- id: host
|
|
340
|
-
host: true # the designated host seat that creates the shared session
|
|
341
|
-
device: mobile # 414x896 preset; physical window width floors to 500 (see emulation above)
|
|
342
|
-
instruction: Create a shared lobby, wait for the others to join, then start and play.
|
|
343
|
-
- id: player-2
|
|
344
|
-
device: mobile
|
|
345
|
-
instruction: Join the lobby you're told the code for, then play.
|
|
346
|
-
- id: player-3
|
|
347
|
-
device: small-mobile
|
|
348
|
-
instruction: Join the lobby you're told the code for, then play.
|
|
349
|
-
execution:
|
|
350
|
-
target: e2b-desktop
|
|
351
|
-
# PER-SEAT session budget; also caps the host-first handoff deadline. Budget for the WHOLE arc:
|
|
352
|
-
# seat provisioning + shared-session assembly + actual play. A first live run of the worked
|
|
353
|
-
# example died at 120000 with every seat expiring mid game and zero mission actions taken.
|
|
354
|
-
timeoutMs: 420000
|
|
355
|
-
concurrency: 3 # all 3 seats live at once (the default when omitted); lower only to cap paid desktops
|
|
356
|
-
# desktop:
|
|
357
|
-
# fidelity: { mobileEmulation: true } # opt into mobile CSS viewport, touch, DPR and user agent
|
|
358
|
-
scenario:
|
|
359
|
-
mode: dry-run # default; the live path opens N real mobile-layout seats against the public app
|
|
360
|
-
defaults:
|
|
361
|
-
open: true
|
|
362
|
-
`,
|
|
363
|
-
},
|
|
364
|
-
{
|
|
365
|
-
path: "humanish/coverage-map.md",
|
|
366
|
-
plane: "source",
|
|
367
|
-
contents: `# Coverage Map
|
|
368
|
-
|
|
369
|
-
This file should enumerate screens, roles, states, and paths before scenarios are treated as complete.
|
|
370
|
-
|
|
371
|
-
Current starter coverage is intentionally minimal and synthetic.
|
|
372
|
-
`,
|
|
373
|
-
},
|
|
374
|
-
{
|
|
375
|
-
path: "humanish/coverage-matrix.md",
|
|
376
|
-
plane: "source",
|
|
377
|
-
contents: `# Coverage Matrix
|
|
378
|
-
|
|
379
|
-
| Area | Persona | Happy Path | Sad Path | Status |
|
|
380
|
-
| --- | --- | --- | --- | --- |
|
|
381
|
-
| First run | synthetic-new-user | planned | planned | starter |
|
|
382
|
-
| Onboarding | skeptical-power-user | planned | planned | starter |
|
|
383
|
-
`,
|
|
384
|
-
},
|
|
385
|
-
];
|
|
386
|
-
export const runtimeDirectories = [
|
|
387
|
-
{ path: ".humanish/runs", plane: "runtime" },
|
|
388
|
-
{ path: ".humanish/cache", plane: "runtime" },
|
|
389
|
-
{ path: ".humanish/tmp", plane: "runtime" },
|
|
390
|
-
{ path: ".humanish/logs", plane: "runtime" },
|
|
391
|
-
{ path: ".humanish/labs", plane: "runtime" },
|
|
392
|
-
{ path: ".humanish/local/labs", plane: "runtime" },
|
|
393
|
-
{ path: ".humanish/local/personas", plane: "runtime" },
|
|
394
|
-
];
|
|
395
|
-
export const humanishScripts = {
|
|
396
|
-
humanish: "humanish",
|
|
397
|
-
"humanish:doctor": "humanish doctor",
|
|
398
|
-
"humanish:run": "humanish run --dry-run",
|
|
399
|
-
"humanish:watch": "humanish watch",
|
|
400
|
-
"humanish:watch:ci": "humanish watch --json --no-open",
|
|
401
|
-
"humanish:verify": "humanish verify",
|
|
402
|
-
};
|
|
403
|
-
/**
|
|
404
|
-
* The starter files, with the live lab written for the brain this machine can use.
|
|
405
|
-
*
|
|
406
|
-
* `local-agent` is not a variant of the lab so much as a different participant: on a machine with
|
|
407
|
-
* a signed-in Codex and no provider key, the study runs with the operator's own agent and needs
|
|
408
|
-
* only E2B. Writing the other one there would hand someone homework instead of a first run.
|
|
409
|
-
*/
|
|
410
|
-
export function starterFilesFor(actor, localBrowser = DEFAULT_LOCAL_BROWSER_STARTER, localAgent) {
|
|
411
|
-
return starterFiles.map((file) => file.path === "humanish/labs/local-browser.yaml"
|
|
412
|
-
? localBrowserLab(localBrowser)
|
|
413
|
-
: file.path === "humanish/labs/try-live.yaml"
|
|
414
|
-
? tryLiveLab(actor, localAgent)
|
|
415
|
-
: file);
|
|
416
|
-
}
|
package/dist/lab/keys.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { LabComms, LabCommsEmail, LabCommsRecipient, LabConfigParseFailure } from "../types.js";
|
|
2
|
-
export declare function parseComms(raw: unknown): {
|
|
3
|
-
ok: true;
|
|
4
|
-
value: LabComms | undefined;
|
|
5
|
-
} | LabConfigParseFailure;
|
|
6
|
-
/** The participant a declared inbox recipient belongs to. The manifest spells it `lane`. */
|
|
7
|
-
export declare function recipientParticipantId(recipient: LabCommsRecipient): string;
|
|
8
|
-
/** The declared recipients that name an address, in declaration order, by participant id. */
|
|
9
|
-
export declare function addressedRecipients(email: Pick<LabCommsEmail, "recipients">): {
|
|
10
|
-
participantId: string;
|
|
11
|
-
address: string;
|
|
12
|
-
}[];
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { LabConfigParseFailure, LabDefaults, LabExecution, LabPolicies, LabReview, LabScenario } from "../types.js";
|
|
2
|
-
export declare function parseExecution(raw: unknown): {
|
|
3
|
-
ok: true;
|
|
4
|
-
value: LabExecution | undefined;
|
|
5
|
-
} | LabConfigParseFailure;
|
|
6
|
-
export declare function parsePersonas(raw: unknown): Record<string, unknown>[] | undefined;
|
|
7
|
-
export declare function parseScenario(raw: unknown): {
|
|
8
|
-
ok: true;
|
|
9
|
-
value: LabScenario | undefined;
|
|
10
|
-
} | LabConfigParseFailure;
|
|
11
|
-
export declare function parsePolicies(raw: unknown): {
|
|
12
|
-
ok: true;
|
|
13
|
-
value: LabPolicies | undefined;
|
|
14
|
-
} | LabConfigParseFailure;
|
|
15
|
-
export declare function parseReview(raw: unknown): {
|
|
16
|
-
ok: true;
|
|
17
|
-
value: LabReview | undefined;
|
|
18
|
-
} | LabConfigParseFailure;
|
|
19
|
-
export declare function parseDefaults(raw: unknown): LabDefaults | undefined;
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { LabConfigParseFailure, LabSubjectState } from "../types.js";
|
|
2
|
-
/**
|
|
3
|
-
* LITERAL non-secret subject env. Real apps need configuration before they will boot — a public base
|
|
4
|
-
* URL, a transport selector, a feature flag — and none of that is secret. Routing it through
|
|
5
|
-
* `subject.env` would force an adopter to carry a private env file just to reproduce a public study.
|
|
6
|
-
*
|
|
7
|
-
* These values ARE recorded in evidence (they are part of how the subject was configured), so a
|
|
8
|
-
* value that looks like a credential is refused here rather than committed to a public repo.
|
|
9
|
-
*/
|
|
10
|
-
export declare function parseEnvValues(raw: unknown): {
|
|
11
|
-
ok: true;
|
|
12
|
-
value?: Record<string, string>;
|
|
13
|
-
} | LabConfigParseFailure;
|
|
14
|
-
/**
|
|
15
|
-
* Structural parse of `subject.state` into a candidate LabSubjectState. Deliberately keeps
|
|
16
|
-
* unrecognized `when`/`timeoutMs` values in the candidate (instead of silently dropping
|
|
17
|
-
* them) so subjectStateInvalidReason rejects them — a state declaration that silently does
|
|
18
|
-
* less than it says would violate invariant 6.
|
|
19
|
-
*/
|
|
20
|
-
export declare function parseState(raw: unknown): {
|
|
21
|
-
ok: true;
|
|
22
|
-
value: LabSubjectState | undefined;
|
|
23
|
-
} | LabConfigParseFailure;
|
|
24
|
-
/**
|
|
25
|
-
* Semantic validation for `subject.state`, shared by parseLabConfig and the engine
|
|
26
|
-
* (runCuaActorLab re-enforces it on configs that arrive through the library API). Returns
|
|
27
|
-
* the failure message, or null when the declaration is valid. Reads the candidate
|
|
28
|
-
* defensively — library callers can hand the engine arbitrarily-shaped objects.
|
|
29
|
-
*/
|
|
30
|
-
export declare function subjectStateInvalidReason(state: LabSubjectState, env: readonly string[] | undefined): string | null;
|
package/dist/lab/plan.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { InternalRunLabOptions } from "../run-lab.js";
|
|
2
|
-
import type { LabDeps } from "./lab-deps.js";
|
|
3
|
-
import type { PlanResult } from "./plan-types.js";
|
|
4
|
-
import type { LabConfig } from "./types.js";
|
|
5
|
-
/** The five execution paths a lab can take. */
|
|
6
|
-
export type LabRoute = "preview" | "computer-use" | "shared-world" | "terminal" | "scripted";
|
|
7
|
-
/**
|
|
8
|
-
* The route a config takes. It never refuses: a config no route can run still gets the route
|
|
9
|
-
* whose own checks refuse it with the most precise reason.
|
|
10
|
-
*/
|
|
11
|
-
export declare function routeOf(config: LabConfig): LabRoute;
|
|
12
|
-
/** Resolve dry-run: explicit override wins, else the scenario mode, else the given fallback. */
|
|
13
|
-
export declare function resolveLabDryRun(config: LabConfig, override: boolean | undefined, fallback: boolean | undefined): boolean | undefined;
|
|
14
|
-
/**
|
|
15
|
-
* The plan a lab runs under, built without reading files, env or the network. Each route's planner
|
|
16
|
-
* makes every refusal that route makes, in the route's order and with its codes and messages; the
|
|
17
|
-
* route's exported runner calls the same planner.
|
|
18
|
-
*/
|
|
19
|
-
export declare function planLab(config: LabConfig, options: InternalRunLabOptions, deps?: LabDeps): PlanResult;
|