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,38 +1,37 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
1
|
import {} from "../../run/bundle.js";
|
|
3
|
-
import {
|
|
4
|
-
import { adapterScoreFailureMessage, declaredScorerThrew, DECLARED_SCORER_MALFORMED, frozenBundleView, } from "../../lab/adapter-extension.js";
|
|
2
|
+
import { isRunAdapterScore } from "../../run/bundle-shape.js";
|
|
3
|
+
import { adapterScoreFailureMessage, declaredScorerThrew, DECLARED_SCORER_MALFORMED, frozenBundleView, isAdapterFeedbackCandidate, } from "../../lab/adapter-extension.js";
|
|
5
4
|
/**
|
|
6
|
-
* Run the
|
|
7
|
-
* evidence and attach its results to the bundle
|
|
5
|
+
* Run the product-adapter extension seam over the assembled
|
|
6
|
+
* evidence and attach its results to the bundle in place, without core knowing any product noun.
|
|
8
7
|
* The review is not touched here: the returned failures are folded into it by the caller.
|
|
9
8
|
*
|
|
10
9
|
* - `score`: when present, the returned namespaced `RunAdapterScore` lands on `bundle.adapterScore`.
|
|
11
|
-
* For a
|
|
12
|
-
* failure. For a
|
|
13
|
-
* failure (the keystone
|
|
14
|
-
* that
|
|
10
|
+
* For a library caller (no `scorerProvenance`), the adapter score is additive and never a
|
|
11
|
+
* failure. For a config-declared scorer (`scorerProvenance` present), a status:"fail" is a
|
|
12
|
+
* failure (the keystone route is the product's own definition of pass/fail), and so is a scorer
|
|
13
|
+
* that throws or returns a malformed value, so a crashed declared gate is never a silent green.
|
|
15
14
|
* - `deriveFeedback`: when present, the returned candidates are appended to
|
|
16
15
|
* `bundle.feedbackCandidates`; each carries its own namespaced `adapter` product-noun block.
|
|
17
16
|
*
|
|
18
17
|
* Defense in depth: the adapter's namespaced payloads are re-serialized through the run's scrub +
|
|
19
|
-
* redact, and any candidate / score that does not satisfy core's exported shape is
|
|
18
|
+
* redact, and any candidate / score that does not satisfy core's exported shape is dropped with a
|
|
20
19
|
* warning (a malformed adapter output never poisons a verifiable bundle). The bundle verifier
|
|
21
20
|
* re-checks the surviving shapes downstream, so the seam stays fail-closed end to end.
|
|
22
21
|
*/
|
|
23
22
|
export async function applyAdapterExtensionSeam(args) {
|
|
24
|
-
const {
|
|
25
|
-
if (!
|
|
23
|
+
const { scorer, bundle, trace, ledgers, transcript, product, labId, runId, sanitize, warnings, scorerProvenance, } = args;
|
|
24
|
+
if (!scorer?.score && !scorer?.deriveFeedback)
|
|
26
25
|
return { failures: [] };
|
|
27
26
|
const declared = scorerProvenance !== undefined;
|
|
28
27
|
// Record the loaded scorer's identity regardless of hook outcome (a throwing/invalid scorer was
|
|
29
28
|
// still loaded and attempted).
|
|
30
29
|
if (scorerProvenance)
|
|
31
30
|
bundle.scorerProvenance = scorerProvenance;
|
|
32
|
-
// The scorer sees a
|
|
31
|
+
// The scorer sees a read-only view of the bundle so it cannot mutate noSpend/cost/review in place to
|
|
33
32
|
// launder a verdict (a tamper attempt throws and is caught as a hook failure below). The seam stamps
|
|
34
|
-
// the
|
|
35
|
-
// terminal-transcript.txt
|
|
33
|
+
// the real bundle. The transcript is the same normalized, source-scrubbed text the run persists as
|
|
34
|
+
// terminal-transcript.txt, so the scorer sees nothing beyond what disk already holds.
|
|
36
35
|
const ctx = {
|
|
37
36
|
bundle: frozenBundleView(bundle),
|
|
38
37
|
trace,
|
|
@@ -43,159 +42,63 @@ export async function applyAdapterExtensionSeam(args) {
|
|
|
43
42
|
runId,
|
|
44
43
|
};
|
|
45
44
|
// Best-effort re-scrub of the adapter payload: round-trip the whole JSON through the run's denylist
|
|
46
|
-
// sanitizer.
|
|
47
|
-
//
|
|
45
|
+
// sanitizer. It is a scrub with no containment: it catches recognizable secret shapes and known
|
|
46
|
+
// local paths, and misses encoded/split/custom secrets, DB passwords, PII, or abs paths outside
|
|
47
|
+
// the denylist. A
|
|
48
48
|
// payload from config-declared code is acceptable only because the trust boundary (the party who
|
|
49
49
|
// declares the scorer runs the lab) already permits direct exfiltration; the re-scrub is
|
|
50
50
|
// defense-in-depth, not a wall.
|
|
51
51
|
const scrubValue = (value) => JSON.parse(sanitize(JSON.stringify(value)));
|
|
52
|
-
// Set for a
|
|
53
|
-
// The caller folds it into the review and fails the run
|
|
52
|
+
// Set for a declared scorer that fails to render a pass verdict (status:"fail", malformed, or throw).
|
|
53
|
+
// The caller folds it into the review and fails the run result on it: a declared gate that cannot
|
|
54
54
|
// pass is a fail, never a silent green. Empty for a library caller and for a passing scorer.
|
|
55
55
|
const failures = [];
|
|
56
|
-
if (
|
|
56
|
+
if (scorer?.score) {
|
|
57
57
|
try {
|
|
58
|
-
const score = await
|
|
58
|
+
const score = await scorer.score(ctx);
|
|
59
59
|
const cleaned = scrubValue(score);
|
|
60
|
-
if (
|
|
60
|
+
if (isRunAdapterScore(cleaned)) {
|
|
61
61
|
bundle.adapterScore = cleaned;
|
|
62
|
-
// A
|
|
62
|
+
// A config-declared terminal scorer owns the product verdict: a status:"fail" fails the
|
|
63
63
|
// review and the run result. A library caller keeps the additive no-fail behavior.
|
|
64
64
|
const message = declared ? adapterScoreFailureMessage(bundle) : undefined;
|
|
65
65
|
if (message !== undefined)
|
|
66
66
|
failures.push(message);
|
|
67
67
|
}
|
|
68
68
|
else {
|
|
69
|
-
warnings.push("
|
|
70
|
-
// A declared gate that returned a
|
|
69
|
+
warnings.push("scorer.score returned a value that is not a well-formed humanish.adapter-score.v1 (non-empty namespace + status + numeric score + summary); dropped so the bundle stays verifiable.");
|
|
70
|
+
// A declared gate that returned a malformed value never rendered a verdict, so it fails closed.
|
|
71
71
|
if (declared)
|
|
72
72
|
failures.push(DECLARED_SCORER_MALFORMED);
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
catch (error) {
|
|
76
76
|
const detail = sanitize(error instanceof Error ? error.message : String(error));
|
|
77
|
-
warnings.push(`
|
|
78
|
-
// A crashed
|
|
77
|
+
warnings.push(`scorer.score threw (${detail}); dropped so the bundle stays verifiable.`);
|
|
78
|
+
// A crashed declared gate must be visible, never a silent pass: it fails the review and the
|
|
79
79
|
// run result.
|
|
80
80
|
if (declared)
|
|
81
81
|
failures.push(declaredScorerThrew(detail));
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
|
-
if (
|
|
84
|
+
if (scorer?.deriveFeedback) {
|
|
85
85
|
try {
|
|
86
|
-
const candidates = await
|
|
86
|
+
const candidates = await scorer.deriveFeedback(ctx);
|
|
87
87
|
const accepted = [];
|
|
88
88
|
for (const candidate of Array.isArray(candidates) ? candidates : []) {
|
|
89
89
|
const cleaned = scrubValue(candidate);
|
|
90
|
-
if (
|
|
90
|
+
if (isAdapterFeedbackCandidate(cleaned))
|
|
91
91
|
accepted.push(cleaned);
|
|
92
92
|
else
|
|
93
|
-
warnings.push("
|
|
93
|
+
warnings.push("scorer.deriveFeedback returned a candidate that is not a well-formed humanish.feedback-candidate.v1 (or its adapter block lacked a non-empty namespace + data record); dropped so the bundle stays verifiable.");
|
|
94
94
|
}
|
|
95
95
|
if (accepted.length > 0) {
|
|
96
96
|
bundle.feedbackCandidates = [...bundle.feedbackCandidates, ...accepted];
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
catch (error) {
|
|
100
|
-
warnings.push(`
|
|
100
|
+
warnings.push(`scorer.deriveFeedback threw (${sanitize(error instanceof Error ? error.message : String(error))}); dropped so the bundle stays verifiable.`);
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
return { failures };
|
|
104
104
|
}
|
|
105
|
-
/** Structural guard for an adapter-returned RunAdapterScore (mirrors run/bundle-shape.ts isRunAdapterScore, kept
|
|
106
|
-
* local so the lane fails closed at the seam BEFORE the bundle verifier re-checks it). */
|
|
107
|
-
function isAdapterScoreShape(value) {
|
|
108
|
-
return (typeof value === "object" &&
|
|
109
|
-
value !== null &&
|
|
110
|
-
!Array.isArray(value) &&
|
|
111
|
-
value.schema === "humanish.adapter-score.v1" &&
|
|
112
|
-
typeof value.namespace === "string" &&
|
|
113
|
-
value.namespace.trim().length > 0 &&
|
|
114
|
-
["pass", "partial", "fail"].includes(value.status) &&
|
|
115
|
-
typeof value.score === "number" &&
|
|
116
|
-
Number.isFinite(value.score) &&
|
|
117
|
-
typeof value.summary === "string");
|
|
118
|
-
}
|
|
119
|
-
/** Structural guard for an adapter-returned feedback candidate. This mirrors run/feedback-shape.ts's full
|
|
120
|
-
* isRunFeedbackCandidate predicate, including its local evidence-path contract, so a malformed
|
|
121
|
-
* candidate is dropped at the extension seam instead of poisoning the persisted bundle. */
|
|
122
|
-
function isAdapterFeedbackCandidateShape(value) {
|
|
123
|
-
return (isAdapterRecord(value) &&
|
|
124
|
-
value.schema === "humanish.feedback-candidate.v1" &&
|
|
125
|
-
typeof value.id === "string" &&
|
|
126
|
-
typeof value.run_id === "string" &&
|
|
127
|
-
(typeof value.stream_id === "string" || value.stream_id === undefined) &&
|
|
128
|
-
typeof value.adapter_id === "string" &&
|
|
129
|
-
typeof value.scenario_id === "string" &&
|
|
130
|
-
typeof value.persona_id === "string" &&
|
|
131
|
-
isAdapterFeedbackActor(value.actor) &&
|
|
132
|
-
isAdapterFeedbackSubstrate(value.substrate) &&
|
|
133
|
-
isAdapterFeedbackFailureOwner(value.failure_owner) &&
|
|
134
|
-
typeof value.summary === "string" &&
|
|
135
|
-
value.summary.trim().length > 0 &&
|
|
136
|
-
typeof value.expected === "string" &&
|
|
137
|
-
typeof value.actual === "string" &&
|
|
138
|
-
Array.isArray(value.evidence) &&
|
|
139
|
-
value.evidence.every(isAdapterFeedbackEvidence) &&
|
|
140
|
-
isAdapterRecord(value.redaction) &&
|
|
141
|
-
value.redaction.status === "passed" &&
|
|
142
|
-
typeof value.redaction.notes === "string" &&
|
|
143
|
-
isFeedbackIdempotencyKey(value.idempotency_key) &&
|
|
144
|
-
isAdapterFeedbackNextState(value.proposed_next_state) &&
|
|
145
|
-
Array.isArray(value.acceptance_proof) &&
|
|
146
|
-
value.acceptance_proof.every((item) => typeof item === "string") &&
|
|
147
|
-
(value.adapter === undefined ||
|
|
148
|
-
(isAdapterRecord(value.adapter) &&
|
|
149
|
-
typeof value.adapter.namespace === "string" &&
|
|
150
|
-
value.adapter.namespace.trim().length > 0 &&
|
|
151
|
-
isAdapterRecord(value.adapter.data))));
|
|
152
|
-
}
|
|
153
|
-
function isAdapterFeedbackEvidence(value) {
|
|
154
|
-
return (isAdapterRecord(value) &&
|
|
155
|
-
typeof value.path === "string" &&
|
|
156
|
-
value.path.length > 0 &&
|
|
157
|
-
!path.isAbsolute(value.path) &&
|
|
158
|
-
!value.path.includes("://") &&
|
|
159
|
-
!value.path.includes("..") &&
|
|
160
|
-
(value.kind === "review" ||
|
|
161
|
-
value.kind === "state" ||
|
|
162
|
-
value.kind === "log" ||
|
|
163
|
-
value.kind === "trace" ||
|
|
164
|
-
value.kind === "screenshot" ||
|
|
165
|
-
value.kind === "filesystem") &&
|
|
166
|
-
typeof value.note === "string");
|
|
167
|
-
}
|
|
168
|
-
function isAdapterFeedbackActor(value) {
|
|
169
|
-
return (value === "codex-tui" ||
|
|
170
|
-
value === "codex-exec" ||
|
|
171
|
-
value === "codex-app-server" ||
|
|
172
|
-
value === "computer-use" ||
|
|
173
|
-
value === "synthetic-dry-run" ||
|
|
174
|
-
value === "unknown");
|
|
175
|
-
}
|
|
176
|
-
function isAdapterFeedbackSubstrate(value) {
|
|
177
|
-
return (value === "e2b-desktop" ||
|
|
178
|
-
value === "local-desktop" ||
|
|
179
|
-
value === "e2b-terminal" ||
|
|
180
|
-
value === "local-filesystem" ||
|
|
181
|
-
value === "codex-app-server" ||
|
|
182
|
-
value === "unknown");
|
|
183
|
-
}
|
|
184
|
-
function isAdapterFeedbackFailureOwner(value) {
|
|
185
|
-
return (value === "harness" ||
|
|
186
|
-
value === "target-app" ||
|
|
187
|
-
value === "actor" ||
|
|
188
|
-
value === "environment" ||
|
|
189
|
-
value === "unknown");
|
|
190
|
-
}
|
|
191
|
-
function isAdapterFeedbackNextState(value) {
|
|
192
|
-
return (value === "watch" ||
|
|
193
|
-
value === "adapter-hardening" ||
|
|
194
|
-
value === "target-app-setup" ||
|
|
195
|
-
value === "actor-auth" ||
|
|
196
|
-
value === "setup-quality-review" ||
|
|
197
|
-
value === "study-quality-review");
|
|
198
|
-
}
|
|
199
|
-
function isAdapterRecord(value) {
|
|
200
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
201
|
-
}
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
import type { ActorPersonaRef, ActorTrace } from "../../actors/contract.js";
|
|
2
|
-
import { type RunLabProvenance } from "../../run/status.js";
|
|
3
2
|
import type { LabScenarioCaps, LabRuntimeAuth } from "../../lab/types.js";
|
|
4
|
-
import { type RunBundle, type RunCostSummary } from "../../run/bundle.js";
|
|
5
|
-
import type
|
|
3
|
+
import { type RunBundle, type RunCostSummary, type BundleRun } from "../../run/bundle.js";
|
|
4
|
+
import { type Verdict } from "../../run/judge.js";
|
|
6
5
|
import type { TerminalLedgers } from "./types.js";
|
|
7
6
|
/**
|
|
8
|
-
* Project the terminal-product lab run into a humanish.run-bundle.v1 (no schema change
|
|
9
|
-
* producer only).
|
|
10
|
-
* (stdin disabled, no captured tail
|
|
7
|
+
* Project the terminal-product lab run into a humanish.run-bundle.v1 (no schema change: a new
|
|
8
|
+
* producer only). Dry run: a contract bundle. The terminal stream is a contract placeholder
|
|
9
|
+
* (stdin disabled, no captured tail, because nothing ran), the subject is declared unpinned, and
|
|
11
10
|
* the caps/policies/runtime-auth declarations are recorded without pretending that live ledgers
|
|
12
11
|
* exist. The shipped live builder fills the same evidence contract. Exported for tests.
|
|
13
12
|
*/
|
|
14
13
|
export declare function buildTerminalProductBundle(args: {
|
|
15
|
-
/**
|
|
16
|
-
|
|
14
|
+
/** The run this bundle belongs to; the bundle head reads its id, mode, start and lab. */
|
|
15
|
+
run: BundleRun;
|
|
17
16
|
actorId: string;
|
|
18
|
-
createdAt: string;
|
|
19
17
|
dryRun: boolean;
|
|
20
18
|
labId: string;
|
|
21
19
|
labTitle?: string;
|
|
@@ -32,23 +30,21 @@ export declare function buildTerminalProductBundle(args: {
|
|
|
32
30
|
allowPaymentCredentials: boolean;
|
|
33
31
|
allowGitHubMutation: boolean;
|
|
34
32
|
};
|
|
35
|
-
runId: string;
|
|
36
33
|
source: RunBundle["source"];
|
|
37
34
|
/** The run's judgment verdict (judgeTerminal): a contract for a dry run. */
|
|
38
35
|
verdict: Verdict;
|
|
39
36
|
}): RunBundle;
|
|
40
37
|
/**
|
|
41
|
-
* Build the
|
|
38
|
+
* Build the live terminal-product run bundle (mode "live") from the captured session: the actor
|
|
42
39
|
* trace seam (stream.actor = trace), the substrate-lifecycle events, the terminal stream with the
|
|
43
40
|
* redacted transcript tail, and references to the written evidence artifacts (terminal event
|
|
44
41
|
* stream, transcript, ledgers, actor trace). verifyRun's terminal-product check (gated on
|
|
45
42
|
* mode==="live") enforces the ledgers + proven cleanup + interventions-present over this bundle.
|
|
46
43
|
*/
|
|
47
44
|
export declare function buildLiveTerminalProductBundle(args: {
|
|
48
|
-
/**
|
|
49
|
-
|
|
45
|
+
/** The run this bundle belongs to; the bundle head reads its id, mode, start and lab. */
|
|
46
|
+
run: BundleRun;
|
|
50
47
|
actorId: string;
|
|
51
|
-
createdAt: string;
|
|
52
48
|
labId: string;
|
|
53
49
|
labTitle?: string;
|
|
54
50
|
mission: string;
|
|
@@ -64,7 +60,6 @@ export declare function buildLiveTerminalProductBundle(args: {
|
|
|
64
60
|
allowPaymentCredentials: boolean;
|
|
65
61
|
allowGitHubMutation: boolean;
|
|
66
62
|
};
|
|
67
|
-
runId: string;
|
|
68
63
|
source: RunBundle["source"];
|
|
69
64
|
trace: ActorTrace;
|
|
70
65
|
ledgers: TerminalLedgers;
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import {} from "../../run/status.js";
|
|
2
1
|
import { redactText } from "../../evidence/redaction.js";
|
|
3
2
|
import { participantAssignment } from "../../lab/participant-assignment.js";
|
|
4
3
|
import { REVIEW_SCHEMA, bundleArtifacts, bundleHead, } from "../../run/bundle.js";
|
|
4
|
+
import { verdictText } from "../../run/judge.js";
|
|
5
5
|
import {} from "../../run/streams.js";
|
|
6
6
|
import { participantEvent, participantIds, participantRecord, participantStream, } from "../../run/participant-records.js";
|
|
7
7
|
import { TERMINAL_EVENTS_ARTIFACT, TERMINAL_LEDGERS_ARTIFACT, TERMINAL_TRANSCRIPT_ARTIFACT, } from "../../run/terminal-contract.js";
|
|
8
8
|
import { describeMeasuredSpend, noSpendLineMeasured, noSpendNotEstablished } from "./ledger.js";
|
|
9
9
|
/**
|
|
10
|
-
* Project the terminal-product lab run into a humanish.run-bundle.v1 (no schema change
|
|
11
|
-
* producer only).
|
|
12
|
-
* (stdin disabled, no captured tail
|
|
10
|
+
* Project the terminal-product lab run into a humanish.run-bundle.v1 (no schema change: a new
|
|
11
|
+
* producer only). Dry run: a contract bundle. The terminal stream is a contract placeholder
|
|
12
|
+
* (stdin disabled, no captured tail, because nothing ran), the subject is declared unpinned, and
|
|
13
13
|
* the caps/policies/runtime-auth declarations are recorded without pretending that live ledgers
|
|
14
14
|
* exist. The shipped live builder fills the same evidence contract. Exported for tests.
|
|
15
15
|
*/
|
|
16
16
|
export function buildTerminalProductBundle(args) {
|
|
17
|
-
const reason = "
|
|
18
|
-
// The terminal stream is a
|
|
19
|
-
// exec output was captured, so the tail is empty and transport stays "snapshot"
|
|
20
|
-
// (captured non-interactive exec output is never an interactive PTY
|
|
21
|
-
//
|
|
17
|
+
const reason = "Dry run: the terminal-product study was declared without creating an E2B sandbox, injecting any key, or spending. This run did not execute an agent or prove live behavior.";
|
|
18
|
+
// The terminal stream is a contract placeholder on the dry-run path: stdin is disabled and no
|
|
19
|
+
// exec output was captured, so the tail is empty and transport stays "snapshot", never "pty"
|
|
20
|
+
// (captured non-interactive exec output is never an interactive PTY). The shipped live builder
|
|
21
|
+
// fills terminal.tail from redacted exec-stream capture.
|
|
22
22
|
const { simulation, stream } = terminalParticipant(args, {
|
|
23
23
|
status: "contract_proof_only",
|
|
24
24
|
reason,
|
|
25
|
-
summary: `
|
|
26
|
-
updatedAt: args.createdAt,
|
|
25
|
+
summary: `Dry-run participant for the terminal agent (${args.actorId}) studying ${args.productName} from public surfaces.`,
|
|
26
|
+
updatedAt: args.run.createdAt,
|
|
27
27
|
stdin: args.stdin,
|
|
28
28
|
tail: "",
|
|
29
29
|
artifacts: [
|
|
@@ -36,43 +36,43 @@ export function buildTerminalProductBundle(args) {
|
|
|
36
36
|
const events = [
|
|
37
37
|
{
|
|
38
38
|
id: "event-000-created",
|
|
39
|
-
at: args.createdAt,
|
|
39
|
+
at: args.run.createdAt,
|
|
40
40
|
level: "info",
|
|
41
41
|
type: "terminal-lab.run.created",
|
|
42
42
|
message: `Created terminal-product lab run for ${args.labId} (actor ${args.actorId}, product ${args.productName}).`,
|
|
43
43
|
},
|
|
44
44
|
participantEvent(TERMINAL_IDS, {
|
|
45
45
|
id: "event-001-subject",
|
|
46
|
-
at: args.createdAt,
|
|
46
|
+
at: args.run.createdAt,
|
|
47
47
|
level: "info",
|
|
48
48
|
type: "terminal-lab.subject.declared",
|
|
49
|
-
//
|
|
50
|
-
//
|
|
49
|
+
// Provenance is recorded or its absence declared. The agent drives public surfaces
|
|
50
|
+
// and nothing is cloned, so the subject provenance is explicitly unpinned; evidence binds to the
|
|
51
51
|
// composed-prompt digest. Public surfaces are recorded (they are public by declaration).
|
|
52
|
-
message: `Subject product declared: ${args.productName}; public surfaces: ${args.publicSurfaces.join(", ")}.
|
|
52
|
+
message: `Subject product declared: ${args.productName}; public surfaces: ${args.publicSurfaces.join(", ")}. humanish did not provision or clone the product, so its provenance is unpinned: a study of public pages has no commit to pin. The evidence is tied to the prompt digest ${args.persona.promptDigest}.`,
|
|
53
53
|
}),
|
|
54
54
|
participantEvent(TERMINAL_IDS, {
|
|
55
55
|
id: "event-002-credentials",
|
|
56
|
-
at: args.createdAt,
|
|
56
|
+
at: args.run.createdAt,
|
|
57
57
|
level: "info",
|
|
58
58
|
type: "terminal-lab.credentials.declared",
|
|
59
|
-
// Names-only evidence
|
|
59
|
+
// Names-only evidence: the runtime-auth channel is declared; no value is ever
|
|
60
60
|
// recorded. The deny-by-default policies are recorded so the credential posture is auditable.
|
|
61
61
|
message: `Runtime auth channel: ${args.runtimeAuth ?? "none declared"} (names only; values never persist; the live engine applies the selected key placement, while this dry-run performs no injection). Credential policies (deny-by-default): allowPrivateRepoAccess=${args.policies.allowPrivateRepoAccess}, allowProviderCredentials=${args.policies.allowProviderCredentials}, allowPaymentCredentials=${args.policies.allowPaymentCredentials}, allowGitHubMutation=${args.policies.allowGitHubMutation}.`,
|
|
62
62
|
}),
|
|
63
63
|
participantEvent(TERMINAL_IDS, {
|
|
64
64
|
id: "event-003-caps",
|
|
65
|
-
at: args.createdAt,
|
|
65
|
+
at: args.run.createdAt,
|
|
66
66
|
level: "info",
|
|
67
67
|
type: "terminal-lab.caps.declared",
|
|
68
|
-
message: `Spend
|
|
68
|
+
message: `Spend, job and time caps: ${capsText}. A live run uses the runtime key only while a cap is in force, and derives its no-spend proof from the recorded cost ledger. This dry run spends $0: it makes no model request.`,
|
|
69
69
|
}),
|
|
70
70
|
participantEvent(TERMINAL_IDS, {
|
|
71
71
|
id: "event-004-contract",
|
|
72
|
-
at: args.createdAt,
|
|
72
|
+
at: args.run.createdAt,
|
|
73
73
|
level: "info",
|
|
74
74
|
type: "terminal-lab.contract.ready",
|
|
75
|
-
message: "Dry-run
|
|
75
|
+
message: "Dry-run bundle ready. Switch scenario.mode to live with the required runtime auth and caps to exercise the in-sandbox agent route, captured exec stream, and declared runtime-auth placement.",
|
|
76
76
|
}),
|
|
77
77
|
];
|
|
78
78
|
const review = {
|
|
@@ -80,15 +80,14 @@ export function buildTerminalProductBundle(args) {
|
|
|
80
80
|
verdict: args.verdict,
|
|
81
81
|
summary: reason,
|
|
82
82
|
gaps: [
|
|
83
|
-
"This dry
|
|
83
|
+
"This dry run did not execute the live in-sandbox agent route; it checks the evidence shape only, not live behavior, scale, or adoption.",
|
|
84
84
|
"No exec-stream, transcript, substrate, cost, or cleanup artifacts were produced because no live session ran; live verification requires those artifacts.",
|
|
85
85
|
],
|
|
86
86
|
};
|
|
87
87
|
return terminalRunBundle(args, {
|
|
88
|
-
mode: args.dryRun ? "dry-run" : "live",
|
|
89
88
|
lifecycle: [
|
|
90
89
|
{
|
|
91
|
-
at: args.createdAt,
|
|
90
|
+
at: args.run.createdAt,
|
|
92
91
|
event: "terminal-lab.run.created",
|
|
93
92
|
message: `Created terminal-product lab run with one in-sandbox agent participant (actor ${args.actorId}, product ${args.productName}).`,
|
|
94
93
|
},
|
|
@@ -96,12 +95,12 @@ export function buildTerminalProductBundle(args) {
|
|
|
96
95
|
simulation,
|
|
97
96
|
stream,
|
|
98
97
|
events,
|
|
99
|
-
redactionNotes: "Dry-run
|
|
98
|
+
redactionNotes: "Dry-run bundle: no sandbox ran, no key was injected, no exec output was captured. The author mission is public-safe committed lab text (redacted defensively); the composed prompt is bound by digest. The shipped live path applies scrubKnownValues then redactText at the capture source before persistence.",
|
|
100
99
|
review,
|
|
101
100
|
});
|
|
102
101
|
}
|
|
103
102
|
/**
|
|
104
|
-
* Build the
|
|
103
|
+
* Build the live terminal-product run bundle (mode "live") from the captured session: the actor
|
|
105
104
|
* trace seam (stream.actor = trace), the substrate-lifecycle events, the terminal stream with the
|
|
106
105
|
* redacted transcript tail, and references to the written evidence artifacts (terminal event
|
|
107
106
|
* stream, transcript, ledgers, actor trace). verifyRun's terminal-product check (gated on
|
|
@@ -115,10 +114,10 @@ export function buildLiveTerminalProductBundle(args) {
|
|
|
115
114
|
: args.trace.status === "timed_out"
|
|
116
115
|
? "timed_out"
|
|
117
116
|
: "failed";
|
|
118
|
-
const
|
|
119
|
-
const tail = (
|
|
117
|
+
const commandItem = args.trace.items.find((item) => item.kind === "command");
|
|
118
|
+
const tail = (commandItem?.command?.outputTail || args.trace.reason).slice(0, 2000);
|
|
120
119
|
// transport "snapshot": the persisted tail is a redacted snapshot of the captured exec output,
|
|
121
|
-
//
|
|
120
|
+
// never an interactive PTY (stdin disabled). The actor trace seam carries the structured evidence.
|
|
122
121
|
const { simulation, stream } = terminalParticipant(args, {
|
|
123
122
|
status: recordStatus,
|
|
124
123
|
reason: args.sessionReason,
|
|
@@ -149,9 +148,9 @@ export function buildLiveTerminalProductBundle(args) {
|
|
|
149
148
|
type: record.event,
|
|
150
149
|
message: record.message,
|
|
151
150
|
}));
|
|
152
|
-
// Surface the no-spend proof as a first-class bundle event so the Observer/review can
|
|
153
|
-
// It is
|
|
154
|
-
// for
|
|
151
|
+
// Surface the no-spend proof as a first-class bundle event so the Observer/review can show it.
|
|
152
|
+
// It is derived from the cost ledger (never asserted): it lists the known-zero lines it vouches
|
|
153
|
+
// for and the unmeasured (null) lines it explicitly cannot vouch for.
|
|
155
154
|
const noSpend = args.ledgers.noSpendProof;
|
|
156
155
|
lifecycleEvents.push(participantEvent(TERMINAL_IDS, {
|
|
157
156
|
id: "event-cost-no-spend-proof",
|
|
@@ -169,8 +168,8 @@ export function buildLiveTerminalProductBundle(args) {
|
|
|
169
168
|
? []
|
|
170
169
|
: [`Agent session ended ${args.trace.status}: ${args.sessionReason}`]),
|
|
171
170
|
...(args.capFailure === undefined ? [] : [args.capFailure]),
|
|
172
|
-
//
|
|
173
|
-
// green run never silently over-claims a fully-proven $0.
|
|
171
|
+
// Measurement gap: the no-spend proof always declares which spend lines it could not measure,
|
|
172
|
+
// so a green run never silently over-claims a fully-proven $0.
|
|
174
173
|
...(noSpend.unmeasuredLines.length > 0
|
|
175
174
|
? [
|
|
176
175
|
`${noSpendLineMeasured(noSpend) ? noSpendNotEstablished(noSpend.maxUsd ?? 0) : "No-spend proof is partial."} ${describeMeasuredSpend(args.ledgers.cost, args.trace.tokenUsage)} An adapter may supply the missing signals through costProbe.`,
|
|
@@ -179,7 +178,6 @@ export function buildLiveTerminalProductBundle(args) {
|
|
|
179
178
|
],
|
|
180
179
|
};
|
|
181
180
|
return terminalRunBundle(args, {
|
|
182
|
-
mode: "live",
|
|
183
181
|
lifecycle: args.ledgers.lifecycle.map((record) => ({
|
|
184
182
|
at: record.at,
|
|
185
183
|
event: record.event,
|
|
@@ -188,7 +186,7 @@ export function buildLiveTerminalProductBundle(args) {
|
|
|
188
186
|
simulation,
|
|
189
187
|
stream,
|
|
190
188
|
events: lifecycleEvents,
|
|
191
|
-
redactionNotes: `Live terminal-product run: the in-sandbox agent's output was captured via commands.run onStdout/onStderr and
|
|
189
|
+
redactionNotes: `Live terminal-product run: the in-sandbox agent's output was captured via commands.run onStdout/onStderr and had known values (including the runtime key) scrubbed, then shape patterns redacted, before anything was stored. ${args.runtimeAuth === "openai-egress" ? `Runtime auth openai-egress: the raw key from ${args.runtimeAuthKeyName} is reserved for E2B's external api.openai.com HTTPS header transform. ${args.ledgers.commandLog.some((command) => command.label === "codex-exec") ? "Codex received an inert CODEX_API_KEY placeholder." : "Codex was not launched."} Any created sandbox retains a spendable OpenAI proxy capability until teardown; additional provider calls may not appear in the Codex usage ledger.` : `Runtime auth openai-env: the runtime key (${args.runtimeAuthKeyName}) was passed only to the codex command, never to sandbox-wide environment variables or metadata; only its name appears in evidence.`} Subject provenance is unpinned (a study of public pages).`,
|
|
192
190
|
review,
|
|
193
191
|
...(args.cost === undefined ? {} : { cost: args.cost }),
|
|
194
192
|
});
|
|
@@ -206,13 +204,13 @@ function terminalParticipant(args, session) {
|
|
|
206
204
|
progress: 100,
|
|
207
205
|
currentStep: session.reason,
|
|
208
206
|
summary: session.summary,
|
|
209
|
-
startedAt: args.createdAt,
|
|
207
|
+
startedAt: args.run.createdAt,
|
|
210
208
|
updatedAt: session.updatedAt,
|
|
211
209
|
});
|
|
212
210
|
const stream = participantStream(TERMINAL_IDS, {
|
|
213
211
|
assignment: participantAssignment({ mission: args.mission }),
|
|
214
212
|
kind: "terminal",
|
|
215
|
-
label: `Terminal agent
|
|
213
|
+
label: `Terminal agent · ${args.labId}`,
|
|
216
214
|
status: session.status,
|
|
217
215
|
transport: "snapshot",
|
|
218
216
|
updatedAt: session.updatedAt,
|
|
@@ -232,31 +230,24 @@ function terminalParticipant(args, session) {
|
|
|
232
230
|
});
|
|
233
231
|
return { simulation, stream };
|
|
234
232
|
}
|
|
235
|
-
/** The run bundle around the
|
|
233
|
+
/** The run bundle around the terminal session: the fields both builders fill the same way. */
|
|
236
234
|
function terminalRunBundle(args, parts) {
|
|
237
235
|
return {
|
|
238
|
-
...bundleHead({
|
|
239
|
-
runId: args.runId,
|
|
240
|
-
mode: parts.mode,
|
|
241
|
-
participants: 1,
|
|
242
|
-
createdAt: args.createdAt,
|
|
243
|
-
...(args.lab === undefined ? {} : { lab: args.lab }),
|
|
244
|
-
source: args.source,
|
|
245
|
-
}),
|
|
236
|
+
...bundleHead(args.run, { participants: 1, source: args.source }),
|
|
246
237
|
persona: {
|
|
247
238
|
id: args.persona.id,
|
|
248
239
|
name: `Autonomous terminal agent (${args.persona.id})`,
|
|
249
|
-
source: `
|
|
240
|
+
source: `study:${args.labId}`,
|
|
250
241
|
sourceDigest: args.persona.promptDigest,
|
|
251
242
|
},
|
|
252
243
|
scenario: {
|
|
253
244
|
id: `terminal-${args.labId}`,
|
|
254
245
|
title: args.labTitle ?? `Terminal-product lab: ${args.labId}`,
|
|
255
|
-
// The author mission is public-safe committed lab text
|
|
246
|
+
// The author mission is public-safe committed lab text. It is recorded plaintext as the goal,
|
|
256
247
|
// redacted defensively before persisting (it never carries a secret, but the harness never
|
|
257
248
|
// trusts that). The full composed prompt is bound by digest, not text.
|
|
258
249
|
goal: redactText(args.mission),
|
|
259
|
-
source: `
|
|
250
|
+
source: `study:${args.labId}`,
|
|
260
251
|
sourceDigest: args.persona.promptDigest,
|
|
261
252
|
},
|
|
262
253
|
lifecycle: parts.lifecycle,
|
|
@@ -291,7 +282,7 @@ export function renderTerminalReviewMarkdown(bundle) {
|
|
|
291
282
|
"",
|
|
292
283
|
`- run: ${bundle.runId}`,
|
|
293
284
|
`- mode: ${bundle.mode}`,
|
|
294
|
-
`- verdict: ${bundle.review.verdict}`,
|
|
285
|
+
`- verdict: ${verdictText(bundle.review.verdict, bundle.mode)}`,
|
|
295
286
|
`- summary: ${bundle.review.summary}`,
|
|
296
287
|
`- mission: ${bundle.scenario.goal}`,
|
|
297
288
|
...(subject ? [`- subject: ${subject.message}`] : []),
|
|
@@ -18,17 +18,17 @@ export declare function buildRuntimeAuth(args: {
|
|
|
18
18
|
keyValue: string;
|
|
19
19
|
} | {
|
|
20
20
|
ok: false;
|
|
21
|
-
code: "
|
|
21
|
+
code: "HUMANISH_TERMINAL_RUNTIME_AUTH_MISSING" | "HUMANISH_TERMINAL_CREDENTIAL_DENIED";
|
|
22
22
|
message: string;
|
|
23
23
|
};
|
|
24
24
|
/**
|
|
25
|
-
* Build the sandbox metadata from a
|
|
26
|
-
* way metadata is set on the terminal
|
|
25
|
+
* Build the sandbox metadata from a positive allowlist. This is the only
|
|
26
|
+
* way metadata is set on the terminal route. It carries solely non-secret labels and rejects any
|
|
27
27
|
* value that is not a plain short label. A verifier check asserts the persisted metadata has no
|
|
28
28
|
* prompt/token/secret shapes; this builder makes that true by construction.
|
|
29
29
|
*/
|
|
30
30
|
export declare function buildSandboxMetadata(allowlist: {
|
|
31
31
|
labId: string;
|
|
32
|
-
|
|
32
|
+
recordId: string;
|
|
33
33
|
runId: string;
|
|
34
34
|
}): Record<string, string>;
|