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
package/dist/lab/doctor.js
CHANGED
|
@@ -1,25 +1,107 @@
|
|
|
1
|
+
import path from "node:path";
|
|
1
2
|
import { isLocalBrowserLab } from "../substrates/local/runtime-config.js";
|
|
2
3
|
import { localRuntimeStatus } from "../substrates/local/runtime.js";
|
|
4
|
+
import { keyNamesOf, requiredKeys, requiredSubjectEnv } from "./requirements.js";
|
|
5
|
+
import { protocolAdditionsWarning, protocolIncompatibilityMessage, } from "../actors/codex/protocol-compat.js";
|
|
3
6
|
import { automaticAnalysisBudget } from "../analysis/automatic-config.js";
|
|
4
7
|
import { externalCatchHealthy } from "../comms/sandbox-catch.js";
|
|
5
8
|
import { receivingRequiredKey } from "../comms/setup.js";
|
|
6
|
-
import { codexVersionRecovery } from "../actors/codex/
|
|
7
|
-
/**
|
|
9
|
+
import { classifyCodexInstallation, codexInstallAdvice, codexVersionRecovery, } from "../actors/codex/codex-admission.js";
|
|
10
|
+
/** A ready row's message, with the schema values the launch recorded. */
|
|
11
|
+
function readyMessage(message, readiness) {
|
|
12
|
+
const additions = protocolAdditionsWarning(readiness.cliVersion, readiness.protocolAdditions);
|
|
13
|
+
return additions === undefined ? message : `${message} ${additions}`;
|
|
14
|
+
}
|
|
15
|
+
/** npm's global prefix (`npm prefix -g`), or undefined when npm does not answer. */
|
|
16
|
+
async function npmGlobalPrefix(env) {
|
|
17
|
+
const { execFile } = await import("node:child_process");
|
|
18
|
+
return new Promise((resolve) => {
|
|
19
|
+
execFile("npm", ["prefix", "-g"], { env, timeout: 5000 }, (error, stdout) => {
|
|
20
|
+
const prefix = String(stdout).trim();
|
|
21
|
+
resolve(error === null && path.isAbsolute(prefix) ? prefix : undefined);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/** Where the `codex` on `PATH` was installed; npm's prefix is read only when not project-local. */
|
|
26
|
+
async function codexInstallation(env) {
|
|
27
|
+
const { foundCodexExecutable } = await import("../actors/codex/restricted-executable.js");
|
|
28
|
+
const found = await foundCodexExecutable(env).catch(() => undefined);
|
|
29
|
+
if (found === undefined)
|
|
30
|
+
return undefined;
|
|
31
|
+
const local = classifyCodexInstallation(found, undefined);
|
|
32
|
+
return local.kind === "project"
|
|
33
|
+
? local
|
|
34
|
+
: classifyCodexInstallation(found, await npmGlobalPrefix(env));
|
|
35
|
+
}
|
|
36
|
+
/** The account check doctor and the TUI share: the isolated launch, with recovery details. */
|
|
8
37
|
async function codexAccountReadiness(env) {
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
38
|
+
const checked = await (await import("../analysis/restricted-codex.js")).checkRestrictedCodexAnalysisReadiness({ timeoutMs: 5000 }, { env });
|
|
39
|
+
return withCodexRecoveryDetails(env, checked);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The hosted participant check: the operator-auth launch to an ephemeral thread, with no turn,
|
|
43
|
+
* using the lab's declared model and reasoning effort as a run would.
|
|
44
|
+
*/
|
|
45
|
+
async function hostedCodexReadiness(env, actor) {
|
|
46
|
+
const { checkRestrictedCodexParticipantReadiness } = await import("../actors/codex/restricted-participant.js");
|
|
47
|
+
const checked = await checkRestrictedCodexParticipantReadiness({
|
|
48
|
+
session: { env },
|
|
49
|
+
...(actor.model === undefined ? {} : { model: actor.model }),
|
|
50
|
+
...(actor.reasoningEffort === undefined ? {} : { reasoningEffort: actor.reasoningEffort }),
|
|
51
|
+
});
|
|
52
|
+
return checked.ready
|
|
53
|
+
? checked
|
|
54
|
+
: { ...checked, ...(await withCodexRecoveryDetails(env, checked)) };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Adds what the recovery line names to a failed check. An unadmitted CLI gets its release, an
|
|
58
|
+
* unavailable one the file humanish turned down, and both where the binary came from.
|
|
59
|
+
*/
|
|
60
|
+
async function withCodexRecoveryDetails(env, checked) {
|
|
61
|
+
if (checked.errorCode !== "codex_unavailable" &&
|
|
62
|
+
checked.errorCode !== "codex_unsupported_version" &&
|
|
63
|
+
checked.errorCode !== "codex_incompatible_release")
|
|
64
|
+
return checked;
|
|
65
|
+
const installation = await codexInstallation(env);
|
|
66
|
+
const readiness = installation === undefined ? checked : { ...checked, installation };
|
|
67
|
+
if (readiness.errorCode === "codex_unavailable") {
|
|
68
|
+
const { refusedCodexExecutable } = await import("../actors/codex/restricted-executable.js");
|
|
69
|
+
const refused = await refusedCodexExecutable(env).catch(() => undefined);
|
|
70
|
+
return refused === undefined ? readiness : { ...readiness, refusedExecutable: refused };
|
|
71
|
+
}
|
|
12
72
|
const { detectRestrictedCodexCliVersion } = await import("../actors/codex/restricted-session.js");
|
|
13
73
|
const detected = await detectRestrictedCodexCliVersion({ timeoutMs: 5000 }, { env }).catch(() => undefined);
|
|
14
74
|
// An admitted release here means app-server reported a different one; name what --version says.
|
|
15
75
|
const version = detected?.cliVersion ?? detected?.detectedVersion;
|
|
16
76
|
return version === undefined ? readiness : { ...readiness, detectedCliVersion: version };
|
|
17
77
|
}
|
|
18
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* What to do about a Codex readiness failure, one line per code: an unadmitted CLI gets its exact
|
|
80
|
+
* install command, a missing login `codex login`, and an unavailable CLI the file humanish turned
|
|
81
|
+
* down and why. Other codes get `fallback`.
|
|
82
|
+
*/
|
|
19
83
|
function codexRecovery(readiness, fallback) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
84
|
+
switch (readiness.errorCode) {
|
|
85
|
+
case "codex_unsupported_version":
|
|
86
|
+
return codexVersionRecovery(readiness.detectedCliVersion, readiness.installation);
|
|
87
|
+
case "codex_incompatible_release":
|
|
88
|
+
return `${protocolIncompatibilityMessage(readiness.detectedCliVersion, readiness.protocolIncompatibilities ?? [])} ${codexInstallAdvice(readiness.installation)} Then sign in with a ChatGPT account (\`codex login\`).`;
|
|
89
|
+
case "codex_login_required":
|
|
90
|
+
return "Codex is installed but not signed in. Run `codex login` and sign in with a ChatGPT account.";
|
|
91
|
+
case "codex_unsupported_auth":
|
|
92
|
+
return "Codex is signed in without a ChatGPT account, for example with an API key. Run `codex logout`, then `codex login` with a ChatGPT account.";
|
|
93
|
+
case "codex_unavailable": {
|
|
94
|
+
const refused = readiness.refusedExecutable;
|
|
95
|
+
const found = refused === undefined
|
|
96
|
+
? "humanish could not start the Codex CLI."
|
|
97
|
+
: refused.path === undefined
|
|
98
|
+
? `Codex is unavailable: ${refused.reason}.`
|
|
99
|
+
: `humanish found \`${refused.path}\` and cannot run it: ${refused.reason}.`;
|
|
100
|
+
return `${found} ${codexInstallAdvice(readiness.installation)} Then sign in with a ChatGPT account (\`codex login\`).`;
|
|
101
|
+
}
|
|
102
|
+
default:
|
|
103
|
+
return fallback;
|
|
104
|
+
}
|
|
23
105
|
}
|
|
24
106
|
/** Shared read-only Codex account check for local participants in doctor and the TUI. */
|
|
25
107
|
export async function localCodexParticipantCheck(args) {
|
|
@@ -28,15 +110,33 @@ export async function localCodexParticipantCheck(args) {
|
|
|
28
110
|
name: "local participant authentication",
|
|
29
111
|
ok: readiness.ready,
|
|
30
112
|
message: readiness.ready
|
|
31
|
-
? "
|
|
113
|
+
? readyMessage("Codex CLI and ChatGPT login are ready for restricted local browser participants. No E2B or model API key is required; inference is remote, and model access and account quota remain untested.", readiness)
|
|
32
114
|
: `Local Codex participant setup is unavailable (${readiness.errorCode}). ${codexRecovery(readiness, "Install the supported Codex CLI version and sign in with a ChatGPT account.")} No API fallback is used.`,
|
|
33
115
|
};
|
|
34
116
|
}
|
|
35
|
-
/**
|
|
117
|
+
/**
|
|
118
|
+
* The discovery and planning functions doctor's study checks use, loaded on first use as
|
|
119
|
+
* labSetupChecks always loaded them, so they stay out of this module's static imports.
|
|
120
|
+
*/
|
|
121
|
+
async function studyLoaders() {
|
|
122
|
+
const discover = await import("./discover.js");
|
|
123
|
+
const plan = await import("./plan.js");
|
|
124
|
+
return {
|
|
125
|
+
listStudies: discover.listLabManifests,
|
|
126
|
+
resolveStudy: discover.resolveLabManifest,
|
|
127
|
+
resolveDryRun: plan.resolveLabDryRun,
|
|
128
|
+
routeOf: plan.routeOf,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Setup checks only: no model turn, browser or desktop creation. CLI startup may use the network.
|
|
133
|
+
* `keys` are the keys a live run requires. `reads` are the provider keys the lab is known to read,
|
|
134
|
+
* required or not; it is undefined when that is unknown: the lab does not plan, or a declared
|
|
135
|
+
* scorer's host code may read any key.
|
|
136
|
+
*/
|
|
36
137
|
export async function labSetupChecks(args) {
|
|
37
|
-
const {
|
|
38
|
-
const
|
|
39
|
-
const resolved = await resolveLabManifest(args.cwd, args.lab);
|
|
138
|
+
const { resolveStudy, resolveDryRun, routeOf } = await studyLoaders();
|
|
139
|
+
const resolved = await resolveStudy(args.cwd, args.lab);
|
|
40
140
|
if (!resolved.ok)
|
|
41
141
|
return {
|
|
42
142
|
desktop: false,
|
|
@@ -44,7 +144,7 @@ export async function labSetupChecks(args) {
|
|
|
44
144
|
checks: [{ name: "lab", ok: false, message: resolved.error.message }],
|
|
45
145
|
};
|
|
46
146
|
const config = resolved.config, route = routeOf(config);
|
|
47
|
-
const dryRun =
|
|
147
|
+
const dryRun = resolveDryRun(config, undefined, true) === true;
|
|
48
148
|
const checks = [
|
|
49
149
|
{
|
|
50
150
|
name: "lab route",
|
|
@@ -53,7 +153,7 @@ export async function labSetupChecks(args) {
|
|
|
53
153
|
},
|
|
54
154
|
];
|
|
55
155
|
if (dryRun)
|
|
56
|
-
return { desktop: false, keys: [], checks };
|
|
156
|
+
return { desktop: false, keys: [], reads: new Set(), checks };
|
|
57
157
|
const unsupported = unsupportedCliRoute(config, route);
|
|
58
158
|
if (unsupported)
|
|
59
159
|
return {
|
|
@@ -61,7 +161,17 @@ export async function labSetupChecks(args) {
|
|
|
61
161
|
keys: [],
|
|
62
162
|
checks: [...checks, { name: "live route", ok: false, message: unsupported }],
|
|
63
163
|
};
|
|
64
|
-
const
|
|
164
|
+
const planned = await planCliRun(config, args.cwd);
|
|
165
|
+
if (!planned.ok)
|
|
166
|
+
return {
|
|
167
|
+
desktop: false,
|
|
168
|
+
keys: [],
|
|
169
|
+
checks: [...checks, { name: "live route", ok: false, message: planned.refusal.message }],
|
|
170
|
+
};
|
|
171
|
+
const requirements = planned.planned.plan.requirements;
|
|
172
|
+
const keys = requiredKeys(requirements, args.keyPresent);
|
|
173
|
+
// This flag controls the hosted desktop SDK check as well as its API key.
|
|
174
|
+
const desktop = keys.includes("E2B_API_KEY");
|
|
65
175
|
const local = isLocalBrowserLab(config);
|
|
66
176
|
// One account check, shared by the local participant row and the Codex analysis row.
|
|
67
177
|
let accountReadiness;
|
|
@@ -73,12 +183,15 @@ export async function labSetupChecks(args) {
|
|
|
73
183
|
checks.push(...(await participantChecks(config, route, keys, local, args, checkAccount)));
|
|
74
184
|
if (route === "scripted")
|
|
75
185
|
checks.push(await scriptedBrowserCheck());
|
|
76
|
-
checks.push(...subjectEnvChecks(
|
|
186
|
+
checks.push(...subjectEnvChecks(requiredSubjectEnv(requirements), args));
|
|
77
187
|
const analysis = automaticAnalysisBudget(config.review?.analysis, route);
|
|
78
188
|
if (analysis)
|
|
79
189
|
checks.push(await analysisCheck(analysis, args, checkAccount));
|
|
80
190
|
checks.push(checkScope(analysis));
|
|
81
|
-
|
|
191
|
+
const reads = config.review?.scorer === undefined
|
|
192
|
+
? new Set([...keyNamesOf(planned.planned.plan), ...keys])
|
|
193
|
+
: undefined;
|
|
194
|
+
return { desktop, keys, ...(reads === undefined ? {} : { reads }), checks };
|
|
82
195
|
}
|
|
83
196
|
/** A local browser study's runtime and, with an external catch, its captured inbox. */
|
|
84
197
|
async function localBrowserChecks(config, args) {
|
|
@@ -137,6 +250,10 @@ async function participantChecks(config, route, keys, local, args, checkAccount)
|
|
|
137
250
|
const agent = args.agents.find((entry) => entry.id === choice);
|
|
138
251
|
if (local)
|
|
139
252
|
return [await localCodexParticipantCheck({ env: args.env, readiness: checkAccount })];
|
|
253
|
+
// A signed-in hosted Codex gets the operator handshake; its sign-in status alone does not show
|
|
254
|
+
// that the operator's config, release and model admit a launch.
|
|
255
|
+
if (choice === "codex" && agent?.authStatus === "authenticated")
|
|
256
|
+
return [await hostedCodexParticipantCheck(args, config.actors[0])];
|
|
140
257
|
return [
|
|
141
258
|
{
|
|
142
259
|
name: "local participant authentication",
|
|
@@ -149,6 +266,24 @@ async function participantChecks(config, route, keys, local, args, checkAccount)
|
|
|
149
266
|
},
|
|
150
267
|
];
|
|
151
268
|
}
|
|
269
|
+
/** The hosted Codex participant row: what the operator handshake admitted, or how to fix it. */
|
|
270
|
+
async function hostedCodexParticipantCheck(args, actor) {
|
|
271
|
+
const declared = {
|
|
272
|
+
...(actor?.model === undefined ? {} : { model: actor.model }),
|
|
273
|
+
...(actor?.reasoningEffort === undefined ? {} : { reasoningEffort: actor.reasoningEffort }),
|
|
274
|
+
};
|
|
275
|
+
const readiness = await (args.codexParticipantReadiness ?? hostedCodexReadiness)(args.env, declared).catch(() => ({ ready: false, errorCode: "codex_unavailable" }));
|
|
276
|
+
const account = readiness.authentication === "api-key"
|
|
277
|
+
? "an API key, which bills its usage to that key"
|
|
278
|
+
: "a ChatGPT account";
|
|
279
|
+
return {
|
|
280
|
+
name: "local participant authentication",
|
|
281
|
+
ok: readiness.ready,
|
|
282
|
+
message: readiness.ready
|
|
283
|
+
? readyMessage(`Codex CLI ${readiness.cliVersion ?? "(unknown release)"} passed the operator handshake without a turn (initialize, config/read, account/read and an ephemeral thread/start): model ${readiness.resolvedModel ?? "(not reported)"} on ${account}. E2B supplies the desktop; no OpenAI API key is required for this participant.`, readiness)
|
|
284
|
+
: `Hosted Codex participant setup is unavailable (${readiness.errorCode}). ${codexRecovery(readiness, "Check `codex login status` and the operator's Codex configuration, then rerun doctor.")} No API fallback is used.`,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
152
287
|
/** The local Chrome/Chromium the scripted-browser route drives. */
|
|
153
288
|
async function scriptedBrowserCheck() {
|
|
154
289
|
const { resolveBrowserCommand } = await import("../actors/scripted-browser/browser-command.js");
|
|
@@ -158,9 +293,9 @@ async function scriptedBrowserCheck() {
|
|
|
158
293
|
message: "Scripted-browser uses local Chrome/Chromium and no participant model. Install Chrome/Chromium or set HUMANISH_BROWSER_COMMAND; a clone subject additionally needs E2B.",
|
|
159
294
|
};
|
|
160
295
|
}
|
|
161
|
-
/** One row per
|
|
162
|
-
function subjectEnvChecks(
|
|
163
|
-
return
|
|
296
|
+
/** One row per subject env name the plan requires: present or missing, never the value. */
|
|
297
|
+
function subjectEnvChecks(names, args) {
|
|
298
|
+
return names.map((name) => ({
|
|
164
299
|
name: `subject env ${name}`,
|
|
165
300
|
ok: !!args.env[name]?.trim() || args.keyPresent(name),
|
|
166
301
|
message: args.env[name]?.trim() || args.keyPresent(name)
|
|
@@ -168,7 +303,7 @@ function subjectEnvChecks(config, args) {
|
|
|
168
303
|
: "missing declared subject environment variable; provide it with --env-file",
|
|
169
304
|
}));
|
|
170
305
|
}
|
|
171
|
-
/** The post-run analysis: the Codex account, or the OpenAI key and the
|
|
306
|
+
/** The post-run analysis: the Codex account, or the OpenAI key and the analysis cost limit. */
|
|
172
307
|
async function analysisCheck(analysis, args, checkAccount) {
|
|
173
308
|
if (analysis.provider === "codex") {
|
|
174
309
|
const readiness = await checkAccount();
|
|
@@ -176,20 +311,22 @@ async function analysisCheck(analysis, args, checkAccount) {
|
|
|
176
311
|
? "Use Linux x64 or the Apple Silicon Mac with a supported Codex CLI, or explicitly select provider: openai with an API key."
|
|
177
312
|
: readiness.errorCode === "codex_busy"
|
|
178
313
|
? "Another restricted Codex analyst or setup check is active in this process. Wait for it to finish, then retry."
|
|
179
|
-
: codexRecovery(readiness, "Install the
|
|
314
|
+
: codexRecovery(readiness, "Install the Codex CLI and sign in with a ChatGPT account.");
|
|
180
315
|
return {
|
|
181
316
|
name: "post-run analysis",
|
|
182
317
|
ok: readiness.ready,
|
|
183
318
|
message: readiness.ready
|
|
184
|
-
? "
|
|
319
|
+
? readyMessage("Codex CLI and ChatGPT account login are ready for a separate restricted analyst. Analysis sends selected evidence to remote inference; model access and account allowance remain untested. Dollar cost and output-token ceilings are unavailable.", readiness)
|
|
185
320
|
: `Codex account analysis is unavailable (${readiness.errorCode ?? "codex_unavailable"}). ${recovery} No API fallback is used; participant readiness is independent.`,
|
|
186
321
|
};
|
|
187
322
|
}
|
|
323
|
+
const keyed = args.keyPresent("OPENAI_API_KEY");
|
|
188
324
|
return {
|
|
189
325
|
name: "post-run analysis",
|
|
190
326
|
ok: true,
|
|
191
|
-
|
|
192
|
-
|
|
327
|
+
...(keyed ? {} : { status: "note" }),
|
|
328
|
+
message: keyed
|
|
329
|
+
? `OPENAI_API_KEY is present for the separate automatic analysis request; model access and quota are not tested. The analysis is refused before it starts if its estimate is over $${analysis.maxCostUsd}; this is not a billing cap. Participant readiness is independent.`
|
|
193
330
|
: "Will be skipped: OPENAI_API_KEY is missing. The participant may run, but there will be no automatic findings report. Add an OpenAI API key or set review.analysis: false deliberately.",
|
|
194
331
|
};
|
|
195
332
|
}
|
|
@@ -203,26 +340,35 @@ function checkScope(analysis) {
|
|
|
203
340
|
: "Local setup only. Provider credentials are not validated, model access/quota and target reachability are untested, and no paid resources were created.",
|
|
204
341
|
};
|
|
205
342
|
}
|
|
206
|
-
/**
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
343
|
+
/**
|
|
344
|
+
* The ids of the project's labs that need each provider key for a live run, from the same plan
|
|
345
|
+
* `doctor --lab` reads. Each listed manifest resolves by its path, since a file name need not match
|
|
346
|
+
* the id inside. A lab that runs dry, that the plain CLI cannot run, or that does not plan needs
|
|
347
|
+
* none.
|
|
348
|
+
*/
|
|
349
|
+
export async function studiesByRequiredKey(cwd, keyPresent) {
|
|
350
|
+
const { listStudies, resolveStudy, resolveDryRun, routeOf } = await studyLoaders();
|
|
351
|
+
const users = new Map();
|
|
352
|
+
for (const entry of (await listStudies(cwd)).studies) {
|
|
353
|
+
const resolved = await resolveStudy(cwd, entry.path);
|
|
354
|
+
if (!resolved.ok || resolveDryRun(resolved.config, undefined, true) === true)
|
|
355
|
+
continue;
|
|
356
|
+
if (unsupportedCliRoute(resolved.config, routeOf(resolved.config)))
|
|
357
|
+
continue;
|
|
358
|
+
const planned = await planCliRun(resolved.config, cwd);
|
|
359
|
+
if (!planned.ok)
|
|
360
|
+
continue;
|
|
361
|
+
for (const key of requiredKeys(planned.planned.plan.requirements, keyPresent))
|
|
362
|
+
users.set(key, (users.get(key) ?? new Set()).add(entry.id));
|
|
363
|
+
}
|
|
364
|
+
return new Map([...users].map(([key, ids]) => [key, [...ids]]));
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* The lab planned with no run options, so its own scenario mode decides dry or live. Doctor and the
|
|
368
|
+
* TUI read a live run's keys and subject env from this plan's requirements.
|
|
369
|
+
*/
|
|
370
|
+
export async function planCliRun(config, cwd) {
|
|
371
|
+
return (await import("./plan.js")).planLab(config, { cwd });
|
|
226
372
|
}
|
|
227
373
|
function unsupportedCliRoute(config, route) {
|
|
228
374
|
if (config.subject.source === "local-app")
|
package/dist/lab/init-plan.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// here; runInit applies the plan.
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { humanishScripts } from "./init-templates.js";
|
|
6
|
+
import { isRecord } from "../run/type-guards.js";
|
|
6
7
|
import { readTextIfExists } from "./init-paths.js";
|
|
7
8
|
export async function planGitignore(projectRoot, cwd) {
|
|
8
9
|
const relativePath = ".gitignore";
|
|
@@ -158,6 +159,3 @@ export async function planPackageJson(projectRoot, cwd) {
|
|
|
158
159
|
function trimTrailingNewlines(text) {
|
|
159
160
|
return text.replace(/\n+$/, "");
|
|
160
161
|
}
|
|
161
|
-
function isRecord(value) {
|
|
162
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
163
|
-
}
|