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
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CarriedConversation, estimateTokens } from "./openai-context.js";
|
|
2
|
+
import { buildCallOutput, buildContinuationRequest, buildInitialRequest, hintItems, openingMessage, } from "./openai-wire.js";
|
|
2
3
|
/** The closing report's output limit: its own cap, or the declared limit when that is lower. */
|
|
3
4
|
const CLOSING_OUTPUT_LIMIT = 1024;
|
|
4
5
|
function requestContext(settings, state, instructions) {
|
|
5
6
|
return {
|
|
7
|
+
stateless: state.mode === "explicit_context",
|
|
6
8
|
model: settings.model,
|
|
7
9
|
instructions,
|
|
8
10
|
reasoningEffort: settings.reasoningEffort,
|
|
@@ -17,28 +19,43 @@ function requestContext(settings, state, instructions) {
|
|
|
17
19
|
}
|
|
18
20
|
/** No reply has been accepted yet, so the next request opens the conversation. */
|
|
19
21
|
function isFirstTurn(state) {
|
|
20
|
-
return state.
|
|
22
|
+
return state.replies === 0;
|
|
21
23
|
}
|
|
22
24
|
/**
|
|
23
|
-
* The
|
|
24
|
-
*
|
|
25
|
+
* The items the next request adds to the conversation: the opening message with the first
|
|
26
|
+
* screen, or an output for each pending computer_call with the latest screenshot and any hint.
|
|
27
|
+
* Built once per turn, so every attempt at the request and the accepted reply see the same items.
|
|
25
28
|
*/
|
|
26
|
-
export function
|
|
29
|
+
export function turnInputItems(state, req) {
|
|
30
|
+
if (isFirstTurn(state))
|
|
31
|
+
return [openingMessage(req.instructions, req.observation.screenshot)];
|
|
32
|
+
return [
|
|
33
|
+
...state.pendingCallIds.map((id) => buildCallOutput(id, req.observation.screenshot, req.acknowledgedSafetyChecks)),
|
|
34
|
+
...hintItems(req.contextHint),
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The body of the next participant request: the opening request, or a continuation carrying
|
|
39
|
+
* `sent` (turnInputItems). A threaded continuation names the previous response; an
|
|
40
|
+
* explicit-context one carries the conversation ahead of `sent`.
|
|
41
|
+
*/
|
|
42
|
+
export function turnRequestBody(settings, state, req, sent) {
|
|
27
43
|
const ctx = requestContext(settings, state, req.instructions);
|
|
28
44
|
if (isFirstTurn(state))
|
|
29
45
|
return buildInitialRequest(ctx, req.observation.screenshot);
|
|
30
46
|
return buildContinuationRequest({
|
|
31
47
|
ctx,
|
|
32
48
|
previousResponseId: state.lastResponseId,
|
|
33
|
-
callOutputs:
|
|
34
|
-
...(
|
|
35
|
-
|
|
49
|
+
callOutputs: [...sent],
|
|
50
|
+
...(state.mode === "explicit_context"
|
|
51
|
+
? { explicitContextItems: state.conversation.carried() }
|
|
52
|
+
: {}),
|
|
36
53
|
});
|
|
37
54
|
}
|
|
38
55
|
/** The body of the read-only closing report: no tools, a small output limit, a strict schema. */
|
|
39
|
-
export function debriefRequestBody(settings, state, req) {
|
|
56
|
+
export function debriefRequestBody(settings, state, req, sent) {
|
|
40
57
|
return {
|
|
41
|
-
...turnRequestBody(settings, state, req),
|
|
58
|
+
...turnRequestBody(settings, state, req, sent),
|
|
42
59
|
tool_choice: "none",
|
|
43
60
|
max_output_tokens: Math.min(settings.maxOutputTokens ?? CLOSING_OUTPUT_LIMIT, CLOSING_OUTPUT_LIMIT),
|
|
44
61
|
text: {
|
|
@@ -60,15 +77,65 @@ export function debriefRequestBody(settings, state, req) {
|
|
|
60
77
|
};
|
|
61
78
|
}
|
|
62
79
|
/**
|
|
63
|
-
* Move the conversation on to an accepted reply
|
|
64
|
-
* is set aside, so the next request is the same one again
|
|
65
|
-
* run, so no call output is owed for them.
|
|
80
|
+
* Move the conversation on to an accepted reply to a request that added `sent`. A participant
|
|
81
|
+
* reply cut off by the output limit is set aside, so the next request is the same one again
|
|
82
|
+
* (outputLimitRetry); its actions never run, so no call output is owed for them.
|
|
66
83
|
*/
|
|
67
|
-
export function acceptReply(state, parsed, closing) {
|
|
84
|
+
export function acceptReply(state, parsed, closing, sent) {
|
|
68
85
|
if (!closing && parsed.turn.interruption === "output_limit")
|
|
69
86
|
return;
|
|
70
87
|
if (parsed.turn.responseId !== undefined)
|
|
71
88
|
state.lastResponseId = parsed.turn.responseId;
|
|
72
89
|
state.pendingCallIds = parsed.callIds;
|
|
73
|
-
state.
|
|
90
|
+
state.replies += 1;
|
|
91
|
+
state.conversation.accept(state.replies, sent, parsed.outputItems);
|
|
92
|
+
}
|
|
93
|
+
/** The trace's account of how a session carried its conversation (ActorConversation). */
|
|
94
|
+
export class ConversationRecord {
|
|
95
|
+
now;
|
|
96
|
+
explicitReason;
|
|
97
|
+
switchedAt;
|
|
98
|
+
switchedAtRequest;
|
|
99
|
+
summarizedTurns = 0;
|
|
100
|
+
requests = [];
|
|
101
|
+
constructor(configured, now) {
|
|
102
|
+
this.now = now;
|
|
103
|
+
if (configured)
|
|
104
|
+
this.explicitReason = "configured";
|
|
105
|
+
}
|
|
106
|
+
/** The organization rejected server-side state, so the request being sent is explicit_context. */
|
|
107
|
+
switched() {
|
|
108
|
+
this.explicitReason = "zdr_rejection";
|
|
109
|
+
this.switchedAt = new Date(this.now()).toISOString();
|
|
110
|
+
// Counted like requests[], which includes replies set aside at their output limit.
|
|
111
|
+
this.switchedAtRequest = this.requests.length + 1;
|
|
112
|
+
}
|
|
113
|
+
/** A participant request just went out with `sent` after the carried conversation. */
|
|
114
|
+
requested(state, sent) {
|
|
115
|
+
if (state.mode !== "explicit_context") {
|
|
116
|
+
this.requests.push({ mode: "threaded" });
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const carried = state.conversation.size();
|
|
120
|
+
// Only summaries a request carried count; the conversation also trims after the last reply.
|
|
121
|
+
this.summarizedTurns = carried.notedTurns;
|
|
122
|
+
this.requests.push({
|
|
123
|
+
mode: "explicit_context",
|
|
124
|
+
carriedExchanges: carried.exchanges,
|
|
125
|
+
carriedScreenshots: carried.screenshots,
|
|
126
|
+
estimatedInputTokens: carried.estimatedTokens + estimateTokens(sent),
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
snapshot(state) {
|
|
130
|
+
return {
|
|
131
|
+
mode: state.mode === "explicit_context" ? "explicit_context" : "threaded",
|
|
132
|
+
...(this.explicitReason === undefined ? {} : { explicitReason: this.explicitReason }),
|
|
133
|
+
...(this.switchedAt === undefined ? {} : { switchedAt: this.switchedAt }),
|
|
134
|
+
...(this.switchedAtRequest === undefined
|
|
135
|
+
? {}
|
|
136
|
+
: { switchedAtRequest: this.switchedAtRequest }),
|
|
137
|
+
summarizedTurns: this.summarizedTurns,
|
|
138
|
+
requests: this.requests.map((request) => ({ ...request })),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
74
141
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { CuaAction, CuaSafetyCheck, CuaTurn } from "./loop.js";
|
|
2
2
|
import type { ReasoningEffort } from "../reasoning-effort.js";
|
|
3
3
|
export declare function asRecord(value: unknown): Record<string, unknown>;
|
|
4
|
+
export declare function asArray(value: unknown): unknown[];
|
|
4
5
|
export declare function optionalString(value: unknown): string | undefined;
|
|
5
6
|
/**
|
|
6
7
|
* Map an OpenAI computer action object to a provider-neutral CuaAction, or null
|
|
@@ -23,11 +24,16 @@ export interface ParsedOpenAiResponse {
|
|
|
23
24
|
export declare function parseOpenAiResponse(raw: unknown): ParsedOpenAiResponse;
|
|
24
25
|
export type OpenAiReasoningSummary = "auto" | "concise" | "detailed";
|
|
25
26
|
export interface OpenAiCuContext {
|
|
27
|
+
/**
|
|
28
|
+
* The server keeps no conversation (explicit_context): the request asks not to be stored and
|
|
29
|
+
* for its reasoning back in encrypted form, so the next request can carry it.
|
|
30
|
+
*/
|
|
31
|
+
stateless?: boolean;
|
|
26
32
|
model: string;
|
|
27
33
|
instructions: string;
|
|
28
34
|
reasoningEffort: ReasoningEffort;
|
|
29
35
|
maxOutputTokens?: number;
|
|
30
|
-
/** When set, request provider-sanctioned reasoning summaries
|
|
36
|
+
/** When set, request provider-sanctioned reasoning summaries. Absent = do not ask. */
|
|
31
37
|
reasoningSummary?: OpenAiReasoningSummary;
|
|
32
38
|
safetyIdentifier?: string;
|
|
33
39
|
}
|
|
@@ -37,14 +43,18 @@ export interface OpenAiCuContext {
|
|
|
37
43
|
* limit when that is lower.
|
|
38
44
|
*/
|
|
39
45
|
export declare function buildInitialRequest(ctx: OpenAiCuContext, screenshot?: Buffer): Record<string, unknown>;
|
|
46
|
+
/** One input message, read as the words of `sender`: the user, the developer, or the model itself. */
|
|
47
|
+
export declare function inputMessage(sender: "user" | "developer" | "assistant", content: readonly unknown[]): Record<string, unknown>;
|
|
48
|
+
/** The first request's only input item: the instructions and, when there is one, the first screen. */
|
|
49
|
+
export declare function openingMessage(instructions: string, screenshot?: Buffer): Record<string, unknown>;
|
|
40
50
|
/**
|
|
41
51
|
* Build one computer_call_output for a pending call id, carrying the latest
|
|
42
52
|
* screenshot as an inline data URL. Acknowledged safety checks (if any) are
|
|
43
53
|
* echoed back so the model can proceed past a check the harness approved.
|
|
44
54
|
*
|
|
45
55
|
* The screenshot param is `Buffer | undefined` because CuaObservation.screenshot is now
|
|
46
|
-
* optional (a non-vision executor omits it). This provider is a
|
|
47
|
-
* requiresFrame), so a missing frame is a hard error here
|
|
56
|
+
* optional (a non-vision executor omits it). This provider is a vision model (it sets
|
|
57
|
+
* requiresFrame), so a missing frame is a hard error here as defense-in-depth: the loop's
|
|
48
58
|
* per-turn requiresFrame guard already fails closed before this is reached, but throwing keeps
|
|
49
59
|
* the mapper self-validating and isolable.
|
|
50
60
|
*/
|
|
@@ -52,16 +62,18 @@ export declare function buildCallOutput(callId: string, screenshot: Buffer | und
|
|
|
52
62
|
export interface ContinuationRequestArgs {
|
|
53
63
|
ctx: OpenAiCuContext;
|
|
54
64
|
previousResponseId: string | undefined;
|
|
55
|
-
callOutputs:
|
|
65
|
+
callOutputs: readonly unknown[];
|
|
56
66
|
contextHint?: string;
|
|
57
67
|
explicitContextItems?: unknown[];
|
|
58
68
|
}
|
|
69
|
+
/** An optional context hint as input items (none when there is no hint). */
|
|
70
|
+
export declare function hintItems(contextHint: string | undefined): unknown[];
|
|
59
71
|
/**
|
|
60
72
|
* Build a continuation request body. Two modes:
|
|
61
73
|
* - default: thread server-side state via previous_response_id and send only the
|
|
62
74
|
* new call outputs (plus an optional hint).
|
|
63
|
-
* - explicit-context (ZDR): no previous_response_id; the
|
|
64
|
-
*
|
|
65
|
-
* without the server retaining any.
|
|
75
|
+
* - explicit-context (ZDR): no previous_response_id; the carried conversation
|
|
76
|
+
* (openai-context.ts) is sent inline ahead of the new call outputs, so the model
|
|
77
|
+
* has the session without the server retaining any.
|
|
66
78
|
*/
|
|
67
79
|
export declare function buildContinuationRequest(args: ContinuationRequestArgs): Record<string, unknown>;
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
export function asRecord(value) {
|
|
12
12
|
return typeof value === "object" && value !== null ? value : {};
|
|
13
13
|
}
|
|
14
|
-
function asArray(value) {
|
|
14
|
+
export function asArray(value) {
|
|
15
15
|
return Array.isArray(value) ? value : [];
|
|
16
16
|
}
|
|
17
17
|
function asNumber(value) {
|
|
@@ -165,9 +165,9 @@ export function parseOpenAiResponse(raw) {
|
|
|
165
165
|
const callId = optionalString(item.call_id);
|
|
166
166
|
if (callId !== undefined)
|
|
167
167
|
callIds.push(callId);
|
|
168
|
-
// The live Responses API returns the actions as an
|
|
169
|
-
// computer_call can carry several. (An older/alt shape used a singular `item.action
|
|
170
|
-
// supported as a fallback.) Reading only `item.action` silently dropped
|
|
168
|
+
// The live Responses API returns the actions as an array (`item.actions`); a single
|
|
169
|
+
// computer_call can carry several. (An older/alt shape used a singular `item.action`,
|
|
170
|
+
// supported as a fallback.) Reading only `item.action` silently dropped every action,
|
|
171
171
|
// which made the loop see zero actions and stop on a false `goal_satisfied`.
|
|
172
172
|
const rawActions = Array.isArray(item.actions)
|
|
173
173
|
? item.actions
|
|
@@ -209,9 +209,9 @@ export function parseOpenAiResponse(raw) {
|
|
|
209
209
|
// Of the input tokens, how many the provider served from its prompt cache. This loop threads
|
|
210
210
|
// state with previous_response_id and re-sends a growing warm prefix every turn, so most input on
|
|
211
211
|
// a long session is a cache hit billed at a fraction of the full rate. Not reading it made every
|
|
212
|
-
// cost line materially overstate the bill
|
|
212
|
+
// cost line materially overstate the bill.
|
|
213
213
|
const usageCachedInput = optionalNumber(asRecord(usageRecord.input_tokens_details).cached_tokens);
|
|
214
|
-
// GPT-5.6+ bills cache
|
|
214
|
+
// GPT-5.6+ bills cache writes (1.25x input) and reports them here; older models omit the field.
|
|
215
215
|
const usageCacheWriteInput = optionalNumber(asRecord(usageRecord.input_tokens_details).cache_write_tokens);
|
|
216
216
|
const usage = usageInput === undefined && usageOutput === undefined
|
|
217
217
|
? undefined
|
|
@@ -253,12 +253,12 @@ function sharedRequestFields(ctx) {
|
|
|
253
253
|
// instructions, a provider that does not fully retain prior state can drift
|
|
254
254
|
// into asking the operator what to do.
|
|
255
255
|
instructions: ctx.instructions,
|
|
256
|
-
// The Responses API `computer` tool takes no display/environment fields
|
|
256
|
+
// The Responses API `computer` tool takes no display/environment fields; the model infers
|
|
257
257
|
// resolution from the screenshots it is sent. (Sending display_* returns a 400
|
|
258
258
|
// "Unknown parameter tools[0].display_width", confirmed against the live API 2026-06.)
|
|
259
259
|
tools: [{ type: "computer" }],
|
|
260
260
|
truncation: "auto",
|
|
261
|
-
// `summary` asks for the provider-
|
|
261
|
+
// `summary` asks for the provider-sanctioned reasoning summary items; the
|
|
262
262
|
// capture side never scrapes or reconstructs raw chain-of-thought. Parsed by
|
|
263
263
|
// parseOpenAiResponse into turn.reasoning; the loop records them as redacted
|
|
264
264
|
// `kind: "reasoning"` trace items.
|
|
@@ -267,6 +267,7 @@ function sharedRequestFields(ctx) {
|
|
|
267
267
|
...(ctx.reasoningSummary === undefined ? {} : { summary: ctx.reasoningSummary }),
|
|
268
268
|
},
|
|
269
269
|
...(ctx.safetyIdentifier === undefined ? {} : { safety_identifier: ctx.safetyIdentifier }),
|
|
270
|
+
...(ctx.stateless === true ? { store: false, include: ["reasoning.encrypted_content"] } : {}),
|
|
270
271
|
};
|
|
271
272
|
}
|
|
272
273
|
/**
|
|
@@ -284,32 +285,35 @@ export function buildInitialRequest(ctx, screenshot) {
|
|
|
284
285
|
const maxOutputTokens = Math.min(ctx.maxOutputTokens ?? FIRST_TURN_OUTPUT_LIMIT, FIRST_TURN_OUTPUT_LIMIT);
|
|
285
286
|
return {
|
|
286
287
|
...sharedRequestFields({ ...ctx, maxOutputTokens }),
|
|
287
|
-
input: [
|
|
288
|
-
{
|
|
289
|
-
role: "user",
|
|
290
|
-
content: [
|
|
291
|
-
{ type: "input_text", text: ctx.instructions },
|
|
292
|
-
...(screenshot === undefined
|
|
293
|
-
? []
|
|
294
|
-
: [
|
|
295
|
-
{
|
|
296
|
-
type: "input_image",
|
|
297
|
-
image_url: `data:image/png;base64,${screenshot.toString("base64")}`,
|
|
298
|
-
},
|
|
299
|
-
]),
|
|
300
|
-
],
|
|
301
|
-
},
|
|
302
|
-
],
|
|
288
|
+
input: [openingMessage(ctx.instructions, screenshot)],
|
|
303
289
|
};
|
|
304
290
|
}
|
|
291
|
+
/** One input message, read as the words of `sender`: the user, the developer, or the model itself. */
|
|
292
|
+
export function inputMessage(sender, content) {
|
|
293
|
+
return { role: sender, content: [...content] };
|
|
294
|
+
}
|
|
295
|
+
/** The first request's only input item: the instructions and, when there is one, the first screen. */
|
|
296
|
+
export function openingMessage(instructions, screenshot) {
|
|
297
|
+
return inputMessage("user", [
|
|
298
|
+
{ type: "input_text", text: instructions },
|
|
299
|
+
...(screenshot === undefined
|
|
300
|
+
? []
|
|
301
|
+
: [
|
|
302
|
+
{
|
|
303
|
+
type: "input_image",
|
|
304
|
+
image_url: `data:image/png;base64,${screenshot.toString("base64")}`,
|
|
305
|
+
},
|
|
306
|
+
]),
|
|
307
|
+
]);
|
|
308
|
+
}
|
|
305
309
|
/**
|
|
306
310
|
* Build one computer_call_output for a pending call id, carrying the latest
|
|
307
311
|
* screenshot as an inline data URL. Acknowledged safety checks (if any) are
|
|
308
312
|
* echoed back so the model can proceed past a check the harness approved.
|
|
309
313
|
*
|
|
310
314
|
* The screenshot param is `Buffer | undefined` because CuaObservation.screenshot is now
|
|
311
|
-
* optional (a non-vision executor omits it). This provider is a
|
|
312
|
-
* requiresFrame), so a missing frame is a hard error here
|
|
315
|
+
* optional (a non-vision executor omits it). This provider is a vision model (it sets
|
|
316
|
+
* requiresFrame), so a missing frame is a hard error here as defense-in-depth: the loop's
|
|
313
317
|
* per-turn requiresFrame guard already fails closed before this is reached, but throwing keeps
|
|
314
318
|
* the mapper self-validating and isolable.
|
|
315
319
|
*/
|
|
@@ -335,19 +339,17 @@ export function buildCallOutput(callId, screenshot, acknowledged) {
|
|
|
335
339
|
: {}),
|
|
336
340
|
};
|
|
337
341
|
}
|
|
338
|
-
|
|
339
|
-
function hintItems(contextHint) {
|
|
340
|
-
return contextHint
|
|
341
|
-
? [{ role: "user", content: [{ type: "input_text", text: contextHint }] }]
|
|
342
|
-
: [];
|
|
342
|
+
/** An optional context hint as input items (none when there is no hint). */
|
|
343
|
+
export function hintItems(contextHint) {
|
|
344
|
+
return contextHint ? [inputMessage("user", [{ type: "input_text", text: contextHint }])] : [];
|
|
343
345
|
}
|
|
344
346
|
/**
|
|
345
347
|
* Build a continuation request body. Two modes:
|
|
346
348
|
* - default: thread server-side state via previous_response_id and send only the
|
|
347
349
|
* new call outputs (plus an optional hint).
|
|
348
|
-
* - explicit-context (ZDR): no previous_response_id; the
|
|
349
|
-
*
|
|
350
|
-
* without the server retaining any.
|
|
350
|
+
* - explicit-context (ZDR): no previous_response_id; the carried conversation
|
|
351
|
+
* (openai-context.ts) is sent inline ahead of the new call outputs, so the model
|
|
352
|
+
* has the session without the server retaining any.
|
|
351
353
|
*/
|
|
352
354
|
export function buildContinuationRequest(args) {
|
|
353
355
|
const { ctx, previousResponseId, callOutputs, contextHint, explicitContextItems } = args;
|
|
@@ -4,32 +4,32 @@ import type { TaskFunnel } from "../lab/tasks.js";
|
|
|
4
4
|
import { type CuaProviderFailurePhase } from "./computer-use/provider-error.js";
|
|
5
5
|
export declare const ACTOR_TRACE_SCHEMA = "humanish.actor-trace.v1";
|
|
6
6
|
/**
|
|
7
|
-
* How a session ended, from the point of view of the
|
|
7
|
+
* How a session ended, from the point of view of the study rather than the harness.
|
|
8
8
|
*
|
|
9
9
|
* The distinction matters because two of these are participant outcomes and the rest are not. A
|
|
10
10
|
* participant who abandons a task is the single most valuable thing a usability study produces, and
|
|
11
|
-
* recording that as `failed`
|
|
11
|
+
* recording that as `failed` reads as the instrument breaking. See
|
|
12
12
|
* docs/principles/three-roles.md.
|
|
13
13
|
*
|
|
14
14
|
* - `passed` the participant reached the goal
|
|
15
|
-
* - `abandoned` the participant stopped trying. A
|
|
15
|
+
* - `abandoned` the participant stopped trying. A finding, not a malfunction
|
|
16
16
|
* - `incomplete` the session ended (time or budget) before the goal was reached
|
|
17
17
|
* - `blocked` the participant could not proceed: an approval the run could not give, or a
|
|
18
|
-
* blocker they described in their own final words
|
|
18
|
+
* blocker they described in their own final words
|
|
19
19
|
* - `timed_out` the session hit its deadline with no productive activity at all
|
|
20
|
-
* - `failed` the
|
|
20
|
+
* - `failed` the harness failed: a dead sandbox, a provider error, a broken artifact
|
|
21
21
|
*/
|
|
22
22
|
export declare const ACTOR_STATUSES: readonly ["passed", "abandoned", "incomplete", "blocked", "timed_out", "failed"];
|
|
23
23
|
export type ActorStatus = (typeof ACTOR_STATUSES)[number];
|
|
24
24
|
/**
|
|
25
|
-
* What the
|
|
25
|
+
* What the participant said happened, in a field rather than a paragraph. Providers whose
|
|
26
26
|
* reply is schema-constrained (the local-agent routes) fill it on their final turn; a free-text
|
|
27
|
-
* provider leaves it absent and the
|
|
27
|
+
* provider leaves it absent and the route falls back to reading the closing message. `reached`:
|
|
28
28
|
* the task is finished. `blocked`: something in the app stopped the participant. `not_reached`:
|
|
29
29
|
* the participant stopped for another reason (gave up, ran out of ideas).
|
|
30
30
|
*/
|
|
31
31
|
export type ParticipantDeclaredOutcome = "reached" | "not_reached" | "blocked";
|
|
32
|
-
/** Statuses that describe what happened to a
|
|
32
|
+
/** Statuses that describe what happened to a participant rather than a harness malfunction. Verify
|
|
33
33
|
* treats these as study results, so a run whose evidence is sound is not called untrustworthy just
|
|
34
34
|
* because a persona gave up. */
|
|
35
35
|
export declare const PARTICIPANT_OUTCOME_STATUSES: readonly ActorStatus[];
|
|
@@ -62,11 +62,11 @@ export interface ActorTraceItem {
|
|
|
62
62
|
redaction: "blurred" | "ocr_scrubbed" | "none";
|
|
63
63
|
};
|
|
64
64
|
text?: string;
|
|
65
|
-
/** When the item was recorded (ISO-8601), from the loop's injected clock. Additive
|
|
66
|
-
*
|
|
65
|
+
/** When the item was recorded (ISO-8601), from the loop's injected clock. Additive:
|
|
66
|
+
* items from older bundles and non-stamping producers lack it, so every
|
|
67
67
|
* consumer must treat absence as "timing unknown", never as t=0. */
|
|
68
68
|
at?: string;
|
|
69
|
-
/** Structured pointer coordinates for click-like `ui_action` items
|
|
69
|
+
/** Structured pointer coordinates for click-like `ui_action` items: the
|
|
70
70
|
* recorded fact the Observer's pins previously re-parsed out of the title text. */
|
|
71
71
|
coord?: {
|
|
72
72
|
x: number;
|
|
@@ -83,13 +83,13 @@ export interface ActorCapabilities {
|
|
|
83
83
|
inProcessTools: boolean;
|
|
84
84
|
license: "open" | "source-available" | "proprietary";
|
|
85
85
|
/**
|
|
86
|
-
*
|
|
87
|
-
* "keys live where the keyed process runs
|
|
88
|
-
* enforces,
|
|
86
|
+
* Where this actor's runtime key lives, per the placement rule (invariants-and-defaults.md):
|
|
87
|
+
* "keys live where the keyed process runs, and nowhere else." Registry metadata the engine
|
|
88
|
+
* enforces, not a code convention.
|
|
89
89
|
* - "external" (the implicit default for every existing actor): the keyed process (e.g. a
|
|
90
|
-
* computer-use provider loop) runs
|
|
90
|
+
* computer-use provider loop) runs outside any sandbox, so its key never enters one.
|
|
91
91
|
* - "in-sandbox-command-scoped": the keyed process is an agent-harness-under-test that runs
|
|
92
|
-
*
|
|
92
|
+
* inside the sandbox; its runtime key is injected only into the per-command `envs` of that
|
|
93
93
|
* invocation (never `Sandbox.create({envs})`, which is sandbox-global), the key is presumed
|
|
94
94
|
* exfiltratable, and the blast radius is bounded by key scoping + a spend budget.
|
|
95
95
|
* Absent === "external". On the shipped terminal-product live route, the engine enforces this
|
|
@@ -115,18 +115,18 @@ export interface ActorPersonaRef {
|
|
|
115
115
|
export interface ActorTokenUsage {
|
|
116
116
|
input?: number;
|
|
117
117
|
output?: number;
|
|
118
|
-
/** Of `input`, how many tokens were served from the provider's prompt cache. Optional
|
|
119
|
-
*
|
|
120
|
-
* reporting 0, because 0 and "unknown" price very differently
|
|
118
|
+
/** Of `input`, how many tokens were served from the provider's prompt cache. Optional. A
|
|
119
|
+
* provider that does not report it leaves this undefined rather than
|
|
120
|
+
* reporting 0, because 0 and "unknown" price very differently. */
|
|
121
121
|
cachedInput?: number;
|
|
122
|
-
/** Of `input`, how many tokens were newly
|
|
122
|
+
/** Of `input`, how many tokens were newly written to the provider's prompt cache
|
|
123
123
|
* (OpenAI 5.6+ bills these at a surcharge and reports `cache_write_tokens`). Same
|
|
124
|
-
*
|
|
124
|
+
* absent-when-unreported rule as `cachedInput`. */
|
|
125
125
|
cacheWriteInput?: number;
|
|
126
126
|
/** Per model-inference request usage, in request order. One provider interaction can contain
|
|
127
127
|
* several inferences around native tool calls. A provider that re-prices whole requests past
|
|
128
128
|
* an input-size threshold can only be priced exactly from these sizes; totals cannot say which
|
|
129
|
-
* requests crossed. Additive and
|
|
129
|
+
* requests crossed. Additive, and absent on producers that do not record it. */
|
|
130
130
|
turns?: Array<{
|
|
131
131
|
input?: number;
|
|
132
132
|
cachedInput?: number;
|
|
@@ -137,12 +137,13 @@ export interface ActorTokenUsage {
|
|
|
137
137
|
costUsd?: number;
|
|
138
138
|
}
|
|
139
139
|
/**
|
|
140
|
-
* Codex CLI
|
|
141
|
-
*
|
|
140
|
+
* The oldest Codex CLI release a recorded account profile may name. Readers accept every stable
|
|
141
|
+
* `MAJOR.MINOR.PATCH` release from it on, so a saved bundle stays readable whichever release
|
|
142
|
+
* recorded it; launch admission (codex/codex-admission.ts) alone decides what runs.
|
|
142
143
|
*/
|
|
143
|
-
export declare const
|
|
144
|
-
|
|
145
|
-
export declare function isRecordedCodexCliVersion(value: unknown): value is
|
|
144
|
+
export declare const RECORDED_CODEX_CLI_FLOOR = "0.154.0";
|
|
145
|
+
/** A stable release at or above the floor. Parts compare as digit strings, exact at any length. */
|
|
146
|
+
export declare function isRecordedCodexCliVersion(value: unknown): value is string;
|
|
146
147
|
/** Requested execution profile; per-request verification is recorded separately. */
|
|
147
148
|
export interface ActorExecutionProfile {
|
|
148
149
|
schema: "humanish.actor-execution-profile.v1";
|
|
@@ -151,7 +152,8 @@ export interface ActorExecutionProfile {
|
|
|
151
152
|
billing: "account-unknown";
|
|
152
153
|
requestedModel: string;
|
|
153
154
|
reasoningEffort: import("./reasoning-effort.js").ReasoningEffort;
|
|
154
|
-
|
|
155
|
+
/** A stable release at or above RECORDED_CODEX_CLI_FLOOR. */
|
|
156
|
+
cliVersion: string;
|
|
155
157
|
toolPolicy: "restricted-codex-v1" | "codex-ui-tools-v1";
|
|
156
158
|
participantSchema: "humanish.restricted-participant-turn.v1" | "humanish.codex-ui-tool.v1";
|
|
157
159
|
memoryPolicy: "recent-eight-16k-v1" | "continuing-thread-v1";
|
|
@@ -193,11 +195,44 @@ export interface ActorRuntimeProvenance {
|
|
|
193
195
|
observedVersion?: string;
|
|
194
196
|
versionStatus: "unobserved" | "verified" | "failed";
|
|
195
197
|
requestedModel?: string;
|
|
196
|
-
|
|
198
|
+
/** Where requestedModel came from. Bundles written before humanish always passed a model record
|
|
199
|
+
* `runtime_default_unobserved`, with no requestedModel. */
|
|
200
|
+
modelStatus: "declared" | "humanish_default" | "runtime_default_unobserved";
|
|
197
201
|
requestedReasoningEffort?: string;
|
|
198
202
|
/** Codex turn.completed aggregates requests; it cannot establish per-request pricing tiers. */
|
|
199
203
|
usageGranularity: "runtime_turn";
|
|
200
204
|
}
|
|
205
|
+
/**
|
|
206
|
+
* How a provider carried the conversation between its requests. `threaded`: the provider's server
|
|
207
|
+
* kept it (OpenAI previous_response_id). `explicit_context`: the server kept none (a
|
|
208
|
+
* zero-data-retention org, or zeroDataRetention set), so each request carried it from the client
|
|
209
|
+
* within a token budget, with the oldest turns summarized as text once it passed the budget.
|
|
210
|
+
*/
|
|
211
|
+
export interface ActorConversation {
|
|
212
|
+
/** The mode of the session's last request. */
|
|
213
|
+
mode: "threaded" | "explicit_context";
|
|
214
|
+
/** Why the session used explicit_context: configured, or the org rejected server-side state. */
|
|
215
|
+
explicitReason?: "configured" | "zdr_rejection";
|
|
216
|
+
/** When a threaded session switched to explicit_context (ISO-8601), and on which request. */
|
|
217
|
+
switchedAt?: string;
|
|
218
|
+
switchedAtRequest?: number;
|
|
219
|
+
/**
|
|
220
|
+
* Earlier turns the latest explicit_context request no longer carried whole, to stay within the
|
|
221
|
+
* budget: written as lines of a text note, or only counted once the note reached its cap. Their
|
|
222
|
+
* screenshots were dropped. 0 when no explicit_context request summarized any.
|
|
223
|
+
*/
|
|
224
|
+
summarizedTurns: number;
|
|
225
|
+
/**
|
|
226
|
+
* Per participant request, in order: its mode and, in explicit_context, what it carried and its
|
|
227
|
+
* estimated input. `tokenUsage.turns` has each request's billed input.
|
|
228
|
+
*/
|
|
229
|
+
requests: Array<{
|
|
230
|
+
mode: "threaded" | "explicit_context";
|
|
231
|
+
carriedExchanges?: number;
|
|
232
|
+
carriedScreenshots?: number;
|
|
233
|
+
estimatedInputTokens?: number;
|
|
234
|
+
}>;
|
|
235
|
+
}
|
|
201
236
|
export interface ActorTrace {
|
|
202
237
|
schema: typeof ACTOR_TRACE_SCHEMA;
|
|
203
238
|
provider: string;
|
|
@@ -205,6 +240,8 @@ export interface ActorTrace {
|
|
|
205
240
|
executionProfile?: ActorExecutionProfile;
|
|
206
241
|
providerRequests?: ActorProviderRequest[];
|
|
207
242
|
historyTurnsOmitted?: number;
|
|
243
|
+
/** How the provider carried the conversation; present for the OpenAI computer-use provider. */
|
|
244
|
+
conversation?: ActorConversation;
|
|
208
245
|
runtime?: ActorRuntimeProvenance;
|
|
209
246
|
protocol: ActorProtocol;
|
|
210
247
|
lane: ActorRunKind;
|
|
@@ -229,15 +266,15 @@ export interface ActorTrace {
|
|
|
229
266
|
model?: string;
|
|
230
267
|
};
|
|
231
268
|
/**
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
* carried. Present on
|
|
269
|
+
* Additive + optional record of how the model was asked to run (humanish.model-settings.v1).
|
|
270
|
+
* `ids.model` says which model; this says the reasoning effort the request actually
|
|
271
|
+
* carried. Present on traces whose provider declares settings; absent everywhere else and on
|
|
235
272
|
* every pre-existing bundle, and its absence is tolerated by verify.
|
|
236
273
|
*
|
|
237
274
|
* It exists because effort was a silent constant: unreachable from a lab, so every run took the
|
|
238
|
-
* provider default. Effort is part of
|
|
275
|
+
* provider default. Effort is part of who the participant was, not of how the instrument was
|
|
239
276
|
* tuned (docs/principles/actor-fidelity.md), so a trace that does not carry it is a result with
|
|
240
|
-
* half its sample description missing
|
|
277
|
+
* half its sample description missing, and two such traces cannot be compared.
|
|
241
278
|
*/
|
|
242
279
|
modelSettings?: {
|
|
243
280
|
reasoningEffort: string;
|
|
@@ -245,29 +282,29 @@ export interface ActorTrace {
|
|
|
245
282
|
};
|
|
246
283
|
counts: Record<string, number>;
|
|
247
284
|
/**
|
|
248
|
-
*
|
|
249
|
-
* this actor took
|
|
250
|
-
* browser-internal, observation
|
|
251
|
-
* Present on computer-use
|
|
285
|
+
* Additive + optional affordance record (humanish.affordance-use.v1): which kind of route
|
|
286
|
+
* this actor took (pointer, keyboard, url-navigation, script-execution, devtools,
|
|
287
|
+
* browser-internal, observation), as per-class counts over the run's dispatched actions.
|
|
288
|
+
* Present on computer-use traces that dispatched at least one action; absent elsewhere and on
|
|
252
289
|
* every pre-existing bundle (its absence is tolerated by verify). The harness records the class
|
|
253
|
-
* and states
|
|
290
|
+
* and states no verdict: whether a class is faithful depends on the population the study
|
|
254
291
|
* declares, which is product semantics and belongs to the adopter's scorer. See
|
|
255
292
|
* docs/principles/actor-fidelity.md.
|
|
256
293
|
*/
|
|
257
294
|
affordanceUse?: AffordanceUse;
|
|
258
295
|
/**
|
|
259
|
-
*
|
|
296
|
+
* Additive + optional task funnel (humanish.task-funnel.v1): how far this participant got
|
|
260
297
|
* through the lab's declared protocol, corroborated per task by observations rather than by the
|
|
261
298
|
* actor's own narration. Present only when the lab declared `tasks` and the session ran; absent
|
|
262
|
-
* on every pre-existing bundle and on dry-run contract bundles (
|
|
299
|
+
* on every pre-existing bundle and on dry-run contract bundles (a funnel that
|
|
263
300
|
* was never measured is not an empty funnel). Its absence is tolerated by verify.
|
|
264
301
|
*/
|
|
265
302
|
taskFunnel?: TaskFunnel;
|
|
266
303
|
/**
|
|
267
|
-
*
|
|
304
|
+
* Additive + optional: the outcome the participant declared on its final turn, when its
|
|
268
305
|
* provider's reply carries the field. Absent on free-text providers and on every older bundle.
|
|
269
|
-
* The
|
|
270
|
-
*
|
|
306
|
+
* The route reads this before it reads the closing paragraph; three regex patches in one month
|
|
307
|
+
* each fixed a false refusal and each left the next shape unhandled.
|
|
271
308
|
*/
|
|
272
309
|
declaredOutcome?: ParticipantDeclaredOutcome;
|
|
273
310
|
/** Closing report after a harness-owned stop. Does not change task outcomes or permit actions. */
|
|
@@ -287,13 +324,13 @@ export interface ActorTrace {
|
|
|
287
324
|
* Known tokenUsage remains usable as a partial total. Absence is not proof of completeness. */
|
|
288
325
|
interactionUsageIncomplete?: true;
|
|
289
326
|
/**
|
|
290
|
-
*
|
|
291
|
-
* Distinct from `tokenUsage.costUsd`, which is
|
|
327
|
+
* Additive + optional token-derived cost estimate for this trace (humanish.actor-estimated-cost.v1).
|
|
328
|
+
* Distinct from `tokenUsage.costUsd`, which is reserved for a real provider-returned charge: a
|
|
292
329
|
* bare `costUsd` always means "the provider billed this", while `estimatedCost.estimatedCostUsd`
|
|
293
|
-
* is a rate-table multiply named
|
|
294
|
-
* app-server and scripted
|
|
330
|
+
* is a rate-table multiply named as an estimate, so the claim matches the mechanism. Absent on the Codex
|
|
331
|
+
* app-server and scripted traces and on every pre-existing bundle; the terminal trace records a
|
|
295
332
|
* null estimate. Its absence is tolerated by verify (fail-open on display). A `null`
|
|
296
|
-
* estimatedCostUsd is
|
|
333
|
+
* estimatedCostUsd is declared absent (unknown rate / no usage), never 0.
|
|
297
334
|
*/
|
|
298
335
|
estimatedCost?: ActorEstimatedCost;
|
|
299
336
|
capabilities: ActorCapabilities;
|