humanish 0.106.0 → 0.107.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/AGENTS.md +4 -2
- package/ARCHITECTURE.md +17 -16
- package/CHANGELOG.md +24 -0
- package/CONTEXT.md +42 -39
- package/CONTRIBUTING.md +8 -6
- package/README.md +8 -3
- 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.js +2 -1
- 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/qualified-versions.d.ts +31 -4
- package/dist/actors/codex/qualified-versions.js +51 -6
- package/dist/actors/codex/restricted-executable.d.ts +24 -0
- package/dist/actors/codex/restricted-executable.js +97 -22
- package/dist/actors/codex/restricted-launch.d.ts +7 -1
- package/dist/actors/codex/restricted-launch.js +42 -3
- 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 +60 -2
- package/dist/actors/codex/restricted-policy.d.ts +9 -1
- package/dist/actors/codex/restricted-session.d.ts +14 -1
- package/dist/actors/codex/restricted-session.js +50 -17
- 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 +1 -1
- package/dist/actors/computer-use/actor.js +4 -4
- package/dist/actors/computer-use/loop/backstop.js +1 -1
- package/dist/actors/computer-use/loop/ending.d.ts +2 -2
- package/dist/actors/computer-use/loop/ending.js +2 -2
- package/dist/actors/computer-use/loop/spend.d.ts +1 -1
- package/dist/actors/computer-use/loop/spend.js +3 -3
- package/dist/actors/computer-use/loop/trace.js +2 -2
- package/dist/actors/computer-use/loop/types.d.ts +14 -5
- package/dist/actors/computer-use/loop.js +4 -4
- package/dist/actors/computer-use/openai-provider.d.ts +1 -1
- package/dist/actors/computer-use/openai-provider.js +2 -2
- package/dist/actors/contract.d.ts +10 -8
- package/dist/actors/contract.js +7 -1
- package/dist/actors/local-agent/cli.js +1 -1
- package/dist/actors/scripted-browser/actor.d.ts +2 -2
- package/dist/actors/scripted-browser/journey.js +15 -4
- package/dist/actors/scripted-browser/steps.js +18 -0
- package/dist/actors/scripted-browser/types.d.ts +11 -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/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 +31 -12
- 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 +4 -2
- package/dist/cli/commands/comms.js +8 -1
- package/dist/cli/commands/lab-route-computer-use.d.ts +0 -2
- package/dist/cli/commands/lab-route-computer-use.js +26 -14
- package/dist/cli/commands/lab-route-preview.d.ts +1 -3
- package/dist/cli/commands/lab-route-preview.js +3 -4
- 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 +0 -1
- 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 +76 -45
- package/dist/cli/commands/lab-scorer.d.ts +0 -2
- package/dist/cli/commands/lab.js +12 -6
- package/dist/cli/commands/observe.js +22 -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 +10 -8
- package/dist/cli/commands/watch.js +12 -10
- package/dist/cli/doctor.d.ts +3 -0
- package/dist/cli/doctor.js +10 -2
- package/dist/cli/io.d.ts +5 -4
- package/dist/cli/io.js +12 -8
- package/dist/cli/program.js +3 -3
- package/dist/cli/renamed-options.d.ts +11 -0
- package/dist/cli/renamed-options.js +18 -0
- package/dist/cli/telemetry.d.ts +2 -2
- package/dist/cli/telemetry.js +1 -1
- package/dist/comms/capture-surface.d.ts +1 -1
- package/dist/comms/catch-host.d.ts +1 -1
- package/dist/comms/connections.js +4 -4
- package/dist/comms/external-evidence.d.ts +27 -0
- package/dist/comms/external-evidence.js +93 -0
- package/dist/comms/lease-store.js +7 -7
- package/dist/comms/types.js +1 -1
- package/dist/evidence/browser-hygiene.d.ts +1 -1
- package/dist/evidence/browser-hygiene.js +1 -1
- package/dist/evidence/redaction.js +1 -1
- package/dist/evidence/secret-scrub.d.ts +9 -0
- package/dist/evidence/secret-scrub.js +96 -0
- package/dist/feedback/draft.js +7 -9
- package/dist/feedback/export-bundle.js +4 -4
- package/dist/feedback/export.js +9 -9
- package/dist/feedback/feedback.d.ts +1 -1
- package/dist/index.d.ts +3 -6
- package/dist/index.js +3 -6
- package/dist/keys/key-resolution.d.ts +3 -1
- package/dist/keys/key-resolution.js +18 -16
- package/dist/lab/adapter-extension.d.ts +28 -6
- package/dist/lab/adapter-extension.js +65 -126
- package/dist/lab/adapter-scorer-loader.d.ts +25 -5
- package/dist/lab/adapter-scorer-loader.js +24 -0
- package/dist/lab/composition-rules.d.ts +2 -0
- package/dist/lab/composition-rules.js +35 -26
- package/dist/lab/config.js +28 -26
- package/dist/lab/device-presets.d.ts +2 -2
- package/dist/lab/discover.js +1 -3
- package/dist/lab/doctor.d.ts +44 -9
- package/dist/lab/doctor.js +149 -41
- package/dist/lab/init-plan.js +1 -3
- package/dist/lab/keys.js +1 -1
- package/dist/lab/lab-deps.d.ts +85 -0
- package/dist/lab/lab-deps.js +4 -0
- package/dist/lab/parse/actors.js +8 -7
- package/dist/lab/parse/comms.js +3 -2
- package/dist/lab/parse/execution.js +3 -2
- package/dist/lab/parse/subject-state.js +2 -1
- package/dist/lab/parse/subject.js +2 -1
- package/dist/lab/parse/values.d.ts +0 -1
- package/dist/lab/parse/values.js +0 -3
- package/dist/lab/persona-resolve.d.ts +3 -3
- package/dist/lab/persona-resolve.js +4 -4
- package/dist/lab/persona.js +1 -3
- package/dist/lab/plan-base.d.ts +6 -2
- package/dist/lab/plan-base.js +22 -7
- package/dist/lab/plan-participants.d.ts +5 -5
- package/dist/lab/plan-participants.js +2 -2
- package/dist/lab/plan-types.d.ts +33 -7
- package/dist/lab/plan.d.ts +3 -11
- package/dist/lab/plan.js +18 -42
- package/dist/lab/preflight-result.js +0 -2
- package/dist/lab/preflight.d.ts +0 -3
- package/dist/lab/preflight.js +1 -1
- 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 +19 -24
- package/dist/lab/routing.js +14 -47
- package/dist/lab/run-lab-events.d.ts +6 -11
- package/dist/lab/run-lab-events.js +3 -11
- package/dist/lab/run-lab-homes.d.ts +64 -0
- package/dist/lab/run-lab-homes.js +3 -0
- package/dist/lab/run-lab-options.d.ts +12 -66
- package/dist/lab/run-lab-options.js +45 -275
- package/dist/lab/summary.d.ts +9 -4
- package/dist/lab/summary.js +15 -8
- package/dist/lab/types.d.ts +132 -132
- package/dist/lab/validation.d.ts +15 -15
- package/dist/lab/validation.js +28 -28
- package/dist/lab/warnings.js +20 -19
- package/dist/observer/artifact.d.ts +1 -1
- package/dist/observer/artifact.js +3 -3
- package/dist/observer/data.js +2 -2
- package/dist/observer/render.js +2 -2
- package/dist/observer/run-routes.d.ts +1 -1
- package/dist/observer/run-routes.js +5 -5
- package/dist/observer/serve.d.ts +17 -0
- package/dist/observer/serve.js +34 -3
- package/dist/observer-app.html +1 -1
- package/dist/routes/computer-use/bundle-parts.d.ts +1 -1
- package/dist/routes/computer-use/bundle-parts.js +10 -3
- package/dist/routes/computer-use/bundle.d.ts +4 -11
- package/dist/routes/computer-use/bundle.js +9 -15
- 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 +10 -10
- package/dist/routes/computer-use/e2b-desktop/comms.js +11 -14
- package/dist/routes/computer-use/e2b-desktop/desktop.d.ts +2 -2
- package/dist/routes/computer-use/e2b-desktop/desktop.js +4 -7
- package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +13 -13
- package/dist/routes/computer-use/e2b-desktop/fidelity.js +11 -11
- package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +3 -3
- package/dist/routes/computer-use/e2b-desktop/prepare.js +33 -36
- package/dist/routes/computer-use/e2b-desktop/start.d.ts +1 -1
- package/dist/routes/computer-use/e2b-desktop/start.js +24 -23
- 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 +29 -17
- 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 +25 -29
- package/dist/routes/computer-use/{fanout-lanes.js → fanout-records.js} +25 -19
- 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 +19 -27
- package/dist/routes/computer-use/{run-lanes.js → live-phase.js} +14 -13
- 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 +39 -66
- 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} +10 -10
- package/dist/routes/computer-use/{lanes.js → participant-execution.js} +35 -22
- 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 +19 -11
- package/dist/routes/computer-use/participant-model.js +58 -33
- package/dist/routes/computer-use/participant-prompt.d.ts +3 -3
- package/dist/routes/computer-use/participant-prompt.js +4 -4
- package/dist/routes/computer-use/participant-runs.d.ts +6 -6
- package/dist/routes/computer-use/participant-runs.js +8 -8
- package/dist/routes/computer-use/plan.d.ts +21 -29
- package/dist/routes/computer-use/plan.js +59 -65
- package/dist/routes/computer-use/preflight.d.ts +6 -11
- package/dist/routes/computer-use/preflight.js +26 -18
- package/dist/routes/computer-use/rerun-selection.js +10 -6
- package/dist/routes/computer-use/result.d.ts +1 -1
- package/dist/routes/computer-use/result.js +40 -30
- package/dist/routes/computer-use/route.d.ts +3 -4
- package/dist/routes/computer-use/route.js +21 -19
- package/dist/routes/computer-use/self-report.d.ts +2 -2
- package/dist/routes/computer-use/self-report.js +4 -4
- package/dist/routes/computer-use/setup.d.ts +8 -17
- package/dist/routes/computer-use/setup.js +98 -86
- package/dist/routes/computer-use/single-bundle.d.ts +8 -11
- package/dist/routes/computer-use/single-bundle.js +20 -25
- package/dist/routes/computer-use/subject-projection.d.ts +5 -7
- package/dist/routes/computer-use/subject-projection.js +20 -19
- package/dist/routes/computer-use/types.d.ts +169 -211
- package/dist/routes/computer-use/types.js +13 -6
- package/dist/routes/preview.js +0 -1
- package/dist/routes/scripted/bundle.d.ts +3 -6
- package/dist/routes/scripted/bundle.js +11 -16
- package/dist/routes/scripted/plan.d.ts +5 -7
- package/dist/routes/scripted/plan.js +6 -4
- package/dist/routes/scripted/result.d.ts +4 -1
- package/dist/routes/scripted/result.js +10 -6
- package/dist/routes/scripted/route.js +10 -11
- package/dist/routes/scripted/scenario.d.ts +1 -1
- package/dist/routes/scripted/scenario.js +1 -1
- package/dist/routes/scripted/setup.d.ts +3 -2
- package/dist/routes/scripted/setup.js +22 -21
- package/dist/routes/scripted/subject.d.ts +8 -3
- package/dist/routes/scripted/subject.js +11 -6
- package/dist/routes/scripted/surface-records.js +1 -1
- 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 +19 -36
- package/dist/routes/scripted/types.js +1 -2
- package/dist/routes/shared-world/{seat-records.js → bundle-records.js} +8 -8
- package/dist/routes/shared-world/bundle.d.ts +2 -2
- package/dist/routes/shared-world/bundle.js +22 -26
- package/dist/routes/shared-world/checkpoints.d.ts +4 -4
- package/dist/routes/shared-world/checkpoints.js +4 -4
- package/dist/routes/shared-world/comms.d.ts +5 -4
- package/dist/routes/shared-world/comms.js +28 -41
- package/dist/routes/shared-world/external-public.d.ts +5 -5
- package/dist/routes/shared-world/external-public.js +19 -20
- package/dist/routes/shared-world/handoff.d.ts +4 -4
- package/dist/routes/shared-world/handoff.js +50 -50
- package/dist/routes/shared-world/lobby-code.d.ts +5 -5
- package/dist/routes/shared-world/lobby-code.js +13 -13
- package/dist/routes/shared-world/{seats.d.ts → participant-specs.d.ts} +8 -6
- package/dist/routes/shared-world/{seats.js → participant-specs.js} +46 -51
- package/dist/routes/shared-world/plan.d.ts +2 -6
- package/dist/routes/shared-world/plan.js +1 -2
- 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 +48 -41
- package/dist/routes/shared-world/result.js +31 -19
- package/dist/routes/shared-world/route.js +37 -41
- package/dist/routes/shared-world/setup.d.ts +5 -4
- package/dist/routes/shared-world/setup.js +12 -14
- package/dist/routes/shared-world/types.d.ts +53 -126
- package/dist/routes/shared-world/types.js +2 -2
- package/dist/routes/terminal/adapter.d.ts +8 -8
- package/dist/routes/terminal/adapter.js +28 -125
- package/dist/routes/terminal/bundle.d.ts +7 -12
- package/dist/routes/terminal/bundle.js +24 -34
- package/dist/routes/terminal/credentials.d.ts +2 -2
- package/dist/routes/terminal/credentials.js +16 -16
- package/dist/routes/terminal/dry-run.d.ts +1 -1
- package/dist/routes/terminal/dry-run.js +9 -11
- package/dist/routes/terminal/encoding.d.ts +1 -1
- package/dist/routes/terminal/encoding.js +2 -2
- package/dist/routes/terminal/ledger.d.ts +6 -6
- package/dist/routes/terminal/ledger.js +9 -9
- package/dist/routes/terminal/live-finish.d.ts +1 -2
- package/dist/routes/terminal/live-finish.js +21 -20
- package/dist/routes/terminal/live-sandbox.d.ts +4 -2
- package/dist/routes/terminal/live-sandbox.js +25 -21
- package/dist/routes/terminal/participant-text.d.ts +23 -0
- package/dist/routes/terminal/participant-text.js +165 -0
- package/dist/routes/terminal/plan.d.ts +2 -6
- package/dist/routes/terminal/plan.js +13 -9
- package/dist/routes/terminal/recorder.d.ts +6 -1
- package/dist/routes/terminal/recorder.js +12 -4
- package/dist/routes/terminal/result.js +4 -4
- package/dist/routes/terminal/route.js +26 -26
- package/dist/routes/terminal/runtime.d.ts +3 -2
- package/dist/routes/terminal/runtime.js +3 -3
- package/dist/routes/terminal/sandbox.d.ts +5 -3
- package/dist/routes/terminal/sandbox.js +13 -16
- package/dist/routes/terminal/session.js +16 -14
- package/dist/routes/terminal/token-usage.js +5 -5
- package/dist/routes/terminal/trace.d.ts +5 -8
- package/dist/routes/terminal/trace.js +9 -64
- package/dist/routes/terminal/types.d.ts +85 -93
- package/dist/routes/terminal/types.js +9 -4
- 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 +4 -4
- package/dist/run/bundle.d.ts +63 -56
- package/dist/run/bundle.js +9 -8
- package/dist/run/cost-summary.js +3 -2
- package/dist/run/costs.d.ts +6 -6
- package/dist/run/costs.js +10 -10
- package/dist/run/detail.d.ts +5 -5
- package/dist/run/detail.js +6 -6
- package/dist/run/dry-run.js +5 -12
- 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 +16 -4
- package/dist/run/judge.js +24 -7
- 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.js +1 -1
- package/dist/run/pricing.d.ts +19 -9
- package/dist/run/pricing.js +30 -18
- package/dist/run/projection.d.ts +13 -13
- package/dist/run/projection.js +8 -8
- package/dist/run/reclaim.d.ts +7 -1
- package/dist/run/reclaim.js +24 -4
- package/dist/run/results.d.ts +1 -1
- package/dist/run/run-index.d.ts +1 -1
- package/dist/run/run-index.js +11 -11
- package/dist/run/run.d.ts +4 -2
- package/dist/run/run.js +9 -5
- package/dist/run/sandbox-receipts.d.ts +4 -4
- package/dist/run/sandbox-receipts.js +4 -4
- package/dist/run/shared-world-evidence.d.ts +47 -47
- package/dist/run/shared-world-shape.d.ts +3 -3
- package/dist/run/shared-world-shape.js +11 -11
- package/dist/run/stats.d.ts +5 -5
- package/dist/run/stats.js +8 -8
- package/dist/run/status.d.ts +16 -6
- package/dist/run/status.js +31 -8
- package/dist/run/streams.d.ts +26 -19
- package/dist/run/terminal-contract.d.ts +5 -5
- package/dist/run/terminal-contract.js +4 -4
- 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 +36 -34
- package/dist/run-lab.js +41 -37
- package/dist/subject/desktop-cli.d.ts +1 -1
- package/dist/subject/desktop-cli.js +1 -1
- package/dist/subject/local-tree-archive.d.ts +1 -1
- package/dist/subject/local-tree-archive.js +4 -4
- package/dist/subject/local-tree.d.ts +2 -2
- 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 +5 -5
- package/dist/subject/serve.js +1 -1
- package/dist/subject/steps.d.ts +4 -4
- package/dist/subject/steps.js +5 -5
- package/dist/substrates/desktop-session.d.ts +2 -0
- package/dist/substrates/e2b/cdp-probe.d.ts +2 -2
- package/dist/substrates/e2b/cdp-probe.js +1 -1
- package/dist/substrates/e2b/desktop-browser.d.ts +3 -3
- package/dist/substrates/e2b/desktop-browser.js +4 -4
- package/dist/substrates/e2b/desktop-cdp.d.ts +7 -7
- package/dist/substrates/e2b/desktop-cdp.js +4 -4
- package/dist/substrates/e2b/desktop-geometry.d.ts +4 -4
- package/dist/substrates/e2b/desktop-geometry.js +3 -3
- package/dist/substrates/e2b/desktop-media.js +2 -2
- package/dist/substrates/e2b/sandbox.d.ts +2 -0
- package/dist/substrates/e2b/sandbox.js +22 -8
- package/dist/substrates/e2b/sdk.d.ts +12 -1
- package/dist/substrates/e2b/sdk.js +30 -9
- 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 +7 -5
- package/dist/tui/actions.js +18 -9
- package/dist/tui-app.js +42 -42
- package/dist/verify/actor.d.ts +10 -10
- package/dist/verify/actor.js +15 -15
- package/dist/verify/artifacts.d.ts +1 -1
- package/dist/verify/artifacts.js +3 -3
- package/dist/verify/costs.d.ts +2 -2
- package/dist/verify/costs.js +2 -2
- 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.js +2 -2
- package/dist/verify/verify.js +6 -6
- package/docs/README.md +1 -1
- package/docs/architecture/actor-contract.md +60 -22
- package/docs/architecture/desktop-sessions.md +9 -9
- package/docs/architecture/external-public-shared-world.md +5 -0
- package/docs/architecture/observer.md +4 -4
- package/docs/architecture/restricted-codex-analysis.md +40 -4
- package/docs/architecture/state-driven-executor.md +4 -5
- package/docs/architecture/task-protocol-support.md +3 -5
- package/docs/architecture/{terminal-product-lane.md → terminal-product-route.md} +24 -16
- package/docs/contracts/run-bundle.md +10 -8
- package/docs/contracts/schemas.md +109 -53
- package/docs/contracts/study-analysis.md +24 -0
- package/docs/decisions/0004-participant-desktops-stay-in-the-route.md +2 -1
- package/docs/product/automatic-analysis.md +1 -0
- package/docs/ramp/README.md +2 -1
- package/package.json +4 -4
- package/skills/humanish/SKILL.md +3 -2
- package/skills/humanish/agents/openai.yaml +1 -1
- 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/routes/computer-use/legacy-lane-spec.d.ts +0 -62
- package/dist/routes/computer-use/legacy-lane-spec.js +0 -39
- /package/dist/routes/computer-use/{fanout-lanes.d.ts → fanout-records.d.ts} +0 -0
- /package/dist/routes/computer-use/{run-lanes.d.ts → live-phase.d.ts} +0 -0
- /package/dist/routes/shared-world/{seat-records.d.ts → bundle-records.d.ts} +0 -0
|
@@ -1,22 +1,19 @@
|
|
|
1
|
+
import type { LabDeps } from "../../lab/lab-deps.js";
|
|
2
|
+
import type { LabEvent } from "../../lab/run-lab-events.js";
|
|
3
|
+
import type { RunLabHomes } from "../../lab/run-lab-homes.js";
|
|
1
4
|
import type { SharedWorldJudgment } from "../../run/judge.js";
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
import type { BrowserLabAdapterHooks } from "../../lab/adapter-extension.js";
|
|
5
|
-
import type { SubjectPhaseEvent } from "../../subject/steps.js";
|
|
6
|
-
import type { DetachedTimers } from "../../substrates/detached.js";
|
|
7
|
-
import type { E2BDesktopModule, E2BDesktopSandbox } from "../../substrates/e2b/sdk.js";
|
|
8
|
-
import type { AutomaticAnalysisHooks, AutomaticAnalysisResult } from "../../analysis/automatic-completion.js";
|
|
5
|
+
import type { BrowserScorer } from "../../lab/adapter-extension.js";
|
|
6
|
+
import type { AutomaticAnalysisResult } from "../../analysis/automatic-completion.js";
|
|
9
7
|
import type { CuaActorDescriptor } from "../../actors/registry.js";
|
|
10
8
|
import type { CommsReceivingRun } from "../../comms/receiving.js";
|
|
11
9
|
import type { LabCommsEmail, LabCommsExternal, LabConfig } from "../../lab/types.js";
|
|
12
10
|
import type { DesktopResourceObservation } from "../../substrates/e2b/desktop-resources.js";
|
|
13
|
-
import type { ObserverResult
|
|
11
|
+
import type { ObserverResult } from "../../observer/render.js";
|
|
14
12
|
import type { ObserverRuntimeStreamUrl } from "../../observer/run-routes.js";
|
|
15
|
-
import type { RunBundle, RunScorerProvenance, RunSubjectProvenance, RunSubjectStateStepRecord } from "../../run/bundle.js";
|
|
13
|
+
import type { BundleRun, RunBundle, RunScorerProvenance, RunSubjectProvenance, RunSubjectStateStepRecord } from "../../run/bundle.js";
|
|
16
14
|
import type { RunScope } from "../../run/run.js";
|
|
17
15
|
import type { SharedWorldStateSnapshot } from "../../run/shared-world-evidence.js";
|
|
18
16
|
import type { LocalTreeArchive } from "../../subject/local-tree-archive.js";
|
|
19
|
-
import type { RunLabProvenance } from "../../run/status.js";
|
|
20
17
|
import type { LiveTraceFlush } from "../computer-use/live-flush.js";
|
|
21
18
|
import type { CuaParticipantDeps, DesktopParticipantRun, CuaRunBudget, ParticipantRunOutcome } from "../computer-use/types.js";
|
|
22
19
|
import type { ProvisionedPlaneSetup } from "./provisioned.js";
|
|
@@ -28,9 +25,8 @@ export declare const CONCURRENT_SHARED_WORLD_PROVIDER_METADATA: {
|
|
|
28
25
|
};
|
|
29
26
|
export declare const CONCURRENT_ATTRIBUTION_LIMITS: readonly ["concurrent", "best-effort-causal-attribution", "non-deterministic-shared-state", "window-and-snapshot-granularity", "contention-observed-not-proven-safe", "state-change-not-isolated-to-actors"];
|
|
30
27
|
export interface RunConcurrentSharedWorldLabOptions {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
lab?: RunLabProvenance;
|
|
28
|
+
/** Cancels post-run analysis only. */
|
|
29
|
+
analysisSignal?: AbortSignal;
|
|
34
30
|
cwd: string;
|
|
35
31
|
config: LabConfig;
|
|
36
32
|
/** Resolved upstream (scenario.mode + CLI override); defaults safe (dry-run). */
|
|
@@ -40,27 +36,44 @@ export interface RunConcurrentSharedWorldLabOptions {
|
|
|
40
36
|
onObserverReady?: (observer: ObserverResult & {
|
|
41
37
|
ok: true;
|
|
42
38
|
}) => Promise<void> | void;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
39
|
+
/** Keys and subject env for the run. Defaults to process.env. */
|
|
40
|
+
env?: Readonly<Record<string, string | undefined>>;
|
|
41
|
+
/**
|
|
42
|
+
* Runs after a sandbox exists and before anything is provisioned on it: the provisioned plane's
|
|
43
|
+
* subject sandbox, then each seat's desktop. The external-public plane has seats only.
|
|
44
|
+
*/
|
|
45
|
+
prepareDesktop?: NonNullable<RunLabHomes["prepareDesktop"]>;
|
|
46
|
+
/** Awaited after a participant's live stream starts, and again after its sandbox is gone. */
|
|
47
|
+
onStream?: NonNullable<RunLabHomes["onStream"]>;
|
|
48
|
+
/** Reports subject phases to onEvent; built by normalizeRunLabOptions. */
|
|
49
|
+
emit?: (event: LabEvent) => void;
|
|
50
|
+
/** Test seams. */
|
|
51
|
+
deps?: LabDeps;
|
|
52
|
+
/** Scores the assembled evidence: `RunLabOptions.scorer`, or the scorer the CLI loads. */
|
|
53
|
+
scorer?: BrowserScorer;
|
|
54
|
+
/** Present only when the scorer was CONFIG-DECLARED and loaded by the CLI (#316);
|
|
55
|
+
* core-stamped onto the bundle as evidence. Absent for library callers. */
|
|
46
56
|
scorerProvenance?: RunScorerProvenance;
|
|
47
57
|
}
|
|
48
58
|
/** What a shared-world run takes besides its plan. The plan carries the config, dry run and lab. */
|
|
49
59
|
export type SharedWorldRunInput = Omit<RunConcurrentSharedWorldLabOptions, "config" | "dryRun" | "lab">;
|
|
50
|
-
export type ConcurrentSharedWorldLabErrorCode = "HUMANISH_LAB_ANALYSIS_INVALID" | "HUMANISH_LAB_TASKS_UNSUPPORTED" | "
|
|
51
|
-
/** A local-agent brain's CLI is not on PATH
|
|
60
|
+
export type ConcurrentSharedWorldLabErrorCode = "HUMANISH_LAB_ANALYSIS_INVALID" | "HUMANISH_LAB_TASKS_UNSUPPORTED" | "HUMANISH_LAB_OPTION_UNSUPPORTED" | "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_FAILED" | "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_ACTOR_UNSUPPORTED" | "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_INVALID" | "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_KEYS_MISSING"
|
|
61
|
+
/** A local-agent brain's CLI is not on `PATH`. */
|
|
52
62
|
| "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_AGENT_MISSING"
|
|
53
63
|
/** A local-agent brain's CLI is signed out, or could not report its sign-in status. */
|
|
54
64
|
| "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_AGENT_SIGNIN_REQUIRED"
|
|
55
65
|
/** A dollar cap that cannot be priced: an unpriced model, or a ChatGPT-account Codex brain. */
|
|
56
66
|
| "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_UNPRICED_CAP" | "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_SUBJECT_ENV_MISSING" | "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_GETHOST_UNAVAILABLE" | "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_HANDOFF_TIMEOUT" | "HUMANISH_RUN_ID_IN_USE"
|
|
57
67
|
/** A declared adopter-hosted comms catch (#328) did not answer as a humanish catch — fail closed
|
|
58
|
-
*
|
|
59
|
-
| "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_COMMS_CATCH_UNREACHABLE"
|
|
68
|
+
* before any actor spend, since the funnel would silently collect nothing. */
|
|
69
|
+
| "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_COMMS_CATCH_UNREACHABLE"
|
|
70
|
+
/** comms.email.external.authTokenEnv names a token shorter than MIN_CATCH_TOKEN_LENGTH or not
|
|
71
|
+
* well-formed Unicode (src/comms/external-evidence.ts). Refused before the catch is probed. */
|
|
72
|
+
| "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_COMMS_TOKEN_INVALID";
|
|
60
73
|
/** The two plane classes of the concurrent shared-world route (#164 phase 2). */
|
|
61
74
|
export type ConcurrentSharedWorldPlaneClass = "provisioned-getHost" | "external-public";
|
|
62
75
|
export declare const EXTERNAL_PUBLIC_ATTRIBUTION_LIMITS: readonly ["concurrent", "best-effort-causal-attribution", "non-deterministic-shared-state", "window-and-snapshot-granularity", "contention-observed-not-proven-safe", "state-change-not-isolated-to-actors", "external-public-plane", "operator-attested-target-not-harness-controlled", "no-synthetic-attestation", "no-authoritative-shared-state-proof", "concurrency-by-temporal-co-occupancy-only"];
|
|
63
|
-
/** One persona's
|
|
76
|
+
/** One persona's outcome against the contended world (the "M of N" headline). */
|
|
64
77
|
export interface ConcurrentSharedWorldParticipantResult {
|
|
65
78
|
id: string;
|
|
66
79
|
index: number;
|
|
@@ -96,7 +109,7 @@ export interface ConcurrentSharedWorldLabResult extends AutomaticAnalysisResult
|
|
|
96
109
|
actor: string;
|
|
97
110
|
topology: "shared-world";
|
|
98
111
|
topologyMode: "concurrent";
|
|
99
|
-
/** The
|
|
112
|
+
/** The declared number of personas. */
|
|
100
113
|
roleCount: number;
|
|
101
114
|
/** Effective in-flight bound (execution.concurrency). */
|
|
102
115
|
concurrency: number;
|
|
@@ -104,17 +117,17 @@ export interface ConcurrentSharedWorldLabResult extends AutomaticAnalysisResult
|
|
|
104
117
|
runId: string;
|
|
105
118
|
/** The harness-minted getHost URL the actors drove (tokenless; live only). */
|
|
106
119
|
host?: string;
|
|
107
|
-
/** The
|
|
120
|
+
/** The one subject sandbox lifecycle proof. */
|
|
108
121
|
subjectSandbox?: {
|
|
109
122
|
sandboxId: string;
|
|
110
123
|
killed: boolean;
|
|
111
124
|
};
|
|
112
125
|
/** Whether ≥2 actor windows overlapped in time (proven concurrency; live only). */
|
|
113
126
|
overlapProven?: boolean;
|
|
114
|
-
/** Max
|
|
115
|
-
* 6-
|
|
127
|
+
/** Max participants observed live at the same instant (live only) — the honest simultaneity number; a
|
|
128
|
+
* 6-participant run capped at 3 reports 3 here, never 6 (#350). */
|
|
116
129
|
maxSimultaneousLanes?: number;
|
|
117
|
-
/** Subject provenance (invariant 5): the
|
|
130
|
+
/** Subject provenance (invariant 5): the one shared plane. */
|
|
118
131
|
subject?: RunSubjectProvenance;
|
|
119
132
|
roles: ConcurrentSharedWorldParticipantResult[];
|
|
120
133
|
observer?: ObserverResult;
|
|
@@ -145,11 +158,12 @@ type StartedRun = Extract<Awaited<ReturnType<RunScope["startRun"]>>, {
|
|
|
145
158
|
export interface PlaneContext {
|
|
146
159
|
plan: SharedWorldPlan;
|
|
147
160
|
input: SharedWorldRunInput;
|
|
148
|
-
/** Read
|
|
149
|
-
*
|
|
161
|
+
/** Read for the subject's serve URL, which each seat's subject names. Seats, their count and
|
|
162
|
+
* their host and entry come from the plan's participants. */
|
|
150
163
|
config: LabConfig;
|
|
151
164
|
descriptor: CuaActorDescriptor;
|
|
152
|
-
|
|
165
|
+
/** The run's test seams; empty outside tests. */
|
|
166
|
+
deps: LabDeps;
|
|
153
167
|
env: Record<string, string | undefined>;
|
|
154
168
|
concurrency: number;
|
|
155
169
|
runBudget: CuaRunBudget | undefined;
|
|
@@ -157,6 +171,8 @@ export interface PlaneContext {
|
|
|
157
171
|
openaiApiKey: string;
|
|
158
172
|
e2bApiKey: string;
|
|
159
173
|
scrubKnownValues: (text: string) => string;
|
|
174
|
+
/** The values scrubKnownValues removes. Real email receiving adds its secrets before seats start. */
|
|
175
|
+
knownSecretValues: readonly string[];
|
|
160
176
|
cwd: string;
|
|
161
177
|
run: StartedRun;
|
|
162
178
|
runId: string;
|
|
@@ -176,7 +192,7 @@ export interface PlaneContext {
|
|
|
176
192
|
}
|
|
177
193
|
/**
|
|
178
194
|
* What the seats feed while they run. A plane sets the attached Observer and starts the trace
|
|
179
|
-
* flush;
|
|
195
|
+
* flush; each seat's onStream appends stream URLs; the orchestrator reads all three at finish.
|
|
180
196
|
*/
|
|
181
197
|
export interface LiveParticipants {
|
|
182
198
|
observer?: ObserverResult & {
|
|
@@ -195,14 +211,12 @@ export interface ExternalCommsWiring {
|
|
|
195
211
|
export interface ConcurrentBundleArgs {
|
|
196
212
|
/** The run's judgment (judgeSharedWorldRun over the other fields). */
|
|
197
213
|
judgment: SharedWorldJudgment;
|
|
198
|
-
/**
|
|
199
|
-
|
|
214
|
+
/** The run this bundle belongs to; the bundle head reads its id, mode, start and lab. */
|
|
215
|
+
run: BundleRun;
|
|
200
216
|
plan: SharedWorldPlan;
|
|
201
217
|
descriptor: CuaActorDescriptor;
|
|
202
|
-
createdAt: string;
|
|
203
218
|
dryRun: boolean;
|
|
204
219
|
inProgress?: boolean;
|
|
205
|
-
runId: string;
|
|
206
220
|
source: RunBundle["source"];
|
|
207
221
|
actorSpecs: DesktopParticipantRun[];
|
|
208
222
|
actorResults: ActorRunResult[];
|
|
@@ -213,15 +227,15 @@ export interface ConcurrentBundleArgs {
|
|
|
213
227
|
hostDigest?: string;
|
|
214
228
|
/** Run-level digest-only comms-thread evidence path (humanish.comms-thread.v1), when a comms lab
|
|
215
229
|
* captured mail into the subject sandbox's catch. Registered on the first persona stream (it is a
|
|
216
|
-
* property of the
|
|
230
|
+
* property of the one shared app, and belongs to no single persona). */
|
|
217
231
|
commsArtifactPath?: string;
|
|
218
232
|
/** #164 phase 2: the plane-class discriminator (default provisioned-getHost, byte-stable). */
|
|
219
233
|
planeClass?: ConcurrentSharedWorldPlaneClass;
|
|
220
|
-
/** external-public only: sha256-16 of the
|
|
234
|
+
/** external-public only: sha256-16 of the observed origin the seats converged on (the convergence
|
|
221
235
|
* proof — what the seats actually reached, tolerant of a declared->observed redirect). */
|
|
222
236
|
publicOriginDigest?: string;
|
|
223
237
|
/** external-public only: sha256-16 of the operator-DECLARED plane origin (evidence/reference only;
|
|
224
|
-
*
|
|
238
|
+
* never asserted equal to the observed origin, since a cross-origin redirect is normal). */
|
|
225
239
|
declaredOriginDigest?: string;
|
|
226
240
|
/** external-public only: sha256-16 of the shared /lobby/CODE path all seats converged on. */
|
|
227
241
|
lobbyConvergenceDigest?: string;
|
|
@@ -236,6 +250,8 @@ export interface PlaneResults {
|
|
|
236
250
|
subjectCommit: string | undefined;
|
|
237
251
|
subjectSandboxId: string | undefined;
|
|
238
252
|
subjectKilled: boolean;
|
|
253
|
+
/** The subject sandbox's scrubbed release warning when its release is unconfirmed. */
|
|
254
|
+
subjectReleaseWarning: string | undefined;
|
|
239
255
|
subjectDesktop: SubjectDesktopUsage | undefined;
|
|
240
256
|
getHostUrl: string | undefined;
|
|
241
257
|
publicOriginDigest: string | undefined;
|
|
@@ -262,93 +278,4 @@ export interface FinishFacts {
|
|
|
262
278
|
stateSnapshots: SharedWorldStateSnapshot[];
|
|
263
279
|
declaredOriginDigest: string | undefined;
|
|
264
280
|
}
|
|
265
|
-
/**
|
|
266
|
-
* Library-level hooks mirroring CuaActorLabHooks — the DI seams that let CI drive the FULL
|
|
267
|
-
* orchestration with fakes at $0/zero-network. The fake desktop module records create/kill BY id
|
|
268
|
-
* and exposes NO `list` method (the by-id teardown rail is then provable by construction).
|
|
269
|
-
*/
|
|
270
|
-
export interface SharedWorldLabHooks extends BrowserLabAdapterHooks {
|
|
271
|
-
/** Lazy-load the E2B desktop module (tests inject a fake; default loadE2BDesktopModule). */
|
|
272
|
-
loadDesktopModule?: () => Promise<E2BDesktopModule>;
|
|
273
|
-
/**
|
|
274
|
-
* Runs after a sandbox is created and before anything is provisioned on it. The provisioned
|
|
275
|
-
* plane calls it for the subject sandbox with no lane, then for each seat's desktop with its lane;
|
|
276
|
-
* the external-public plane calls it for the seats only.
|
|
277
|
-
*/
|
|
278
|
-
prepareDesktop?: (desktop: E2BDesktopSandbox, lane?: {
|
|
279
|
-
laneId: string;
|
|
280
|
-
laneIndex: number;
|
|
281
|
-
laneCount: number;
|
|
282
|
-
}) => Promise<void>;
|
|
283
|
-
/**
|
|
284
|
-
* Awaited after a seat's live desktop stream starts. The URL carries an auth key and must never
|
|
285
|
-
* be persisted. A rejection becomes a run warning, as on the computer-use route.
|
|
286
|
-
*/
|
|
287
|
-
onRuntimeStreamReady?: (stream: {
|
|
288
|
-
laneId: string;
|
|
289
|
-
sandboxId: string;
|
|
290
|
-
simId: string;
|
|
291
|
-
streamId: string;
|
|
292
|
-
url: string;
|
|
293
|
-
}) => Promise<void> | void;
|
|
294
|
-
/** Awaited after a seat's sandbox is gone, for seats whose stream started. Rejections are swallowed. */
|
|
295
|
-
onRuntimeStreamEnded?: (stream: {
|
|
296
|
-
laneId: string;
|
|
297
|
-
simId: string;
|
|
298
|
-
streamId: string;
|
|
299
|
-
}) => Promise<void> | void;
|
|
300
|
-
/** The per-seat computer-use session runner (default: the resolved actor descriptor's). */
|
|
301
|
-
runSession?: (options: CuaActorSessionOptions) => Promise<CuaLoopResult>;
|
|
302
|
-
/** The operator environment (keys + subject env values). Defaults to process.env. */
|
|
303
|
-
env?: Record<string, string | undefined>;
|
|
304
|
-
renderObserverFn?: typeof renderObserver;
|
|
305
|
-
/** Injected clock/sleep for the detached-step polling (tests only). */
|
|
306
|
-
detachedTimers?: DetachedTimers;
|
|
307
|
-
/**
|
|
308
|
-
* Subject-provisioning phase sink (mirrors CuaActorLabHooks.onPhase): one call per
|
|
309
|
-
* started/completed boundary during the ONE shared-plane provision (clone route: clone, install,
|
|
310
|
-
* build, serve start, ready, subject.state seed-step groups; local-tree route: upload, extract,
|
|
311
|
-
* install, build, serve start, ready, seed-step groups - no clone phase). Defaults to one stderr
|
|
312
|
-
* line per event. Override in tests to capture instead of writing to real stderr.
|
|
313
|
-
*/
|
|
314
|
-
onPhase?: (event: SubjectPhaseEvent) => void;
|
|
315
|
-
/**
|
|
316
|
-
* CONCURRENT route only (#164 phase 2): the harness clock used to MEASURE each actor's laneWindow
|
|
317
|
-
* [start,end] (default Date.now). The deterministic heart test does NOT override this — overlap is
|
|
318
|
-
* produced by a rendezvous latch in the fake runSession + measured by the REAL clock (FIX-1), so
|
|
319
|
-
* the windows are real, not injected. (A test may override only for non-overlap assertions.)
|
|
320
|
-
*/
|
|
321
|
-
now?: () => number;
|
|
322
|
-
/** CONCURRENT route only: the background stateSeries prober cadence (ms). Default 1000. */
|
|
323
|
-
proberCadenceMs?: number;
|
|
324
|
-
/**
|
|
325
|
-
* EXTERNAL-PUBLIC concurrent route only (#164 phase 2): the host-first handoff barrier deadline
|
|
326
|
-
* (ms). The host seat must surface a shared-session (/lobby/CODE) URL within this budget or the run
|
|
327
|
-
* fails closed with HUMANISH_CONCURRENT_SHARED_WORLD_LAB_HANDOFF_TIMEOUT and no follower opens.
|
|
328
|
-
* Default 120000 (also capped by execution.timeoutMs). Tests inject a short value to exercise the
|
|
329
|
-
* fail-closed path deterministically.
|
|
330
|
-
*/
|
|
331
|
-
handoffDeadlineMs?: number;
|
|
332
|
-
/**
|
|
333
|
-
* EXTERNAL-PUBLIC concurrent route only: the vision reader that extracts a /lobby/CODE off a seat's
|
|
334
|
-
* screenshot frame (the CDP-independent handoff relay + per-seat convergence observation). Defaults to
|
|
335
|
-
* the real single-frame OpenAI read (readLobbyCodeFromFrame). Tests inject a fake so the barrier's
|
|
336
|
-
* handoff + convergence proof can be exercised deterministically without a live vision call.
|
|
337
|
-
*/
|
|
338
|
-
readLobbyCodeFromFrame?: (frame: Buffer, apiKey: string) => Promise<string | undefined>;
|
|
339
|
-
/**
|
|
340
|
-
* Local-tree packing DI seam (tests only, no npm dependency needed to exercise the route):
|
|
341
|
-
* defaults to createLocalTreeArchive(root, opts) plus a host-side read of the produced archive
|
|
342
|
-
* file into an ArrayBuffer (the SAME default routes/computer-use/route.ts uses). Called ONCE per run, before
|
|
343
|
-
* the ONE shared-plane sandbox is created, on the live local-tree route.
|
|
344
|
-
*/
|
|
345
|
-
packLocalTree?: (args: {
|
|
346
|
-
root: string;
|
|
347
|
-
extraExclude?: string[];
|
|
348
|
-
maxArchiveBytes?: number;
|
|
349
|
-
}) => Promise<{
|
|
350
|
-
archive: LocalTreeArchive;
|
|
351
|
-
buffer: ArrayBuffer;
|
|
352
|
-
}>;
|
|
353
|
-
}
|
|
354
281
|
export {};
|
|
@@ -5,7 +5,7 @@ export const CONCURRENT_SHARED_WORLD_PROVIDER_METADATA = {
|
|
|
5
5
|
mode: "concurrent-shared-world-lab",
|
|
6
6
|
tool: "humanish",
|
|
7
7
|
};
|
|
8
|
-
// The verify-enforced
|
|
8
|
+
// The verify-enforced concurrent attribution ceiling. Mirrored in
|
|
9
9
|
// verify/shared-world-concurrent.ts CONCURRENT_REQUIRED_LIMITS.
|
|
10
10
|
export const CONCURRENT_ATTRIBUTION_LIMITS = [
|
|
11
11
|
"concurrent",
|
|
@@ -16,7 +16,7 @@ export const CONCURRENT_ATTRIBUTION_LIMITS = [
|
|
|
16
16
|
"state-change-not-isolated-to-actors",
|
|
17
17
|
];
|
|
18
18
|
// EXTERNAL-PUBLIC plane class: the honest-downgrade attribution ceiling. The concurrent family
|
|
19
|
-
// (an honest ceiling)
|
|
19
|
+
// (an honest ceiling) plus the mandatory external-public disclosures, mirrored in the required
|
|
20
20
|
// set in verify/shared-world-concurrent.ts (CONCURRENT_ATTRIBUTION_LIMITS +
|
|
21
21
|
// EXTERNAL_PUBLIC_EXTRA_LIMITS). Verify fails closed on a missing one.
|
|
22
22
|
export const EXTERNAL_PUBLIC_ATTRIBUTION_LIMITS = [
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import type { ActorTrace } from "../../actors/contract.js";
|
|
2
2
|
import { type RunBundle, type RunScorerProvenance } from "../../run/bundle.js";
|
|
3
3
|
import { type ScorerOutcome } from "../../lab/adapter-extension.js";
|
|
4
|
-
import type { TerminalLedgers,
|
|
4
|
+
import type { TerminalLedgers, TerminalScorer } from "./types.js";
|
|
5
5
|
/**
|
|
6
6
|
* Run the layer-6 product-adapter extension seam (issue #154 acceptance #8) over the assembled
|
|
7
|
-
* evidence and attach its results to the bundle
|
|
7
|
+
* evidence and attach its results to the bundle in place, without core knowing any product noun.
|
|
8
8
|
* The review is not touched here: the returned failures are folded into it by the caller.
|
|
9
9
|
*
|
|
10
10
|
* - `score`: when present, the returned namespaced `RunAdapterScore` lands on `bundle.adapterScore`.
|
|
11
|
-
* For a
|
|
12
|
-
* failure. For a
|
|
13
|
-
* failure (the keystone
|
|
14
|
-
* that
|
|
11
|
+
* For a library caller (no `scorerProvenance`), the adapter score is additive and never a
|
|
12
|
+
* failure. For a config-declared scorer (#316; `scorerProvenance` present), a status:"fail" is a
|
|
13
|
+
* failure (the keystone route is the product's own definition of pass/fail), and so is a scorer
|
|
14
|
+
* that throws or returns a malformed value, so a crashed declared gate is never a silent green.
|
|
15
15
|
* - `deriveFeedback`: when present, the returned candidates are appended to
|
|
16
16
|
* `bundle.feedbackCandidates`; each carries its own namespaced `adapter` product-noun block.
|
|
17
17
|
*
|
|
18
18
|
* 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
|
|
19
|
+
* redact, and any candidate / score that does not satisfy core's exported shape is dropped with a
|
|
20
20
|
* warning (a malformed adapter output never poisons a verifiable bundle). The bundle verifier
|
|
21
21
|
* re-checks the surviving shapes downstream, so the seam stays fail-closed end to end.
|
|
22
22
|
*/
|
|
23
23
|
export declare function applyAdapterExtensionSeam(args: {
|
|
24
|
-
|
|
24
|
+
scorer: TerminalScorer | undefined;
|
|
25
25
|
bundle: RunBundle;
|
|
26
26
|
trace: ActorTrace;
|
|
27
27
|
ledgers: TerminalLedgers;
|
|
@@ -1,28 +1,27 @@
|
|
|
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
5
|
* Run the layer-6 product-adapter extension seam (issue #154 acceptance #8) over the assembled
|
|
7
|
-
* evidence and attach its results to the bundle
|
|
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 (#316; `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
|
|
@@ -31,7 +30,7 @@ export async function applyAdapterExtensionSeam(args) {
|
|
|
31
30
|
bundle.scorerProvenance = scorerProvenance;
|
|
32
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
|
|
33
|
+
// the real bundle. The transcript is the same normalized, source-scrubbed text the run persists as
|
|
35
34
|
// terminal-transcript.txt — no new exposure beyond what disk already holds (#341).
|
|
36
35
|
const ctx = {
|
|
37
36
|
bundle: frozenBundleView(bundle),
|
|
@@ -43,21 +42,22 @@ 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
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.
|
|
@@ -66,136 +66,39 @@ export async function applyAdapterExtensionSeam(args) {
|
|
|
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";
|
|
3
|
+
import { type RunBundle, type RunCostSummary, type BundleRun } from "../../run/bundle.js";
|
|
5
4
|
import type { Verdict } from "../../run/judge.js";
|
|
6
5
|
import type { TerminalLedgers } from "./types.js";
|
|
7
6
|
/**
|
|
8
7
|
* Project the terminal-product lab run into a humanish.run-bundle.v1 (no schema change — a new
|
|
9
8
|
* producer only). DRY-RUN: a contract bundle. The terminal stream is a contract placeholder
|
|
10
|
-
* (stdin disabled, no captured tail
|
|
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;
|