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
package/dist/comms/types.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
// The addressed message bus for captured mail
|
|
1
|
+
// The addressed message bus for captured mail: the email or SMS a persona receives off the
|
|
2
2
|
// app, as a testable surface. One port, addressed by participant, so the inbox surface and the evidence
|
|
3
3
|
// writer read messages without knowing how they were captured.
|
|
4
4
|
//
|
|
5
|
-
//
|
|
6
|
-
// address
|
|
5
|
+
// Public safety: raw address values, message bodies, links, and codes are runtime-only. Only the
|
|
6
|
+
// address digest (sha256-short, via redaction.digestText) is ever meant to reach a persisted bundle;
|
|
7
7
|
// a verification link / OTP has "no secret shape" (like the lobby code) → literal-scrub + digest.
|
|
8
8
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A perceptual hash of a PNG frame for no-progress detection. Decodes the PNG, area-averages it to
|
|
3
|
-
* a SIGNATURE_GRID x SIGNATURE_GRID grayscale grid,
|
|
3
|
+
* a SIGNATURE_GRID x SIGNATURE_GRID grayscale grid, contrast-normalizes that grid, quantizes each
|
|
4
4
|
* cell to SIGNATURE_LEVELS, and packs the cells into a hex string. Deterministic (no Date, no
|
|
5
5
|
* random). Returns SIGNATURE_FALLBACK on any decode failure so two unreadable frames compare equal.
|
|
6
6
|
* The hash cannot be reversed to the image, so exposing it in a trace is public-safe.
|
|
@@ -6,7 +6,7 @@ const SIGNATURE_FALLBACK = "unreadable";
|
|
|
6
6
|
const ANCHOR_LEVELS = 16;
|
|
7
7
|
/**
|
|
8
8
|
* A perceptual hash of a PNG frame for no-progress detection. Decodes the PNG, area-averages it to
|
|
9
|
-
* a SIGNATURE_GRID x SIGNATURE_GRID grayscale grid,
|
|
9
|
+
* a SIGNATURE_GRID x SIGNATURE_GRID grayscale grid, contrast-normalizes that grid, quantizes each
|
|
10
10
|
* cell to SIGNATURE_LEVELS, and packs the cells into a hex string. Deterministic (no Date, no
|
|
11
11
|
* random). Returns SIGNATURE_FALLBACK on any decode failure so two unreadable frames compare equal.
|
|
12
12
|
* The hash cannot be reversed to the image, so exposing it in a trace is public-safe.
|
|
@@ -65,9 +65,9 @@ function quantizedGrid(data, srcW, srcH) {
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
// Stretch this frame's own range across the full scale before quantizing. Without this a light UI
|
|
68
|
-
// occupies a sliver at the top of 0..255 and quantizes to a near-constant
|
|
68
|
+
// occupies a sliver at the top of 0..255 and quantizes to a near-constant.
|
|
69
69
|
//
|
|
70
|
-
// The endpoints are
|
|
70
|
+
// The endpoints are trimmed rather than the raw min/max: a handful of extreme cells must not be
|
|
71
71
|
// able to rescale the whole frame, or a blinking text cursor would rewrite every cell and read as
|
|
72
72
|
// progress forever. Trimming K cells from each end clamps that away while still preserving real
|
|
73
73
|
// structure, which occupies far more cells than K (a row of sidebar text covers dozens).
|
|
@@ -81,7 +81,7 @@ function quantizedGrid(data, srcW, srcH) {
|
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
83
83
|
* The frame's overall brightness, coarsely quantized. Normalization deliberately discards absolute
|
|
84
|
-
* level, so this is prefixed back on for the two cases where absolute level
|
|
84
|
+
* level, so this is prefixed back on for the two cases where absolute level is the change: a uniform
|
|
85
85
|
* frame (an all-white blank vs an all-black screen normalize identically), and a whole-page dim such
|
|
86
86
|
* as a modal overlay, which preserves relative structure while changing the whole frame. Quantized
|
|
87
87
|
* coarsely so ordinary antialiasing noise cannot move it.
|
|
@@ -35,7 +35,7 @@ export interface RedactedScreenshot {
|
|
|
35
35
|
export interface RedactScreenshotOptions {
|
|
36
36
|
/**
|
|
37
37
|
* Longest emitted edge in pixels. Clamped to [1, 128]: a caller may request a
|
|
38
|
-
*
|
|
38
|
+
* smaller (safer) thumbnail but never a larger one, so no call site can widen
|
|
39
39
|
* the frame back into legibility. Default 96. Blur is not a caller knob: it is
|
|
40
40
|
* an internal safety floor computed from the output size.
|
|
41
41
|
*/
|
|
@@ -52,7 +52,7 @@ export declare function digestText(text: string, length?: number): string;
|
|
|
52
52
|
export declare function tailText(value: string, maxChars: number): string;
|
|
53
53
|
/**
|
|
54
54
|
* A redacted, ellipsis-prefixed tail of captured output for a (public-bound)
|
|
55
|
-
* message field. Pattern-redacts the
|
|
55
|
+
* message field. Pattern-redacts the full text before truncating: slicing a tail
|
|
56
56
|
* first could cut through a secret's prefix (e.g. drop "sk-proj-") and defeat the
|
|
57
57
|
* pattern matcher on the remainder. Callers should literal-scrub known
|
|
58
58
|
* provisioned values first; this is the pattern pass. Empty output -> "(no output)".
|
|
@@ -103,7 +103,7 @@ export declare function scrubLiterals(values: readonly string[]): (text: string)
|
|
|
103
103
|
/**
|
|
104
104
|
* Coerce an unknown thrown value to its message string. Prefer this over the
|
|
105
105
|
* inline `error instanceof Error ? error.message : String(error)` so error
|
|
106
|
-
* stringification stays uniform. Note: this does
|
|
106
|
+
* stringification stays uniform. Note: this does not redact; sites that emit
|
|
107
107
|
* to public-bound artifacts must run the result through `redactText` first.
|
|
108
108
|
*/
|
|
109
109
|
export declare function toErrorMessage(error: unknown): string;
|
|
@@ -105,9 +105,9 @@ export function publicPathForTrace(value, rootCwd) {
|
|
|
105
105
|
// or a logged-in third-party UI. A raw frame must never reach a public artifact.
|
|
106
106
|
// redactScreenshot is the fail-closed primitive that gates that surface. It
|
|
107
107
|
// always returns a freshly re-encoded, downscaled, box-blurred thumbnail (or a
|
|
108
|
-
// neutral placeholder), and
|
|
108
|
+
// neutral placeholder), and never the source pixels. The "too coarse to read"
|
|
109
109
|
// invariant is enforced in code, not by defaults: the emitted width is hard-
|
|
110
|
-
// capped (a caller may request a
|
|
110
|
+
// capped (a caller may request a smaller thumbnail but never a larger one), and
|
|
111
111
|
// the blur radius is computed internally with a floor, so neither a caller
|
|
112
112
|
// option nor a natively small frame can widen the output back into legibility.
|
|
113
113
|
// On any uncertainty (non-PNG input, an oversized or unreadable PNG, or any
|
|
@@ -241,7 +241,7 @@ export function tailText(value, maxChars) {
|
|
|
241
241
|
}
|
|
242
242
|
/**
|
|
243
243
|
* A redacted, ellipsis-prefixed tail of captured output for a (public-bound)
|
|
244
|
-
* message field. Pattern-redacts the
|
|
244
|
+
* message field. Pattern-redacts the full text before truncating: slicing a tail
|
|
245
245
|
* first could cut through a secret's prefix (e.g. drop "sk-proj-") and defeat the
|
|
246
246
|
* pattern matcher on the remainder. Callers should literal-scrub known
|
|
247
247
|
* provisioned values first; this is the pattern pass. Empty output -> "(no output)".
|
|
@@ -321,7 +321,7 @@ export function scrubLiterals(values) {
|
|
|
321
321
|
/**
|
|
322
322
|
* Coerce an unknown thrown value to its message string. Prefer this over the
|
|
323
323
|
* inline `error instanceof Error ? error.message : String(error)` so error
|
|
324
|
-
* stringification stays uniform. Note: this does
|
|
324
|
+
* stringification stays uniform. Note: this does not redact; sites that emit
|
|
325
325
|
* to public-bound artifacts must run the result through `redactText` first.
|
|
326
326
|
*/
|
|
327
327
|
export function toErrorMessage(error) {
|
package/dist/feedback/draft.js
CHANGED
|
@@ -49,98 +49,58 @@ export function buildDraft(bundle, bundlePath, candidateId) {
|
|
|
49
49
|
acceptance_proof: projectFeedbackAcceptanceProof(bundle, candidate),
|
|
50
50
|
};
|
|
51
51
|
}
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
//
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
? []
|
|
69
|
-
: [`Tasks: ${formatRunTaskFunnel(bundle.review.tasks)}.`]),
|
|
70
|
-
];
|
|
71
|
-
return {
|
|
72
|
-
schema: FEEDBACK_SCHEMA,
|
|
73
|
-
run_id: bundle.runId,
|
|
74
|
-
adapter_id: bundle.source.packageName ?? bundle.scenario.id,
|
|
75
|
-
scenario_id: bundle.scenario.id,
|
|
76
|
-
persona_id: bundle.persona.id,
|
|
77
|
-
actor: (bundle.streams ?? []).some((stream) => stream.actor?.lane === "computer-use")
|
|
78
|
-
? "computer-use"
|
|
79
|
-
: "unknown",
|
|
80
|
-
substrate: "unknown",
|
|
81
|
-
failure_owner: "unknown",
|
|
82
|
-
summary: "Live study completed without a participant-reported finding",
|
|
83
|
-
expected: bundle.scenario.goal,
|
|
84
|
-
actual: actualLines.join(" "),
|
|
85
|
-
source_bundle: bundlePath,
|
|
86
|
-
evidence: [
|
|
87
|
-
{
|
|
88
|
-
path: bundlePath,
|
|
89
|
-
kind: "state",
|
|
90
|
-
note: "Source run bundle.",
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
path: path.join(path.dirname(bundlePath), "review.md"),
|
|
94
|
-
kind: "review",
|
|
95
|
-
note: "The run's review: verdict, participants, and gaps.",
|
|
96
|
-
},
|
|
97
|
-
],
|
|
98
|
-
redaction: {
|
|
99
|
-
status: "passed",
|
|
100
|
-
notes: bundle.redaction.notes,
|
|
101
|
-
},
|
|
102
|
-
idempotency_key: `humanish:${bundle.runId}:live-run-summary`,
|
|
103
|
-
proposed_next_state: "study-quality-review",
|
|
104
|
-
acceptance_proof: [
|
|
105
|
-
feedbackProofCommands(bundle.runId).verify,
|
|
106
|
-
feedbackProofCommands(bundle.runId).watch,
|
|
107
|
-
],
|
|
108
|
-
};
|
|
109
|
-
}
|
|
52
|
+
// A bundle without a candidate gets a draft that describes the run that happened, built from the
|
|
53
|
+
// same review lines the stakeholder surfaces show (participants and tasks keep their
|
|
54
|
+
// denominators). Feedback refuses a dry run before it gets here.
|
|
55
|
+
const participantEndings = participantOutcomeDetails(bundle.streams);
|
|
56
|
+
const review = withCuaReviewProvenance(bundle.review, bundle.streams);
|
|
57
|
+
const actualLines = [
|
|
58
|
+
review.summary,
|
|
59
|
+
...(bundle.review.participants === undefined
|
|
60
|
+
? []
|
|
61
|
+
: [
|
|
62
|
+
`Participants: ${formatParticipantOutcomes(bundle.review.participants, participantEndings)}.`,
|
|
63
|
+
]),
|
|
64
|
+
...(bundle.review.tasks === undefined
|
|
65
|
+
? []
|
|
66
|
+
: [`Tasks: ${formatRunTaskFunnel(bundle.review.tasks)}.`]),
|
|
67
|
+
];
|
|
110
68
|
return {
|
|
111
69
|
schema: FEEDBACK_SCHEMA,
|
|
112
70
|
run_id: bundle.runId,
|
|
113
|
-
adapter_id: bundle.source.packageName ??
|
|
71
|
+
adapter_id: bundle.source.packageName ?? bundle.scenario.id,
|
|
114
72
|
scenario_id: bundle.scenario.id,
|
|
115
73
|
persona_id: bundle.persona.id,
|
|
116
|
-
actor: "
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
74
|
+
actor: (bundle.streams ?? []).some((stream) => stream.actor?.lane === "computer-use")
|
|
75
|
+
? "computer-use"
|
|
76
|
+
: "unknown",
|
|
77
|
+
substrate: "unknown",
|
|
78
|
+
failure_owner: "unknown",
|
|
79
|
+
summary: "Live study completed without a participant-reported finding",
|
|
80
|
+
expected: bundle.scenario.goal,
|
|
81
|
+
actual: actualLines.join(" "),
|
|
122
82
|
source_bundle: bundlePath,
|
|
123
83
|
evidence: [
|
|
124
84
|
{
|
|
125
85
|
path: bundlePath,
|
|
126
86
|
kind: "state",
|
|
127
|
-
note: "
|
|
87
|
+
note: "Source run bundle.",
|
|
128
88
|
},
|
|
129
89
|
{
|
|
130
90
|
path: path.join(path.dirname(bundlePath), "review.md"),
|
|
131
91
|
kind: "review",
|
|
132
|
-
note: "
|
|
92
|
+
note: "The run's review: verdict, participants, and gaps.",
|
|
133
93
|
},
|
|
134
94
|
],
|
|
135
95
|
redaction: {
|
|
136
96
|
status: "passed",
|
|
137
97
|
notes: bundle.redaction.notes,
|
|
138
98
|
},
|
|
139
|
-
idempotency_key: `humanish:${bundle.runId}:
|
|
140
|
-
proposed_next_state: "
|
|
99
|
+
idempotency_key: `humanish:${bundle.runId}:live-run-summary`,
|
|
100
|
+
proposed_next_state: "study-quality-review",
|
|
141
101
|
acceptance_proof: [
|
|
142
102
|
feedbackProofCommands(bundle.runId).verify,
|
|
143
|
-
feedbackProofCommands(bundle.runId).
|
|
103
|
+
feedbackProofCommands(bundle.runId).observe,
|
|
144
104
|
],
|
|
145
105
|
};
|
|
146
106
|
}
|
|
@@ -232,7 +192,7 @@ export async function buildAnalysisDraft(context, options) {
|
|
|
232
192
|
proposed_next_state: "study-quality-review",
|
|
233
193
|
acceptance_proof: [
|
|
234
194
|
feedbackProofCommands(bundle.runId).verify,
|
|
235
|
-
feedbackProofCommands(bundle.runId).
|
|
195
|
+
feedbackProofCommands(bundle.runId).observe,
|
|
236
196
|
],
|
|
237
197
|
};
|
|
238
198
|
}
|
|
@@ -254,11 +214,14 @@ export function isUsableFeedbackCandidate(candidate) {
|
|
|
254
214
|
!item.path.includes("://") &&
|
|
255
215
|
!item.path.includes(".."));
|
|
256
216
|
}
|
|
217
|
+
/** An evidence path inside the run directory, as "run.json" or "screenshots/step-003.png". */
|
|
218
|
+
function runRelative(draft, evidencePath) {
|
|
219
|
+
const relative = path.relative(path.dirname(draft.source_bundle), evidencePath);
|
|
220
|
+
return relative === "" || relative.startsWith("..") ? evidencePath : relative;
|
|
221
|
+
}
|
|
257
222
|
export function renderMarkdown(draft, repo) {
|
|
258
223
|
return `This issue was drafted by humanish from a verified humanish run bundle.
|
|
259
224
|
|
|
260
|
-
It contributes to public-safe simulation harness coverage. The feedback command did not mutate GitHub, commit code, or claim unobserved product behavior.
|
|
261
|
-
|
|
262
225
|
## Summary
|
|
263
226
|
|
|
264
227
|
${draft.summary}
|
|
@@ -273,14 +236,9 @@ ${draft.actual}
|
|
|
273
236
|
|
|
274
237
|
## Evidence
|
|
275
238
|
|
|
276
|
-
${draft.evidence.map((item) => `- ${item.kind}
|
|
277
|
-
|
|
278
|
-
## Filing Notes
|
|
239
|
+
${draft.evidence.map((item) => `- ${item.kind} ${runRelative(draft, item.path)}: ${item.note}`).join("\n")}
|
|
279
240
|
|
|
280
|
-
|
|
281
|
-
- GitHub mutation: not performed
|
|
282
|
-
- Substrate: ${draft.substrate}
|
|
283
|
-
- Production data: not used
|
|
241
|
+
Repository: ${repo}
|
|
284
242
|
|
|
285
243
|
\`\`\`yaml
|
|
286
244
|
humanish_feedback:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// The publish boundary for existing raw runs
|
|
1
|
+
// The publish boundary for existing raw runs. A derivative is an isolated
|
|
2
2
|
// workspace, never a new run in the source history. No provider APIs are involved.
|
|
3
3
|
import { createHash } from "node:crypto";
|
|
4
4
|
import { lstat, mkdir, mkdtemp, readdir, realpath, rename, rm, rmdir } from "node:fs/promises";
|
|
@@ -46,5 +46,9 @@ export interface ExportDeps {
|
|
|
46
46
|
/** The banner a --local-only export carries. Plain HTML, before the app root, so it renders with JS off. */
|
|
47
47
|
export declare function localOnlyBanner(reasons: string[]): string;
|
|
48
48
|
export declare function exportRun(cwdInput: string, runInput: string, options?: ExportOptions, deps?: ExportDeps): Promise<ExportResult | ExportFailure>;
|
|
49
|
-
|
|
49
|
+
/** Human output; a failure is an error the CLI prints on stderr (HumanOutput in src/cli/io.ts). */
|
|
50
|
+
export declare function formatExportHuman(result: ExportResult): string;
|
|
51
|
+
export declare function formatExportHuman(result: ExportResult | ExportFailure): string | {
|
|
52
|
+
error: ExportFailure["error"];
|
|
53
|
+
};
|
|
50
54
|
export {};
|
package/dist/feedback/export.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// `humanish export`: one file a coworker can open
|
|
1
|
+
// `humanish export`: one file a coworker can open.
|
|
2
2
|
//
|
|
3
3
|
// A run is a directory. Sharing it meant a tunnel (`serve --expose`) or a hand-zipped bundle,
|
|
4
4
|
// neither of which is "send one thing". The Observer is already a single-file artifact with the
|
|
@@ -23,6 +23,7 @@ import { analysisSharingProblems } from "../analysis/sharing.js";
|
|
|
23
23
|
import { EVIDENCE_LIMITS, validateAnalysisEvidence } from "../analysis/evidence.js";
|
|
24
24
|
import { readBoundedFile } from "../run/evidence-files.js";
|
|
25
25
|
import { shellQuote } from "../substrates/shell.js";
|
|
26
|
+
import { plural } from "../run/text.js";
|
|
26
27
|
const EXPORT_SCHEMA = "humanish.export-result.v1";
|
|
27
28
|
/** Past this the file stops being a thing you attach to an email. Declared, never silent. */
|
|
28
29
|
export const DEFAULT_EXPORT_MAX_BYTES = 25 * 1024 * 1024;
|
|
@@ -40,7 +41,7 @@ const IMAGE_MIME = {
|
|
|
40
41
|
export function localOnlyBanner(reasons) {
|
|
41
42
|
const why = reasons.length === 0 ? "" : ` (${reasons.join(", ")})`;
|
|
42
43
|
return (`<div id="humanish-local-only" role="alert" tabindex="0" style="position:sticky;top:0;z-index:2147483647;max-height:40vh;overflow:auto;background:#7a1f1f;color:#fff;font:600 14px/1.4 system-ui,sans-serif;padding:10px 16px;text-align:center">` +
|
|
43
|
-
`
|
|
44
|
+
`Local only. This export was made from a bundle that is not share-safe${why}. Do not forward it outside the team that owns the run.` +
|
|
44
45
|
`</div>`);
|
|
45
46
|
}
|
|
46
47
|
async function isInside(root, candidate) {
|
|
@@ -146,9 +147,8 @@ async function readObserverSlot(cwd, runInput, runRoot, runId, verified, deps, w
|
|
|
146
147
|
html = await readFile(observerPath, "utf8");
|
|
147
148
|
}
|
|
148
149
|
catch {
|
|
149
|
-
// `run` writes observer-data.json and no index.html; `watch` writes both
|
|
150
|
-
//
|
|
151
|
-
// artifact watch uses, so what produced the run never decides whether it can be sent.
|
|
150
|
+
// `run` writes observer-data.json and no index.html; `watch` writes both. Render it here, from
|
|
151
|
+
// the same artifact watch uses, so what produced the run never decides whether it can be sent.
|
|
152
152
|
const rendered = await (deps.render ?? ((c, r) => renderObserver(c, r, { open: false })))(cwd, runInput).catch(() => ({ ok: false }));
|
|
153
153
|
try {
|
|
154
154
|
if (!rendered.ok)
|
|
@@ -281,7 +281,7 @@ function makePortable(inlined, verified) {
|
|
|
281
281
|
}
|
|
282
282
|
}
|
|
283
283
|
}
|
|
284
|
-
// What verify said, in the file, so the chrome can agree with the result envelope
|
|
284
|
+
// What verify said, in the file, so the chrome can agree with the result envelope.
|
|
285
285
|
const publicSafety = (inlined.publicSafety ?? {});
|
|
286
286
|
inlined.publicSafety = {
|
|
287
287
|
...publicSafety,
|
|
@@ -358,11 +358,11 @@ function renderExportHtml(inlined, analysis, assets, verified, watermarked, omit
|
|
|
358
358
|
}
|
|
359
359
|
export function formatExportHuman(result) {
|
|
360
360
|
if (!result.ok)
|
|
361
|
-
return
|
|
361
|
+
return { error: result.error };
|
|
362
362
|
if (result.format === "bundle") {
|
|
363
363
|
return [
|
|
364
364
|
`humanish export ${result.runId}`,
|
|
365
|
-
`workspace: ${result.path} (${(result.bytes / 1024).toFixed(0)} KB, ${result.embeddedImages
|
|
365
|
+
`workspace: ${result.path} (${(result.bytes / 1024).toFixed(0)} KB, ${plural(result.embeddedImages, "blurred image")})`,
|
|
366
366
|
`share safety: ${result.shareSafety.status}`,
|
|
367
367
|
`verify: humanish verify --cwd ${shellQuote(result.path)} --run ${shellQuote(result.runId)}`,
|
|
368
368
|
`feedback: humanish feedback draft --cwd ${shellQuote(result.path)} --run ${shellQuote(result.runId)}`,
|
|
@@ -372,8 +372,8 @@ export function formatExportHuman(result) {
|
|
|
372
372
|
}
|
|
373
373
|
const lines = [
|
|
374
374
|
`humanish export ${result.runId}`,
|
|
375
|
-
`file: ${result.path} (${(result.bytes / 1024).toFixed(0)} KB, ${result.embeddedImages
|
|
376
|
-
`share safety: ${result.shareSafety.status}${result.watermarked ? "
|
|
375
|
+
`file: ${result.path} (${(result.bytes / 1024).toFixed(0)} KB, ${plural(result.embeddedImages, "image")} embedded)`,
|
|
376
|
+
`share safety: ${result.shareSafety.status}${result.watermarked ? " (watermarked: local only)" : ""}`,
|
|
377
377
|
...result.warnings.map((warning) => `warning: ${warning}`),
|
|
378
378
|
];
|
|
379
379
|
return `${lines.join("\n")}\n`;
|
|
@@ -13,11 +13,11 @@ export interface FeedbackResult {
|
|
|
13
13
|
issueUrl?: string;
|
|
14
14
|
draft?: FeedbackDraft;
|
|
15
15
|
/** Every usable candidate on the bundle, so a multi-participant study's second and third findings can be
|
|
16
|
-
* chosen with `--candidate` instead of being invisible behind the first
|
|
16
|
+
* chosen with `--candidate` instead of being invisible behind the first. */
|
|
17
17
|
candidates?: FeedbackCandidateSummary[];
|
|
18
18
|
shareSafety?: VerifyResult["shareSafety"];
|
|
19
19
|
error?: {
|
|
20
|
-
code: "HUMANISH_RUN_NOT_FOUND" | "HUMANISH_INVALID_RUN_BUNDLE" | "HUMANISH_INVALID_FEEDBACK_DRAFT" | "HUMANISH_FEEDBACK_SHARE_SAFETY_BLOCKED" | "HUMANISH_FEEDBACK_CANDIDATE_NOT_FOUND";
|
|
20
|
+
code: "HUMANISH_RUN_NOT_FOUND" | "HUMANISH_INVALID_RUN_BUNDLE" | "HUMANISH_INVALID_FEEDBACK_DRAFT" | "HUMANISH_FEEDBACK_SHARE_SAFETY_BLOCKED" | "HUMANISH_FEEDBACK_CANDIDATE_NOT_FOUND" | "HUMANISH_FEEDBACK_REQUIRES_LIVE_RUN";
|
|
21
21
|
message: string;
|
|
22
22
|
};
|
|
23
23
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// The feedback commands: resolve a run, draft a feedback issue from it, verify the draft, render it
|
|
2
2
|
// as an issue body or URL, and list a run's candidates. What a draft contains is in draft.ts.
|
|
3
3
|
import { realpath } from "node:fs/promises";
|
|
4
|
+
import { runNotFoundMessage } from "../run/run-not-found.js";
|
|
4
5
|
import path from "node:path";
|
|
5
6
|
import { bindExistingRunArtifactPaths, isSafeRunIdSegment, resolveLatestRunDirectory, validatePreparedRunArtifactPaths, } from "../run/paths.js";
|
|
6
7
|
import { bindExistingManagedHumanishOutputDirectory, readContainedRegularFile, writeContainedOutputFile, } from "../run/contained-output.js";
|
|
@@ -34,7 +35,24 @@ async function draftFeedbackBound(cwdInput, runInput, options = {}) {
|
|
|
34
35
|
run: runInput,
|
|
35
36
|
error: {
|
|
36
37
|
code: "HUMANISH_RUN_NOT_FOUND",
|
|
37
|
-
message:
|
|
38
|
+
message: await runNotFoundMessage(cwd, runInput),
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// A dry run exercised no product, so it has nothing to report upstream; analyze refuses it the
|
|
44
|
+
// same way (ANALYSIS_REQUIRES_LIVE_RUN).
|
|
45
|
+
if (context.loaded.bundle.mode !== "live") {
|
|
46
|
+
return {
|
|
47
|
+
context,
|
|
48
|
+
result: {
|
|
49
|
+
schema: FEEDBACK_RESULT_SCHEMA,
|
|
50
|
+
ok: false,
|
|
51
|
+
cwd,
|
|
52
|
+
run: runInput,
|
|
53
|
+
error: {
|
|
54
|
+
code: "HUMANISH_FEEDBACK_REQUIRES_LIVE_RUN",
|
|
55
|
+
message: `Run ${context.storedRunId} is a dry run, which tests no product behavior. Feedback drafts need a live run.`,
|
|
38
56
|
},
|
|
39
57
|
},
|
|
40
58
|
};
|
|
@@ -204,7 +222,7 @@ export async function listFeedback(cwdInput, runInput) {
|
|
|
204
222
|
run: runInput,
|
|
205
223
|
error: {
|
|
206
224
|
code: "HUMANISH_RUN_NOT_FOUND",
|
|
207
|
-
message:
|
|
225
|
+
message: await runNotFoundMessage(cwd, runInput),
|
|
208
226
|
},
|
|
209
227
|
};
|
|
210
228
|
}
|
|
@@ -218,7 +236,7 @@ export async function listFeedback(cwdInput, runInput) {
|
|
|
218
236
|
run: runInput,
|
|
219
237
|
...(draft ? { draftPath, draft } : {}),
|
|
220
238
|
// The choice set for `draft --candidate`: a three-participant study has up to three findings,
|
|
221
|
-
// and
|
|
239
|
+
// and each can reach a draft.
|
|
222
240
|
candidates: summarizeCandidates(context.loaded.bundle),
|
|
223
241
|
};
|
|
224
242
|
}
|
package/dist/feedback/proof.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { RunBundle, RunFeedbackCandidate } from "../run/bundle.js";
|
|
|
2
2
|
/** Commands run from the evidence workspace using an installed humanish CLI. */
|
|
3
3
|
export declare function feedbackProofCommands(runId: string): {
|
|
4
4
|
verify: string;
|
|
5
|
-
|
|
5
|
+
observe: string;
|
|
6
6
|
};
|
|
7
7
|
/** Legacy command compatibility belongs in the draft, never in the source receipt. */
|
|
8
8
|
export declare function projectFeedbackAcceptanceProof(bundle: RunBundle, candidate: RunFeedbackCandidate): string[];
|
package/dist/feedback/proof.js
CHANGED
|
@@ -5,7 +5,7 @@ export function feedbackProofCommands(runId) {
|
|
|
5
5
|
const argument = /^[a-z0-9][a-z0-9._-]*$/i.test(runId) ? runId : shellQuote(runId);
|
|
6
6
|
return {
|
|
7
7
|
verify: `humanish verify --run ${argument} --json`,
|
|
8
|
-
|
|
8
|
+
observe: `humanish observe --run ${argument} --no-open`,
|
|
9
9
|
};
|
|
10
10
|
}
|
|
11
11
|
/** Legacy command compatibility belongs in the draft, never in the source receipt. */
|
|
@@ -17,7 +17,7 @@ export function projectFeedbackAcceptanceProof(bundle, candidate) {
|
|
|
17
17
|
if (instruction === `pnpm humanish -- verify --run ${bundle.runId} --json`)
|
|
18
18
|
return commands.verify;
|
|
19
19
|
if (instruction === `pnpm humanish -- watch --run ${bundle.runId} --no-open`)
|
|
20
|
-
return commands.
|
|
20
|
+
return commands.observe;
|
|
21
21
|
return instruction;
|
|
22
22
|
});
|
|
23
23
|
}
|
package/dist/guest/bootstrap.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { desktopRecordingConfigSchema, } from "../evidence/desktop-recording-types.js";
|
|
2
2
|
import { validateBrowserControlIdentity, sameBrowserControlIdentity, } from "../browser-control/protocol.js";
|
|
3
|
-
import {
|
|
3
|
+
import { ComputerUseExecutorError } from "../actors/computer-use/executor-error.js";
|
|
4
4
|
import { createBrowserControlClient } from "../browser-control/client.js";
|
|
5
5
|
import { guestMediaConfigSchema } from "./media-config.js";
|
|
6
6
|
export const GUEST_BOOTSTRAP_VERSION = 1;
|
|
@@ -15,7 +15,7 @@ export const GUEST_BOOTSTRAP_LIMITS = Object.freeze({
|
|
|
15
15
|
connectMs: 3000,
|
|
16
16
|
port: 5251,
|
|
17
17
|
});
|
|
18
|
-
const refused = () => new
|
|
18
|
+
const refused = () => new ComputerUseExecutorError("protocol_mismatch", "not_dispatched");
|
|
19
19
|
/** Same entry authority as the local desktop's opaque app-port forward. */
|
|
20
20
|
export function validateGuestInitialUrl(value) {
|
|
21
21
|
try {
|
|
@@ -223,7 +223,7 @@ export class GuestBootstrapReader {
|
|
|
223
223
|
return;
|
|
224
224
|
this.terminal = true;
|
|
225
225
|
this.release();
|
|
226
|
-
this.reject(new
|
|
226
|
+
this.reject(new ComputerUseExecutorError(code, "not_dispatched"));
|
|
227
227
|
this.stream.destroy();
|
|
228
228
|
this.onFailure();
|
|
229
229
|
}
|
|
@@ -249,7 +249,7 @@ export async function connectGuestBootstrap(stream, identity, signal, initialUrl
|
|
|
249
249
|
const request = encodeGuestBootstrap(identity, false, initialUrl, media, recording);
|
|
250
250
|
await new Promise((resolve, reject) => {
|
|
251
251
|
let bytes = Buffer.alloc(0), done = false;
|
|
252
|
-
const timer = setTimeout(() => finish(new
|
|
252
|
+
const timer = setTimeout(() => finish(new ComputerUseExecutorError("deadline_exceeded", "not_dispatched")), GUEST_BOOTSTRAP_LIMITS.connectMs);
|
|
253
253
|
const finish = (error) => {
|
|
254
254
|
if (done)
|
|
255
255
|
return;
|
|
@@ -277,9 +277,9 @@ export async function connectGuestBootstrap(stream, identity, signal, initialUrl
|
|
|
277
277
|
const end = () => {
|
|
278
278
|
if (done)
|
|
279
279
|
stream.destroy();
|
|
280
|
-
finish(new
|
|
280
|
+
finish(new ComputerUseExecutorError("transport_failed", "not_dispatched"));
|
|
281
281
|
};
|
|
282
|
-
const abort = () => finish(new
|
|
282
|
+
const abort = () => finish(new ComputerUseExecutorError("session_revoked", "not_dispatched"));
|
|
283
283
|
const data = (chunk) => {
|
|
284
284
|
if (!Buffer.isBuffer(chunk) || bytes.length + chunk.length > 64 + 1028) {
|
|
285
285
|
finish(refused());
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BROWSER_CONTROL_LIMITS } from "../browser-control/protocol.js";
|
|
2
|
-
import {
|
|
2
|
+
import { ComputerUseExecutorError, isComputerUseExecutorError, } from "../actors/computer-use/executor-error.js";
|
|
3
3
|
/** Owner-only composition for a single headed Chromium page. Never an actor API. */
|
|
4
4
|
export function createGuestBrowserTools(native, content) {
|
|
5
5
|
let addressBarArmed = false;
|
|
@@ -11,7 +11,7 @@ export function createGuestBrowserTools(native, content) {
|
|
|
11
11
|
const inputGeneration = ++generation;
|
|
12
12
|
await native.input(args, signal);
|
|
13
13
|
if (signal.aborted || inputGeneration !== generation)
|
|
14
|
-
throw new
|
|
14
|
+
throw new ComputerUseExecutorError("session_revoked", "outcome_uncertain");
|
|
15
15
|
// Positive navigation intent, not an inference from document.hasFocus().
|
|
16
16
|
addressBarArmed =
|
|
17
17
|
args.length === 3 &&
|
|
@@ -28,15 +28,15 @@ export function createGuestBrowserTools(native, content) {
|
|
|
28
28
|
// separate qualification. Do not silently switch routes or transliterate.
|
|
29
29
|
if (!/^[\x20-\x7e]+$/.test(text) ||
|
|
30
30
|
Buffer.byteLength(text) > BROWSER_CONTROL_LIMITS.textBytes) {
|
|
31
|
-
throw new
|
|
31
|
+
throw new ComputerUseExecutorError("action_rejected", "not_dispatched");
|
|
32
32
|
}
|
|
33
33
|
const preparedGeneration = generation;
|
|
34
34
|
let used = false;
|
|
35
35
|
function check() {
|
|
36
36
|
if (signal.aborted)
|
|
37
|
-
throw new
|
|
37
|
+
throw new ComputerUseExecutorError("session_revoked", "not_dispatched");
|
|
38
38
|
if (used || preparedGeneration !== generation)
|
|
39
|
-
throw new
|
|
39
|
+
throw new ComputerUseExecutorError("action_rejected", "not_dispatched");
|
|
40
40
|
}
|
|
41
41
|
check();
|
|
42
42
|
await content.assertReady(signal);
|
|
@@ -52,15 +52,15 @@ export function createGuestBrowserTools(native, content) {
|
|
|
52
52
|
try {
|
|
53
53
|
await native.input(["key", "--clearmodifiers", "ctrl+l"], signal);
|
|
54
54
|
if (signal.aborted)
|
|
55
|
-
throw new
|
|
55
|
+
throw new ComputerUseExecutorError("session_revoked", "outcome_uncertain");
|
|
56
56
|
await content.assertReady(signal);
|
|
57
57
|
if (signal.aborted || preparedGeneration !== generation)
|
|
58
|
-
throw new
|
|
58
|
+
throw new ComputerUseExecutorError("session_revoked", "outcome_uncertain");
|
|
59
59
|
await native.typeAscii(text, signal);
|
|
60
60
|
}
|
|
61
61
|
catch (error) {
|
|
62
62
|
// Ctrl+L itself is input. No content fallback after that dispatch.
|
|
63
|
-
throw new
|
|
63
|
+
throw new ComputerUseExecutorError(isComputerUseExecutorError(error) ? error.code : "execution_failed", "outcome_uncertain");
|
|
64
64
|
}
|
|
65
65
|
},
|
|
66
66
|
async close() {
|