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/dist/comms/types.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export interface CommsAddress {
|
|
|
9
9
|
participantId: string;
|
|
10
10
|
/** Runtime-only raw address, e.g. user-07@example.test | +15550137. */
|
|
11
11
|
value: string;
|
|
12
|
-
/** sha256-short(value)
|
|
12
|
+
/** sha256-short(value): the only form persisted (redaction.digestText). */
|
|
13
13
|
digest: string;
|
|
14
14
|
}
|
|
15
15
|
/** Runtime-only captured raster attachment. Bytes never enter digest-only evidence. */
|
|
@@ -22,12 +22,12 @@ export interface CommsInlineImage {
|
|
|
22
22
|
export interface CommsMessage {
|
|
23
23
|
id: string;
|
|
24
24
|
channel: CommsChannelKind;
|
|
25
|
-
/** Raw sender
|
|
25
|
+
/** Raw sender: an app-under-test address, or another actor's address. Runtime-only. */
|
|
26
26
|
from: string;
|
|
27
27
|
/** Resolved recipient inboxes this message was delivered to. */
|
|
28
28
|
to: CommsAddress[];
|
|
29
29
|
subject?: string;
|
|
30
|
-
/** Runtime-only for real; local-only for fake (never a share path without redaction
|
|
30
|
+
/** Runtime-only for real; local-only for fake (never a share path without redaction). */
|
|
31
31
|
body: string;
|
|
32
32
|
inlineImages?: CommsInlineImage[];
|
|
33
33
|
/** Actionable links extracted from the body (magic-link / invite / reset). Runtime-only. */
|
|
@@ -37,7 +37,7 @@ export interface CommsMessage {
|
|
|
37
37
|
sentAt: number;
|
|
38
38
|
deliveredAt: number;
|
|
39
39
|
}
|
|
40
|
-
/** An actor sending
|
|
40
|
+
/** An actor sending out (a reply/compose); recipients are known CommsAddresses. */
|
|
41
41
|
export interface OutboundMessage {
|
|
42
42
|
from: CommsAddress;
|
|
43
43
|
to: CommsAddress[];
|
|
@@ -45,7 +45,7 @@ export interface OutboundMessage {
|
|
|
45
45
|
body: string;
|
|
46
46
|
inlineImages?: CommsInlineImage[];
|
|
47
47
|
}
|
|
48
|
-
/** A raw inbound from an
|
|
48
|
+
/** A raw inbound from an ingress (the vendor-neutral email catch, an SMTP sink, …): recipients are
|
|
49
49
|
* raw address strings the bus resolves against its provisioned inboxes. */
|
|
50
50
|
export interface InboundRaw {
|
|
51
51
|
from: string;
|
|
@@ -67,7 +67,7 @@ export interface CommsChannel {
|
|
|
67
67
|
/** Route a composed message from one actor to addressed inboxes. Returns the delivered record. */
|
|
68
68
|
send(message: OutboundMessage): Promise<CommsMessage>;
|
|
69
69
|
/** Route a raw ingress delivery (app-under-test → recipient strings). Returns the messages that
|
|
70
|
-
* matched a provisioned inbox (unmatched recipients are dropped
|
|
70
|
+
* matched a provisioned inbox (unmatched recipients are dropped; no inbox to deliver to). */
|
|
71
71
|
deliverRaw(inbound: InboundRaw): Promise<CommsMessage[]>;
|
|
72
72
|
/** New messages delivered to `address` since `since` (exclusive), oldest-first. Drives the surface. */
|
|
73
73
|
poll(address: CommsAddress, since?: number): Promise<CommsMessage[]>;
|
package/dist/comms/types.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
// The addressed message bus for captured mail
|
|
2
|
-
// app, as a testable surface. One port, addressed by
|
|
1
|
+
// The addressed message bus for captured mail: the email or SMS a persona receives off the
|
|
2
|
+
// app, as a testable surface. One port, addressed by participant, so the inbox surface and the evidence
|
|
3
3
|
// writer read messages without knowing how they were captured.
|
|
4
4
|
//
|
|
5
|
-
//
|
|
6
|
-
// address
|
|
5
|
+
// Public safety: raw address values, message bodies, links, and codes are runtime-only. Only the
|
|
6
|
+
// address digest (sha256-short, via redaction.digestText) is ever meant to reach a persisted bundle;
|
|
7
7
|
// a verification link / OTP has "no secret shape" (like the lobby code) → literal-scrub + digest.
|
|
8
8
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Browser chrome that belongs to the host environment (update prompts, password
|
|
3
3
|
* save bubbles, first-run UI) pollutes product evidence. Keep these knobs in one
|
|
4
|
-
* place so browser-backed
|
|
4
|
+
* place so browser-backed routes can prefer product pixels over browser UI.
|
|
5
5
|
*/
|
|
6
6
|
export declare const CHROMIUM_EVIDENCE_HYGIENE_FLAGS: readonly ["--disable-background-networking", "--disable-component-update", "--disable-default-apps", "--disable-domain-reliability", "--disable-extensions", "--disable-sync", "--no-default-browser-check", "--no-first-run", "--password-store=basic", "--use-mock-keychain"];
|
|
7
7
|
export declare function chromiumEvidenceProfilePreferencesJson(): string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Browser chrome that belongs to the host environment (update prompts, password
|
|
3
3
|
* save bubbles, first-run UI) pollutes product evidence. Keep these knobs in one
|
|
4
|
-
* place so browser-backed
|
|
4
|
+
* place so browser-backed routes can prefer product pixels over browser UI.
|
|
5
5
|
*/
|
|
6
6
|
export const CHROMIUM_EVIDENCE_HYGIENE_FLAGS = [
|
|
7
7
|
"--disable-background-networking",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A perceptual hash of a PNG frame for no-progress detection. Decodes the PNG, area-averages it to
|
|
3
|
-
* a SIGNATURE_GRID x SIGNATURE_GRID grayscale grid,
|
|
3
|
+
* a SIGNATURE_GRID x SIGNATURE_GRID grayscale grid, contrast-normalizes that grid, quantizes each
|
|
4
4
|
* cell to SIGNATURE_LEVELS, and packs the cells into a hex string. Deterministic (no Date, no
|
|
5
5
|
* random). Returns SIGNATURE_FALLBACK on any decode failure so two unreadable frames compare equal.
|
|
6
6
|
* The hash cannot be reversed to the image, so exposing it in a trace is public-safe.
|
|
@@ -6,7 +6,7 @@ const SIGNATURE_FALLBACK = "unreadable";
|
|
|
6
6
|
const ANCHOR_LEVELS = 16;
|
|
7
7
|
/**
|
|
8
8
|
* A perceptual hash of a PNG frame for no-progress detection. Decodes the PNG, area-averages it to
|
|
9
|
-
* a SIGNATURE_GRID x SIGNATURE_GRID grayscale grid,
|
|
9
|
+
* a SIGNATURE_GRID x SIGNATURE_GRID grayscale grid, contrast-normalizes that grid, quantizes each
|
|
10
10
|
* cell to SIGNATURE_LEVELS, and packs the cells into a hex string. Deterministic (no Date, no
|
|
11
11
|
* random). Returns SIGNATURE_FALLBACK on any decode failure so two unreadable frames compare equal.
|
|
12
12
|
* The hash cannot be reversed to the image, so exposing it in a trace is public-safe.
|
|
@@ -65,9 +65,9 @@ function quantizedGrid(data, srcW, srcH) {
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
// Stretch this frame's own range across the full scale before quantizing. Without this a light UI
|
|
68
|
-
// occupies a sliver at the top of 0..255 and quantizes to a near-constant
|
|
68
|
+
// occupies a sliver at the top of 0..255 and quantizes to a near-constant.
|
|
69
69
|
//
|
|
70
|
-
// The endpoints are
|
|
70
|
+
// The endpoints are trimmed rather than the raw min/max: a handful of extreme cells must not be
|
|
71
71
|
// able to rescale the whole frame, or a blinking text cursor would rewrite every cell and read as
|
|
72
72
|
// progress forever. Trimming K cells from each end clamps that away while still preserving real
|
|
73
73
|
// structure, which occupies far more cells than K (a row of sidebar text covers dozens).
|
|
@@ -81,7 +81,7 @@ function quantizedGrid(data, srcW, srcH) {
|
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
83
83
|
* The frame's overall brightness, coarsely quantized. Normalization deliberately discards absolute
|
|
84
|
-
* level, so this is prefixed back on for the two cases where absolute level
|
|
84
|
+
* level, so this is prefixed back on for the two cases where absolute level is the change: a uniform
|
|
85
85
|
* frame (an all-white blank vs an all-black screen normalize identically), and a whole-page dim such
|
|
86
86
|
* as a modal overlay, which preserves relative structure while changing the whole frame. Quantized
|
|
87
87
|
* coarsely so ordinary antialiasing noise cannot move it.
|
|
@@ -35,7 +35,7 @@ export interface RedactedScreenshot {
|
|
|
35
35
|
export interface RedactScreenshotOptions {
|
|
36
36
|
/**
|
|
37
37
|
* Longest emitted edge in pixels. Clamped to [1, 128]: a caller may request a
|
|
38
|
-
*
|
|
38
|
+
* smaller (safer) thumbnail but never a larger one, so no call site can widen
|
|
39
39
|
* the frame back into legibility. Default 96. Blur is not a caller knob: it is
|
|
40
40
|
* an internal safety floor computed from the output size.
|
|
41
41
|
*/
|
|
@@ -52,7 +52,7 @@ export declare function digestText(text: string, length?: number): string;
|
|
|
52
52
|
export declare function tailText(value: string, maxChars: number): string;
|
|
53
53
|
/**
|
|
54
54
|
* A redacted, ellipsis-prefixed tail of captured output for a (public-bound)
|
|
55
|
-
* message field. Pattern-redacts the
|
|
55
|
+
* message field. Pattern-redacts the full text before truncating: slicing a tail
|
|
56
56
|
* first could cut through a secret's prefix (e.g. drop "sk-proj-") and defeat the
|
|
57
57
|
* pattern matcher on the remainder. Callers should literal-scrub known
|
|
58
58
|
* provisioned values first; this is the pattern pass. Empty output -> "(no output)".
|
|
@@ -103,7 +103,7 @@ export declare function scrubLiterals(values: readonly string[]): (text: string)
|
|
|
103
103
|
/**
|
|
104
104
|
* Coerce an unknown thrown value to its message string. Prefer this over the
|
|
105
105
|
* inline `error instanceof Error ? error.message : String(error)` so error
|
|
106
|
-
* stringification stays uniform. Note: this does
|
|
106
|
+
* stringification stays uniform. Note: this does not redact; sites that emit
|
|
107
107
|
* to public-bound artifacts must run the result through `redactText` first.
|
|
108
108
|
*/
|
|
109
109
|
export declare function toErrorMessage(error: unknown): string;
|
|
@@ -101,13 +101,13 @@ export function publicPathForTrace(value, rootCwd) {
|
|
|
101
101
|
// ---------------------------------------------------------------------------
|
|
102
102
|
// Screenshot redaction.
|
|
103
103
|
//
|
|
104
|
-
// Computer-use
|
|
104
|
+
// Computer-use participants capture raw desktop frames that can contain secrets, PII,
|
|
105
105
|
// or a logged-in third-party UI. A raw frame must never reach a public artifact.
|
|
106
106
|
// redactScreenshot is the fail-closed primitive that gates that surface. It
|
|
107
107
|
// always returns a freshly re-encoded, downscaled, box-blurred thumbnail (or a
|
|
108
|
-
// neutral placeholder), and
|
|
108
|
+
// neutral placeholder), and never the source pixels. The "too coarse to read"
|
|
109
109
|
// invariant is enforced in code, not by defaults: the emitted width is hard-
|
|
110
|
-
// capped (a caller may request a
|
|
110
|
+
// capped (a caller may request a smaller thumbnail but never a larger one), and
|
|
111
111
|
// the blur radius is computed internally with a floor, so neither a caller
|
|
112
112
|
// option nor a natively small frame can widen the output back into legibility.
|
|
113
113
|
// On any uncertainty (non-PNG input, an oversized or unreadable PNG, or any
|
|
@@ -241,7 +241,7 @@ export function tailText(value, maxChars) {
|
|
|
241
241
|
}
|
|
242
242
|
/**
|
|
243
243
|
* A redacted, ellipsis-prefixed tail of captured output for a (public-bound)
|
|
244
|
-
* message field. Pattern-redacts the
|
|
244
|
+
* message field. Pattern-redacts the full text before truncating: slicing a tail
|
|
245
245
|
* first could cut through a secret's prefix (e.g. drop "sk-proj-") and defeat the
|
|
246
246
|
* pattern matcher on the remainder. Callers should literal-scrub known
|
|
247
247
|
* provisioned values first; this is the pattern pass. Empty output -> "(no output)".
|
|
@@ -321,7 +321,7 @@ export function scrubLiterals(values) {
|
|
|
321
321
|
/**
|
|
322
322
|
* Coerce an unknown thrown value to its message string. Prefer this over the
|
|
323
323
|
* inline `error instanceof Error ? error.message : String(error)` so error
|
|
324
|
-
* stringification stays uniform. Note: this does
|
|
324
|
+
* stringification stays uniform. Note: this does not redact; sites that emit
|
|
325
325
|
* to public-bound artifacts must run the result through `redactText` first.
|
|
326
326
|
*/
|
|
327
327
|
export function toErrorMessage(error) {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A scrub that replaces each non-empty value and its encoded forms with `[REDACTED_SECRET]`. Every
|
|
3
|
+
* occurrence of every form is found on its own, and overlapping finds are merged into one span, so
|
|
4
|
+
* a value that overlaps another is removed whole wherever each starts. The scrub reads the text
|
|
5
|
+
* through decodeEscapes, the decoder verify uses, and returns the decoded text: a warning with
|
|
6
|
+
* percent-encoding, JSON escapes or HTML references shows them decoded, with the values removed.
|
|
7
|
+
* That finds a value written partly encoded, which no single encoded form matches.
|
|
8
|
+
*/
|
|
9
|
+
export declare function scrubSecretValues(values: readonly string[]): (text: string) => string;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// Literal scrubbing of secret values from text that leaves the host, such as an error quoted in a
|
|
2
|
+
// run's warnings. A value is found as written and in the encoded forms an HTTP client, a log line or
|
|
3
|
+
// a JSON body gives it, so a token that reaches the text percent-encoded or base64-encoded is still
|
|
4
|
+
// removed. Pattern redaction (redactText) runs after this and finds secrets by shape.
|
|
5
|
+
import { decodeEscapes } from "./encoded-text.js";
|
|
6
|
+
const REDACTED = "[REDACTED_SECRET]";
|
|
7
|
+
// A marker already in the text, from this scrub or from redactText. No value is matched inside one.
|
|
8
|
+
const MARKER = /\[REDACTED_[A-Z0-9_]+\]/g;
|
|
9
|
+
// The shortest encoded form searched for. Shorter base64 or hex runs are ordinary text often enough
|
|
10
|
+
// that matching them would redact words. A value itself is searched for at any length.
|
|
11
|
+
const MIN_ENCODED_FORM = 8;
|
|
12
|
+
/**
|
|
13
|
+
* The characters of a value's base64 encoding that do not depend on its neighbours, with 0, 1 or
|
|
14
|
+
* 2 bytes before it. A prefix byte shares the next character with the value, and so does the byte
|
|
15
|
+
* after a partial last group, so those characters are dropped.
|
|
16
|
+
*/
|
|
17
|
+
function base64Middles(bytes, encoding) {
|
|
18
|
+
return [0, 1, 2].map((offset) => {
|
|
19
|
+
const encoded = Buffer.concat([Buffer.alloc(offset), bytes])
|
|
20
|
+
.toString(encoding)
|
|
21
|
+
.replace(/=+$/, "");
|
|
22
|
+
const total = offset + bytes.length;
|
|
23
|
+
const start = offset === 0 ? 0 : offset + 1;
|
|
24
|
+
const end = Math.floor(total / 3) * 4 + (total % 3);
|
|
25
|
+
return encoded.slice(start, end);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/** A value as written, and percent-encoded, JSON-escaped, base64 at each byte offset, base64url and hex. */
|
|
29
|
+
function encodedForms(value) {
|
|
30
|
+
const bytes = Buffer.from(value, "utf8");
|
|
31
|
+
const encoded = [
|
|
32
|
+
JSON.stringify(value).slice(1, -1),
|
|
33
|
+
bytes.toString("base64"),
|
|
34
|
+
bytes.toString("base64url"),
|
|
35
|
+
bytes.toString("hex"),
|
|
36
|
+
...base64Middles(bytes, "base64"),
|
|
37
|
+
...base64Middles(bytes, "base64url"),
|
|
38
|
+
];
|
|
39
|
+
// encodeURIComponent throws on a lone surrogate. Such a value is still found as written.
|
|
40
|
+
try {
|
|
41
|
+
encoded.push(encodeURIComponent(value));
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// no percent-encoded form
|
|
45
|
+
}
|
|
46
|
+
return [value, ...encoded.filter((form) => form.length >= MIN_ENCODED_FORM)];
|
|
47
|
+
}
|
|
48
|
+
/** Every occurrence of every form, outside the markers, merged where they overlap or touch. */
|
|
49
|
+
function secretSpans(text, forms) {
|
|
50
|
+
const markers = [];
|
|
51
|
+
for (const match of text.matchAll(MARKER)) {
|
|
52
|
+
const start = match.index ?? 0;
|
|
53
|
+
markers.push([start, start + match[0].length]);
|
|
54
|
+
}
|
|
55
|
+
const spans = [];
|
|
56
|
+
for (const form of forms) {
|
|
57
|
+
for (let at = text.indexOf(form); at !== -1; at = text.indexOf(form, at + 1)) {
|
|
58
|
+
const end = at + form.length;
|
|
59
|
+
if (!markers.some(([start, stop]) => at < stop && end > start))
|
|
60
|
+
spans.push([at, end]);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
spans.sort((left, right) => left[0] - right[0]);
|
|
64
|
+
const merged = [];
|
|
65
|
+
for (const span of spans) {
|
|
66
|
+
const last = merged.at(-1);
|
|
67
|
+
if (last !== undefined && span[0] <= last[1])
|
|
68
|
+
last[1] = Math.max(last[1], span[1]);
|
|
69
|
+
else
|
|
70
|
+
merged.push([span[0], span[1]]);
|
|
71
|
+
}
|
|
72
|
+
return merged;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* A scrub that replaces each non-empty value and its encoded forms with `[REDACTED_SECRET]`. Every
|
|
76
|
+
* occurrence of every form is found on its own, and overlapping finds are merged into one span, so
|
|
77
|
+
* a value that overlaps another is removed whole wherever each starts. The scrub reads the text
|
|
78
|
+
* through decodeEscapes, the decoder verify uses, and returns the decoded text: a warning with
|
|
79
|
+
* percent-encoding, JSON escapes or HTML references shows them decoded, with the values removed.
|
|
80
|
+
* That finds a value written partly encoded, which no single encoded form matches.
|
|
81
|
+
*/
|
|
82
|
+
export function scrubSecretValues(values) {
|
|
83
|
+
const forms = [...new Set(values.filter((value) => value.length > 0).flatMap(encodedForms))];
|
|
84
|
+
if (forms.length === 0)
|
|
85
|
+
return (text) => text;
|
|
86
|
+
return (text) => {
|
|
87
|
+
const decoded = decodeEscapes(text);
|
|
88
|
+
let result = "";
|
|
89
|
+
let cursor = 0;
|
|
90
|
+
for (const [start, end] of secretSpans(decoded, forms)) {
|
|
91
|
+
result += decoded.slice(cursor, start) + REDACTED;
|
|
92
|
+
cursor = end;
|
|
93
|
+
}
|
|
94
|
+
return result + decoded.slice(cursor);
|
|
95
|
+
};
|
|
96
|
+
}
|
package/dist/feedback/draft.js
CHANGED
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
// participant's feedback candidate or from a reviewed analysis finding, and its markdown rendering.
|
|
3
3
|
// The commands that resolve the run and read or write drafts are in feedback.ts.
|
|
4
4
|
import path from "node:path";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { analysisSharingProblems } from "../analysis/sharing.js";
|
|
6
|
+
import { loadAnalysis } from "../analysis/load.js";
|
|
7
7
|
import { hashAnalysisValue } from "../analysis/validation.js";
|
|
8
|
-
import { formatParticipantOutcomes,
|
|
8
|
+
import { formatParticipantOutcomes, formatRunTaskFunnel, participantOutcomeDetails, withCuaReviewProvenance, } from "../run/outcomes.js";
|
|
9
9
|
import { loadRunBundlePrepared } from "../run/locate.js";
|
|
10
10
|
import { isFeedbackIdempotencyKey } from "../run/feedback-shape.js";
|
|
11
|
+
import { isRecord } from "../run/type-guards.js";
|
|
11
12
|
import { feedbackProofCommands, projectFeedbackAcceptanceProof } from "./proof.js";
|
|
12
13
|
export const FEEDBACK_SCHEMA = "humanish.feedback.v1";
|
|
13
14
|
export function buildDraft(bundle, bundlePath, candidateId) {
|
|
@@ -48,95 +49,55 @@ export function buildDraft(bundle, bundlePath, candidateId) {
|
|
|
48
49
|
acceptance_proof: projectFeedbackAcceptanceProof(bundle, candidate),
|
|
49
50
|
};
|
|
50
51
|
}
|
|
51
|
-
//
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
? []
|
|
68
|
-
: [`Tasks: ${formatStudyTaskFunnel(bundle.review.tasks)}.`]),
|
|
69
|
-
];
|
|
70
|
-
return {
|
|
71
|
-
schema: FEEDBACK_SCHEMA,
|
|
72
|
-
run_id: bundle.runId,
|
|
73
|
-
adapter_id: bundle.source.packageName ?? bundle.scenario.id,
|
|
74
|
-
scenario_id: bundle.scenario.id,
|
|
75
|
-
persona_id: bundle.persona.id,
|
|
76
|
-
actor: (bundle.streams ?? []).some((stream) => stream.actor?.lane === "computer-use")
|
|
77
|
-
? "computer-use"
|
|
78
|
-
: "unknown",
|
|
79
|
-
substrate: "unknown",
|
|
80
|
-
failure_owner: "unknown",
|
|
81
|
-
summary: "Live study completed without a participant-reported finding",
|
|
82
|
-
expected: bundle.scenario.goal,
|
|
83
|
-
actual: actualLines.join(" "),
|
|
84
|
-
source_bundle: bundlePath,
|
|
85
|
-
evidence: [
|
|
86
|
-
{
|
|
87
|
-
path: bundlePath,
|
|
88
|
-
kind: "state",
|
|
89
|
-
note: "Source run bundle.",
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
path: path.join(path.dirname(bundlePath), "review.md"),
|
|
93
|
-
kind: "review",
|
|
94
|
-
note: "The run's review: verdict, participants, and gaps.",
|
|
95
|
-
},
|
|
96
|
-
],
|
|
97
|
-
redaction: {
|
|
98
|
-
status: "passed",
|
|
99
|
-
notes: bundle.redaction.notes,
|
|
100
|
-
},
|
|
101
|
-
idempotency_key: `humanish:${bundle.runId}:live-run-summary`,
|
|
102
|
-
proposed_next_state: "study-quality-review",
|
|
103
|
-
acceptance_proof: [
|
|
104
|
-
feedbackProofCommands(bundle.runId).verify,
|
|
105
|
-
feedbackProofCommands(bundle.runId).watch,
|
|
106
|
-
],
|
|
107
|
-
};
|
|
108
|
-
}
|
|
52
|
+
// A bundle without a candidate gets a draft that describes the run that happened, built from the
|
|
53
|
+
// same review lines the stakeholder surfaces show (participants and tasks keep their
|
|
54
|
+
// denominators). Feedback refuses a dry run before it gets here.
|
|
55
|
+
const participantEndings = participantOutcomeDetails(bundle.streams);
|
|
56
|
+
const review = withCuaReviewProvenance(bundle.review, bundle.streams);
|
|
57
|
+
const actualLines = [
|
|
58
|
+
review.summary,
|
|
59
|
+
...(bundle.review.participants === undefined
|
|
60
|
+
? []
|
|
61
|
+
: [
|
|
62
|
+
`Participants: ${formatParticipantOutcomes(bundle.review.participants, participantEndings)}.`,
|
|
63
|
+
]),
|
|
64
|
+
...(bundle.review.tasks === undefined
|
|
65
|
+
? []
|
|
66
|
+
: [`Tasks: ${formatRunTaskFunnel(bundle.review.tasks)}.`]),
|
|
67
|
+
];
|
|
109
68
|
return {
|
|
110
69
|
schema: FEEDBACK_SCHEMA,
|
|
111
70
|
run_id: bundle.runId,
|
|
112
|
-
adapter_id: bundle.source.packageName ??
|
|
71
|
+
adapter_id: bundle.source.packageName ?? bundle.scenario.id,
|
|
113
72
|
scenario_id: bundle.scenario.id,
|
|
114
73
|
persona_id: bundle.persona.id,
|
|
115
|
-
actor: "
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
74
|
+
actor: (bundle.streams ?? []).some((stream) => stream.actor?.lane === "computer-use")
|
|
75
|
+
? "computer-use"
|
|
76
|
+
: "unknown",
|
|
77
|
+
substrate: "unknown",
|
|
78
|
+
failure_owner: "unknown",
|
|
79
|
+
summary: "Live study completed without a participant-reported finding",
|
|
80
|
+
expected: bundle.scenario.goal,
|
|
81
|
+
actual: actualLines.join(" "),
|
|
121
82
|
source_bundle: bundlePath,
|
|
122
83
|
evidence: [
|
|
123
84
|
{
|
|
124
85
|
path: bundlePath,
|
|
125
86
|
kind: "state",
|
|
126
|
-
note: "
|
|
87
|
+
note: "Source run bundle.",
|
|
127
88
|
},
|
|
128
89
|
{
|
|
129
90
|
path: path.join(path.dirname(bundlePath), "review.md"),
|
|
130
91
|
kind: "review",
|
|
131
|
-
note: "
|
|
92
|
+
note: "The run's review: verdict, participants, and gaps.",
|
|
132
93
|
},
|
|
133
94
|
],
|
|
134
95
|
redaction: {
|
|
135
96
|
status: "passed",
|
|
136
97
|
notes: bundle.redaction.notes,
|
|
137
98
|
},
|
|
138
|
-
idempotency_key: `humanish:${bundle.runId}:
|
|
139
|
-
proposed_next_state: "
|
|
99
|
+
idempotency_key: `humanish:${bundle.runId}:live-run-summary`,
|
|
100
|
+
proposed_next_state: "study-quality-review",
|
|
140
101
|
acceptance_proof: [
|
|
141
102
|
feedbackProofCommands(bundle.runId).verify,
|
|
142
103
|
feedbackProofCommands(bundle.runId).watch,
|
|
@@ -146,10 +107,10 @@ export function buildDraft(bundle, bundlePath, candidateId) {
|
|
|
146
107
|
export async function buildAnalysisDraft(context, options) {
|
|
147
108
|
if (!options.analysis || !options.finding || options.candidate !== undefined)
|
|
148
109
|
return null;
|
|
149
|
-
const loaded = await
|
|
110
|
+
const loaded = await loadAnalysis(context.preparedRunPaths, options.analysis);
|
|
150
111
|
const analysis = loaded.analysis;
|
|
151
112
|
const finding = analysis?.result?.findings.find((item) => item.id === options.finding);
|
|
152
|
-
const sharing =
|
|
113
|
+
const sharing = analysisSharingProblems(loaded);
|
|
153
114
|
if (loaded.state !== "ready" || sharing.sensitive || sharing.unverified || !analysis || !finding)
|
|
154
115
|
return null;
|
|
155
116
|
const correction = loaded.corrections.filter((item) => item.findingId === finding.id).at(-1);
|
|
@@ -253,14 +214,14 @@ export function isUsableFeedbackCandidate(candidate) {
|
|
|
253
214
|
!item.path.includes("://") &&
|
|
254
215
|
!item.path.includes(".."));
|
|
255
216
|
}
|
|
256
|
-
|
|
257
|
-
|
|
217
|
+
/** An evidence path inside the run directory, as "run.json" or "screenshots/step-003.png". */
|
|
218
|
+
function runRelative(draft, evidencePath) {
|
|
219
|
+
const relative = path.relative(path.dirname(draft.source_bundle), evidencePath);
|
|
220
|
+
return relative === "" || relative.startsWith("..") ? evidencePath : relative;
|
|
258
221
|
}
|
|
259
222
|
export function renderMarkdown(draft, repo) {
|
|
260
223
|
return `This issue was drafted by humanish from a verified humanish run bundle.
|
|
261
224
|
|
|
262
|
-
It contributes to public-safe simulation harness coverage. The feedback command did not mutate GitHub, commit code, or claim unobserved product behavior.
|
|
263
|
-
|
|
264
225
|
## Summary
|
|
265
226
|
|
|
266
227
|
${draft.summary}
|
|
@@ -275,14 +236,9 @@ ${draft.actual}
|
|
|
275
236
|
|
|
276
237
|
## Evidence
|
|
277
238
|
|
|
278
|
-
${draft.evidence.map((item) => `- ${item.kind}
|
|
279
|
-
|
|
280
|
-
## Filing Notes
|
|
239
|
+
${draft.evidence.map((item) => `- ${item.kind} ${runRelative(draft, item.path)}: ${item.note}`).join("\n")}
|
|
281
240
|
|
|
282
|
-
|
|
283
|
-
- GitHub mutation: not performed
|
|
284
|
-
- Substrate: ${draft.substrate}
|
|
285
|
-
- Production data: not used
|
|
241
|
+
Repository: ${repo}
|
|
286
242
|
|
|
287
243
|
\`\`\`yaml
|
|
288
244
|
humanish_feedback:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// The publish boundary for existing raw runs
|
|
1
|
+
// The publish boundary for existing raw runs. A derivative is an isolated
|
|
2
2
|
// workspace, never a new run in the source history. No provider APIs are involved.
|
|
3
3
|
import { createHash } from "node:crypto";
|
|
4
4
|
import { lstat, mkdir, mkdtemp, readdir, realpath, rename, rm, rmdir } from "node:fs/promises";
|
|
@@ -16,7 +16,7 @@ import { verifyRunPrepared } from "../verify/verify.js";
|
|
|
16
16
|
import { loadRunBundlePrepared, resolveRunPath } from "../run/locate.js";
|
|
17
17
|
import {} from "../run/bundle.js";
|
|
18
18
|
import { runIdOf, isPathInside, prepareRunArtifactPaths, validatePreparedRunArtifactPaths, } from "../run/paths.js";
|
|
19
|
-
import {
|
|
19
|
+
import { isAnalysisRecordPath } from "../analysis/sharing.js";
|
|
20
20
|
import { assertPreparedSelectedOutputDirectory, prepareManagedHumanishOutputDirectory, prepareSelectedOutputDirectory, readContainedRegularFile, writeContainedOutputFile, } from "../run/contained-output.js";
|
|
21
21
|
const DERIVATION_SCHEMA = "humanish.redacted-derivation.v1";
|
|
22
22
|
const MAX_FILES = 10_000;
|
|
@@ -46,9 +46,9 @@ function jsonBytes(value) {
|
|
|
46
46
|
return Buffer.from(`${JSON.stringify(value, null, 2)}\n`);
|
|
47
47
|
}
|
|
48
48
|
function omittedReason(relative) {
|
|
49
|
-
if (relative.startsWith("analysis-automatic/") &&
|
|
49
|
+
if (relative.startsWith("analysis-automatic/") && isAnalysisRecordPath(relative))
|
|
50
50
|
return "automatic execution intent and liveness do not transfer to a derivative";
|
|
51
|
-
if (
|
|
51
|
+
if (isAnalysisRecordPath(relative))
|
|
52
52
|
return "analysis records bind original evidence hashes; reanalyze the derivative";
|
|
53
53
|
if (relative.startsWith(".analysis-lock/"))
|
|
54
54
|
return "local analysis execution lock";
|
|
@@ -477,7 +477,7 @@ async function resolveDestination(cwd, runPaths, runId, options) {
|
|
|
477
477
|
* it. The raw snapshot is removed before the derivative is built.
|
|
478
478
|
*/
|
|
479
479
|
async function verifyFrozenSource(workspace, source, runId) {
|
|
480
|
-
// Verify the
|
|
480
|
+
// Verify the same frozen bytes that will be transformed. Verifying the live
|
|
481
481
|
// source and then rereading run.json permits an ABA edit to contaminate a
|
|
482
482
|
// derivative whose receipt still names the first inventory's hashes.
|
|
483
483
|
// Raw verification bytes stay in private OS temporary storage, even when
|
|
@@ -46,5 +46,9 @@ export interface ExportDeps {
|
|
|
46
46
|
/** The banner a --local-only export carries. Plain HTML, before the app root, so it renders with JS off. */
|
|
47
47
|
export declare function localOnlyBanner(reasons: string[]): string;
|
|
48
48
|
export declare function exportRun(cwdInput: string, runInput: string, options?: ExportOptions, deps?: ExportDeps): Promise<ExportResult | ExportFailure>;
|
|
49
|
-
|
|
49
|
+
/** Human output; a failure is an error the CLI prints on stderr (HumanOutput in src/cli/io.ts). */
|
|
50
|
+
export declare function formatExportHuman(result: ExportResult): string;
|
|
51
|
+
export declare function formatExportHuman(result: ExportResult | ExportFailure): string | {
|
|
52
|
+
error: ExportFailure["error"];
|
|
53
|
+
};
|
|
50
54
|
export {};
|