humanish 0.107.0 → 0.108.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +22 -17
- package/CHANGELOG.md +14 -0
- package/CONTEXT.md +51 -44
- package/README.md +145 -172
- 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-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 +8 -6
- 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 +2 -2
- package/dist/actors/codex/restricted-session.js +10 -5
- package/dist/actors/computer-use/actor.d.ts +16 -16
- package/dist/actors/computer-use/actor.js +2 -2
- package/dist/actors/computer-use/admission-limit.d.ts +1 -1
- package/dist/actors/computer-use/admission-limit.js +1 -1
- package/dist/actors/computer-use/loop/actions.d.ts +3 -3
- package/dist/actors/computer-use/loop/actions.js +10 -10
- package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
- package/dist/actors/computer-use/loop/backstop.js +14 -12
- package/dist/actors/computer-use/loop/ending.d.ts +5 -5
- package/dist/actors/computer-use/loop/ending.js +7 -7
- package/dist/actors/computer-use/loop/observation.d.ts +2 -2
- package/dist/actors/computer-use/loop/observation.js +9 -9
- package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
- package/dist/actors/computer-use/loop/provider-call.js +1 -1
- package/dist/actors/computer-use/loop/session.js +3 -3
- package/dist/actors/computer-use/loop/spend.d.ts +1 -1
- package/dist/actors/computer-use/loop/spend.js +1 -1
- package/dist/actors/computer-use/loop/trace.js +9 -8
- package/dist/actors/computer-use/loop/types.d.ts +25 -23
- package/dist/actors/computer-use/loop/usage.js +2 -2
- 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 +11 -8
- package/dist/actors/computer-use/openai-provider.js +45 -34
- package/dist/actors/computer-use/openai-requests.d.ts +36 -10
- package/dist/actors/computer-use/openai-requests.js +82 -15
- package/dist/actors/computer-use/openai-wire.d.ts +19 -7
- package/dist/actors/computer-use/openai-wire.js +36 -34
- package/dist/actors/contract.d.ts +78 -43
- package/dist/actors/contract.js +29 -23
- package/dist/actors/local-agent/claude-session.d.ts +1 -1
- package/dist/actors/local-agent/claude-session.js +10 -9
- package/dist/actors/local-agent/cli.d.ts +8 -6
- package/dist/actors/local-agent/cli.js +24 -28
- package/dist/actors/local-agent/readiness.d.ts +2 -2
- package/dist/actors/local-agent/readiness.js +4 -4
- package/dist/actors/reasoning-effort.js +6 -6
- package/dist/actors/registry.d.ts +10 -10
- package/dist/actors/registry.js +18 -17
- package/dist/actors/scripted-browser/actor.d.ts +8 -8
- package/dist/actors/scripted-browser/actor.js +16 -16
- package/dist/actors/scripted-browser/browser-command.js +1 -1
- package/dist/actors/scripted-browser/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/codex-config.d.ts +6 -2
- package/dist/analysis/codex-config.js +22 -14
- package/dist/analysis/service.js +5 -5
- package/dist/cli/commands/analyze.js +19 -16
- package/dist/cli/commands/codex.js +9 -9
- package/dist/cli/commands/comms.js +54 -33
- package/dist/cli/commands/feedback.js +20 -21
- package/dist/cli/commands/lab-format.d.ts +5 -4
- package/dist/cli/commands/lab-format.js +35 -23
- package/dist/cli/commands/lab-route-computer-use.js +6 -7
- package/dist/cli/commands/lab-route-preview.js +4 -3
- package/dist/cli/commands/lab-route-shared-world.js +3 -3
- package/dist/cli/commands/lab-run.js +10 -11
- package/dist/cli/commands/lab-scorer.d.ts +2 -2
- package/dist/cli/commands/lab-scorer.js +1 -1
- package/dist/cli/commands/migrate.d.ts +4 -0
- package/dist/cli/commands/migrate.js +65 -0
- package/dist/cli/commands/observe.js +147 -108
- 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 +137 -138
- package/dist/cli/commands/setup.d.ts +2 -2
- package/dist/cli/commands/setup.js +26 -21
- package/dist/cli/commands/study.d.ts +3 -0
- package/dist/cli/commands/study.js +182 -0
- package/dist/cli/commands/tui.d.ts +4 -4
- package/dist/cli/commands/tui.js +21 -21
- package/dist/cli/commands/watch.js +60 -75
- package/dist/cli/deprecations.d.ts +18 -0
- package/dist/cli/deprecations.js +48 -0
- package/dist/cli/doctor.d.ts +15 -5
- package/dist/cli/doctor.js +103 -48
- package/dist/cli/first-run-path.d.ts +12 -10
- package/dist/cli/first-run-path.js +30 -28
- package/dist/cli/io.d.ts +41 -6
- package/dist/cli/io.js +97 -22
- package/dist/cli/observer-follow.d.ts +2 -2
- package/dist/cli/observer-follow.js +5 -6
- package/dist/cli/orientation.d.ts +6 -3
- package/dist/cli/orientation.js +43 -39
- package/dist/cli/product-sentence.d.ts +6 -0
- package/dist/cli/product-sentence.js +6 -0
- package/dist/cli/program.d.ts +6 -1
- package/dist/cli/program.js +109 -40
- package/dist/cli/telemetry.d.ts +15 -15
- package/dist/cli/telemetry.js +48 -40
- 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 +14 -14
- package/dist/comms/email-catch.d.ts +3 -3
- package/dist/comms/email-catch.js +8 -8
- package/dist/comms/external-evidence.js +2 -2
- package/dist/comms/extract.js +2 -2
- package/dist/comms/fake-inbox.d.ts +2 -2
- package/dist/comms/fake-inbox.js +2 -2
- package/dist/comms/receiving-render.d.ts +1 -1
- package/dist/comms/receiving-render.js +2 -2
- package/dist/comms/sandbox-catch-script.d.ts +6 -6
- package/dist/comms/sandbox-catch-script.js +6 -6
- package/dist/comms/sandbox-catch.d.ts +36 -37
- package/dist/comms/sandbox-catch.js +34 -35
- package/dist/comms/setup.js +42 -8
- package/dist/comms/thread-evidence.d.ts +1 -1
- package/dist/comms/thread-evidence.js +6 -6
- package/dist/comms/types.d.ts +6 -6
- package/dist/comms/types.js +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 +36 -78
- package/dist/feedback/export-bundle.js +1 -1
- package/dist/feedback/export.d.ts +5 -1
- package/dist/feedback/export.js +7 -8
- package/dist/feedback/feedback.d.ts +2 -2
- package/dist/feedback/feedback.js +21 -3
- package/dist/guest/chromium-text.js +2 -2
- package/dist/guest/desktop-native.d.ts +1 -1
- package/dist/guest/runtime.js +1 -1
- package/dist/index.d.ts +12 -10
- package/dist/index.js +8 -6
- package/dist/keys/key-resolution.d.ts +5 -5
- package/dist/keys/key-resolution.js +23 -23
- package/dist/lab/adapter-extension.d.ts +7 -7
- package/dist/lab/adapter-extension.js +13 -36
- package/dist/lab/adapter-scorer-loader.d.ts +7 -7
- package/dist/lab/adapter-scorer-loader.js +32 -32
- package/dist/lab/composition-rules.js +42 -42
- package/dist/lab/config.js +65 -25
- package/dist/lab/deprecated-fields.d.ts +10 -0
- package/dist/lab/deprecated-fields.js +24 -0
- package/dist/lab/device-presets.d.ts +8 -8
- package/dist/lab/device-presets.js +11 -11
- package/dist/lab/discover.d.ts +13 -9
- package/dist/lab/discover.js +117 -57
- package/dist/lab/doctor.d.ts +10 -3
- package/dist/lab/doctor.js +47 -9
- package/dist/lab/init-templates.js +147 -147
- package/dist/lab/init.d.ts +1 -1
- package/dist/lab/init.js +41 -9
- package/dist/lab/keys.d.ts +2 -0
- package/dist/lab/keys.js +42 -8
- package/dist/lab/lab-deps.d.ts +7 -12
- package/dist/lab/parse/actors.js +9 -9
- package/dist/lab/parse/comms.js +5 -5
- package/dist/lab/parse/execution.js +13 -13
- package/dist/lab/parse/study-v3.d.ts +23 -0
- package/dist/lab/parse/study-v3.js +259 -0
- package/dist/lab/parse/subject-state.d.ts +7 -7
- package/dist/lab/parse/subject-state.js +16 -16
- package/dist/lab/parse/subject.js +28 -28
- package/dist/lab/parse/values.d.ts +1 -1
- package/dist/lab/parse/values.js +3 -3
- package/dist/lab/persona-resolve.d.ts +4 -4
- package/dist/lab/persona-resolve.js +4 -4
- package/dist/lab/plan-participants.d.ts +2 -2
- package/dist/lab/plan-types.d.ts +4 -4
- package/dist/lab/plan.d.ts +1 -7
- package/dist/lab/plan.js +10 -41
- package/dist/lab/preflight-probes.js +11 -11
- package/dist/lab/preflight-result.d.ts +2 -1
- package/dist/lab/preflight-result.js +5 -4
- package/dist/lab/preflight.d.ts +7 -5
- package/dist/lab/preflight.js +5 -5
- package/dist/lab/routing.d.ts +31 -25
- package/dist/lab/routing.js +60 -29
- package/dist/lab/run-lab-events.d.ts +0 -3
- package/dist/lab/run-lab-events.js +0 -6
- package/dist/lab/run-lab-homes.d.ts +22 -10
- package/dist/lab/run-lab-homes.js +5 -1
- package/dist/lab/run-lab-options.d.ts +1 -1
- package/dist/lab/run-lab-options.js +16 -13
- package/dist/lab/summary.d.ts +7 -6
- package/dist/lab/summary.js +10 -10
- package/dist/lab/tasks.d.ts +15 -15
- package/dist/lab/tasks.js +14 -14
- package/dist/lab/types.d.ts +101 -95
- package/dist/lab/types.js +2 -0
- package/dist/lab/validation.d.ts +13 -13
- package/dist/lab/validation.js +44 -42
- package/dist/lab/warnings.d.ts +10 -0
- package/dist/lab/warnings.js +61 -33
- package/dist/library-aliases.d.ts +56 -0
- package/dist/library-aliases.js +22 -0
- package/dist/observer/artifact.d.ts +1 -1
- package/dist/observer/artifact.js +6 -6
- 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 +1 -1
- package/dist/observer/library.js +4 -2
- package/dist/observer/listen.js +5 -4
- package/dist/observer/render.d.ts +1 -1
- package/dist/observer/render.js +10 -5
- package/dist/observer/run-routes.d.ts +3 -3
- package/dist/observer/run-routes.js +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 +15 -15
- package/dist/routes/computer-use/bundle.js +3 -3
- package/dist/routes/computer-use/e2b-desktop/comms.d.ts +1 -1
- package/dist/routes/computer-use/e2b-desktop/comms.js +14 -14
- package/dist/routes/computer-use/e2b-desktop/desktop.js +4 -4
- package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +4 -3
- package/dist/routes/computer-use/e2b-desktop/fidelity.js +11 -10
- package/dist/routes/computer-use/e2b-desktop/prepare.js +7 -7
- package/dist/routes/computer-use/e2b-desktop/start.js +9 -8
- package/dist/routes/computer-use/e2b-desktop/teardown.js +5 -4
- package/dist/routes/computer-use/external-comms.d.ts +1 -1
- package/dist/routes/computer-use/external-comms.js +1 -1
- package/dist/routes/computer-use/fanout-bundle.js +18 -18
- package/dist/routes/computer-use/fanout-records.js +10 -11
- package/dist/routes/computer-use/live-flush.d.ts +1 -1
- package/dist/routes/computer-use/live-flush.js +6 -6
- package/dist/routes/computer-use/live-phase.d.ts +4 -2
- package/dist/routes/computer-use/live-phase.js +6 -6
- package/dist/routes/computer-use/local-vm.js +1 -1
- package/dist/routes/computer-use/participant-desktop.d.ts +4 -4
- package/dist/routes/computer-use/participant-desktop.js +4 -4
- package/dist/routes/computer-use/participant-execution.d.ts +4 -4
- package/dist/routes/computer-use/participant-execution.js +9 -9
- package/dist/routes/computer-use/participant-model.d.ts +6 -0
- package/dist/routes/computer-use/participant-model.js +31 -13
- package/dist/routes/computer-use/participant-prompt.d.ts +11 -11
- package/dist/routes/computer-use/participant-prompt.js +6 -6
- package/dist/routes/computer-use/participant-runs.d.ts +7 -7
- package/dist/routes/computer-use/participant-runs.js +13 -13
- package/dist/routes/computer-use/plan.js +22 -22
- package/dist/routes/computer-use/preflight.js +21 -21
- package/dist/routes/computer-use/rerun-selection.js +1 -1
- package/dist/routes/computer-use/result.js +11 -11
- package/dist/routes/computer-use/route.d.ts +2 -1
- package/dist/routes/computer-use/route.js +15 -14
- package/dist/routes/computer-use/self-report.d.ts +7 -7
- package/dist/routes/computer-use/self-report.js +31 -31
- package/dist/routes/computer-use/setup.d.ts +1 -1
- package/dist/routes/computer-use/setup.js +17 -18
- package/dist/routes/computer-use/single-bundle.d.ts +7 -7
- package/dist/routes/computer-use/single-bundle.js +28 -30
- package/dist/routes/computer-use/subject-projection.d.ts +1 -1
- package/dist/routes/computer-use/subject-projection.js +6 -6
- package/dist/routes/computer-use/types.d.ts +40 -42
- package/dist/routes/computer-use/types.js +10 -10
- package/dist/routes/preview.d.ts +8 -2
- package/dist/routes/preview.js +8 -4
- package/dist/routes/scripted/bundle.d.ts +2 -2
- package/dist/routes/scripted/bundle.js +13 -12
- package/dist/routes/scripted/plan.d.ts +1 -1
- package/dist/routes/scripted/plan.js +9 -9
- package/dist/routes/scripted/result.js +5 -5
- package/dist/routes/scripted/route.js +5 -6
- package/dist/routes/scripted/scenario.js +2 -2
- package/dist/routes/scripted/setup.js +7 -7
- package/dist/routes/scripted/subject.js +1 -1
- package/dist/routes/scripted/surface-records.js +3 -3
- package/dist/routes/scripted/types.d.ts +3 -5
- package/dist/routes/scripted/types.js +1 -1
- package/dist/routes/shared-world/bundle-records.js +9 -8
- package/dist/routes/shared-world/bundle.d.ts +5 -5
- package/dist/routes/shared-world/bundle.js +40 -38
- package/dist/routes/shared-world/checkpoints.d.ts +1 -1
- package/dist/routes/shared-world/checkpoints.js +1 -1
- package/dist/routes/shared-world/comms.d.ts +5 -5
- package/dist/routes/shared-world/comms.js +14 -14
- 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 +7 -6
- package/dist/routes/shared-world/participant-specs.js +31 -24
- package/dist/routes/shared-world/plan.js +7 -7
- 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.js +14 -13
- package/dist/routes/shared-world/result.js +20 -21
- package/dist/routes/shared-world/route.js +23 -22
- package/dist/routes/shared-world/setup.d.ts +3 -3
- package/dist/routes/shared-world/setup.js +4 -4
- package/dist/routes/shared-world/types.d.ts +30 -28
- package/dist/routes/shared-world/types.js +4 -4
- package/dist/routes/terminal/adapter.d.ts +3 -3
- package/dist/routes/terminal/adapter.js +5 -5
- package/dist/routes/terminal/bundle.d.ts +3 -3
- package/dist/routes/terminal/bundle.js +22 -21
- package/dist/routes/terminal/credentials.d.ts +4 -4
- package/dist/routes/terminal/credentials.js +7 -7
- package/dist/routes/terminal/dry-run.js +4 -4
- package/dist/routes/terminal/encoding.js +2 -2
- package/dist/routes/terminal/ledger.d.ts +3 -3
- package/dist/routes/terminal/ledger.js +14 -14
- package/dist/routes/terminal/live-finish.js +3 -3
- package/dist/routes/terminal/live-sandbox.js +12 -13
- package/dist/routes/terminal/persona.js +1 -1
- package/dist/routes/terminal/plan.js +11 -11
- package/dist/routes/terminal/recorder.js +2 -2
- package/dist/routes/terminal/result.js +8 -8
- package/dist/routes/terminal/route.js +6 -7
- package/dist/routes/terminal/sandbox.d.ts +1 -1
- package/dist/routes/terminal/sandbox.js +1 -1
- package/dist/routes/terminal/session.js +8 -7
- 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 +2 -2
- package/dist/routes/terminal/trace.js +2 -2
- package/dist/routes/terminal/types.d.ts +26 -28
- package/dist/routes/terminal/types.js +3 -3
- package/dist/run/bundle-shape.js +3 -3
- package/dist/run/bundle.d.ts +46 -46
- package/dist/run/bundle.js +2 -1
- package/dist/run/cost-summary.js +3 -3
- package/dist/run/costs.js +7 -1
- package/dist/run/detail.d.ts +6 -6
- package/dist/run/detail.js +4 -4
- package/dist/run/dry-run-inputs.js +1 -1
- package/dist/run/dry-run.js +18 -18
- package/dist/run/judge.d.ts +19 -13
- package/dist/run/judge.js +18 -8
- package/dist/run/paths.d.ts +1 -1
- package/dist/run/paths.js +1 -1
- package/dist/run/pricing.d.ts +11 -6
- package/dist/run/pricing.js +20 -13
- package/dist/run/projection.d.ts +14 -14
- package/dist/run/projection.js +15 -15
- package/dist/run/reclaim.js +2 -2
- package/dist/run/results.d.ts +5 -5
- package/dist/run/run-index.d.ts +8 -6
- package/dist/run/run-index.js +15 -16
- 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 +5 -4
- package/dist/run/run.js +1 -1
- 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 +36 -35
- 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 +6 -6
- package/dist/run/stats.d.ts +12 -6
- package/dist/run/stats.js +116 -58
- package/dist/run/status.d.ts +8 -29
- package/dist/run/status.js +5 -27
- package/dist/run/stored-runs.js +2 -1
- package/dist/run/stream-shape.js +1 -1
- package/dist/run/streams.d.ts +6 -6
- package/dist/run/study-provenance.d.ts +47 -0
- package/dist/run/study-provenance.js +63 -0
- package/dist/run/study-result.d.ts +16 -0
- package/dist/run/study-result.js +9 -0
- package/dist/run/text.d.ts +2 -0
- package/dist/run/text.js +4 -0
- package/dist/run-lab.d.ts +7 -7
- package/dist/run-lab.js +1 -3
- package/dist/study/convert.d.ts +33 -0
- package/dist/study/convert.js +432 -0
- package/dist/study/field-paths.d.ts +12 -0
- package/dist/study/field-paths.js +126 -0
- package/dist/study/files.d.ts +26 -0
- package/dist/study/files.js +43 -0
- package/dist/study/migrate.d.ts +48 -0
- package/dist/study/migrate.js +408 -0
- package/dist/study/owned-files.d.ts +38 -0
- package/dist/study/owned-files.js +182 -0
- package/dist/subject/clone.d.ts +1 -1
- package/dist/subject/desktop-cli.d.ts +1 -1
- package/dist/subject/desktop-cli.js +2 -2
- package/dist/subject/local-tree-archive.js +1 -1
- package/dist/subject/local-tree.d.ts +1 -1
- package/dist/subject/node-bootstrap.js +1 -1
- package/dist/subject/runtime.js +8 -9
- package/dist/subject/serve.d.ts +1 -1
- package/dist/subject/serve.js +3 -3
- package/dist/subject/state.d.ts +1 -1
- package/dist/subject/steps.d.ts +5 -5
- package/dist/subject/steps.js +4 -4
- package/dist/substrates/command-failure.d.ts +3 -3
- package/dist/substrates/command-failure.js +3 -3
- package/dist/substrates/detached.d.ts +6 -6
- package/dist/substrates/detached.js +7 -7
- package/dist/substrates/e2b/cdp-probe.d.ts +9 -9
- package/dist/substrates/e2b/cdp-probe.js +14 -17
- package/dist/substrates/e2b/desktop-browser.d.ts +2 -2
- package/dist/substrates/e2b/desktop-browser.js +8 -8
- package/dist/substrates/e2b/desktop-cdp.d.ts +9 -9
- package/dist/substrates/e2b/desktop-cdp.js +8 -8
- package/dist/substrates/e2b/desktop-executor.d.ts +1 -1
- package/dist/substrates/e2b/desktop-executor.js +1 -1
- package/dist/substrates/e2b/desktop-geometry.d.ts +3 -3
- package/dist/substrates/e2b/desktop-geometry.js +7 -7
- package/dist/substrates/e2b/desktop-media.d.ts +1 -1
- 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/sandbox.d.ts +1 -1
- package/dist/substrates/e2b/sandbox.js +1 -1
- package/dist/substrates/e2b/sdk.d.ts +11 -11
- package/dist/substrates/e2b/sdk.js +6 -6
- package/dist/tui/actions.d.ts +1 -1
- package/dist/tui/actions.js +13 -13
- package/dist/tui/contract.d.ts +16 -16
- package/dist/tui/contract.js +10 -10
- package/dist/tui/launch.d.ts +4 -4
- package/dist/tui/launch.js +18 -19
- package/dist/tui/project.js +5 -5
- package/dist/tui-app.js +82 -82
- 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 +4 -4
- package/dist/verify/subject.js +18 -18
- package/dist/verify/verify.js +92 -43
- package/docs/README.md +25 -32
- package/docs/architecture/actor-contract.md +56 -87
- package/docs/architecture/desktop-sessions.md +7 -7
- package/docs/architecture/external-public-shared-world.md +61 -59
- package/docs/architecture/github-feedback-loop.md +1 -4
- 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 +5 -5
- package/docs/architecture/terminal-product-route.md +67 -107
- package/docs/contracts/README.md +24 -0
- package/docs/contracts/adapter-admission.md +3 -3
- package/docs/contracts/adapter-fixtures.md +2 -5
- package/docs/contracts/core.md +1 -3
- package/docs/contracts/errors.md +62 -0
- package/docs/contracts/feedback.md +8 -9
- package/docs/contracts/policy.md +7 -12
- package/docs/contracts/run-bundle.md +45 -44
- package/docs/contracts/schemas.md +421 -362
- package/docs/contracts/study-analysis.md +3 -3
- package/docs/contracts/study-costs.md +11 -7
- package/docs/decisions/0001-run-bundle-is-the-source-of-truth.md +1 -1
- package/docs/decisions/0002-observer-is-one-self-contained-file.md +2 -2
- package/docs/decisions/0003-contained-paths-and-cleanup-authority.md +3 -3
- package/docs/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/participant/README.md +5 -5
- package/examples/participant/run.mjs +11 -10
- package/examples/scorer/README.md +3 -3
- package/examples/scorer/run.mjs +11 -12
- package/package.json +16 -17
- package/skills/humanish/SKILL.md +60 -58
- 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.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/observer/static.d.ts +0 -39
- package/dist/observer/static.js +0 -369
- 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
|
@@ -1,20 +1,14 @@
|
|
|
1
|
-
# Terminal-product
|
|
1
|
+
# Terminal-product route
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
the kept 2026-07-09 live receipt verifies 15/15 checks and `share_ready` at a
|
|
9
|
-
`$0` cap. That capability receipt is not adopter replacement: no deletion
|
|
10
|
-
branch has yet removed the reference adopter's bespoke generic study harness.
|
|
11
|
-
See the goal packet
|
|
12
|
-
([`docs/goals/terminal-product-lane/goal.md`](https://github.com/danielgwilson/humanish/blob/main/docs/goals/terminal-product-lane/goal.md))
|
|
13
|
-
for the full slice plan and the safety contract.
|
|
3
|
+
The live terminal-product route has shipped since `0.8.0`, with the in-sandbox runtime,
|
|
4
|
+
command-scoped credential placement, exact-id cleanup proof, an interventions ledger, a cost and
|
|
5
|
+
no-spend ledger, caps, and product scoring and feedback hooks. The
|
|
6
|
+
[original plan](https://github.com/danielgwilson/humanish/blob/main/docs/history/goals/terminal-product-lane/goal.md)
|
|
7
|
+
holds the build order and the safety contract.
|
|
14
8
|
|
|
15
9
|
## What this is
|
|
16
10
|
|
|
17
|
-
A
|
|
11
|
+
A study route for **terminal-product real-agent studies**: a real autonomous coding
|
|
18
12
|
agent (Codex) discovering and using a CLI/product from its **public surfaces
|
|
19
13
|
only**, running **inside an E2B shell** with declared runtime-auth placement and
|
|
20
14
|
spend/time caps, emitting durable terminal/substrate/cost/no-spend/cleanup/
|
|
@@ -23,26 +17,26 @@ routes. It tests whether an autonomous agent can discover and use a CLI/product
|
|
|
23
17
|
surface from public materials. It does not test whether a browser can click a
|
|
24
18
|
local web app.
|
|
25
19
|
|
|
26
|
-
It
|
|
27
|
-
|
|
28
|
-
|
|
20
|
+
It follows the pattern the scripted-browser and local-app routes added: a new
|
|
21
|
+
`subject.source` × `execution.target` pairing, a `terminal` case in `routeOf(config)`
|
|
22
|
+
and its dispatch, a registered actor that declares the run kind in its capabilities,
|
|
29
23
|
fail-closed cross-validation, and forward-declared warnings.
|
|
30
24
|
|
|
31
25
|
## The composition
|
|
32
26
|
|
|
33
|
-
| Axis
|
|
34
|
-
|
|
|
35
|
-
| `subject.source`
|
|
36
|
-
| `subject.product`
|
|
37
|
-
| `execution.target`
|
|
38
|
-
| `execution.terminal`
|
|
39
|
-
| `execution.runtimeAuth`
|
|
40
|
-
| `execution.runtime.version`
|
|
41
|
-
| `
|
|
42
|
-
| `
|
|
43
|
-
| `policies`
|
|
44
|
-
| `
|
|
45
|
-
| route
|
|
27
|
+
| Axis | Value |
|
|
28
|
+
| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
29
|
+
| `subject.source` | `terminal-product` |
|
|
30
|
+
| `subject.product` | `{ name, publicSurfaces[], install?, workdir?, upload? }`: the only world the agent sees |
|
|
31
|
+
| `execution.target` | `e2b-terminal` (or absent → implied) |
|
|
32
|
+
| `execution.terminal` | `{ transport: exec-stream, stdin: disabled }` |
|
|
33
|
+
| `execution.runtimeAuth` | `openai-env` (default) or opt-in `openai-egress`; names-only durable evidence |
|
|
34
|
+
| `execution.runtime.version` | Optional exact `@openai/codex` version; observed before keyed execution |
|
|
35
|
+
| `actor.model` / `reasoningEffort` | Passed to Codex as `--model` (default `gpt-5.6-sol`) and `-c model_reasoning_effort`; declarations, not observed provider identity |
|
|
36
|
+
| `caps` | `{ maxUsd, maxJobs, maxMinutes }`: the blast-radius budget; `maxUsd > 0` is refused unless a `costProbe` measures spend |
|
|
37
|
+
| `policies` | `allowPrivateRepoAccess` / `allowProviderCredentials` / `allowPaymentCredentials` / `allowGitHubMutation`, all default false |
|
|
38
|
+
| `actor.type` | `codex-exec`: a registered terminal actor (`keyPlacement: in-sandbox-command-scoped`) |
|
|
39
|
+
| route | `terminal` → `runTerminalProductLab` ([`src/routes/terminal/route.ts`](https://github.com/danielgwilson/humanish/blob/main/src/routes/terminal/route.ts)) |
|
|
46
40
|
|
|
47
41
|
Routing is `routeOf` (`src/lab/plan.ts`). It sends every `terminal-product` subject to
|
|
48
42
|
this route, even with an unregistered actor, so this route refuses the actor.
|
|
@@ -52,10 +46,10 @@ warnings.
|
|
|
52
46
|
## Repeating a terminal study with the same runtime
|
|
53
47
|
|
|
54
48
|
```yaml
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
49
|
+
actor:
|
|
50
|
+
type: codex-exec
|
|
51
|
+
model: gpt-5.6-sol
|
|
52
|
+
reasoningEffort: low
|
|
59
53
|
execution:
|
|
60
54
|
target: e2b-terminal
|
|
61
55
|
runtime:
|
|
@@ -75,7 +69,7 @@ the requested model and where it came from, declared effort, and the usage granu
|
|
|
75
69
|
The observed executable version also appears as `providerVersion`.
|
|
76
70
|
|
|
77
71
|
Codex's `--json` stream does not name the model it used, and its built-in default can change
|
|
78
|
-
with any release. So the route always passes `--model`: the
|
|
72
|
+
with any release. So the route always passes `--model`: the study's `actor.model`
|
|
79
73
|
(`modelStatus: declared`), or humanish's participant default `gpt-5.6-sol`
|
|
80
74
|
(`modelStatus: humanish_default`). Bundles written before 0.107.0 record
|
|
81
75
|
`runtime_default_unobserved` with no requested model.
|
|
@@ -87,7 +81,7 @@ requested model. Codex `turn.completed` usage sums every request in a turn, so n
|
|
|
87
81
|
size is known and no per-request long-context tier can be applied. The estimate prices every token
|
|
88
82
|
at the base tier, with cached input at the cached rate, and says so with
|
|
89
83
|
`basis: aggregated_turns_base_rate`. It is an estimate, not a measurement. The cost ledger
|
|
90
|
-
checked against `
|
|
84
|
+
checked against `caps.maxUsd` keeps the provider line unmeasured, and the studied
|
|
91
85
|
product's no-spend boundary still needs separate interpretation.
|
|
92
86
|
|
|
93
87
|
## Runtime auth: raw-key placement and remaining provider access
|
|
@@ -131,11 +125,11 @@ make authenticated requests to that host from sandbox creation until teardown,
|
|
|
131
125
|
including bootstrap/setup commands and commands launched outside Codex. Calls
|
|
132
126
|
made outside Codex may be absent from its usage ledger. This mode does not impose
|
|
133
127
|
a provider-side spending limit, restrict models/API paths, or make
|
|
134
|
-
`
|
|
128
|
+
`caps.maxUsd` a preventive provider budget. A hard provider budget needs
|
|
135
129
|
a separately enforced control; do not infer zero spend from an unmeasured ledger
|
|
136
130
|
line.
|
|
137
131
|
|
|
138
|
-
Public internet discovery stays unrestricted unless the
|
|
132
|
+
Public internet discovery stays unrestricted unless the study already declares
|
|
139
133
|
`execution.egressAllow`. The mode preserves that allowlist and its deny-all
|
|
140
134
|
fallback without adding hosts. If an allowlist omits `api.openai.com`, provider
|
|
141
135
|
requests can fail. E2B domain allowlists are routing controls rather than strict
|
|
@@ -155,7 +149,7 @@ and [E2B's CA installer](https://github.com/e2b-dev/infra/blob/main/packages/env
|
|
|
155
149
|
E2B's installed
|
|
156
150
|
SDK documents that transformed headers override request headers. Deterministic
|
|
157
151
|
request/redaction tests do not establish live wire behavior. The [2026-09-05
|
|
158
|
-
transport receipt](https://github.com/danielgwilson/humanish/blob/main/docs/
|
|
152
|
+
transport receipt](https://github.com/danielgwilson/humanish/blob/main/docs/evidence/terminal-product/2026-09-05-runtime-egress-auth.md)
|
|
159
153
|
records the controlled live header/auth checks and their scope.
|
|
160
154
|
|
|
161
155
|
## Runtime prerequisite
|
|
@@ -180,7 +174,7 @@ checks Node/npm in both ordinary and sudo shells after installation. The existin
|
|
|
180
174
|
runtime fast path preserves user-specific installations; a later sudo product
|
|
181
175
|
install can still fail if that installation is absent from sudo's PATH.
|
|
182
176
|
|
|
183
|
-
The [global executable receipt](https://github.com/danielgwilson/humanish/blob/main/docs/
|
|
177
|
+
The [global executable receipt](https://github.com/danielgwilson/humanish/blob/main/docs/evidence/terminal-product/2026-09-05-global-npm-prefix.md)
|
|
184
178
|
records the regression found after the initial runtime-only proof and its stock
|
|
185
179
|
desktop checks. npm documents [global executable locations](https://docs.npmjs.com/cli/v10/configuring-npm/folders#executables)
|
|
186
180
|
and the [distribution built-in configuration](https://docs.npmjs.com/cli/v10/configuring-npm/npmrc#built-in-config-file).
|
|
@@ -212,99 +206,65 @@ blast radius is bounded by key scoping and budgets, not by hoping._
|
|
|
212
206
|
|
|
213
207
|
The inversion is declared as registry metadata, not a code convention: the
|
|
214
208
|
terminal actor's capabilities carry `keyPlacement: "in-sandbox-command-scoped"`.
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
plaintext);
|
|
232
|
-
- the caps / deny-by-default policies / runtime-auth channel recorded as
|
|
233
|
-
declarations (names only; invariant 1);
|
|
234
|
-
- a terminal-kind stream that is an honest **contract placeholder**: stdin
|
|
235
|
-
disabled, empty tail, `transport: snapshot`, **not** `pty` (captured
|
|
236
|
-
non-interactive exec output is never an interactive PTY; invariant 6 + the
|
|
237
|
-
goal packet's PTY ruling). SLICE 2 later added redacted exec-stream capture;
|
|
238
|
-
- empty/placeholder ledgers (substrate lifecycle, command log, terminal event
|
|
239
|
-
stream, interventions, cost) that SLICE 2/3 later filled.
|
|
240
|
-
|
|
241
|
-
The dry-run bundle passed the existing `verifyRun`. Terminal-specific verifier
|
|
242
|
-
checks (terminal/transcript presence, lifecycle, cleanup, interventions,
|
|
243
|
-
metadata allowlist, no-credential-in-artifacts, no-spend) landed in SLICE 2/3.
|
|
244
|
-
|
|
245
|
-
At SLICE 1, a non-dry-run call returned a structured
|
|
246
|
-
`HUMANISH_TERMINAL_AGENT_NOT_IMPLEMENTED` failure before launch or spend.
|
|
247
|
-
SLICE 2 implemented the real session.
|
|
248
|
-
|
|
249
|
-
SLICE 1 declared the DI seams SLICE 2 needed (`loadModule`, `buildSandbox`,
|
|
250
|
-
`runtimeAuthEnv`, `detachedTimers`) on a terminal hook bag; only the dry-run path was
|
|
251
|
-
implemented in that slice. The bag is gone. The route reads `env` and `scorer` from its
|
|
252
|
-
options (`src/routes/terminal/types.ts`), and a test passes its seams (`desktopModule`,
|
|
253
|
-
`renderObserver`, `now`, `costProbe`) as `LabDeps` (`src/lab/lab-deps.ts`).
|
|
254
|
-
|
|
255
|
-
## SLICE 4: the product-adapter extension seam (layer 6)
|
|
256
|
-
|
|
257
|
-
This route is proof-roadmap **layer 6**: an adopter attaches product-specific
|
|
258
|
-
scoring + feedback as a THIN in-repo extension WITHOUT forking core. SLICE 4
|
|
259
|
-
ships the SEAM. Core ships no built-in product scorer; the adopter's scorecard
|
|
260
|
-
lives in the adopter's repo:
|
|
209
|
+
The route keys off that capability and injects the key only into the per-command
|
|
210
|
+
`envs` of the `codex` invocation, never `Sandbox.create({envs})`. The route also
|
|
211
|
+
has a deny-by-default credential allowlist, positive-allowlist sandbox metadata,
|
|
212
|
+
the cleanup proof, the interventions ledger and a minimal fail-closed cap.
|
|
213
|
+
|
|
214
|
+
## Test seams
|
|
215
|
+
|
|
216
|
+
The route reads `env` and `scorer` from its options (`src/routes/terminal/types.ts`), and a test
|
|
217
|
+
passes its seams (`desktopModule`, `renderObserver`, `now`, `costProbe`) as `LabDeps`
|
|
218
|
+
(`src/lab/lab-deps.ts`).
|
|
219
|
+
|
|
220
|
+
## The product-adapter extension seam
|
|
221
|
+
|
|
222
|
+
An adopter attaches product-specific scoring and feedback as a thin in-repo extension, without
|
|
223
|
+
forking core. Core ships the seam and no built-in product scorer; the adopter's scorecard lives in
|
|
224
|
+
the adopter's repo:
|
|
261
225
|
|
|
262
226
|
- **Exported contract types** a thin adapter types against from the package barrel
|
|
263
227
|
(`humanish`) alone, never through a deep `src/` import: `RunBundle`,
|
|
264
228
|
`RunFeedbackCandidate`, `RunAdapterScore`, `RunAdapterArtifact`, `ActorTrace`,
|
|
265
229
|
`AdapterScorerModule` and `TerminalProductScoringContext`. The ledger, cost and
|
|
266
230
|
no-spend shapes are reached through that context's fields, as
|
|
267
|
-
`TerminalProductScoringContext["ledgers"]`.
|
|
268
|
-
|
|
269
|
-
the gap issue #154 acceptance #8 names.
|
|
270
|
-
- **A registrable scorer / feedback module**, `RunLabOptions.scorer` (an
|
|
231
|
+
`TerminalProductScoringContext["ledgers"]`.
|
|
232
|
+
- **A registrable scorer / feedback module**, `RunStudyOptions.scorer` (an
|
|
271
233
|
`AdapterScorerModule`): `score?(ctx) => RunAdapterScore | Promise<…>` and
|
|
272
234
|
`deriveFeedback?(ctx) => RunFeedbackCandidate[] | Promise<…>`, where this route's
|
|
273
235
|
`ctx` is a `TerminalProductScoringContext`. The older `terminalHooks.score` and
|
|
274
236
|
`terminalHooks.deriveFeedback` were removed with the bag. The route calls the
|
|
275
|
-
hooks over the
|
|
276
|
-
(`bundle.adapterScore`, appended `bundle.feedbackCandidates`)
|
|
237
|
+
hooks over the fully-assembled, redacted evidence and attaches the results
|
|
238
|
+
(`bundle.adapterScore`, appended `bundle.feedbackCandidates`) without core knowing
|
|
277
239
|
any product noun. Default (no hook) behavior is unchanged: the mission-based verdict
|
|
278
240
|
stands alone.
|
|
279
241
|
- **Adapter-namespaced product nouns.** Product-specific concepts (public
|
|
280
242
|
CLI/product command observed, hosted product success-or-blocker, feedback
|
|
281
243
|
id/draft, media/job/asset ids, no-media/no-provider-spend proof,
|
|
282
|
-
defection/friction risk) ride
|
|
244
|
+
defection/friction risk) ride only under a single namespaced field
|
|
283
245
|
(`RunFeedbackCandidate.adapter: { namespace, data }` and
|
|
284
246
|
`RunAdapterScore.{namespace, data}`) so core's enums stay product-agnostic and
|
|
285
247
|
a future inert-field audit never misfires. No adopter noun is hardcoded into a
|
|
286
248
|
core enum (avoiding closed-taxonomy rot); `e2b-terminal` is added to the
|
|
287
|
-
substrate enum so a terminal-agent candidate names
|
|
249
|
+
substrate enum so a terminal-agent candidate names the substrate it ran on.
|
|
288
250
|
|
|
289
|
-
The seam is fail-closed: the route scrubs+redacts the returned payloads and
|
|
251
|
+
The seam is fail-closed: the route scrubs+redacts the returned payloads and drops
|
|
290
252
|
any malformed score/candidate with a warning, and `verifyRun` re-checks the
|
|
291
253
|
surviving shapes, so a bad extension never poisons a verifiable bundle. Proven by
|
|
292
254
|
`tests/routes/terminal/product-adapter-seam.test.ts` (a thin in-repo example adapter
|
|
293
255
|
typing against the barrel only, registering a scorer, attaching namespaced nouns,
|
|
294
|
-
emitting a candidate; the bundle verifies).
|
|
295
|
-
|
|
296
|
-
note.
|
|
256
|
+
emitting a candidate; the bundle verifies). That test is a contract proof; the
|
|
257
|
+
live end-to-end route receipt is linked from the status note.
|
|
297
258
|
|
|
298
|
-
The adopter's real scorecard is its
|
|
299
|
-
live receipt is kept under the terminal-product goal
|
|
300
|
-
|
|
259
|
+
The adopter's real scorecard is its own thin extension. The end-to-end route's
|
|
260
|
+
live receipt is kept under the terminal-product goal. Duplex PTY replay is not
|
|
261
|
+
built.
|
|
301
262
|
|
|
302
263
|
## The reference adopter (codename-neutral)
|
|
303
264
|
|
|
304
|
-
The requesting adopter is a public creative-CLI product
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
(
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
issue, never in scanned committed text.
|
|
265
|
+
The requesting adopter is a public creative-CLI product. Committed source and docs here
|
|
266
|
+
stay codename-neutral per the public-surface scan; the committed CI fixture
|
|
267
|
+
([`humanish/studies/terminal-product-demo.yaml`](https://github.com/danielgwilson/humanish/blob/main/humanish/studies/terminal-product-demo.yaml))
|
|
268
|
+
uses a fictional mock CLI (`widgetsmith-cli`) with `example.com` surfaces. The adopter's
|
|
269
|
+
real public surfaces appear only in operator-run docs and a GitHub issue, never in
|
|
270
|
+
scanned committed text.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Contracts
|
|
2
|
+
|
|
3
|
+
Each page describes a shape that code outside humanish can depend on. A documented field is API;
|
|
4
|
+
the types, parsers and validators in `src/` are the source of truth when a page and the code
|
|
5
|
+
disagree.
|
|
6
|
+
|
|
7
|
+
- [schemas.md](schemas.md): every `humanish.*` schema id, the study manifest, the library options
|
|
8
|
+
(`RunStudyOptions`) and the exports removed in 0.107.0.
|
|
9
|
+
- [core.md](core.md): the records a run writes under `.humanish/runs/<id>/` and how each route
|
|
10
|
+
starts a run.
|
|
11
|
+
- [run-bundle.md](run-bundle.md): `humanish.run-bundle.v1`, the evidence contract that `verify`
|
|
12
|
+
checks.
|
|
13
|
+
- [policy.md](policy.md): credential, network, spend, redaction, sharing and assisted-run
|
|
14
|
+
boundaries.
|
|
15
|
+
- [feedback.md](feedback.md): feedback candidates, drafts and issue URLs, which never mutate
|
|
16
|
+
GitHub.
|
|
17
|
+
- [study-analysis.md](study-analysis.md): post-run analysis of retained participant evidence.
|
|
18
|
+
- [study-costs.md](study-costs.md): what `humanish stats` counts as spend.
|
|
19
|
+
- [errors.md](errors.md): the error code families, where each code appears, and the human
|
|
20
|
+
error shape on stderr.
|
|
21
|
+
- [adapter-admission.md](adapter-admission.md): the admission limit a custom provider can raise
|
|
22
|
+
before a request is sent.
|
|
23
|
+
- [adapter-fixtures.md](adapter-fixtures.md): the committed adapter fixtures and the parity checks
|
|
24
|
+
over them.
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
# Adapter admission limits
|
|
2
2
|
|
|
3
|
-
Library callers can throw `
|
|
3
|
+
Library callers can throw `ComputerUseAdmissionLimitError` from a custom `ComputerUseProvider`
|
|
4
4
|
or the `fetchFn` supplied to `createOpenAiResponsesProvider` when a configured
|
|
5
5
|
local control limit refuses a request **before provider dispatch**:
|
|
6
6
|
|
|
7
7
|
```ts
|
|
8
|
-
import {
|
|
8
|
+
import { ComputerUseAdmissionLimitError, createOpenAiResponsesProvider } from "humanish";
|
|
9
9
|
|
|
10
10
|
const provider = createOpenAiResponsesProvider({
|
|
11
11
|
apiKey,
|
|
12
12
|
fetchFn: async (url, init) => {
|
|
13
13
|
if (localLimitReached()) {
|
|
14
14
|
await recordLocalAdmissionRefusal();
|
|
15
|
-
throw new
|
|
15
|
+
throw new ComputerUseAdmissionLimitError();
|
|
16
16
|
}
|
|
17
17
|
return transport(url, init);
|
|
18
18
|
},
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
# Adapter Fixture Parity Contract
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Status: committed contract fixtures with passing parity checks. A fixture
|
|
6
|
-
proves that core can carry an adapter-owned evidence shape; it does not prove a
|
|
7
|
-
live adopter integration or satisfy a deletion-branch depth phase.
|
|
3
|
+
The committed fixtures pass their parity checks. A fixture proves that core can carry an
|
|
4
|
+
adapter-owned evidence shape; it does not prove a live adopter integration.
|
|
8
5
|
|
|
9
6
|
## Purpose
|
|
10
7
|
|
package/docs/contracts/core.md
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Core Contract
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Status: each route mints its run id and builds its bundle, and starts the run
|
|
3
|
+
Each route mints its run id and builds its bundle, and starts the run
|
|
6
4
|
through the run scope in `src/run/run.ts`. `startRun` creates
|
|
7
5
|
`.humanish/runs/<id>` and begins `status.json`; the `Run` it returns publishes
|
|
8
6
|
`run.json`, its projections and the latest pointer. `src/run/paths.ts` holds the
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Error codes
|
|
2
|
+
|
|
3
|
+
A failed command or library call reports a code and a message. The code is the stable part: a
|
|
4
|
+
rename or removal gets a CHANGELOG entry in the release that makes it. Messages may change in any
|
|
5
|
+
release.
|
|
6
|
+
|
|
7
|
+
## Where a code appears
|
|
8
|
+
|
|
9
|
+
- `--json`: the envelope has `ok: false` and `error: { code, message }`, and the command exits 2.
|
|
10
|
+
This output is the interface for scripts and agents. Two exceptions:
|
|
11
|
+
- A command-line usage error, such as an unknown option or a missing argument, prints
|
|
12
|
+
Commander's message on stderr, exits 1 and prints no JSON.
|
|
13
|
+
- `keys` and the `comms` connection commands report a failure as `ok: false` with a `message`
|
|
14
|
+
and no `error` field.
|
|
15
|
+
- Human mode: two or three lines on stderr.
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
humanish run failed: Study not found: nope. Look in humanish/studies/ or humanish/labs/, or pass a .yaml path.
|
|
19
|
+
code: HUMANISH_STUDY_NOT_FOUND
|
|
20
|
+
next: humanish study list
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
A result with no code (`keys`, `comms`) prints no `code:` line. The `next:` line comes from a
|
|
24
|
+
table in `src/cli/io.ts` keyed by code, which today holds `HUMANISH_STUDY_NOT_FOUND`. Other
|
|
25
|
+
codes get no `next:` line, though some messages name a command, as the run-not-found message
|
|
26
|
+
names `humanish runs`. Stdout keeps a result's other lines: a failed run
|
|
27
|
+
prints its run id, route and participants there, and a failed `verify` prints its failing
|
|
28
|
+
checks there, since they are its result. Before 0.108.0, human mode printed the code and message
|
|
29
|
+
on stdout.
|
|
30
|
+
|
|
31
|
+
- Library: the result objects `runStudy` and the analysis entry points return carry the same
|
|
32
|
+
`error.code`.
|
|
33
|
+
|
|
34
|
+
## Families
|
|
35
|
+
|
|
36
|
+
| Family | Codes | Emitted by | Appears in |
|
|
37
|
+
| ---------------------- | ----- | ------------------------------------------------------------------------ | ----------------------------------------------------------------------- |
|
|
38
|
+
| `HUMANISH_*` | 137 | every CLI command and route result | JSON `error.code`, library `error.code`, human `code:` line |
|
|
39
|
+
| `ANALYSIS_*` | 86 | `humanish analyze` and the analysis service (`src/analysis/`) | JSON `error.code` of analysis results |
|
|
40
|
+
| `AUTOMATIC_ANALYSIS_*` | 21 | the post-run analysis job | `automaticAnalysis.reason` on a run result and the job record |
|
|
41
|
+
| `analysis_*` lowercase | 29 | analysis execution | `error` fields in analysis artifacts and execution receipts |
|
|
42
|
+
| `codex_*` lowercase | 13 | the Codex CLI readiness check (`src/actors/codex/`, `src/lab/doctor.ts`) | doctor rows and analysis readiness, such as `codex_unsupported_version` |
|
|
43
|
+
|
|
44
|
+
Counts are the distinct quoted codes in `src/` on 2026-10-03.
|
|
45
|
+
|
|
46
|
+
The lowercase families are values recorded inside artifacts and receipts, and an artifact keeps
|
|
47
|
+
the code it was written with. Automatic analysis reads two of them back:
|
|
48
|
+
`analysis_admission_estimate_exceeded` becomes the reason `AUTOMATIC_ANALYSIS_ADMISSION_EXCEEDED`,
|
|
49
|
+
and `analysis_budget_exceeded` on a default analysis prints the hint to rerun with
|
|
50
|
+
`humanish analyze --max-cost`. Validation also accepts a partial artifact whose error is
|
|
51
|
+
`analysis_admission_estimate_exceeded`.
|
|
52
|
+
|
|
53
|
+
Share-safety reasons in `humanish verify` (`VERIFY_FAILED`, `RAW_SCREENSHOTS` and the rest) are
|
|
54
|
+
grades, not errors; [run-bundle.md](run-bundle.md) lists them.
|
|
55
|
+
|
|
56
|
+
## Renames
|
|
57
|
+
|
|
58
|
+
0.108.0 renamed the codes that said lab: `HUMANISH_LAB_*` is `HUMANISH_STUDY_*`,
|
|
59
|
+
`HUMANISH_CUA_LAB_*` is `HUMANISH_COMPUTER_USE_*`, `HUMANISH_CONCURRENT_SHARED_WORLD_LAB_*` is
|
|
60
|
+
`HUMANISH_SHARED_WORLD_*`, and the terminal and scripted families drop `_LAB`. It also renamed
|
|
61
|
+
`HUMANISH_INVALID_SIM_COUNT` to `HUMANISH_INVALID_PARTICIPANT_COUNT`. A run saved before a rename
|
|
62
|
+
keeps the codes it was written with.
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
# Feedback Contract
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Status: local feedback candidate, draft, verification, Markdown, and issue-URL
|
|
6
|
-
generation are shipped. These commands do not mutate GitHub, and public output
|
|
7
|
-
fails closed unless the run verifies as `share_ready`.
|
|
3
|
+
Feedback candidates, drafts, verification, Markdown and issue URLs ship. These commands never
|
|
4
|
+
mutate GitHub, and public output fails closed unless the run verifies as `share_ready`.
|
|
8
5
|
|
|
9
6
|
## Purpose
|
|
10
7
|
|
|
@@ -78,10 +75,12 @@ was not repeated in the message trace.
|
|
|
78
75
|
### `draft`
|
|
79
76
|
|
|
80
77
|
Builds structured feedback from the first usable run candidate, or the candidate
|
|
81
|
-
selected with `--candidate`. With no candidate, a
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
78
|
+
selected with `--candidate`. With no candidate, a live run produces a summary of
|
|
79
|
+
its recorded review; that fallback does not add a finding to the candidate list.
|
|
80
|
+
A dry run tests no product behavior, so `draft`, `verify`, `issue` and
|
|
81
|
+
`issue-url` refuse it with `HUMANISH_FEEDBACK_REQUIRES_LIVE_RUN`. All drafts
|
|
82
|
+
require a verified `share_ready` live run and are written under the run bundle,
|
|
83
|
+
not GitHub.
|
|
85
84
|
|
|
86
85
|
### `verify`
|
|
87
86
|
|
package/docs/contracts/policy.md
CHANGED
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
# Policy Contract
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
parser, route validation, and verifier determine whether a declared field is
|
|
8
|
-
consumed, rejected, or reported as a warning.
|
|
9
|
-
|
|
10
|
-
Safety amendment (2026-07-14): beginning with `0.15.1`, stored provider IDs are
|
|
11
|
-
evidence and never authorize core provider mutation.
|
|
3
|
+
This page is the policy reference for credential, network, spend, redaction, sharing and
|
|
4
|
+
assisted-run boundaries. Support is route-specific: the parser, route validation and the verifier
|
|
5
|
+
decide whether a declared field is consumed, rejected or reported as a warning. Stored provider
|
|
6
|
+
ids are evidence and never authorize core provider mutation.
|
|
12
7
|
|
|
13
8
|
## Purpose
|
|
14
9
|
|
|
@@ -112,7 +107,7 @@ Spend policy names when provider costs may be incurred.
|
|
|
112
107
|
| Mode | Meaning |
|
|
113
108
|
| ------------------------ | -------------------------------------------------------------------------------------------------- |
|
|
114
109
|
| `no_spend` | No provider calls that can bill. |
|
|
115
|
-
| `dry_run_only` | Only local
|
|
110
|
+
| `dry_run_only` | Only a local dry run; no live substrate. |
|
|
116
111
|
| `explicit_live_provider` | Provider calls allowed because required env var names are present and operator intent is explicit. |
|
|
117
112
|
| `maintainer_approved` | Reserved for publish, billing, or high-risk mutation workflows. |
|
|
118
113
|
|
|
@@ -126,7 +121,7 @@ providerClasses:
|
|
|
126
121
|
- model
|
|
127
122
|
- desktop_substrate
|
|
128
123
|
operatorIntent:
|
|
129
|
-
command: humanish
|
|
124
|
+
command: humanish run my-study --json --no-open
|
|
130
125
|
explicit: true
|
|
131
126
|
budget:
|
|
132
127
|
limit: unspecified
|
|
@@ -148,7 +143,7 @@ shapes, and fails closed on a match. It does **not** detect free-form PII/PHI
|
|
|
148
143
|
those depends on using synthetic data and on reviewer judgment. Accordingly,
|
|
149
144
|
`redaction: passed` means the automated secret/path scan found no matches, not a
|
|
150
145
|
certification that the artifact is free of every class in the policy below. A
|
|
151
|
-
first-class PII/PHI detector is planned
|
|
146
|
+
first-class PII/PHI detector is [planned](https://github.com/danielgwilson/humanish/issues/108) and would move the listed
|
|
152
147
|
PII classes from author-responsibility to enforced.
|
|
153
148
|
|
|
154
149
|
Required redaction gates:
|