humanish 0.106.1 → 0.108.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 +38 -32
- package/CHANGELOG.md +28 -0
- package/CONTEXT.md +51 -41
- package/README.md +152 -174
- 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-client.js +2 -1
- package/dist/actors/codex/app-server-trace.d.ts +0 -1
- package/dist/actors/codex/app-server-trace.js +1 -3
- package/dist/actors/codex/app-server-ui.js +1 -1
- package/dist/actors/codex/app-server.js +2 -1
- package/dist/actors/codex/codex-admission.d.ts +91 -0
- package/dist/actors/codex/codex-admission.js +150 -0
- package/dist/actors/codex/protocol-compat.d.ts +27 -0
- package/dist/actors/codex/protocol-compat.js +357 -0
- package/dist/actors/codex/protocol-contract.d.ts +61 -0
- package/dist/actors/codex/protocol-contract.js +471 -0
- package/dist/actors/codex/restricted-executable.d.ts +28 -4
- package/dist/actors/codex/restricted-executable.js +104 -29
- package/dist/actors/codex/restricted-launch.d.ts +9 -2
- package/dist/actors/codex/restricted-launch.js +43 -4
- package/dist/actors/codex/restricted-notifications.d.ts +101 -0
- package/dist/actors/codex/restricted-notifications.js +277 -0
- package/dist/actors/codex/restricted-participant.d.ts +30 -0
- package/dist/actors/codex/restricted-participant.js +66 -6
- package/dist/actors/codex/restricted-policy.d.ts +11 -3
- package/dist/actors/codex/restricted-policy.js +2 -2
- package/dist/actors/codex/restricted-session.d.ts +16 -3
- package/dist/actors/codex/restricted-session.js +60 -22
- package/dist/actors/codex/restricted-transport.d.ts +29 -0
- package/dist/actors/codex/restricted-transport.js +139 -27
- package/dist/actors/codex/restricted-turn.d.ts +19 -4
- package/dist/actors/codex/restricted-turn.js +43 -30
- package/dist/actors/computer-use/actor.d.ts +17 -17
- package/dist/actors/computer-use/actor.js +6 -6
- package/dist/actors/computer-use/admission-limit.d.ts +1 -1
- package/dist/actors/computer-use/admission-limit.js +1 -1
- package/dist/actors/computer-use/loop/actions.d.ts +3 -3
- package/dist/actors/computer-use/loop/actions.js +10 -10
- package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
- package/dist/actors/computer-use/loop/backstop.js +15 -13
- package/dist/actors/computer-use/loop/ending.d.ts +7 -7
- package/dist/actors/computer-use/loop/ending.js +9 -9
- package/dist/actors/computer-use/loop/observation.d.ts +2 -2
- package/dist/actors/computer-use/loop/observation.js +9 -9
- package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
- package/dist/actors/computer-use/loop/provider-call.js +1 -1
- package/dist/actors/computer-use/loop/session.js +3 -3
- package/dist/actors/computer-use/loop/spend.d.ts +2 -2
- package/dist/actors/computer-use/loop/spend.js +4 -4
- package/dist/actors/computer-use/loop/trace.js +11 -10
- package/dist/actors/computer-use/loop/types.d.ts +37 -26
- package/dist/actors/computer-use/loop/usage.js +2 -2
- package/dist/actors/computer-use/loop.js +4 -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 +12 -9
- package/dist/actors/computer-use/openai-provider.js +47 -36
- 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/contract.d.ts +86 -49
- package/dist/actors/contract.js +29 -23
- package/dist/actors/local-agent/claude-session.d.ts +1 -1
- package/dist/actors/local-agent/claude-session.js +10 -9
- package/dist/actors/local-agent/cli.d.ts +8 -6
- 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 +6 -6
- package/dist/actors/registry.d.ts +10 -10
- package/dist/actors/registry.js +18 -17
- package/dist/actors/scripted-browser/actor.d.ts +8 -8
- package/dist/actors/scripted-browser/actor.js +16 -16
- package/dist/actors/scripted-browser/browser-command.js +1 -1
- package/dist/actors/scripted-browser/journey.js +15 -4
- package/dist/actors/scripted-browser/steps.js +19 -1
- package/dist/actors/scripted-browser/types.d.ts +12 -2
- package/dist/actors/stop-conditions.d.ts +1 -1
- package/dist/actors/stop-conditions.js +1 -3
- package/dist/analysis/automatic-completion.d.ts +13 -8
- package/dist/analysis/automatic-completion.js +14 -8
- package/dist/analysis/automatic-config.d.ts +1 -1
- package/dist/analysis/automatic-config.js +2 -2
- package/dist/analysis/automatic.d.ts +10 -4
- package/dist/analysis/automatic.js +17 -13
- package/dist/analysis/codex-config.d.ts +6 -2
- package/dist/analysis/codex-config.js +22 -14
- package/dist/analysis/diagnostics.d.ts +23 -0
- package/dist/analysis/diagnostics.js +112 -0
- package/dist/analysis/evidence-sources.js +2 -2
- package/dist/analysis/evidence.js +6 -6
- package/dist/analysis/execute.d.ts +7 -1
- package/dist/analysis/execute.js +39 -12
- package/dist/analysis/job.d.ts +8 -5
- package/dist/analysis/job.js +15 -14
- package/dist/analysis/load.d.ts +1 -1
- package/dist/analysis/load.js +5 -5
- package/dist/analysis/provider.d.ts +9 -1
- package/dist/analysis/restricted-codex.d.ts +2 -0
- package/dist/analysis/restricted-codex.js +10 -1
- package/dist/analysis/service.d.ts +2 -0
- package/dist/analysis/service.js +35 -16
- package/dist/analysis/sharing.d.ts +2 -2
- package/dist/analysis/sharing.js +5 -5
- package/dist/analysis/store-executions.d.ts +5 -5
- package/dist/analysis/store-executions.js +12 -12
- package/dist/analysis/store.d.ts +4 -4
- package/dist/analysis/store.js +13 -13
- package/dist/cli/commands/analysis-signals.d.ts +2 -1
- package/dist/cli/commands/analysis-signals.js +4 -1
- package/dist/cli/commands/analyze.js +23 -18
- package/dist/cli/commands/codex.js +9 -9
- package/dist/cli/commands/comms.js +62 -34
- package/dist/cli/commands/feedback.js +20 -21
- package/dist/cli/commands/lab-format.d.ts +5 -4
- package/dist/cli/commands/lab-format.js +35 -23
- package/dist/cli/commands/lab-route-computer-use.d.ts +0 -2
- package/dist/cli/commands/lab-route-computer-use.js +32 -21
- package/dist/cli/commands/lab-route-preview.d.ts +1 -3
- package/dist/cli/commands/lab-route-preview.js +7 -7
- package/dist/cli/commands/lab-route-run.d.ts +6 -4
- package/dist/cli/commands/lab-route-run.js +6 -2
- package/dist/cli/commands/lab-route-scripted.d.ts +0 -2
- package/dist/cli/commands/lab-route-scripted.js +0 -1
- package/dist/cli/commands/lab-route-shared-world.d.ts +0 -2
- package/dist/cli/commands/lab-route-shared-world.js +3 -4
- package/dist/cli/commands/lab-route-terminal.d.ts +0 -2
- package/dist/cli/commands/lab-route-terminal.js +0 -1
- package/dist/cli/commands/lab-run.js +84 -54
- package/dist/cli/commands/lab-scorer.d.ts +2 -4
- package/dist/cli/commands/lab-scorer.js +1 -1
- package/dist/cli/commands/migrate.d.ts +4 -0
- package/dist/cli/commands/migrate.js +65 -0
- package/dist/cli/commands/observe.js +168 -107
- package/dist/cli/commands/run-command.d.ts +10 -0
- package/dist/cli/commands/run-command.js +85 -0
- package/dist/cli/commands/run-signals.d.ts +30 -0
- package/dist/cli/commands/run-signals.js +146 -0
- package/dist/cli/commands/runs.js +137 -136
- package/dist/cli/commands/setup.d.ts +2 -2
- package/dist/cli/commands/setup.js +26 -21
- package/dist/cli/commands/study.d.ts +3 -0
- package/dist/cli/commands/study.js +182 -0
- package/dist/cli/commands/tui.d.ts +4 -4
- package/dist/cli/commands/tui.js +21 -21
- package/dist/cli/commands/watch.js +64 -77
- package/dist/cli/deprecations.d.ts +18 -0
- package/dist/cli/deprecations.js +48 -0
- package/dist/cli/doctor.d.ts +18 -5
- package/dist/cli/doctor.js +111 -48
- package/dist/cli/first-run-path.d.ts +12 -10
- package/dist/cli/first-run-path.js +30 -28
- package/dist/cli/io.d.ts +46 -10
- package/dist/cli/io.js +109 -30
- package/dist/cli/observer-follow.d.ts +2 -2
- package/dist/cli/observer-follow.js +5 -6
- package/dist/cli/orientation.d.ts +6 -3
- package/dist/cli/orientation.js +43 -39
- 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 +112 -43
- package/dist/cli/telemetry.d.ts +17 -17
- package/dist/cli/telemetry.js +49 -41
- package/dist/cli.js +1 -1
- package/dist/comms/capture-surface.d.ts +14 -13
- package/dist/comms/capture-surface.js +23 -22
- package/dist/comms/catch-host.d.ts +8 -8
- package/dist/comms/catch-host.js +14 -14
- package/dist/comms/connections.js +4 -4
- package/dist/comms/email-catch.d.ts +3 -3
- package/dist/comms/email-catch.js +8 -8
- package/dist/comms/external-evidence.d.ts +27 -0
- package/dist/comms/external-evidence.js +93 -0
- package/dist/comms/extract.js +2 -2
- package/dist/comms/fake-inbox.d.ts +2 -2
- package/dist/comms/fake-inbox.js +2 -2
- package/dist/comms/lease-store.js +7 -7
- package/dist/comms/receiving-render.d.ts +1 -1
- package/dist/comms/receiving-render.js +2 -2
- 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 +36 -37
- package/dist/comms/sandbox-catch.js +34 -35
- package/dist/comms/setup.js +42 -8
- 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 +4 -4
- package/dist/evidence/browser-hygiene.d.ts +1 -1
- package/dist/evidence/browser-hygiene.js +1 -1
- 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 +5 -5
- package/dist/evidence/secret-scrub.d.ts +9 -0
- package/dist/evidence/secret-scrub.js +96 -0
- package/dist/feedback/draft.js +41 -85
- package/dist/feedback/export-bundle.js +5 -5
- package/dist/feedback/export.d.ts +5 -1
- package/dist/feedback/export.js +16 -17
- package/dist/feedback/feedback.d.ts +3 -3
- package/dist/feedback/feedback.js +21 -3
- package/dist/guest/chromium-text.js +2 -2
- package/dist/guest/desktop-native.d.ts +1 -1
- package/dist/guest/runtime.js +1 -1
- package/dist/index.d.ts +14 -15
- package/dist/index.js +10 -11
- package/dist/keys/key-resolution.d.ts +7 -5
- package/dist/keys/key-resolution.js +40 -38
- package/dist/lab/adapter-extension.d.ts +35 -13
- package/dist/lab/adapter-extension.js +50 -134
- package/dist/lab/adapter-scorer-loader.d.ts +32 -12
- package/dist/lab/adapter-scorer-loader.js +56 -32
- package/dist/lab/composition-rules.js +58 -58
- package/dist/lab/config.js +85 -43
- package/dist/lab/deprecated-fields.d.ts +10 -0
- package/dist/lab/deprecated-fields.js +24 -0
- package/dist/lab/device-presets.d.ts +10 -10
- package/dist/lab/device-presets.js +11 -11
- package/dist/lab/discover.d.ts +13 -9
- package/dist/lab/discover.js +118 -60
- package/dist/lab/doctor.d.ts +53 -11
- package/dist/lab/doctor.js +193 -47
- package/dist/lab/init-plan.js +1 -3
- package/dist/lab/init-templates.js +147 -147
- package/dist/lab/init.d.ts +1 -1
- package/dist/lab/init.js +41 -9
- package/dist/lab/keys.d.ts +2 -0
- package/dist/lab/keys.js +43 -9
- package/dist/lab/lab-deps.d.ts +80 -0
- package/dist/lab/lab-deps.js +4 -0
- package/dist/lab/parse/actors.js +17 -16
- package/dist/lab/parse/comms.js +8 -7
- package/dist/lab/parse/execution.js +15 -14
- package/dist/lab/parse/study-v3.d.ts +23 -0
- package/dist/lab/parse/study-v3.js +259 -0
- package/dist/lab/parse/subject-state.d.ts +7 -7
- package/dist/lab/parse/subject-state.js +18 -17
- package/dist/lab/parse/subject.js +30 -29
- package/dist/lab/parse/values.d.ts +1 -2
- package/dist/lab/parse/values.js +3 -6
- package/dist/lab/persona-resolve.d.ts +7 -7
- package/dist/lab/persona-resolve.js +8 -8
- package/dist/lab/persona.js +1 -3
- package/dist/lab/plan-base.d.ts +0 -2
- package/dist/lab/plan-base.js +6 -4
- package/dist/lab/plan-participants.d.ts +7 -7
- package/dist/lab/plan-participants.js +2 -2
- package/dist/lab/plan-types.d.ts +26 -8
- package/dist/lab/plan.d.ts +4 -18
- package/dist/lab/plan.js +24 -79
- package/dist/lab/preflight-probes.js +11 -11
- package/dist/lab/preflight-result.d.ts +2 -1
- package/dist/lab/preflight-result.js +5 -6
- package/dist/lab/preflight.d.ts +7 -8
- package/dist/lab/preflight.js +6 -6
- package/dist/lab/requirements.d.ts +20 -0
- package/dist/lab/requirements.js +54 -0
- package/dist/lab/route-inputs.d.ts +23 -12
- package/dist/lab/route-inputs.js +48 -51
- package/dist/lab/routing.d.ts +42 -41
- package/dist/lab/routing.js +66 -68
- package/dist/lab/run-lab-events.d.ts +3 -11
- package/dist/lab/run-lab-events.js +2 -16
- package/dist/lab/run-lab-homes.d.ts +76 -0
- package/dist/lab/run-lab-homes.js +7 -0
- package/dist/lab/run-lab-options.d.ts +12 -66
- package/dist/lab/run-lab-options.js +58 -285
- package/dist/lab/summary.d.ts +15 -9
- package/dist/lab/summary.js +24 -17
- package/dist/lab/tasks.d.ts +15 -15
- package/dist/lab/tasks.js +14 -14
- package/dist/lab/types.d.ts +201 -195
- package/dist/lab/types.js +2 -0
- package/dist/lab/validation.d.ts +21 -21
- package/dist/lab/validation.js +61 -59
- package/dist/lab/warnings.d.ts +10 -0
- package/dist/lab/warnings.js +70 -41
- package/dist/library-aliases.d.ts +56 -0
- package/dist/library-aliases.js +22 -0
- package/dist/observer/artifact.d.ts +2 -2
- package/dist/observer/artifact.js +9 -9
- package/dist/observer/data.d.ts +6 -6
- package/dist/observer/data.js +7 -6
- 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 +1 -1
- package/dist/observer/library.js +4 -2
- package/dist/observer/listen.js +5 -4
- package/dist/observer/render.d.ts +1 -1
- package/dist/observer/render.js +12 -7
- package/dist/observer/run-routes.d.ts +4 -4
- package/dist/observer/run-routes.js +6 -6
- package/dist/observer/serve.d.ts +17 -0
- package/dist/observer/serve.js +41 -6
- 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 +24 -17
- package/dist/routes/computer-use/bundle.d.ts +4 -11
- package/dist/routes/computer-use/bundle.js +12 -18
- package/dist/routes/computer-use/diagnostics.d.ts +1 -1
- package/dist/routes/computer-use/diagnostics.js +1 -1
- package/dist/routes/computer-use/e2b-desktop/comms.d.ts +11 -11
- package/dist/routes/computer-use/e2b-desktop/comms.js +24 -27
- package/dist/routes/computer-use/e2b-desktop/desktop.d.ts +2 -2
- package/dist/routes/computer-use/e2b-desktop/desktop.js +8 -11
- package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +16 -15
- package/dist/routes/computer-use/e2b-desktop/fidelity.js +20 -19
- package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +3 -3
- package/dist/routes/computer-use/e2b-desktop/prepare.js +40 -43
- package/dist/routes/computer-use/e2b-desktop/start.d.ts +1 -1
- package/dist/routes/computer-use/e2b-desktop/start.js +32 -30
- package/dist/routes/computer-use/e2b-desktop/state.d.ts +5 -4
- package/dist/routes/computer-use/e2b-desktop/state.js +5 -3
- package/dist/routes/computer-use/e2b-desktop/teardown.d.ts +1 -1
- package/dist/routes/computer-use/e2b-desktop/teardown.js +33 -20
- package/dist/routes/computer-use/external-comms.d.ts +4 -4
- package/dist/routes/computer-use/external-comms.js +19 -43
- package/dist/routes/computer-use/fanout-bundle.d.ts +3 -3
- package/dist/routes/computer-use/fanout-bundle.js +38 -42
- package/dist/routes/computer-use/{fanout-lanes.js → fanout-records.js} +33 -28
- package/dist/routes/computer-use/in-process-desktop.d.ts +3 -10
- package/dist/routes/computer-use/in-process-desktop.js +3 -9
- package/dist/routes/computer-use/live-flush.d.ts +7 -5
- package/dist/routes/computer-use/live-flush.js +20 -28
- package/dist/routes/computer-use/{run-lanes.d.ts → live-phase.d.ts} +4 -2
- package/dist/routes/computer-use/{run-lanes.js → live-phase.js} +17 -16
- package/dist/routes/computer-use/local-tree-pack.d.ts +3 -3
- package/dist/routes/computer-use/local-tree-pack.js +4 -5
- package/dist/routes/computer-use/local-vm.d.ts +11 -8
- package/dist/routes/computer-use/local-vm.js +40 -67
- package/dist/routes/computer-use/participant-desktop.d.ts +8 -23
- package/dist/routes/computer-use/participant-desktop.js +5 -25
- package/dist/routes/computer-use/{lanes.d.ts → participant-execution.d.ts} +11 -11
- package/dist/routes/computer-use/{lanes.js → participant-execution.js} +39 -26
- package/dist/routes/computer-use/participant-facts.d.ts +7 -1
- package/dist/routes/computer-use/participant-facts.js +12 -1
- package/dist/routes/computer-use/participant-model.d.ts +25 -11
- package/dist/routes/computer-use/participant-model.js +76 -34
- package/dist/routes/computer-use/participant-prompt.d.ts +13 -13
- package/dist/routes/computer-use/participant-prompt.js +8 -8
- package/dist/routes/computer-use/participant-runs.d.ts +11 -11
- package/dist/routes/computer-use/participant-runs.js +18 -18
- package/dist/routes/computer-use/plan.d.ts +21 -29
- package/dist/routes/computer-use/plan.js +70 -78
- package/dist/routes/computer-use/preflight.d.ts +3 -5
- package/dist/routes/computer-use/preflight.js +40 -36
- package/dist/routes/computer-use/rerun-selection.js +11 -7
- package/dist/routes/computer-use/result.d.ts +1 -1
- package/dist/routes/computer-use/result.js +48 -38
- package/dist/routes/computer-use/route.d.ts +5 -5
- package/dist/routes/computer-use/route.js +36 -33
- package/dist/routes/computer-use/self-report.d.ts +8 -8
- package/dist/routes/computer-use/self-report.js +33 -33
- package/dist/routes/computer-use/setup.d.ts +9 -15
- package/dist/routes/computer-use/setup.js +106 -83
- package/dist/routes/computer-use/single-bundle.d.ts +13 -16
- package/dist/routes/computer-use/single-bundle.js +46 -53
- package/dist/routes/computer-use/subject-projection.d.ts +6 -8
- package/dist/routes/computer-use/subject-projection.js +24 -23
- package/dist/routes/computer-use/types.d.ts +195 -238
- package/dist/routes/computer-use/types.js +21 -13
- package/dist/routes/preview.d.ts +8 -2
- package/dist/routes/preview.js +8 -5
- package/dist/routes/scripted/bundle.d.ts +5 -8
- package/dist/routes/scripted/bundle.js +23 -27
- package/dist/routes/scripted/plan.d.ts +6 -8
- package/dist/routes/scripted/plan.js +15 -13
- package/dist/routes/scripted/result.d.ts +4 -1
- package/dist/routes/scripted/result.js +15 -11
- package/dist/routes/scripted/route.js +15 -17
- package/dist/routes/scripted/scenario.d.ts +1 -1
- package/dist/routes/scripted/scenario.js +3 -3
- package/dist/routes/scripted/setup.d.ts +3 -2
- package/dist/routes/scripted/setup.js +27 -26
- package/dist/routes/scripted/subject.d.ts +8 -3
- package/dist/routes/scripted/subject.js +10 -6
- package/dist/routes/scripted/surface-records.js +4 -4
- package/dist/routes/scripted/surface-sessions.d.ts +2 -2
- package/dist/routes/scripted/surface-sessions.js +4 -4
- package/dist/routes/scripted/types.d.ts +21 -40
- package/dist/routes/scripted/types.js +2 -3
- package/dist/routes/shared-world/{seat-records.js → bundle-records.js} +17 -16
- package/dist/routes/shared-world/bundle.d.ts +7 -7
- package/dist/routes/shared-world/bundle.js +60 -62
- package/dist/routes/shared-world/checkpoints.d.ts +5 -5
- package/dist/routes/shared-world/checkpoints.js +5 -5
- package/dist/routes/shared-world/comms.d.ts +8 -7
- package/dist/routes/shared-world/comms.js +38 -51
- package/dist/routes/shared-world/external-public.d.ts +6 -5
- package/dist/routes/shared-world/external-public.js +28 -25
- package/dist/routes/shared-world/handoff.d.ts +10 -9
- package/dist/routes/shared-world/handoff.js +89 -81
- package/dist/routes/shared-world/lobby-code.d.ts +7 -7
- package/dist/routes/shared-world/lobby-code.js +22 -22
- package/dist/routes/shared-world/{seats.d.ts → participant-specs.d.ts} +15 -12
- package/dist/routes/shared-world/{seats.js → participant-specs.js} +65 -63
- package/dist/routes/shared-world/plan.d.ts +2 -6
- package/dist/routes/shared-world/plan.js +8 -9
- package/dist/routes/shared-world/provenance.d.ts +4 -4
- package/dist/routes/shared-world/provenance.js +4 -4
- package/dist/routes/shared-world/provisioned.d.ts +3 -2
- package/dist/routes/shared-world/provisioned.js +55 -48
- package/dist/routes/shared-world/result.js +47 -36
- package/dist/routes/shared-world/route.js +54 -57
- package/dist/routes/shared-world/setup.d.ts +6 -5
- package/dist/routes/shared-world/setup.js +16 -18
- package/dist/routes/shared-world/types.d.ts +70 -141
- package/dist/routes/shared-world/types.js +5 -5
- package/dist/routes/terminal/adapter.d.ts +10 -10
- package/dist/routes/terminal/adapter.js +32 -129
- package/dist/routes/terminal/bundle.d.ts +10 -15
- package/dist/routes/terminal/bundle.js +43 -52
- package/dist/routes/terminal/credentials.d.ts +4 -4
- package/dist/routes/terminal/credentials.js +20 -20
- package/dist/routes/terminal/dry-run.d.ts +1 -1
- package/dist/routes/terminal/dry-run.js +13 -15
- package/dist/routes/terminal/encoding.d.ts +1 -1
- package/dist/routes/terminal/encoding.js +4 -4
- package/dist/routes/terminal/ledger.d.ts +8 -8
- package/dist/routes/terminal/ledger.js +22 -22
- package/dist/routes/terminal/live-finish.d.ts +1 -2
- package/dist/routes/terminal/live-finish.js +24 -23
- package/dist/routes/terminal/live-sandbox.d.ts +3 -2
- package/dist/routes/terminal/live-sandbox.js +31 -32
- package/dist/routes/terminal/participant-text.d.ts +23 -0
- package/dist/routes/terminal/participant-text.js +165 -0
- package/dist/routes/terminal/persona.js +1 -1
- package/dist/routes/terminal/plan.d.ts +2 -6
- package/dist/routes/terminal/plan.js +23 -19
- package/dist/routes/terminal/recorder.d.ts +6 -1
- package/dist/routes/terminal/recorder.js +12 -4
- package/dist/routes/terminal/result.js +12 -12
- package/dist/routes/terminal/route.js +30 -31
- package/dist/routes/terminal/runtime.d.ts +3 -2
- package/dist/routes/terminal/runtime.js +3 -3
- package/dist/routes/terminal/sandbox.d.ts +4 -4
- package/dist/routes/terminal/sandbox.js +10 -10
- package/dist/routes/terminal/session.js +22 -19
- package/dist/routes/terminal/token-usage.d.ts +1 -1
- package/dist/routes/terminal/token-usage.js +10 -11
- package/dist/routes/terminal/trace.d.ts +7 -10
- package/dist/routes/terminal/trace.js +11 -66
- package/dist/routes/terminal/types.d.ts +104 -114
- package/dist/routes/terminal/types.js +12 -7
- package/dist/run/active-runs.d.ts +13 -0
- package/dist/run/active-runs.js +12 -0
- package/dist/run/bundle-shape.d.ts +2 -1
- package/dist/run/bundle-shape.js +7 -7
- package/dist/run/bundle.d.ts +99 -92
- package/dist/run/bundle.js +10 -8
- package/dist/run/cost-summary.js +6 -5
- package/dist/run/costs.d.ts +6 -6
- package/dist/run/costs.js +17 -11
- package/dist/run/detail.d.ts +9 -9
- package/dist/run/detail.js +10 -10
- package/dist/run/dry-run-inputs.js +1 -1
- package/dist/run/dry-run.js +23 -30
- package/dist/run/{study-files.d.ts → evidence-files.d.ts} +4 -4
- package/dist/run/{study-files.js → evidence-files.js} +5 -5
- package/dist/run/feedback-shape.js +1 -1
- package/dist/run/judge.d.ts +34 -16
- package/dist/run/judge.js +41 -14
- package/dist/run/locate.d.ts +2 -0
- package/dist/run/locate.js +3 -1
- package/dist/run/outcomes.d.ts +3 -3
- package/dist/run/outcomes.js +3 -3
- package/dist/run/participant-records.d.ts +2 -2
- package/dist/run/participant-records.js +2 -2
- package/dist/run/paths.d.ts +1 -1
- package/dist/run/paths.js +2 -2
- package/dist/run/pricing.d.ts +30 -15
- package/dist/run/pricing.js +49 -30
- package/dist/run/projection.d.ts +27 -27
- package/dist/run/projection.js +23 -23
- package/dist/run/reclaim.d.ts +6 -0
- package/dist/run/reclaim.js +15 -5
- package/dist/run/results.d.ts +5 -5
- package/dist/run/run-index.d.ts +9 -7
- package/dist/run/run-index.js +24 -25
- 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 +7 -4
- package/dist/run/run.js +10 -6
- package/dist/run/sandbox-receipts.d.ts +5 -5
- package/dist/run/sandbox-receipts.js +6 -6
- package/dist/run/shared-world-evidence.d.ts +67 -66
- package/dist/run/shared-world-evidence.js +4 -4
- package/dist/run/shared-world-shape.d.ts +3 -3
- package/dist/run/shared-world-shape.js +16 -16
- package/dist/run/stats.d.ts +17 -11
- package/dist/run/stats.js +124 -66
- package/dist/run/status.d.ts +21 -32
- package/dist/run/status.js +34 -33
- package/dist/run/stored-runs.js +2 -1
- package/dist/run/stream-shape.js +1 -1
- package/dist/run/streams.d.ts +29 -22
- package/dist/run/study-provenance.d.ts +47 -0
- package/dist/run/study-provenance.js +63 -0
- package/dist/run/study-result.d.ts +16 -0
- package/dist/run/study-result.js +9 -0
- package/dist/run/terminal-contract.d.ts +5 -5
- package/dist/run/terminal-contract.js +4 -4
- package/dist/run/text.d.ts +2 -0
- package/dist/run/text.js +4 -0
- package/dist/run/transient-comms-secrets.d.ts +5 -0
- package/dist/run/transient-comms-secrets.js +12 -0
- package/dist/run-lab.d.ts +40 -38
- package/dist/run-lab.js +42 -40
- package/dist/study/convert.d.ts +33 -0
- package/dist/study/convert.js +432 -0
- 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 +43 -0
- 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/subject/clone.d.ts +1 -1
- package/dist/subject/desktop-cli.d.ts +2 -2
- package/dist/subject/desktop-cli.js +3 -3
- package/dist/subject/local-tree-archive.d.ts +1 -1
- package/dist/subject/local-tree-archive.js +5 -5
- package/dist/subject/local-tree.d.ts +3 -3
- package/dist/subject/local-tree.js +1 -1
- package/dist/subject/node-bootstrap.d.ts +1 -1
- package/dist/subject/node-bootstrap.js +4 -4
- package/dist/subject/runtime.js +10 -11
- package/dist/subject/serve.d.ts +1 -1
- package/dist/subject/serve.js +4 -4
- package/dist/subject/state.d.ts +1 -1
- package/dist/subject/steps.d.ts +8 -8
- package/dist/subject/steps.js +7 -7
- package/dist/substrates/command-failure.d.ts +3 -3
- package/dist/substrates/command-failure.js +3 -3
- package/dist/substrates/detached.d.ts +6 -6
- package/dist/substrates/detached.js +7 -7
- package/dist/substrates/e2b/cdp-probe.d.ts +11 -11
- package/dist/substrates/e2b/cdp-probe.js +15 -18
- package/dist/substrates/e2b/desktop-browser.d.ts +5 -5
- package/dist/substrates/e2b/desktop-browser.js +12 -12
- package/dist/substrates/e2b/desktop-cdp.d.ts +15 -15
- package/dist/substrates/e2b/desktop-cdp.js +11 -11
- package/dist/substrates/e2b/desktop-executor.d.ts +1 -1
- package/dist/substrates/e2b/desktop-executor.js +1 -1
- package/dist/substrates/e2b/desktop-geometry.d.ts +6 -6
- package/dist/substrates/e2b/desktop-geometry.js +9 -9
- package/dist/substrates/e2b/desktop-media.d.ts +1 -1
- package/dist/substrates/e2b/desktop-media.js +3 -3
- 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/sandbox.d.ts +1 -1
- package/dist/substrates/e2b/sandbox.js +2 -2
- package/dist/substrates/e2b/sdk.d.ts +11 -11
- package/dist/substrates/e2b/sdk.js +8 -8
- package/dist/substrates/local/runtime-host.d.ts +2 -0
- package/dist/substrates/local/runtime-host.js +6 -0
- package/dist/tui/actions.d.ts +8 -6
- package/dist/tui/actions.js +31 -22
- package/dist/tui/contract.d.ts +16 -16
- package/dist/tui/contract.js +10 -10
- package/dist/tui/launch.d.ts +4 -4
- package/dist/tui/launch.js +18 -19
- package/dist/tui/project.js +5 -5
- package/dist/tui-app.js +83 -83
- package/dist/verify/actor.d.ts +14 -14
- package/dist/verify/actor.js +45 -45
- package/dist/verify/artifacts.d.ts +3 -3
- package/dist/verify/artifacts.js +6 -6
- package/dist/verify/context-growth.d.ts +9 -0
- package/dist/verify/context-growth.js +62 -0
- package/dist/verify/costs.d.ts +7 -7
- package/dist/verify/costs.js +9 -9
- package/dist/verify/liveness.d.ts +1 -1
- package/dist/verify/liveness.js +4 -1
- package/dist/verify/rerun.d.ts +1 -1
- package/dist/verify/rerun.js +1 -1
- 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 +18 -18
- package/dist/verify/subject.d.ts +4 -4
- package/dist/verify/subject.js +18 -18
- package/dist/verify/verify.js +98 -49
- package/docs/README.md +26 -33
- package/docs/architecture/actor-contract.md +105 -98
- package/docs/architecture/desktop-sessions.md +14 -14
- package/docs/architecture/external-public-shared-world.md +66 -59
- package/docs/architecture/github-feedback-loop.md +1 -4
- package/docs/architecture/guest-desktop.md +2 -2
- package/docs/architecture/observer.md +37 -37
- package/docs/architecture/restricted-codex-analysis.md +70 -30
- package/docs/architecture/serve.md +34 -37
- package/docs/architecture/state-driven-executor.md +55 -59
- package/docs/architecture/task-protocol-support.md +7 -9
- package/docs/architecture/{terminal-product-lane.md → terminal-product-route.md} +83 -115
- package/docs/contracts/README.md +24 -0
- package/docs/contracts/adapter-admission.md +3 -3
- package/docs/contracts/adapter-fixtures.md +2 -5
- 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 +54 -51
- package/docs/contracts/schemas.md +505 -390
- package/docs/contracts/study-analysis.md +26 -2
- package/docs/contracts/study-costs.md +11 -7
- 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/decisions/0004-participant-desktops-stay-in-the-route.md +2 -1
- 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 +8 -7
- 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/package.json +16 -17
- package/skills/humanish/SKILL.md +63 -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 -45
- package/dist/actors/codex/qualified-versions.js +0 -87
- package/dist/cli/commands/lab.d.ts +0 -3
- package/dist/cli/commands/lab.js +0 -193
- package/dist/deprecated.d.ts +0 -90
- package/dist/deprecated.js +0 -106
- package/dist/lab/bag-overrides.d.ts +0 -18
- package/dist/lab/bag-overrides.js +0 -121
- package/dist/observer/static.d.ts +0 -39
- package/dist/observer/static.js +0 -369
- package/dist/routes/computer-use/legacy-lane-spec.d.ts +0 -62
- package/dist/routes/computer-use/legacy-lane-spec.js +0 -39
- 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 -294
- 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/routes/computer-use/{fanout-lanes.d.ts → fanout-records.d.ts} +0 -0
- /package/dist/routes/shared-world/{seat-records.d.ts → bundle-records.d.ts} +0 -0
package/dist/run/costs.js
CHANGED
|
@@ -2,11 +2,11 @@ import { round6 } from "./pricing.js";
|
|
|
2
2
|
import { bindExistingRunArtifactPaths } from "./paths.js";
|
|
3
3
|
import { contradictsAccountBilling } from "../verify/costs.js";
|
|
4
4
|
import { EVIDENCE_LIMITS } from "../analysis/evidence.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { readBoundedFile } from "./evidence-files.js";
|
|
6
|
+
import { readAutomaticAnalysisAccounting } from "../analysis/job.js";
|
|
7
|
+
import { readAnalysisAccountingRecords } from "../analysis/store-executions.js";
|
|
8
8
|
import { RUN_BUNDLE_FILE } from "./bundle.js";
|
|
9
|
-
export function
|
|
9
|
+
export function emptyCostTotals() {
|
|
10
10
|
return {
|
|
11
11
|
estimatedTotalUsd: null,
|
|
12
12
|
runEstimatedUsd: null,
|
|
@@ -24,7 +24,7 @@ const isKnownUsd = (value) => typeof value === "number" && Number.isFinite(value
|
|
|
24
24
|
function sumKnown(a, b) {
|
|
25
25
|
return a === null && b === null ? null : round6((a ?? 0) + (b ?? 0));
|
|
26
26
|
}
|
|
27
|
-
export function
|
|
27
|
+
export function addCostTotals(into, next) {
|
|
28
28
|
for (const key of ["estimatedTotalUsd", "runEstimatedUsd", "analysisEstimatedUsd"]) {
|
|
29
29
|
into[key] = sumKnown(into[key], next[key]);
|
|
30
30
|
}
|
|
@@ -41,16 +41,22 @@ export function addStudyCosts(into, next) {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
/** A read-only, bounded accounting pass. Never validates findings, dispatches, repairs or writes. */
|
|
44
|
-
export async function
|
|
45
|
-
const costs =
|
|
44
|
+
export async function readCostTotals(cwd, entry) {
|
|
45
|
+
const costs = emptyCostTotals();
|
|
46
46
|
// Run-cost and analysis-history warnings stay apart: only the second kind makes the history
|
|
47
47
|
// uncertain, whatever a run-cost warning is named.
|
|
48
48
|
const runWarnings = [];
|
|
49
49
|
const analysisWarnings = [];
|
|
50
|
-
|
|
50
|
+
// A dry run makes no model request and creates no desktop, so with no figure it costs $0. A
|
|
51
|
+
// recorded unknown (null) figure stays unknown.
|
|
52
|
+
costs.runEstimatedUsd = isKnownUsd(entry.estimatedCostUsd)
|
|
53
|
+
? entry.estimatedCostUsd
|
|
54
|
+
: entry.estimatedCostUsd === undefined && entry.mode === "dry-run"
|
|
55
|
+
? 0
|
|
56
|
+
: null;
|
|
51
57
|
try {
|
|
52
58
|
const prepared = await bindExistingRunArtifactPaths(cwd, entry.runId);
|
|
53
|
-
const bytes = await
|
|
59
|
+
const bytes = await readBoundedFile(prepared, RUN_BUNDLE_FILE, EVIDENCE_LIMITS.sourceBytes);
|
|
54
60
|
let bundle = null;
|
|
55
61
|
try {
|
|
56
62
|
bundle = bytes ? JSON.parse(bytes.toString("utf8")) : null;
|
|
@@ -82,8 +88,8 @@ export async function readStudyCosts(cwd, entry) {
|
|
|
82
88
|
runWarnings.push("RUN_COST_COMPLETENESS_UNKNOWN");
|
|
83
89
|
}
|
|
84
90
|
const [history, automatic] = await Promise.all([
|
|
85
|
-
|
|
86
|
-
|
|
91
|
+
readAnalysisAccountingRecords(prepared),
|
|
92
|
+
readAutomaticAnalysisAccounting(prepared),
|
|
87
93
|
]);
|
|
88
94
|
analysisWarnings.push(...history.warnings);
|
|
89
95
|
const records = new Map(history.records.map((record) => [record.id, record]));
|
package/dist/run/detail.d.ts
CHANGED
|
@@ -9,19 +9,19 @@ interface RunThought {
|
|
|
9
9
|
at?: string;
|
|
10
10
|
}
|
|
11
11
|
export interface RunParticipant {
|
|
12
|
-
/** Stream id
|
|
12
|
+
/** Stream id: stable within a run, and what distinguishes participants of one study. */
|
|
13
13
|
id: string;
|
|
14
|
-
/** What to call them on screen: the
|
|
14
|
+
/** What to call them on screen: the participant's own label, else the persona id. */
|
|
15
15
|
label: string;
|
|
16
16
|
/** The persona id, when the trace recorded one. */
|
|
17
17
|
personaId?: string;
|
|
18
18
|
/**
|
|
19
19
|
* The persona's declared traits (`patience:medium`, `skill:medium`, …). This is the abbreviated
|
|
20
|
-
* persona a reader actually wants beside a live thought
|
|
20
|
+
* persona a reader actually wants beside a live thought. It says who is struggling, which a
|
|
21
21
|
* name alone does not.
|
|
22
22
|
*/
|
|
23
23
|
traits: string[];
|
|
24
|
-
/** `running`, `passed`, `failed`, `contract_proof_only
|
|
24
|
+
/** `running`, `passed`, `failed`, `contract_proof_only`: the participant's own word for itself. */
|
|
25
25
|
status?: string;
|
|
26
26
|
/** Why the actor stopped, when it has. */
|
|
27
27
|
completionReason?: string;
|
|
@@ -29,8 +29,8 @@ export interface RunParticipant {
|
|
|
29
29
|
turns?: number;
|
|
30
30
|
actions?: number;
|
|
31
31
|
/**
|
|
32
|
-
* Thoughts recorded so far. The mid-run flush carries the trace
|
|
33
|
-
* so a live participant has no turn count to show
|
|
32
|
+
* Thoughts recorded so far. The mid-run flush carries the trace items but not the `counts` block,
|
|
33
|
+
* so a live participant has no turn count to show, but the thoughts can be counted directly, and
|
|
34
34
|
* "8 thoughts" is a true statement about progress rather than an inferred turn number.
|
|
35
35
|
*/
|
|
36
36
|
thoughts?: number;
|
|
@@ -49,13 +49,13 @@ export interface RunDetail {
|
|
|
49
49
|
observerPath?: string;
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
|
-
* Read one run's participants. Returns null when the run has no readable bundle yet
|
|
52
|
+
* Read one run's participants. Returns null when the run has no readable bundle yet, an ordinary
|
|
53
53
|
* state for a run that has just started, not a failure.
|
|
54
54
|
*
|
|
55
|
-
* Reads the bundle
|
|
55
|
+
* Reads the bundle narrowly rather than through `loadRunBundle`, which applies the strict
|
|
56
56
|
* evidence-of-record guard. That guard is right for verification and wrong here: a mid-run flush is
|
|
57
57
|
* a partial document by definition, so validating it as a complete bundle would make the live view
|
|
58
|
-
*
|
|
58
|
+
* (the only view that needs this) the one case that never renders. Nothing read here is treated
|
|
59
59
|
* as a claim about what a participant did; it is what to put on a screen.
|
|
60
60
|
*/
|
|
61
61
|
export declare function readRunDetail(cwdInput: string, runId: string): Promise<RunDetail | null>;
|
package/dist/run/detail.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// What
|
|
1
|
+
// What one run is doing right now: who is in it, what they are thinking, how far they have got.
|
|
2
2
|
// Unlike the run index, it opens the bundle, which is affordable for the one run someone is
|
|
3
3
|
// looking at.
|
|
4
4
|
//
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// - `stream.actor` once it has finished.
|
|
8
8
|
// Reading both means the same screen renders a run the whole way through rather than going blank
|
|
9
9
|
// at the moment it completes.
|
|
10
|
-
import {
|
|
10
|
+
import { readAutomaticAnalysis } from "../analysis/automatic.js";
|
|
11
11
|
import path from "node:path";
|
|
12
12
|
import { estimateActorCostForExecution } from "./pricing.js";
|
|
13
13
|
import { resolveRunPath } from "./locate.js";
|
|
@@ -18,9 +18,9 @@ const RUN_DETAIL_SCHEMA = "humanish.run-detail.v1";
|
|
|
18
18
|
/**
|
|
19
19
|
* The latest reasoning a participant has recorded.
|
|
20
20
|
*
|
|
21
|
-
* Takes the
|
|
21
|
+
* Takes the last reasoning item rather than the newest by timestamp: the trace is append-ordered by
|
|
22
22
|
* construction, and half of a live flush may not carry `at` yet. An item still in flight is skipped
|
|
23
|
-
*
|
|
23
|
+
* because a partial thought read mid-write would be quoted as though the participant had finished it.
|
|
24
24
|
*/
|
|
25
25
|
function latestThought(trace) {
|
|
26
26
|
const items = trace.items ?? [];
|
|
@@ -68,9 +68,9 @@ function participantFrom(stream, index) {
|
|
|
68
68
|
/**
|
|
69
69
|
* What a participant has spent, priced the same way whether the run is finished or in flight.
|
|
70
70
|
*
|
|
71
|
-
* A finished trace carries its own `estimatedCost`. A live one carries the
|
|
71
|
+
* A finished trace carries its own `estimatedCost`. A live one carries the running usage and the
|
|
72
72
|
* model it prices at, so the same estimator gives a figure mid-run instead of the screen reporting
|
|
73
|
-
* the cost as unknown until the moment the run ends
|
|
73
|
+
* the cost as unknown until the moment the run ends. That is the half of a run where knowing what
|
|
74
74
|
* it is costing actually changes what you do.
|
|
75
75
|
*/
|
|
76
76
|
function costOf(trace) {
|
|
@@ -95,13 +95,13 @@ function costOf(trace) {
|
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
/**
|
|
98
|
-
* Read one run's participants. Returns null when the run has no readable bundle yet
|
|
98
|
+
* Read one run's participants. Returns null when the run has no readable bundle yet, an ordinary
|
|
99
99
|
* state for a run that has just started, not a failure.
|
|
100
100
|
*
|
|
101
|
-
* Reads the bundle
|
|
101
|
+
* Reads the bundle narrowly rather than through `loadRunBundle`, which applies the strict
|
|
102
102
|
* evidence-of-record guard. That guard is right for verification and wrong here: a mid-run flush is
|
|
103
103
|
* a partial document by definition, so validating it as a complete bundle would make the live view
|
|
104
|
-
*
|
|
104
|
+
* (the only view that needs this) the one case that never renders. Nothing read here is treated
|
|
105
105
|
* as a claim about what a participant did; it is what to put on a screen.
|
|
106
106
|
*/
|
|
107
107
|
export async function readRunDetail(cwdInput, runId) {
|
|
@@ -126,7 +126,7 @@ export async function readRunDetail(cwdInput, runId) {
|
|
|
126
126
|
}
|
|
127
127
|
const streams = Array.isArray(bundle.streams) ? bundle.streams : [];
|
|
128
128
|
const observerAbsolute = path.join(runPaths.absoluteRunRoot, "observer", "index.html");
|
|
129
|
-
const automaticAnalysis = await
|
|
129
|
+
const automaticAnalysis = await readAutomaticAnalysis(cwd, runId);
|
|
130
130
|
return {
|
|
131
131
|
...(automaticAnalysis === undefined ? {} : { automaticAnalysis }),
|
|
132
132
|
schema: RUN_DETAIL_SCHEMA,
|
|
@@ -12,7 +12,7 @@ const builtinPersona = {
|
|
|
12
12
|
const builtinScenario = {
|
|
13
13
|
id: "builtin-first-run-smoke",
|
|
14
14
|
title: "Built-in First-Run Smoke",
|
|
15
|
-
goal: "
|
|
15
|
+
goal: "Write a public-safe dry-run bundle from built-in defaults.",
|
|
16
16
|
source: "builtin:first-run-smoke",
|
|
17
17
|
sourceDigest: "builtin",
|
|
18
18
|
};
|
package/dist/run/dry-run.js
CHANGED
|
@@ -9,7 +9,7 @@ import {} from "./streams.js";
|
|
|
9
9
|
import { participantEvent, participantIdsOf, participantRecord, participantStream, } from "./participant-records.js";
|
|
10
10
|
import { implicitProjectDirectoryExists, readPackageName, validateCwd } from "./project.js";
|
|
11
11
|
import { loadDryRunInputs } from "./dry-run-inputs.js";
|
|
12
|
-
import { judgeExecution, judgePreview, OUTCOME_POLICIES, resultOk } from "./judge.js";
|
|
12
|
+
import { judgeExecution, judgePreview, OUTCOME_POLICIES, resultOk, verdictText, } from "./judge.js";
|
|
13
13
|
/**
|
|
14
14
|
* The preview route's run. The run scope closes the run it started on every exit, including
|
|
15
15
|
* the fail-closed ones. It renders an Observer only when `options.observer` asks for one.
|
|
@@ -33,11 +33,11 @@ async function runDryRunInScope(options, scope) {
|
|
|
33
33
|
const warnings = [];
|
|
34
34
|
if (cwdError)
|
|
35
35
|
return refused(requestedCwd, warnings, cwdError);
|
|
36
|
-
const participants = normalizeParticipantCount(options.
|
|
36
|
+
const participants = normalizeParticipantCount(options.participantCount);
|
|
37
37
|
if (participants === null) {
|
|
38
38
|
return refused(requestedCwd, warnings, {
|
|
39
|
-
code: "
|
|
40
|
-
message: "--
|
|
39
|
+
code: "HUMANISH_INVALID_PARTICIPANT_COUNT",
|
|
40
|
+
message: "--count must be a positive integer.",
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
43
|
// Bind the physical project, as the lab routes do: a symlinked cwd retargeted mid-run cannot
|
|
@@ -48,7 +48,7 @@ async function runDryRunInScope(options, scope) {
|
|
|
48
48
|
if (!options.dryRun) {
|
|
49
49
|
return refused(requestedCwd, warnings, {
|
|
50
50
|
code: "HUMANISH_LIVE_RUN_UNIMPLEMENTED",
|
|
51
|
-
message: "
|
|
51
|
+
message: "humanish run needs a study. List studies with humanish study list, or run humanish run --dry-run for a sample bundle.",
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
54
|
const createdAt = new Date().toISOString();
|
|
@@ -66,6 +66,8 @@ async function runDryRunInScope(options, scope) {
|
|
|
66
66
|
mode: options.dryRun ? "dry-run" : "live",
|
|
67
67
|
lab: options.lab,
|
|
68
68
|
renderReview: renderReviewMarkdown,
|
|
69
|
+
// The run starts at the time its id and source were stamped with.
|
|
70
|
+
now: () => Date.parse(createdAt),
|
|
69
71
|
...(options.observer === undefined ? {} : { observer: { open: options.observer.open } }),
|
|
70
72
|
});
|
|
71
73
|
if (!started.ok)
|
|
@@ -85,23 +87,14 @@ async function runDryRunInScope(options, scope) {
|
|
|
85
87
|
});
|
|
86
88
|
const judgment = judgePreview();
|
|
87
89
|
const bundle = {
|
|
88
|
-
...bundleHead({
|
|
89
|
-
runId,
|
|
90
|
-
mode: "dry-run",
|
|
91
|
-
participants,
|
|
92
|
-
createdAt,
|
|
93
|
-
cwd,
|
|
94
|
-
artifactRoot,
|
|
95
|
-
...(options.lab === undefined ? {} : { lab: options.lab }),
|
|
96
|
-
source,
|
|
97
|
-
}),
|
|
90
|
+
...bundleHead(run, { participants, cwd, artifactRoot, source }),
|
|
98
91
|
persona: inputs.persona,
|
|
99
92
|
scenario: inputs.scenario,
|
|
100
93
|
lifecycle: [
|
|
101
94
|
{
|
|
102
95
|
at: createdAt,
|
|
103
96
|
event: "run.created",
|
|
104
|
-
message: `Synthetic dry-run
|
|
97
|
+
message: `Synthetic dry-run bundle created with ${participants} simulated participant${participants === 1 ? "" : "s"}.`,
|
|
105
98
|
},
|
|
106
99
|
{
|
|
107
100
|
at: createdAt,
|
|
@@ -124,7 +117,7 @@ async function runDryRunInScope(options, scope) {
|
|
|
124
117
|
events: observerFixtures.events,
|
|
125
118
|
redaction: {
|
|
126
119
|
status: "passed",
|
|
127
|
-
notes: "Dry-run bundle
|
|
120
|
+
notes: "Dry-run bundle: synthetic data only, nothing from a product.",
|
|
128
121
|
},
|
|
129
122
|
artifacts: bundleArtifacts(),
|
|
130
123
|
review: createReviewSummary(judgment.verdict),
|
|
@@ -157,14 +150,14 @@ async function runDryRunInScope(options, scope) {
|
|
|
157
150
|
};
|
|
158
151
|
}
|
|
159
152
|
/**
|
|
160
|
-
* The preview's review, with the verdict judgePreview gave it. It claims
|
|
161
|
-
* never product behavior.
|
|
153
|
+
* The preview's review, with the verdict judgePreview gave it. It claims only that the run's
|
|
154
|
+
* files were written, never product behavior.
|
|
162
155
|
*/
|
|
163
156
|
function createReviewSummary(verdict) {
|
|
164
157
|
return {
|
|
165
158
|
schema: REVIEW_SCHEMA,
|
|
166
159
|
verdict,
|
|
167
|
-
summary: "
|
|
160
|
+
summary: "Dry run: humanish wrote a synthetic run bundle. No product behavior was tested.",
|
|
168
161
|
gaps: [
|
|
169
162
|
"No browser was launched.",
|
|
170
163
|
"No product state was verified.",
|
|
@@ -180,7 +173,7 @@ Run: ${bundle.runId}
|
|
|
180
173
|
|
|
181
174
|
Mode: ${bundle.mode}
|
|
182
175
|
|
|
183
|
-
Verdict: ${bundle.review.verdict}
|
|
176
|
+
Verdict: ${verdictText(bundle.review.verdict, bundle.mode)}
|
|
184
177
|
|
|
185
178
|
${bundle.review.summary}
|
|
186
179
|
|
|
@@ -211,13 +204,13 @@ async function renderPreviewObserver(finished, warnings) {
|
|
|
211
204
|
return undefined;
|
|
212
205
|
}
|
|
213
206
|
}
|
|
214
|
-
/** One synthetic stream per
|
|
207
|
+
/** One synthetic stream per stream kind (UI, terminal and the rest); the preview cycles through them. */
|
|
215
208
|
const SYNTHETIC_STREAM_TEMPLATES = [
|
|
216
209
|
{
|
|
217
210
|
kind: "ui",
|
|
218
211
|
mode: "browser-sim",
|
|
219
212
|
label: "UI journey",
|
|
220
|
-
currentStep: "Route and viewport
|
|
213
|
+
currentStep: "Route and viewport recorded",
|
|
221
214
|
summary: "Simulated browser participant reserved for VNC playback, screenshots, route state, and interaction trace.",
|
|
222
215
|
tail: "open target app\nresolve first-run route\ncapture viewport state\nrecord interaction trace",
|
|
223
216
|
viewport: { width: 1440, height: 960, deviceScaleFactor: 1 },
|
|
@@ -226,19 +219,19 @@ const SYNTHETIC_STREAM_TEMPLATES = [
|
|
|
226
219
|
kind: "terminal",
|
|
227
220
|
mode: "cli-sim",
|
|
228
221
|
label: "CLI actor",
|
|
229
|
-
currentStep: "Command transcript
|
|
222
|
+
currentStep: "Command transcript recorded",
|
|
230
223
|
summary: "Simulated CLI participant reserved for command-by-command persona runs with stdout/stderr and artifact links.",
|
|
231
224
|
// Every command in a shipped sample tail must be one the CLI actually accepts: participants
|
|
232
225
|
// read and run them. tests/surface/shipped-command-strings.test.ts checks this against the
|
|
233
226
|
// command table.
|
|
234
|
-
tail: "$ humanish doctor\nok target cwd\nok humanish source\n$ humanish run first-run\
|
|
227
|
+
tail: "$ humanish doctor\nok target cwd\nok humanish source\n$ humanish run first-run\nhumanish run dry-run",
|
|
235
228
|
viewport: undefined,
|
|
236
229
|
},
|
|
237
230
|
{
|
|
238
231
|
kind: "tui",
|
|
239
232
|
mode: "tui-sim",
|
|
240
233
|
label: "TUI actor",
|
|
241
|
-
currentStep: "Terminal UI frame
|
|
234
|
+
currentStep: "Terminal UI frame recorded",
|
|
242
235
|
summary: "Simulated TUI participant reserved for PTY bytes, ANSI rendering, focus replay, and optional assisted attach.",
|
|
243
236
|
tail: "\u001b[2mhumanish TUI frame\u001b[0m\n> persona: skeptical-power-user\n> scenario: onboarding-regression\nstatus: awaiting live PTY transport",
|
|
244
237
|
viewport: undefined,
|
|
@@ -247,9 +240,9 @@ const SYNTHETIC_STREAM_TEMPLATES = [
|
|
|
247
240
|
kind: "codex-ui",
|
|
248
241
|
mode: "codex-app-sim",
|
|
249
242
|
label: "Codex UI",
|
|
250
|
-
currentStep: "App-server embed
|
|
243
|
+
currentStep: "App-server embed recorded",
|
|
251
244
|
summary: "Simulated Codex UI participant reserved for app-server sessions that can be watched beside terminal evidence.",
|
|
252
|
-
tail: "codex-app-server session
|
|
245
|
+
tail: "codex-app-server session (dry run)\nstate: not_connected\nembed: pending provider URL\nreceipts: planned",
|
|
253
246
|
viewport: { width: 1280, height: 900, deviceScaleFactor: 1 },
|
|
254
247
|
},
|
|
255
248
|
];
|
|
@@ -262,7 +255,7 @@ function buildSyntheticObserverFixtures(args) {
|
|
|
262
255
|
at: args.createdAt,
|
|
263
256
|
level: "info",
|
|
264
257
|
type: "observer.contract.created",
|
|
265
|
-
message: "Created public-safe
|
|
258
|
+
message: "Created the public-safe Observer streams.",
|
|
266
259
|
},
|
|
267
260
|
];
|
|
268
261
|
for (let index = 0; index < args.count; index += 1) {
|
|
@@ -331,7 +324,7 @@ function buildSyntheticObserverFixtures(args) {
|
|
|
331
324
|
at: args.createdAt,
|
|
332
325
|
level: "info",
|
|
333
326
|
type: "sim.contract.ready",
|
|
334
|
-
message: `${template.label} stream
|
|
327
|
+
message: `${template.label} stream ready.`,
|
|
335
328
|
}), participantEvent(ids, {
|
|
336
329
|
id: `event-${String(index + 1).padStart(3, "0")}-b`,
|
|
337
330
|
at: args.createdAt,
|
|
@@ -4,7 +4,7 @@ import { type PreparedOutputRoot } from "./contained-output.js";
|
|
|
4
4
|
* percent-decoded up to five times, and each round must still be a plain relative path, so an
|
|
5
5
|
* encoded `..` or separator cannot survive into a later decode.
|
|
6
6
|
*/
|
|
7
|
-
export declare function
|
|
7
|
+
export declare function isEvidencePath(value: string): boolean;
|
|
8
8
|
/**
|
|
9
9
|
* True when `value` (at most `maxLength` characters) stays a plain relative path through up to five
|
|
10
10
|
* rounds of percent-decoding: no round may match `unsafe`, have an empty, `.` or `..` segment, or
|
|
@@ -16,13 +16,13 @@ export declare function decodesToPlainRelativePath(value: string, maxLength: num
|
|
|
16
16
|
* not turn an analysis budget into an unbounded read. No returned bytes have
|
|
17
17
|
* authority to select another file or initiate a network request.
|
|
18
18
|
*/
|
|
19
|
-
export declare function
|
|
19
|
+
export declare function readBoundedFile(root: PreparedOutputRoot, relativePath: string, maxBytes: number): Promise<Buffer | null>;
|
|
20
20
|
/**
|
|
21
21
|
* After a bounded read returned nothing: true when the file is absent, false when something is
|
|
22
22
|
* there that could not be read. Errors other than ENOENT propagate.
|
|
23
23
|
*/
|
|
24
24
|
export declare function pathMissing(filePath: string): Promise<boolean>;
|
|
25
|
-
export type
|
|
25
|
+
export type BoundedFileResult = {
|
|
26
26
|
state: "read";
|
|
27
27
|
bytes: Buffer;
|
|
28
28
|
} | {
|
|
@@ -32,4 +32,4 @@ export type BoundedStudyFileResult = {
|
|
|
32
32
|
state: "unavailable";
|
|
33
33
|
};
|
|
34
34
|
/** Size refusals are distinguished only after the same contained regular-file checks. */
|
|
35
|
-
export declare function
|
|
35
|
+
export declare function readBoundedFileResult(root: PreparedOutputRoot, relativePath: string, maxBytes: number): Promise<BoundedFileResult>;
|
|
@@ -12,7 +12,7 @@ import { isNodeError } from "./type-guards.js";
|
|
|
12
12
|
* percent-decoded up to five times, and each round must still be a plain relative path, so an
|
|
13
13
|
* encoded `..` or separator cannot survive into a later decode.
|
|
14
14
|
*/
|
|
15
|
-
export function
|
|
15
|
+
export function isEvidencePath(value) {
|
|
16
16
|
return decodesToPlainRelativePath(value, 1024, /[\\:\x00-\x1f\x7f]|^\//);
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
@@ -54,8 +54,8 @@ export function decodesToPlainRelativePath(value, maxLength, unsafe) {
|
|
|
54
54
|
* not turn an analysis budget into an unbounded read. No returned bytes have
|
|
55
55
|
* authority to select another file or initiate a network request.
|
|
56
56
|
*/
|
|
57
|
-
export async function
|
|
58
|
-
const result = await
|
|
57
|
+
export async function readBoundedFile(root, relativePath, maxBytes) {
|
|
58
|
+
const result = await readBoundedFileResult(root, relativePath, maxBytes);
|
|
59
59
|
return result.state === "read" ? result.bytes : null;
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
@@ -89,8 +89,8 @@ export async function pathMissing(filePath) {
|
|
|
89
89
|
}
|
|
90
90
|
const unavailable = { state: "unavailable" };
|
|
91
91
|
/** Size refusals are distinguished only after the same contained regular-file checks. */
|
|
92
|
-
export async function
|
|
93
|
-
if (!
|
|
92
|
+
export async function readBoundedFileResult(root, relativePath, maxBytes) {
|
|
93
|
+
if (!isEvidencePath(relativePath) || !Number.isSafeInteger(maxBytes) || maxBytes < 1)
|
|
94
94
|
return unavailable;
|
|
95
95
|
const validateRoot = async () => {
|
|
96
96
|
if ("physicalRunRoot" in root) {
|
|
@@ -31,7 +31,7 @@ export function isRunFeedbackCandidate(value) {
|
|
|
31
31
|
isFeedbackNextState(value.proposed_next_state) &&
|
|
32
32
|
Array.isArray(value.acceptance_proof) &&
|
|
33
33
|
value.acceptance_proof.every((item) => typeof item === "string") &&
|
|
34
|
-
// Optional, adapter-namespaced product-noun block: when present, validate only its
|
|
34
|
+
// Optional, adapter-namespaced product-noun block: when present, validate only its shape
|
|
35
35
|
// (a non-empty namespace + a data record). Core never inspects the keys inside `data`.
|
|
36
36
|
(value.adapter === undefined || isFeedbackAdapterBlock(value.adapter)));
|
|
37
37
|
}
|
package/dist/run/judge.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export interface BlockerFacts {
|
|
|
6
6
|
completionReason: ActorCompletionReason;
|
|
7
7
|
/** A harness-owned stop condition ended the session: a matched stopWhen or a completed dwell window. */
|
|
8
8
|
stopConditionMatched: boolean;
|
|
9
|
-
/** What the participant declared in a field, when its provider has one
|
|
9
|
+
/** What the participant declared in a field, when its provider has one. */
|
|
10
10
|
declaredOutcome?: ParticipantDeclaredOutcome;
|
|
11
11
|
/** The route's reading of the closing report: it describes a blocker or asks for instructions. */
|
|
12
12
|
closingReportReadsBlocked: boolean;
|
|
@@ -23,7 +23,7 @@ export interface SessionEnding extends BlockerFacts {
|
|
|
23
23
|
export declare function hollowCompletion(ending: SessionEnding): boolean;
|
|
24
24
|
/**
|
|
25
25
|
* The participant said it reached the goal but reported a blocker. A declared outcome is its own
|
|
26
|
-
* word and wins
|
|
26
|
+
* word and wins. Without one, the closing report is read, unless a stop condition ended the
|
|
27
27
|
* session: a matched stopWhen is structured completion evidence and overrides the text.
|
|
28
28
|
*/
|
|
29
29
|
export declare function selfReportedBlocker(ending: BlockerFacts): boolean;
|
|
@@ -60,12 +60,18 @@ export declare function participantHarnessFailed(participant: ParticipantFacts):
|
|
|
60
60
|
* goal_satisfied claim with zero engagement is a session that ran out before anything happened;
|
|
61
61
|
* one whose final message describes a blocker is a participant who could not proceed and said so.
|
|
62
62
|
* Both keep their trace status (the claim is evidence); neither is a participant who reached the
|
|
63
|
-
* goal. One rule for the single
|
|
63
|
+
* goal. One rule for the single participant and the fan-out roll-up.
|
|
64
64
|
*/
|
|
65
65
|
export declare function participantStatus(status: ActorStatus, judgments: {
|
|
66
66
|
noEngagement: boolean;
|
|
67
67
|
selfReportedBlocker: boolean;
|
|
68
68
|
} | undefined): ActorStatus;
|
|
69
|
+
/**
|
|
70
|
+
* A verdict as review.md prints it. The schema keeps `contract_proof_only`, which a dry run always
|
|
71
|
+
* gets and a live run gets while it is in progress or when no participant result came back, so
|
|
72
|
+
* the reader sees "dry run" or "no verdict" by the run's mode.
|
|
73
|
+
*/
|
|
74
|
+
export declare function verdictText(verdict: Verdict, mode: "dry-run" | "live"): string;
|
|
69
75
|
/** The review verdict for one participant's status. */
|
|
70
76
|
export declare function verdictForStatus(status: ActorStatus): Verdict;
|
|
71
77
|
declare const judged: unique symbol;
|
|
@@ -77,7 +83,7 @@ export interface Judgment {
|
|
|
77
83
|
readonly verdict: Verdict;
|
|
78
84
|
/**
|
|
79
85
|
* The run met its route's pass rule: every expected participant passed and, on shared-world,
|
|
80
|
-
* the
|
|
86
|
+
* the participants showed the concurrency verify requires. A dry run passes as a contract.
|
|
81
87
|
*/
|
|
82
88
|
readonly passed: boolean;
|
|
83
89
|
/** A type-only mark that judgmentOf made this judgment; it does not exist at runtime. */
|
|
@@ -86,7 +92,7 @@ export interface Judgment {
|
|
|
86
92
|
/** The judgment for a verdict: a run passes when its verdict is pass, and a dry run passes. */
|
|
87
93
|
export declare function judgmentOf(verdict: Verdict, dryRun: boolean): Judgment;
|
|
88
94
|
/** What kind of execution failure a run recorded. */
|
|
89
|
-
type ExecutionFailureKind = "harness" | "provider-cleanup" | "sandbox-cleanup" | "evidence" | "cap" | "run";
|
|
95
|
+
type ExecutionFailureKind = "harness" | "provider-cleanup" | "provider-policy" | "sandbox-cleanup" | "evidence" | "cap" | "run";
|
|
90
96
|
/** One way the run failed as an execution. The message is scrubbed; status.json shows it. */
|
|
91
97
|
export interface ExecutionFailure {
|
|
92
98
|
kind: ExecutionFailureKind;
|
|
@@ -98,7 +104,19 @@ export interface ExecutionOutcome {
|
|
|
98
104
|
succeeded: boolean;
|
|
99
105
|
/** The failures the policy counts, in the order the route recorded them. */
|
|
100
106
|
failures: ExecutionFailure[];
|
|
107
|
+
/**
|
|
108
|
+
* The failures the policy lets warn, such as a sandbox whose release is unconfirmed on a route
|
|
109
|
+
* whose evidence stands. They leave `succeeded` and the result's ok alone but stay visible in
|
|
110
|
+
* status.json. Omitted when there are none.
|
|
111
|
+
*/
|
|
112
|
+
warnings?: ExecutionFailure[];
|
|
101
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* The execution failure for one sandbox whose release is unconfirmed. `warning` is the route's
|
|
116
|
+
* release warning, already scrubbed. `recovery` says how to release it by hand; without one,
|
|
117
|
+
* reclaim kills by the id the run recorded at create time.
|
|
118
|
+
*/
|
|
119
|
+
export declare function sandboxCleanupFailure(owner: string, warning: string | undefined, runId: string, recovery?: string): ExecutionFailure;
|
|
102
120
|
/**
|
|
103
121
|
* How a route turns the facts into its result's ok. A gate route needs every participant to
|
|
104
122
|
* pass. On an evidence route a participant that failed, was blocked or timed out is captured
|
|
@@ -114,13 +132,13 @@ export interface OutcomePolicy {
|
|
|
114
132
|
export type JudgedRoute = "computer-use" | "shared-world" | "terminal" | "scripted" | "preview";
|
|
115
133
|
/** Each route's outcome policy, in one place. */
|
|
116
134
|
export declare const OUTCOME_POLICIES: Readonly<Record<JudgedRoute, OutcomePolicy>>;
|
|
117
|
-
/** What a shared-world run observed about its one world, beside how each
|
|
135
|
+
/** What a shared-world run observed about its one world, beside how each participant ended. */
|
|
118
136
|
export interface SharedWorldFacts {
|
|
119
|
-
/** Two or more
|
|
137
|
+
/** Two or more participants were live at the same time. */
|
|
120
138
|
overlap: boolean;
|
|
121
139
|
/** Provisioned plane only: the shared state changed at or after the first overlap started. */
|
|
122
140
|
stateChangedUnderOverlap?: boolean;
|
|
123
|
-
/** External-public plane only: every
|
|
141
|
+
/** External-public plane only: every participant reached one lobby. */
|
|
124
142
|
lobbyConvergence?: boolean;
|
|
125
143
|
}
|
|
126
144
|
/** A shared-world run's judgment, with the world facts its review and result also report. */
|
|
@@ -131,7 +149,7 @@ export interface SharedWorldJudgment extends Judgment {
|
|
|
131
149
|
* A run with one participant: its tallied status is the verdict, so a hollow pass fails and a
|
|
132
150
|
* self-reported blocker reads as blocked. Without a session, a harness failure fails the run and
|
|
133
151
|
* a dry run is a contract. A run still in progress is a contract until it finishes. Computer-use
|
|
134
|
-
* calls it for one
|
|
152
|
+
* calls it for one participant with no rerun, and terminal calls it through judgeTerminal.
|
|
135
153
|
*/
|
|
136
154
|
export declare function judgeOneParticipant(args: {
|
|
137
155
|
dryRun: boolean;
|
|
@@ -150,15 +168,15 @@ export declare function judgeParticipants(args: {
|
|
|
150
168
|
participants: ParticipantFacts[];
|
|
151
169
|
}): Judgment;
|
|
152
170
|
/**
|
|
153
|
-
* Why a shared-world run whose
|
|
154
|
-
* meet what verify's shared-world check requires of a pass: two
|
|
155
|
-
* on the provisioned plane, a shared-state change at or after the first overlap started.
|
|
171
|
+
* Why a shared-world run whose participants all passed still fails, or undefined when its world
|
|
172
|
+
* facts meet what verify's shared-world check requires of a pass: two participants live at the same
|
|
173
|
+
* time and, on the provisioned plane, a shared-state change at or after the first overlap started.
|
|
156
174
|
*/
|
|
157
175
|
export declare function sharedWorldShortfall(world: SharedWorldFacts): string | undefined;
|
|
158
176
|
/**
|
|
159
|
-
* A shared-world run: it passes only when every expected
|
|
160
|
-
* shortfall, and otherwise fails (this route has no timed_out verdict). A dry run and a run
|
|
161
|
-
* in progress are contracts. Lobby convergence is recorded but not read.
|
|
177
|
+
* A shared-world run: it passes only when every expected participant passed and the world facts
|
|
178
|
+
* have no shortfall, and otherwise fails (this route has no timed_out verdict). A dry run and a run
|
|
179
|
+
* still in progress are contracts. Lobby convergence is recorded but not read.
|
|
162
180
|
*/
|
|
163
181
|
export declare function judgeSharedWorld(args: {
|
|
164
182
|
dryRun: boolean;
|
|
@@ -195,7 +213,7 @@ export declare function judgePreview(): Judgment;
|
|
|
195
213
|
* stays as it was, so scoring can never improve a verdict. No failures returns the review as is.
|
|
196
214
|
*/
|
|
197
215
|
export declare function foldScorerFailures(review: ReviewSummary, failures: readonly string[]): ReviewSummary;
|
|
198
|
-
/** The run's execution outcome under its route's policy. A failure of a kind the policy lets warn is
|
|
216
|
+
/** The run's execution outcome under its route's policy. A failure of a kind the policy lets warn is a warning. */
|
|
199
217
|
export declare function judgeExecution(failures: readonly ExecutionFailure[], policy: OutcomePolicy): ExecutionOutcome;
|
|
200
218
|
/**
|
|
201
219
|
* The result's ok: the run worked as an execution, no scorer failed it, and on a gate route every
|