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,21 +1,22 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
+
import { studyResultIdentity } from "../../run/study-result.js";
|
|
2
3
|
import { formatRunHuman, parseLabCount, writeResult, } from "../io.js";
|
|
3
4
|
import { planObserver, showObserver, staticObserverOpen } from "../observer-follow.js";
|
|
4
5
|
/**
|
|
5
|
-
* The preview route's CLI setup: the
|
|
6
|
+
* The preview route's CLI setup: the participant count and Observer plan, its runLab options, and how it
|
|
6
7
|
* presents the outcome. Undefined when setup has already written its own result.
|
|
7
8
|
*/
|
|
8
9
|
export function previewRouteRun(args) {
|
|
9
|
-
const participantCount = parseLabCount(args.options.
|
|
10
|
+
const participantCount = parseLabCount(args.options.count, args.config.actors[0]?.count ?? 4);
|
|
10
11
|
if (participantCount === null) {
|
|
11
12
|
const result = {
|
|
12
|
-
|
|
13
|
+
...studyResultIdentity("preview", args.config.id),
|
|
13
14
|
ok: false,
|
|
14
15
|
cwd: args.options.cwd,
|
|
15
16
|
warnings: [],
|
|
16
17
|
error: {
|
|
17
|
-
code: "
|
|
18
|
-
message: "--
|
|
18
|
+
code: "HUMANISH_INVALID_PARTICIPANT_COUNT",
|
|
19
|
+
message: "--count must be a positive integer.",
|
|
19
20
|
},
|
|
20
21
|
};
|
|
21
22
|
writeResult(args.command, args.io, result, formatRunHuman);
|
|
@@ -23,7 +24,7 @@ export function previewRouteRun(args) {
|
|
|
23
24
|
return undefined;
|
|
24
25
|
}
|
|
25
26
|
// `run` renders the Observer too, so `run` and `watch` write the same bundle and the first
|
|
26
|
-
// `export` of a run bundle finds observer/index.html
|
|
27
|
+
// `export` of a run bundle finds observer/index.html. A render failure is a warning on the
|
|
27
28
|
// result, never a failed run. The preview renders through its finished run, so the page shown is
|
|
28
29
|
// the run just written, never a directory swapped in under its id.
|
|
29
30
|
const openOverride = args.options.open ?? args.config.defaults?.open;
|
|
@@ -42,7 +43,6 @@ export function previewRouteRun(args) {
|
|
|
42
43
|
return {
|
|
43
44
|
options: {
|
|
44
45
|
cwd: args.options.cwd,
|
|
45
|
-
...(args.labProvenance === undefined ? {} : { lab: args.labProvenance }),
|
|
46
46
|
count: participantCount,
|
|
47
47
|
...(args.options.dryRun === undefined ? {} : { dryRun: args.options.dryRun }),
|
|
48
48
|
...(args.options.runId === undefined ? {} : { runId: args.options.runId }),
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type InternalRunLabOptions, type LabOutcome } from "../../run-lab.js";
|
|
2
2
|
import type { LabConfig } from "../../lab/types.js";
|
|
3
3
|
import type { LoadedAdapterScorer } from "./lab-scorer.js";
|
|
4
4
|
export interface RouteRun {
|
|
5
|
-
readonly options:
|
|
5
|
+
readonly options: InternalRunLabOptions;
|
|
6
6
|
present(outcome: LabOutcome): Promise<void>;
|
|
7
7
|
/** Handles an error runLab threw, and rethrows any it does not handle. */
|
|
8
8
|
onRunError?(error: unknown): Promise<void>;
|
|
@@ -10,8 +10,10 @@ export interface RouteRun {
|
|
|
10
10
|
/**
|
|
11
11
|
* Plans the lab with a route's options, then presents the refusal or the run. `beforeRun` runs
|
|
12
12
|
* only for a plan that will run: it loads the scorer, or writes its own refusal and returns
|
|
13
|
-
* undefined, so a refused lab never imports the scorer's host code.
|
|
13
|
+
* undefined, so a refused lab never imports the scorer's host code. `afterRun` runs once runLab
|
|
14
|
+
* has returned or thrown, before presentation, which may hold its own signal handlers (watch's
|
|
15
|
+
* Observer and tunnel).
|
|
14
16
|
*/
|
|
15
17
|
export declare function runRoute(config: LabConfig, run: RouteRun, beforeRun?: () => Promise<{
|
|
16
18
|
scorer?: LoadedAdapterScorer;
|
|
17
|
-
} | undefined
|
|
19
|
+
} | undefined>, afterRun?: () => void): Promise<void>;
|
|
@@ -4,9 +4,11 @@ import { prepareLab } from "../../run-lab.js";
|
|
|
4
4
|
/**
|
|
5
5
|
* Plans the lab with a route's options, then presents the refusal or the run. `beforeRun` runs
|
|
6
6
|
* only for a plan that will run: it loads the scorer, or writes its own refusal and returns
|
|
7
|
-
* undefined, so a refused lab never imports the scorer's host code.
|
|
7
|
+
* undefined, so a refused lab never imports the scorer's host code. `afterRun` runs once runLab
|
|
8
|
+
* has returned or thrown, before presentation, which may hold its own signal handlers (watch's
|
|
9
|
+
* Observer and tunnel).
|
|
8
10
|
*/
|
|
9
|
-
export async function runRoute(config, run, beforeRun = () => Promise.resolve({})) {
|
|
11
|
+
export async function runRoute(config, run, beforeRun = () => Promise.resolve({}), afterRun = () => undefined) {
|
|
10
12
|
let outcome;
|
|
11
13
|
try {
|
|
12
14
|
const prepared = await prepareLab(config, run.options);
|
|
@@ -22,10 +24,12 @@ export async function runRoute(config, run, beforeRun = () => Promise.resolve({}
|
|
|
22
24
|
}
|
|
23
25
|
}
|
|
24
26
|
catch (error) {
|
|
27
|
+
afterRun();
|
|
25
28
|
if (run.onRunError === undefined)
|
|
26
29
|
throw error;
|
|
27
30
|
await run.onRunError(error);
|
|
28
31
|
return;
|
|
29
32
|
}
|
|
33
|
+
afterRun();
|
|
30
34
|
await run.present(outcome);
|
|
31
35
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import type { RunLabProvenance } from "../../run/status.js";
|
|
3
2
|
import type { LabConfig } from "../../lab/types.js";
|
|
4
3
|
import { type CliIo, type LabCommandOptions } from "../io.js";
|
|
5
4
|
import type { RouteRun } from "./lab-route-run.js";
|
|
@@ -7,7 +6,6 @@ interface ScriptedRouteArgs {
|
|
|
7
6
|
command: Command;
|
|
8
7
|
io: CliIo;
|
|
9
8
|
config: LabConfig;
|
|
10
|
-
labProvenance?: RunLabProvenance;
|
|
11
9
|
mode: "run" | "watch";
|
|
12
10
|
options: LabCommandOptions;
|
|
13
11
|
}
|
|
@@ -24,7 +24,6 @@ export function scriptedRouteRun(args) {
|
|
|
24
24
|
options: {
|
|
25
25
|
...cliAnalysisOptions(args.io),
|
|
26
26
|
cwd: args.options.cwd,
|
|
27
|
-
...(args.labProvenance === undefined ? {} : { lab: args.labProvenance }),
|
|
28
27
|
open: observerOpen(args.mode, finishedPlan, shouldOpen),
|
|
29
28
|
...(args.options.dryRun === undefined ? {} : { dryRun: args.options.dryRun }),
|
|
30
29
|
...(args.options.runId === undefined ? {} : { runId: args.options.runId }),
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import type { RunLabProvenance } from "../../run/status.js";
|
|
3
2
|
import type { LabConfig } from "../../lab/types.js";
|
|
4
3
|
import { type CliIo, type LabCommandOptions } from "../io.js";
|
|
5
4
|
import type { RouteRun } from "./lab-route-run.js";
|
|
@@ -7,7 +6,6 @@ interface SharedWorldRouteArgs {
|
|
|
7
6
|
command: Command;
|
|
8
7
|
io: CliIo;
|
|
9
8
|
config: LabConfig;
|
|
10
|
-
labProvenance?: RunLabProvenance;
|
|
11
9
|
mode: "run" | "watch";
|
|
12
10
|
options: LabCommandOptions;
|
|
13
11
|
}
|
|
@@ -9,6 +9,7 @@ import { followObserver, showObserver, staticObserverOpen, withObserverServer, }
|
|
|
9
9
|
import { formatConcurrentSharedWorldLabHuman } from "./lab-format.js";
|
|
10
10
|
import { resolveRouteShouldOpen, watchFinishedPlan } from "./lab-route-open.js";
|
|
11
11
|
import { rosterOf } from "../../lab/parse/actors.js";
|
|
12
|
+
import { studyResultIdentity } from "../../run/study-result.js";
|
|
12
13
|
/**
|
|
13
14
|
* The shared-world route's CLI setup: dry run, open and follow semantics, the live Observer server
|
|
14
15
|
* the run attaches, and how it presents the outcome. Undefined when setup has already written its
|
|
@@ -27,10 +28,9 @@ export function sharedWorldRouteRun(args) {
|
|
|
27
28
|
const port = parseObserverPort(args.options.port ?? "0");
|
|
28
29
|
const failConcurrent = (message, runId) => {
|
|
29
30
|
const result = {
|
|
30
|
-
|
|
31
|
+
...studyResultIdentity("shared-world", args.config.id),
|
|
31
32
|
ok: false,
|
|
32
33
|
cwd: args.options.cwd,
|
|
33
|
-
labId: args.config.id,
|
|
34
34
|
actor: args.config.actors[0]?.type ?? "",
|
|
35
35
|
topology: "shared-world",
|
|
36
36
|
topologyMode: "concurrent",
|
|
@@ -40,7 +40,7 @@ export function sharedWorldRouteRun(args) {
|
|
|
40
40
|
runId: runId ?? args.options.runId ?? "not-created",
|
|
41
41
|
roles: [],
|
|
42
42
|
warnings: [],
|
|
43
|
-
error: { code: "
|
|
43
|
+
error: { code: "HUMANISH_SHARED_WORLD_FAILED", message },
|
|
44
44
|
};
|
|
45
45
|
writeResult(args.command, args.io, result, formatConcurrentSharedWorldLabHuman);
|
|
46
46
|
args.io.setExitCode(2);
|
|
@@ -63,7 +63,6 @@ export function sharedWorldRouteRun(args) {
|
|
|
63
63
|
options: {
|
|
64
64
|
...cliAnalysisOptions(args.io),
|
|
65
65
|
cwd: args.options.cwd,
|
|
66
|
-
...(args.labProvenance === undefined ? {} : { lab: args.labProvenance }),
|
|
67
66
|
open: wantsFollow
|
|
68
67
|
? false
|
|
69
68
|
: finishedPlan === undefined
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import type { RunLabProvenance } from "../../run/status.js";
|
|
3
2
|
import type { LabConfig } from "../../lab/types.js";
|
|
4
3
|
import { type CliIo, type LabCommandOptions } from "../io.js";
|
|
5
4
|
import type { RouteRun } from "./lab-route-run.js";
|
|
@@ -7,7 +6,6 @@ interface TerminalRouteArgs {
|
|
|
7
6
|
command: Command;
|
|
8
7
|
io: CliIo;
|
|
9
8
|
config: LabConfig;
|
|
10
|
-
labProvenance?: RunLabProvenance;
|
|
11
9
|
mode: "run" | "watch";
|
|
12
10
|
options: LabCommandOptions;
|
|
13
11
|
}
|
|
@@ -24,7 +24,6 @@ export function terminalRouteRun(args) {
|
|
|
24
24
|
options: {
|
|
25
25
|
...cliAnalysisOptions(args.io),
|
|
26
26
|
cwd: args.options.cwd,
|
|
27
|
-
...(args.labProvenance === undefined ? {} : { lab: args.labProvenance }),
|
|
28
27
|
open: observerOpen(args.mode, finishedPlan, shouldOpen),
|
|
29
28
|
...(args.options.dryRun === undefined ? {} : { dryRun: args.options.dryRun }),
|
|
30
29
|
...(args.options.runId === undefined ? {} : { runId: args.options.runId }),
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { automaticAnalysisBudget, formatAutomaticAnalysisBudget, } from "../../analysis/automatic-config.js";
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
3
|
import { Command } from "commander";
|
|
4
|
-
import {
|
|
4
|
+
import { deriveRunFacts } from "../telemetry.js";
|
|
5
5
|
import { resolveLabManifest } from "../../lab/discover.js";
|
|
6
|
-
import {
|
|
6
|
+
import { warnAndQueue } from "../deprecations.js";
|
|
7
|
+
import { planLab, resolveLabDryRun } from "../../lab/plan.js";
|
|
8
|
+
import { keyNamesOf } from "../../lab/requirements.js";
|
|
7
9
|
import { routeOf } from "../../lab/plan.js";
|
|
8
10
|
import { computerUseRouteRun } from "./lab-route-computer-use.js";
|
|
9
11
|
import { runRoute } from "./lab-route-run.js";
|
|
@@ -12,8 +14,9 @@ import { sharedWorldRouteRun } from "./lab-route-shared-world.js";
|
|
|
12
14
|
import { previewRouteRun } from "./lab-route-preview.js";
|
|
13
15
|
import { terminalRouteRun } from "./lab-route-terminal.js";
|
|
14
16
|
import { maybeLoadAdapterScorer } from "./lab-scorer.js";
|
|
15
|
-
import { discoverCliKeys, formatRunHuman,
|
|
17
|
+
import { discoverCliKeys, formatRunHuman, noteRunFacts, writeResult, } from "../io.js";
|
|
16
18
|
import { watchExposeRequested } from "../observer-follow.js";
|
|
19
|
+
import { beginRunSignalPhase } from "./run-signals.js";
|
|
17
20
|
import { WATCH_SAFE_NOT_APPLICABLE_MESSAGE } from "../../observer/exposure.js";
|
|
18
21
|
export async function runLabCommand(args) {
|
|
19
22
|
const resolved = await resolveLabManifest(args.options.cwd, args.lab);
|
|
@@ -24,18 +27,18 @@ export async function runLabCommand(args) {
|
|
|
24
27
|
}
|
|
25
28
|
// Surface forward-declared-field + .yml warnings on run/watch too, not only on inspect.
|
|
26
29
|
// Otherwise a setting that does nothing is silently swallowed on the path users actually run.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
// Each also goes into the JSON result's warnings[], so a --json caller sees it.
|
|
31
|
+
for (const warning of resolved.warnings)
|
|
32
|
+
warnAndQueue(args.command, args.io, warning);
|
|
30
33
|
const config = resolved.config;
|
|
31
|
-
// The run's identity
|
|
32
|
-
// local overlay, or an explicit path. Resolved once here
|
|
34
|
+
// The run's identity: which manifest, where it lives, and whether it is committed, a
|
|
35
|
+
// local overlay, or an explicit path. Resolved once here (the only place that knows all three)
|
|
33
36
|
// and carried into the run's status record and bundle so the filesystem can answer "which lab
|
|
34
37
|
// produced this run" without the old `persona.source = "lab:<id>"` string convention.
|
|
35
38
|
const lab = { id: config.id, path: resolved.path, origin: resolved.origin };
|
|
36
39
|
// Named here, once, for every route: a preview or terminal result carries no labId, so the
|
|
37
40
|
// starter lab `first-run` went unnamed in telemetry while the computer-use ones were named.
|
|
38
|
-
|
|
41
|
+
noteRunFacts(args.command, deriveRunFacts({ labId: config.id }));
|
|
39
42
|
const route = routeOf(config);
|
|
40
43
|
if (route !== "computer-use" && labRerunFlagsRequested(args.options)) {
|
|
41
44
|
writeUnsupportedRerunFlagsResult(args, route);
|
|
@@ -76,52 +79,81 @@ export async function runLabCommand(args) {
|
|
|
76
79
|
return;
|
|
77
80
|
}
|
|
78
81
|
// Only a live run reads provider keys, so a dry run looks none up: no `gh auth token`, no e2b
|
|
79
|
-
// login, overlay or key store.
|
|
80
|
-
//
|
|
82
|
+
// login, overlay or key store. A live run fills every key it finds and prints a line only for
|
|
83
|
+
// the keys its plan reads. This comes after the option refusals above, which read no key, and
|
|
84
|
+
// before the route's CLI setup and prepareLab, which do.
|
|
81
85
|
if (resolveLabDryRun(config, args.options.dryRun, true) === false) {
|
|
82
|
-
|
|
86
|
+
const announced = announcedKeyNames(config, args.options);
|
|
87
|
+
await discoverCliKeys({
|
|
88
|
+
io: args.io,
|
|
89
|
+
cwd: args.options.cwd,
|
|
90
|
+
...(announced === undefined ? {} : { announced }),
|
|
91
|
+
});
|
|
83
92
|
}
|
|
84
93
|
// The route's CLI setup refuses bad options, runLab's plan refuses bad labs, and the route's local
|
|
85
94
|
// checks (keys, runtime auth, subject env, the local agent, caps) refuse this machine, all before
|
|
86
95
|
// the scorer loads, so none imports the scorer's host code. The scripted route's checks and the
|
|
87
96
|
// run-id claim still come after it; the scripted route takes no scorer.
|
|
88
|
-
const
|
|
89
|
-
if (
|
|
97
|
+
const routeRun = routeRunFor(route, { ...args, config });
|
|
98
|
+
if (routeRun === undefined)
|
|
90
99
|
return;
|
|
91
|
-
//
|
|
92
|
-
|
|
93
|
-
//
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
100
|
+
// Every route's runLab options carry the lab's provenance, from here only.
|
|
101
|
+
const run = { ...routeRun, options: { ...routeRun.options, lab } };
|
|
102
|
+
// From here a signal marks the run interrupted and reclaims its sandboxes (run-signals.ts).
|
|
103
|
+
const signals = beginRunSignalPhase(args.io);
|
|
104
|
+
try {
|
|
105
|
+
// Resolve + load a config-declared/CLI-flagged adopter scorer fail-closed, before any
|
|
106
|
+
// spend, and only for a plan that will run. A declared gate that cannot load (bad ref, not
|
|
107
|
+
// found, load failure, no hooks, unsupported route) aborts with exit 2 rather than green-passing.
|
|
108
|
+
await runRoute(config, run, async () => {
|
|
109
|
+
const scorerLoad = await maybeLoadAdapterScorer({
|
|
110
|
+
cwd: args.options.cwd,
|
|
111
|
+
config,
|
|
112
|
+
route,
|
|
113
|
+
flag: args.options.scorer,
|
|
114
|
+
});
|
|
115
|
+
if (!scorerLoad.ok) {
|
|
116
|
+
const result = {
|
|
117
|
+
schema: "humanish.run-result.v1",
|
|
118
|
+
ok: false,
|
|
119
|
+
cwd: resolve(args.options.cwd),
|
|
120
|
+
warnings: [],
|
|
121
|
+
error: scorerLoad.error,
|
|
122
|
+
};
|
|
123
|
+
writeResult(args.command, args.io, result, formatRunHuman);
|
|
124
|
+
args.io.setExitCode(2);
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
const scorer = scorerLoad.scorer;
|
|
128
|
+
if (scorer) {
|
|
129
|
+
// Cross-repo guardrail: `humanish lab run` now import()s host JS named in the manifest.
|
|
130
|
+
// Surface it so the invoker (who may not be the manifest author) knows executable code ran.
|
|
131
|
+
args.io.writeErr(`warning: review scorer ${scorer.provenance.ref} (${scorer.provenance.source}) is code that humanish loaded and ran in this process. Review it as you would any code you run.\n`);
|
|
132
|
+
}
|
|
133
|
+
const analysisBudget = automaticAnalysisBudget(config.review?.analysis, route);
|
|
134
|
+
if (analysisBudget && resolveLabDryRun(config, args.options.dryRun, true) === false) {
|
|
135
|
+
args.io.writeErr(`${formatAutomaticAnalysisBudget(analysisBudget)}\n`);
|
|
136
|
+
}
|
|
137
|
+
return scorer === undefined ? {} : { scorer };
|
|
138
|
+
},
|
|
139
|
+
// The run is over before presentation, which may own shutdown itself (watch's Observer).
|
|
140
|
+
// A shutdown already begun keeps its handlers and finishes through its cleanups.
|
|
141
|
+
signals.release);
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
signals.release();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* The filled keys a live run prints a line for: the ones its plan reads. Count and rerun options
|
|
149
|
+
* change who runs, not which keys. Undefined, so every fill is printed, when a scorer is declared,
|
|
150
|
+
* since its host code may read any key, and when the lab does not plan.
|
|
151
|
+
*/
|
|
152
|
+
function announcedKeyNames(config, options) {
|
|
153
|
+
if (options.scorer !== undefined || config.review?.scorer !== undefined)
|
|
154
|
+
return undefined;
|
|
155
|
+
const planned = planLab(config, { cwd: options.cwd, dryRun: false });
|
|
156
|
+
return planned.ok ? keyNamesOf(planned.planned.plan) : undefined;
|
|
125
157
|
}
|
|
126
158
|
/** The route's CLI setup. Undefined when the setup has already written its own result. */
|
|
127
159
|
function routeRunFor(route, args) {
|
|
@@ -142,7 +174,7 @@ function routeRunFor(route, args) {
|
|
|
142
174
|
}
|
|
143
175
|
}
|
|
144
176
|
function labRerunFlagsRequested(options) {
|
|
145
|
-
return options.rerunFailedFrom !== undefined || options.
|
|
177
|
+
return options.rerunFailedFrom !== undefined || options.participants !== undefined;
|
|
146
178
|
}
|
|
147
179
|
function writeUnsupportedRerunFlagsResult(args, route) {
|
|
148
180
|
const result = {
|
|
@@ -152,15 +184,13 @@ function writeUnsupportedRerunFlagsResult(args, route) {
|
|
|
152
184
|
warnings: [],
|
|
153
185
|
error: {
|
|
154
186
|
code: "HUMANISH_UNSUPPORTED_RERUN_FLAGS",
|
|
155
|
-
message: `--rerun-failed-from/--
|
|
187
|
+
message: `--rerun-failed-from/--participants apply only to computer-use fan-out labs; this lab resolved to the ${route} route.`,
|
|
156
188
|
},
|
|
157
189
|
};
|
|
158
190
|
writeResult(args.command, args.io, result, formatRunHuman);
|
|
159
191
|
args.io.setExitCode(2);
|
|
160
192
|
}
|
|
161
193
|
function formatLabResolveFailureHuman(result) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
...result.warnings.map((warning) => `warning: ${warning}`),
|
|
165
|
-
].join("\n") + "\n");
|
|
194
|
+
const warnings = result.warnings.map((warning) => `warning: ${warning}\n`).join("");
|
|
195
|
+
return { ...(warnings ? { stdout: warnings } : {}), error: result.error };
|
|
166
196
|
}
|
|
@@ -1,24 +1,22 @@
|
|
|
1
|
-
import type { RunLabProvenance } from "../../run/status.js";
|
|
2
1
|
import { type AdapterScorerModule } from "../../lab/adapter-scorer-loader.js";
|
|
3
2
|
import type { LabRoute } from "../../lab/plan.js";
|
|
4
3
|
import type { RunScorerProvenance } from "../../run/bundle.js";
|
|
5
4
|
import type { LabConfig } from "../../lab/types.js";
|
|
6
5
|
import type { RunResult } from "../../run/results.js";
|
|
7
|
-
/** A
|
|
6
|
+
/** A config-declared scorer that resolved + loaded fail-closed, ready to thread into a backend. */
|
|
8
7
|
export interface LoadedAdapterScorer {
|
|
9
8
|
hooks: AdapterScorerModule;
|
|
10
9
|
provenance: RunScorerProvenance;
|
|
11
10
|
}
|
|
12
11
|
/**
|
|
13
12
|
* Resolve `review.scorer.ref` (or the `--scorer` override) to a loaded adopter scorer, fail-closed
|
|
14
|
-
* (typed error)
|
|
13
|
+
* (typed error) pre-spend. Precedence: CLI `--scorer` overrides the manifest; `source` records which
|
|
15
14
|
* won. No scorer declared → `{ ok: true }` with no scorer. A declared scorer on an unsupported
|
|
16
15
|
* backend, or a bad/unreadable/broken ref, → `{ ok: false }` so the caller aborts with exit 2.
|
|
17
16
|
*/
|
|
18
17
|
export declare function maybeLoadAdapterScorer(args: {
|
|
19
18
|
cwd: string;
|
|
20
19
|
config: LabConfig;
|
|
21
|
-
labProvenance?: RunLabProvenance;
|
|
22
20
|
route: LabRoute;
|
|
23
21
|
flag: string | undefined;
|
|
24
22
|
}): Promise<{
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { loadAdapterScorer } from "../../lab/adapter-scorer-loader.js";
|
|
2
2
|
/**
|
|
3
3
|
* Resolve `review.scorer.ref` (or the `--scorer` override) to a loaded adopter scorer, fail-closed
|
|
4
|
-
* (typed error)
|
|
4
|
+
* (typed error) pre-spend. Precedence: CLI `--scorer` overrides the manifest; `source` records which
|
|
5
5
|
* won. No scorer declared → `{ ok: true }` with no scorer. A declared scorer on an unsupported
|
|
6
6
|
* backend, or a bad/unreadable/broken ref, → `{ ok: false }` so the caller aborts with exit 2.
|
|
7
7
|
*/
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { migrateStudies } from "../../study/migrate.js";
|
|
2
|
+
import { CWD_OPTION_DESCRIPTION, JSON_OPTION_DESCRIPTION, wantsJson, writeResult, } from "../io.js";
|
|
3
|
+
function formatValue(value) {
|
|
4
|
+
const text = JSON.stringify(value);
|
|
5
|
+
return text.length > 80 ? `${text.slice(0, 77)}...` : text;
|
|
6
|
+
}
|
|
7
|
+
/** Each file's source, destination, moved keys and dropped keys, printed before any write. */
|
|
8
|
+
function formatMigratePlan(files) {
|
|
9
|
+
const lines = [];
|
|
10
|
+
for (const file of files) {
|
|
11
|
+
if (file.action === "skip") {
|
|
12
|
+
lines.push(`${file.source}: already humanish.study.v3, skipped`);
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
const where = file.action === "move" ? `-> ${file.destination}` : "(rewritten in place)";
|
|
16
|
+
lines.push(`${file.source} ${where} (route: ${file.route})`);
|
|
17
|
+
if (file.moved.length > 0)
|
|
18
|
+
lines.push(` moved: ${file.moved.map((key) => `${key.from} -> ${key.to}`).join(", ")}`);
|
|
19
|
+
for (const key of file.dropped) {
|
|
20
|
+
lines.push(` dropped ${key.path}: ${formatValue(key.value)} (the ${file.route} route never reads it)`);
|
|
21
|
+
if (key.comments)
|
|
22
|
+
lines.push(` its comment: ${key.comments.replace(/\n/g, " ")}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return lines.length > 0 ? `${lines.join("\n")}\n` : "No study files to convert.\n";
|
|
26
|
+
}
|
|
27
|
+
function formatMigrateOutcome(result) {
|
|
28
|
+
if (result.error) {
|
|
29
|
+
const where = result.error.file ? ` ${result.error.file}` : "";
|
|
30
|
+
return `${result.error.code} (${result.error.phase})${where}: ${result.error.message}\n`;
|
|
31
|
+
}
|
|
32
|
+
const written = result.files.filter((file) => file.action !== "skip").length;
|
|
33
|
+
const files = written === 1 ? "1 study file" : `${written} study files`;
|
|
34
|
+
if (result.dryRun)
|
|
35
|
+
return `Dry run: nothing was written. ${files} would change.\n`;
|
|
36
|
+
return written === 0 ? "No v2 study files to convert.\n" : `Converted ${files}.\n`;
|
|
37
|
+
}
|
|
38
|
+
/** `humanish migrate`. */
|
|
39
|
+
export function registerMigrateCommand(parent, io) {
|
|
40
|
+
parent
|
|
41
|
+
.command("migrate")
|
|
42
|
+
.description("Convert humanish.lab.v2 study files to humanish.study.v3. A file under a labs/ directory moves to the matching studies/ directory; any other file is rewritten in place. An original that a failure leaves out of place is kept as <name>.v2.bak. Pass the files to convert; without any, the six study directories are scanned. Every destination, moved key and dropped key is printed before anything is written. A file that changes during the run is kept and listed.")
|
|
43
|
+
.summary("Convert v2 study files to v3.")
|
|
44
|
+
// The paths are read from the command's arguments without a declared argument, so the root
|
|
45
|
+
// --help row stays `migrate [options]` and fits its column; this command's own help shows them.
|
|
46
|
+
.usage("[options] [path...]")
|
|
47
|
+
.allowExcessArguments(true)
|
|
48
|
+
.option("--dry-run", "Print what would change and write nothing.")
|
|
49
|
+
.option("--cwd <path>", CWD_OPTION_DESCRIPTION, ".")
|
|
50
|
+
.option("--json", JSON_OPTION_DESCRIPTION)
|
|
51
|
+
.action(async (options, command) => {
|
|
52
|
+
const paths = command.args;
|
|
53
|
+
const json = wantsJson(command);
|
|
54
|
+
const result = await migrateStudies({
|
|
55
|
+
cwd: options.cwd,
|
|
56
|
+
paths,
|
|
57
|
+
dryRun: options.dryRun === true,
|
|
58
|
+
// The plan is printed before anything is written; with --json it goes to stderr, so stdout
|
|
59
|
+
// stays one JSON document.
|
|
60
|
+
onPlan: (files) => (json ? io.writeErr : io.writeOut)(formatMigratePlan(files)),
|
|
61
|
+
});
|
|
62
|
+
writeResult(command, io, result, formatMigrateOutcome);
|
|
63
|
+
io.setExitCode(result.ok ? 0 : 2);
|
|
64
|
+
});
|
|
65
|
+
}
|