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/bundle-shape.js
CHANGED
|
@@ -47,14 +47,14 @@ export function isRunBundle(value) {
|
|
|
47
47
|
(value.subject === undefined || isRunSubjectProvenance(value.subject)) &&
|
|
48
48
|
(value.desktopBrowser === undefined || isDesktopBrowserEvidence(value.desktopBrowser)) &&
|
|
49
49
|
(value.rerun === undefined || isRunRerunLineage(value.rerun)) &&
|
|
50
|
-
// Optional shared-world fields. Tolerant
|
|
50
|
+
// Optional shared-world fields. Tolerant shape guard only; the interaction semantics
|
|
51
51
|
// (timeline well-formedness, single-plane, delta-on-pass) are the verify check's job.
|
|
52
52
|
(value.attributionClass === undefined ||
|
|
53
53
|
value.attributionClass === "isolated" ||
|
|
54
54
|
value.attributionClass === "shared-world") &&
|
|
55
55
|
(value.sharedWorld === undefined || isSharedWorldEvidence(value.sharedWorld)) &&
|
|
56
56
|
// Optional, adapter-namespaced product score (the extension seam). When present, validate only
|
|
57
|
-
// its
|
|
57
|
+
// its shape; core never reads the adapter's `data` payload.
|
|
58
58
|
(value.adapterScore === undefined || isRunAdapterScore(value.adapterScore)) &&
|
|
59
59
|
// Optional scorer provenance. Library callers may omit it; when present it must be
|
|
60
60
|
// well-shaped.
|
|
@@ -156,9 +156,9 @@ function isDesktopBrowserEvidence(value) {
|
|
|
156
156
|
}
|
|
157
157
|
/** Short lowercase-hex content digest (digestText default is 12 chars; tolerate longer future digests). */
|
|
158
158
|
const SCORER_DIGEST_PATTERN = /^[a-f0-9]{12,64}$/;
|
|
159
|
-
/** Shape guard for RunScorerProvenance
|
|
159
|
+
/** Shape guard for RunScorerProvenance, mirroring isRunSubjectProvenance: tolerated-absent in
|
|
160
160
|
* isRunBundle, well-shaped when present. Semantics (does the digest still match the file) are not a
|
|
161
|
-
* verify concern
|
|
161
|
+
* verify concern: the block is core-stamped evidence of what was loaded and proves no re-execution. */
|
|
162
162
|
function isRunScorerProvenance(value) {
|
|
163
163
|
return (isRecord(value) &&
|
|
164
164
|
value.schema === "humanish.scorer-provenance.v1" &&
|
|
@@ -171,7 +171,7 @@ function isRunScorerProvenance(value) {
|
|
|
171
171
|
value.exports.length > 0 &&
|
|
172
172
|
value.exports.every((name) => name === "score" || name === "deriveFeedback" || name === "deriveArtifacts"));
|
|
173
173
|
}
|
|
174
|
-
function isRunAdapterScore(value) {
|
|
174
|
+
export function isRunAdapterScore(value) {
|
|
175
175
|
return (isRecord(value) &&
|
|
176
176
|
value.schema === "humanish.adapter-score.v1" &&
|
|
177
177
|
typeof value.namespace === "string" &&
|
|
@@ -182,8 +182,8 @@ function isRunAdapterScore(value) {
|
|
|
182
182
|
typeof value.summary === "string" &&
|
|
183
183
|
(value.data === undefined || isRecord(value.data)));
|
|
184
184
|
}
|
|
185
|
-
// The local-tree archive content pin: sha256 hex, full 64 chars (
|
|
186
|
-
// display-digest convention
|
|
185
|
+
// The local-tree archive content pin: sha256 hex, full 64 chars (unlike the repo's 16-char
|
|
186
|
+
// display-digest convention; this value is the provenance pin itself, persisted in full).
|
|
187
187
|
export const ARCHIVE_SHA256_PATTERN = /^[a-f0-9]{64}$/;
|
|
188
188
|
function isRunSubjectProvenance(value) {
|
|
189
189
|
if (!isRecord(value))
|
package/dist/run/bundle.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CommsReceivingEvidence } from "../comms/receiving-types.js";
|
|
2
2
|
import { type CapturedGitState } from "./git-state.js";
|
|
3
3
|
import type { SharedWorldEvidence } from "./shared-world-evidence.js";
|
|
4
|
-
import type
|
|
4
|
+
import { type RunStudyProvenance } from "./study-provenance.js";
|
|
5
5
|
import type { RunSimulationStatus, RunStream, RunStreamKind } from "./streams.js";
|
|
6
6
|
export declare const RUN_BUNDLE_SCHEMA = "humanish.run-bundle.v1";
|
|
7
7
|
/** The run bundle file, relative to the run directory. */
|
|
@@ -10,17 +10,17 @@ export declare const REVIEW_SCHEMA = "humanish.review.v1";
|
|
|
10
10
|
export declare const PUBLIC_TARGET_CWD = "[target-cwd]";
|
|
11
11
|
/**
|
|
12
12
|
* A namespaced, product-agnostic score a thin adapter attaches to the bundle via a route's `score`
|
|
13
|
-
* hook, on terminal-product or a browser route (the
|
|
14
|
-
*
|
|
13
|
+
* hook, on terminal-product or a browser route (the adapter extension seam).
|
|
14
|
+
* Core never reads its `data` and knows none of the adopter's nouns: the `namespace` (e.g.
|
|
15
15
|
* `"acme-pixelforge"`) scopes the whole record so core schemas stay product-agnostic and a future
|
|
16
16
|
* inert-field audit does not misfire on a noun core never owned. The adopter's real scorecard
|
|
17
|
-
* (component weights, product rubric) lives in
|
|
18
|
-
* status/score/summary; everything product-specific rides under `data`.
|
|
19
|
-
* product scorer
|
|
17
|
+
* (component weights, product rubric) lives in the adopter's repo and is summarized into the generic
|
|
18
|
+
* status/score/summary; everything product-specific rides under `data`. Core ships no built-in
|
|
19
|
+
* product scorer; this is the seam the adopter's scorer plugs into without forking core.
|
|
20
20
|
*/
|
|
21
21
|
export interface RunAdapterScore {
|
|
22
22
|
schema: "humanish.adapter-score.v1";
|
|
23
|
-
/** The adapter's namespace
|
|
23
|
+
/** The adapter's namespace: non-core, product-scoped (e.g. an adopter slug). Required + non-empty. */
|
|
24
24
|
namespace: string;
|
|
25
25
|
status: "pass" | "partial" | "fail";
|
|
26
26
|
/** A 0-100 summary the adapter derived from its own (off-core) rubric. */
|
|
@@ -56,20 +56,19 @@ export interface RunFeedbackCandidate {
|
|
|
56
56
|
proposed_next_state: "watch" | "adapter-hardening" | "target-app-setup" | "actor-auth" | "setup-quality-review" | "study-quality-review";
|
|
57
57
|
acceptance_proof: string[];
|
|
58
58
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
* records product-specific concepts — public CLI/product command observed, hosted product
|
|
59
|
+
* Optional, adapter-namespaced product-noun block (the adapter extension seam). A thin adapter
|
|
60
|
+
* records product-specific concepts: public CLI/product command observed, hosted product
|
|
62
61
|
* success-or-blocker, feedback id/draft observed, media/job/asset ids, explicit
|
|
63
|
-
* no-media/no-provider-spend proof, defection/friction risk
|
|
62
|
+
* no-media/no-provider-spend proof, defection/friction risk, without making any of them core
|
|
64
63
|
* primitives. They ride under a single namespaced field so core's feedback enums
|
|
65
64
|
* (`evidence.kind`, `proposed_next_state`) stay product-agnostic and a future inert-field audit
|
|
66
|
-
* never misfires on a noun core never owned. Core validates only the
|
|
65
|
+
* never misfires on a noun core never owned. Core validates only the shape (a non-empty
|
|
67
66
|
* `namespace` + a `data` record); the keys inside `data` are the adapter's, never core's.
|
|
68
67
|
*/
|
|
69
68
|
adapter?: {
|
|
70
69
|
/** Non-core, product-scoped namespace (e.g. an adopter slug). Required + non-empty. */
|
|
71
70
|
namespace: string;
|
|
72
|
-
/** The adapter's product nouns. Core never reads these keys
|
|
71
|
+
/** The adapter's product nouns. Core never reads these keys, so it stays product-agnostic. */
|
|
73
72
|
data: Record<string, unknown>;
|
|
74
73
|
};
|
|
75
74
|
}
|
|
@@ -87,21 +86,21 @@ export interface RunAdapterArtifact {
|
|
|
87
86
|
note: string;
|
|
88
87
|
}
|
|
89
88
|
/**
|
|
90
|
-
* Provenance for a
|
|
91
|
-
* of its
|
|
92
|
-
* out-of-tree judgment it attached. Core-computed (path + digest), never adopter-supplied. A
|
|
93
|
-
* caller (hooks passed directly through RunLabOptions) has implicit provenance
|
|
94
|
-
* provenance
|
|
89
|
+
* Provenance for a config-declared adopter scorer: the repo-relative entry path and a digest
|
|
90
|
+
* of its entry-module bytes, recorded so a `review.scorer.ref`/`--scorer` run states which
|
|
91
|
+
* out-of-tree judgment it attached. Core-computed (path + digest), never adopter-supplied. A library
|
|
92
|
+
* caller (hooks passed directly through RunLabOptions) has implicit provenance, because its code is its
|
|
93
|
+
* provenance, so this block is absent there and every older bundle stays byte-stable + verifiable.
|
|
95
94
|
*
|
|
96
|
-
* The digest pins the entry file's
|
|
95
|
+
* The digest pins the entry file's identity only; modules it loads are outside it: a `export { score } from
|
|
97
96
|
* "../outside.mjs"` re-export is not captured, and `import()` re-opens the path (a benign same-author
|
|
98
|
-
* TOCTOU). Treat it as evidence-not-gate, and do
|
|
97
|
+
* TOCTOU). Treat it as evidence-not-gate, and do not extend the loader to less-trusted config.
|
|
99
98
|
*/
|
|
100
99
|
export interface RunScorerProvenance {
|
|
101
100
|
schema: "humanish.scorer-provenance.v1";
|
|
102
101
|
/** Repo-relative entry path (e.g. "scorers/example.mjs"), clamped inside the target cwd. */
|
|
103
102
|
ref: string;
|
|
104
|
-
/** digestText over the readContainedRegularFile
|
|
103
|
+
/** digestText over the readContainedRegularFile entry bytes: the entry module only, with no lockfile of the executed graph. */
|
|
105
104
|
digest: string;
|
|
106
105
|
/** Which door declared it: the committed manifest, or the CLI `--scorer` override. */
|
|
107
106
|
source: "manifest" | "cli-flag";
|
|
@@ -135,7 +134,7 @@ export interface RunEvent {
|
|
|
135
134
|
/**
|
|
136
135
|
* One executed (or declared) subject-state seed step. Live records carry execution fields
|
|
137
136
|
* (ok/exitCode/timedOut/durationMs); dry-run "declared, not run" records carry only the
|
|
138
|
-
* declaration (name, phase, command
|
|
137
|
+
* declaration (name, phase, command digest). The command itself never persists; the digest
|
|
139
138
|
* pins "same recipe" across bundles while the lab YAML in the consumer's repo stays the
|
|
140
139
|
* plaintext source of truth (publish-safe by construction).
|
|
141
140
|
*/
|
|
@@ -151,8 +150,8 @@ export interface RunSubjectStateStepRecord {
|
|
|
151
150
|
durationMs?: number;
|
|
152
151
|
}
|
|
153
152
|
/**
|
|
154
|
-
* Structured subject provenance
|
|
155
|
-
* or a local-tree archive digest)
|
|
153
|
+
* Structured subject provenance: what the subject was, as a code pin (repo/commit,
|
|
154
|
+
* or a local-tree archive digest) and state story. Optional additive field on
|
|
156
155
|
* humanish.run-bundle.v1; absent on bundles from backends that have not adopted it (and on all
|
|
157
156
|
* pre-existing bundles).
|
|
158
157
|
*/
|
|
@@ -165,7 +164,7 @@ export interface RunSubjectProvenance {
|
|
|
165
164
|
commit?: string;
|
|
166
165
|
/**
|
|
167
166
|
* Local-tree-route only (additive): 64 lowercase-hex sha256 over the sorted packed-entries
|
|
168
|
-
* list (docs/contracts/schemas.md). This is the provenance
|
|
167
|
+
* list (docs/contracts/schemas.md). This is the provenance pin for the local-tree route: a
|
|
169
168
|
* dirty working tree cannot be commit-pinned, so the archive content digest stands in for it.
|
|
170
169
|
*/
|
|
171
170
|
archiveSha256?: string;
|
|
@@ -174,21 +173,21 @@ export interface RunSubjectProvenance {
|
|
|
174
173
|
* at pack time. Absent when the packed root was not a git work tree at all.
|
|
175
174
|
*/
|
|
176
175
|
dirty?: boolean;
|
|
177
|
-
/** Declared env
|
|
176
|
+
/** Declared env names provisioned for the subject; names only, never values. */
|
|
178
177
|
envNames?: string[];
|
|
179
178
|
state: {
|
|
180
179
|
/**
|
|
181
|
-
* seeded: live run, steps declared,
|
|
182
|
-
* unpinned: external state declared (seed records, if any, still attached
|
|
180
|
+
* seeded: live run, steps declared, all ran ok, no external state declared.
|
|
181
|
+
* unpinned: external state declared (seed records, if any, still attached; migrating
|
|
183
182
|
* an external DB is still unpinned overall).
|
|
184
|
-
* declared-not-run: steps declared but not (all) executed ok
|
|
183
|
+
* declared-not-run: steps declared but not (all) executed ok: dry-run contract bundles
|
|
185
184
|
* and failed live provisioning.
|
|
186
|
-
* undeclared: no subject.state block (stateless apps, app-url subjects)
|
|
187
|
-
* "absence declared" marker
|
|
188
|
-
* external-public:
|
|
189
|
-
* directly as the shared plane
|
|
190
|
-
* clone, no in-sandbox filesystem).
|
|
191
|
-
* an owned target, not an uncontrolled external DB). The
|
|
185
|
+
* undeclared: no subject.state block (stateless apps, app-url subjects), the explicit
|
|
186
|
+
* "absence declared" marker that provenance requires when there is none.
|
|
187
|
+
* external-public: an operator-declared, operator-owned public deployment used
|
|
188
|
+
* directly as the shared plane; humanish neither provisioned nor seeded it (no getHost, no
|
|
189
|
+
* clone, no in-sandbox filesystem). It is not "seeded" (nothing was seeded) and not "unpinned" (this is
|
|
190
|
+
* an owned target, not an uncontrolled external DB). The marker for the external-public
|
|
192
191
|
* plane class; verify asserts it in place of the getHost seeded gate.
|
|
193
192
|
*/
|
|
194
193
|
provenance: "seeded" | "unpinned" | "declared-not-run" | "undeclared" | "external-public";
|
|
@@ -197,10 +196,10 @@ export interface RunSubjectProvenance {
|
|
|
197
196
|
};
|
|
198
197
|
}
|
|
199
198
|
/**
|
|
200
|
-
* How well a run attributed
|
|
199
|
+
* How well a run attributed interaction between actors: a separate evidence axis, orthogonal to the
|
|
201
200
|
* persona-sampling evidence classes (which answer "how representative is the actor?"). Absent ==
|
|
202
|
-
* `isolated` (every existing bundle byte-stable). `shared-world` means N
|
|
203
|
-
* plane and their per-
|
|
201
|
+
* `isolated` (every existing bundle byte-stable). `shared-world` means N participants drove one
|
|
202
|
+
* mutable plane and their per-participant attribution is weaker (its ceiling is pinned in `sharedWorld.attributionLimits`).
|
|
204
203
|
*/
|
|
205
204
|
type RunAttributionClass = "isolated" | "shared-world";
|
|
206
205
|
export interface RunBundle {
|
|
@@ -254,20 +253,20 @@ export interface RunBundle {
|
|
|
254
253
|
};
|
|
255
254
|
review: ReviewSummary;
|
|
256
255
|
feedbackCandidates: RunFeedbackCandidate[];
|
|
257
|
-
/** Structured subject provenance
|
|
256
|
+
/** Structured subject provenance. Optional and additive: emitted by the
|
|
258
257
|
* computer-use and shared-world backends and the clone scripted-browser route; tolerated absent
|
|
259
258
|
* everywhere else. */
|
|
260
259
|
subject?: RunSubjectProvenance;
|
|
261
260
|
/**
|
|
262
|
-
* The custom E2B desktop
|
|
263
|
-
* `execution.desktop.template
|
|
261
|
+
* The custom E2B desktop template (image) the run's sandbox(es) actually launched on, from
|
|
262
|
+
* `execution.desktop.template`, so the evidence shows which image ran (a subject needing
|
|
264
263
|
* runtimes the stock `desktop` image lacks runs on an adopter's template). Optional + additive:
|
|
265
264
|
* present only when a template was configured (absent == the stock `desktop` template, every
|
|
266
265
|
* pre-existing bundle byte-stable). A template name is public-safe (not a secret).
|
|
267
266
|
*/
|
|
268
267
|
desktopTemplate?: string;
|
|
269
268
|
/**
|
|
270
|
-
* Browser family requested for hosted desktop
|
|
269
|
+
* Browser family requested for hosted desktop participants and the in-sandbox command that opened
|
|
271
270
|
* it, when explicitly configured. Optional + additive; absent means the historical default opener
|
|
272
271
|
* path was used or the backend does not create a headed desktop.
|
|
273
272
|
*/
|
|
@@ -275,7 +274,7 @@ export interface RunBundle {
|
|
|
275
274
|
requested: "default" | "chrome" | "chromium" | "firefox";
|
|
276
275
|
resolved?: string;
|
|
277
276
|
/**
|
|
278
|
-
* Synthetic media devices the browser was launched with
|
|
277
|
+
* Synthetic media devices the browser was launched with: the camera feed's origin and
|
|
279
278
|
* in-sandbox path, how the permission dialog is answered, and the exact flags.
|
|
280
279
|
*/
|
|
281
280
|
media?: {
|
|
@@ -291,13 +290,13 @@ export interface RunBundle {
|
|
|
291
290
|
};
|
|
292
291
|
};
|
|
293
292
|
/**
|
|
294
|
-
* Optional lineage for a run that intentionally re-executes selected
|
|
295
|
-
* multi-
|
|
293
|
+
* Optional lineage for a run that intentionally re-executes selected participants from a
|
|
294
|
+
* prior multi-participant run. This keeps retry-like workflows explicit: the new run is linked to the old
|
|
296
295
|
* evidence, but it never mutates or silently "fixes" the original verdict.
|
|
297
296
|
*/
|
|
298
297
|
rerun?: RunRerunLineage;
|
|
299
298
|
/**
|
|
300
|
-
* The interaction-attribution
|
|
299
|
+
* The interaction-attribution evidence axis. Absent == `isolated` (every existing bundle
|
|
301
300
|
* byte-stable). Set to `shared-world` by the shared-world backend, paired with `sharedWorld`.
|
|
302
301
|
*/
|
|
303
302
|
attributionClass?: RunAttributionClass;
|
|
@@ -307,20 +306,20 @@ export interface RunBundle {
|
|
|
307
306
|
*/
|
|
308
307
|
sharedWorld?: SharedWorldEvidence;
|
|
309
308
|
/**
|
|
310
|
-
*
|
|
311
|
-
*
|
|
312
|
-
*
|
|
309
|
+
* Optional, adapter-namespaced product score (the adapter extension seam).
|
|
310
|
+
* A thin adapter's `score` hook returns a `RunAdapterScore`; the route attaches it here
|
|
311
|
+
* without core knowing any product noun (the score is namespaced + its breakdown lives in `data`).
|
|
313
312
|
* The default mission-based verdict (`review`) is unchanged when no scorer hook is given.
|
|
314
313
|
*/
|
|
315
314
|
adapterScore?: RunAdapterScore;
|
|
316
315
|
/**
|
|
317
|
-
*
|
|
318
|
-
* from `review.scorer.ref` / `--scorer`; absent for library callers and every
|
|
316
|
+
* Optional provenance for a config-declared scorer. Present only when the scorer was loaded
|
|
317
|
+
* from `review.scorer.ref` / `--scorer`; absent for library callers and every older bundle
|
|
319
318
|
* (tolerated-absent in isRunBundle so those still verify). Evidence, not a gate.
|
|
320
319
|
*/
|
|
321
320
|
scorerProvenance?: RunScorerProvenance;
|
|
322
321
|
/**
|
|
323
|
-
*
|
|
322
|
+
* Optional, adapter-namespaced product/state proof artifacts. Core validates
|
|
324
323
|
* shape and local relative artifact references, then verifies the referenced
|
|
325
324
|
* files exist. The adapter owns the payload schema under `namespace`.
|
|
326
325
|
*/
|
|
@@ -332,38 +331,41 @@ export interface RunBundle {
|
|
|
332
331
|
*/
|
|
333
332
|
providerResources?: RunProviderResource[];
|
|
334
333
|
/**
|
|
335
|
-
* Which
|
|
336
|
-
*
|
|
337
|
-
*
|
|
338
|
-
* `inferLegacyLabId`, which reads only the historical `persona.source = "lab:<id>"` convention.
|
|
334
|
+
* Which study file produced this run. Absent on a bundle written before this field and on a
|
|
335
|
+
* library caller's run (the run then has no study id rather than a guessed one). Read it, and
|
|
336
|
+
* `lab` and the source convention of older bundles, through studyProvenanceOf.
|
|
339
337
|
*/
|
|
340
|
-
|
|
338
|
+
study?: RunStudyProvenance;
|
|
339
|
+
/** `study`'s value, written beside it until 0.109. */
|
|
340
|
+
lab?: RunStudyProvenance;
|
|
341
341
|
/**
|
|
342
|
-
*
|
|
343
|
-
*
|
|
342
|
+
* Optional, additive run-level cost estimate (humanish.run-cost-summary.v1): the sum of every
|
|
343
|
+
* participant's model-token estimate plus the E2B desktop-minute estimate, carrying the same
|
|
344
344
|
* null-discipline the terminal cost ledger already ships. Absent on pre-existing bundles and
|
|
345
|
-
* dry runs; a live run that spends nothing records an explicit zero with no lines. Every dollar figure here is an
|
|
345
|
+
* dry runs; a live run that spends nothing records an explicit zero with no lines. Every dollar figure here is an estimate,
|
|
346
346
|
* never an authoritative charge; verify asserts its LABELING/provenance, never its magnitude.
|
|
347
347
|
*/
|
|
348
348
|
cost?: RunCostSummary;
|
|
349
349
|
}
|
|
350
350
|
/**
|
|
351
|
-
* One contributing cost line of a RunCostSummary. A line is
|
|
352
|
-
* (records that we
|
|
353
|
-
* `reason` and contributes
|
|
351
|
+
* One contributing cost line of a RunCostSummary. A line is present even when it cannot be priced
|
|
352
|
+
* (it records that we tried and could not): an unpriceable line carries estimatedCostUsd: null + a
|
|
353
|
+
* `reason` and contributes nothing to the summary total. `estimatedCostUsd` is never
|
|
354
354
|
* coerced to 0.
|
|
355
355
|
*/
|
|
356
356
|
export interface RunCostLine {
|
|
357
357
|
kind: "model-tokens" | "desktop-minutes";
|
|
358
358
|
laneId?: string;
|
|
359
359
|
modelId?: string;
|
|
360
|
-
/** null =
|
|
360
|
+
/** null = not measured / no rate; never coerced to 0. */
|
|
361
361
|
estimatedCostUsd: number | null;
|
|
362
362
|
reason?: "no_rate_for_model" | "no_rate_for_desktop" | "no_token_usage" | "no_duration" | "closing_usage_unreported" | "interaction_usage_unreported" | "no_desktop_resources" | "desktop_lifetime_incomplete" | "account_billing_unknown";
|
|
363
363
|
/** Pricing provenance date; non-null iff estimatedCostUsd is non-null. */
|
|
364
364
|
ratesAsOf: string | null;
|
|
365
365
|
source?: string;
|
|
366
366
|
placeholder?: boolean;
|
|
367
|
+
/** A model-tokens line priced from runtime-turn totals at the base tier (ActorEstimatedCost). */
|
|
368
|
+
basis?: "aggregated_turns_base_rate";
|
|
367
369
|
/** Optional allocation evidence on newer desktop lines; older aggregate lines remain valid. */
|
|
368
370
|
desktop?: {
|
|
369
371
|
minutes: number | null;
|
|
@@ -378,15 +380,15 @@ export interface RunCostLine {
|
|
|
378
380
|
};
|
|
379
381
|
}
|
|
380
382
|
/**
|
|
381
|
-
* The run-level cost
|
|
382
|
-
* `breakdown` lines; it is null iff
|
|
383
|
-
* false when any applicable line is null (the total is then a
|
|
383
|
+
* The run-level cost estimate. `estimatedTotalUsd` is the rounded sum of only the non-null
|
|
384
|
+
* `breakdown` lines; it is null iff every line is null (never 0-coerced). `fullyEstimated` is
|
|
385
|
+
* false when any applicable line is null (the total is then a lower bound). Every non-null dollar
|
|
384
386
|
* figure carries `ratesAsOf`; `placeholder` is true when any contributing rate is a stand-in.
|
|
385
387
|
*/
|
|
386
388
|
export interface RunCostSummary {
|
|
387
389
|
schema: "humanish.run-cost-summary.v1";
|
|
388
390
|
currency: "usd";
|
|
389
|
-
/** Sum of the
|
|
391
|
+
/** Sum of the known (non-null) lines; null iff every applicable line is null; 0 with no lines
|
|
390
392
|
* for a spend-free run. */
|
|
391
393
|
estimatedTotalUsd: number | null;
|
|
392
394
|
/** Oldest asOf across contributing rates; null when nothing was priced. */
|
|
@@ -404,7 +406,7 @@ export interface RunCostSummary {
|
|
|
404
406
|
};
|
|
405
407
|
/** Host-side create->teardown span in minutes; null when no sandbox was created. */
|
|
406
408
|
desktopMinutes: number | null;
|
|
407
|
-
/**
|
|
409
|
+
/** The "estimated; <x> unmeasured" statement. */
|
|
408
410
|
note: string;
|
|
409
411
|
}
|
|
410
412
|
export interface RunProviderResource {
|
|
@@ -436,19 +438,19 @@ export interface RunRerunLineage {
|
|
|
436
438
|
}>;
|
|
437
439
|
}
|
|
438
440
|
/**
|
|
439
|
-
* What happened to the
|
|
441
|
+
* What happened to the participants in a study, with the denominator attached.
|
|
440
442
|
*
|
|
441
|
-
* A stakeholder watching through the glass forms conclusions from vivid moments
|
|
443
|
+
* A stakeholder watching through the glass forms conclusions from vivid moments. That is the
|
|
442
444
|
* classic failure of the viewing room, and it is why researchers synthesize rather than letting the
|
|
443
445
|
* room decide. So anything shown to a stakeholder carries its count, or it becomes a machine for
|
|
444
446
|
* manufacturing certainty from n=1 (docs/principles/three-roles.md).
|
|
445
447
|
*
|
|
446
|
-
* These are
|
|
448
|
+
* These are outcomes, not scores. `abandoned` is the most valuable thing a usability study
|
|
447
449
|
* produces, and `harnessFailed` is the only member that says the instrument, rather than the
|
|
448
450
|
* product, is what went wrong.
|
|
449
451
|
*/
|
|
450
452
|
export interface ParticipantOutcomes {
|
|
451
|
-
/** Participants whose sessions reached a terminal state
|
|
453
|
+
/** Participants whose sessions reached a terminal state: the denominator for every count below. */
|
|
452
454
|
total: number;
|
|
453
455
|
/** Recorded successful sessions; completion provenance depends on the actor and its evidence. */
|
|
454
456
|
reachedGoal: number;
|
|
@@ -463,7 +465,7 @@ export interface ParticipantOutcomes {
|
|
|
463
465
|
/**
|
|
464
466
|
* Participants who reported friction or a defect on the way, whatever their outcome.
|
|
465
467
|
*
|
|
466
|
-
* This is
|
|
468
|
+
* This is not a failure count, and it overlaps the others on purpose: someone can reach the goal
|
|
467
469
|
* and still tell you the road there was broken. A live two-persona run made the case: both
|
|
468
470
|
* participants signed in, so "2/2 reached the goal" was true, and the keyboard-first one also
|
|
469
471
|
* reported that the signature step could not be completed without a mouse. Reporting only the
|
|
@@ -480,61 +482,66 @@ export interface ReviewSummary {
|
|
|
480
482
|
* The study result, separate from the verdict above.
|
|
481
483
|
*
|
|
482
484
|
* `verdict` answers a gate-shaped question and has to collapse a run to one word. This answers
|
|
483
|
-
* the research question
|
|
485
|
+
* the research question (what happened to the people in the study) and does not collapse: a run
|
|
484
486
|
* where two of three participants finished is not usefully "fail", and a run where the harness
|
|
485
487
|
* broke is a different thing from one where a persona gave up. Absent on a dry-run contract
|
|
486
488
|
* bundle, which has no participants.
|
|
487
489
|
*/
|
|
488
490
|
participants?: ParticipantOutcomes;
|
|
489
491
|
/**
|
|
490
|
-
* The study's per-task completion rates
|
|
492
|
+
* The study's per-task completion rates, present only when the lab declared a protocol
|
|
491
493
|
* and at least one session produced a funnel. Absent means no protocol was measured, never that
|
|
492
494
|
* everyone finished.
|
|
493
495
|
*/
|
|
494
|
-
tasks?:
|
|
496
|
+
tasks?: RunTaskFunnel;
|
|
495
497
|
}
|
|
496
498
|
/**
|
|
497
499
|
* The study's task funnel: for each declared task, how many participants completed it, out of how
|
|
498
|
-
* many sessions produced a funnel. This is "where did people get stuck" as data
|
|
499
|
-
* researcher reads first
|
|
500
|
+
* many sessions produced a funnel. This is "where did people get stuck" as data, the number a
|
|
501
|
+
* researcher reads first, where the per-participant funnels answer it one journey at a time.
|
|
500
502
|
*
|
|
501
|
-
* Aggregated by task id in declaration order. Every
|
|
503
|
+
* Aggregated by task id in declaration order. Every participant in a run shares the actor's protocol, so
|
|
502
504
|
* ids line up across participants; a funnel missing a task id (a future mixed-protocol route)
|
|
503
505
|
* simply does not count toward that task's denominator.
|
|
504
506
|
*/
|
|
505
|
-
export interface
|
|
506
|
-
/** Sessions that produced a funnel
|
|
507
|
+
export interface RunTaskFunnel {
|
|
508
|
+
/** Sessions that produced a funnel: the denominator for every count below. */
|
|
507
509
|
sessions: number;
|
|
508
510
|
tasks: Array<{
|
|
509
511
|
id: string;
|
|
510
512
|
/** Participants whose sessions corroborated this task complete. */
|
|
511
513
|
completed: number;
|
|
512
|
-
/** Sessions whose protocol declared this task
|
|
514
|
+
/** Sessions whose protocol declared this task: its denominator. */
|
|
513
515
|
sessions: number;
|
|
514
516
|
/** False when the task declared no success criterion: asked for, never measurable. */
|
|
515
517
|
observable: boolean;
|
|
516
518
|
/** Sessions where this task's criteria were never evaluated, because the observations they
|
|
517
519
|
* read never arrived. Counted apart from failures: "0/3 completed" with 3 unmeasured is a
|
|
518
|
-
* statement about our instrument, not about the participants
|
|
520
|
+
* statement about our instrument, not about the participants. */
|
|
519
521
|
unmeasured: number;
|
|
520
522
|
}>;
|
|
521
523
|
}
|
|
524
|
+
/** The run a bundle belongs to: the Run startRun returned, or a test's stand-in. */
|
|
525
|
+
export interface BundleRun {
|
|
526
|
+
readonly runId: string;
|
|
527
|
+
readonly mode: RunBundle["mode"];
|
|
528
|
+
readonly createdAt: string;
|
|
529
|
+
/** The manifest the run came from, as the plan carried it to startRun. */
|
|
530
|
+
readonly lab?: RunStudyProvenance | undefined;
|
|
531
|
+
}
|
|
522
532
|
/**
|
|
523
|
-
* The fields every run bundle starts with, in the saved order.
|
|
524
|
-
*
|
|
533
|
+
* The fields every run bundle starts with, in the saved order. The run supplies its id, mode,
|
|
534
|
+
* start time and lab; the route passes the participant count and source. The public target cwd
|
|
535
|
+
* and the run's own artifact root are the defaults.
|
|
525
536
|
*/
|
|
526
|
-
export declare function bundleHead(args: {
|
|
537
|
+
export declare function bundleHead(run: BundleRun, args: {
|
|
527
538
|
/** Publication restrictions (real communications), saved right after the schema. */
|
|
528
539
|
publication?: RunBundle["publication"];
|
|
529
|
-
runId: string;
|
|
530
|
-
mode: RunBundle["mode"];
|
|
531
540
|
participants: number;
|
|
532
|
-
createdAt: string;
|
|
533
541
|
cwd?: string;
|
|
534
542
|
artifactRoot?: string;
|
|
535
|
-
lab?: RunLabProvenance;
|
|
536
543
|
source: RunBundle["source"];
|
|
537
|
-
}): Pick<RunBundle, "schema" | "publication" | "runId" | "mode" | "simCount" | "createdAt" | "cwd" | "artifactRoot" | "lab" | "source">;
|
|
544
|
+
}): Pick<RunBundle, "schema" | "publication" | "runId" | "mode" | "simCount" | "createdAt" | "cwd" | "artifactRoot" | "study" | "lab" | "source">;
|
|
538
545
|
/** The files every run directory holds, as the bundle names them. */
|
|
539
546
|
export declare function bundleArtifacts(): RunBundle["artifacts"];
|
|
540
547
|
export declare function buildRunSource(args: {
|
package/dist/run/bundle.js
CHANGED
|
@@ -1,25 +1,27 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { captureGitState } from "./git-state.js";
|
|
3
|
+
import { studyFields } from "./study-provenance.js";
|
|
3
4
|
export const RUN_BUNDLE_SCHEMA = "humanish.run-bundle.v1";
|
|
4
5
|
/** The run bundle file, relative to the run directory. */
|
|
5
6
|
export const RUN_BUNDLE_FILE = "run.json";
|
|
6
7
|
export const REVIEW_SCHEMA = "humanish.review.v1";
|
|
7
8
|
export const PUBLIC_TARGET_CWD = "[target-cwd]";
|
|
8
9
|
/**
|
|
9
|
-
* The fields every run bundle starts with, in the saved order.
|
|
10
|
-
*
|
|
10
|
+
* The fields every run bundle starts with, in the saved order. The run supplies its id, mode,
|
|
11
|
+
* start time and lab; the route passes the participant count and source. The public target cwd
|
|
12
|
+
* and the run's own artifact root are the defaults.
|
|
11
13
|
*/
|
|
12
|
-
export function bundleHead(args) {
|
|
14
|
+
export function bundleHead(run, args) {
|
|
13
15
|
return {
|
|
14
16
|
schema: RUN_BUNDLE_SCHEMA,
|
|
15
17
|
...(args.publication === undefined ? {} : { publication: args.publication }),
|
|
16
|
-
runId:
|
|
17
|
-
mode:
|
|
18
|
+
runId: run.runId,
|
|
19
|
+
mode: run.mode,
|
|
18
20
|
simCount: args.participants,
|
|
19
|
-
createdAt:
|
|
21
|
+
createdAt: run.createdAt,
|
|
20
22
|
cwd: args.cwd ?? PUBLIC_TARGET_CWD,
|
|
21
|
-
artifactRoot: args.artifactRoot ?? path.join(".humanish", "runs",
|
|
22
|
-
...(
|
|
23
|
+
artifactRoot: args.artifactRoot ?? path.join(".humanish", "runs", run.runId),
|
|
24
|
+
...studyFields(run.lab),
|
|
23
25
|
source: args.source,
|
|
24
26
|
};
|
|
25
27
|
}
|
package/dist/run/cost-summary.js
CHANGED
|
@@ -66,6 +66,7 @@ function modelCostLines(participants) {
|
|
|
66
66
|
ratesAsOf: est.ratesAsOf,
|
|
67
67
|
...(est.source === undefined ? {} : { source: est.source }),
|
|
68
68
|
...(est.placeholder ? { placeholder: true } : {}),
|
|
69
|
+
...(est.basis === undefined ? {} : { basis: est.basis }),
|
|
69
70
|
});
|
|
70
71
|
}
|
|
71
72
|
return breakdown;
|
|
@@ -123,8 +124,8 @@ function costTotals(breakdown) {
|
|
|
123
124
|
let anyKnown = false;
|
|
124
125
|
let anyNull = false;
|
|
125
126
|
let placeholder = false;
|
|
126
|
-
// Aggregate freshness is
|
|
127
|
-
// contributing rate, so ratesAsOf takes the
|
|
127
|
+
// Aggregate freshness is conservative: an aggregate estimate is only as current as its oldest
|
|
128
|
+
// contributing rate, so ratesAsOf takes the minimum (oldest) asOf; the maximum would overclaim freshness the
|
|
128
129
|
// moment operator-edited rates in src/run/pricing.ts diverge. Each breakdown line keeps its own true asOf.
|
|
129
130
|
let minRatesAsOf = null;
|
|
130
131
|
for (const line of breakdown) {
|
|
@@ -151,8 +152,8 @@ function costTotals(breakdown) {
|
|
|
151
152
|
function costNote(args, totals) {
|
|
152
153
|
const { estimatedTotalUsd, anyNull, placeholder, minRatesAsOf } = totals;
|
|
153
154
|
const estimateNote = estimatedTotalUsd === null
|
|
154
|
-
? `No
|
|
155
|
-
: `Estimated ${estimatedTotalUsd} USD total${anyNull ? " (
|
|
155
|
+
? `No cost line in this run has a price: each lacks a rate, usage or a duration, and none is guessed. ${args.participants.some((participant) => participant.trace.executionProfile?.billing === "account-unknown") ? "Account billing remains unknown; API prices do not measure account spend." : "Each line's reason says what is missing."}`
|
|
156
|
+
: `Estimated ${estimatedTotalUsd} USD total${anyNull ? " (a lower bound: some lines are unmeasured or unpriced)" : ""}${placeholder ? "; it uses a placeholder rate, so confirm the rate before relying on the amount" : ""}. Every figure multiplies usage by a rate table (rates as of ${minRatesAsOf}, the oldest rate used), so it is an estimate and not the provider's charge.`;
|
|
156
157
|
return (estimateNote +
|
|
157
158
|
((args.desktops?.length ?? 0) > 0
|
|
158
159
|
? args.desktops.some((usage) => usage.observation !== undefined && "resources" in usage.observation)
|
|
@@ -204,7 +205,7 @@ export function spendFreeCostSummary() {
|
|
|
204
205
|
breakdown: [],
|
|
205
206
|
tokenUsage: { input: 0, output: 0, total: 0 },
|
|
206
207
|
desktopMinutes: null,
|
|
207
|
-
note: "
|
|
208
|
+
note: "This run made no model request and used no hosted desktop, so it cost $0.",
|
|
208
209
|
};
|
|
209
210
|
}
|
|
210
211
|
// Convert a host-side desktop span (ms) into billed minutes, or undefined when no sandbox ran.
|
package/dist/run/costs.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { RunIndexEntry } from "./run-index.js";
|
|
2
2
|
/** Additive accounting for retained attempts. Null means no estimate, never an invented zero. */
|
|
3
|
-
export interface
|
|
3
|
+
export interface CostTotals {
|
|
4
4
|
estimatedTotalUsd: number | null;
|
|
5
5
|
runEstimatedUsd: number | null;
|
|
6
6
|
analysisEstimatedUsd: number | null;
|
|
@@ -16,12 +16,12 @@ export interface StudyCosts {
|
|
|
16
16
|
/** No retained history, legacy report-only usage, or unreadable/conflicting accounting. */
|
|
17
17
|
analysisHistoryUncertainRuns: number;
|
|
18
18
|
}
|
|
19
|
-
export interface
|
|
19
|
+
export interface CostRow {
|
|
20
20
|
runId: string;
|
|
21
|
-
costs:
|
|
21
|
+
costs: CostTotals;
|
|
22
22
|
warnings: string[];
|
|
23
23
|
}
|
|
24
|
-
export declare function
|
|
25
|
-
export declare function
|
|
24
|
+
export declare function emptyCostTotals(): CostTotals;
|
|
25
|
+
export declare function addCostTotals(into: CostTotals, next: CostTotals): void;
|
|
26
26
|
/** A read-only, bounded accounting pass. Never validates findings, dispatches, repairs or writes. */
|
|
27
|
-
export declare function
|
|
27
|
+
export declare function readCostTotals(cwd: string, entry: RunIndexEntry): Promise<CostRow>;
|