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,178 +0,0 @@
|
|
|
1
|
-
# Local browser studies
|
|
2
|
-
|
|
3
|
-
Linux x64 and supported Apple Silicon Mac users can run isolated Firecracker
|
|
4
|
-
browser participants from the installed CLI or TUI. Docker manages their
|
|
5
|
-
containers and private state volumes; the normal study runner supplies
|
|
6
|
-
scheduling, recordings, Observer and findings.
|
|
7
|
-
No separate host service is installed.
|
|
8
|
-
|
|
9
|
-
## Start a study
|
|
10
|
-
|
|
11
|
-
Both platforms need a signed-in, supported Codex CLI. Linux needs a local,
|
|
12
|
-
rootful Docker Engine, KVM (`/dev/kvm`) and TUN (`/dev/net/tun`). Macs need an
|
|
13
|
-
M3-or-newer chip, native ARM64 Node, Lima 2.2+ (`brew install lima`) and a macOS
|
|
14
|
-
version supporting nested virtualization; see [Mac setup](#apple-silicon-macs).
|
|
15
|
-
Docker Desktop is unnecessary. See
|
|
16
|
-
[Codex account setup](restricted-codex-analysis.md) for the qualified version
|
|
17
|
-
and account restrictions. Docker access is an administrative capability.
|
|
18
|
-
humanish does not install Docker on Linux or change host permissions. On Mac,
|
|
19
|
-
setup installs Docker only inside the dedicated Lima host.
|
|
20
|
-
|
|
21
|
-
Configure the starter while initializing the project, then start your app on
|
|
22
|
-
the same loopback URL:
|
|
23
|
-
|
|
24
|
-
```sh
|
|
25
|
-
npx humanish init --yes \
|
|
26
|
-
--local-browser http://127.0.0.1:3000 \
|
|
27
|
-
--local-mission "Create a note and explain anything confusing about saving it"
|
|
28
|
-
npx humanish doctor --lab local-browser
|
|
29
|
-
npx humanish run local-browser
|
|
30
|
-
npx humanish verify
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
`verify` checks the saved run bundle, and its share-safety line says whether the evidence can be
|
|
34
|
-
shared as-is. `init` also adds `humanish:*` scripts to `package.json`; `humanish:run` among them
|
|
35
|
-
is `humanish run --dry-run`, a contract-proof dry run rather than this live study. `init` also
|
|
36
|
-
writes `humanish/labs/local-browser.yaml` with safe defaults when the two options are omitted.
|
|
37
|
-
The options provide the normal setup path for the app URL and mission on first setup. If the
|
|
38
|
-
file already exists, `init` preserves it and warns that these options were skipped; edit the
|
|
39
|
-
existing manifest to change its URL or mission. The commands above write this lab (its
|
|
40
|
-
`description` is omitted here):
|
|
41
|
-
|
|
42
|
-
```yaml
|
|
43
|
-
schema: humanish.lab.v2
|
|
44
|
-
id: local-browser
|
|
45
|
-
title: Local browser · your app · Codex account
|
|
46
|
-
subject:
|
|
47
|
-
source: app-url
|
|
48
|
-
appUrl: "http://127.0.0.1:3000"
|
|
49
|
-
actors:
|
|
50
|
-
- type: local-agent
|
|
51
|
-
localAgent: codex
|
|
52
|
-
persona: synthetic-new-user
|
|
53
|
-
mission: "Create a note and explain anything confusing about saving it"
|
|
54
|
-
execution:
|
|
55
|
-
target: local
|
|
56
|
-
concurrency: 1
|
|
57
|
-
timeoutMs: 120000
|
|
58
|
-
scenario:
|
|
59
|
-
mode: live
|
|
60
|
-
defaults:
|
|
61
|
-
open: true
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
```sh
|
|
65
|
-
npx humanish runtime status --json
|
|
66
|
-
npx humanish doctor --lab local-browser --json
|
|
67
|
-
npx humanish run local-browser
|
|
68
|
-
npx humanish verify
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
The first live run downloads the pinned runtime archive (about 569 MiB on x64 or
|
|
72
|
-
556 MiB on ARM64), verifies its exact size and SHA-256, and loads it into Docker.
|
|
73
|
-
Later runs reuse the image.
|
|
74
|
-
`humanish runtime setup` prepares it in advance. Status, doctor and dry-run never
|
|
75
|
-
download an image or launch a participant. Preparation does not consume the
|
|
76
|
-
participant's task-time budget. The TUI lists the same lab and runtime readiness;
|
|
77
|
-
starting it uses the same preparation and execution path.
|
|
78
|
-
|
|
79
|
-
This configuration needs neither an E2B key nor an OpenAI API key. Participants
|
|
80
|
-
and the separate post-run analyst use Codex account quota and **remote model
|
|
81
|
-
inference**. It is not an offline model. The restricted participant has no host
|
|
82
|
-
shell, checkout mount or credential files. Account dollar cost and output-token
|
|
83
|
-
ceilings are unknown; numeric dollar/token caps are rejected. Set
|
|
84
|
-
`review.analysis: false` to skip analysis.
|
|
85
|
-
|
|
86
|
-
For API billing and its supported caps, use `type: openai-computer-use`, remove
|
|
87
|
-
`localAgent`, and provide `OPENAI_API_KEY`. Its analysis retains the existing API
|
|
88
|
-
default. Neither path silently falls back to another provider or hosted desktop.
|
|
89
|
-
Existing labs without `execution.target: local` retain their previous behavior.
|
|
90
|
-
|
|
91
|
-
Before handing the desktop to the participant, the guest opens the
|
|
92
|
-
selected app and waits up to 30 seconds for the initial document's
|
|
93
|
-
`DOMContentLoaded` event, then allows a bounded paint. It does not wait for app
|
|
94
|
-
data, images or network idle: the app's own loading screen remains observable.
|
|
95
|
-
Navigation failures and timeouts fail startup and release the owned desktop.
|
|
96
|
-
Later participant actions and observations do not use this startup wait.
|
|
97
|
-
|
|
98
|
-
## Current limits
|
|
99
|
-
|
|
100
|
-
- Linux x64 or M3-or-newer Mac with native ARM64 Node and Lima. Linux ARM64 is
|
|
101
|
-
refused: the local participant, the restricted Codex participant, runs only on
|
|
102
|
-
Linux x64 and Apple-silicon macOS. The installed Mac setup was tested on an M5
|
|
103
|
-
Max; smaller machines are not capacity-qualified.
|
|
104
|
-
- On Linux, a local Docker Engine; remote contexts, rootless Docker and Docker
|
|
105
|
-
Desktop are unsupported. The Mac adapter uses Docker inside its own Lima host.
|
|
106
|
-
- Loopback HTTP(S) app URLs on explicit ports above 1023. Each participant can
|
|
107
|
-
reach its selected app port, its assigned captured inbox when declared, and public destinations over ordinary TCP/UDP.
|
|
108
|
-
Other private host/LAN destinations and cloud metadata are blocked.
|
|
109
|
-
- Chromium at 960×720, 2 vCPUs and 2 GiB guest RAM per participant. Docker's
|
|
110
|
-
enclosing memory limit is 3 GiB. Start with a small concurrency for your host;
|
|
111
|
-
these allocations are not a promise of measured peak memory or capacity.
|
|
112
|
-
- Browser-only by default. [Optional camera and spoken conversation](participant-media.md)
|
|
113
|
-
use a separate media image and the same study loop.
|
|
114
|
-
- [Captured inboxes](comms-inbox.md#local-browser-studies) use an operator-run mail catch.
|
|
115
|
-
Real email receiving remains unsupported on the local route.
|
|
116
|
-
- A 20-minute default and maximum participant session budget, within the runtime
|
|
117
|
-
image's 30-minute process lifetime. A shorter `execution.timeoutMs` is supported.
|
|
118
|
-
- Codex participants currently use `gpt-6-astra` at low effort. Hosted templates,
|
|
119
|
-
device presets and hosted sandbox timeouts do not apply.
|
|
120
|
-
|
|
121
|
-
Normal close and cooperative startup cancellation remove the owned container
|
|
122
|
-
and its private state volume. After a desktop connects, controller death
|
|
123
|
-
disconnects the guest, which reboots; Firecracker exits and Docker removes both.
|
|
124
|
-
A small host socket directory can remain after abrupt death.
|
|
125
|
-
Run evidence remains in `.humanish/` under the normal local capture and sharing
|
|
126
|
-
rules. An unconfirmed release is reported as such.
|
|
127
|
-
|
|
128
|
-
## Runtime maintenance
|
|
129
|
-
|
|
130
|
-
The npm build pins a release URL, byte count, SHA-256 and immutable Docker image
|
|
131
|
-
ID in `src/substrates/local/runtime-release.ts`. It has no moving `latest` image dependency.
|
|
132
|
-
Runtime releases include source archives and notices separately; study users do
|
|
133
|
-
not download those archives. Updating a runtime requires a reviewed catalog
|
|
134
|
-
change and a new CLI release.
|
|
135
|
-
|
|
136
|
-
Source builders can use the
|
|
137
|
-
[maintained recipes](https://github.com/danielgwilson/humanish/blob/main/runtime/local-firecracker/README.md) and set
|
|
138
|
-
`HUMANISH_LOCAL_RUNTIME_IMAGE` to an already-built compatible local image. An
|
|
139
|
-
invalid override fails; it does not cause an implicit registry pull.
|
|
140
|
-
|
|
141
|
-
## Apple Silicon Macs
|
|
142
|
-
|
|
143
|
-
The Mac adapter uses a dedicated `humanish-runtime` Lima/VZ host on M3 or
|
|
144
|
-
newer Macs, with Lima 2.2+ and macOS supporting nested virtualization. Docker
|
|
145
|
-
runs inside that host; Docker Desktop is unnecessary. Setup creates the host
|
|
146
|
-
with 6 CPUs, 8 GiB RAM and an 80 GiB growable disk. It mounts no Mac directories.
|
|
147
|
-
Start with two participants; larger concurrency has not been qualified by this
|
|
148
|
-
integration. Use Lima's normal resource configuration for subsequent capacity
|
|
149
|
-
experiments, without changing study concurrency behind the user's back.
|
|
150
|
-
|
|
151
|
-
The scheduler and study loop remain shared. Standard OpenSSH forwards the
|
|
152
|
-
browser-control Unix socket to the Mac, and the selected app port back into the
|
|
153
|
-
Linux host. It preserves HTTP(S)/WebSocket bytes without parsing them. Codex
|
|
154
|
-
runs on the Mac and retains the same separate participant/analyst profiles and
|
|
155
|
-
file-backed login requirement. Keychain-only authentication is not supported.
|
|
156
|
-
|
|
157
|
-
The installed CLI passed first-attempt public image setup and two-participant
|
|
158
|
-
studies on an M5 Max: distinct app-side saves, overlapping participants,
|
|
159
|
-
verified recordings and automatic account analysis. A fresh Lima instance used
|
|
160
|
-
the public ARM64 catalog without a development image override. The separately
|
|
161
|
-
available source archives match that native build. The manually dispatched ARM64
|
|
162
|
-
job in `browser-appliance-proof.yml` builds images and sources; compilation alone
|
|
163
|
-
does not establish Mac execution.
|
|
164
|
-
|
|
165
|
-
Status and doctor do not create or start Lima. Explicit setup/first live use
|
|
166
|
-
starts the owned host; closing a study removes its participant containers and
|
|
167
|
-
volumes, but keeps the reusable Lima host running. Stop it with
|
|
168
|
-
`limactl stop humanish-runtime` when no studies are running. An interrupted
|
|
169
|
-
first provision remains inspectable through Lima and can be retried. humanish
|
|
170
|
-
does not replace a conflicting instance or stop unrelated instances.
|
|
171
|
-
|
|
172
|
-
Normal close, cancellation and controller death were exercised on established
|
|
173
|
-
Mac desktops. Shared startup cancellation and interrupted create-reply recovery
|
|
174
|
-
were exercised against real Linux Docker/Firecracker, with a separate regression
|
|
175
|
-
check for Lima cleanup. Forced controller death during startup, full-study
|
|
176
|
-
cancellation, host sleep/wake and higher concurrency remain unqualified. A forced
|
|
177
|
-
kill before a desktop connects can leave resources requiring inspection; this
|
|
178
|
-
adapter adds no suspend detector that unconditionally destroys a study.
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
# Watching and reviewing evidence
|
|
2
|
-
|
|
3
|
-
Observer shows a study's participants, their recorded screens, and the events
|
|
4
|
-
that explain those screens. The grid, player and exported HTML use the same
|
|
5
|
-
current renderer. Screens fit their actual aspect ratio; a portrait capture is
|
|
6
|
-
never cropped to fill a wide tile.
|
|
7
|
-
|
|
8
|
-
## Choose the right entry point
|
|
9
|
-
|
|
10
|
-
`humanish watch <lab>` starts a study and keeps its viewer attached. The process
|
|
11
|
-
that owns a hosted desktop can offer its live stream while it runs. `--no-open`
|
|
12
|
-
keeps that attachment without launching a browser. `--json` is the machine-result
|
|
13
|
-
path and does not keep an interactive stream server attached.
|
|
14
|
-
|
|
15
|
-
`humanish observe --run <id>` opens an existing study without starting another. The
|
|
16
|
-
TUI's **Open in Observer** action does the same through its session-owned loopback
|
|
17
|
-
library. These entry points follow saved captures; they cannot recover live desktop
|
|
18
|
-
credentials owned by another process. Keep the owning CLI or TUI open while using its
|
|
19
|
-
viewer. Exported HTML is an independent offline recording.
|
|
20
|
-
|
|
21
|
-
## Read status without guessing
|
|
22
|
-
|
|
23
|
-
The top band separates the run's current status from evidence freshness. A
|
|
24
|
-
finished study never uses its execution mode (`live`, as opposed to `dry-run`)
|
|
25
|
-
as a claim that it is still running. When updates fail, the last usable evidence
|
|
26
|
-
stays visible, the band reports the failure, and **Retry** requests another
|
|
27
|
-
snapshot. A stale process heartbeat does not prove that the process died.
|
|
28
|
-
|
|
29
|
-
A player's **Live desktop** label identifies what it displays. An iframe loading
|
|
30
|
-
is not a connection-health signal: the provider owns that connection. **Reload
|
|
31
|
-
stream** reloads the desktop viewer without restarting a participant. **Latest capture**
|
|
32
|
-
follows the latest saved screenshot without a desktop stream. **Replay** means
|
|
33
|
-
the researcher has chosen a recorded moment. Offline exports say so explicitly.
|
|
34
|
-
|
|
35
|
-
Freshness uses recorded activity and capture timestamps, not the time the server
|
|
36
|
-
reserialized the same data. Browser tabs poll less frequently while hidden and
|
|
37
|
-
refresh when visible again. Requests are serialized, bounded by a timeout and
|
|
38
|
-
cancelled when the viewer closes.
|
|
39
|
-
|
|
40
|
-
## Work through a study
|
|
41
|
-
|
|
42
|
-
Previews share a height and wrap into rows; desktop cards are wider and portrait
|
|
43
|
-
cards narrower. Complete screens remain contained when the available width is
|
|
44
|
-
smaller than a preview. Sparse rows keep their chosen size. Open **View and filter
|
|
45
|
-
participants** in the top right to search, change **Preview size**, or enter
|
|
46
|
-
**Monitor** for a larger evidence area. **Exit monitor** stays beside the run status.
|
|
47
|
-
Open a card's **Participant details** to **Pin** it at the beginning. Ordering changes only
|
|
48
|
-
when the researcher changes it. Large studies have reachable participant pages.
|
|
49
|
-
At most four desktop previews attach in the grid; allocation prioritizes screens
|
|
50
|
-
that are actually visible, with the hovered or keyboard-focused participant taking
|
|
51
|
-
priority. Other cards show their latest saved capture.
|
|
52
|
-
|
|
53
|
-
Each card follows its screen's aspect ratio without a minimum width that adds
|
|
54
|
-
portrait gutters. Its 44px caption holds the participant name, a short preview
|
|
55
|
-
source (**Live**, **Capture**, or **Snapshot**) or finished outcome, and a stable
|
|
56
|
-
**Participant details** button. Labels and controls never cover captured pixels.
|
|
57
|
-
Details contains labeled **Pin** and **Compare** toggles, the full source and
|
|
58
|
-
freshness, final messages, recorded notices, duration and dimensions. Historical
|
|
59
|
-
notices do not turn the details control into a warning; exceptional outcomes
|
|
60
|
-
remain in the caption. Comparison permits three participants and explains the
|
|
61
|
-
limit while keeping selected participants removable.
|
|
62
|
-
|
|
63
|
-
Icon buttons use Lucide glyphs, accessible names, hover/focus hints and visible
|
|
64
|
-
keyboard focus. Touch targets expand to 44px. Popovers have explicit close buttons;
|
|
65
|
-
Escape dismisses a hint without moving the player. These conventions follow
|
|
66
|
-
[Carbon icon usage](https://carbondesignsystem.com/elements/icons/usage/),
|
|
67
|
-
[ARIA toggle-button semantics](https://www.w3.org/WAI/ARIA/apg/patterns/button/),
|
|
68
|
-
and [WCAG target sizing](https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html).
|
|
69
|
-
The bookmark icon in the top bar opens **Saved moments**; recalling an available
|
|
70
|
-
moment closes the popover, while an unavailable moment leaves the error visible.
|
|
71
|
-
|
|
72
|
-
Opening a participant provides elapsed-time seeking, the original frame number,
|
|
73
|
-
playback speed, **Fit**, **Actual size**, zoom/pan and fullscreen. The inspector can
|
|
74
|
-
be hidden or resized. Click markers use the recorded desktop coordinate system
|
|
75
|
-
and the image's rendered rectangle, including at zoomed sizes.
|
|
76
|
-
|
|
77
|
-
Arrow keys, mouse controls, same-participant links, browser navigation and reload
|
|
78
|
-
agree about the selected moment. Seeking leaves live mode. Pausing on the newest
|
|
79
|
-
frame stays paused when new evidence arrives; **Go live** explicitly resumes
|
|
80
|
-
following. A missing addressed moment is reported instead of silently replaced.
|
|
81
|
-
|
|
82
|
-
Screenshot playback is sparse evidence, not a video recording. Capture gaps stay
|
|
83
|
-
visible. **Skip waits** compresses intervals associated with recorded waits and
|
|
84
|
-
reports the skipped duration. **Next action**, **Next flagged frame**, activity
|
|
85
|
-
filters and grouped waits make long traces easier to inspect without deleting events.
|
|
86
|
-
Older unstamped recordings use labeled estimated pacing. Long feeds, filmstrips,
|
|
87
|
-
terminal output and event lists stay bounded while earlier/later content remains
|
|
88
|
-
reachable.
|
|
89
|
-
|
|
90
|
-
**Copy moment link** creates a frame address; denied clipboard access exposes a
|
|
91
|
-
selectable link. **Original frame** opens/downloads the captured raster. **Saved
|
|
92
|
-
moments** keeps bounded run/participant/frame identifiers in this browser. It does
|
|
93
|
-
not save credentials, publish annotations or change the evidence bundle. Storage
|
|
94
|
-
failure leaves the controls usable for the current visit.
|
|
95
|
-
|
|
96
|
-
## Compare recorded evidence
|
|
97
|
-
|
|
98
|
-
Select participants and open **Compare selected**. Capture-time alignment chooses
|
|
99
|
-
the latest frame at or before the cursor, never a future frame. Before/after
|
|
100
|
-
coverage and each frame's age are explicit. Clock differences between desktops
|
|
101
|
-
remain an uncertainty; matching timestamps alone do not establish causality.
|
|
102
|
-
|
|
103
|
-
Elapsed-time alignment starts each participant at its first capture and compares
|
|
104
|
-
progress rather than simultaneous events. Missing or descending timestamps cannot
|
|
105
|
-
be used as a shared clock. Another run can be loaded from the available library
|
|
106
|
-
as recorded evidence. The address retains the chosen runs, participants, clock
|
|
107
|
-
and cursor so reopening it restores the comparison.
|
|
108
|
-
|
|
109
|
-
## Boundaries and checks
|
|
110
|
-
|
|
111
|
-
Only the attached process can grant a desktop iframe its own origin for provider
|
|
112
|
-
module loading. Stored grants are removed, exports contain no runtime grants,
|
|
113
|
-
and every local viewer response refuses to be framed. Generic imported embeds
|
|
114
|
-
retain an opaque sandbox. Artifact and history links cannot introduce arbitrary
|
|
115
|
-
URL schemes or traverse outside their evidence roots.
|
|
116
|
-
|
|
117
|
-
`pnpm observer:browser:proof` exercises generated synthetic evidence in the
|
|
118
|
-
production artifact. `pnpm observer:iframe:proof`, after `pnpm build`, checks the
|
|
119
|
-
actual serving boundary against direct, redirected and scripted iframe attacks.
|
|
120
|
-
CI retains their screenshots and JSON receipts. These Chromium checks do not
|
|
121
|
-
claim physical-device or non-Chromium coverage. Actual provider checks and their
|
|
122
|
-
resource-cleanup receipts are separate acceptance evidence.
|
|
123
|
-
|
|
124
|
-
Interaction references rechecked September 8, 2026:
|
|
125
|
-
[Base UI popover](https://base-ui.com/react/components/popover),
|
|
126
|
-
[React state structure](https://react.dev/learn/choosing-the-state-structure),
|
|
127
|
-
[WAI-ARIA tabs](https://www.w3.org/WAI/ARIA/apg/patterns/tabs/),
|
|
128
|
-
[iframe sandboxing](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/iframe),
|
|
129
|
-
[Playwright Trace Viewer](https://playwright.dev/docs/trace-viewer), and
|
|
130
|
-
[PostHog recording controls](https://posthog.com/docs/session-replay/how-to-watch-recordings).
|
|
131
|
-
|
|
132
|
-
### Moving between review views
|
|
133
|
-
|
|
134
|
-
The library button opens a drawer while reviewing a participant or comparison,
|
|
135
|
-
including on desktop. Comparison panels use the same participant names as the
|
|
136
|
-
grid. **Open frame** opens the displayed capture in the player, where it can be
|
|
137
|
-
saved; **Back to comparison** restores that comparison's selection, alignment and
|
|
138
|
-
cursor. Browser Back also returns to the addressed comparison. Comparing another
|
|
139
|
-
run needs a free slot within the three-participant limit.
|
|
140
|
-
|
|
141
|
-
**Reported thinking** is an explicit filter; the Thinking checkbox controls only
|
|
142
|
-
All evidence. **Warnings & findings** includes a separate Run and setup notices
|
|
143
|
-
section. These recorded operational notices retain their source timestamps and
|
|
144
|
-
are not assigned invented screenshot positions or counted as participant findings.
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# Optional participant media
|
|
2
|
-
|
|
3
|
-
Media belongs to the desktop. The participant still works through screenshots
|
|
4
|
-
and the shared computer-use loop, using one continuing Codex conversation for
|
|
5
|
-
clicks, listening and spoken replies.
|
|
6
|
-
|
|
7
|
-
```yaml
|
|
8
|
-
actors:
|
|
9
|
-
- type: local-agent
|
|
10
|
-
localAgent: codex
|
|
11
|
-
execution:
|
|
12
|
-
target: local
|
|
13
|
-
desktop:
|
|
14
|
-
media:
|
|
15
|
-
camera: { source: synthetic }
|
|
16
|
-
microphone: { source: speech }
|
|
17
|
-
policies:
|
|
18
|
-
mediaPermission: prompt
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
Omit `media` and `recording` for ordinary browser studies. They keep the smaller
|
|
22
|
-
browser image and start no audio server, camera producer or speech worker. Camera and speech
|
|
23
|
-
can also be requested separately. Local media setup uses a separately pinned
|
|
24
|
-
image, prepared by the first live study or `humanish runtime setup --media`.
|
|
25
|
-
|
|
26
|
-
The local camera is an animated test pattern behind a native V4L2 device. Speech
|
|
27
|
-
uses a synthetic microphone and a separate speaker sink. Chromium uses its
|
|
28
|
-
ordinary devices and permission dialog. `mediaPermission: granted` bypasses the
|
|
29
|
-
dialog explicitly; it does not replace the devices.
|
|
30
|
-
|
|
31
|
-
## Speaking and listening
|
|
32
|
-
|
|
33
|
-
With speech enabled, `humanish_ui` accepts `{kind: "speak", text: "..."}` in
|
|
34
|
-
addition to browser actions. It plays into the microphone; the participant must
|
|
35
|
-
join and unmute through the app. Tool narration is never automatically spoken.
|
|
36
|
-
Keep each utterance within 400 characters. Playback acknowledgement establishes
|
|
37
|
-
local microphone input, not delivery to another caller.
|
|
38
|
-
|
|
39
|
-
The desktop captures actual speaker audio. Finalized English transcriptions
|
|
40
|
-
arrive as `heardSpeech` observations with an utterance ID, `speaker_audio` source
|
|
41
|
-
and duration. A participant can use the existing `wait` action while listening.
|
|
42
|
-
Hearing something counts as progress even when the screen stays unchanged.
|
|
43
|
-
|
|
44
|
-
Transcription and synthetic speech run inside the Linux desktop, without a
|
|
45
|
-
speech API key or a host Python installation. Codex inference still runs remotely
|
|
46
|
-
using the selected account. The first voice uses espeak-ng and sounds robotic;
|
|
47
|
-
whisper.cpp uses the pinned English `base.en` model for recognition. This is bounded turn-taking, with recognition
|
|
48
|
-
latency and possible transcription errors, not a streaming voice conversation
|
|
49
|
-
with interruption handling.
|
|
50
|
-
|
|
51
|
-
Spoken text and heard observations pass through the existing evidence redaction
|
|
52
|
-
before being retained in the trace. Analysis reads that evidence alongside screenshots and actions; it does not
|
|
53
|
-
inspect raw audio or video. Raw audio is not saved by default. [Optional desktop recording](desktop-recording.md)
|
|
54
|
-
can retain actual screen and audio playback alongside this evidence.
|
|
55
|
-
|
|
56
|
-
## Hosted desktops
|
|
57
|
-
|
|
58
|
-
The same worker and participant loop support hosted speech. humanish selects a
|
|
59
|
-
versioned public E2B media template when speech is requested; ordinary browser
|
|
60
|
-
studies keep the stock desktop. The usual E2B credentials and Codex login are
|
|
61
|
-
sufficient. `execution.desktop.template` remains an explicit override for your
|
|
62
|
-
own compatible image; see the [build recipe](https://github.com/danielgwilson/humanish/blob/main/runtime/browser-media/E2B.md).
|
|
63
|
-
The host starts the worker through the SDK's streaming command interface, and
|
|
64
|
-
model credentials stay on the host. Missing dependencies fail desktop preparation
|
|
65
|
-
before a participant starts.
|
|
66
|
-
|
|
67
|
-
Existing hosted synthetic cameras use Chromium's fake-device flags. Those flags
|
|
68
|
-
also replace its microphone, so hosted camera and speech cannot currently be
|
|
69
|
-
combined. Use a local native-media desktop for both, or a hosted audio-only
|
|
70
|
-
study. Microphone files and speech through other participant providers are not
|
|
71
|
-
supported. A template alone cannot add camera support to a kernel without V4L2.
|
|
72
|
-
|
|
73
|
-
## Runtime maintenance
|
|
74
|
-
|
|
75
|
-
`runtime/local-firecracker/build.py --media` extends the maintained browser image
|
|
76
|
-
with native devices and the speech worker. The published media image must carry
|
|
77
|
-
`to.humanish.runtime.media=1`; a cached browser image cannot satisfy a media
|
|
78
|
-
request. Source builds can select an already-built media image with
|
|
79
|
-
`HUMANISH_LOCAL_MEDIA_RUNTIME_IMAGE`.
|
|
80
|
-
|
|
81
|
-
The media worker owns its subprocesses and buffers. Failed speech recognition,
|
|
82
|
-
worker exit and queue overflow stop the media session instead of appearing as
|
|
83
|
-
successful silence. Closing the desktop stops media and reclaims its isolated
|
|
84
|
-
state. No conferencing vendor or room-specific behavior is implemented in core.
|
|
85
|
-
|
|
86
|
-
Retain the matching media sources and package notices when publishing runtime
|
|
87
|
-
assets. Pass `--media-browser` and `--media-inputs` to the existing
|
|
88
|
-
`runtime/local-firecracker/sources.py` collector alongside its ordinary inputs.
|
|
89
|
-
Hardware capacity and conferencing topology require their own measured proof;
|
|
90
|
-
requesting media does not qualify twenty concurrent participants or TURN.
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
# Project Layout
|
|
2
|
-
|
|
3
|
-
`humanish init` gives a project two roots:
|
|
4
|
-
|
|
5
|
-
```text
|
|
6
|
-
humanish/ # committed lab source
|
|
7
|
-
.humanish/ # ignored runtime state, evidence and local overrides
|
|
8
|
-
```
|
|
9
|
-
|
|
10
|
-
## Committed lab source: `humanish/`
|
|
11
|
-
|
|
12
|
-
`init` writes:
|
|
13
|
-
|
|
14
|
-
```text
|
|
15
|
-
humanish/
|
|
16
|
-
README.md
|
|
17
|
-
labs/
|
|
18
|
-
first-run.yaml # keyless preview
|
|
19
|
-
try-live.yaml # first live lab
|
|
20
|
-
cua-browser.yaml # computer-use participants on a hosted desktop
|
|
21
|
-
local-browser.yaml # computer-use participants on a local desktop
|
|
22
|
-
lobby-trivia-3player.yaml
|
|
23
|
-
personas/
|
|
24
|
-
synthetic-new-user.yaml
|
|
25
|
-
skeptical-power-user.yaml
|
|
26
|
-
scenarios/
|
|
27
|
-
first-run-smoke.yaml
|
|
28
|
-
onboarding-regression.yaml
|
|
29
|
-
coverage-map.md
|
|
30
|
-
coverage-matrix.md
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
Labs select their subject, actors, personas, scenarios, tasks, budgets and
|
|
34
|
-
policies. Personas and scenarios are referenced by id. An adopter scorer is an
|
|
35
|
-
`.mjs` module that a lab names under `review.scorer.ref`.
|
|
36
|
-
|
|
37
|
-
Keep this directory reviewable and reproducible from a clean clone. Everything in
|
|
38
|
-
it is public-safe: synthetic personas and fixtures, env var names without values.
|
|
39
|
-
|
|
40
|
-
## Ignored runtime state: `.humanish/`
|
|
41
|
-
|
|
42
|
-
```text
|
|
43
|
-
.humanish/
|
|
44
|
-
runs/ # run bundles, screenshots, transcripts, Observer output
|
|
45
|
-
labs/ # private labs; a committed lab with the same id wins
|
|
46
|
-
local/labs/ # machine-local labs
|
|
47
|
-
local/personas/ # machine-local personas; a committed persona with the same id wins
|
|
48
|
-
cache/ tmp/ logs/
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
Never commit run bundles, raw screenshots, transcripts, local overrides or
|
|
52
|
-
secrets. `init` adds `.humanish/` to `.gitignore`.
|
|
53
|
-
|
|
54
|
-
## Formats
|
|
55
|
-
|
|
56
|
-
- `.yaml` for human-authored source: labs, personas, scenarios.
|
|
57
|
-
Prefer `.yaml` over `.yml`.
|
|
58
|
-
- `.mjs` for executable adopter scorers.
|
|
59
|
-
- `.json` for generated artifacts and synthetic fixtures; `.ndjson` for
|
|
60
|
-
appendable event and transcript streams.
|
|
61
|
-
- `.yml` only where an outside tool expects it, such as
|
|
62
|
-
`.github/workflows/*.yml`.
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
# Real email receiving
|
|
2
|
-
|
|
3
|
-
A supported browser study can give each participant a fresh AgentMail inbox. The
|
|
4
|
-
application sends real email to that address; humanish polls it on the host and
|
|
5
|
-
publishes a private inbox surface on that participant's desktop. The participant
|
|
6
|
-
can read the original email, switch to a plain view and follow an approved link.
|
|
7
|
-
|
|
8
|
-
Use local capture when you can redirect the app's send configuration and want to
|
|
9
|
-
avoid hosted mail. Use real receiving when the app must send normally or delivery
|
|
10
|
-
itself is part of the flow. These are separate modes; do not combine their settings.
|
|
11
|
-
SMS and participant outbound mail are not supported.
|
|
12
|
-
|
|
13
|
-
## Setup
|
|
14
|
-
|
|
15
|
-
Open `humanish tui`, press **c** for Connections, and choose **Add API key** to add an
|
|
16
|
-
AgentMail key. Hidden entry saves it in the existing user key store and checks
|
|
17
|
-
authentication without creating an inbox; Ctrl+C cancels entry and returns to the TUI.
|
|
18
|
-
The project profile, `.humanish/local/comms.yaml`, stores only the provider and
|
|
19
|
-
environment-variable name.
|
|
20
|
-
Environment and explicit env-file values retain precedence over saved keys.
|
|
21
|
-
A rejected or unavailable authentication check does not delete the saved key.
|
|
22
|
-
Authentication does not prove inbox creation/deletion permissions, quota or delivery.
|
|
23
|
-
This release requires an organization-scoped key.
|
|
24
|
-
|
|
25
|
-
Connections can preview and save a receiving-enabled local lab copy. The preview
|
|
26
|
-
discloses hosted email, model processing, local review and separate provider charges.
|
|
27
|
-
The original manifest is preserved. Select the new exact path when launching.
|
|
28
|
-
|
|
29
|
-
The same operations are available to agents:
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
humanish keys set agentmail
|
|
33
|
-
humanish comms connections add agentmail --json
|
|
34
|
-
humanish comms check --online --json
|
|
35
|
-
humanish comms configure --lab humanish/labs/signup.yaml --json
|
|
36
|
-
# Review the returned path, disclosures and planToken, then:
|
|
37
|
-
humanish comms configure --lab humanish/labs/signup.yaml --apply --plan-token <digest> --json
|
|
38
|
-
humanish lab run .humanish/local/labs/signup-receiving.yaml --json --no-open
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
Direct manifest authoring selects a saved connection:
|
|
42
|
-
|
|
43
|
-
```yaml
|
|
44
|
-
comms:
|
|
45
|
-
email:
|
|
46
|
-
connection: agentmail
|
|
47
|
-
# Optional: additional trusted email-link destinations, exact origins only.
|
|
48
|
-
allowedOrigins:
|
|
49
|
-
- https://accounts.example.test
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
The target origin is automatically allowed. On provisioned subjects, the declared
|
|
53
|
-
serve origin and optional `linkOrigin` use the existing target-origin rewrite.
|
|
54
|
-
Review additional origins as destinations the participant is allowed to open from
|
|
55
|
-
mail. This policy governs the inbox surface, not all later browser navigation.
|
|
56
|
-
|
|
57
|
-
Supported execution is hosted computer use with app-url, clone or local-tree
|
|
58
|
-
subjects, including shared-world studies. Local-agent, scripted, terminal, desktop-cli, in-process and local-app routes reject
|
|
59
|
-
real receiving before allocation. Connection mode cannot declare capture options,
|
|
60
|
-
recipients or borrowed mailbox IDs. A fresh address is not an existing account;
|
|
61
|
-
assignments must allow signup or arranging mail to the new identity.
|
|
62
|
-
|
|
63
|
-
## What a run does
|
|
64
|
-
|
|
65
|
-
1. Resolve the selected connection and host credential. Reject forwarding that
|
|
66
|
-
management credential through target environment names, aliases or literals.
|
|
67
|
-
2. Authenticate and durably record each acquisition intent in private host state.
|
|
68
|
-
Acquire all participant addresses before starting desktops.
|
|
69
|
-
3. Give each participant its address and loopback inbox URL. No management key or
|
|
70
|
-
other participant's mailbox is installed in its desktop. Each surface has only
|
|
71
|
-
its own list/message/plain/JSON routes, with no send endpoint or aggregate inbox.
|
|
72
|
-
4. Poll received mail, register scrub targets, sanitize/render and atomically
|
|
73
|
-
publish the complete inbox snapshot. Repeated reads can fill temporarily missing
|
|
74
|
-
bodies and inline images without changing local message identity.
|
|
75
|
-
5. Before desktop teardown, perform a bounded final read, save evidence, stop the
|
|
76
|
-
inbox surface and request deletion. Confirm provider absence; otherwise retain
|
|
77
|
-
unresolved cleanup for recovery. Provider deletion is not an erasure guarantee.
|
|
78
|
-
|
|
79
|
-
The original view preserves supported email structure and inline PNG/JPEG/GIF/WebP
|
|
80
|
-
images. Parsed HTML removes active content; response CSP blocks scripts, forms,
|
|
81
|
-
frames and remote assets. Remote images show an explicit unavailable placeholder.
|
|
82
|
-
Links use the same origin policy in original, plain and JSON views. Attachment
|
|
83
|
-
bytes are fetched only through the fixed provider API and its observed CDN host;
|
|
84
|
-
provider authorization never goes to the CDN. General attachments, arbitrary remote
|
|
85
|
-
images and raw-MIME fallback are unsupported. Raster checks are bounded signature
|
|
86
|
-
checks, not a guarantee that every malformed image will decode in a browser.
|
|
87
|
-
|
|
88
|
-
Collection is bounded by request time, request/page count, bytes, images and a
|
|
89
|
-
100-message retained inbox limit. Limits, failed reads, blocked content and failed
|
|
90
|
-
publication are recorded as coverage limitations. Inbox pages require reload to
|
|
91
|
-
show later messages. No webhook/public mail ingress is required on the host.
|
|
92
|
-
|
|
93
|
-
## Evidence and publication
|
|
94
|
-
|
|
95
|
-
`comms/receiving.json` uses `humanish.comms-receiving.v2`. It records local IDs,
|
|
96
|
-
counts, timestamps and lifecycle/coverage status, without raw mail, provider IDs,
|
|
97
|
-
addresses or stable content digests. The final run bundle embeds that projection.
|
|
98
|
-
Receipt, successful inbox publication, participant reading and target success are
|
|
99
|
-
separate claims; analysis receives this distinction and the harness limitations.
|
|
100
|
-
A missing message alone does not establish that the application failed to send.
|
|
101
|
-
Immediate automatic analysis scrubs known exact values from generated narration
|
|
102
|
-
using a bounded, invocation-local registry. It never saves that registry. Later
|
|
103
|
-
analysis cannot reconstruct it; screenshots may still expose mail content, and the
|
|
104
|
-
publication restriction applies to both immediate and later findings.
|
|
105
|
-
|
|
106
|
-
Mail is hosted by AgentMail. Its content can reach the hosted desktop, actor model,
|
|
107
|
-
screenshots, narration and analysis model. Such runs carry a durable
|
|
108
|
-
`real-communications` publication restriction: verification returns `local_only`,
|
|
109
|
-
public feedback/exposure and shareable exports remain gated, and screenshot
|
|
110
|
-
blurring does not clear the restriction. Local Observer review and explicitly local
|
|
111
|
-
HTML export remain available. Local-only publication is not local-only processing.
|
|
112
|
-
|
|
113
|
-
## Interrupted-run recovery
|
|
114
|
-
|
|
115
|
-
Process interruption can bypass normal final reads and teardown. Inspect recovery
|
|
116
|
-
state after stopping a run; do not assume Ctrl+C or killing a process deleted its
|
|
117
|
-
inboxes:
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
humanish comms recover --json
|
|
121
|
-
humanish comms recover --run <run-id> --apply --json
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
Connections also exposes pending cleanup. Recovery only uses private host journals
|
|
125
|
-
under `$XDG_STATE_HOME/humanish/comms` (default `~/.local/state/humanish/comms`),
|
|
126
|
-
with private directories/files and bound project, connection, account and scope.
|
|
127
|
-
A live or unknown owner blocks takeover. The adapter checks resource/client identity
|
|
128
|
-
before deletion; it cannot delete an inbox named only in a run artifact. Lost
|
|
129
|
-
creation responses can be reconciled through the recorded idempotent client ID.
|
|
130
|
-
Do not delete private journals while resources remain unresolved. Moving/replacing
|
|
131
|
-
the project or changing account/scope can intentionally prevent recovery.
|
|
132
|
-
|
|
133
|
-
If final evidence persistence fails, the provider inbox is retained as unresolved
|
|
134
|
-
rather than discarding the last retrievable copy. Explicit recovery is a deletion
|
|
135
|
-
operation, not message-history reconstruction. Sandbox reclamation remains a
|
|
136
|
-
separate operation.
|
|
Binary file
|
|
Binary file
|