humanish 0.106.1 → 0.108.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +38 -32
- package/CHANGELOG.md +28 -0
- package/CONTEXT.md +51 -41
- package/README.md +152 -174
- package/SECURITY.md +16 -26
- package/TELEMETRY.md +8 -6
- package/dist/actors/affordance.d.ts +4 -4
- package/dist/actors/affordance.js +12 -12
- package/dist/actors/agent-session.d.ts +2 -2
- package/dist/actors/agent-session.js +7 -7
- package/dist/actors/codex/app-server-actor-trace.d.ts +1 -1
- package/dist/actors/codex/app-server-actor-trace.js +1 -1
- package/dist/actors/codex/app-server-client.js +2 -1
- package/dist/actors/codex/app-server-trace.d.ts +0 -1
- package/dist/actors/codex/app-server-trace.js +1 -3
- package/dist/actors/codex/app-server-ui.js +1 -1
- package/dist/actors/codex/app-server.js +2 -1
- package/dist/actors/codex/codex-admission.d.ts +91 -0
- package/dist/actors/codex/codex-admission.js +150 -0
- package/dist/actors/codex/protocol-compat.d.ts +27 -0
- package/dist/actors/codex/protocol-compat.js +357 -0
- package/dist/actors/codex/protocol-contract.d.ts +61 -0
- package/dist/actors/codex/protocol-contract.js +471 -0
- package/dist/actors/codex/restricted-executable.d.ts +28 -4
- package/dist/actors/codex/restricted-executable.js +104 -29
- package/dist/actors/codex/restricted-launch.d.ts +9 -2
- package/dist/actors/codex/restricted-launch.js +43 -4
- package/dist/actors/codex/restricted-notifications.d.ts +101 -0
- package/dist/actors/codex/restricted-notifications.js +277 -0
- package/dist/actors/codex/restricted-participant.d.ts +30 -0
- package/dist/actors/codex/restricted-participant.js +66 -6
- package/dist/actors/codex/restricted-policy.d.ts +11 -3
- package/dist/actors/codex/restricted-policy.js +2 -2
- package/dist/actors/codex/restricted-session.d.ts +16 -3
- package/dist/actors/codex/restricted-session.js +60 -22
- package/dist/actors/codex/restricted-transport.d.ts +29 -0
- package/dist/actors/codex/restricted-transport.js +139 -27
- package/dist/actors/codex/restricted-turn.d.ts +19 -4
- package/dist/actors/codex/restricted-turn.js +43 -30
- package/dist/actors/computer-use/actor.d.ts +17 -17
- package/dist/actors/computer-use/actor.js +6 -6
- package/dist/actors/computer-use/admission-limit.d.ts +1 -1
- package/dist/actors/computer-use/admission-limit.js +1 -1
- package/dist/actors/computer-use/loop/actions.d.ts +3 -3
- package/dist/actors/computer-use/loop/actions.js +10 -10
- package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
- package/dist/actors/computer-use/loop/backstop.js +15 -13
- package/dist/actors/computer-use/loop/ending.d.ts +7 -7
- package/dist/actors/computer-use/loop/ending.js +9 -9
- package/dist/actors/computer-use/loop/observation.d.ts +2 -2
- package/dist/actors/computer-use/loop/observation.js +9 -9
- package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
- package/dist/actors/computer-use/loop/provider-call.js +1 -1
- package/dist/actors/computer-use/loop/session.js +3 -3
- package/dist/actors/computer-use/loop/spend.d.ts +2 -2
- package/dist/actors/computer-use/loop/spend.js +4 -4
- package/dist/actors/computer-use/loop/trace.js +11 -10
- package/dist/actors/computer-use/loop/types.d.ts +37 -26
- package/dist/actors/computer-use/loop/usage.js +2 -2
- package/dist/actors/computer-use/loop.js +4 -4
- package/dist/actors/computer-use/openai-context.d.ts +37 -0
- package/dist/actors/computer-use/openai-context.js +214 -0
- package/dist/actors/computer-use/openai-provider.d.ts +12 -9
- package/dist/actors/computer-use/openai-provider.js +47 -36
- package/dist/actors/computer-use/openai-requests.d.ts +36 -10
- package/dist/actors/computer-use/openai-requests.js +82 -15
- package/dist/actors/computer-use/openai-wire.d.ts +19 -7
- package/dist/actors/computer-use/openai-wire.js +36 -34
- package/dist/actors/contract.d.ts +86 -49
- package/dist/actors/contract.js +29 -23
- package/dist/actors/local-agent/claude-session.d.ts +1 -1
- package/dist/actors/local-agent/claude-session.js +10 -9
- package/dist/actors/local-agent/cli.d.ts +8 -6
- package/dist/actors/local-agent/cli.js +24 -28
- package/dist/actors/local-agent/readiness.d.ts +2 -2
- package/dist/actors/local-agent/readiness.js +4 -4
- package/dist/actors/reasoning-effort.js +6 -6
- package/dist/actors/registry.d.ts +10 -10
- package/dist/actors/registry.js +18 -17
- package/dist/actors/scripted-browser/actor.d.ts +8 -8
- package/dist/actors/scripted-browser/actor.js +16 -16
- package/dist/actors/scripted-browser/browser-command.js +1 -1
- package/dist/actors/scripted-browser/journey.js +15 -4
- package/dist/actors/scripted-browser/steps.js +19 -1
- package/dist/actors/scripted-browser/types.d.ts +12 -2
- package/dist/actors/stop-conditions.d.ts +1 -1
- package/dist/actors/stop-conditions.js +1 -3
- package/dist/analysis/automatic-completion.d.ts +13 -8
- package/dist/analysis/automatic-completion.js +14 -8
- package/dist/analysis/automatic-config.d.ts +1 -1
- package/dist/analysis/automatic-config.js +2 -2
- package/dist/analysis/automatic.d.ts +10 -4
- package/dist/analysis/automatic.js +17 -13
- package/dist/analysis/codex-config.d.ts +6 -2
- package/dist/analysis/codex-config.js +22 -14
- package/dist/analysis/diagnostics.d.ts +23 -0
- package/dist/analysis/diagnostics.js +112 -0
- package/dist/analysis/evidence-sources.js +2 -2
- package/dist/analysis/evidence.js +6 -6
- package/dist/analysis/execute.d.ts +7 -1
- package/dist/analysis/execute.js +39 -12
- package/dist/analysis/job.d.ts +8 -5
- package/dist/analysis/job.js +15 -14
- package/dist/analysis/load.d.ts +1 -1
- package/dist/analysis/load.js +5 -5
- package/dist/analysis/provider.d.ts +9 -1
- package/dist/analysis/restricted-codex.d.ts +2 -0
- package/dist/analysis/restricted-codex.js +10 -1
- package/dist/analysis/service.d.ts +2 -0
- package/dist/analysis/service.js +35 -16
- package/dist/analysis/sharing.d.ts +2 -2
- package/dist/analysis/sharing.js +5 -5
- package/dist/analysis/store-executions.d.ts +5 -5
- package/dist/analysis/store-executions.js +12 -12
- package/dist/analysis/store.d.ts +4 -4
- package/dist/analysis/store.js +13 -13
- package/dist/cli/commands/analysis-signals.d.ts +2 -1
- package/dist/cli/commands/analysis-signals.js +4 -1
- package/dist/cli/commands/analyze.js +23 -18
- package/dist/cli/commands/codex.js +9 -9
- package/dist/cli/commands/comms.js +62 -34
- package/dist/cli/commands/feedback.js +20 -21
- package/dist/cli/commands/lab-format.d.ts +5 -4
- package/dist/cli/commands/lab-format.js +35 -23
- package/dist/cli/commands/lab-route-computer-use.d.ts +0 -2
- package/dist/cli/commands/lab-route-computer-use.js +32 -21
- package/dist/cli/commands/lab-route-preview.d.ts +1 -3
- package/dist/cli/commands/lab-route-preview.js +7 -7
- package/dist/cli/commands/lab-route-run.d.ts +6 -4
- package/dist/cli/commands/lab-route-run.js +6 -2
- package/dist/cli/commands/lab-route-scripted.d.ts +0 -2
- package/dist/cli/commands/lab-route-scripted.js +0 -1
- package/dist/cli/commands/lab-route-shared-world.d.ts +0 -2
- package/dist/cli/commands/lab-route-shared-world.js +3 -4
- package/dist/cli/commands/lab-route-terminal.d.ts +0 -2
- package/dist/cli/commands/lab-route-terminal.js +0 -1
- package/dist/cli/commands/lab-run.js +84 -54
- package/dist/cli/commands/lab-scorer.d.ts +2 -4
- package/dist/cli/commands/lab-scorer.js +1 -1
- package/dist/cli/commands/migrate.d.ts +4 -0
- package/dist/cli/commands/migrate.js +65 -0
- package/dist/cli/commands/observe.js +168 -107
- package/dist/cli/commands/run-command.d.ts +10 -0
- package/dist/cli/commands/run-command.js +85 -0
- package/dist/cli/commands/run-signals.d.ts +30 -0
- package/dist/cli/commands/run-signals.js +146 -0
- package/dist/cli/commands/runs.js +137 -136
- package/dist/cli/commands/setup.d.ts +2 -2
- package/dist/cli/commands/setup.js +26 -21
- package/dist/cli/commands/study.d.ts +3 -0
- package/dist/cli/commands/study.js +182 -0
- package/dist/cli/commands/tui.d.ts +4 -4
- package/dist/cli/commands/tui.js +21 -21
- package/dist/cli/commands/watch.js +64 -77
- package/dist/cli/deprecations.d.ts +18 -0
- package/dist/cli/deprecations.js +48 -0
- package/dist/cli/doctor.d.ts +18 -5
- package/dist/cli/doctor.js +111 -48
- package/dist/cli/first-run-path.d.ts +12 -10
- package/dist/cli/first-run-path.js +30 -28
- package/dist/cli/io.d.ts +46 -10
- package/dist/cli/io.js +109 -30
- package/dist/cli/observer-follow.d.ts +2 -2
- package/dist/cli/observer-follow.js +5 -6
- package/dist/cli/orientation.d.ts +6 -3
- package/dist/cli/orientation.js +43 -39
- package/dist/cli/product-sentence.d.ts +6 -0
- package/dist/cli/product-sentence.js +6 -0
- package/dist/cli/program.d.ts +6 -1
- package/dist/cli/program.js +112 -43
- package/dist/cli/telemetry.d.ts +17 -17
- package/dist/cli/telemetry.js +49 -41
- package/dist/cli.js +1 -1
- package/dist/comms/capture-surface.d.ts +14 -13
- package/dist/comms/capture-surface.js +23 -22
- package/dist/comms/catch-host.d.ts +8 -8
- package/dist/comms/catch-host.js +14 -14
- package/dist/comms/connections.js +4 -4
- package/dist/comms/email-catch.d.ts +3 -3
- package/dist/comms/email-catch.js +8 -8
- package/dist/comms/external-evidence.d.ts +27 -0
- package/dist/comms/external-evidence.js +93 -0
- package/dist/comms/extract.js +2 -2
- package/dist/comms/fake-inbox.d.ts +2 -2
- package/dist/comms/fake-inbox.js +2 -2
- package/dist/comms/lease-store.js +7 -7
- package/dist/comms/receiving-render.d.ts +1 -1
- package/dist/comms/receiving-render.js +2 -2
- package/dist/comms/sandbox-catch-script.d.ts +6 -6
- package/dist/comms/sandbox-catch-script.js +6 -6
- package/dist/comms/sandbox-catch.d.ts +36 -37
- package/dist/comms/sandbox-catch.js +34 -35
- package/dist/comms/setup.js +42 -8
- package/dist/comms/thread-evidence.d.ts +1 -1
- package/dist/comms/thread-evidence.js +6 -6
- package/dist/comms/types.d.ts +6 -6
- package/dist/comms/types.js +4 -4
- package/dist/evidence/browser-hygiene.d.ts +1 -1
- package/dist/evidence/browser-hygiene.js +1 -1
- package/dist/evidence/frame-signature.d.ts +1 -1
- package/dist/evidence/frame-signature.js +4 -4
- package/dist/evidence/redaction.d.ts +3 -3
- package/dist/evidence/redaction.js +5 -5
- package/dist/evidence/secret-scrub.d.ts +9 -0
- package/dist/evidence/secret-scrub.js +96 -0
- package/dist/feedback/draft.js +41 -85
- package/dist/feedback/export-bundle.js +5 -5
- package/dist/feedback/export.d.ts +5 -1
- package/dist/feedback/export.js +16 -17
- package/dist/feedback/feedback.d.ts +3 -3
- package/dist/feedback/feedback.js +21 -3
- package/dist/guest/chromium-text.js +2 -2
- package/dist/guest/desktop-native.d.ts +1 -1
- package/dist/guest/runtime.js +1 -1
- package/dist/index.d.ts +14 -15
- package/dist/index.js +10 -11
- package/dist/keys/key-resolution.d.ts +7 -5
- package/dist/keys/key-resolution.js +40 -38
- package/dist/lab/adapter-extension.d.ts +35 -13
- package/dist/lab/adapter-extension.js +50 -134
- package/dist/lab/adapter-scorer-loader.d.ts +32 -12
- package/dist/lab/adapter-scorer-loader.js +56 -32
- package/dist/lab/composition-rules.js +58 -58
- package/dist/lab/config.js +85 -43
- package/dist/lab/deprecated-fields.d.ts +10 -0
- package/dist/lab/deprecated-fields.js +24 -0
- package/dist/lab/device-presets.d.ts +10 -10
- package/dist/lab/device-presets.js +11 -11
- package/dist/lab/discover.d.ts +13 -9
- package/dist/lab/discover.js +118 -60
- package/dist/lab/doctor.d.ts +53 -11
- package/dist/lab/doctor.js +193 -47
- package/dist/lab/init-plan.js +1 -3
- package/dist/lab/init-templates.js +147 -147
- package/dist/lab/init.d.ts +1 -1
- package/dist/lab/init.js +41 -9
- package/dist/lab/keys.d.ts +2 -0
- package/dist/lab/keys.js +43 -9
- package/dist/lab/lab-deps.d.ts +80 -0
- package/dist/lab/lab-deps.js +4 -0
- package/dist/lab/parse/actors.js +17 -16
- package/dist/lab/parse/comms.js +8 -7
- package/dist/lab/parse/execution.js +15 -14
- package/dist/lab/parse/study-v3.d.ts +23 -0
- package/dist/lab/parse/study-v3.js +259 -0
- package/dist/lab/parse/subject-state.d.ts +7 -7
- package/dist/lab/parse/subject-state.js +18 -17
- package/dist/lab/parse/subject.js +30 -29
- package/dist/lab/parse/values.d.ts +1 -2
- package/dist/lab/parse/values.js +3 -6
- package/dist/lab/persona-resolve.d.ts +7 -7
- package/dist/lab/persona-resolve.js +8 -8
- package/dist/lab/persona.js +1 -3
- package/dist/lab/plan-base.d.ts +0 -2
- package/dist/lab/plan-base.js +6 -4
- package/dist/lab/plan-participants.d.ts +7 -7
- package/dist/lab/plan-participants.js +2 -2
- package/dist/lab/plan-types.d.ts +26 -8
- package/dist/lab/plan.d.ts +4 -18
- package/dist/lab/plan.js +24 -79
- package/dist/lab/preflight-probes.js +11 -11
- package/dist/lab/preflight-result.d.ts +2 -1
- package/dist/lab/preflight-result.js +5 -6
- package/dist/lab/preflight.d.ts +7 -8
- package/dist/lab/preflight.js +6 -6
- package/dist/lab/requirements.d.ts +20 -0
- package/dist/lab/requirements.js +54 -0
- package/dist/lab/route-inputs.d.ts +23 -12
- package/dist/lab/route-inputs.js +48 -51
- package/dist/lab/routing.d.ts +42 -41
- package/dist/lab/routing.js +66 -68
- package/dist/lab/run-lab-events.d.ts +3 -11
- package/dist/lab/run-lab-events.js +2 -16
- package/dist/lab/run-lab-homes.d.ts +76 -0
- package/dist/lab/run-lab-homes.js +7 -0
- package/dist/lab/run-lab-options.d.ts +12 -66
- package/dist/lab/run-lab-options.js +58 -285
- package/dist/lab/summary.d.ts +15 -9
- package/dist/lab/summary.js +24 -17
- package/dist/lab/tasks.d.ts +15 -15
- package/dist/lab/tasks.js +14 -14
- package/dist/lab/types.d.ts +201 -195
- package/dist/lab/types.js +2 -0
- package/dist/lab/validation.d.ts +21 -21
- package/dist/lab/validation.js +61 -59
- package/dist/lab/warnings.d.ts +10 -0
- package/dist/lab/warnings.js +70 -41
- package/dist/library-aliases.d.ts +56 -0
- package/dist/library-aliases.js +22 -0
- package/dist/observer/artifact.d.ts +2 -2
- package/dist/observer/artifact.js +9 -9
- package/dist/observer/data.d.ts +6 -6
- package/dist/observer/data.js +7 -6
- package/dist/observer/exposure.d.ts +1 -1
- package/dist/observer/exposure.js +11 -11
- package/dist/observer/http.js +1 -1
- package/dist/observer/library.d.ts +1 -1
- package/dist/observer/library.js +4 -2
- package/dist/observer/listen.js +5 -4
- package/dist/observer/render.d.ts +1 -1
- package/dist/observer/render.js +12 -7
- package/dist/observer/run-routes.d.ts +4 -4
- package/dist/observer/run-routes.js +6 -6
- package/dist/observer/serve.d.ts +17 -0
- package/dist/observer/serve.js +41 -6
- package/dist/observer/tunnel.js +1 -1
- package/dist/observer-app.html +4 -4
- package/dist/routes/computer-use/bundle-parts.d.ts +9 -9
- package/dist/routes/computer-use/bundle-parts.js +24 -17
- package/dist/routes/computer-use/bundle.d.ts +4 -11
- package/dist/routes/computer-use/bundle.js +12 -18
- package/dist/routes/computer-use/diagnostics.d.ts +1 -1
- package/dist/routes/computer-use/diagnostics.js +1 -1
- package/dist/routes/computer-use/e2b-desktop/comms.d.ts +11 -11
- package/dist/routes/computer-use/e2b-desktop/comms.js +24 -27
- package/dist/routes/computer-use/e2b-desktop/desktop.d.ts +2 -2
- package/dist/routes/computer-use/e2b-desktop/desktop.js +8 -11
- package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +16 -15
- package/dist/routes/computer-use/e2b-desktop/fidelity.js +20 -19
- package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +3 -3
- package/dist/routes/computer-use/e2b-desktop/prepare.js +40 -43
- package/dist/routes/computer-use/e2b-desktop/start.d.ts +1 -1
- package/dist/routes/computer-use/e2b-desktop/start.js +32 -30
- package/dist/routes/computer-use/e2b-desktop/state.d.ts +5 -4
- package/dist/routes/computer-use/e2b-desktop/state.js +5 -3
- package/dist/routes/computer-use/e2b-desktop/teardown.d.ts +1 -1
- package/dist/routes/computer-use/e2b-desktop/teardown.js +33 -20
- package/dist/routes/computer-use/external-comms.d.ts +4 -4
- package/dist/routes/computer-use/external-comms.js +19 -43
- package/dist/routes/computer-use/fanout-bundle.d.ts +3 -3
- package/dist/routes/computer-use/fanout-bundle.js +38 -42
- package/dist/routes/computer-use/{fanout-lanes.js → fanout-records.js} +33 -28
- package/dist/routes/computer-use/in-process-desktop.d.ts +3 -10
- package/dist/routes/computer-use/in-process-desktop.js +3 -9
- package/dist/routes/computer-use/live-flush.d.ts +7 -5
- package/dist/routes/computer-use/live-flush.js +20 -28
- package/dist/routes/computer-use/{run-lanes.d.ts → live-phase.d.ts} +4 -2
- package/dist/routes/computer-use/{run-lanes.js → live-phase.js} +17 -16
- package/dist/routes/computer-use/local-tree-pack.d.ts +3 -3
- package/dist/routes/computer-use/local-tree-pack.js +4 -5
- package/dist/routes/computer-use/local-vm.d.ts +11 -8
- package/dist/routes/computer-use/local-vm.js +40 -67
- package/dist/routes/computer-use/participant-desktop.d.ts +8 -23
- package/dist/routes/computer-use/participant-desktop.js +5 -25
- package/dist/routes/computer-use/{lanes.d.ts → participant-execution.d.ts} +11 -11
- package/dist/routes/computer-use/{lanes.js → participant-execution.js} +39 -26
- package/dist/routes/computer-use/participant-facts.d.ts +7 -1
- package/dist/routes/computer-use/participant-facts.js +12 -1
- package/dist/routes/computer-use/participant-model.d.ts +25 -11
- package/dist/routes/computer-use/participant-model.js +76 -34
- package/dist/routes/computer-use/participant-prompt.d.ts +13 -13
- package/dist/routes/computer-use/participant-prompt.js +8 -8
- package/dist/routes/computer-use/participant-runs.d.ts +11 -11
- package/dist/routes/computer-use/participant-runs.js +18 -18
- package/dist/routes/computer-use/plan.d.ts +21 -29
- package/dist/routes/computer-use/plan.js +70 -78
- package/dist/routes/computer-use/preflight.d.ts +3 -5
- package/dist/routes/computer-use/preflight.js +40 -36
- package/dist/routes/computer-use/rerun-selection.js +11 -7
- package/dist/routes/computer-use/result.d.ts +1 -1
- package/dist/routes/computer-use/result.js +48 -38
- package/dist/routes/computer-use/route.d.ts +5 -5
- package/dist/routes/computer-use/route.js +36 -33
- package/dist/routes/computer-use/self-report.d.ts +8 -8
- package/dist/routes/computer-use/self-report.js +33 -33
- package/dist/routes/computer-use/setup.d.ts +9 -15
- package/dist/routes/computer-use/setup.js +106 -83
- package/dist/routes/computer-use/single-bundle.d.ts +13 -16
- package/dist/routes/computer-use/single-bundle.js +46 -53
- package/dist/routes/computer-use/subject-projection.d.ts +6 -8
- package/dist/routes/computer-use/subject-projection.js +24 -23
- package/dist/routes/computer-use/types.d.ts +195 -238
- package/dist/routes/computer-use/types.js +21 -13
- package/dist/routes/preview.d.ts +8 -2
- package/dist/routes/preview.js +8 -5
- package/dist/routes/scripted/bundle.d.ts +5 -8
- package/dist/routes/scripted/bundle.js +23 -27
- package/dist/routes/scripted/plan.d.ts +6 -8
- package/dist/routes/scripted/plan.js +15 -13
- package/dist/routes/scripted/result.d.ts +4 -1
- package/dist/routes/scripted/result.js +15 -11
- package/dist/routes/scripted/route.js +15 -17
- package/dist/routes/scripted/scenario.d.ts +1 -1
- package/dist/routes/scripted/scenario.js +3 -3
- package/dist/routes/scripted/setup.d.ts +3 -2
- package/dist/routes/scripted/setup.js +27 -26
- package/dist/routes/scripted/subject.d.ts +8 -3
- package/dist/routes/scripted/subject.js +10 -6
- package/dist/routes/scripted/surface-records.js +4 -4
- package/dist/routes/scripted/surface-sessions.d.ts +2 -2
- package/dist/routes/scripted/surface-sessions.js +4 -4
- package/dist/routes/scripted/types.d.ts +21 -40
- package/dist/routes/scripted/types.js +2 -3
- package/dist/routes/shared-world/{seat-records.js → bundle-records.js} +17 -16
- package/dist/routes/shared-world/bundle.d.ts +7 -7
- package/dist/routes/shared-world/bundle.js +60 -62
- package/dist/routes/shared-world/checkpoints.d.ts +5 -5
- package/dist/routes/shared-world/checkpoints.js +5 -5
- package/dist/routes/shared-world/comms.d.ts +8 -7
- package/dist/routes/shared-world/comms.js +38 -51
- package/dist/routes/shared-world/external-public.d.ts +6 -5
- package/dist/routes/shared-world/external-public.js +28 -25
- package/dist/routes/shared-world/handoff.d.ts +10 -9
- package/dist/routes/shared-world/handoff.js +89 -81
- package/dist/routes/shared-world/lobby-code.d.ts +7 -7
- package/dist/routes/shared-world/lobby-code.js +22 -22
- package/dist/routes/shared-world/{seats.d.ts → participant-specs.d.ts} +15 -12
- package/dist/routes/shared-world/{seats.js → participant-specs.js} +65 -63
- package/dist/routes/shared-world/plan.d.ts +2 -6
- package/dist/routes/shared-world/plan.js +8 -9
- package/dist/routes/shared-world/provenance.d.ts +4 -4
- package/dist/routes/shared-world/provenance.js +4 -4
- package/dist/routes/shared-world/provisioned.d.ts +3 -2
- package/dist/routes/shared-world/provisioned.js +55 -48
- package/dist/routes/shared-world/result.js +47 -36
- package/dist/routes/shared-world/route.js +54 -57
- package/dist/routes/shared-world/setup.d.ts +6 -5
- package/dist/routes/shared-world/setup.js +16 -18
- package/dist/routes/shared-world/types.d.ts +70 -141
- package/dist/routes/shared-world/types.js +5 -5
- package/dist/routes/terminal/adapter.d.ts +10 -10
- package/dist/routes/terminal/adapter.js +32 -129
- package/dist/routes/terminal/bundle.d.ts +10 -15
- package/dist/routes/terminal/bundle.js +43 -52
- package/dist/routes/terminal/credentials.d.ts +4 -4
- package/dist/routes/terminal/credentials.js +20 -20
- package/dist/routes/terminal/dry-run.d.ts +1 -1
- package/dist/routes/terminal/dry-run.js +13 -15
- package/dist/routes/terminal/encoding.d.ts +1 -1
- package/dist/routes/terminal/encoding.js +4 -4
- package/dist/routes/terminal/ledger.d.ts +8 -8
- package/dist/routes/terminal/ledger.js +22 -22
- package/dist/routes/terminal/live-finish.d.ts +1 -2
- package/dist/routes/terminal/live-finish.js +24 -23
- package/dist/routes/terminal/live-sandbox.d.ts +3 -2
- package/dist/routes/terminal/live-sandbox.js +31 -32
- package/dist/routes/terminal/participant-text.d.ts +23 -0
- package/dist/routes/terminal/participant-text.js +165 -0
- package/dist/routes/terminal/persona.js +1 -1
- package/dist/routes/terminal/plan.d.ts +2 -6
- package/dist/routes/terminal/plan.js +23 -19
- package/dist/routes/terminal/recorder.d.ts +6 -1
- package/dist/routes/terminal/recorder.js +12 -4
- package/dist/routes/terminal/result.js +12 -12
- package/dist/routes/terminal/route.js +30 -31
- package/dist/routes/terminal/runtime.d.ts +3 -2
- package/dist/routes/terminal/runtime.js +3 -3
- package/dist/routes/terminal/sandbox.d.ts +4 -4
- package/dist/routes/terminal/sandbox.js +10 -10
- package/dist/routes/terminal/session.js +22 -19
- package/dist/routes/terminal/token-usage.d.ts +1 -1
- package/dist/routes/terminal/token-usage.js +10 -11
- package/dist/routes/terminal/trace.d.ts +7 -10
- package/dist/routes/terminal/trace.js +11 -66
- package/dist/routes/terminal/types.d.ts +104 -114
- package/dist/routes/terminal/types.js +12 -7
- package/dist/run/active-runs.d.ts +13 -0
- package/dist/run/active-runs.js +12 -0
- package/dist/run/bundle-shape.d.ts +2 -1
- package/dist/run/bundle-shape.js +7 -7
- package/dist/run/bundle.d.ts +99 -92
- package/dist/run/bundle.js +10 -8
- package/dist/run/cost-summary.js +6 -5
- package/dist/run/costs.d.ts +6 -6
- package/dist/run/costs.js +17 -11
- package/dist/run/detail.d.ts +9 -9
- package/dist/run/detail.js +10 -10
- package/dist/run/dry-run-inputs.js +1 -1
- package/dist/run/dry-run.js +23 -30
- package/dist/run/{study-files.d.ts → evidence-files.d.ts} +4 -4
- package/dist/run/{study-files.js → evidence-files.js} +5 -5
- package/dist/run/feedback-shape.js +1 -1
- package/dist/run/judge.d.ts +34 -16
- package/dist/run/judge.js +41 -14
- package/dist/run/locate.d.ts +2 -0
- package/dist/run/locate.js +3 -1
- package/dist/run/outcomes.d.ts +3 -3
- package/dist/run/outcomes.js +3 -3
- package/dist/run/participant-records.d.ts +2 -2
- package/dist/run/participant-records.js +2 -2
- package/dist/run/paths.d.ts +1 -1
- package/dist/run/paths.js +2 -2
- package/dist/run/pricing.d.ts +30 -15
- package/dist/run/pricing.js +49 -30
- package/dist/run/projection.d.ts +27 -27
- package/dist/run/projection.js +23 -23
- package/dist/run/reclaim.d.ts +6 -0
- package/dist/run/reclaim.js +15 -5
- package/dist/run/results.d.ts +5 -5
- package/dist/run/run-index.d.ts +9 -7
- package/dist/run/run-index.js +24 -25
- package/dist/run/run-not-found.d.ts +5 -0
- package/dist/run/run-not-found.js +15 -0
- package/dist/run/run.d.ts +7 -4
- package/dist/run/run.js +10 -6
- package/dist/run/sandbox-receipts.d.ts +5 -5
- package/dist/run/sandbox-receipts.js +6 -6
- package/dist/run/shared-world-evidence.d.ts +67 -66
- package/dist/run/shared-world-evidence.js +4 -4
- package/dist/run/shared-world-shape.d.ts +3 -3
- package/dist/run/shared-world-shape.js +16 -16
- package/dist/run/stats.d.ts +17 -11
- package/dist/run/stats.js +124 -66
- package/dist/run/status.d.ts +21 -32
- package/dist/run/status.js +34 -33
- package/dist/run/stored-runs.js +2 -1
- package/dist/run/stream-shape.js +1 -1
- package/dist/run/streams.d.ts +29 -22
- package/dist/run/study-provenance.d.ts +47 -0
- package/dist/run/study-provenance.js +63 -0
- package/dist/run/study-result.d.ts +16 -0
- package/dist/run/study-result.js +9 -0
- package/dist/run/terminal-contract.d.ts +5 -5
- package/dist/run/terminal-contract.js +4 -4
- package/dist/run/text.d.ts +2 -0
- package/dist/run/text.js +4 -0
- package/dist/run/transient-comms-secrets.d.ts +5 -0
- package/dist/run/transient-comms-secrets.js +12 -0
- package/dist/run-lab.d.ts +40 -38
- package/dist/run-lab.js +42 -40
- package/dist/study/convert.d.ts +33 -0
- package/dist/study/convert.js +432 -0
- package/dist/study/field-paths.d.ts +12 -0
- package/dist/study/field-paths.js +126 -0
- package/dist/study/files.d.ts +26 -0
- package/dist/study/files.js +43 -0
- package/dist/study/migrate.d.ts +48 -0
- package/dist/study/migrate.js +408 -0
- package/dist/study/owned-files.d.ts +38 -0
- package/dist/study/owned-files.js +182 -0
- package/dist/subject/clone.d.ts +1 -1
- package/dist/subject/desktop-cli.d.ts +2 -2
- package/dist/subject/desktop-cli.js +3 -3
- package/dist/subject/local-tree-archive.d.ts +1 -1
- package/dist/subject/local-tree-archive.js +5 -5
- package/dist/subject/local-tree.d.ts +3 -3
- package/dist/subject/local-tree.js +1 -1
- package/dist/subject/node-bootstrap.d.ts +1 -1
- package/dist/subject/node-bootstrap.js +4 -4
- package/dist/subject/runtime.js +10 -11
- package/dist/subject/serve.d.ts +1 -1
- package/dist/subject/serve.js +4 -4
- package/dist/subject/state.d.ts +1 -1
- package/dist/subject/steps.d.ts +8 -8
- package/dist/subject/steps.js +7 -7
- package/dist/substrates/command-failure.d.ts +3 -3
- package/dist/substrates/command-failure.js +3 -3
- package/dist/substrates/detached.d.ts +6 -6
- package/dist/substrates/detached.js +7 -7
- package/dist/substrates/e2b/cdp-probe.d.ts +11 -11
- package/dist/substrates/e2b/cdp-probe.js +15 -18
- package/dist/substrates/e2b/desktop-browser.d.ts +5 -5
- package/dist/substrates/e2b/desktop-browser.js +12 -12
- package/dist/substrates/e2b/desktop-cdp.d.ts +15 -15
- package/dist/substrates/e2b/desktop-cdp.js +11 -11
- package/dist/substrates/e2b/desktop-executor.d.ts +1 -1
- package/dist/substrates/e2b/desktop-executor.js +1 -1
- package/dist/substrates/e2b/desktop-geometry.d.ts +6 -6
- package/dist/substrates/e2b/desktop-geometry.js +9 -9
- package/dist/substrates/e2b/desktop-media.d.ts +1 -1
- package/dist/substrates/e2b/desktop-media.js +3 -3
- package/dist/substrates/e2b/desktop-screenshot-cleanup.d.ts +3 -3
- package/dist/substrates/e2b/desktop-screenshot-cleanup.js +3 -3
- package/dist/substrates/e2b/sandbox.d.ts +1 -1
- package/dist/substrates/e2b/sandbox.js +2 -2
- package/dist/substrates/e2b/sdk.d.ts +11 -11
- package/dist/substrates/e2b/sdk.js +8 -8
- package/dist/substrates/local/runtime-host.d.ts +2 -0
- package/dist/substrates/local/runtime-host.js +6 -0
- package/dist/tui/actions.d.ts +8 -6
- package/dist/tui/actions.js +31 -22
- package/dist/tui/contract.d.ts +16 -16
- package/dist/tui/contract.js +10 -10
- package/dist/tui/launch.d.ts +4 -4
- package/dist/tui/launch.js +18 -19
- package/dist/tui/project.js +5 -5
- package/dist/tui-app.js +83 -83
- package/dist/verify/actor.d.ts +14 -14
- package/dist/verify/actor.js +45 -45
- package/dist/verify/artifacts.d.ts +3 -3
- package/dist/verify/artifacts.js +6 -6
- package/dist/verify/context-growth.d.ts +9 -0
- package/dist/verify/context-growth.js +62 -0
- package/dist/verify/costs.d.ts +7 -7
- package/dist/verify/costs.js +9 -9
- package/dist/verify/liveness.d.ts +1 -1
- package/dist/verify/liveness.js +4 -1
- package/dist/verify/rerun.d.ts +1 -1
- package/dist/verify/rerun.js +1 -1
- package/dist/verify/shared-world-concurrent.d.ts +2 -2
- package/dist/verify/shared-world-concurrent.js +79 -76
- package/dist/verify/shared-world.d.ts +2 -2
- package/dist/verify/shared-world.js +18 -18
- package/dist/verify/subject.d.ts +4 -4
- package/dist/verify/subject.js +18 -18
- package/dist/verify/verify.js +98 -49
- package/docs/README.md +26 -33
- package/docs/architecture/actor-contract.md +105 -98
- package/docs/architecture/desktop-sessions.md +14 -14
- package/docs/architecture/external-public-shared-world.md +66 -59
- package/docs/architecture/github-feedback-loop.md +1 -4
- package/docs/architecture/guest-desktop.md +2 -2
- package/docs/architecture/observer.md +37 -37
- package/docs/architecture/restricted-codex-analysis.md +70 -30
- package/docs/architecture/serve.md +34 -37
- package/docs/architecture/state-driven-executor.md +55 -59
- package/docs/architecture/task-protocol-support.md +7 -9
- package/docs/architecture/{terminal-product-lane.md → terminal-product-route.md} +83 -115
- package/docs/contracts/README.md +24 -0
- package/docs/contracts/adapter-admission.md +3 -3
- package/docs/contracts/adapter-fixtures.md +2 -5
- package/docs/contracts/core.md +1 -3
- package/docs/contracts/errors.md +62 -0
- package/docs/contracts/feedback.md +8 -9
- package/docs/contracts/policy.md +7 -12
- package/docs/contracts/run-bundle.md +54 -51
- package/docs/contracts/schemas.md +505 -390
- package/docs/contracts/study-analysis.md +26 -2
- package/docs/contracts/study-costs.md +11 -7
- package/docs/decisions/0001-run-bundle-is-the-source-of-truth.md +1 -1
- package/docs/decisions/0002-observer-is-one-self-contained-file.md +2 -2
- package/docs/decisions/0003-contained-paths-and-cleanup-authority.md +3 -3
- package/docs/decisions/0004-participant-desktops-stay-in-the-route.md +2 -1
- package/docs/principles/actor-fidelity.md +4 -4
- package/docs/principles/engineering.md +3 -3
- package/docs/principles/invariants-and-defaults.md +38 -38
- package/docs/principles/self-driving-harness.md +1 -5
- package/docs/principles/three-roles.md +1 -1
- package/docs/product/automatic-analysis.md +8 -7
- package/examples/participant/README.md +5 -5
- package/examples/participant/run.mjs +11 -10
- package/examples/scorer/README.md +3 -3
- package/examples/scorer/run.mjs +11 -12
- package/package.json +16 -17
- package/skills/humanish/SKILL.md +63 -60
- package/skills/humanish/agents/openai.yaml +1 -1
- package/AGENTS.md +0 -99
- package/CONTRIBUTING.md +0 -148
- package/dist/actors/codex/qualified-versions.d.ts +0 -45
- package/dist/actors/codex/qualified-versions.js +0 -87
- package/dist/cli/commands/lab.d.ts +0 -3
- package/dist/cli/commands/lab.js +0 -193
- package/dist/deprecated.d.ts +0 -90
- package/dist/deprecated.js +0 -106
- package/dist/lab/bag-overrides.d.ts +0 -18
- package/dist/lab/bag-overrides.js +0 -121
- package/dist/observer/static.d.ts +0 -39
- package/dist/observer/static.js +0 -369
- package/dist/routes/computer-use/legacy-lane-spec.d.ts +0 -62
- package/dist/routes/computer-use/legacy-lane-spec.js +0 -39
- package/docs/architecture/comms-inbox.md +0 -122
- package/docs/architecture/desktop-recording.md +0 -80
- package/docs/architecture/local-browser-runtime.md +0 -178
- package/docs/architecture/observer-review.md +0 -144
- package/docs/architecture/participant-media.md +0 -90
- package/docs/architecture/project-layout.md +0 -62
- package/docs/architecture/real-email-receiving.md +0 -136
- package/docs/assets/humanish-drawdb-hero.png +0 -0
- package/docs/assets/humanish-observer-hero.png +0 -0
- package/docs/goals/current.md +0 -207
- package/docs/product/lobby-trivia-3player-external-public.md +0 -77
- package/docs/product/open-source-install-experience.md +0 -240
- package/docs/ramp/README.md +0 -294
- package/docs/release/open-source-readiness.md +0 -222
- package/docs/release/public-readiness-standard.md +0 -210
- package/docs/roadmap/world-class-open-source-v0.md +0 -311
- /package/dist/routes/computer-use/{fanout-lanes.d.ts → fanout-records.d.ts} +0 -0
- /package/dist/routes/shared-world/{seat-records.d.ts → bundle-records.d.ts} +0 -0
package/examples/scorer/run.mjs
CHANGED
|
@@ -5,27 +5,26 @@ import { tmpdir } from "node:os";
|
|
|
5
5
|
import { join } from "node:path";
|
|
6
6
|
import { fileURLToPath } from "node:url";
|
|
7
7
|
import { promisify } from "node:util";
|
|
8
|
-
import {
|
|
8
|
+
import { STUDY_SCHEMA, parseStudy, runStudy, verifyRun } from "humanish";
|
|
9
9
|
import { score } from "./scorer.mjs";
|
|
10
10
|
|
|
11
|
-
// One scorer module, attached two ways to a dry run of a computer-use
|
|
11
|
+
// One scorer module, attached two ways to a dry run of a computer-use study: as library hooks and
|
|
12
12
|
// through the CLI's --scorer flag. A dry run needs no keys, desktop or running app.
|
|
13
|
-
const
|
|
14
|
-
schema:
|
|
13
|
+
const study = {
|
|
14
|
+
schema: STUDY_SCHEMA,
|
|
15
15
|
id: "scorer-example",
|
|
16
16
|
title: "Score a dry run",
|
|
17
|
+
route: "computer-use",
|
|
17
18
|
subject: { source: "app-url", appUrl: "http://127.0.0.1:3000/" },
|
|
18
|
-
|
|
19
|
-
{ type: "openai-computer-use", persona: "pixel-pat", mission: "Find the pricing page." },
|
|
20
|
-
],
|
|
19
|
+
actor: { type: "openai-computer-use", persona: "pixel-pat", mission: "Find the pricing page." },
|
|
21
20
|
execution: { target: "e2b-desktop" },
|
|
22
21
|
review: { analysis: false },
|
|
23
22
|
};
|
|
24
23
|
|
|
25
24
|
// A throwaway project directory; both runs write their bundles under its .humanish/runs/.
|
|
26
25
|
const project = await mkdtemp(join(tmpdir(), "humanish-scorer-example-"));
|
|
27
|
-
// JSON is valid YAML, so the CLI reads the same
|
|
28
|
-
await writeFile(join(project, "
|
|
26
|
+
// JSON is valid YAML, so the CLI reads the same study file the library call uses.
|
|
27
|
+
await writeFile(join(project, "study.yaml"), `${JSON.stringify(study, null, 2)}\n`);
|
|
29
28
|
await copyFile(new URL("./scorer.mjs", import.meta.url), join(project, "scorer.mjs"));
|
|
30
29
|
|
|
31
30
|
/** @param {string} runId */
|
|
@@ -37,9 +36,9 @@ async function scored(runId) {
|
|
|
37
36
|
return { runId, adapterScore: bundle.adapterScore, verified: verification.ok };
|
|
38
37
|
}
|
|
39
38
|
|
|
40
|
-
const parsed =
|
|
39
|
+
const parsed = parseStudy(study);
|
|
41
40
|
if (!parsed.ok) throw new Error(parsed.error.message);
|
|
42
|
-
const outcome = await
|
|
41
|
+
const outcome = await runStudy(parsed.config, { cwd: project, dryRun: true, scorer: { score } });
|
|
43
42
|
if (outcome.route !== "computer-use" || !outcome.result.ok) {
|
|
44
43
|
throw new Error(`Library dry run failed: ${JSON.stringify(outcome.result)}`);
|
|
45
44
|
}
|
|
@@ -49,7 +48,7 @@ const library = await scored(outcome.result.runId);
|
|
|
49
48
|
const bin = fileURLToPath(new URL("./cli.js", import.meta.resolve("humanish")));
|
|
50
49
|
const { stdout } = await promisify(execFile)(
|
|
51
50
|
process.execPath,
|
|
52
|
-
[bin, "
|
|
51
|
+
[bin, "run", "study.yaml", "--dry-run", "--no-open", "--scorer", "scorer.mjs", "--json"],
|
|
53
52
|
{ cwd: project },
|
|
54
53
|
);
|
|
55
54
|
const cli = await scored(JSON.parse(stdout).runId);
|
package/package.json
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "humanish",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.108.0",
|
|
4
|
+
"description": "Synthetic user research for apps, CLIs, and agent-facing product flows.",
|
|
5
5
|
"keywords": [
|
|
6
|
-
"agent-harness",
|
|
7
6
|
"cli",
|
|
8
|
-
"
|
|
7
|
+
"computer-use",
|
|
8
|
+
"synthetic-users",
|
|
9
9
|
"ui-testing",
|
|
10
|
+
"usability-testing",
|
|
11
|
+
"user-research",
|
|
10
12
|
"ux-research"
|
|
11
13
|
],
|
|
12
14
|
"homepage": "https://github.com/danielgwilson/humanish#readme",
|
|
@@ -23,25 +25,19 @@
|
|
|
23
25
|
"humanish": "./dist/cli.js"
|
|
24
26
|
},
|
|
25
27
|
"files": [
|
|
26
|
-
"AGENTS.md",
|
|
27
28
|
"CHANGELOG.md",
|
|
28
29
|
"dist",
|
|
30
|
+
"docs/README.md",
|
|
29
31
|
"docs/architecture",
|
|
30
|
-
"docs/assets",
|
|
31
32
|
"docs/contracts",
|
|
32
33
|
"docs/decisions",
|
|
33
|
-
"docs/goals/current.md",
|
|
34
34
|
"docs/principles",
|
|
35
35
|
"docs/product",
|
|
36
|
-
"docs/ramp",
|
|
37
|
-
"docs/release",
|
|
38
|
-
"docs/roadmap",
|
|
39
36
|
"examples",
|
|
40
37
|
"skills",
|
|
41
38
|
"README.md",
|
|
42
39
|
"LICENSE",
|
|
43
40
|
"SECURITY.md",
|
|
44
|
-
"CONTRIBUTING.md",
|
|
45
41
|
"ARCHITECTURE.md",
|
|
46
42
|
"CONTEXT.md",
|
|
47
43
|
"TELEMETRY.md"
|
|
@@ -60,7 +56,7 @@
|
|
|
60
56
|
},
|
|
61
57
|
"scripts": {
|
|
62
58
|
"build": "tsc -p tsconfig.build.json && pnpm --filter humanish-observer build && pnpm --filter humanish-tui build && node scripts/finish-build.mjs",
|
|
63
|
-
"check": "pnpm format:check && pnpm lint && pnpm knip && pnpm prose:check && pnpm vocabulary:check && pnpm typecheck && pnpm test && pnpm tui:test && pnpm build && pnpm guest-media:startup:proof && pnpm cli:startup:test && pnpm cli:preflight:test && pnpm tui:smoke",
|
|
59
|
+
"check": "pnpm format:check && pnpm lint && pnpm knip && pnpm prose:check && pnpm vocabulary:check && pnpm site-css:check && pnpm typecheck && pnpm test && pnpm tui:test && pnpm build && pnpm guest-media:startup:proof && pnpm cli:startup:test && pnpm cli:preflight:test && pnpm tui:smoke",
|
|
64
60
|
"cli:startup:test": "node scripts/terminal-startup-exit-proof.mjs",
|
|
65
61
|
"cli:preflight:test": "node scripts/task-route-preflight-proof.mjs",
|
|
66
62
|
"humanish": "tsx src/cli.ts",
|
|
@@ -69,7 +65,7 @@
|
|
|
69
65
|
"public-surface:scan": "node scripts/public-surface-scan.mjs",
|
|
70
66
|
"api:proof": "node scripts/public-api-proof.mjs",
|
|
71
67
|
"release:check": "pnpm check && pnpm api:proof && pnpm public-surface:scan && pnpm skill:check && npm pack --dry-run",
|
|
72
|
-
"skill:check": "DISABLE_TELEMETRY=1
|
|
68
|
+
"skill:check": "DISABLE_TELEMETRY=1 pnpm exec skills add . --list",
|
|
73
69
|
"test": "vitest run",
|
|
74
70
|
"typecheck": "tsc -p tsconfig.json --noEmit && pnpm --filter humanish-observer typecheck && pnpm --filter humanish-tui typecheck",
|
|
75
71
|
"tui:typecheck": "pnpm --filter humanish-tui typecheck",
|
|
@@ -80,7 +76,7 @@
|
|
|
80
76
|
"docs:generate": "tsx scripts/generate-cli-docs.ts",
|
|
81
77
|
"docs:check": "tsx scripts/generate-cli-docs.ts --check && tsx scripts/check-doc-paths.ts && tsx scripts/check-doc-symbols.ts && tsx scripts/check-doc-comments.ts",
|
|
82
78
|
"observer:browser:proof": "node scripts/observer-browser-proof.mjs",
|
|
83
|
-
"observer:iframe:proof": "node scripts/observer-iframe-proof.mjs",
|
|
79
|
+
"observer:iframe:proof": "node --import tsx scripts/observer-iframe-proof.mjs",
|
|
84
80
|
"observer:chrome:proof": "node scripts/observer-chrome-proof.mjs",
|
|
85
81
|
"observer:reliability:proof": "node scripts/observer-reliability-proof.mjs",
|
|
86
82
|
"tui:connections:proof": "python3 scripts/tui-connections-proof.py",
|
|
@@ -90,10 +86,12 @@
|
|
|
90
86
|
"comms:agentmail:contract": "node --import tsx scripts/agentmail-contract-check.mjs",
|
|
91
87
|
"format": "oxfmt",
|
|
92
88
|
"format:check": "oxfmt --check",
|
|
93
|
-
"lint": "node scripts/check-lint-cap.mjs --max-warnings=
|
|
89
|
+
"lint": "node scripts/check-lint-cap.mjs --max-warnings=440",
|
|
94
90
|
"knip": "knip",
|
|
95
|
-
"prose:check": "node scripts/check-code-prose.mjs
|
|
96
|
-
"vocabulary:check": "tsx scripts/check-retired-words.ts
|
|
91
|
+
"prose:check": "node scripts/check-code-prose.mjs",
|
|
92
|
+
"vocabulary:check": "tsx scripts/check-retired-words.ts",
|
|
93
|
+
"site-css:check": "node scripts/check-site-css.mjs",
|
|
94
|
+
"site:hero:proof": "node scripts/site-hero-wrap-proof.mjs"
|
|
97
95
|
},
|
|
98
96
|
"dependencies": {
|
|
99
97
|
"commander": "^15.0.0",
|
|
@@ -114,6 +112,7 @@
|
|
|
114
112
|
"oxfmt": "0.71.0",
|
|
115
113
|
"oxlint": "1.86.0",
|
|
116
114
|
"oxlint-tsgolint": "7.0.2003",
|
|
115
|
+
"skills": "1.7.0",
|
|
117
116
|
"tsx": "^4.23.15",
|
|
118
117
|
"typescript": "catalog:",
|
|
119
118
|
"vitest": "catalog:"
|
package/skills/humanish/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: humanish
|
|
3
|
-
description: Install and configure humanish CLI in a JavaScript app
|
|
3
|
+
description: Synthetic user research for apps, CLIs, and agent-facing product flows. Install and configure the humanish CLI in a JavaScript app. Use when an agent needs to add humanish, run safe first setup, create synthetic personas or scenarios, configure env var names without values, capture the email an app sends so a persona can complete an email-gated flow (e.g. a signup verification link or one-time code), run verification and Observer commands, or draft public-safe feedback issues without GitHub mutation.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# humanish CLI
|
|
@@ -32,9 +32,9 @@ Everything it shows has a machine-readable equivalent, which is what you want:
|
|
|
32
32
|
|
|
33
33
|
| Instead of the TUI | Use |
|
|
34
34
|
| ------------------- | -------------------------------------------------------------------------------------- |
|
|
35
|
-
| browsing
|
|
35
|
+
| browsing studies | `npx humanish study list --json` |
|
|
36
36
|
| browsing runs | `npx humanish runs --json` |
|
|
37
|
-
| starting a run | `npx humanish
|
|
37
|
+
| starting a run | `npx humanish run <study> --json --no-open` |
|
|
38
38
|
| a run's outcome | `npx humanish review --run <id> --json` |
|
|
39
39
|
| communication setup | `npx humanish comms providers --json` and `npx humanish comms connections list --json` |
|
|
40
40
|
|
|
@@ -51,7 +51,7 @@ authorized credential source), followed by
|
|
|
51
51
|
and `HUMANISH_STRICT_KEYS=1` still apply. Read installed provider capabilities:
|
|
52
52
|
use `humanish comms check --online --json` for read-only authentication.
|
|
53
53
|
Authentication does not establish mailbox permissions, capacity or delivery.
|
|
54
|
-
`humanish comms configure --
|
|
54
|
+
`humanish comms configure --study <path> --json` previews an ignored study copy;
|
|
55
55
|
add `--apply --plan-token <digest>` to save the reviewed version. Launch its
|
|
56
56
|
exact returned path, not a basename that could resolve to another manifest.
|
|
57
57
|
|
|
@@ -87,9 +87,9 @@ exact returned path, not a basename that could resolve to another manifest.
|
|
|
87
87
|
5. Confirm the layout:
|
|
88
88
|
- commit `humanish/` source files;
|
|
89
89
|
- ignore `.humanish/` runtime artifacts;
|
|
90
|
-
- keep committed
|
|
91
|
-
- keep private/local
|
|
92
|
-
`.humanish/local/
|
|
90
|
+
- keep committed studies under `humanish/studies/*.yaml`;
|
|
91
|
+
- keep private/local studies under ignored `.humanish/studies/*.yaml` or
|
|
92
|
+
`.humanish/local/studies/*.yaml`;
|
|
93
93
|
- keep `.env.example` commit-safe and value-free;
|
|
94
94
|
- never commit generated run bundles.
|
|
95
95
|
|
|
@@ -109,34 +109,34 @@ Do not pass numeric `maxCostUsd`/`maxOutputTokens` or their CLI flags to the
|
|
|
109
109
|
account branch. It cannot enforce those ceilings and rejects them. Account dollar
|
|
110
110
|
cost remains unknown even when token usage is reported. There is no fallback to
|
|
111
111
|
an API key or another provider. `analyze --dry-run --provider codex` validates
|
|
112
|
-
local evidence/configuration only; `doctor --
|
|
112
|
+
local evidence/configuration only; `doctor --study` checks setup without a model
|
|
113
113
|
request. Inspect a failed attempt before explicitly retrying `--provider codex
|
|
114
114
|
--rerun`. Opening Observer never starts analysis.
|
|
115
115
|
|
|
116
116
|
## Local browser setup
|
|
117
117
|
|
|
118
118
|
On Linux x64 with local rootful Docker, KVM and TUN, or a supported M3-or-newer
|
|
119
|
-
Mac with native ARM64 Node and Lima 2.2+, an `app-url`
|
|
119
|
+
Mac with native ARM64 Node and Lima 2.2+, an `app-url` study can set `execution.target: local` and `actor.type: local-agent` with
|
|
120
120
|
`localAgent: codex`. It uses the supported Codex ChatGPT login, not E2B or an
|
|
121
121
|
OpenAI API key. Inference is remote and consumes account quota. Existing hosted
|
|
122
|
-
|
|
122
|
+
studies stay hosted; never silently change their execution or billing provider.
|
|
123
123
|
|
|
124
|
-
Use `humanish runtime status --json` and `humanish doctor --
|
|
124
|
+
Use `humanish runtime status --json` and `humanish doctor --study <path> --json`
|
|
125
125
|
for read-only setup inspection. `humanish runtime setup` downloads and verifies
|
|
126
126
|
the pinned runtime; a live local run also prepares it automatically. The normal
|
|
127
|
-
`humanish
|
|
128
|
-
See [the complete example and limits](
|
|
127
|
+
`humanish run <path>` command and TUI use the same study runner and Observer.
|
|
128
|
+
See [the complete example and limits](https://humanish.dev/docs/local-browser).
|
|
129
129
|
|
|
130
130
|
Local browsers currently require a loopback app URL with an explicit port above
|
|
131
131
|
1023 and use a 960×720 Chromium desktop. For email-gated local apps, start
|
|
132
132
|
`humanish comms catch`, point the app's email sends at it, and declare
|
|
133
|
-
`comms.email.external.catchBaseUrl`. Use `doctor --
|
|
133
|
+
`comms.email.external.catchBaseUrl`. Use `doctor --study` to check its recipient
|
|
134
134
|
routes. This captures app sends without mailbox-provider credentials; it does
|
|
135
135
|
not receive arbitrary internet email. Each participant gets only its assigned
|
|
136
136
|
inbox through the local desktop. Real receiving still needs a supported hosted
|
|
137
|
-
route. See [captured inbox setup](
|
|
137
|
+
route. See [captured inbox setup](https://humanish.dev/docs/comms-inbox#local-browser-studies).
|
|
138
138
|
Optional camera and spoken conversation require a separate media
|
|
139
|
-
runtime; follow [participant media](
|
|
139
|
+
runtime; follow [participant media](https://humanish.dev/docs/participant-media)
|
|
140
140
|
for setup and provider limits. Speech uses the same continuing Codex participant,
|
|
141
141
|
not a second conversation. Do not claim that installing the CLI also installs
|
|
142
142
|
Docker or Lima, or qualifies a machine for arbitrary participant counts.
|
|
@@ -144,14 +144,14 @@ Docker or Lima, or qualifies a machine for arbitrary participant counts.
|
|
|
144
144
|
For continuous desktop playback, independent computer-use participants can opt into
|
|
145
145
|
`execution.desktop.recording: { audio: true }` (`false` for screen-only video).
|
|
146
146
|
Screenshots remain the default. Recording does not enable camera or speech;
|
|
147
|
-
the raw media stays local-only. See [desktop recording](
|
|
147
|
+
the raw media stays local-only. See [desktop recording](https://humanish.dev/docs/desktop-recording)
|
|
148
148
|
for runtime requirements and export limits.
|
|
149
149
|
|
|
150
150
|
## Format Stack
|
|
151
151
|
|
|
152
152
|
When creating or editing humanish files:
|
|
153
153
|
|
|
154
|
-
- use `.yaml` for human-authored humanish source:
|
|
154
|
+
- use `.yaml` for human-authored humanish source: studies, personas and scenarios;
|
|
155
155
|
- use `.mjs` for executable adopter scorers named by `review.scorer.ref`;
|
|
156
156
|
- use `.json` or `.ndjson` for generated machine artifacts, Observer data, run
|
|
157
157
|
bundles, event streams, and synthetic fixtures.
|
|
@@ -188,9 +188,9 @@ background: |
|
|
|
188
188
|
A profile with `background` receives only explicitly declared trait directives.
|
|
189
189
|
Legacy profiles without it retain medium defaults for missing patience and
|
|
190
190
|
technical confidence. Avoid contradictory prose and traits; inspect the compiled
|
|
191
|
-
brief with `humanish
|
|
191
|
+
brief with `humanish study show <study> --json` before running.
|
|
192
192
|
|
|
193
|
-
For an autonomous participant study, use a computer-use/local-agent
|
|
193
|
+
For an autonomous participant study, use a computer-use/local-agent study and write
|
|
194
194
|
its `mission` as a believable situation and desired outcome. Supply fixture facts
|
|
195
195
|
needed to act, but do not supply selectors, click sequences, hidden success rules,
|
|
196
196
|
expected defects or recovery tricks. For example: “Saturday's event needs two
|
|
@@ -230,42 +230,44 @@ and `waitForSelector`. Supported expectations are `text`, `selectorVisible`,
|
|
|
230
230
|
values only. Do not write real emails, names, customer data, tickets, logs, or
|
|
231
231
|
tokens into scenario files.
|
|
232
232
|
|
|
233
|
-
## Authoring
|
|
233
|
+
## Authoring Studies
|
|
234
234
|
|
|
235
|
-
|
|
235
|
+
Write reusable studies as `.yaml` study files (`humanish.study.v3`):
|
|
236
236
|
|
|
237
237
|
```yaml
|
|
238
|
-
schema: humanish.
|
|
238
|
+
schema: humanish.study.v3
|
|
239
239
|
id: first-run
|
|
240
240
|
title: First-run synthetic Observer
|
|
241
|
+
route: preview
|
|
242
|
+
mode: dry-run
|
|
241
243
|
subject:
|
|
242
244
|
source: this-repo
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
scenario:
|
|
247
|
-
mode: dry-run
|
|
245
|
+
actor:
|
|
246
|
+
type: synthetic-persona
|
|
247
|
+
participants: 4
|
|
248
248
|
defaults:
|
|
249
249
|
open: true
|
|
250
250
|
```
|
|
251
251
|
|
|
252
|
-
A
|
|
253
|
-
`
|
|
254
|
-
`
|
|
255
|
-
|
|
252
|
+
A study declares its `route` (`preview`, `computer-use`, `shared-world`, `terminal` or
|
|
253
|
+
`scripted`) and composes `subject`, `actor`, `participants`, `caps`, `execution` and
|
|
254
|
+
`policies` for it; a key the route does not read is a parse error that names the route.
|
|
255
|
+
Run `npx humanish study show <study>` to see how a study file parses. A
|
|
256
|
+
`humanish.lab.v2` file from 0.107 still runs with a warning; `npx humanish migrate`
|
|
257
|
+
rewrites it as v3 under `studies/`.
|
|
256
258
|
|
|
257
259
|
### Many actors at once (fan-out, shared worlds, concurrency)
|
|
258
260
|
|
|
259
|
-
- **Every declared participant runs live at once by default.** A 6-
|
|
260
|
-
|
|
261
|
+
- **Every declared participant runs live at once by default.** A 6-entry
|
|
262
|
+
`participants` list is 6 simultaneous actors; total sessions and spend are the same either
|
|
261
263
|
way, only wall-clock and simultaneity differ. `execution.concurrency` is a
|
|
262
264
|
CAP, not a mode: declare it only to bound simultaneous paid desktops, and
|
|
263
265
|
expect a parse warning when the cap makes participants run in waves (a green
|
|
264
266
|
waved run looks identical to the all-live run you meant, so the harness says
|
|
265
267
|
so up front).
|
|
266
268
|
- **Separate worlds (`per-lane-worlds`) vs one shared world.** A plain
|
|
267
|
-
multi-participant computer-use
|
|
268
|
-
(independent studies in parallel).
|
|
269
|
+
multi-participant computer-use study gives each actor its OWN app instance
|
|
270
|
+
(independent studies in parallel). Declare `route: shared-world` for N
|
|
269
271
|
actors in ONE world (a lobby, a shared DB, actors seeing each other's
|
|
270
272
|
changes). Shared-world participants run at once; `execution.concurrency` must
|
|
271
273
|
be at least 2 there.
|
|
@@ -274,8 +276,8 @@ warnings for fields the engine does not consume yet.
|
|
|
274
276
|
run looks like idle tiles — another reason to leave the cap out unless you
|
|
275
277
|
need it.
|
|
276
278
|
|
|
277
|
-
Use committed `humanish/
|
|
278
|
-
ignored `.humanish/
|
|
279
|
+
Use committed `humanish/studies/*.yaml` for public-safe, reproducible studies. Use
|
|
280
|
+
ignored `.humanish/studies/*.yaml` or `.humanish/local/studies/*.yaml` for private repo
|
|
279
281
|
targets, local-only dogfood, or machine-specific settings. Never commit private
|
|
280
282
|
repo names, stream URLs, credential values, screenshots, logs, source snippets,
|
|
281
283
|
or operational details.
|
|
@@ -283,10 +285,10 @@ or operational details.
|
|
|
283
285
|
Useful commands:
|
|
284
286
|
|
|
285
287
|
```bash
|
|
286
|
-
npx humanish
|
|
287
|
-
npx humanish
|
|
288
|
+
npx humanish study list
|
|
289
|
+
npx humanish study show first-run
|
|
288
290
|
npx humanish watch first-run
|
|
289
|
-
npx humanish
|
|
291
|
+
npx humanish run first-run --json --no-open
|
|
290
292
|
```
|
|
291
293
|
|
|
292
294
|
### Off-app email verification (comms)
|
|
@@ -316,7 +318,7 @@ and model charges are separate. Use `humanish comms recover --json` after an
|
|
|
316
318
|
interrupted run, then `humanish comms recover --run <id> --apply --json` for its
|
|
317
319
|
privately recorded resources. Never derive deletion authority from run artifacts.
|
|
318
320
|
SMS, participant sending, borrowed inboxes and other providers remain unavailable.
|
|
319
|
-
See
|
|
321
|
+
See [real email receiving](https://humanish.dev/docs/email-receiving) for limits and recovery.
|
|
320
322
|
|
|
321
323
|
The following configuration selects **local capture**:
|
|
322
324
|
|
|
@@ -341,9 +343,9 @@ customize addresses or limit which participants do email:
|
|
|
341
343
|
|
|
342
344
|
```yaml
|
|
343
345
|
recipients:
|
|
344
|
-
- lane: signup-01 # this
|
|
345
|
-
# generated lane-01..lane-NN names when you use
|
|
346
|
-
# is a hard parse error listing the
|
|
346
|
+
- lane: signup-01 # this study's REAL participant id: a `participants` entry's `id`,
|
|
347
|
+
# or the generated lane-01..lane-NN names when you use a count. An unknown id
|
|
348
|
+
# is a hard parse error listing the study's actual participant ids (a mismatch
|
|
347
349
|
# would silently disable the funnel for that participant, which is how a
|
|
348
350
|
# 6-actor field run lost every inbox at once). Participants you leave out get
|
|
349
351
|
# no inbox and are never told one exists — the parser warns which.
|
|
@@ -361,7 +363,8 @@ is rejected because it is not wired there.
|
|
|
361
363
|
For app-url/operator-provided subjects, run `humanish comms catch` on a reachable
|
|
362
364
|
host, point the app's email sends at that catch, and declare
|
|
363
365
|
`comms.email.external.catchBaseUrl` (plus `inboxBaseUrl` if different). A declared
|
|
364
|
-
`authTokenEnv` is an environment variable name, never a credential value
|
|
366
|
+
`authTokenEnv` is an environment variable name, never a credential value; its
|
|
367
|
+
token must be at least 16 characters.
|
|
365
368
|
The in-sandbox catch
|
|
366
369
|
needs `python3` (the stock E2B desktop has it).
|
|
367
370
|
Evidence is digest-only (`humanish.comms-thread.v1` — counts and digests, never
|
|
@@ -371,8 +374,8 @@ inbox page. See `docs/contracts/schemas.md` for the full `comms:` shape and
|
|
|
371
374
|
|
|
372
375
|
## First Proof Run
|
|
373
376
|
|
|
374
|
-
Run the no-credentials path first.
|
|
375
|
-
target app behavior:
|
|
377
|
+
Run the no-credentials path first. It is a dry run: humanish writes a synthetic
|
|
378
|
+
run bundle and tests no target app behavior:
|
|
376
379
|
|
|
377
380
|
```bash
|
|
378
381
|
npx humanish doctor
|
|
@@ -385,7 +388,7 @@ For CI or non-interactive proof:
|
|
|
385
388
|
|
|
386
389
|
```bash
|
|
387
390
|
npx humanish watch --json --no-open
|
|
388
|
-
npx humanish
|
|
391
|
+
npx humanish run first-run --json --no-open
|
|
389
392
|
```
|
|
390
393
|
|
|
391
394
|
The feedback command prints a public-safe Markdown draft. It must not call the
|
|
@@ -393,31 +396,31 @@ GitHub API, require a token, update Projects, use provider credits, or claim
|
|
|
393
396
|
product behavior proof from a dry run.
|
|
394
397
|
|
|
395
398
|
When the target app can run locally, prove a known browser path with a
|
|
396
|
-
scripted-browser
|
|
399
|
+
scripted-browser study after starting the app on loopback. The study replays a
|
|
397
400
|
`browser.steps` scenario (see above) on a desktop surface, plus a mobile one
|
|
398
401
|
with `count: 2`. The scripted steps make no model requests. Post-run analysis
|
|
399
402
|
still runs by default when `OPENAI_API_KEY` is set, with a $3 cap; keep
|
|
400
403
|
`review.analysis: false` to skip it. Copy the shape of
|
|
401
|
-
[`humanish/
|
|
404
|
+
[`humanish/studies/scripted-demo.yaml`](https://github.com/danielgwilson/humanish/blob/main/humanish/studies/scripted-demo.yaml)
|
|
402
405
|
or the example in the
|
|
403
406
|
[lab manifest reference](https://humanish.dev/docs/lab-manifests#scripted-browser-scenarios):
|
|
404
|
-
set `subject.appUrl` to the loopback URL, `scenario
|
|
405
|
-
and `
|
|
407
|
+
set `subject.appUrl` to the loopback URL, `scenario` to the scenario id,
|
|
408
|
+
and `mode: live`. Without `mode: live` the study is a dry run that opens
|
|
406
409
|
no browser.
|
|
407
410
|
|
|
408
411
|
```bash
|
|
409
412
|
# in another terminal, start the target app on 127.0.0.1 or localhost
|
|
410
|
-
npx humanish
|
|
411
|
-
npx humanish
|
|
413
|
+
npx humanish study show <study> --json
|
|
414
|
+
npx humanish run <study> --json --no-open
|
|
412
415
|
npx humanish verify --run latest --json
|
|
413
|
-
npx humanish
|
|
416
|
+
npx humanish observe --run latest --open # for a person; it serves until Ctrl-C
|
|
414
417
|
```
|
|
415
418
|
|
|
416
|
-
Do not use `humanish watch --
|
|
417
|
-
|
|
419
|
+
Do not use `humanish watch --count ...` as a substitute for a scripted-browser
|
|
420
|
+
study. `watch` renders or follows Observer evidence; a live scripted-browser study
|
|
418
421
|
captures desktop and mobile browser evidence against a running app.
|
|
419
422
|
|
|
420
|
-
## Optional Live E2B
|
|
423
|
+
## Optional Live E2B Study
|
|
421
424
|
|
|
422
425
|
Live headed E2B desktop participants are optional. Add the substrate dependency only
|
|
423
426
|
when the user explicitly wants live E2B execution:
|
|
@@ -437,7 +440,7 @@ Do not paste values into files, prompts, run bundles, issue drafts, or logs.
|
|
|
437
440
|
Load local values only at invocation time:
|
|
438
441
|
|
|
439
442
|
```bash
|
|
440
|
-
npx humanish watch .humanish/
|
|
443
|
+
npx humanish watch .humanish/studies/local-live.yaml --env-file .humanish/local/provider.env
|
|
441
444
|
```
|
|
442
445
|
|
|
443
446
|
When choosing dogfood targets, prefer apps, CLIs, or agent-facing tools with a
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: "humanish CLI"
|
|
3
3
|
short_description: "Set up public-safe persona simulation"
|
|
4
|
-
default_prompt: "Use $humanish to install humanish in this repo, scaffold synthetic personas and scenarios, run the safe Observer proof, and report the public-safe artifacts. If the app can run locally, start it on loopback and run a live scripted
|
|
4
|
+
default_prompt: "Use $humanish to install humanish in this repo, scaffold synthetic personas and scenarios, run the safe Observer proof, and report the public-safe artifacts. If the app can run locally, start it on loopback and run a live scripted study (see https://humanish.dev/docs/lab-manifests#scripted-browser-scenarios; set `mode: live` and keep `review.analysis: false`) before opening the Observer with `humanish observe --run latest`; do not treat `watch --count` as app behavior proof."
|
|
5
5
|
|
|
6
6
|
policy:
|
|
7
7
|
allow_implicit_invocation: true
|
package/AGENTS.md
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
# AGENTS.md
|
|
2
|
-
|
|
3
|
-
humanish runs persona studies: AI participants use a target app, CLI or agent-facing flow on
|
|
4
|
-
hosted or local desktops, and every run leaves a verifiable evidence bundle. Run bundles are the
|
|
5
|
-
source of truth; the Observer is their review surface.
|
|
6
|
-
|
|
7
|
-
Sub-guides take precedence inside their directories: [observer/](https://github.com/danielgwilson/humanish/blob/main/observer/AGENTS.md),
|
|
8
|
-
[tui/](https://github.com/danielgwilson/humanish/blob/main/tui/AGENTS.md), [site/](https://github.com/danielgwilson/humanish/blob/main/site/AGENTS.md). The reasoning behind the rules below is in
|
|
9
|
-
[docs/principles/engineering.md](docs/principles/engineering.md). [CONTEXT.md](CONTEXT.md) defines
|
|
10
|
-
the domain terms, and [docs/decisions/](docs/decisions/README.md) records the decisions that
|
|
11
|
-
shape the code.
|
|
12
|
-
|
|
13
|
-
## Commands
|
|
14
|
-
|
|
15
|
-
Node >= 22.19.0, pnpm 12 (`packageManager` pins the version).
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
pnpm install
|
|
19
|
-
pnpm humanish <command> # run the CLI from source (tsx src/cli.ts)
|
|
20
|
-
pnpm vitest run tests/<file> # one test file
|
|
21
|
-
pnpm format # oxfmt; run before every commit
|
|
22
|
-
pnpm check # the full local gate (below)
|
|
23
|
-
pnpm release:check # check + API proof + public-surface scan + skill check + pack; CI runs this
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
`pnpm check` runs format:check, lint (oxlint, type-aware), knip, prose:check, vocabulary:check,
|
|
27
|
-
typecheck, the vitest suite, the TUI tests, build, the startup proofs and a TUI smoke test. After
|
|
28
|
-
changing a CLI option, run `pnpm docs:generate`; CI fails on a stale `site/content/docs/cli.mdx`.
|
|
29
|
-
Observer changes also need `pnpm build` and the four `observer:*:proof` scripts, which CI's observer
|
|
30
|
-
job runs in Chromium. `pnpm api:proof` (after `pnpm build`) installs the packed tarball in a
|
|
31
|
-
temporary project, compares its export names with `tests/golden/public-api.json` and runs
|
|
32
|
-
`examples/`. After an intended export change, run `pnpm api:proof --update` and review the golden
|
|
33
|
-
diff.
|
|
34
|
-
|
|
35
|
-
Three counts are held to caps in package.json: oxlint warnings (`lint`, `--max-warnings`), comment
|
|
36
|
-
prose (`prose:check`) and the retired words lane, seat, role, sim and study in `src/` identifiers
|
|
37
|
-
(`vocabulary:check`). Each checker fails when a count is above its cap or below it, so the PR that
|
|
38
|
-
reduces a count lowers its cap to the new count; the failure names the flag and the value. CI's
|
|
39
|
-
`caps` workflow fails a PR that raises or removes a cap against the base branch, unless the PR has
|
|
40
|
-
the `raise-cap` label and a `Cap raise:` line in its body that says why.
|
|
41
|
-
|
|
42
|
-
## Layout
|
|
43
|
-
|
|
44
|
-
[ARCHITECTURE.md](ARCHITECTURE.md#find-the-code-for-each-part-of-the-system) maps each folder to
|
|
45
|
-
the file to read first. Keep these layout rules:
|
|
46
|
-
|
|
47
|
-
- `src/index.ts` is the package's only library export surface. `src/cli.ts` is its bin.
|
|
48
|
-
- `src/guest-runtime-main.ts`, `src/guest-runtime-revision.ts` and `src/guest-media-worker.ts`
|
|
49
|
-
stay at the root of `src/`. `scripts/guest-runtime-package.mjs` and the image recipes in
|
|
50
|
-
`runtime/` address their `dist/` output by file name. The rest of the guest runtime is in
|
|
51
|
-
`src/guest/`.
|
|
52
|
-
|
|
53
|
-
## Conventions
|
|
54
|
-
|
|
55
|
-
- TypeScript ESM with strict settings. No `any`; narrow `unknown` at the boundary.
|
|
56
|
-
- Keep files under about 700 lines and functions under about 150 (oxlint warns past both). Split
|
|
57
|
-
when it helps a reader; do not add to `src/routes/computer-use/route.ts` or
|
|
58
|
-
`src/actors/computer-use/loop.ts` when a smaller module fits.
|
|
59
|
-
- Comments say why the code is the way it is. History, incident narratives, issue archaeology and
|
|
60
|
-
PR numbers go in the commit message. `TODO(#123)` may link an open issue. No all-caps emphasis.
|
|
61
|
-
`prose:check` counts violations in `src/`.
|
|
62
|
-
- Tests assert behavior. Do not pin prose in docs or comments with `toContain`. The default test
|
|
63
|
-
timeout is 20 s. Provider-API fixtures come from captured wire shapes.
|
|
64
|
-
- New dependencies go in the pnpm catalog (`pnpm-workspace.yaml`) when more than one workspace
|
|
65
|
-
uses them. Stay on the latest release; a comment next to the entry gives the reason for any
|
|
66
|
-
older pin. knip fails on unused files, dependencies and exports.
|
|
67
|
-
- CLI results are truthful: reject unsupported execution before side effects, and keep useful
|
|
68
|
-
evidence when a run is interrupted. Documented bundle schemas and artifact paths are contracts.
|
|
69
|
-
|
|
70
|
-
## Public Boundary
|
|
71
|
-
|
|
72
|
-
Assume this repository is public.
|
|
73
|
-
|
|
74
|
-
- Never commit or publish secrets, PII/PHI, private customer data, private source, or raw
|
|
75
|
-
private transcripts or screenshots. Public examples are synthetic or redacted. Do not copy
|
|
76
|
-
credential files or secret values into evidence, comments, docs, issues or PRs.
|
|
77
|
-
- Authorized local studies may keep private evidence in gitignored `.humanish/` under the
|
|
78
|
-
capture and redaction rules. Local capture is not publication permission. See the
|
|
79
|
-
[invariants](docs/principles/invariants-and-defaults.md) and the
|
|
80
|
-
[public-readiness standard](docs/release/public-readiness-standard.md).
|
|
81
|
-
- Do not commit `.env*`, `.npmrc`, run bundles, runtime caches or packed tarballs.
|
|
82
|
-
- Naming the owner's other projects, products or domains in public material needs explicit
|
|
83
|
-
sign-off. Use fictional examples. Named public third-party OSS study subjects are fine.
|
|
84
|
-
|
|
85
|
-
## Working
|
|
86
|
-
|
|
87
|
-
- Read the files in [CONTRIBUTING.md's reading order](CONTRIBUTING.md#read-these-in-order), then
|
|
88
|
-
the current task; read the contract for the boundary you are changing. Historical plans do not
|
|
89
|
-
authorize work.
|
|
90
|
-
- Keep `main` clean: one worktree and branch per task, reviewable commits, squash merges.
|
|
91
|
-
- Before adding a service, protocol, mode or framework, state the concrete need in the PR.
|
|
92
|
-
Prefer removing an unnecessary mechanism to documenting around it.
|
|
93
|
-
- Verify in proportion to the change. Runtime changes need an execution check; claims of live
|
|
94
|
-
behavior need a retained run bundle, since dry runs do not establish live behavior. PRs say
|
|
95
|
-
what changed, what was checked and what was not.
|
|
96
|
-
- With shipping authority: push, open the PR, address checks, merge when green, fast-forward
|
|
97
|
-
main and remove the worktree and branch. Releases follow the
|
|
98
|
-
[release procedure](docs/release/open-source-readiness.md). Stay on `0.x` until the maintainer
|
|
99
|
-
chooses 1.0; the minor after `0.99.0` is `0.100.0`.
|