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,6 +1,5 @@
|
|
|
1
1
|
import { ACTOR_TRACE_SCHEMA, TERMINAL_AGENT_CAPABILITIES } from "../../actors/contract.js";
|
|
2
2
|
import { redactedTail } from "../../evidence/redaction.js";
|
|
3
|
-
import { normalizeLocalActorTranscript } from "../../run/terminal-contract.js";
|
|
4
3
|
import { TAIL_CHARS } from "./types.js";
|
|
5
4
|
/**
|
|
6
5
|
* Per-chunk sanitization cannot recognize a value split across deliveries. Redact those complete
|
|
@@ -57,9 +56,9 @@ export function tailOf(text) {
|
|
|
57
56
|
return redactedTail(text, TAIL_CHARS);
|
|
58
57
|
}
|
|
59
58
|
/**
|
|
60
|
-
* Project the live terminal session into the provider-neutral humanish.actor-trace.v1 (lane
|
|
61
|
-
* "terminal", protocol "terminal-exec"). counts.actions/messages drive the no-engagement
|
|
62
|
-
* guard (a real run bumps them; a no-op is caught). No screenshots on this
|
|
59
|
+
* Project the live terminal session into the provider-neutral humanish.actor-trace.v1 (`lane`
|
|
60
|
+
* "terminal", protocol "terminal-exec"). counts.actions/messages drive the no-engagement
|
|
61
|
+
* guard (a real run bumps them; a no-op is caught). No screenshots on this route.
|
|
63
62
|
*/
|
|
64
63
|
export function buildTerminalActorTrace(args) {
|
|
65
64
|
const items = [
|
|
@@ -74,19 +73,7 @@ export function buildTerminalActorTrace(args) {
|
|
|
74
73
|
outputTail: args.transcriptTail,
|
|
75
74
|
},
|
|
76
75
|
})),
|
|
77
|
-
|
|
78
|
-
// narrated SOMETHING — the engagement signal the no-engagement guard reads.
|
|
79
|
-
...(args.terminalEvents.length > 0
|
|
80
|
-
? [
|
|
81
|
-
{
|
|
82
|
-
id: "message-001",
|
|
83
|
-
kind: "message",
|
|
84
|
-
lifecycle: "completed",
|
|
85
|
-
title: "agent terminal output",
|
|
86
|
-
text: args.transcriptTail,
|
|
87
|
-
},
|
|
88
|
-
]
|
|
89
|
-
: []),
|
|
76
|
+
...args.participant.items,
|
|
90
77
|
];
|
|
91
78
|
return {
|
|
92
79
|
schema: ACTOR_TRACE_SCHEMA,
|
|
@@ -101,7 +88,7 @@ export function buildTerminalActorTrace(args) {
|
|
|
101
88
|
redaction: {
|
|
102
89
|
status: "passed",
|
|
103
90
|
screenshots: "n/a",
|
|
104
|
-
notes: "Terminal
|
|
91
|
+
notes: "Terminal output captured through commands.run onStdout and onStderr; known values are scrubbed and shape patterns redacted before anything is stored. This route takes no screenshots.",
|
|
105
92
|
},
|
|
106
93
|
startedAt: args.createdAt,
|
|
107
94
|
completedAt: args.completedAt,
|
|
@@ -113,17 +100,13 @@ export function buildTerminalActorTrace(args) {
|
|
|
113
100
|
...(args.tokenUsage ? { tokenUsage: args.tokenUsage } : {}),
|
|
114
101
|
counts: {
|
|
115
102
|
commands: args.commandLog.length,
|
|
116
|
-
// Unlike the
|
|
117
|
-
//
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
.map((event) => event.chunk)
|
|
122
|
-
.join(""))),
|
|
123
|
-
// actions == executed commands; messages == 1 when the agent produced any output. The
|
|
124
|
-
// no-engagement guard (verify/actor.ts) reads these: a real run bumps them, a no-op is caught.
|
|
103
|
+
// Unlike the actions count, this establishes actual runtime item activity. Stderr and
|
|
104
|
+
// bootstrap commands never count.
|
|
105
|
+
runtimeParticipantItems: args.participant.participantItems,
|
|
106
|
+
// actions == executed commands, so the launcher command alone keeps the no-engagement guard
|
|
107
|
+
// (verify/actor.ts) satisfied; messages == the agent_message items in the stream.
|
|
125
108
|
actions: args.commandLog.length,
|
|
126
|
-
messages: args.
|
|
109
|
+
messages: args.participant.messages,
|
|
127
110
|
terminalEvents: args.terminalEvents.length,
|
|
128
111
|
},
|
|
129
112
|
items,
|
|
@@ -132,41 +115,3 @@ export function buildTerminalActorTrace(args) {
|
|
|
132
115
|
: TERMINAL_AGENT_CAPABILITIES,
|
|
133
116
|
};
|
|
134
117
|
}
|
|
135
|
-
const itemEvents = new Set(["item.started", "item.updated", "item.completed"]);
|
|
136
|
-
const nonempty = (value) => typeof value === "string" && value.trim().length > 0;
|
|
137
|
-
const object = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
138
|
-
/** Count distinct participant items in the retained Codex JSON stdout stream.
|
|
139
|
-
* The caller supplies stdout only, after transport reconciliation and redaction.
|
|
140
|
-
* Lifecycle, usage, launcher diagnostics, and nested command output are not activity.
|
|
141
|
-
* Zero means no recognized item was retained, not that the participant succeeded.
|
|
142
|
-
*/
|
|
143
|
-
export function countTerminalParticipantItems(stdout) {
|
|
144
|
-
const ids = new Set();
|
|
145
|
-
for (const line of stdout.split("\n")) {
|
|
146
|
-
let event;
|
|
147
|
-
try {
|
|
148
|
-
event = JSON.parse(line);
|
|
149
|
-
}
|
|
150
|
-
catch {
|
|
151
|
-
continue;
|
|
152
|
-
}
|
|
153
|
-
if (!object(event) ||
|
|
154
|
-
typeof event.type !== "string" ||
|
|
155
|
-
!itemEvents.has(event.type) ||
|
|
156
|
-
!object(event.item))
|
|
157
|
-
continue;
|
|
158
|
-
const item = event.item;
|
|
159
|
-
if (!nonempty(item.id))
|
|
160
|
-
continue;
|
|
161
|
-
const active = ((item.type === "agent_message" || item.type === "reasoning") && nonempty(item.text)) ||
|
|
162
|
-
(item.type === "command_execution" && nonempty(item.command)) ||
|
|
163
|
-
(item.type === "web_search" &&
|
|
164
|
-
(nonempty(item.query) || (object(item.action) && nonempty(item.action.type)))) ||
|
|
165
|
-
(item.type === "file_change" &&
|
|
166
|
-
Array.isArray(item.changes) &&
|
|
167
|
-
item.changes.some((change) => object(change) && nonempty(change.path) && nonempty(change.kind)));
|
|
168
|
-
if (active)
|
|
169
|
-
ids.add(item.id);
|
|
170
|
-
}
|
|
171
|
-
return ids.size;
|
|
172
|
-
}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type { LabEvent } from "../../lab/run-lab-events.js";
|
|
2
|
+
import { type AutomaticAnalysisResult } from "../../analysis/automatic-completion.js";
|
|
2
3
|
import type { ActorCompletionReason, ActorRuntimeProvenance, ActorStatus, ActorTrace } from "../../actors/contract.js";
|
|
3
|
-
import { type RunLabProvenance } from "../../run/status.js";
|
|
4
4
|
import type { CostCategory } from "../../run/terminal-contract.js";
|
|
5
5
|
import type { RunScope } from "../../run/run.js";
|
|
6
6
|
import type { buildRuntimeAuth } from "./credentials.js";
|
|
7
7
|
import type { TerminalPlan } from "../../lab/plan-types.js";
|
|
8
|
+
import type { LabDeps } from "../../lab/lab-deps.js";
|
|
8
9
|
import type { LabConfig } from "../../lab/types.js";
|
|
9
|
-
import {
|
|
10
|
-
import { renderObserver, type ObserverResult } from "../../observer/render.js";
|
|
10
|
+
import type { ObserverResult } from "../../observer/render.js";
|
|
11
11
|
import { type RunAdapterScore, type RunBundle, type RunFeedbackCandidate, type RunScorerProvenance } from "../../run/bundle.js";
|
|
12
|
-
|
|
12
|
+
import { type StudyResultIdentity } from "../../run/study-result.js";
|
|
13
|
+
/** Provider-neutral metadata constant: the route's non-secret tag (mirrors CUA_ACTOR_LAB_PROVIDER_METADATA). */
|
|
13
14
|
export declare const TERMINAL_PRODUCT_LAB_PROVIDER_METADATA: {
|
|
14
15
|
readonly mode: "terminal-product-lab";
|
|
15
16
|
readonly tool: "humanish";
|
|
@@ -22,22 +23,25 @@ export declare const UPLOAD_MAX_BYTES: number;
|
|
|
22
23
|
/**
|
|
23
24
|
* Server-side reclamation buffer past the codex command's own wall-clock (caps.maxMinutes) kill.
|
|
24
25
|
* Shorter than the desktop routes' SANDBOX_TIMEOUT_BUFFER_MS (src/substrates/e2b/lifetime.ts):
|
|
25
|
-
* when
|
|
26
|
+
* when this buffer was set, the terminal sandbox ran nothing but the codex command, and after its kill only
|
|
26
27
|
* teardown remained.
|
|
27
28
|
*/
|
|
28
29
|
export declare const TERMINAL_SANDBOX_TIMEOUT_BUFFER_MS: number;
|
|
29
30
|
export declare const DEFAULT_REQUEST_TIMEOUT_MS = 60000;
|
|
30
31
|
export declare const PRODUCT_SETUP_TIMEOUT_MS = 300000;
|
|
31
32
|
export declare const TAIL_CHARS = 2000;
|
|
33
|
+
export declare const MESSAGE_CHARS = 8000;
|
|
34
|
+
export declare const TEXT_ITEMS_MAX = 200;
|
|
35
|
+
export declare const TEXT_ITEMS_BYTES: number;
|
|
36
|
+
export declare const PENDING_LINE_CHARS: number;
|
|
32
37
|
export declare const MAX_TRANSCRIPT_BYTES: number;
|
|
33
|
-
export declare const TERMINAL_PRODUCT_LAB_SCHEMA = "humanish.terminal-lab-result.v1";
|
|
34
38
|
/**
|
|
35
|
-
* The read-only evidence a thin adapter's scorer/feedback hook sees (the
|
|
36
|
-
*
|
|
39
|
+
* The read-only evidence a thin adapter's scorer/feedback hook sees (the adapter extension seam).
|
|
40
|
+
* It is the fully assembled, redacted, verifiable evidence: the live run
|
|
37
41
|
* bundle, the provider-neutral actor trace, and the persisted ledgers (substrate/command/
|
|
38
|
-
* interventions/cleanup/cost/no-spend). Every member is an
|
|
39
|
-
* types against `import("humanish")` alone
|
|
40
|
-
* to score the product attempt and derive feedback; it cannot mutate core's evidence (the
|
|
42
|
+
* interventions/cleanup/cost/no-spend). Every member is an exported public type, so a thin adapter
|
|
43
|
+
* types against `import("humanish")` alone and never needs a deep `src/` import. The adapter reads this
|
|
44
|
+
* to score the product attempt and derive feedback; it cannot mutate core's evidence (the route
|
|
41
45
|
* attaches only the namespaced `RunAdapterScore` it returns + the feedback candidates it derives).
|
|
42
46
|
*/
|
|
43
47
|
export interface TerminalProductScoringContext {
|
|
@@ -48,11 +52,11 @@ export interface TerminalProductScoringContext {
|
|
|
48
52
|
/** The persisted terminal-product ledgers (lifecycle/command/interventions/cleanup/cost/no-spend). */
|
|
49
53
|
ledgers: TerminalLedgers;
|
|
50
54
|
/**
|
|
51
|
-
* The
|
|
52
|
-
* values) then redacted (shape patterns)
|
|
55
|
+
* The full normalized transcript of the in-sandbox agent session, scrubbed (literal known
|
|
56
|
+
* values) then redacted (shape patterns) at the source, capped at MAX_TRANSCRIPT_BYTES, and
|
|
53
57
|
* byte-identical to the persisted terminal-transcript.txt artifact. The trace's transcriptTail
|
|
54
58
|
* is a ~2KB projection of this; a scorer needs the whole session so a rubric can find
|
|
55
|
-
* command-tier evidence anywhere in it
|
|
59
|
+
* command-tier evidence anywhere in it.
|
|
56
60
|
*/
|
|
57
61
|
transcript: string;
|
|
58
62
|
/** The studied product name (public-safe). */
|
|
@@ -63,81 +67,72 @@ export interface TerminalProductScoringContext {
|
|
|
63
67
|
runId: string;
|
|
64
68
|
}
|
|
65
69
|
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
* them (it loads the real module and reads the real environment).
|
|
70
|
+
* Known spend lines for the terminal cost ledger. Core has no product, media or payment spend
|
|
71
|
+
* signal, so it fills only the provider line from trace tokenUsage when present. A test injects
|
|
72
|
+
* known lines through `LabDeps.costProbe`; absent signals keep the null-discipline default.
|
|
70
73
|
*/
|
|
71
|
-
export
|
|
72
|
-
|
|
73
|
-
|
|
74
|
+
export type TerminalCostProbe = (context: {
|
|
75
|
+
tokenCostUsd?: number;
|
|
76
|
+
}) => Partial<Record<"product" | "media" | "payment" | "provider", CostLine>> | undefined;
|
|
77
|
+
/** The scorer functions a terminal run calls: `RunLabOptions.scorer` without `deriveArtifacts`. */
|
|
78
|
+
export interface TerminalScorer {
|
|
74
79
|
/**
|
|
75
|
-
* The
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
/** Injected clock for deterministic timestamps + wall-clock arithmetic (tests only). */
|
|
83
|
-
now?: () => number;
|
|
84
|
-
/**
|
|
85
|
-
* Optional cost-ledger seam. Core has no product/media/payment spend signal, so it populates only
|
|
86
|
-
* the provider line from trace tokenUsage when present. Tests and adapters can inject KNOWN spend
|
|
87
|
-
* lines; absent signals retain the null-discipline default.
|
|
88
|
-
*/
|
|
89
|
-
costProbe?: (context: {
|
|
90
|
-
tokenCostUsd?: number;
|
|
91
|
-
}) => Partial<Record<"product" | "media" | "payment" | "provider", CostLine>> | undefined;
|
|
92
|
-
/**
|
|
93
|
-
* THE LAYER-6 EXTENSION SEAM (issue #154 acceptance #8: "product-adapter hooks WITHOUT forking
|
|
94
|
-
* core"). A thin in-repo/out-of-tree adapter registers a product scorer here. The lane calls it
|
|
95
|
-
* (when provided) over the fully-assembled evidence and attaches the returned, ADAPTER-NAMESPACED
|
|
96
|
-
* `RunAdapterScore` to `bundle.adapterScore` WITHOUT core knowing any product noun (the score is
|
|
97
|
-
* namespaced + its component breakdown rides in `data`). When NO scorer is given, the default
|
|
98
|
-
* mission-based verdict (`review`) is unchanged. This is the SEAM the adopter's scorecard plugs
|
|
99
|
-
* into — NOT a built-in product scorer (that lives in the adopter's repo).
|
|
80
|
+
* The adapter extension seam: product-adapter hooks without forking
|
|
81
|
+
* core. A thin in-repo/out-of-tree adapter registers a product scorer here. The route calls it
|
|
82
|
+
* (when provided) over the fully-assembled evidence and attaches the returned, adapter-namespaced
|
|
83
|
+
* `RunAdapterScore` to `bundle.adapterScore` without core knowing any product noun (the score is
|
|
84
|
+
* namespaced + its component breakdown rides in `data`). When no scorer is given, the default
|
|
85
|
+
* mission-based verdict (`review`) is unchanged. The adopter's scorecard plugs in here; product
|
|
86
|
+
* scorers live in the adopter's repo, and core ships none.
|
|
100
87
|
*/
|
|
101
88
|
score?: (ctx: TerminalProductScoringContext) => RunAdapterScore | Promise<RunAdapterScore>;
|
|
102
89
|
/**
|
|
103
|
-
* Companion seam: derive product-feedback candidates from the same assembled evidence. The
|
|
90
|
+
* Companion seam: derive product-feedback candidates from the same assembled evidence. The route
|
|
104
91
|
* appends the returned candidates to `bundle.feedbackCandidates`. The adapter records its
|
|
105
92
|
* product-specific concepts (public CLI command observed, hosted success-or-blocker, feedback id,
|
|
106
|
-
* media/job ids, no-spend proof, defection/friction risk) under each candidate's
|
|
107
|
-
* `adapter` block
|
|
108
|
-
*
|
|
93
|
+
* media/job ids, no-spend proof, defection/friction risk) under each candidate's adapter-namespaced
|
|
94
|
+
* `adapter` block and never as core enums.
|
|
95
|
+
* The candidates must still satisfy core's feedback-candidate shape (which
|
|
109
96
|
* the bundle verifier enforces), so a malformed adapter candidate fails closed.
|
|
110
97
|
*/
|
|
111
98
|
deriveFeedback?: (ctx: TerminalProductScoringContext) => RunFeedbackCandidate[] | Promise<RunFeedbackCandidate[]>;
|
|
112
99
|
}
|
|
113
100
|
export interface RunTerminalProductLabOptions {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
101
|
+
/** Cancels post-run analysis only. */
|
|
102
|
+
analysisSignal?: AbortSignal;
|
|
103
|
+
/** Reports the analysis window to onEvent; built by normalizeRunLabOptions. */
|
|
104
|
+
emit?: (event: LabEvent) => void;
|
|
117
105
|
cwd: string;
|
|
118
106
|
config: LabConfig;
|
|
119
107
|
/** Resolved upstream (scenario.mode + CLI override); defaults safe (dry-run). */
|
|
120
108
|
dryRun: boolean;
|
|
121
109
|
open?: boolean;
|
|
122
110
|
runId?: string;
|
|
123
|
-
hooks?: TerminalProductLabHooks;
|
|
124
111
|
/**
|
|
125
|
-
*
|
|
126
|
-
* is
|
|
112
|
+
* The operator environment the route reads the runtime key from (and from which it asserts no
|
|
113
|
+
* banned credential is requested). Defaults to process.env. The runtime key goes only
|
|
114
|
+
* into command-scoped `codex` env or an external header transform, and never into Sandbox.create envs (the credential
|
|
115
|
+
* boundary); tests plant a fake key here and assert it never reaches metadata/global env/artifacts.
|
|
116
|
+
*/
|
|
117
|
+
env?: Readonly<Record<string, string | undefined>>;
|
|
118
|
+
scorer?: TerminalScorer;
|
|
119
|
+
/** Test seams: the E2B module, the Observer renderer, the clock and the cost probe. */
|
|
120
|
+
deps?: LabDeps;
|
|
121
|
+
/**
|
|
122
|
+
* Present only when the scorer was config-declared and loaded by the CLI. Its presence
|
|
123
|
+
* is the "declared" marker: a config-declared terminal scorer returning status:"fail" flips
|
|
127
124
|
* bundle.review.verdict (like the browser routes), and one that throws becomes a visible review.gaps
|
|
128
|
-
* entry. A
|
|
125
|
+
* entry. A library caller passing `scorer` leaves this absent and keeps today's purely
|
|
129
126
|
* additive terminal behavior (verdict unchanged). Core-computed, never adopter-supplied.
|
|
130
127
|
*/
|
|
131
128
|
scorerProvenance?: RunScorerProvenance;
|
|
132
129
|
}
|
|
133
|
-
export interface TerminalProductLabResult extends AutomaticAnalysisResult {
|
|
134
|
-
|
|
135
|
-
/** True when the bundle verified AND (dry-run, or the live session reached a terminal verdict
|
|
130
|
+
export interface TerminalProductLabResult extends AutomaticAnalysisResult, StudyResultIdentity<"terminal"> {
|
|
131
|
+
/** True when the bundle verified and (dry-run, or the live session reached a terminal verdict
|
|
136
132
|
* without a harness error + cleanup was proven). The agent's pass/fail is evidence, not the
|
|
137
133
|
* lab's exit code. */
|
|
138
134
|
ok: boolean;
|
|
139
135
|
cwd: string;
|
|
140
|
-
labId: string;
|
|
141
136
|
/** The registry-resolved actor id that ran (or would run) the session. */
|
|
142
137
|
actor: string;
|
|
143
138
|
/** The studied product name (public-safe). */
|
|
@@ -150,23 +145,23 @@ export interface TerminalProductLabResult extends AutomaticAnalysisResult {
|
|
|
150
145
|
completionReason: ActorCompletionReason;
|
|
151
146
|
reason: string;
|
|
152
147
|
};
|
|
153
|
-
/** Live-only: the sandbox lifecycle proof (the key/auth value is
|
|
148
|
+
/** Live-only: the sandbox lifecycle proof (the key/auth value is never surfaced here). */
|
|
154
149
|
sandbox?: {
|
|
155
150
|
sandboxId: string;
|
|
156
151
|
killed: boolean;
|
|
157
|
-
/**
|
|
152
|
+
/** By-id proof (never a re-list): 0 = confirmed reclaimed, 1 = still present (unconfirmed),
|
|
158
153
|
* -1 = kill(id) itself failed or was unavailable. See TerminalLedgers["cleanup"]. */
|
|
159
154
|
remaining: number;
|
|
160
155
|
};
|
|
161
|
-
/** Live-only: the spend ledger surfaced on the result
|
|
156
|
+
/** Live-only: the spend ledger surfaced on the result. Unknowns are null, never guessed.
|
|
162
157
|
* Lets a programmatic caller read spend without parsing the bundle. */
|
|
163
158
|
cost?: {
|
|
164
159
|
knownTotalUsd: number;
|
|
165
160
|
fullyMeasured: boolean;
|
|
166
|
-
/** Per-category USD: a known number, or null =
|
|
161
|
+
/** Per-category USD: a known number, or null = not measured (never coerced to 0). */
|
|
167
162
|
lines: Record<"product" | "media" | "payment" | "provider", number | null>;
|
|
168
163
|
};
|
|
169
|
-
/** Live-only: the no-spend proof
|
|
164
|
+
/** Live-only: the no-spend proof derived from the ledger. */
|
|
170
165
|
noSpend?: {
|
|
171
166
|
satisfied: boolean;
|
|
172
167
|
maxUsd: number | null;
|
|
@@ -176,12 +171,7 @@ export interface TerminalProductLabResult extends AutomaticAnalysisResult {
|
|
|
176
171
|
observer?: ObserverResult;
|
|
177
172
|
warnings: string[];
|
|
178
173
|
error?: {
|
|
179
|
-
|
|
180
|
-
* HUMANISH_TERMINAL_AGENT_NOT_IMPLEMENTED is deprecated and no longer produced: the terminal
|
|
181
|
-
* agent runs only inside this route, and its fail-closed direct runner is gone. That code
|
|
182
|
-
* goes in the next minor.
|
|
183
|
-
*/
|
|
184
|
-
code: "HUMANISH_LAB_ANALYSIS_INVALID" | "HUMANISH_LAB_TASKS_UNSUPPORTED" | "HUMANISH_LAB_OPTION_CONFLICT" | "HUMANISH_LAB_OPTION_UNSUPPORTED" | "HUMANISH_TERMINAL_LAB_FAILED" | "HUMANISH_TERMINAL_LAB_ACTOR_UNSUPPORTED" | "HUMANISH_TERMINAL_LAB_SUBJECT_INVALID" | "HUMANISH_TERMINAL_LAB_KEYPLACEMENT_INVALID" | "HUMANISH_TERMINAL_LAB_RUNTIME_AUTH_MISSING" | "HUMANISH_TERMINAL_LAB_KEYS_MISSING" | "HUMANISH_TERMINAL_LAB_CAPS_MISSING" | "HUMANISH_TERMINAL_LAB_CAPS_INVALID" | "HUMANISH_TERMINAL_LAB_UNPRICED_CAP" | "HUMANISH_TERMINAL_LAB_CAPS_EXCEEDED" | "HUMANISH_TERMINAL_LAB_CREDENTIAL_DENIED" | "HUMANISH_TERMINAL_LAB_CLEANUP_UNPROVEN" | "HUMANISH_RUN_ID_IN_USE" | "HUMANISH_TERMINAL_AGENT_NOT_IMPLEMENTED";
|
|
174
|
+
code: "HUMANISH_STUDY_ANALYSIS_INVALID" | "HUMANISH_STUDY_TASKS_UNSUPPORTED" | "HUMANISH_STUDY_OPTION_UNSUPPORTED" | "HUMANISH_TERMINAL_FAILED" | "HUMANISH_TERMINAL_ACTOR_UNSUPPORTED" | "HUMANISH_TERMINAL_SUBJECT_INVALID" | "HUMANISH_TERMINAL_KEYPLACEMENT_INVALID" | "HUMANISH_TERMINAL_RUNTIME_AUTH_MISSING" | "HUMANISH_TERMINAL_KEYS_MISSING" | "HUMANISH_TERMINAL_CAPS_MISSING" | "HUMANISH_TERMINAL_CAPS_INVALID" | "HUMANISH_TERMINAL_UNPRICED_CAP" | "HUMANISH_TERMINAL_CAPS_EXCEEDED" | "HUMANISH_TERMINAL_CREDENTIAL_DENIED" | "HUMANISH_TERMINAL_CLEANUP_UNPROVEN" | "HUMANISH_RUN_ID_IN_USE";
|
|
185
175
|
message: string;
|
|
186
176
|
};
|
|
187
177
|
}
|
|
@@ -192,14 +182,14 @@ export interface LifecycleRecord {
|
|
|
192
182
|
/** Redacted+scrubbed before persisting (it never carries a secret, but the harness never trusts that). */
|
|
193
183
|
message: string;
|
|
194
184
|
}
|
|
195
|
-
/** Command-log ledger entry: which command ran, with what exit/duration (
|
|
185
|
+
/** Command-log ledger entry: which command ran, with what exit/duration (never its env values). */
|
|
196
186
|
export interface CommandLogRecord {
|
|
197
187
|
at: string;
|
|
198
188
|
/** A public-safe label for the command (e.g. "codex-exec"); the full argv is bound by digest only. */
|
|
199
189
|
label: string;
|
|
200
|
-
/** sha256-12 of the exact command string
|
|
190
|
+
/** sha256-12 of the exact command string. It pins "same recipe" without persisting it. */
|
|
201
191
|
commandDigest: string;
|
|
202
|
-
/** The env var
|
|
192
|
+
/** The env var names injected command-scoped (values never persisted): the credential evidence. */
|
|
203
193
|
envNames: string[];
|
|
204
194
|
exitCode?: number;
|
|
205
195
|
timedOut?: boolean;
|
|
@@ -209,12 +199,12 @@ export interface CommandLogRecord {
|
|
|
209
199
|
export interface TerminalEventRecord {
|
|
210
200
|
at: string;
|
|
211
201
|
stream: "stdout" | "stderr";
|
|
212
|
-
/**
|
|
202
|
+
/** Already scrubbed (literal known values), then redacted (shape patterns) at the source. */
|
|
213
203
|
chunk: string;
|
|
214
204
|
}
|
|
215
205
|
/**
|
|
216
|
-
* One operator intervention (assisted-input event). The current route ships
|
|
217
|
-
* path, so this ledger is
|
|
206
|
+
* One operator intervention (assisted-input event). The current route ships no assisted-input
|
|
207
|
+
* path, so this ledger is always empty, and always present (the safety contract: empty-present is
|
|
218
208
|
* the contract, an absent ledger fails verify). A future assisted path can fill this shape.
|
|
219
209
|
*/
|
|
220
210
|
export interface InterventionRecord {
|
|
@@ -224,72 +214,72 @@ export interface InterventionRecord {
|
|
|
224
214
|
inputDigest: string;
|
|
225
215
|
}
|
|
226
216
|
/**
|
|
227
|
-
* One cost line of the spend ledger.
|
|
228
|
-
* three distinct states are
|
|
229
|
-
* - `usd: 0` =>
|
|
217
|
+
* One cost line of the spend ledger. The null discipline:
|
|
218
|
+
* three distinct states are kept apart:
|
|
219
|
+
* - `usd: 0` => known to be zero. A measured-and-zero spend (we metered this category and it
|
|
230
220
|
* billed nothing). The no-spend proof may legitimately assert this is zero.
|
|
231
|
-
* - `usd: null` =>
|
|
221
|
+
* - `usd: null` => not measured. This run carries no spend signal for the category. `null` is
|
|
232
222
|
* written explicitly (never undefined-omitted, never guessed to 0). The no-spend
|
|
233
|
-
* proof must list this line as
|
|
234
|
-
* - line
|
|
223
|
+
* proof must list this line as unmeasured and must not claim it is zero.
|
|
224
|
+
* - line absent => not applicable to this route/run (n/a). The line simply does not appear in
|
|
235
225
|
* `lines`. (The current route emits all four lines, so absence is reserved for
|
|
236
|
-
* future
|
|
237
|
-
* `null` vs missing-key is the
|
|
226
|
+
* future routes that genuinely have no such category.)
|
|
227
|
+
* `null` vs missing-key is the distinction that matters: a missing key means "this category does not
|
|
238
228
|
* exist for this run"; a present key with `null` means "this category exists but we did not measure
|
|
239
229
|
* it". A no-spend proof that claimed zero on a `null` line would claim more than it measured.
|
|
240
230
|
*/
|
|
241
231
|
export interface CostLine {
|
|
242
|
-
/** known zero (0) | not measured (null). The key is
|
|
232
|
+
/** known zero (0) | not measured (null). The key is always present when the line is applicable. */
|
|
243
233
|
usd: number | null;
|
|
244
234
|
/** Optional billable-unit count, same discipline: a known count, or null = not measured. */
|
|
245
235
|
count?: number | null;
|
|
246
236
|
/** How this line's value was established (provenance for the verifier + the human reviewer). */
|
|
247
237
|
source: "provider-token-usage" | "no-spend-signal" | "operator-cap" | "unmeasured"
|
|
248
|
-
/** Tokens were
|
|
249
|
-
* carries the measured token totals
|
|
238
|
+
/** Tokens were counted but no rate could price them, so `usd` stays null while the note
|
|
239
|
+
* carries the measured token totals. Distinct from "unmeasured", which means no
|
|
250
240
|
* signal at all. */
|
|
251
241
|
| "unpriced-token-usage";
|
|
252
242
|
/** A short, public-safe note (never a secret value). */
|
|
253
243
|
note: string;
|
|
254
244
|
}
|
|
255
245
|
/**
|
|
256
|
-
* The spend ledger (a block of `TerminalLedgers`). The no-spend
|
|
257
|
-
* asserted independently. Every applicable category appears as a line; unknowns are `null`.
|
|
246
|
+
* The spend ledger (a block of `TerminalLedgers`). The no-spend proof is derived from this and
|
|
247
|
+
* never asserted independently. Every applicable category appears as a line; unknowns are `null`.
|
|
258
248
|
*/
|
|
259
249
|
export interface TerminalCostLedger {
|
|
260
250
|
schema: "humanish.terminal-cost-ledger.v1";
|
|
261
|
-
/** USD currency unit (recorded explicitly so a future multi-currency
|
|
251
|
+
/** USD currency unit (recorded explicitly so a future multi-currency route is unambiguous). */
|
|
262
252
|
currency: "usd";
|
|
263
253
|
lines: Record<CostCategory, CostLine>;
|
|
264
|
-
/** Sum of the
|
|
254
|
+
/** Sum of the known (non-null) lines. Null lines contribute nothing and are never guessed as 0. */
|
|
265
255
|
knownTotalUsd: number;
|
|
266
|
-
/** True when every applicable line is measured (no null). When false, knownTotalUsd is a
|
|
267
|
-
* bound
|
|
256
|
+
/** True when every applicable line is measured (no null). When false, knownTotalUsd is a lower
|
|
257
|
+
* bound on the spend, and the no-spend proof says so. */
|
|
268
258
|
fullyMeasured: boolean;
|
|
269
259
|
}
|
|
270
260
|
/**
|
|
271
|
-
* The no-spend proof,
|
|
272
|
-
*
|
|
273
|
-
*
|
|
274
|
-
*
|
|
275
|
-
*
|
|
261
|
+
* The no-spend proof, derived from the cost ledger.
|
|
262
|
+
* It lists the known-zero lines it can vouch for and, separately, the unmeasured
|
|
263
|
+
* (null) lines it cannot vouch for. `satisfied` is true only when every known line is zero (a
|
|
264
|
+
* known non-zero line fails it). A proof with unmeasured lines says it could not measure them;
|
|
265
|
+
* it never claims zero on a line the ledger marks null.
|
|
276
266
|
*/
|
|
277
267
|
export interface NoSpendProof {
|
|
278
268
|
schema: "humanish.terminal-no-spend-proof.v1";
|
|
279
269
|
/** The maxUsd cap this proof was evaluated against (the no-spend scenario declares maxUsd: 0). */
|
|
280
270
|
maxUsd: number | null;
|
|
281
|
-
/** True iff every
|
|
271
|
+
/** True iff every known (measured) line is <= maxUsd (for a no-spend run, == 0). */
|
|
282
272
|
satisfied: boolean;
|
|
283
|
-
/** Categories the ledger
|
|
273
|
+
/** Categories the ledger measured and found at (known) zero: the proof can vouch for these. */
|
|
284
274
|
knownZeroLines: CostCategory[];
|
|
285
|
-
/** Categories the ledger measured with a known
|
|
275
|
+
/** Categories the ledger measured with a known non-zero spend (these break `satisfied`). */
|
|
286
276
|
knownNonZeroLines: CostCategory[];
|
|
287
|
-
/** Categories the ledger marks `null` (
|
|
288
|
-
*
|
|
277
|
+
/** Categories the ledger marks `null` (not measured). The proof lists these and does not claim
|
|
278
|
+
* they are zero; it claims only that this run could not measure them. */
|
|
289
279
|
unmeasuredLines: CostCategory[];
|
|
290
280
|
/** Sum of the known lines (== 0 for a satisfied no-spend run). */
|
|
291
281
|
knownTotalUsd: number;
|
|
292
|
-
/** Human-readable
|
|
282
|
+
/** Human-readable statement covering both what is proven and what is unmeasured. */
|
|
293
283
|
statement: string;
|
|
294
284
|
}
|
|
295
285
|
/** The persisted terminal-product ledgers artifact (substrate lifecycle + command log + interventions + cleanup + cost). */
|
|
@@ -298,25 +288,25 @@ export interface TerminalLedgers {
|
|
|
298
288
|
runtime?: ActorRuntimeProvenance;
|
|
299
289
|
lifecycle: LifecycleRecord[];
|
|
300
290
|
commandLog: CommandLogRecord[];
|
|
301
|
-
/**
|
|
291
|
+
/** Always present, and always empty while no assisted-input path ships (the safety contract). */
|
|
302
292
|
interventions: InterventionRecord[];
|
|
303
293
|
cleanup: {
|
|
304
294
|
/** True when exact-id kill resolved, including the startup guard's acquired-instance kill
|
|
305
295
|
* (found-and-killed or already gone both prove absence; see `remaining`/`reason`). */
|
|
306
296
|
killed: boolean;
|
|
307
|
-
/**
|
|
308
|
-
*
|
|
297
|
+
/** By-id proof, never derived from Sandbox.list: 0 = confirmed reclaimed (kill(id) resolved,
|
|
298
|
+
* returning true "found and killed" or false "404, exact id already gone", and, when the
|
|
309
299
|
* SDK exposes it, getInfo(id) did not report a live sandbox); 1 = getInfo(id) still reports
|
|
310
|
-
* this exact sandbox running/paused (
|
|
300
|
+
* this exact sandbox running/paused (still present); -1 = kill(id) itself failed, threw, or
|
|
311
301
|
* was unavailable (the server-side kill-on-timeout is the backstop). */
|
|
312
302
|
remaining: number;
|
|
313
|
-
/**
|
|
303
|
+
/** Human-readable statement of which by-id signal produced `remaining`. */
|
|
314
304
|
reason: string;
|
|
315
305
|
};
|
|
316
306
|
/** The spend ledger. Unknowns are `null`, never guessed; the no-spend proof
|
|
317
|
-
* below is
|
|
307
|
+
* below is derived from it. */
|
|
318
308
|
cost: TerminalCostLedger;
|
|
319
|
-
/** The no-spend proof
|
|
309
|
+
/** The no-spend proof derived from `cost`. Never an independent assertion. */
|
|
320
310
|
noSpendProof: NoSpendProof;
|
|
321
311
|
}
|
|
322
312
|
/** What a terminal run takes besides its plan. The plan carries the config, dry run and lab. */
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import {} from "../../analysis/automatic-completion.js";
|
|
2
|
-
import {} from "../../run/status.js";
|
|
3
|
-
import {} from "../../substrates/e2b/sdk.js";
|
|
4
|
-
import { renderObserver } from "../../observer/render.js";
|
|
5
2
|
import {} from "../../run/bundle.js";
|
|
6
|
-
|
|
3
|
+
import {} from "../../run/study-result.js";
|
|
4
|
+
/** Provider-neutral metadata constant: the route's non-secret tag (mirrors CUA_ACTOR_LAB_PROVIDER_METADATA). */
|
|
7
5
|
export const TERMINAL_PRODUCT_LAB_PROVIDER_METADATA = {
|
|
8
6
|
mode: "terminal-product-lab",
|
|
9
7
|
tool: "humanish",
|
|
@@ -16,7 +14,7 @@ export const UPLOAD_MAX_BYTES = 64 * 1024 * 1024;
|
|
|
16
14
|
/**
|
|
17
15
|
* Server-side reclamation buffer past the codex command's own wall-clock (caps.maxMinutes) kill.
|
|
18
16
|
* Shorter than the desktop routes' SANDBOX_TIMEOUT_BUFFER_MS (src/substrates/e2b/lifetime.ts):
|
|
19
|
-
* when
|
|
17
|
+
* when this buffer was set, the terminal sandbox ran nothing but the codex command, and after its kill only
|
|
20
18
|
* teardown remained.
|
|
21
19
|
*/
|
|
22
20
|
export const TERMINAL_SANDBOX_TIMEOUT_BUFFER_MS = 5 * 60_000;
|
|
@@ -25,7 +23,14 @@ export const DEFAULT_REQUEST_TIMEOUT_MS = 60_000;
|
|
|
25
23
|
export const PRODUCT_SETUP_TIMEOUT_MS = 300_000;
|
|
26
24
|
// How much of a captured stream / log tail rides a (redacted) message field.
|
|
27
25
|
export const TAIL_CHARS = 2000;
|
|
26
|
+
// How much of one decoded agent message or reasoning item the actor trace keeps.
|
|
27
|
+
export const MESSAGE_CHARS = 8000;
|
|
28
|
+
// How many message and reasoning items the actor trace keeps, and their total text bytes. Analysis
|
|
29
|
+
// reads at most 160 KiB of evidence text, and the trace is stored twice (actor.json and run.json).
|
|
30
|
+
export const TEXT_ITEMS_MAX = 200;
|
|
31
|
+
export const TEXT_ITEMS_BYTES = 128 * 1024;
|
|
32
|
+
// The longest stdout line the participant reader holds while waiting for its newline.
|
|
33
|
+
export const PENDING_LINE_CHARS = 1024 * 1024;
|
|
28
34
|
// Hard cap on the retained event-stream + transcript size, so a runaway agent cannot balloon the
|
|
29
|
-
// bundle. Redaction runs
|
|
35
|
+
// bundle. Redaction runs pre-truncation so a cut can never split a secret past the scrubber.
|
|
30
36
|
export const MAX_TRANSCRIPT_BYTES = 512 * 1024;
|
|
31
|
-
export const TERMINAL_PRODUCT_LAB_SCHEMA = "humanish.terminal-lab-result.v1";
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PreparedRunArtifactPaths } from "./paths.js";
|
|
2
|
+
import type { RunStatusHandle } from "./status.js";
|
|
3
|
+
export interface ActiveRun {
|
|
4
|
+
cwd: string;
|
|
5
|
+
runId: string;
|
|
6
|
+
/** The run's own directory, so reclaim never resolves the id as an alias. */
|
|
7
|
+
paths: PreparedRunArtifactPaths;
|
|
8
|
+
status: Pick<RunStatusHandle, "interrupt">;
|
|
9
|
+
}
|
|
10
|
+
/** Register a started run; the returned function removes it. */
|
|
11
|
+
export declare function registerActiveRun(run: ActiveRun): () => void;
|
|
12
|
+
/** The runs started in this process that have not closed, oldest first. */
|
|
13
|
+
export declare function activeRuns(): ActiveRun[];
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const active = new Set();
|
|
2
|
+
/** Register a started run; the returned function removes it. */
|
|
3
|
+
export function registerActiveRun(run) {
|
|
4
|
+
active.add(run);
|
|
5
|
+
return () => {
|
|
6
|
+
active.delete(run);
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
/** The runs started in this process that have not closed, oldest first. */
|
|
10
|
+
export function activeRuns() {
|
|
11
|
+
return [...active];
|
|
12
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { type ReviewSummary, type RunBundle } from "./bundle.js";
|
|
1
|
+
import { type ReviewSummary, type RunAdapterScore, type RunBundle } from "./bundle.js";
|
|
2
2
|
import { type StoredCleanupResult, type RunPointer } from "./results.js";
|
|
3
3
|
export declare function isRunBundle(value: unknown): value is RunBundle;
|
|
4
4
|
export declare function isCleanupResult(value: unknown): value is StoredCleanupResult;
|
|
5
|
+
export declare function isRunAdapterScore(value: unknown): value is RunAdapterScore;
|
|
5
6
|
export declare const ARCHIVE_SHA256_PATTERN: RegExp;
|
|
6
7
|
export declare function isReviewSummary(value: unknown): value is ReviewSummary;
|
|
7
8
|
export declare function isRunPointer(value: unknown): value is RunPointer;
|