humanish 0.107.0 → 0.109.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 +73 -69
- package/CHANGELOG.md +27 -0
- package/CONTEXT.md +51 -44
- package/README.md +148 -175
- 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-trace.js +2 -1
- package/dist/actors/codex/app-server-ui.js +1 -1
- package/dist/actors/codex/codex-admission.d.ts +91 -0
- package/dist/actors/codex/codex-admission.js +150 -0
- package/dist/actors/codex/restricted-executable.d.ts +4 -4
- package/dist/actors/codex/restricted-executable.js +8 -8
- package/dist/actors/codex/restricted-launch.d.ts +2 -1
- package/dist/actors/codex/restricted-launch.js +1 -1
- package/dist/actors/codex/restricted-participant.js +20 -18
- package/dist/actors/codex/restricted-policy.d.ts +2 -2
- package/dist/actors/codex/restricted-policy.js +2 -2
- package/dist/actors/codex/restricted-session.d.ts +3 -3
- package/dist/actors/codex/restricted-session.js +10 -5
- package/dist/actors/computer-use/actor.d.ts +18 -18
- package/dist/actors/computer-use/actor.js +4 -4
- package/dist/actors/computer-use/admission-limit.d.ts +3 -3
- package/dist/actors/computer-use/admission-limit.js +4 -4
- package/dist/actors/computer-use/executor-error.d.ts +2 -2
- package/dist/actors/computer-use/executor-error.js +3 -3
- package/dist/actors/computer-use/loop/actions.d.ts +3 -3
- package/dist/actors/computer-use/loop/actions.js +15 -15
- package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
- package/dist/actors/computer-use/loop/backstop.js +14 -12
- package/dist/actors/computer-use/loop/debrief.js +2 -2
- package/dist/actors/computer-use/loop/ending.d.ts +6 -6
- package/dist/actors/computer-use/loop/ending.js +18 -17
- package/dist/actors/computer-use/loop/observation.d.ts +2 -2
- package/dist/actors/computer-use/loop/observation.js +15 -14
- package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
- package/dist/actors/computer-use/loop/provider-call.js +12 -12
- package/dist/actors/computer-use/loop/session.d.ts +4 -4
- package/dist/actors/computer-use/loop/session.js +4 -4
- package/dist/actors/computer-use/loop/spend.d.ts +1 -1
- package/dist/actors/computer-use/loop/spend.js +1 -1
- package/dist/actors/computer-use/loop/trace.js +11 -9
- package/dist/actors/computer-use/loop/types.d.ts +47 -45
- package/dist/actors/computer-use/loop/usage.d.ts +2 -2
- package/dist/actors/computer-use/loop/usage.js +2 -2
- package/dist/actors/computer-use/loop.d.ts +6 -1
- package/dist/actors/computer-use/loop.js +26 -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 +13 -10
- package/dist/actors/computer-use/openai-provider.js +52 -41
- 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/computer-use/provider-error.d.ts +4 -4
- package/dist/actors/computer-use/provider-error.js +6 -6
- package/dist/actors/contract.d.ts +82 -47
- package/dist/actors/contract.js +30 -24
- package/dist/actors/local-agent/claude-session.d.ts +1 -1
- package/dist/actors/local-agent/claude-session.js +13 -12
- package/dist/actors/local-agent/cli.d.ts +9 -7
- 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 +8 -8
- package/dist/actors/registry.d.ts +12 -12
- package/dist/actors/registry.js +21 -20
- package/dist/actors/scripted-browser/actor.d.ts +10 -10
- package/dist/actors/scripted-browser/actor.js +17 -17
- package/dist/actors/scripted-browser/browser-command.js +1 -1
- package/dist/actors/scripted-browser/steps.js +1 -1
- package/dist/actors/scripted-browser/types.d.ts +1 -1
- package/dist/actors/stop-conditions.d.ts +1 -1
- package/dist/analysis/automatic-completion.d.ts +7 -7
- package/dist/analysis/automatic-completion.js +1 -1
- package/dist/analysis/automatic-config.d.ts +6 -6
- package/dist/analysis/automatic-config.js +1 -1
- package/dist/analysis/codex-config.d.ts +6 -2
- package/dist/analysis/codex-config.js +22 -14
- package/dist/analysis/execute.d.ts +1 -1
- package/dist/analysis/execute.js +1 -1
- package/dist/analysis/service.js +5 -5
- package/dist/analysis/types.d.ts +6 -0
- package/dist/browser-control/client.js +16 -16
- package/dist/browser-control/dispatcher.js +4 -4
- package/dist/browser-control/protocol.js +14 -14
- package/dist/browser-control/recording-transfer.js +4 -4
- package/dist/browser-control/transport.js +7 -7
- package/dist/cli/commands/analysis-signals.d.ts +2 -2
- package/dist/cli/commands/analyze.js +19 -16
- package/dist/cli/commands/codex.js +9 -9
- package/dist/cli/commands/comms.js +48 -35
- package/dist/cli/commands/feedback.js +20 -21
- package/dist/cli/commands/migrate.d.ts +4 -0
- package/dist/cli/commands/migrate.js +65 -0
- package/dist/cli/commands/observe.d.ts +0 -1
- package/dist/cli/commands/observe.js +136 -112
- package/dist/cli/commands/run-command.d.ts +10 -0
- package/dist/cli/commands/run-command.js +85 -0
- package/dist/cli/commands/runs.js +136 -139
- package/dist/cli/commands/setup.d.ts +2 -2
- package/dist/cli/commands/setup.js +27 -24
- package/dist/cli/commands/study-format.d.ts +9 -0
- package/dist/cli/commands/{lab-format.js → study-format.js} +39 -27
- package/dist/cli/commands/{lab-route-computer-use.d.ts → study-route-computer-use.d.ts} +6 -6
- package/dist/cli/commands/{lab-route-computer-use.js → study-route-computer-use.js} +17 -18
- package/dist/cli/commands/{lab-route-open.d.ts → study-route-open.d.ts} +4 -4
- package/dist/cli/commands/{lab-route-open.js → study-route-open.js} +2 -2
- package/dist/cli/commands/{lab-route-preview.d.ts → study-route-preview.d.ts} +7 -7
- package/dist/cli/commands/{lab-route-preview.js → study-route-preview.js} +7 -6
- package/dist/cli/commands/study-route-run.d.ts +19 -0
- package/dist/cli/commands/{lab-route-run.js → study-route-run.js} +6 -6
- package/dist/cli/commands/study-route-scripted.d.ts +17 -0
- package/dist/cli/commands/{lab-route-scripted.js → study-route-scripted.js} +4 -4
- package/dist/cli/commands/{lab-route-shared-world.d.ts → study-route-shared-world.d.ts} +5 -5
- package/dist/cli/commands/{lab-route-shared-world.js → study-route-shared-world.js} +10 -10
- package/dist/cli/commands/study-route-terminal.d.ts +17 -0
- package/dist/cli/commands/{lab-route-terminal.js → study-route-terminal.js} +4 -4
- package/dist/cli/commands/study-run.d.ts +9 -0
- package/dist/cli/commands/{lab-run.js → study-run.js} +44 -45
- package/dist/cli/commands/{lab-scorer.d.ts → study-scorer.d.ts} +7 -7
- package/dist/cli/commands/{lab-scorer.js → study-scorer.js} +2 -2
- package/dist/cli/commands/study.d.ts +3 -0
- package/dist/cli/commands/study.js +146 -0
- package/dist/cli/commands/tui.d.ts +4 -4
- package/dist/cli/commands/tui.js +31 -31
- package/dist/cli/commands/watch.js +71 -121
- package/dist/cli/deprecations.d.ts +6 -0
- package/dist/cli/deprecations.js +18 -0
- package/dist/cli/doctor.d.ts +18 -8
- package/dist/cli/doctor.js +114 -59
- package/dist/cli/first-run-path.d.ts +15 -13
- package/dist/cli/first-run-path.js +35 -33
- package/dist/cli/io.d.ts +44 -9
- package/dist/cli/io.js +98 -23
- package/dist/cli/observer-follow.d.ts +3 -3
- package/dist/cli/observer-follow.js +6 -7
- package/dist/cli/orientation.d.ts +10 -7
- package/dist/cli/orientation.js +89 -47
- 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 +111 -43
- package/dist/cli/telemetry.d.ts +16 -16
- package/dist/cli/telemetry.js +46 -44
- package/dist/cli.js +1 -1
- package/dist/comms/capture-surface.d.ts +13 -12
- package/dist/comms/capture-surface.js +23 -22
- package/dist/comms/catch-host.d.ts +7 -7
- package/dist/comms/catch-host.js +17 -17
- package/dist/comms/connections.d.ts +1 -1
- package/dist/comms/connections.js +2 -2
- package/dist/comms/email-catch.d.ts +3 -3
- package/dist/comms/email-catch.js +8 -8
- package/dist/comms/external-evidence.d.ts +5 -5
- package/dist/comms/external-evidence.js +5 -4
- package/dist/comms/extract.js +2 -2
- package/dist/comms/fake-inbox.d.ts +3 -3
- package/dist/comms/fake-inbox.js +3 -3
- package/dist/comms/receiving-render.d.ts +1 -1
- package/dist/comms/receiving-render.js +2 -2
- package/dist/comms/receiving-runtime.d.ts +4 -4
- 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 +38 -39
- package/dist/comms/sandbox-catch.js +36 -37
- package/dist/comms/setup.d.ts +2 -2
- package/dist/comms/setup.js +56 -25
- 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 +3 -3
- 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 +4 -4
- package/dist/feedback/draft.js +38 -80
- package/dist/feedback/export-bundle.js +1 -1
- package/dist/feedback/export.d.ts +5 -1
- package/dist/feedback/export.js +10 -10
- package/dist/feedback/feedback.d.ts +2 -2
- package/dist/feedback/feedback.js +21 -3
- package/dist/feedback/proof.d.ts +1 -1
- package/dist/feedback/proof.js +2 -2
- package/dist/guest/bootstrap.js +6 -6
- package/dist/guest/browser-tools.js +8 -8
- package/dist/guest/chromium-text.js +19 -19
- package/dist/guest/desktop-executor.d.ts +2 -2
- package/dist/guest/desktop-executor.js +20 -20
- package/dist/guest/desktop-keys.js +4 -4
- package/dist/guest/desktop-media.d.ts +2 -2
- package/dist/guest/desktop-media.js +16 -16
- package/dist/guest/desktop-native.d.ts +1 -1
- package/dist/guest/desktop-native.js +10 -10
- package/dist/guest/runtime-desktop.js +2 -2
- package/dist/guest/runtime-processes.d.ts +2 -2
- package/dist/guest/runtime-processes.js +2 -2
- package/dist/guest/runtime.js +6 -6
- package/dist/index.d.ts +14 -14
- package/dist/index.js +8 -8
- package/dist/keys/key-resolution.d.ts +5 -5
- package/dist/keys/key-resolution.js +23 -23
- package/dist/observer/artifact.d.ts +2 -2
- package/dist/observer/artifact.js +7 -7
- package/dist/observer/data.d.ts +6 -6
- package/dist/observer/data.js +5 -4
- 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 +3 -1
- package/dist/observer/library.js +8 -3
- package/dist/observer/listen.js +5 -4
- package/dist/observer/render.d.ts +1 -1
- package/dist/observer/render.js +17 -6
- package/dist/observer/run-routes.d.ts +4 -3
- package/dist/observer/run-routes.js +38 -13
- package/dist/observer/serve.d.ts +1 -1
- package/dist/observer/serve.js +7 -3
- 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 +18 -17
- package/dist/routes/computer-use/bundle.d.ts +2 -2
- package/dist/routes/computer-use/bundle.js +10 -9
- package/dist/routes/computer-use/e2b-desktop/comms.d.ts +6 -6
- package/dist/routes/computer-use/e2b-desktop/comms.js +18 -17
- package/dist/routes/computer-use/e2b-desktop/desktop.js +4 -4
- package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +5 -4
- package/dist/routes/computer-use/e2b-desktop/fidelity.js +11 -10
- package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +1 -1
- package/dist/routes/computer-use/e2b-desktop/prepare.js +10 -10
- package/dist/routes/computer-use/e2b-desktop/start.js +7 -7
- package/dist/routes/computer-use/e2b-desktop/state.d.ts +2 -2
- package/dist/routes/computer-use/e2b-desktop/teardown.js +2 -2
- package/dist/routes/computer-use/external-comms.d.ts +4 -4
- package/dist/routes/computer-use/external-comms.js +1 -1
- package/dist/routes/computer-use/fanout-bundle.js +27 -26
- package/dist/routes/computer-use/fanout-records.js +12 -13
- package/dist/routes/computer-use/live-flush.d.ts +4 -4
- package/dist/routes/computer-use/live-flush.js +6 -6
- package/dist/routes/computer-use/live-phase.d.ts +5 -4
- package/dist/routes/computer-use/live-phase.js +8 -8
- package/dist/routes/computer-use/local-tree-pack.d.ts +5 -5
- package/dist/routes/computer-use/local-tree-pack.js +1 -1
- package/dist/routes/computer-use/local-vm.d.ts +8 -8
- package/dist/routes/computer-use/local-vm.js +3 -3
- package/dist/routes/computer-use/participant-desktop.d.ts +7 -7
- package/dist/routes/computer-use/participant-desktop.js +5 -5
- package/dist/routes/computer-use/participant-execution.d.ts +4 -4
- package/dist/routes/computer-use/participant-execution.js +10 -10
- package/dist/routes/computer-use/participant-model.d.ts +6 -0
- package/dist/routes/computer-use/participant-model.js +33 -15
- package/dist/routes/computer-use/participant-prompt.d.ts +15 -15
- package/dist/routes/computer-use/participant-prompt.js +9 -9
- package/dist/routes/computer-use/participant-runs.d.ts +16 -16
- package/dist/routes/computer-use/participant-runs.js +26 -25
- package/dist/routes/computer-use/plan.d.ts +12 -12
- package/dist/routes/computer-use/plan.js +42 -42
- package/dist/routes/computer-use/preflight.d.ts +5 -5
- package/dist/routes/computer-use/preflight.js +25 -25
- package/dist/routes/computer-use/rerun-selection.d.ts +1 -1
- package/dist/routes/computer-use/rerun-selection.js +4 -3
- package/dist/routes/computer-use/result.d.ts +4 -4
- package/dist/routes/computer-use/result.js +22 -21
- package/dist/routes/computer-use/route.d.ts +12 -11
- package/dist/routes/computer-use/route.js +31 -30
- package/dist/routes/computer-use/self-report.d.ts +7 -7
- package/dist/routes/computer-use/self-report.js +32 -32
- package/dist/routes/computer-use/setup.d.ts +23 -23
- package/dist/routes/computer-use/setup.js +28 -29
- package/dist/routes/computer-use/single-bundle.d.ts +11 -11
- package/dist/routes/computer-use/single-bundle.js +40 -41
- package/dist/routes/computer-use/subject-projection.d.ts +4 -4
- package/dist/routes/computer-use/subject-projection.js +6 -6
- package/dist/routes/computer-use/types.d.ts +71 -73
- package/dist/routes/computer-use/types.js +12 -12
- package/dist/routes/preview.d.ts +13 -7
- package/dist/routes/preview.js +11 -7
- package/dist/routes/scripted/bundle.d.ts +7 -7
- package/dist/routes/scripted/bundle.js +20 -18
- package/dist/routes/scripted/plan.d.ts +8 -8
- package/dist/routes/scripted/plan.js +13 -13
- package/dist/routes/scripted/result.d.ts +3 -3
- package/dist/routes/scripted/result.js +13 -13
- package/dist/routes/scripted/route.d.ts +9 -9
- package/dist/routes/scripted/route.js +15 -16
- package/dist/routes/scripted/scenario.d.ts +1 -1
- package/dist/routes/scripted/scenario.js +5 -5
- package/dist/routes/scripted/setup.d.ts +6 -6
- package/dist/routes/scripted/setup.js +8 -8
- package/dist/routes/scripted/subject.d.ts +5 -5
- package/dist/routes/scripted/subject.js +4 -4
- package/dist/routes/scripted/surface-records.d.ts +1 -1
- package/dist/routes/scripted/surface-records.js +4 -4
- package/dist/routes/scripted/surface-sessions.d.ts +3 -3
- package/dist/routes/scripted/types.d.ts +18 -20
- package/dist/routes/scripted/types.js +2 -2
- package/dist/routes/shared-world/bundle-records.js +11 -10
- package/dist/routes/shared-world/bundle.d.ts +5 -5
- package/dist/routes/shared-world/bundle.js +46 -43
- package/dist/routes/shared-world/checkpoints.d.ts +4 -4
- package/dist/routes/shared-world/checkpoints.js +2 -2
- package/dist/routes/shared-world/comms.d.ts +14 -14
- package/dist/routes/shared-world/comms.js +19 -18
- package/dist/routes/shared-world/external-public.d.ts +4 -3
- package/dist/routes/shared-world/external-public.js +16 -12
- package/dist/routes/shared-world/handoff.d.ts +7 -6
- package/dist/routes/shared-world/handoff.js +65 -57
- package/dist/routes/shared-world/lobby-code.d.ts +2 -2
- package/dist/routes/shared-world/lobby-code.js +9 -9
- package/dist/routes/shared-world/participant-specs.d.ts +10 -9
- package/dist/routes/shared-world/participant-specs.js +38 -31
- package/dist/routes/shared-world/plan.d.ts +9 -9
- package/dist/routes/shared-world/plan.js +16 -16
- package/dist/routes/shared-world/provenance.d.ts +2 -2
- package/dist/routes/shared-world/provenance.js +2 -2
- package/dist/routes/shared-world/provisioned.d.ts +8 -8
- package/dist/routes/shared-world/provisioned.js +18 -17
- package/dist/routes/shared-world/result.d.ts +6 -6
- package/dist/routes/shared-world/result.js +29 -29
- package/dist/routes/shared-world/route.d.ts +11 -11
- package/dist/routes/shared-world/route.js +40 -39
- package/dist/routes/shared-world/setup.d.ts +16 -16
- package/dist/routes/shared-world/setup.js +23 -23
- package/dist/routes/shared-world/types.d.ts +55 -53
- package/dist/routes/shared-world/types.js +4 -4
- package/dist/routes/terminal/adapter.d.ts +5 -5
- package/dist/routes/terminal/adapter.js +9 -9
- package/dist/routes/terminal/bundle.d.ts +13 -13
- package/dist/routes/terminal/bundle.js +28 -27
- package/dist/routes/terminal/credentials.d.ts +8 -8
- package/dist/routes/terminal/credentials.js +12 -12
- package/dist/routes/terminal/dry-run.d.ts +4 -4
- package/dist/routes/terminal/dry-run.js +12 -12
- package/dist/routes/terminal/encoding.js +2 -2
- package/dist/routes/terminal/ledger.d.ts +5 -5
- package/dist/routes/terminal/ledger.js +14 -14
- package/dist/routes/terminal/lifetime.d.ts +1 -1
- package/dist/routes/terminal/lifetime.js +1 -1
- package/dist/routes/terminal/live-finish.d.ts +2 -2
- package/dist/routes/terminal/live-finish.js +10 -10
- package/dist/routes/terminal/live-sandbox.d.ts +2 -2
- package/dist/routes/terminal/live-sandbox.js +15 -15
- package/dist/routes/terminal/participant-text.js +2 -1
- package/dist/routes/terminal/persona.d.ts +2 -2
- package/dist/routes/terminal/persona.js +3 -3
- package/dist/routes/terminal/plan.d.ts +7 -7
- package/dist/routes/terminal/plan.js +15 -15
- package/dist/routes/terminal/recorder.js +2 -2
- package/dist/routes/terminal/result.d.ts +5 -5
- package/dist/routes/terminal/result.js +14 -14
- package/dist/routes/terminal/route.d.ts +9 -9
- package/dist/routes/terminal/route.js +19 -20
- package/dist/routes/terminal/sandbox.d.ts +1 -1
- package/dist/routes/terminal/sandbox.js +1 -1
- package/dist/routes/terminal/session.d.ts +5 -5
- package/dist/routes/terminal/session.js +14 -13
- package/dist/routes/terminal/token-usage.d.ts +1 -1
- package/dist/routes/terminal/token-usage.js +7 -8
- package/dist/routes/terminal/trace.d.ts +4 -4
- package/dist/routes/terminal/trace.js +2 -2
- package/dist/routes/terminal/types.d.ts +48 -50
- package/dist/routes/terminal/types.js +5 -5
- package/dist/run/bundle-shape.js +3 -3
- package/dist/run/bundle.d.ts +49 -49
- package/dist/run/bundle.js +3 -2
- package/dist/run/cost-summary.js +3 -3
- package/dist/run/costs.d.ts +23 -0
- package/dist/run/costs.js +79 -44
- package/dist/run/detail.d.ts +6 -6
- package/dist/run/detail.js +4 -4
- package/dist/run/dry-run-inputs.d.ts +1 -1
- package/dist/run/dry-run-inputs.js +2 -2
- package/dist/run/dry-run.js +20 -20
- package/dist/run/judge.d.ts +19 -13
- package/dist/run/judge.js +18 -8
- package/dist/run/outcomes.d.ts +1 -1
- package/dist/run/participant.d.ts +1 -1
- package/dist/run/paths.d.ts +1 -1
- package/dist/run/paths.js +1 -1
- package/dist/run/preflight-receipts.js +1 -1
- package/dist/run/pricing.d.ts +11 -6
- package/dist/run/pricing.js +22 -15
- package/dist/run/projection.d.ts +46 -46
- package/dist/run/projection.js +57 -57
- package/dist/run/reclaim.d.ts +1 -1
- package/dist/run/reclaim.js +3 -3
- package/dist/run/results.d.ts +5 -5
- package/dist/run/run-cost.d.ts +53 -0
- package/dist/run/run-cost.js +105 -0
- package/dist/run/run-index-analysis.d.ts +15 -0
- package/dist/run/run-index-analysis.js +77 -0
- package/dist/run/run-index.d.ts +19 -7
- package/dist/run/run-index.js +77 -64
- 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 +6 -5
- package/dist/run/run.js +3 -3
- package/dist/run/sandbox-receipts.d.ts +2 -2
- package/dist/run/sandbox-receipts.js +3 -3
- package/dist/run/shared-world-evidence.d.ts +37 -36
- package/dist/run/shared-world-evidence.js +4 -4
- package/dist/run/shared-world-shape.d.ts +1 -1
- package/dist/run/shared-world-shape.js +7 -7
- package/dist/run/stats.d.ts +14 -8
- package/dist/run/stats.js +121 -63
- package/dist/run/status.d.ts +16 -29
- package/dist/run/status.js +10 -29
- package/dist/run/stored-runs.js +2 -1
- package/dist/run/stream-shape.js +1 -1
- package/dist/run/streams.d.ts +7 -7
- package/dist/run/study-provenance.d.ts +49 -0
- package/dist/run/study-provenance.js +66 -0
- package/dist/run/study-result.d.ts +11 -0
- package/dist/run/study-result.js +9 -0
- package/dist/run/text.d.ts +2 -0
- package/dist/run/text.js +4 -0
- package/dist/run-study.d.ts +112 -0
- package/dist/{run-lab.js → run-study.js} +52 -47
- package/dist/{lab → study}/adapter-extension.d.ts +15 -27
- package/dist/{lab → study}/adapter-extension.js +10 -45
- package/dist/{lab → study}/adapter-scorer-loader.d.ts +17 -17
- package/dist/{lab → study}/adapter-scorer-loader.js +34 -34
- package/dist/study/composition-rules.d.ts +7 -0
- package/dist/{lab → study}/composition-rules.js +53 -53
- package/dist/study/config.d.ts +15 -0
- package/dist/{lab → study}/config.js +98 -41
- package/dist/study/convert.d.ts +33 -0
- package/dist/study/convert.js +432 -0
- package/dist/{lab → study}/device-presets.d.ts +10 -10
- package/dist/{lab → study}/device-presets.js +11 -11
- package/dist/study/discover.d.ts +75 -0
- package/dist/{lab → study}/discover.js +134 -95
- package/dist/{lab → study}/doctor.d.ts +19 -12
- package/dist/{lab → study}/doctor.js +58 -20
- 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 +44 -0
- package/dist/{lab → study}/init-templates.d.ts +2 -2
- package/dist/study/init-templates.js +421 -0
- package/dist/{lab → study}/init.d.ts +2 -2
- package/dist/{lab → study}/init.js +46 -11
- package/dist/study/keys.d.ts +4 -0
- package/dist/{lab → study}/keys.js +46 -12
- 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/{lab → study}/parse/actors.d.ts +5 -5
- package/dist/{lab → study}/parse/actors.js +14 -14
- package/dist/study/parse/comms.d.ts +12 -0
- package/dist/{lab → study}/parse/comms.js +5 -5
- package/dist/study/parse/execution.d.ts +19 -0
- package/dist/{lab → study}/parse/execution.js +13 -13
- package/dist/study/parse/study-v3.d.ts +21 -0
- package/dist/study/parse/study-v3.js +259 -0
- package/dist/study/parse/subject-state.d.ts +30 -0
- package/dist/{lab → study}/parse/subject-state.js +19 -19
- package/dist/{lab → study}/parse/subject.d.ts +3 -3
- package/dist/{lab → study}/parse/subject.js +34 -34
- package/dist/{lab → study}/parse/values.d.ts +3 -3
- package/dist/{lab → study}/parse/values.js +3 -3
- package/dist/{lab → study}/persona-resolve.d.ts +8 -8
- package/dist/{lab → study}/persona-resolve.js +6 -6
- package/dist/{lab → study}/plan-base.d.ts +7 -7
- package/dist/{lab → study}/plan-base.js +1 -1
- package/dist/{lab → study}/plan-participants.d.ts +12 -12
- package/dist/{lab → study}/plan-participants.js +4 -4
- package/dist/{lab → study}/plan-types.d.ts +31 -31
- package/dist/{lab → study}/plan-types.js +2 -2
- package/dist/study/plan.d.ts +13 -0
- package/dist/study/plan.js +101 -0
- package/dist/study/preflight-probes.d.ts +3 -0
- package/dist/{lab → study}/preflight-probes.js +20 -19
- package/dist/study/preflight-result.d.ts +8 -0
- package/dist/{lab → study}/preflight-result.js +5 -4
- package/dist/study/preflight.d.ts +94 -0
- package/dist/{lab → study}/preflight.js +12 -12
- package/dist/{lab → study}/requirements.d.ts +3 -3
- package/dist/{lab → study}/requirements.js +1 -1
- package/dist/study/route-inputs.d.ts +28 -0
- package/dist/{lab → study}/route-inputs.js +1 -1
- package/dist/{lab → study}/routing.d.ts +39 -33
- package/dist/{lab → study}/routing.js +60 -29
- package/dist/{lab/run-lab-events.d.ts → study/run-study-events.d.ts} +10 -13
- package/dist/{lab/run-lab-events.js → study/run-study-events.js} +3 -9
- package/dist/{lab/run-lab-homes.d.ts → study/run-study-homes.d.ts} +21 -18
- package/dist/{lab/run-lab-homes.js → study/run-study-homes.js} +1 -1
- package/dist/study/run-study-options.d.ts +28 -0
- package/dist/{lab/run-lab-options.js → study/run-study-options.js} +29 -25
- package/dist/{lab/lab-deps.d.ts → study/study-deps.d.ts} +8 -13
- package/dist/{lab/lab-deps.js → study/study-deps.js} +2 -2
- package/dist/{lab → study}/summary.d.ts +16 -15
- package/dist/{lab → study}/summary.js +21 -21
- package/dist/{lab → study}/tasks.d.ts +18 -18
- package/dist/{lab → study}/tasks.js +14 -14
- package/dist/{lab → study}/types.d.ts +202 -196
- package/dist/{lab → study}/types.js +3 -1
- package/dist/{lab → study}/validation.d.ts +27 -27
- package/dist/{lab → study}/validation.js +53 -51
- package/dist/study/warnings.d.ts +12 -0
- package/dist/{lab → study}/warnings.js +62 -34
- package/dist/subject/clone.d.ts +7 -7
- package/dist/subject/clone.js +2 -2
- package/dist/subject/desktop-cli.d.ts +1 -1
- package/dist/subject/desktop-cli.js +2 -2
- package/dist/subject/local-tree-archive.d.ts +2 -2
- package/dist/subject/local-tree-archive.js +4 -4
- package/dist/subject/local-tree.d.ts +4 -4
- package/dist/subject/node-bootstrap.js +1 -1
- package/dist/subject/runtime.js +9 -10
- package/dist/subject/serve.d.ts +5 -5
- package/dist/subject/serve.js +3 -3
- package/dist/subject/state.d.ts +4 -4
- package/dist/subject/state.js +1 -1
- package/dist/subject/steps.d.ts +6 -6
- package/dist/subject/steps.js +5 -5
- package/dist/substrates/command-failure.d.ts +3 -3
- package/dist/substrates/command-failure.js +3 -3
- package/dist/substrates/desktop-session.js +2 -2
- package/dist/substrates/detached.d.ts +6 -6
- package/dist/substrates/detached.js +7 -7
- package/dist/substrates/e2b/cdp-probe.d.ts +9 -9
- package/dist/substrates/e2b/cdp-probe.js +14 -17
- package/dist/substrates/e2b/desktop-browser.d.ts +6 -6
- package/dist/substrates/e2b/desktop-browser.js +9 -9
- package/dist/substrates/e2b/desktop-cdp.d.ts +10 -10
- package/dist/substrates/e2b/desktop-cdp.js +9 -9
- package/dist/substrates/e2b/desktop-executor.d.ts +2 -2
- package/dist/substrates/e2b/desktop-executor.js +13 -13
- package/dist/substrates/e2b/desktop-geometry.d.ts +4 -4
- package/dist/substrates/e2b/desktop-geometry.js +8 -8
- package/dist/substrates/e2b/desktop-media.d.ts +4 -4
- package/dist/substrates/e2b/desktop-media.js +1 -1
- 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/lifetime.js +1 -1
- package/dist/substrates/e2b/sandbox.d.ts +4 -4
- package/dist/substrates/e2b/sandbox.js +2 -2
- package/dist/substrates/e2b/sdk.d.ts +12 -12
- package/dist/substrates/e2b/sdk.js +7 -7
- package/dist/substrates/local/runtime-config.d.ts +4 -4
- package/dist/substrates/local/runtime-config.js +4 -4
- package/dist/tui/actions.d.ts +1 -1
- package/dist/tui/actions.js +13 -13
- package/dist/tui/contract.d.ts +23 -23
- package/dist/tui/contract.js +11 -11
- package/dist/tui/launch.d.ts +7 -7
- package/dist/tui/launch.js +36 -31
- package/dist/tui/project.js +5 -5
- package/dist/tui-app.js +139 -139
- package/dist/verify/actor.d.ts +8 -8
- package/dist/verify/actor.js +36 -36
- package/dist/verify/artifacts.d.ts +2 -2
- package/dist/verify/artifacts.js +3 -3
- package/dist/verify/context-growth.d.ts +9 -0
- package/dist/verify/context-growth.js +62 -0
- package/dist/verify/costs.d.ts +6 -6
- package/dist/verify/costs.js +8 -8
- 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 +16 -16
- package/dist/verify/subject.d.ts +5 -5
- package/dist/verify/subject.js +19 -19
- package/dist/verify/verify.js +94 -44
- package/docs/README.md +25 -32
- package/docs/architecture/actor-contract.md +60 -91
- package/docs/architecture/browser-control.md +1 -1
- package/docs/architecture/desktop-sessions.md +7 -7
- package/docs/architecture/external-public-shared-world.md +68 -65
- package/docs/architecture/github-feedback-loop.md +2 -5
- package/docs/architecture/guest-desktop.md +2 -2
- package/docs/architecture/observer.md +34 -34
- package/docs/architecture/restricted-codex-analysis.md +34 -28
- package/docs/architecture/serve.md +34 -37
- package/docs/architecture/state-driven-executor.md +55 -58
- package/docs/architecture/task-protocol-support.md +6 -6
- package/docs/architecture/terminal-product-route.md +70 -110
- package/docs/contracts/README.md +24 -0
- package/docs/contracts/adapter-admission.md +3 -3
- package/docs/contracts/adapter-fixtures.md +4 -7
- 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 +42 -44
- package/docs/contracts/schemas.md +446 -368
- package/docs/contracts/study-analysis.md +7 -4
- package/docs/contracts/study-costs.md +28 -9
- 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/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 +7 -7
- package/examples/README.md +1 -1
- 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/examples/scorer/scorer.mjs +3 -3
- package/package.json +16 -17
- package/skills/humanish/SKILL.md +64 -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 -72
- package/dist/actors/codex/qualified-versions.js +0 -132
- package/dist/cli/commands/lab-format.d.ts +0 -8
- package/dist/cli/commands/lab-route-run.d.ts +0 -19
- package/dist/cli/commands/lab-route-scripted.d.ts +0 -17
- package/dist/cli/commands/lab-route-terminal.d.ts +0 -17
- package/dist/cli/commands/lab-run.d.ts +0 -9
- package/dist/cli/commands/lab.d.ts +0 -3
- package/dist/cli/commands/lab.js +0 -199
- package/dist/cli/renamed-options.d.ts +0 -11
- package/dist/cli/renamed-options.js +0 -18
- package/dist/lab/composition-rules.d.ts +0 -7
- package/dist/lab/config.d.ts +0 -7
- package/dist/lab/discover.d.ts +0 -65
- package/dist/lab/init-templates.js +0 -416
- package/dist/lab/keys.d.ts +0 -2
- package/dist/lab/parse/comms.d.ts +0 -12
- package/dist/lab/parse/execution.d.ts +0 -19
- package/dist/lab/parse/subject-state.d.ts +0 -30
- package/dist/lab/plan.d.ts +0 -19
- package/dist/lab/plan.js +0 -132
- package/dist/lab/preflight-probes.d.ts +0 -3
- package/dist/lab/preflight-result.d.ts +0 -7
- package/dist/lab/preflight.d.ts +0 -92
- package/dist/lab/route-inputs.d.ts +0 -28
- package/dist/lab/run-lab-options.d.ts +0 -28
- package/dist/lab/warnings.d.ts +0 -2
- package/dist/observer/static.d.ts +0 -39
- package/dist/observer/static.js +0 -369
- package/dist/run-lab.d.ts +0 -112
- 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 -295
- 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/{lab → study}/init-paths.d.ts +0 -0
- /package/dist/{lab → study}/init-paths.js +0 -0
- /package/dist/{lab → study}/init-plan.d.ts +0 -0
- /package/dist/{lab → study}/init-plan.js +0 -0
- /package/dist/{lab → study}/participant-assignment.d.ts +0 -0
- /package/dist/{lab → study}/participant-assignment.js +0 -0
- /package/dist/{lab → study}/persona.d.ts +0 -0
- /package/dist/{lab → study}/persona.js +0 -0
|
@@ -1,68 +1,58 @@
|
|
|
1
1
|
import { Command, Option } from "commander";
|
|
2
|
-
import {
|
|
2
|
+
import { serveObserver } from "../../observer/render.js";
|
|
3
3
|
import { WATCH_SAFE_NOT_APPLICABLE_MESSAGE } from "../../observer/exposure.js";
|
|
4
4
|
import { runDryRun } from "../../run/dry-run.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { applyEnvFileOption, collectRepeated, formatRunHuman,
|
|
5
|
+
import { runStudyCommand } from "./study-run.js";
|
|
6
|
+
import { addRunOptions, studyOnlyFlags } from "./run-command.js";
|
|
7
|
+
import { applyEnvFileOption, collectRepeated, formatRunHuman, parseObserverPort, parsePositiveInteger, wantsJson, writeResult, } from "../io.js";
|
|
8
8
|
import { followObserver, formatObserverHuman, watchExposeRequested } from "../observer-follow.js";
|
|
9
9
|
export function registerWatchCommand(parent, io) {
|
|
10
|
-
|
|
10
|
+
// A run's flags come from addRunOptions, the helper `run` uses, so the two cannot drift.
|
|
11
|
+
addRunOptions(parent
|
|
11
12
|
.command("watch")
|
|
12
|
-
.argument("[
|
|
13
|
-
.description("Run
|
|
14
|
-
.summary("Run
|
|
15
|
-
.option("--
|
|
16
|
-
.option("--
|
|
17
|
-
.option("--dry-run", "Lab only: render contract evidence without live provider spend.")
|
|
18
|
-
.option("--count <count>", "With a lab, override a preview or computer-use lab's participant count. Without one, start a fresh synthetic run with this many participants; 4 when --run is omitted.")
|
|
19
|
-
// The older spelling of --count, hidden and noted on stderr (renamed-options.ts).
|
|
20
|
-
.addOption(new Option("--sims <count>").hideHelp())
|
|
21
|
-
.option("--scorer <path>", "Terminal/computer-use/shared-world labs only: repo-relative adopter scorer module (.mjs). Overrides review.scorer.ref. Executable code: review it as code.")
|
|
22
|
-
.option("--run-id <id>", "Explicit run id for deterministic fixture tests; refused when that run already exists.")
|
|
23
|
-
.option("--cwd <path>", "Target project directory.", ".")
|
|
24
|
-
.option("--env-file <path>", "Load a local env file for this watch without persisting values.")
|
|
25
|
-
.option("--open", "Open the observer in the default browser.")
|
|
26
|
-
.option("--no-open", "Render without opening a browser.")
|
|
27
|
-
.addOption(new Option("--follow", "Deprecated; human output follows by default.").hideHelp())
|
|
28
|
-
.option("--detach", "Render/open once and exit without attached watch server.")
|
|
29
|
-
.option("--port <port>", "Local observer server port when following.", "0")
|
|
30
|
-
.option("--expose", "CUA lab only: expose the live run through an authenticated edge so you can watch from a phone. Requires edge auth.")
|
|
13
|
+
.argument("[study]", "Study id or .yaml path to run and observe.")
|
|
14
|
+
.description("Run a study, open its Observer and keep the shell attached.")
|
|
15
|
+
.summary("Run a study and follow it in the Observer.")
|
|
16
|
+
.option("--study <id-or-path>", "Study id or .yaml path, in place of the argument."))
|
|
17
|
+
.option("--expose", "Computer-use studies only: share the live run through an authenticated tunnel, to watch from a phone. Requires --oauth or --public-url.")
|
|
31
18
|
.addOption(new Option("--tunnel <provider>", "Spawn the external tunnel binary against the loopback port.").choices(["ngrok"]))
|
|
32
19
|
.option("--tunnel-domain <domain>", "Reserved domain passed to ngrok as --url (e.g. observer.example.com). Requires --tunnel.")
|
|
33
20
|
.addOption(new Option("--oauth <provider>", "Turn on ngrok edge OAuth. Requires --tunnel.").choices([
|
|
34
21
|
"google",
|
|
35
22
|
]))
|
|
36
|
-
.option("--allow-email <addr>", "Edge OAuth allow rule: permit this email. Repeatable. Requires --oauth.", collectRepeated
|
|
37
|
-
.option("--allow-domain <domain>", "Edge OAuth allow rule: permit this domain. Repeatable. Requires --oauth.", collectRepeated
|
|
23
|
+
.option("--allow-email <addr>", "Edge OAuth allow rule: permit this email. Repeatable. Requires --oauth.", collectRepeated)
|
|
24
|
+
.option("--allow-domain <domain>", "Edge OAuth allow rule: permit this domain. Repeatable. Requires --oauth.", collectRepeated)
|
|
38
25
|
.option("--public-url <origin>", "Bring-your-own authed edge (Cloudflare Access/Tailscale/manual). Binds loopback and trusts your edge. Requires --expose.")
|
|
39
|
-
|
|
40
|
-
|
|
26
|
+
// Hidden: watch rejects --safe with a pointer to the library filter and to edge auth, which
|
|
27
|
+
// a bare "unknown option" would lose.
|
|
28
|
+
.addOption(new Option("--safe").hideHelp())
|
|
41
29
|
.addHelpText("after", [
|
|
42
30
|
"",
|
|
31
|
+
"Without a study or --run, watch starts a synthetic run of 4 participants; --count changes it.",
|
|
32
|
+
"",
|
|
43
33
|
"Happy path:",
|
|
44
34
|
" humanish watch",
|
|
45
35
|
" humanish watch first-run",
|
|
46
|
-
" humanish watch --lab .humanish/labs/local.yaml",
|
|
47
36
|
"",
|
|
48
|
-
"Watch a live
|
|
49
|
-
" humanish watch my-
|
|
37
|
+
"Watch a live computer-use run from your phone through an authenticated tunnel:",
|
|
38
|
+
" humanish watch my-browser-study --expose --tunnel ngrok --oauth google --allow-email you@example.com",
|
|
50
39
|
"",
|
|
51
40
|
"Agent/CI path:",
|
|
52
41
|
" humanish watch --json --no-open",
|
|
53
42
|
"",
|
|
54
|
-
"
|
|
55
|
-
" humanish
|
|
43
|
+
"Saved runs:",
|
|
44
|
+
" humanish observe --run latest",
|
|
56
45
|
].join("\n"))
|
|
57
|
-
.action((
|
|
46
|
+
.action((named, options, command) => handleWatch(io, named, options, command));
|
|
58
47
|
}
|
|
59
|
-
async function handleWatch(io,
|
|
60
|
-
const options =
|
|
61
|
-
const
|
|
62
|
-
|
|
48
|
+
async function handleWatch(io, named, parsed, command) {
|
|
49
|
+
const options = parsed;
|
|
50
|
+
const option = options.study;
|
|
51
|
+
const study = option ?? named;
|
|
52
|
+
if (option !== undefined && named !== undefined) {
|
|
63
53
|
refuseWatch(command, io, options.cwd, {
|
|
64
54
|
code: "HUMANISH_WATCH_OPTION_CONFLICT",
|
|
65
|
-
message: "Use either
|
|
55
|
+
message: "Use either a study argument or --study, not both.",
|
|
66
56
|
});
|
|
67
57
|
return;
|
|
68
58
|
}
|
|
@@ -71,26 +61,34 @@ async function handleWatch(io, labArg, parsed, command) {
|
|
|
71
61
|
cwd: options.cwd,
|
|
72
62
|
envFile: options.envFile,
|
|
73
63
|
io,
|
|
74
|
-
//
|
|
64
|
+
// runStudyCommand discovers keys for a live study; a preview run needs none.
|
|
75
65
|
discoverKeys: false,
|
|
76
66
|
}))) {
|
|
77
67
|
return;
|
|
78
68
|
}
|
|
79
|
-
if (
|
|
80
|
-
await
|
|
69
|
+
if (study) {
|
|
70
|
+
await watchStudy(io, command, study, options);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const studyOnly = studyOnlyFlags(options);
|
|
74
|
+
if (studyOnly.length > 0) {
|
|
75
|
+
refuseWatch(command, io, options.cwd, {
|
|
76
|
+
code: "HUMANISH_WATCH_OPTION_CONFLICT",
|
|
77
|
+
message: `${studyOnly.join(", ")} ${studyOnly.length === 1 ? "needs" : "need"} a study: humanish watch <study>.`,
|
|
78
|
+
});
|
|
81
79
|
return;
|
|
82
80
|
}
|
|
83
|
-
// Exposure is only meaningful for a live
|
|
84
|
-
//
|
|
85
|
-
//
|
|
81
|
+
// Exposure is only meaningful for a live computer-use study run (it serves the live desktop). A
|
|
82
|
+
// watch without a study starts a fresh synthetic run with no live desktop to stream, so exposure
|
|
83
|
+
// flags there are refused rather than silently ignored; use `observe --all`.
|
|
86
84
|
if (watchExposeRequested(options)) {
|
|
87
85
|
refuseWatch(command, io, options.cwd, {
|
|
88
86
|
code: "HUMANISH_WATCH_OPTION_CONFLICT",
|
|
89
|
-
message: "--expose/--tunnel/--oauth apply only to a live
|
|
87
|
+
message: "--expose/--tunnel/--oauth apply only to a live computer-use run; to expose finished evidence use `humanish observe --all --expose`.",
|
|
90
88
|
});
|
|
91
89
|
return;
|
|
92
90
|
}
|
|
93
|
-
// --safe is
|
|
91
|
+
// --safe is an `observe --all` library filter; watch shows one run and has nothing to filter.
|
|
94
92
|
if (options.safe === true) {
|
|
95
93
|
refuseWatch(command, io, options.cwd, {
|
|
96
94
|
code: "HUMANISH_WATCH_SAFE_NOT_APPLICABLE",
|
|
@@ -98,7 +96,7 @@ async function handleWatch(io, labArg, parsed, command) {
|
|
|
98
96
|
});
|
|
99
97
|
return;
|
|
100
98
|
}
|
|
101
|
-
const target = resolveWatchTarget(options
|
|
99
|
+
const target = resolveWatchTarget(options);
|
|
102
100
|
if ("code" in target) {
|
|
103
101
|
refuseWatch(command, io, options.cwd, target);
|
|
104
102
|
return;
|
|
@@ -109,7 +107,7 @@ async function handleWatch(io, labArg, parsed, command) {
|
|
|
109
107
|
: options.open === true
|
|
110
108
|
? true
|
|
111
109
|
: !wantsMachine && process.stdout.isTTY === true;
|
|
112
|
-
const wantsFollow = !wantsMachine && options.detach !== true
|
|
110
|
+
const wantsFollow = !wantsMachine && options.detach !== true;
|
|
113
111
|
const staticOpen = wantsFollow ? false : shouldOpen;
|
|
114
112
|
const rendered = await renderWatchEvidence(io, command, options, target.requestedParticipantCount, staticOpen);
|
|
115
113
|
if (rendered === undefined)
|
|
@@ -131,62 +129,19 @@ function refuseWatch(command, io, cwd, refusal) {
|
|
|
131
129
|
writeResult(command, io, result, formatRunHuman);
|
|
132
130
|
io.setExitCode(2);
|
|
133
131
|
}
|
|
134
|
-
/** A
|
|
135
|
-
async function
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
code: "HUMANISH_WATCH_OPTION_CONFLICT",
|
|
139
|
-
message: "Use either a lab to start evidence or --run to watch existing evidence, not both.",
|
|
140
|
-
});
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
await runLabCommand({
|
|
144
|
-
command,
|
|
145
|
-
io,
|
|
146
|
-
lab,
|
|
147
|
-
mode: "watch",
|
|
148
|
-
options: {
|
|
149
|
-
cwd: options.cwd,
|
|
150
|
-
...(options.count === undefined ? {} : { count: options.count }),
|
|
151
|
-
...(options.detach === undefined ? {} : { detach: options.detach }),
|
|
152
|
-
...(options.dryRun === undefined ? {} : { dryRun: options.dryRun }),
|
|
153
|
-
...(options.open === undefined ? {} : { open: options.open }),
|
|
154
|
-
port: options.port,
|
|
155
|
-
...(options.runId === undefined ? {} : { runId: options.runId }),
|
|
156
|
-
...(options.scorer === undefined ? {} : { scorer: options.scorer }),
|
|
157
|
-
...(options.expose === undefined ? {} : { expose: options.expose }),
|
|
158
|
-
...(options.tunnel === undefined ? {} : { tunnel: options.tunnel }),
|
|
159
|
-
...(options.tunnelDomain === undefined ? {} : { tunnelDomain: options.tunnelDomain }),
|
|
160
|
-
...(options.oauth === undefined ? {} : { oauth: options.oauth }),
|
|
161
|
-
allowEmail: options.allowEmail,
|
|
162
|
-
allowDomain: options.allowDomain,
|
|
163
|
-
...(options.publicUrl === undefined ? {} : { publicUrl: options.publicUrl }),
|
|
164
|
-
...(options.safe === undefined ? {} : { safe: options.safe }),
|
|
165
|
-
...(options.json === undefined ? {} : { json: options.json }),
|
|
166
|
-
},
|
|
167
|
-
});
|
|
132
|
+
/** A study argument starts that study under watch. */
|
|
133
|
+
async function watchStudy(io, command, study, options) {
|
|
134
|
+
// Forwarded wholesale, as `run` forwards its options, so a run flag reaches the run either way.
|
|
135
|
+
await runStudyCommand({ command, io, study, mode: "watch", options });
|
|
168
136
|
}
|
|
169
|
-
/** Without a
|
|
170
|
-
function resolveWatchTarget(options
|
|
171
|
-
const runOptionSource = typeof command.getOptionValueSource === "function"
|
|
172
|
-
? command.getOptionValueSource("run")
|
|
173
|
-
: undefined;
|
|
174
|
-
const runWasOmitted = runOptionSource === undefined || runOptionSource === "default";
|
|
137
|
+
/** Without a study, watch starts a fresh synthetic run of `--count` participants, 4 by default. */
|
|
138
|
+
function resolveWatchTarget(options) {
|
|
175
139
|
const participantCount = options.count === undefined ? undefined : parsePositiveInteger(options.count);
|
|
176
140
|
const port = parseObserverPort(options.port);
|
|
177
141
|
if (participantCount === null) {
|
|
178
|
-
return { code: "HUMANISH_INVALID_SIM_COUNT", message: "--count must be a positive integer." };
|
|
179
|
-
}
|
|
180
|
-
if (!runWasOmitted && participantCount !== undefined) {
|
|
181
|
-
return {
|
|
182
|
-
code: "HUMANISH_WATCH_OPTION_CONFLICT",
|
|
183
|
-
message: "Use either --run to watch existing evidence or --count to start a fresh run, not both.",
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
if (!runWasOmitted && options.runId !== undefined) {
|
|
187
142
|
return {
|
|
188
|
-
code: "
|
|
189
|
-
message: "--
|
|
143
|
+
code: "HUMANISH_INVALID_PARTICIPANT_COUNT",
|
|
144
|
+
message: "--count must be a positive integer.",
|
|
190
145
|
};
|
|
191
146
|
}
|
|
192
147
|
if (port === null) {
|
|
@@ -195,30 +150,25 @@ function resolveWatchTarget(options, command) {
|
|
|
195
150
|
message: "--port must be an integer between 0 and 65535.",
|
|
196
151
|
};
|
|
197
152
|
}
|
|
198
|
-
return { requestedParticipantCount: participantCount ??
|
|
153
|
+
return { requestedParticipantCount: participantCount ?? 4, port };
|
|
199
154
|
}
|
|
200
|
-
/** Render the
|
|
155
|
+
/** Render the fresh run; undefined when it failed and its result was written. */
|
|
201
156
|
async function renderWatchEvidence(io, command, options, requestedParticipantCount, staticOpen) {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
observer: { open: staticOpen },
|
|
211
|
-
});
|
|
212
|
-
if (!runResult.ok || runResult.observer === undefined) {
|
|
213
|
-
writeResult(command, io, runResult, formatRunHuman);
|
|
214
|
-
io.setExitCode(2);
|
|
215
|
-
return undefined;
|
|
216
|
-
}
|
|
217
|
-
return runResult.observer;
|
|
218
|
-
}
|
|
219
|
-
return renderObserver(options.cwd, options.run ?? "latest", {
|
|
220
|
-
open: staticOpen,
|
|
157
|
+
// A fresh run renders through its finished run, so the page shown is the run just written,
|
|
158
|
+
// never a directory swapped in under its id.
|
|
159
|
+
const runResult = await runDryRun({
|
|
160
|
+
cwd: options.cwd,
|
|
161
|
+
dryRun: true,
|
|
162
|
+
participantCount: requestedParticipantCount,
|
|
163
|
+
...(options.runId === undefined ? {} : { runId: options.runId }),
|
|
164
|
+
observer: { open: staticOpen },
|
|
221
165
|
});
|
|
166
|
+
if (!runResult.ok || runResult.observer === undefined) {
|
|
167
|
+
writeResult(command, io, runResult, formatRunHuman);
|
|
168
|
+
io.setExitCode(2);
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
return runResult.observer;
|
|
222
172
|
}
|
|
223
173
|
/** Write the result, then keep a live server attached when following. */
|
|
224
174
|
async function reportWatch(io, command, rendered, serve) {
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import type { CliIo } from "./io.js";
|
|
3
|
+
/** Print `warning: <message>` on stderr, and queue the message for the command's JSON result. */
|
|
4
|
+
export declare function warnAndQueue(command: Command, io: CliIo, message: string): void;
|
|
5
|
+
/** `output` with the command's queued warnings at the front of its `warnings`. */
|
|
6
|
+
export declare function withQueuedWarnings<T>(command: Command, output: T): T;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const queued = new WeakMap();
|
|
2
|
+
/** Print `warning: <message>` on stderr, and queue the message for the command's JSON result. */
|
|
3
|
+
export function warnAndQueue(command, io, message) {
|
|
4
|
+
io.writeErr(`warning: ${message}\n`);
|
|
5
|
+
queued.set(command, [...(queued.get(command) ?? []), message]);
|
|
6
|
+
}
|
|
7
|
+
/** `output` with the command's queued warnings at the front of its `warnings`. */
|
|
8
|
+
export function withQueuedWarnings(command, output) {
|
|
9
|
+
const messages = queued.get(command);
|
|
10
|
+
if (messages === undefined || output === null || typeof output !== "object")
|
|
11
|
+
return output;
|
|
12
|
+
if (Array.isArray(output))
|
|
13
|
+
return output;
|
|
14
|
+
const existing = output.warnings;
|
|
15
|
+
if (existing !== undefined && !Array.isArray(existing))
|
|
16
|
+
return output;
|
|
17
|
+
return { ...output, warnings: [...messages, ...(existing ?? [])] };
|
|
18
|
+
}
|
package/dist/cli/doctor.d.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { type KeyResolutionDeps } from "../keys/key-resolution.js";
|
|
2
2
|
import { type DetectLocalAgentsOptions } from "../actors/local-agent/cli.js";
|
|
3
|
-
import { type
|
|
3
|
+
import { type StudySetupCheckArgs } from "../study/doctor.js";
|
|
4
4
|
declare const DOCTOR_SCHEMA = "humanish.doctor-result.v1";
|
|
5
|
+
/**
|
|
6
|
+
* A row's verdict, as the human output prints it. A "note" is advisory: it never fails the run, so
|
|
7
|
+
* its `ok` is true. "not_checked" goes with `checked: false`.
|
|
8
|
+
*/
|
|
9
|
+
type DoctorStatus = "ok" | "missing" | "not_checked" | "note";
|
|
5
10
|
export interface DoctorResult {
|
|
6
11
|
schema: typeof DOCTOR_SCHEMA;
|
|
7
12
|
ok: boolean;
|
|
@@ -9,14 +14,15 @@ export interface DoctorResult {
|
|
|
9
14
|
checks: Array<{
|
|
10
15
|
name: string;
|
|
11
16
|
ok: boolean;
|
|
17
|
+
status: DoctorStatus;
|
|
12
18
|
message: string;
|
|
13
19
|
/**
|
|
14
|
-
*
|
|
20
|
+
* Additive + optional. `false` means the check never ran: the directory could not be read, so
|
|
15
21
|
* there is nothing to report about it either way. Absent means it ran and `ok` is its verdict.
|
|
16
22
|
*
|
|
17
|
-
* It exists
|
|
18
|
-
*
|
|
19
|
-
*
|
|
23
|
+
* It exists so a failed check and an unrun one render differently. Without it an unrun row
|
|
24
|
+
* shows the success text, such as `missing package.json: package.json is present and safe to
|
|
25
|
+
* read` (labs/tui-self-study.yaml).
|
|
20
26
|
*/
|
|
21
27
|
checked?: boolean;
|
|
22
28
|
}>;
|
|
@@ -25,18 +31,22 @@ export interface DoctorResult {
|
|
|
25
31
|
* Version 2.3.1 stopped holding a launched background command's event stream open. Version 2.3.2
|
|
26
32
|
* also requires an e2b release whose background command handle supports sendStdin and closeStdin,
|
|
27
33
|
* which the optional speech transport needs. On older releases the CLI could stay alive minutes
|
|
28
|
-
* past a written result (
|
|
34
|
+
* past a written result (measured 2026-09-04 on 2.2.3: twelve minutes).
|
|
29
35
|
*/
|
|
30
36
|
export declare const DESKTOP_SDK_FLOOR = "2.3.2";
|
|
31
37
|
/** The advisory `doctor` attaches to an installed desktop SDK older than the floor, else undefined. */
|
|
32
38
|
export declare function desktopSdkAdvisory(version: string | undefined): string | undefined;
|
|
39
|
+
/** A row as a check writes it. Doctor derives `status`; an advisory row sets "note" itself. */
|
|
40
|
+
export type DoctorCheckDraft = Omit<DoctorResult["checks"][number], "status"> & {
|
|
41
|
+
status?: "note";
|
|
42
|
+
};
|
|
33
43
|
export declare function doctor(cwdInput: string, options?: {
|
|
34
|
-
|
|
44
|
+
study?: string;
|
|
35
45
|
env?: NodeJS.ProcessEnv;
|
|
36
46
|
localAgents?: DetectLocalAgentsOptions;
|
|
37
47
|
/** Where the key probe looks for vendor stores; tests point it at a temp home. */
|
|
38
48
|
keyDeps?: KeyResolutionDeps;
|
|
39
49
|
/** The hosted Codex participant's operator handshake; tests replace it. */
|
|
40
|
-
codexParticipantReadiness?:
|
|
50
|
+
codexParticipantReadiness?: StudySetupCheckArgs["codexParticipantReadiness"];
|
|
41
51
|
}): Promise<DoctorResult>;
|
|
42
52
|
export {};
|