humanish 0.107.0 → 0.109.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +73 -69
- package/CHANGELOG.md +27 -0
- package/CONTEXT.md +51 -44
- package/README.md +148 -175
- package/SECURITY.md +16 -26
- package/TELEMETRY.md +8 -6
- package/dist/actors/affordance.d.ts +4 -4
- package/dist/actors/affordance.js +12 -12
- package/dist/actors/agent-session.d.ts +2 -2
- package/dist/actors/agent-session.js +7 -7
- package/dist/actors/codex/app-server-actor-trace.d.ts +1 -1
- package/dist/actors/codex/app-server-actor-trace.js +1 -1
- package/dist/actors/codex/app-server-trace.js +2 -1
- package/dist/actors/codex/app-server-ui.js +1 -1
- package/dist/actors/codex/codex-admission.d.ts +91 -0
- package/dist/actors/codex/codex-admission.js +150 -0
- package/dist/actors/codex/restricted-executable.d.ts +4 -4
- package/dist/actors/codex/restricted-executable.js +8 -8
- package/dist/actors/codex/restricted-launch.d.ts +2 -1
- package/dist/actors/codex/restricted-launch.js +1 -1
- package/dist/actors/codex/restricted-participant.js +20 -18
- package/dist/actors/codex/restricted-policy.d.ts +2 -2
- package/dist/actors/codex/restricted-policy.js +2 -2
- package/dist/actors/codex/restricted-session.d.ts +3 -3
- package/dist/actors/codex/restricted-session.js +10 -5
- package/dist/actors/computer-use/actor.d.ts +18 -18
- package/dist/actors/computer-use/actor.js +4 -4
- package/dist/actors/computer-use/admission-limit.d.ts +3 -3
- package/dist/actors/computer-use/admission-limit.js +4 -4
- package/dist/actors/computer-use/executor-error.d.ts +2 -2
- package/dist/actors/computer-use/executor-error.js +3 -3
- package/dist/actors/computer-use/loop/actions.d.ts +3 -3
- package/dist/actors/computer-use/loop/actions.js +15 -15
- package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
- package/dist/actors/computer-use/loop/backstop.js +14 -12
- package/dist/actors/computer-use/loop/debrief.js +2 -2
- package/dist/actors/computer-use/loop/ending.d.ts +6 -6
- package/dist/actors/computer-use/loop/ending.js +18 -17
- package/dist/actors/computer-use/loop/observation.d.ts +2 -2
- package/dist/actors/computer-use/loop/observation.js +15 -14
- package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
- package/dist/actors/computer-use/loop/provider-call.js +12 -12
- package/dist/actors/computer-use/loop/session.d.ts +4 -4
- package/dist/actors/computer-use/loop/session.js +4 -4
- package/dist/actors/computer-use/loop/spend.d.ts +1 -1
- package/dist/actors/computer-use/loop/spend.js +1 -1
- package/dist/actors/computer-use/loop/trace.js +11 -9
- package/dist/actors/computer-use/loop/types.d.ts +47 -45
- package/dist/actors/computer-use/loop/usage.d.ts +2 -2
- package/dist/actors/computer-use/loop/usage.js +2 -2
- package/dist/actors/computer-use/loop.d.ts +6 -1
- package/dist/actors/computer-use/loop.js +26 -4
- package/dist/actors/computer-use/openai-context.d.ts +37 -0
- package/dist/actors/computer-use/openai-context.js +214 -0
- package/dist/actors/computer-use/openai-provider.d.ts +13 -10
- package/dist/actors/computer-use/openai-provider.js +52 -41
- package/dist/actors/computer-use/openai-requests.d.ts +36 -10
- package/dist/actors/computer-use/openai-requests.js +82 -15
- package/dist/actors/computer-use/openai-wire.d.ts +19 -7
- package/dist/actors/computer-use/openai-wire.js +36 -34
- package/dist/actors/computer-use/provider-error.d.ts +4 -4
- package/dist/actors/computer-use/provider-error.js +6 -6
- package/dist/actors/contract.d.ts +82 -47
- package/dist/actors/contract.js +30 -24
- package/dist/actors/local-agent/claude-session.d.ts +1 -1
- package/dist/actors/local-agent/claude-session.js +13 -12
- package/dist/actors/local-agent/cli.d.ts +9 -7
- package/dist/actors/local-agent/cli.js +24 -28
- package/dist/actors/local-agent/readiness.d.ts +2 -2
- package/dist/actors/local-agent/readiness.js +4 -4
- package/dist/actors/reasoning-effort.js +8 -8
- package/dist/actors/registry.d.ts +12 -12
- package/dist/actors/registry.js +21 -20
- package/dist/actors/scripted-browser/actor.d.ts +10 -10
- package/dist/actors/scripted-browser/actor.js +17 -17
- package/dist/actors/scripted-browser/browser-command.js +1 -1
- package/dist/actors/scripted-browser/steps.js +1 -1
- package/dist/actors/scripted-browser/types.d.ts +1 -1
- package/dist/actors/stop-conditions.d.ts +1 -1
- package/dist/analysis/automatic-completion.d.ts +7 -7
- package/dist/analysis/automatic-completion.js +1 -1
- package/dist/analysis/automatic-config.d.ts +6 -6
- package/dist/analysis/automatic-config.js +1 -1
- package/dist/analysis/codex-config.d.ts +6 -2
- package/dist/analysis/codex-config.js +22 -14
- package/dist/analysis/execute.d.ts +1 -1
- package/dist/analysis/execute.js +1 -1
- package/dist/analysis/service.js +5 -5
- package/dist/analysis/types.d.ts +6 -0
- package/dist/browser-control/client.js +16 -16
- package/dist/browser-control/dispatcher.js +4 -4
- package/dist/browser-control/protocol.js +14 -14
- package/dist/browser-control/recording-transfer.js +4 -4
- package/dist/browser-control/transport.js +7 -7
- package/dist/cli/commands/analysis-signals.d.ts +2 -2
- package/dist/cli/commands/analyze.js +19 -16
- package/dist/cli/commands/codex.js +9 -9
- package/dist/cli/commands/comms.js +48 -35
- package/dist/cli/commands/feedback.js +20 -21
- package/dist/cli/commands/migrate.d.ts +4 -0
- package/dist/cli/commands/migrate.js +65 -0
- package/dist/cli/commands/observe.d.ts +0 -1
- package/dist/cli/commands/observe.js +136 -112
- package/dist/cli/commands/run-command.d.ts +10 -0
- package/dist/cli/commands/run-command.js +85 -0
- package/dist/cli/commands/runs.js +136 -139
- package/dist/cli/commands/setup.d.ts +2 -2
- package/dist/cli/commands/setup.js +27 -24
- package/dist/cli/commands/study-format.d.ts +9 -0
- package/dist/cli/commands/{lab-format.js → study-format.js} +39 -27
- package/dist/cli/commands/{lab-route-computer-use.d.ts → study-route-computer-use.d.ts} +6 -6
- package/dist/cli/commands/{lab-route-computer-use.js → study-route-computer-use.js} +17 -18
- package/dist/cli/commands/{lab-route-open.d.ts → study-route-open.d.ts} +4 -4
- package/dist/cli/commands/{lab-route-open.js → study-route-open.js} +2 -2
- package/dist/cli/commands/{lab-route-preview.d.ts → study-route-preview.d.ts} +7 -7
- package/dist/cli/commands/{lab-route-preview.js → study-route-preview.js} +7 -6
- package/dist/cli/commands/study-route-run.d.ts +19 -0
- package/dist/cli/commands/{lab-route-run.js → study-route-run.js} +6 -6
- package/dist/cli/commands/study-route-scripted.d.ts +17 -0
- package/dist/cli/commands/{lab-route-scripted.js → study-route-scripted.js} +4 -4
- package/dist/cli/commands/{lab-route-shared-world.d.ts → study-route-shared-world.d.ts} +5 -5
- package/dist/cli/commands/{lab-route-shared-world.js → study-route-shared-world.js} +10 -10
- package/dist/cli/commands/study-route-terminal.d.ts +17 -0
- package/dist/cli/commands/{lab-route-terminal.js → study-route-terminal.js} +4 -4
- package/dist/cli/commands/study-run.d.ts +9 -0
- package/dist/cli/commands/{lab-run.js → study-run.js} +44 -45
- package/dist/cli/commands/{lab-scorer.d.ts → study-scorer.d.ts} +7 -7
- package/dist/cli/commands/{lab-scorer.js → study-scorer.js} +2 -2
- package/dist/cli/commands/study.d.ts +3 -0
- package/dist/cli/commands/study.js +146 -0
- package/dist/cli/commands/tui.d.ts +4 -4
- package/dist/cli/commands/tui.js +31 -31
- package/dist/cli/commands/watch.js +71 -121
- package/dist/cli/deprecations.d.ts +6 -0
- package/dist/cli/deprecations.js +18 -0
- package/dist/cli/doctor.d.ts +18 -8
- package/dist/cli/doctor.js +114 -59
- package/dist/cli/first-run-path.d.ts +15 -13
- package/dist/cli/first-run-path.js +35 -33
- package/dist/cli/io.d.ts +44 -9
- package/dist/cli/io.js +98 -23
- package/dist/cli/observer-follow.d.ts +3 -3
- package/dist/cli/observer-follow.js +6 -7
- package/dist/cli/orientation.d.ts +10 -7
- package/dist/cli/orientation.js +89 -47
- package/dist/cli/product-sentence.d.ts +6 -0
- package/dist/cli/product-sentence.js +6 -0
- package/dist/cli/program.d.ts +6 -1
- package/dist/cli/program.js +111 -43
- package/dist/cli/telemetry.d.ts +16 -16
- package/dist/cli/telemetry.js +46 -44
- package/dist/cli.js +1 -1
- package/dist/comms/capture-surface.d.ts +13 -12
- package/dist/comms/capture-surface.js +23 -22
- package/dist/comms/catch-host.d.ts +7 -7
- package/dist/comms/catch-host.js +17 -17
- package/dist/comms/connections.d.ts +1 -1
- package/dist/comms/connections.js +2 -2
- package/dist/comms/email-catch.d.ts +3 -3
- package/dist/comms/email-catch.js +8 -8
- package/dist/comms/external-evidence.d.ts +5 -5
- package/dist/comms/external-evidence.js +5 -4
- package/dist/comms/extract.js +2 -2
- package/dist/comms/fake-inbox.d.ts +3 -3
- package/dist/comms/fake-inbox.js +3 -3
- package/dist/comms/receiving-render.d.ts +1 -1
- package/dist/comms/receiving-render.js +2 -2
- package/dist/comms/receiving-runtime.d.ts +4 -4
- package/dist/comms/sandbox-catch-script.d.ts +6 -6
- package/dist/comms/sandbox-catch-script.js +6 -6
- package/dist/comms/sandbox-catch.d.ts +38 -39
- package/dist/comms/sandbox-catch.js +36 -37
- package/dist/comms/setup.d.ts +2 -2
- package/dist/comms/setup.js +56 -25
- package/dist/comms/thread-evidence.d.ts +1 -1
- package/dist/comms/thread-evidence.js +6 -6
- package/dist/comms/types.d.ts +6 -6
- package/dist/comms/types.js +3 -3
- package/dist/evidence/frame-signature.d.ts +1 -1
- package/dist/evidence/frame-signature.js +4 -4
- package/dist/evidence/redaction.d.ts +3 -3
- package/dist/evidence/redaction.js +4 -4
- package/dist/feedback/draft.js +38 -80
- package/dist/feedback/export-bundle.js +1 -1
- package/dist/feedback/export.d.ts +5 -1
- package/dist/feedback/export.js +10 -10
- package/dist/feedback/feedback.d.ts +2 -2
- package/dist/feedback/feedback.js +21 -3
- package/dist/feedback/proof.d.ts +1 -1
- package/dist/feedback/proof.js +2 -2
- package/dist/guest/bootstrap.js +6 -6
- package/dist/guest/browser-tools.js +8 -8
- package/dist/guest/chromium-text.js +19 -19
- package/dist/guest/desktop-executor.d.ts +2 -2
- package/dist/guest/desktop-executor.js +20 -20
- package/dist/guest/desktop-keys.js +4 -4
- package/dist/guest/desktop-media.d.ts +2 -2
- package/dist/guest/desktop-media.js +16 -16
- package/dist/guest/desktop-native.d.ts +1 -1
- package/dist/guest/desktop-native.js +10 -10
- package/dist/guest/runtime-desktop.js +2 -2
- package/dist/guest/runtime-processes.d.ts +2 -2
- package/dist/guest/runtime-processes.js +2 -2
- package/dist/guest/runtime.js +6 -6
- package/dist/index.d.ts +14 -14
- package/dist/index.js +8 -8
- package/dist/keys/key-resolution.d.ts +5 -5
- package/dist/keys/key-resolution.js +23 -23
- package/dist/observer/artifact.d.ts +2 -2
- package/dist/observer/artifact.js +7 -7
- package/dist/observer/data.d.ts +6 -6
- package/dist/observer/data.js +5 -4
- package/dist/observer/exposure.d.ts +1 -1
- package/dist/observer/exposure.js +11 -11
- package/dist/observer/http.js +1 -1
- package/dist/observer/library.d.ts +3 -1
- package/dist/observer/library.js +8 -3
- package/dist/observer/listen.js +5 -4
- package/dist/observer/render.d.ts +1 -1
- package/dist/observer/render.js +17 -6
- package/dist/observer/run-routes.d.ts +4 -3
- package/dist/observer/run-routes.js +38 -13
- package/dist/observer/serve.d.ts +1 -1
- package/dist/observer/serve.js +7 -3
- package/dist/observer/tunnel.js +1 -1
- package/dist/observer-app.html +4 -4
- package/dist/routes/computer-use/bundle-parts.d.ts +9 -9
- package/dist/routes/computer-use/bundle-parts.js +18 -17
- package/dist/routes/computer-use/bundle.d.ts +2 -2
- package/dist/routes/computer-use/bundle.js +10 -9
- package/dist/routes/computer-use/e2b-desktop/comms.d.ts +6 -6
- package/dist/routes/computer-use/e2b-desktop/comms.js +18 -17
- package/dist/routes/computer-use/e2b-desktop/desktop.js +4 -4
- package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +5 -4
- package/dist/routes/computer-use/e2b-desktop/fidelity.js +11 -10
- package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +1 -1
- package/dist/routes/computer-use/e2b-desktop/prepare.js +10 -10
- package/dist/routes/computer-use/e2b-desktop/start.js +7 -7
- package/dist/routes/computer-use/e2b-desktop/state.d.ts +2 -2
- package/dist/routes/computer-use/e2b-desktop/teardown.js +2 -2
- package/dist/routes/computer-use/external-comms.d.ts +4 -4
- package/dist/routes/computer-use/external-comms.js +1 -1
- package/dist/routes/computer-use/fanout-bundle.js +27 -26
- package/dist/routes/computer-use/fanout-records.js +12 -13
- package/dist/routes/computer-use/live-flush.d.ts +4 -4
- package/dist/routes/computer-use/live-flush.js +6 -6
- package/dist/routes/computer-use/live-phase.d.ts +5 -4
- package/dist/routes/computer-use/live-phase.js +8 -8
- package/dist/routes/computer-use/local-tree-pack.d.ts +5 -5
- package/dist/routes/computer-use/local-tree-pack.js +1 -1
- package/dist/routes/computer-use/local-vm.d.ts +8 -8
- package/dist/routes/computer-use/local-vm.js +3 -3
- package/dist/routes/computer-use/participant-desktop.d.ts +7 -7
- package/dist/routes/computer-use/participant-desktop.js +5 -5
- package/dist/routes/computer-use/participant-execution.d.ts +4 -4
- package/dist/routes/computer-use/participant-execution.js +10 -10
- package/dist/routes/computer-use/participant-model.d.ts +6 -0
- package/dist/routes/computer-use/participant-model.js +33 -15
- package/dist/routes/computer-use/participant-prompt.d.ts +15 -15
- package/dist/routes/computer-use/participant-prompt.js +9 -9
- package/dist/routes/computer-use/participant-runs.d.ts +16 -16
- package/dist/routes/computer-use/participant-runs.js +26 -25
- package/dist/routes/computer-use/plan.d.ts +12 -12
- package/dist/routes/computer-use/plan.js +42 -42
- package/dist/routes/computer-use/preflight.d.ts +5 -5
- package/dist/routes/computer-use/preflight.js +25 -25
- package/dist/routes/computer-use/rerun-selection.d.ts +1 -1
- package/dist/routes/computer-use/rerun-selection.js +4 -3
- package/dist/routes/computer-use/result.d.ts +4 -4
- package/dist/routes/computer-use/result.js +22 -21
- package/dist/routes/computer-use/route.d.ts +12 -11
- package/dist/routes/computer-use/route.js +31 -30
- package/dist/routes/computer-use/self-report.d.ts +7 -7
- package/dist/routes/computer-use/self-report.js +32 -32
- package/dist/routes/computer-use/setup.d.ts +23 -23
- package/dist/routes/computer-use/setup.js +28 -29
- package/dist/routes/computer-use/single-bundle.d.ts +11 -11
- package/dist/routes/computer-use/single-bundle.js +40 -41
- package/dist/routes/computer-use/subject-projection.d.ts +4 -4
- package/dist/routes/computer-use/subject-projection.js +6 -6
- package/dist/routes/computer-use/types.d.ts +71 -73
- package/dist/routes/computer-use/types.js +12 -12
- package/dist/routes/preview.d.ts +13 -7
- package/dist/routes/preview.js +11 -7
- package/dist/routes/scripted/bundle.d.ts +7 -7
- package/dist/routes/scripted/bundle.js +20 -18
- package/dist/routes/scripted/plan.d.ts +8 -8
- package/dist/routes/scripted/plan.js +13 -13
- package/dist/routes/scripted/result.d.ts +3 -3
- package/dist/routes/scripted/result.js +13 -13
- package/dist/routes/scripted/route.d.ts +9 -9
- package/dist/routes/scripted/route.js +15 -16
- package/dist/routes/scripted/scenario.d.ts +1 -1
- package/dist/routes/scripted/scenario.js +5 -5
- package/dist/routes/scripted/setup.d.ts +6 -6
- package/dist/routes/scripted/setup.js +8 -8
- package/dist/routes/scripted/subject.d.ts +5 -5
- package/dist/routes/scripted/subject.js +4 -4
- package/dist/routes/scripted/surface-records.d.ts +1 -1
- package/dist/routes/scripted/surface-records.js +4 -4
- package/dist/routes/scripted/surface-sessions.d.ts +3 -3
- package/dist/routes/scripted/types.d.ts +18 -20
- package/dist/routes/scripted/types.js +2 -2
- package/dist/routes/shared-world/bundle-records.js +11 -10
- package/dist/routes/shared-world/bundle.d.ts +5 -5
- package/dist/routes/shared-world/bundle.js +46 -43
- package/dist/routes/shared-world/checkpoints.d.ts +4 -4
- package/dist/routes/shared-world/checkpoints.js +2 -2
- package/dist/routes/shared-world/comms.d.ts +14 -14
- package/dist/routes/shared-world/comms.js +19 -18
- package/dist/routes/shared-world/external-public.d.ts +4 -3
- package/dist/routes/shared-world/external-public.js +16 -12
- package/dist/routes/shared-world/handoff.d.ts +7 -6
- package/dist/routes/shared-world/handoff.js +65 -57
- package/dist/routes/shared-world/lobby-code.d.ts +2 -2
- package/dist/routes/shared-world/lobby-code.js +9 -9
- package/dist/routes/shared-world/participant-specs.d.ts +10 -9
- package/dist/routes/shared-world/participant-specs.js +38 -31
- package/dist/routes/shared-world/plan.d.ts +9 -9
- package/dist/routes/shared-world/plan.js +16 -16
- package/dist/routes/shared-world/provenance.d.ts +2 -2
- package/dist/routes/shared-world/provenance.js +2 -2
- package/dist/routes/shared-world/provisioned.d.ts +8 -8
- package/dist/routes/shared-world/provisioned.js +18 -17
- package/dist/routes/shared-world/result.d.ts +6 -6
- package/dist/routes/shared-world/result.js +29 -29
- package/dist/routes/shared-world/route.d.ts +11 -11
- package/dist/routes/shared-world/route.js +40 -39
- package/dist/routes/shared-world/setup.d.ts +16 -16
- package/dist/routes/shared-world/setup.js +23 -23
- package/dist/routes/shared-world/types.d.ts +55 -53
- package/dist/routes/shared-world/types.js +4 -4
- package/dist/routes/terminal/adapter.d.ts +5 -5
- package/dist/routes/terminal/adapter.js +9 -9
- package/dist/routes/terminal/bundle.d.ts +13 -13
- package/dist/routes/terminal/bundle.js +28 -27
- package/dist/routes/terminal/credentials.d.ts +8 -8
- package/dist/routes/terminal/credentials.js +12 -12
- package/dist/routes/terminal/dry-run.d.ts +4 -4
- package/dist/routes/terminal/dry-run.js +12 -12
- package/dist/routes/terminal/encoding.js +2 -2
- package/dist/routes/terminal/ledger.d.ts +5 -5
- package/dist/routes/terminal/ledger.js +14 -14
- package/dist/routes/terminal/lifetime.d.ts +1 -1
- package/dist/routes/terminal/lifetime.js +1 -1
- package/dist/routes/terminal/live-finish.d.ts +2 -2
- package/dist/routes/terminal/live-finish.js +10 -10
- package/dist/routes/terminal/live-sandbox.d.ts +2 -2
- package/dist/routes/terminal/live-sandbox.js +15 -15
- package/dist/routes/terminal/participant-text.js +2 -1
- package/dist/routes/terminal/persona.d.ts +2 -2
- package/dist/routes/terminal/persona.js +3 -3
- package/dist/routes/terminal/plan.d.ts +7 -7
- package/dist/routes/terminal/plan.js +15 -15
- package/dist/routes/terminal/recorder.js +2 -2
- package/dist/routes/terminal/result.d.ts +5 -5
- package/dist/routes/terminal/result.js +14 -14
- package/dist/routes/terminal/route.d.ts +9 -9
- package/dist/routes/terminal/route.js +19 -20
- package/dist/routes/terminal/sandbox.d.ts +1 -1
- package/dist/routes/terminal/sandbox.js +1 -1
- package/dist/routes/terminal/session.d.ts +5 -5
- package/dist/routes/terminal/session.js +14 -13
- package/dist/routes/terminal/token-usage.d.ts +1 -1
- package/dist/routes/terminal/token-usage.js +7 -8
- package/dist/routes/terminal/trace.d.ts +4 -4
- package/dist/routes/terminal/trace.js +2 -2
- package/dist/routes/terminal/types.d.ts +48 -50
- package/dist/routes/terminal/types.js +5 -5
- package/dist/run/bundle-shape.js +3 -3
- package/dist/run/bundle.d.ts +49 -49
- package/dist/run/bundle.js +3 -2
- package/dist/run/cost-summary.js +3 -3
- package/dist/run/costs.d.ts +23 -0
- package/dist/run/costs.js +79 -44
- package/dist/run/detail.d.ts +6 -6
- package/dist/run/detail.js +4 -4
- package/dist/run/dry-run-inputs.d.ts +1 -1
- package/dist/run/dry-run-inputs.js +2 -2
- package/dist/run/dry-run.js +20 -20
- package/dist/run/judge.d.ts +19 -13
- package/dist/run/judge.js +18 -8
- package/dist/run/outcomes.d.ts +1 -1
- package/dist/run/participant.d.ts +1 -1
- package/dist/run/paths.d.ts +1 -1
- package/dist/run/paths.js +1 -1
- package/dist/run/preflight-receipts.js +1 -1
- package/dist/run/pricing.d.ts +11 -6
- package/dist/run/pricing.js +22 -15
- package/dist/run/projection.d.ts +46 -46
- package/dist/run/projection.js +57 -57
- package/dist/run/reclaim.d.ts +1 -1
- package/dist/run/reclaim.js +3 -3
- package/dist/run/results.d.ts +5 -5
- package/dist/run/run-cost.d.ts +53 -0
- package/dist/run/run-cost.js +105 -0
- package/dist/run/run-index-analysis.d.ts +15 -0
- package/dist/run/run-index-analysis.js +77 -0
- package/dist/run/run-index.d.ts +19 -7
- package/dist/run/run-index.js +77 -64
- package/dist/run/run-not-found.d.ts +5 -0
- package/dist/run/run-not-found.js +15 -0
- package/dist/run/run.d.ts +6 -5
- package/dist/run/run.js +3 -3
- package/dist/run/sandbox-receipts.d.ts +2 -2
- package/dist/run/sandbox-receipts.js +3 -3
- package/dist/run/shared-world-evidence.d.ts +37 -36
- package/dist/run/shared-world-evidence.js +4 -4
- package/dist/run/shared-world-shape.d.ts +1 -1
- package/dist/run/shared-world-shape.js +7 -7
- package/dist/run/stats.d.ts +14 -8
- package/dist/run/stats.js +121 -63
- package/dist/run/status.d.ts +16 -29
- package/dist/run/status.js +10 -29
- package/dist/run/stored-runs.js +2 -1
- package/dist/run/stream-shape.js +1 -1
- package/dist/run/streams.d.ts +7 -7
- package/dist/run/study-provenance.d.ts +49 -0
- package/dist/run/study-provenance.js +66 -0
- package/dist/run/study-result.d.ts +11 -0
- package/dist/run/study-result.js +9 -0
- package/dist/run/text.d.ts +2 -0
- package/dist/run/text.js +4 -0
- package/dist/run-study.d.ts +112 -0
- package/dist/{run-lab.js → run-study.js} +52 -47
- package/dist/{lab → study}/adapter-extension.d.ts +15 -27
- package/dist/{lab → study}/adapter-extension.js +10 -45
- package/dist/{lab → study}/adapter-scorer-loader.d.ts +17 -17
- package/dist/{lab → study}/adapter-scorer-loader.js +34 -34
- package/dist/study/composition-rules.d.ts +7 -0
- package/dist/{lab → study}/composition-rules.js +53 -53
- package/dist/study/config.d.ts +15 -0
- package/dist/{lab → study}/config.js +98 -41
- package/dist/study/convert.d.ts +33 -0
- package/dist/study/convert.js +432 -0
- package/dist/{lab → study}/device-presets.d.ts +10 -10
- package/dist/{lab → study}/device-presets.js +11 -11
- package/dist/study/discover.d.ts +75 -0
- package/dist/{lab → study}/discover.js +134 -95
- package/dist/{lab → study}/doctor.d.ts +19 -12
- package/dist/{lab → study}/doctor.js +58 -20
- package/dist/study/field-paths.d.ts +12 -0
- package/dist/study/field-paths.js +126 -0
- package/dist/study/files.d.ts +26 -0
- package/dist/study/files.js +44 -0
- package/dist/{lab → study}/init-templates.d.ts +2 -2
- package/dist/study/init-templates.js +421 -0
- package/dist/{lab → study}/init.d.ts +2 -2
- package/dist/{lab → study}/init.js +46 -11
- package/dist/study/keys.d.ts +4 -0
- package/dist/{lab → study}/keys.js +46 -12
- package/dist/study/migrate.d.ts +48 -0
- package/dist/study/migrate.js +408 -0
- package/dist/study/owned-files.d.ts +38 -0
- package/dist/study/owned-files.js +182 -0
- package/dist/{lab → study}/parse/actors.d.ts +5 -5
- package/dist/{lab → study}/parse/actors.js +14 -14
- package/dist/study/parse/comms.d.ts +12 -0
- package/dist/{lab → study}/parse/comms.js +5 -5
- package/dist/study/parse/execution.d.ts +19 -0
- package/dist/{lab → study}/parse/execution.js +13 -13
- package/dist/study/parse/study-v3.d.ts +21 -0
- package/dist/study/parse/study-v3.js +259 -0
- package/dist/study/parse/subject-state.d.ts +30 -0
- package/dist/{lab → study}/parse/subject-state.js +19 -19
- package/dist/{lab → study}/parse/subject.d.ts +3 -3
- package/dist/{lab → study}/parse/subject.js +34 -34
- package/dist/{lab → study}/parse/values.d.ts +3 -3
- package/dist/{lab → study}/parse/values.js +3 -3
- package/dist/{lab → study}/persona-resolve.d.ts +8 -8
- package/dist/{lab → study}/persona-resolve.js +6 -6
- package/dist/{lab → study}/plan-base.d.ts +7 -7
- package/dist/{lab → study}/plan-base.js +1 -1
- package/dist/{lab → study}/plan-participants.d.ts +12 -12
- package/dist/{lab → study}/plan-participants.js +4 -4
- package/dist/{lab → study}/plan-types.d.ts +31 -31
- package/dist/{lab → study}/plan-types.js +2 -2
- package/dist/study/plan.d.ts +13 -0
- package/dist/study/plan.js +101 -0
- package/dist/study/preflight-probes.d.ts +3 -0
- package/dist/{lab → study}/preflight-probes.js +20 -19
- package/dist/study/preflight-result.d.ts +8 -0
- package/dist/{lab → study}/preflight-result.js +5 -4
- package/dist/study/preflight.d.ts +94 -0
- package/dist/{lab → study}/preflight.js +12 -12
- package/dist/{lab → study}/requirements.d.ts +3 -3
- package/dist/{lab → study}/requirements.js +1 -1
- package/dist/study/route-inputs.d.ts +28 -0
- package/dist/{lab → study}/route-inputs.js +1 -1
- package/dist/{lab → study}/routing.d.ts +39 -33
- package/dist/{lab → study}/routing.js +60 -29
- package/dist/{lab/run-lab-events.d.ts → study/run-study-events.d.ts} +10 -13
- package/dist/{lab/run-lab-events.js → study/run-study-events.js} +3 -9
- package/dist/{lab/run-lab-homes.d.ts → study/run-study-homes.d.ts} +21 -18
- package/dist/{lab/run-lab-homes.js → study/run-study-homes.js} +1 -1
- package/dist/study/run-study-options.d.ts +28 -0
- package/dist/{lab/run-lab-options.js → study/run-study-options.js} +29 -25
- package/dist/{lab/lab-deps.d.ts → study/study-deps.d.ts} +8 -13
- package/dist/{lab/lab-deps.js → study/study-deps.js} +2 -2
- package/dist/{lab → study}/summary.d.ts +16 -15
- package/dist/{lab → study}/summary.js +21 -21
- package/dist/{lab → study}/tasks.d.ts +18 -18
- package/dist/{lab → study}/tasks.js +14 -14
- package/dist/{lab → study}/types.d.ts +202 -196
- package/dist/{lab → study}/types.js +3 -1
- package/dist/{lab → study}/validation.d.ts +27 -27
- package/dist/{lab → study}/validation.js +53 -51
- package/dist/study/warnings.d.ts +12 -0
- package/dist/{lab → study}/warnings.js +62 -34
- package/dist/subject/clone.d.ts +7 -7
- package/dist/subject/clone.js +2 -2
- package/dist/subject/desktop-cli.d.ts +1 -1
- package/dist/subject/desktop-cli.js +2 -2
- package/dist/subject/local-tree-archive.d.ts +2 -2
- package/dist/subject/local-tree-archive.js +4 -4
- package/dist/subject/local-tree.d.ts +4 -4
- package/dist/subject/node-bootstrap.js +1 -1
- package/dist/subject/runtime.js +9 -10
- package/dist/subject/serve.d.ts +5 -5
- package/dist/subject/serve.js +3 -3
- package/dist/subject/state.d.ts +4 -4
- package/dist/subject/state.js +1 -1
- package/dist/subject/steps.d.ts +6 -6
- package/dist/subject/steps.js +5 -5
- package/dist/substrates/command-failure.d.ts +3 -3
- package/dist/substrates/command-failure.js +3 -3
- package/dist/substrates/desktop-session.js +2 -2
- package/dist/substrates/detached.d.ts +6 -6
- package/dist/substrates/detached.js +7 -7
- package/dist/substrates/e2b/cdp-probe.d.ts +9 -9
- package/dist/substrates/e2b/cdp-probe.js +14 -17
- package/dist/substrates/e2b/desktop-browser.d.ts +6 -6
- package/dist/substrates/e2b/desktop-browser.js +9 -9
- package/dist/substrates/e2b/desktop-cdp.d.ts +10 -10
- package/dist/substrates/e2b/desktop-cdp.js +9 -9
- package/dist/substrates/e2b/desktop-executor.d.ts +2 -2
- package/dist/substrates/e2b/desktop-executor.js +13 -13
- package/dist/substrates/e2b/desktop-geometry.d.ts +4 -4
- package/dist/substrates/e2b/desktop-geometry.js +8 -8
- package/dist/substrates/e2b/desktop-media.d.ts +4 -4
- package/dist/substrates/e2b/desktop-media.js +1 -1
- package/dist/substrates/e2b/desktop-screenshot-cleanup.d.ts +3 -3
- package/dist/substrates/e2b/desktop-screenshot-cleanup.js +3 -3
- package/dist/substrates/e2b/lifetime.js +1 -1
- package/dist/substrates/e2b/sandbox.d.ts +4 -4
- package/dist/substrates/e2b/sandbox.js +2 -2
- package/dist/substrates/e2b/sdk.d.ts +12 -12
- package/dist/substrates/e2b/sdk.js +7 -7
- package/dist/substrates/local/runtime-config.d.ts +4 -4
- package/dist/substrates/local/runtime-config.js +4 -4
- package/dist/tui/actions.d.ts +1 -1
- package/dist/tui/actions.js +13 -13
- package/dist/tui/contract.d.ts +23 -23
- package/dist/tui/contract.js +11 -11
- package/dist/tui/launch.d.ts +7 -7
- package/dist/tui/launch.js +36 -31
- package/dist/tui/project.js +5 -5
- package/dist/tui-app.js +139 -139
- package/dist/verify/actor.d.ts +8 -8
- package/dist/verify/actor.js +36 -36
- package/dist/verify/artifacts.d.ts +2 -2
- package/dist/verify/artifacts.js +3 -3
- package/dist/verify/context-growth.d.ts +9 -0
- package/dist/verify/context-growth.js +62 -0
- package/dist/verify/costs.d.ts +6 -6
- package/dist/verify/costs.js +8 -8
- package/dist/verify/shared-world-concurrent.d.ts +2 -2
- package/dist/verify/shared-world-concurrent.js +79 -76
- package/dist/verify/shared-world.d.ts +2 -2
- package/dist/verify/shared-world.js +16 -16
- package/dist/verify/subject.d.ts +5 -5
- package/dist/verify/subject.js +19 -19
- package/dist/verify/verify.js +94 -44
- package/docs/README.md +25 -32
- package/docs/architecture/actor-contract.md +60 -91
- package/docs/architecture/browser-control.md +1 -1
- package/docs/architecture/desktop-sessions.md +7 -7
- package/docs/architecture/external-public-shared-world.md +68 -65
- package/docs/architecture/github-feedback-loop.md +2 -5
- package/docs/architecture/guest-desktop.md +2 -2
- package/docs/architecture/observer.md +34 -34
- package/docs/architecture/restricted-codex-analysis.md +34 -28
- package/docs/architecture/serve.md +34 -37
- package/docs/architecture/state-driven-executor.md +55 -58
- package/docs/architecture/task-protocol-support.md +6 -6
- package/docs/architecture/terminal-product-route.md +70 -110
- package/docs/contracts/README.md +24 -0
- package/docs/contracts/adapter-admission.md +3 -3
- package/docs/contracts/adapter-fixtures.md +4 -7
- package/docs/contracts/core.md +1 -3
- package/docs/contracts/errors.md +62 -0
- package/docs/contracts/feedback.md +8 -9
- package/docs/contracts/policy.md +7 -12
- package/docs/contracts/run-bundle.md +42 -44
- package/docs/contracts/schemas.md +446 -368
- package/docs/contracts/study-analysis.md +7 -4
- package/docs/contracts/study-costs.md +28 -9
- package/docs/decisions/0001-run-bundle-is-the-source-of-truth.md +1 -1
- package/docs/decisions/0002-observer-is-one-self-contained-file.md +2 -2
- package/docs/decisions/0003-contained-paths-and-cleanup-authority.md +3 -3
- package/docs/principles/actor-fidelity.md +4 -4
- package/docs/principles/engineering.md +3 -3
- package/docs/principles/invariants-and-defaults.md +38 -38
- package/docs/principles/self-driving-harness.md +1 -5
- package/docs/principles/three-roles.md +1 -1
- package/docs/product/automatic-analysis.md +7 -7
- package/examples/README.md +1 -1
- package/examples/participant/README.md +5 -5
- package/examples/participant/run.mjs +11 -10
- package/examples/scorer/README.md +3 -3
- package/examples/scorer/run.mjs +11 -12
- package/examples/scorer/scorer.mjs +3 -3
- package/package.json +16 -17
- package/skills/humanish/SKILL.md +64 -60
- package/skills/humanish/agents/openai.yaml +1 -1
- package/AGENTS.md +0 -99
- package/CONTRIBUTING.md +0 -148
- package/dist/actors/codex/qualified-versions.d.ts +0 -72
- package/dist/actors/codex/qualified-versions.js +0 -132
- package/dist/cli/commands/lab-format.d.ts +0 -8
- package/dist/cli/commands/lab-route-run.d.ts +0 -19
- package/dist/cli/commands/lab-route-scripted.d.ts +0 -17
- package/dist/cli/commands/lab-route-terminal.d.ts +0 -17
- package/dist/cli/commands/lab-run.d.ts +0 -9
- package/dist/cli/commands/lab.d.ts +0 -3
- package/dist/cli/commands/lab.js +0 -199
- package/dist/cli/renamed-options.d.ts +0 -11
- package/dist/cli/renamed-options.js +0 -18
- package/dist/lab/composition-rules.d.ts +0 -7
- package/dist/lab/config.d.ts +0 -7
- package/dist/lab/discover.d.ts +0 -65
- package/dist/lab/init-templates.js +0 -416
- package/dist/lab/keys.d.ts +0 -2
- package/dist/lab/parse/comms.d.ts +0 -12
- package/dist/lab/parse/execution.d.ts +0 -19
- package/dist/lab/parse/subject-state.d.ts +0 -30
- package/dist/lab/plan.d.ts +0 -19
- package/dist/lab/plan.js +0 -132
- package/dist/lab/preflight-probes.d.ts +0 -3
- package/dist/lab/preflight-result.d.ts +0 -7
- package/dist/lab/preflight.d.ts +0 -92
- package/dist/lab/route-inputs.d.ts +0 -28
- package/dist/lab/run-lab-options.d.ts +0 -28
- package/dist/lab/warnings.d.ts +0 -2
- package/dist/observer/static.d.ts +0 -39
- package/dist/observer/static.js +0 -369
- package/dist/run-lab.d.ts +0 -112
- package/docs/architecture/comms-inbox.md +0 -122
- package/docs/architecture/desktop-recording.md +0 -80
- package/docs/architecture/local-browser-runtime.md +0 -178
- package/docs/architecture/observer-review.md +0 -144
- package/docs/architecture/participant-media.md +0 -90
- package/docs/architecture/project-layout.md +0 -62
- package/docs/architecture/real-email-receiving.md +0 -136
- package/docs/assets/humanish-drawdb-hero.png +0 -0
- package/docs/assets/humanish-observer-hero.png +0 -0
- package/docs/goals/current.md +0 -207
- package/docs/product/lobby-trivia-3player-external-public.md +0 -77
- package/docs/product/open-source-install-experience.md +0 -240
- package/docs/ramp/README.md +0 -295
- package/docs/release/open-source-readiness.md +0 -222
- package/docs/release/public-readiness-standard.md +0 -210
- package/docs/roadmap/world-class-open-source-v0.md +0 -311
- /package/dist/{lab → study}/init-paths.d.ts +0 -0
- /package/dist/{lab → study}/init-paths.js +0 -0
- /package/dist/{lab → study}/init-plan.d.ts +0 -0
- /package/dist/{lab → study}/init-plan.js +0 -0
- /package/dist/{lab → study}/participant-assignment.d.ts +0 -0
- /package/dist/{lab → study}/participant-assignment.js +0 -0
- /package/dist/{lab → study}/persona.d.ts +0 -0
- /package/dist/{lab → study}/persona.js +0 -0
package/dist/verify/actor.d.ts
CHANGED
|
@@ -3,23 +3,23 @@ import { type RunBundle } from "../run/bundle.js";
|
|
|
3
3
|
export declare function isZeroEventTerminalTrace(value: unknown): boolean;
|
|
4
4
|
/**
|
|
5
5
|
* Verifier for the terminal-product real-agent route (the in-sandbox command-scoped key route). A
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* failure is the evidence)
|
|
6
|
+
* live terminal stream must carry the durable proof the safety contract requires, and must fail
|
|
7
|
+
* closed when any of it is missing. A blocked/failed agent run stays structurally verifiable (the
|
|
8
|
+
* failure is the evidence) only when the substrate/cleanup/interventions ledgers are present; it
|
|
9
9
|
* must never become a hollow pass. Credential-shape leakage across every artifact file is already
|
|
10
|
-
* caught by scanRunPublicSafetyArtifacts; this check enforces the
|
|
10
|
+
* caught by scanRunPublicSafetyArtifacts; this check enforces the structural evidence + the
|
|
11
11
|
* proven-teardown invariant. Dry-run/contract bundles are exempt (mode !== live).
|
|
12
12
|
*/
|
|
13
13
|
export declare function validateTerminalProductEvidence(runPaths: PreparedRunArtifactPaths, bundle: RunBundle): Promise<string[]>;
|
|
14
14
|
export declare function validateCodexAppServerEvidence(runPaths: PreparedRunArtifactPaths, bundle: RunBundle): Promise<string[]>;
|
|
15
15
|
/**
|
|
16
16
|
* Independent mirror of the producer-side no-engagement guard
|
|
17
|
-
* (routes/computer-use/participant-execution.ts): a
|
|
18
|
-
* carrying zero action-bearing items
|
|
19
|
-
* nor said anything
|
|
17
|
+
* (routes/computer-use/participant-execution.ts): a live actor trace claiming goal_satisfied while
|
|
18
|
+
* carrying zero action-bearing items and zero message items is a hollow run (the actor neither did
|
|
19
|
+
* nor said anything) and must not verify as evidence: evidence verifies fail-closed.
|
|
20
20
|
* Live-vs-dry-run is judged exactly as the producer judges it, from bundle.mode alone;
|
|
21
21
|
* dry-run/contract bundles legitimately carry no actions and stay exempt. Engagement is accepted
|
|
22
|
-
* from
|
|
22
|
+
* from either surface (itemized trace items or the producer's counts), because providers differ in
|
|
23
23
|
* what they itemize; a hollow run reports zero on both. The trace is read defensively: isRunStream
|
|
24
24
|
* does not validate the actor seam, and verify must not throw on a malformed one.
|
|
25
25
|
*/
|
package/dist/verify/actor.js
CHANGED
|
@@ -15,11 +15,11 @@ export function isZeroEventTerminalTrace(value) {
|
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
17
|
* Verifier for the terminal-product real-agent route (the in-sandbox command-scoped key route). A
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* failure is the evidence)
|
|
18
|
+
* live terminal stream must carry the durable proof the safety contract requires, and must fail
|
|
19
|
+
* closed when any of it is missing. A blocked/failed agent run stays structurally verifiable (the
|
|
20
|
+
* failure is the evidence) only when the substrate/cleanup/interventions ledgers are present; it
|
|
21
21
|
* must never become a hollow pass. Credential-shape leakage across every artifact file is already
|
|
22
|
-
* caught by scanRunPublicSafetyArtifacts; this check enforces the
|
|
22
|
+
* caught by scanRunPublicSafetyArtifacts; this check enforces the structural evidence + the
|
|
23
23
|
* proven-teardown invariant. Dry-run/contract bundles are exempt (mode !== live).
|
|
24
24
|
*/
|
|
25
25
|
export async function validateTerminalProductEvidence(runPaths, bundle) {
|
|
@@ -27,8 +27,8 @@ export async function validateTerminalProductEvidence(runPaths, bundle) {
|
|
|
27
27
|
return [];
|
|
28
28
|
}
|
|
29
29
|
const findings = [];
|
|
30
|
-
// Detect the terminal-
|
|
31
|
-
// the broad stream.kind "terminal"
|
|
30
|
+
// Detect the terminal-product route by its unique actor-trace protocol ("terminal-exec") instead of
|
|
31
|
+
// the broad stream.kind "terminal": the existing local codex-exec/TUI routes also use terminal
|
|
32
32
|
// streams (with a different protocol) and must not be held to this route's ledger contract.
|
|
33
33
|
const terminalStreams = bundle.streams.filter((stream) => stream.actor?.protocol === "terminal-exec" && stream.status !== "contract_proof_only");
|
|
34
34
|
if (terminalStreams.length === 0) {
|
|
@@ -40,7 +40,7 @@ export async function validateTerminalProductEvidence(runPaths, bundle) {
|
|
|
40
40
|
findings.push(`missing or malformed ${TERMINAL_LEDGERS_ARTIFACT} (humanish.terminal-ledgers.v1)`);
|
|
41
41
|
return findings;
|
|
42
42
|
}
|
|
43
|
-
// Substrate lifecycle ledger: must record at least sandbox creation
|
|
43
|
+
// Substrate lifecycle ledger: must record at least sandbox creation and teardown.
|
|
44
44
|
const lifecycle = Array.isArray(ledgers.lifecycle) ? ledgers.lifecycle : [];
|
|
45
45
|
if (lifecycle.length === 0) {
|
|
46
46
|
findings.push("substrate lifecycle ledger is empty (expected create -> ready -> exec -> cleanup events)");
|
|
@@ -50,25 +50,25 @@ export async function validateTerminalProductEvidence(runPaths, bundle) {
|
|
|
50
50
|
if (!Array.isArray(ledgers.commandLog)) {
|
|
51
51
|
findings.push("command log ledger is missing or not an array");
|
|
52
52
|
}
|
|
53
|
-
// Interventions ledger: must be
|
|
54
|
-
// no assisted-input path)
|
|
53
|
+
// Interventions ledger: must be present (an array). Empty is valid and expected (stdin disabled,
|
|
54
|
+
// no assisted-input path), but absent fails, so an assisted run can never masquerade as one
|
|
55
55
|
// without an interventions record.
|
|
56
56
|
if (!Array.isArray(ledgers.interventions)) {
|
|
57
57
|
findings.push("interventions ledger is missing (an empty array is required-present, not optional)");
|
|
58
58
|
}
|
|
59
|
-
// Cleanup proof: the sandbox must be killed and proven reclaimed
|
|
59
|
+
// Cleanup proof: the sandbox must be killed and proven reclaimed by exact ID (remaining===0).
|
|
60
60
|
// humanish never calls Sandbox.list to derive this field; a live run that cannot prove teardown
|
|
61
61
|
// fails closed (remaining===1 still-present-unconfirmed, remaining===-1 kill(id) itself
|
|
62
|
-
// failed
|
|
62
|
+
// failed; the server-side kill-on-timeout is the backstop for both).
|
|
63
63
|
const cleanup = isRecord(ledgers.cleanup) ? ledgers.cleanup : undefined;
|
|
64
64
|
if (!cleanup) {
|
|
65
65
|
findings.push("cleanup proof is missing");
|
|
66
66
|
}
|
|
67
67
|
else if (cleanup.killed !== true || cleanup.remaining !== 0) {
|
|
68
|
-
findings.push(`cleanup not proven by id (killed=${String(cleanup.killed)}, remaining=${String(cleanup.remaining)})
|
|
68
|
+
findings.push(`sandbox cleanup is not proven by id (killed=${String(cleanup.killed)}, remaining=${String(cleanup.remaining)}), so the run cannot pass`);
|
|
69
69
|
}
|
|
70
|
-
// The redacted exec-stream + normalized transcript artifacts must be
|
|
71
|
-
// always writes them on the live path, even empty for a no-output blocked run
|
|
70
|
+
// The redacted exec-stream + normalized transcript artifacts must be written (the producer
|
|
71
|
+
// always writes them on the live path, even empty for a no-output blocked run, so absence is a
|
|
72
72
|
// real evidence gap, while emptiness is legitimate and keeps blocked runs verifiable).
|
|
73
73
|
if (!(await readSafeRunArtifactBytes(runPaths, TERMINAL_EVENTS_ARTIFACT))) {
|
|
74
74
|
findings.push(`missing terminal event stream artifact (${TERMINAL_EVENTS_ARTIFACT})`);
|
|
@@ -94,19 +94,19 @@ export async function validateTerminalProductEvidence(runPaths, bundle) {
|
|
|
94
94
|
return findings;
|
|
95
95
|
}
|
|
96
96
|
/**
|
|
97
|
-
* Verifier for the terminal cost ledger and no-spend proof. A
|
|
98
|
-
* carry both (fail closed if absent on a live run). The
|
|
99
|
-
* proof may
|
|
100
|
-
* (
|
|
101
|
-
* spend may not exceed the declared cap (the proof's own maxUsd)
|
|
102
|
-
* The null discipline is enforced here too: a present line's `usd` must be a number
|
|
97
|
+
* Verifier for the terminal cost ledger and no-spend proof. A live terminal-product bundle must
|
|
98
|
+
* carry both (fail closed if absent on a live run). The main check: the no-spend
|
|
99
|
+
* proof may not claim zero on a line the ledger marks `null`
|
|
100
|
+
* (unmeasured): a proof can never claim more than the ledger measured. And the observed known
|
|
101
|
+
* spend may not exceed the declared cap (the proof's own maxUsd): fail-closed, not advisory.
|
|
102
|
+
* The null discipline is enforced here too: a present line's `usd` must be a number or literally
|
|
103
103
|
* null (never undefined/omitted), so "not measured" can never be silently dropped.
|
|
104
104
|
*/
|
|
105
105
|
function validateTerminalCostEvidence(ledgers) {
|
|
106
106
|
const findings = [];
|
|
107
107
|
const cost = isRecord(ledgers.cost) ? ledgers.cost : undefined;
|
|
108
108
|
if (!cost || cost.schema !== "humanish.terminal-cost-ledger.v1") {
|
|
109
|
-
findings.push("missing or malformed cost ledger (humanish.terminal-cost-ledger.v1)
|
|
109
|
+
findings.push("missing or malformed cost ledger (humanish.terminal-cost-ledger.v1): a live terminal-product run must record one");
|
|
110
110
|
return findings;
|
|
111
111
|
}
|
|
112
112
|
const lines = isRecord(cost.lines) ? cost.lines : undefined;
|
|
@@ -114,8 +114,8 @@ function validateTerminalCostEvidence(ledgers) {
|
|
|
114
114
|
findings.push("cost ledger has no lines block");
|
|
115
115
|
return findings;
|
|
116
116
|
}
|
|
117
|
-
// The null discipline: every applicable category line must be
|
|
118
|
-
// literally null. `undefined`/omitted is forbidden
|
|
117
|
+
// The null discipline: every applicable category line must be present with `usd` as a number or
|
|
118
|
+
// literally null. `undefined`/omitted is forbidden because it would silently lose the "not measured"
|
|
119
119
|
// distinction. Track which categories the ledger marks null so the no-spend proof cannot lie about them.
|
|
120
120
|
const nullCategories = new Set();
|
|
121
121
|
for (const category of COST_CATEGORIES) {
|
|
@@ -136,28 +136,28 @@ function validateTerminalCostEvidence(ledgers) {
|
|
|
136
136
|
}
|
|
137
137
|
const proof = isRecord(ledgers.noSpendProof) ? ledgers.noSpendProof : undefined;
|
|
138
138
|
if (!proof || proof.schema !== "humanish.terminal-no-spend-proof.v1") {
|
|
139
|
-
findings.push("missing or malformed no-spend proof (humanish.terminal-no-spend-proof.v1)
|
|
139
|
+
findings.push("missing or malformed no-spend proof (humanish.terminal-no-spend-proof.v1): a live terminal-product run must derive one from its cost ledger");
|
|
140
140
|
return findings;
|
|
141
141
|
}
|
|
142
|
-
//
|
|
142
|
+
// Claim check: the no-spend proof must not claim zero on a line the ledger marks `null`. A
|
|
143
143
|
// knownZeroLines entry that is actually unmeasured in the ledger means the proof claimed more than
|
|
144
|
-
// it measured
|
|
144
|
+
// it measured, so it fails closed.
|
|
145
145
|
const knownZeroLines = Array.isArray(proof.knownZeroLines) ? proof.knownZeroLines : [];
|
|
146
146
|
for (const category of knownZeroLines) {
|
|
147
147
|
if (nullCategories.has(String(category))) {
|
|
148
|
-
findings.push(`no-spend proof claims zero on line "${String(category)}" but the cost ledger marks
|
|
148
|
+
findings.push(`the no-spend proof claims zero on line "${String(category)}", but the cost ledger marks that line unmeasured (null), and a proof may not claim zero for a line it did not measure`);
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
|
-
//
|
|
151
|
+
// Fail-closed cap: observed known spend may not exceed the declared cap (the proof's maxUsd). The
|
|
152
152
|
// ledger's knownTotalUsd is the measured spend; null lines do not count toward it (and the proof
|
|
153
153
|
// reports them as unmeasured). A satisfied proof whose known total exceeds its cap is contradictory.
|
|
154
154
|
const knownTotalUsd = typeof cost.knownTotalUsd === "number" ? cost.knownTotalUsd : Number.NaN;
|
|
155
155
|
const maxUsd = typeof proof.maxUsd === "number" ? proof.maxUsd : null;
|
|
156
156
|
if (maxUsd !== null && Number.isFinite(knownTotalUsd) && knownTotalUsd > maxUsd) {
|
|
157
|
-
findings.push(`
|
|
157
|
+
findings.push(`measured spend ${knownTotalUsd} USD is over the declared cap maxUsd=${maxUsd}, so the run cannot pass verification`);
|
|
158
158
|
}
|
|
159
159
|
// A proof that asserts `satisfied:true` while a known line is non-zero (knownNonZeroLines) is
|
|
160
|
-
// self-contradictory
|
|
160
|
+
// self-contradictory; reject it (the proof's own derived state must be internally consistent).
|
|
161
161
|
const knownNonZeroLines = Array.isArray(proof.knownNonZeroLines) ? proof.knownNonZeroLines : [];
|
|
162
162
|
if (proof.satisfied === true && knownNonZeroLines.length > 0) {
|
|
163
163
|
findings.push(`no-spend proof claims satisfied:true but reports known non-zero spend lines (${knownNonZeroLines.map(String).join(", ")})`);
|
|
@@ -205,7 +205,7 @@ export async function validateCodexAppServerEvidence(runPaths, bundle) {
|
|
|
205
205
|
}
|
|
206
206
|
return findings;
|
|
207
207
|
}
|
|
208
|
-
// Trace item kinds that show the actor
|
|
208
|
+
// Trace item kinds that show the actor did something (drove UI, ran a command, called a tool,
|
|
209
209
|
// changed a file). reasoning/screenshot/plan/notice items are observation, not engagement.
|
|
210
210
|
const ACTION_BEARING_ACTOR_ITEM_KINDS = new Set([
|
|
211
211
|
"ui_action",
|
|
@@ -215,12 +215,12 @@ const ACTION_BEARING_ACTOR_ITEM_KINDS = new Set([
|
|
|
215
215
|
]);
|
|
216
216
|
/**
|
|
217
217
|
* Independent mirror of the producer-side no-engagement guard
|
|
218
|
-
* (routes/computer-use/participant-execution.ts): a
|
|
219
|
-
* carrying zero action-bearing items
|
|
220
|
-
* nor said anything
|
|
218
|
+
* (routes/computer-use/participant-execution.ts): a live actor trace claiming goal_satisfied while
|
|
219
|
+
* carrying zero action-bearing items and zero message items is a hollow run (the actor neither did
|
|
220
|
+
* nor said anything) and must not verify as evidence: evidence verifies fail-closed.
|
|
221
221
|
* Live-vs-dry-run is judged exactly as the producer judges it, from bundle.mode alone;
|
|
222
222
|
* dry-run/contract bundles legitimately carry no actions and stay exempt. Engagement is accepted
|
|
223
|
-
* from
|
|
223
|
+
* from either surface (itemized trace items or the producer's counts), because providers differ in
|
|
224
224
|
* what they itemize; a hollow run reports zero on both. The trace is read defensively: isRunStream
|
|
225
225
|
* does not validate the actor seam, and verify must not throw on a malformed one.
|
|
226
226
|
*/
|
|
@@ -264,7 +264,7 @@ function hasStopWhenObservationEvidence(items, screenshotCount) {
|
|
|
264
264
|
item.screenshotRef.path.length > 0);
|
|
265
265
|
if (!hasScreenshot)
|
|
266
266
|
return false;
|
|
267
|
-
// A matched stopWhen, or a declared dwell window that ended the session
|
|
267
|
+
// A matched stopWhen, or a declared dwell window that ended the session: both are
|
|
268
268
|
// structured, harness-owned completion, with frames behind them.
|
|
269
269
|
return items.some((item) => isRecord(item) &&
|
|
270
270
|
item.kind === "notice" &&
|
|
@@ -13,8 +13,8 @@ export declare function missingLocalEvidenceArtifacts(runPaths: PreparedRunArtif
|
|
|
13
13
|
export declare function streamScreenshotPaths(bundle: RunBundle): Set<string>;
|
|
14
14
|
export declare function invalidRunEvidenceReferences(bundle: RunBundle): string[];
|
|
15
15
|
/**
|
|
16
|
-
* redaction.screenshots: "raw" is the
|
|
17
|
-
* gitignored .humanish), not a verify failure
|
|
16
|
+
* redaction.screenshots: "raw" is the supported local default (full-fidelity frames in
|
|
17
|
+
* gitignored .humanish), not a verify failure, but ok: true must never read as "share-ready",
|
|
18
18
|
* so verify surfaces the posture as a warning in both human and JSON output. Read defensively
|
|
19
19
|
* for the same reason as noEngagementActorFindings.
|
|
20
20
|
*/
|
package/dist/verify/artifacts.js
CHANGED
|
@@ -213,8 +213,8 @@ export function invalidRunEvidenceReferences(bundle) {
|
|
|
213
213
|
return findings.slice(0, MAX_REPORTED_FINDINGS);
|
|
214
214
|
}
|
|
215
215
|
/**
|
|
216
|
-
* redaction.screenshots: "raw" is the
|
|
217
|
-
* gitignored .humanish), not a verify failure
|
|
216
|
+
* redaction.screenshots: "raw" is the supported local default (full-fidelity frames in
|
|
217
|
+
* gitignored .humanish), not a verify failure, but ok: true must never read as "share-ready",
|
|
218
218
|
* so verify surfaces the posture as a warning in both human and JSON output. Read defensively
|
|
219
219
|
* for the same reason as noEngagementActorFindings.
|
|
220
220
|
*/
|
|
@@ -224,7 +224,7 @@ export function rawScreenshotPostureWarnings(bundle, redactedShapeFrames) {
|
|
|
224
224
|
return [];
|
|
225
225
|
}
|
|
226
226
|
return [
|
|
227
|
-
`Screenshots
|
|
227
|
+
`Screenshots on ${rawStreamIds.join(", ")} are unblurred, or do not say whether they were blurred. That is fine for local use, but the bundle is not safe to publish as it is: verify ok does not mean share-ready. Set policies.redactScreenshots: true to blur screenshots in a bundle you plan to share.`,
|
|
228
228
|
];
|
|
229
229
|
}
|
|
230
230
|
/**
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RunBundle } from "../run/bundle.js";
|
|
2
|
+
/**
|
|
3
|
+
* The median prompt of the last three turns over that of turns 2 to 4, from a trace's
|
|
4
|
+
* `tokenUsage.turns`. Turn 1 is left out: it carries the instructions alone. Undefined when fewer
|
|
5
|
+
* than six turns report their input.
|
|
6
|
+
*/
|
|
7
|
+
export declare function contextGrowth(turns: readonly unknown[]): number | undefined;
|
|
8
|
+
/** One warning per live participant whose prompt stayed the same size from turn 2 on. */
|
|
9
|
+
export declare function flatContextWarnings(bundle: RunBundle): string[];
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ACTOR_TRACE_SCHEMA } from "../actors/contract.js";
|
|
2
|
+
import { isRecord } from "../run/type-guards.js";
|
|
3
|
+
/** Fewer turns with usage than this say nothing about whether the prompt grew. */
|
|
4
|
+
const MIN_TURNS = 6;
|
|
5
|
+
/**
|
|
6
|
+
* A participant that remembers sends a longer prompt each turn: every turn adds a screenshot and a
|
|
7
|
+
* reply. Over 113 participant traces from live runs (OpenAI computer-use, the Codex participant and
|
|
8
|
+
* the Claude session), the median prompt of the last three turns was at least 1.21 times that of
|
|
9
|
+
* turns 2 to 4. A participant that carries only its last turn stays flat: about 3,100 tokens from
|
|
10
|
+
* turn 2 to turn 527 in one zero-data-retention run, a ratio near 1.0.
|
|
11
|
+
*/
|
|
12
|
+
const MIN_GROWTH = 1.1;
|
|
13
|
+
/**
|
|
14
|
+
* The whole prompt one turn sent. `input` includes the cached parts, except in Claude session
|
|
15
|
+
* traces written before that was fixed, which recorded the uncached part alone; there the cached
|
|
16
|
+
* parts are larger than `input`, and the three are added.
|
|
17
|
+
*/
|
|
18
|
+
function promptTokens(turn) {
|
|
19
|
+
if (!isRecord(turn) || typeof turn.input !== "number")
|
|
20
|
+
return undefined;
|
|
21
|
+
const cached = typeof turn.cachedInput === "number" ? turn.cachedInput : 0;
|
|
22
|
+
const written = typeof turn.cacheWriteInput === "number" ? turn.cacheWriteInput : 0;
|
|
23
|
+
return cached + written > turn.input ? turn.input + cached + written : turn.input;
|
|
24
|
+
}
|
|
25
|
+
function median(values) {
|
|
26
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
27
|
+
const middle = Math.floor(sorted.length / 2);
|
|
28
|
+
return sorted.length % 2 === 1 ? sorted[middle] : (sorted[middle - 1] + sorted[middle]) / 2;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The median prompt of the last three turns over that of turns 2 to 4, from a trace's
|
|
32
|
+
* `tokenUsage.turns`. Turn 1 is left out: it carries the instructions alone. Undefined when fewer
|
|
33
|
+
* than six turns report their input.
|
|
34
|
+
*/
|
|
35
|
+
export function contextGrowth(turns) {
|
|
36
|
+
const sizes = turns.map(promptTokens);
|
|
37
|
+
if (sizes.length < MIN_TURNS || sizes.some((size) => size === undefined))
|
|
38
|
+
return undefined;
|
|
39
|
+
const later = sizes.slice(1);
|
|
40
|
+
const early = median(later.slice(0, 3));
|
|
41
|
+
return early > 0 ? median(later.slice(-3)) / early : undefined;
|
|
42
|
+
}
|
|
43
|
+
/** One warning per live participant whose prompt stayed the same size from turn 2 on. */
|
|
44
|
+
export function flatContextWarnings(bundle) {
|
|
45
|
+
if (bundle.mode !== "live")
|
|
46
|
+
return [];
|
|
47
|
+
const warnings = [];
|
|
48
|
+
for (const stream of bundle.streams) {
|
|
49
|
+
const trace = stream.actor;
|
|
50
|
+
if (!isRecord(trace) || trace.schema !== ACTOR_TRACE_SCHEMA)
|
|
51
|
+
continue;
|
|
52
|
+
const turns = isRecord(trace.tokenUsage) ? trace.tokenUsage.turns : undefined;
|
|
53
|
+
if (!Array.isArray(turns))
|
|
54
|
+
continue;
|
|
55
|
+
const growth = contextGrowth(turns);
|
|
56
|
+
if (growth === undefined || growth >= MIN_GROWTH)
|
|
57
|
+
continue;
|
|
58
|
+
const near = Math.round(median(turns.slice(1).map((turn) => promptTokens(turn))));
|
|
59
|
+
warnings.push(`${stream.id}: its context did not grow. Its prompt stayed near ${near} tokens from turn 2 to turn ${turns.length}, so it likely answered each turn without the earlier ones.`);
|
|
60
|
+
}
|
|
61
|
+
return warnings;
|
|
62
|
+
}
|
package/dist/verify/costs.d.ts
CHANGED
|
@@ -18,12 +18,12 @@ export declare function contradictsAccountBilling(streams: readonly {
|
|
|
18
18
|
breakdown?: unknown;
|
|
19
19
|
} | undefined): boolean;
|
|
20
20
|
/**
|
|
21
|
-
* Verify the
|
|
22
|
-
* [] (pass) unless a dollar claim lacks its provenance
|
|
23
|
-
* known lines.
|
|
24
|
-
* a null estimate, or a participant without estimatedCost is fine. A
|
|
25
|
-
* ratesAsOf date + source; a
|
|
26
|
-
* null line may never be coerced to 0. A null estimate must be declared
|
|
21
|
+
* Verify the labeling/provenance of any cost figure a bundle claims, and never its magnitude. Returns
|
|
22
|
+
* [] (pass) unless a dollar claim lacks its provenance or a total misreports its
|
|
23
|
+
* known lines. Absence always passes (fail-open on display): a bundle with no cost,
|
|
24
|
+
* a null estimate, or a participant without estimatedCost is fine. A non-null figure must carry its
|
|
25
|
+
* ratesAsOf date + source; a number total must equal round6(sum of only the non-null lines) and a
|
|
26
|
+
* null line may never be coerced to 0. A null estimate must be declared (a reason + null
|
|
27
27
|
* ratesAsOf), mirroring the terminal no-spend proof's null-discipline. Account-billed participants
|
|
28
28
|
* also have their execution profile and provider request receipts checked here.
|
|
29
29
|
*/
|
package/dist/verify/costs.js
CHANGED
|
@@ -22,12 +22,12 @@ export function contradictsAccountBilling(streams, cost) {
|
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
|
-
* Verify the
|
|
26
|
-
* [] (pass) unless a dollar claim lacks its provenance
|
|
27
|
-
* known lines.
|
|
28
|
-
* a null estimate, or a participant without estimatedCost is fine. A
|
|
29
|
-
* ratesAsOf date + source; a
|
|
30
|
-
* null line may never be coerced to 0. A null estimate must be declared
|
|
25
|
+
* Verify the labeling/provenance of any cost figure a bundle claims, and never its magnitude. Returns
|
|
26
|
+
* [] (pass) unless a dollar claim lacks its provenance or a total misreports its
|
|
27
|
+
* known lines. Absence always passes (fail-open on display): a bundle with no cost,
|
|
28
|
+
* a null estimate, or a participant without estimatedCost is fine. A non-null figure must carry its
|
|
29
|
+
* ratesAsOf date + source; a number total must equal round6(sum of only the non-null lines) and a
|
|
30
|
+
* null line may never be coerced to 0. A null estimate must be declared (a reason + null
|
|
31
31
|
* ratesAsOf), mirroring the terminal no-spend proof's null-discipline. Account-billed participants
|
|
32
32
|
* also have their execution profile and provider request receipts checked here.
|
|
33
33
|
*/
|
|
@@ -76,7 +76,7 @@ function costSummaryFindings(cost) {
|
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
else if (anyKnown) {
|
|
79
|
-
// Every-line-null is the only
|
|
79
|
+
// Every-line-null is the only valid null total; a null total beside a known line hides spend.
|
|
80
80
|
findings.push("run cost estimatedTotalUsd is null but a breakdown line carries a known (non-null) cost");
|
|
81
81
|
}
|
|
82
82
|
return findings;
|
|
@@ -117,7 +117,7 @@ function participantEstimateFindings(stream) {
|
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
else {
|
|
120
|
-
// Declared
|
|
120
|
+
// Declared absence: a null estimate must say why and carry null ratesAsOf.
|
|
121
121
|
if (estimate.reason === undefined) {
|
|
122
122
|
findings.push(`participant ${participantLabel} records a null cost estimate without a reason`);
|
|
123
123
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { RunBundle } from "../run/bundle.js";
|
|
2
2
|
import { type SharedWorldEvidence } from "../run/shared-world-evidence.js";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* shape (laneWindows + stateSeries + outcomes,
|
|
4
|
+
* Concurrent branch: N personas drove one getHost-exposed plane at once. Verify fail-closed: the
|
|
5
|
+
* shape (laneWindows + stateSeries + outcomes, no timeline); the required and forbidden
|
|
6
6
|
* attributionLimits; the harness-minted getHost target every actor drove; the synthetic-subject
|
|
7
7
|
* provenance gate; digest-only state series with the allowed-keys tripwire; single-plane
|
|
8
8
|
* provenance; and the concurrency-on-pass gate (genuine overlap and a state delta at or after an
|