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
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
// Finding and admitting the Codex CLI a restricted launch runs: the native executable behind PATH
|
|
1
|
+
// Finding and admitting the Codex CLI a restricted launch runs: the native executable behind `PATH`
|
|
2
2
|
// or the npm launcher, the environment its children get, and the `--version` check against the
|
|
3
3
|
// host's admitted releases.
|
|
4
4
|
import { constants } from "node:fs";
|
|
5
5
|
import { access, open, realpath } from "node:fs/promises";
|
|
6
6
|
import { createRequire } from "node:module";
|
|
7
7
|
import path from "node:path";
|
|
8
|
-
import { parseCodexCliVersion } from "./
|
|
8
|
+
import { parseCodexCliVersion } from "./codex-admission.js";
|
|
9
9
|
import { RestrictedCodexStop, closeOwnedCodexProcess, ownCodexProcess, retainUnclosedChild, } from "./restricted-transport.js";
|
|
10
|
-
/** The environment of every Codex child: a private home and scratch, and PATH and locale. */
|
|
10
|
+
/** The environment of every Codex child: a private home and scratch, and `PATH` and locale. */
|
|
11
11
|
export function childEnvironment(source, home, scratch) {
|
|
12
12
|
const result = { HOME: home, CODEX_HOME: home, TMPDIR: scratch };
|
|
13
13
|
for (const key of ["PATH", "LANG", "USER", "LOGNAME"])
|
|
@@ -47,42 +47,75 @@ export function restrictedCodexNpmTarget(platform, arch) {
|
|
|
47
47
|
return { triple: "aarch64-apple-darwin", packageName: "codex-darwin-arm64" };
|
|
48
48
|
return undefined;
|
|
49
49
|
}
|
|
50
|
-
/** Resolve PATH without running a shell. The npm launcher is resolved to its
|
|
50
|
+
/** Resolve `PATH` without running a shell. The npm launcher is resolved to its
|
|
51
51
|
* native optional package so cleanup owns the real app-server child. */
|
|
52
52
|
export async function resolveExecutable(options, env) {
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
if (
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
53
|
+
const located = await locateExecutable(options, env);
|
|
54
|
+
// The stop carries only its code; doctor asks refusedCodexExecutable for the file and reason.
|
|
55
|
+
if ("refused" in located)
|
|
56
|
+
throw new RestrictedCodexStop("codex_unavailable");
|
|
57
|
+
return located.file;
|
|
58
|
+
}
|
|
59
|
+
/** The `codex` resolveExecutable turns down and why, or undefined when it finds one to run. */
|
|
60
|
+
export async function refusedCodexExecutable(env, options = {}) {
|
|
61
|
+
const located = await locateExecutable(options, env);
|
|
62
|
+
return "refused" in located ? located.refused : undefined;
|
|
63
|
+
}
|
|
64
|
+
/** The first executable `codex` on `PATH`, as resolveExecutable picks it. */
|
|
65
|
+
async function firstCodexOnPath(env) {
|
|
66
|
+
for (const directory of (env.PATH ?? "")
|
|
67
|
+
.split(path.delimiter)
|
|
68
|
+
.filter((entry) => path.isAbsolute(entry))) {
|
|
69
|
+
const candidate = path.join(directory, "codex");
|
|
70
|
+
try {
|
|
71
|
+
await access(candidate, constants.X_OK);
|
|
72
|
+
return candidate;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
/* Try the next `PATH` entry. */
|
|
68
76
|
}
|
|
69
77
|
}
|
|
70
|
-
|
|
71
|
-
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* The `codex` resolveExecutable picks from `PATH`, runnable or not, and the file it resolves to:
|
|
82
|
+
* what decides the command that replaces it. Undefined when `PATH` has none that resolves.
|
|
83
|
+
*/
|
|
84
|
+
export async function foundCodexExecutable(env) {
|
|
85
|
+
const selected = await firstCodexOnPath(env);
|
|
86
|
+
if (selected === undefined)
|
|
87
|
+
return undefined;
|
|
88
|
+
try {
|
|
89
|
+
return { path: selected, resolved: await realpath(selected) };
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async function locateExecutable(options, env) {
|
|
96
|
+
const platform = options.platform ?? process.platform, arch = options.arch ?? process.arch;
|
|
97
|
+
const selected = options.executable ?? (await firstCodexOnPath(env));
|
|
98
|
+
const refused = (reason, file) => ({
|
|
99
|
+
refused: { ...(file === undefined ? {} : { path: file }), reason },
|
|
100
|
+
});
|
|
101
|
+
if (selected === undefined)
|
|
102
|
+
return refused("no executable `codex` is on PATH");
|
|
103
|
+
if (!path.isAbsolute(selected))
|
|
104
|
+
return refused("it is not an absolute path", selected);
|
|
72
105
|
let resolved;
|
|
73
106
|
try {
|
|
74
107
|
resolved = await realpath(selected);
|
|
75
108
|
}
|
|
76
109
|
catch {
|
|
77
|
-
|
|
110
|
+
return refused("it does not resolve to a file", selected);
|
|
78
111
|
}
|
|
79
112
|
if (await isNativeExecutable(resolved, platform))
|
|
80
|
-
return resolved;
|
|
113
|
+
return { file: resolved };
|
|
81
114
|
if (path.basename(resolved) === "codex.js" && path.basename(path.dirname(resolved)) === "bin") {
|
|
82
115
|
const packageRoot = path.dirname(path.dirname(resolved));
|
|
83
116
|
const target = restrictedCodexNpmTarget(platform, arch);
|
|
84
117
|
if (!target)
|
|
85
|
-
|
|
118
|
+
return refused(`the npm package has no native build for ${platform}-${arch}`, resolved);
|
|
86
119
|
const { triple, packageName: nativePackage } = target;
|
|
87
120
|
const candidates = [];
|
|
88
121
|
try {
|
|
@@ -97,13 +130,55 @@ export async function resolveExecutable(options, env) {
|
|
|
97
130
|
candidates.push(path.join(packageRoot, "vendor", triple, "bin", "codex"));
|
|
98
131
|
for (const candidate of candidates) {
|
|
99
132
|
if (await isNativeExecutable(candidate, platform))
|
|
100
|
-
return realpath(candidate);
|
|
133
|
+
return { file: await realpath(candidate) };
|
|
134
|
+
}
|
|
135
|
+
return refused(`the npm package's native ${nativePackage} build is missing`, resolved);
|
|
136
|
+
}
|
|
137
|
+
return refused("it is neither a native Codex executable nor the @openai/codex npm launcher", resolved);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Writes this release's app-server schema (`app-server generate-json-schema --experimental`) into
|
|
141
|
+
* `out`, for the protocol check. False when the release exits without one. Bounded like the
|
|
142
|
+
* version check: 15 seconds, and a few kilobytes of output, which it does not otherwise read.
|
|
143
|
+
*/
|
|
144
|
+
export async function generateProtocolSchema(file, env, cwd, out, spawnFn, deadline) {
|
|
145
|
+
deadline.check();
|
|
146
|
+
const owned = ownCodexProcess(spawnFn(file, ["app-server", "generate-json-schema", "--experimental", "--out", out], {
|
|
147
|
+
cwd,
|
|
148
|
+
env,
|
|
149
|
+
detached: false,
|
|
150
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
151
|
+
}));
|
|
152
|
+
let bytes = 0, exitCode = null;
|
|
153
|
+
const timer = setTimeout(() => deadline.stop("timeout"), 15_000);
|
|
154
|
+
const count = (chunk) => {
|
|
155
|
+
bytes += chunk.length;
|
|
156
|
+
if (bytes > 65_536)
|
|
157
|
+
deadline.stop("response_too_large");
|
|
158
|
+
};
|
|
159
|
+
owned.child.on("error", () => deadline.stop("codex_unavailable"));
|
|
160
|
+
owned.child.stdin.on("error", () => deadline.stop("codex_unavailable"));
|
|
161
|
+
owned.child.stdout.on("data", count);
|
|
162
|
+
owned.child.stderr.on("data", count);
|
|
163
|
+
owned.child.on("exit", (code) => {
|
|
164
|
+
exitCode = code;
|
|
165
|
+
});
|
|
166
|
+
try {
|
|
167
|
+
owned.child.stdin.end();
|
|
168
|
+
await deadline.wait(owned.closed);
|
|
169
|
+
return exitCode === 0;
|
|
170
|
+
}
|
|
171
|
+
finally {
|
|
172
|
+
clearTimeout(timer);
|
|
173
|
+
if (!(await closeOwnedCodexProcess(owned))) {
|
|
174
|
+
retainUnclosedChild(owned.closed);
|
|
175
|
+
// oxlint-disable-next-line no-unsafe-finally -- a Codex process that did not close invalidates the check
|
|
176
|
+
throw new RestrictedCodexStop("codex_cleanup_failed");
|
|
101
177
|
}
|
|
102
178
|
}
|
|
103
|
-
throw new RestrictedCodexStop("codex_unavailable");
|
|
104
179
|
}
|
|
105
|
-
/** Returns the detected release after checking it against
|
|
106
|
-
export async function checkVersion(file, env, cwd, spawnFn, deadline,
|
|
180
|
+
/** Returns the detected release after checking it against launch admission (`admits`). */
|
|
181
|
+
export async function checkVersion(file, env, cwd, spawnFn, deadline, admits, expected) {
|
|
107
182
|
deadline.check();
|
|
108
183
|
const owned = ownCodexProcess(spawnFn(file, ["--version"], { cwd, env, detached: false, stdio: ["pipe", "pipe", "pipe"] }));
|
|
109
184
|
let text = "", bytes = 0, exitCode = null;
|
|
@@ -131,7 +206,7 @@ export async function checkVersion(file, env, cwd, spawnFn, deadline, admitted,
|
|
|
131
206
|
throw new RestrictedCodexStop("codex_unavailable");
|
|
132
207
|
const version = parseCodexCliVersion(text);
|
|
133
208
|
if (version === undefined ||
|
|
134
|
-
!
|
|
209
|
+
!admits(version) ||
|
|
135
210
|
(expected !== undefined && version !== expected))
|
|
136
211
|
throw new RestrictedCodexStop("codex_unsupported_version", version);
|
|
137
212
|
return version;
|
|
@@ -22,7 +22,8 @@ export interface LaunchSettings {
|
|
|
22
22
|
readonly operatorAuth: boolean;
|
|
23
23
|
readonly reasoningEffort: ReasoningEffort;
|
|
24
24
|
readonly spawnFn: RestrictedCodexSpawn;
|
|
25
|
-
|
|
25
|
+
/** Launch admission: codex-admission.ts, or the qualifier's exact list (restricted-session.ts). */
|
|
26
|
+
readonly admits: (version: string) => boolean;
|
|
26
27
|
}
|
|
27
28
|
/** What a launch records on the session, each piece as soon as it exists. */
|
|
28
29
|
export interface LaunchState {
|
|
@@ -46,6 +47,12 @@ export interface LaunchState {
|
|
|
46
47
|
resolvedModel: string | undefined;
|
|
47
48
|
authentication: "chatgpt-account" | "api-key" | undefined;
|
|
48
49
|
cliVersion: string | undefined;
|
|
50
|
+
/** Notification methods this humanish does not know that carried no item, by count. */
|
|
51
|
+
unknownNotifications: Map<string, number>;
|
|
52
|
+
/** How the release's schema differs from the fields humanish reads; set when that refuses. */
|
|
53
|
+
protocolIncompatibilities: string[] | undefined;
|
|
54
|
+
/** Schema values beyond the baseline, recorded at launch. */
|
|
55
|
+
protocolAdditions: string[] | undefined;
|
|
49
56
|
}
|
|
50
57
|
/** An admitted value, or the refusal a launch stops with. */
|
|
51
58
|
export type Admission<T> = {
|
|
@@ -112,5 +119,5 @@ export declare function admitMcpStatus(reply: Record<string, unknown>): Admissio
|
|
|
112
119
|
* The session's one-time launch: a private home, the auth link, the version check and the spawn,
|
|
113
120
|
* then initialize, config, account, thread and MCP admission.
|
|
114
121
|
*/
|
|
115
|
-
export declare function launchAdmittedAppServer(settings: LaunchSettings, state: LaunchState, request: RestrictedCodexRequest, deadline: RestrictedCodexDeadline, frameLimit: number, enter: (phase: CuaProviderFailurePhase) => void): Promise<RestrictedCodexTransport>;
|
|
122
|
+
export declare function launchAdmittedAppServer(settings: LaunchSettings, state: LaunchState, request: RestrictedCodexRequest, deadline: RestrictedCodexDeadline, frameLimit: number, enter: (phase: CuaProviderFailurePhase) => void, install: (transport: RestrictedCodexTransport) => void): Promise<RestrictedCodexTransport>;
|
|
116
123
|
export {};
|
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
// none of them touches the session. launchAdmittedAppServer sends the requests in order, stops on
|
|
5
5
|
// the first refusal, and records each piece of state as soon as it exists so the session's
|
|
6
6
|
// teardown (restricted-session.ts) cleans up a launch that fails partway.
|
|
7
|
-
import { chmod, mkdir, mkdtemp, realpath, stat, symlink, writeFile } from "node:fs/promises";
|
|
7
|
+
import { chmod, mkdir, mkdtemp, realpath, rm, stat, symlink, writeFile } from "node:fs/promises";
|
|
8
8
|
import { homedir, tmpdir } from "node:os";
|
|
9
9
|
import path from "node:path";
|
|
10
|
-
import { checkVersion, childEnvironment, resolveExecutable } from "./restricted-executable.js";
|
|
10
|
+
import { checkVersion, childEnvironment, generateProtocolSchema, resolveExecutable, } from "./restricted-executable.js";
|
|
11
|
+
import { checkProtocol, loadProtocolSchema } from "./protocol-compat.js";
|
|
12
|
+
import { protocolContract } from "./protocol-contract.js";
|
|
11
13
|
import { admitsRestrictedCodexConfig, admitsRestrictedCodexThread, codexRecord, restrictedCodexConfig, } from "./restricted-policy.js";
|
|
12
14
|
import { RestrictedCodexDeadline, RestrictedCodexStop, RestrictedCodexTransport, ownCodexProcess, } from "./restricted-transport.js";
|
|
13
15
|
/** The admitted value; a refusal stops the launch. */
|
|
@@ -114,6 +116,37 @@ export function admitMcpStatus(reply) {
|
|
|
114
116
|
return { refusal: "codex_unsafe_configuration" };
|
|
115
117
|
return { value: undefined };
|
|
116
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* The release's own app-server schema against the fields humanish reads and sends
|
|
121
|
+
* (protocol-contract.ts), generated into the private work directory on every launch. A change
|
|
122
|
+
* there refuses as codex_incompatible_release; a value beyond the baseline is recorded when the
|
|
123
|
+
* launch is admitted. Reading the schema waits on the deadline; a stop leaves the directory to
|
|
124
|
+
* the session's teardown, which removes the whole work directory.
|
|
125
|
+
*/
|
|
126
|
+
async function admitProtocol(file, env, state, spawnFn, deadline, host) {
|
|
127
|
+
const directory = path.join(state.work, "schema");
|
|
128
|
+
const generated = await generateProtocolSchema(file, env, state.cwd, directory, spawnFn, deadline);
|
|
129
|
+
const schema = generated
|
|
130
|
+
? await deadline.wait(loadProtocolSchema(directory).catch(() => undefined))
|
|
131
|
+
: undefined;
|
|
132
|
+
const result = schema === undefined
|
|
133
|
+
? {
|
|
134
|
+
incompatibilities: [
|
|
135
|
+
generated
|
|
136
|
+
? "its generated app-server schema could not be read"
|
|
137
|
+
: "it did not generate an app-server schema",
|
|
138
|
+
],
|
|
139
|
+
additions: [],
|
|
140
|
+
}
|
|
141
|
+
: checkProtocol(schema, protocolContract(host));
|
|
142
|
+
await rm(directory, { recursive: true, force: true });
|
|
143
|
+
deadline.check();
|
|
144
|
+
if (result.incompatibilities.length > 0) {
|
|
145
|
+
state.protocolIncompatibilities = result.incompatibilities;
|
|
146
|
+
throw new RestrictedCodexStop("codex_incompatible_release");
|
|
147
|
+
}
|
|
148
|
+
state.protocolAdditions = result.additions;
|
|
149
|
+
}
|
|
117
150
|
/** The host's Codex auth.json, which a private home links to instead of copying. */
|
|
118
151
|
async function hostAuthFile(options, sourceEnv) {
|
|
119
152
|
const authHome = options.authHome ?? sourceEnv.CODEX_HOME ?? path.join(sourceEnv.HOME ?? homedir(), ".codex");
|
|
@@ -133,7 +166,7 @@ async function hostAuthFile(options, sourceEnv) {
|
|
|
133
166
|
* The session's one-time launch: a private home, the auth link, the version check and the spawn,
|
|
134
167
|
* then initialize, config, account, thread and MCP admission.
|
|
135
168
|
*/
|
|
136
|
-
export async function launchAdmittedAppServer(settings, state, request, deadline, frameLimit, enter) {
|
|
169
|
+
export async function launchAdmittedAppServer(settings, state, request, deadline, frameLimit, enter, install) {
|
|
137
170
|
const { options, sourceEnv, participant, operatorAuth, reasoningEffort, spawnFn } = settings;
|
|
138
171
|
const file = await resolveExecutable(options, sourceEnv);
|
|
139
172
|
deadline.check();
|
|
@@ -146,7 +179,11 @@ export async function launchAdmittedAppServer(settings, state, request, deadline
|
|
|
146
179
|
for (const directory of [home, state.cwd, state.scratch])
|
|
147
180
|
await mkdir(directory, { mode: 0o700 });
|
|
148
181
|
const env = childEnvironment(sourceEnv, home, state.scratch);
|
|
149
|
-
state.cliVersion = await checkVersion(file, env, state.cwd, spawnFn, deadline, settings.
|
|
182
|
+
state.cliVersion = await checkVersion(file, env, state.cwd, spawnFn, deadline, settings.admits, options.cliVersion);
|
|
183
|
+
await admitProtocol(file, env, state, spawnFn, deadline, {
|
|
184
|
+
reasoningEffort,
|
|
185
|
+
platform: settings.platform,
|
|
186
|
+
});
|
|
150
187
|
const configMode = {
|
|
151
188
|
participantCodeMode: participant !== undefined,
|
|
152
189
|
reasoningEffort,
|
|
@@ -173,6 +210,8 @@ export async function launchAdmittedAppServer(settings, state, request, deadline
|
|
|
173
210
|
stdio: ["pipe", "pipe", "pipe"],
|
|
174
211
|
}));
|
|
175
212
|
const launched = new RestrictedCodexTransport(owned, deadline, frameLimit);
|
|
213
|
+
// The session's handlers check output from the first byte, before initialize returns.
|
|
214
|
+
install(launched);
|
|
176
215
|
state.transport = launched;
|
|
177
216
|
enter("initialize");
|
|
178
217
|
const initialize = await launched.rpc("initialize", {
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { type RestrictedCodexAnalysisErrorCode } from "./restricted-policy.js";
|
|
2
|
+
import { type RestrictedCodexDeadline, type RestrictedCodexTransport } from "./restricted-transport.js";
|
|
3
|
+
/** Raw response item types an analyst turn may produce. */
|
|
4
|
+
export declare const ANALYST_RAW_ITEM_TYPES: readonly string[];
|
|
5
|
+
/** A participant also runs Code Mode: `exec` custom tool calls and `wait` function calls. */
|
|
6
|
+
export declare const PARTICIPANT_RAW_ITEM_TYPES: readonly string[];
|
|
7
|
+
/** Thread item types an analyst turn may produce. */
|
|
8
|
+
export declare const ANALYST_ITEM_TYPES: readonly string[];
|
|
9
|
+
/** A participant also has its one dynamic tool. */
|
|
10
|
+
export declare const PARTICIPANT_ITEM_TYPES: readonly string[];
|
|
11
|
+
/**
|
|
12
|
+
* Server notification methods in Codex CLI 0.160.0's app-server schema
|
|
13
|
+
* (`codex app-server generate-json-schema --experimental`, ServerNotification), plus two it sends
|
|
14
|
+
* outside that union: rawResponseItem/completed, and rawResponse/completed, whose v2 definition
|
|
15
|
+
* (RawResponseCompletedNotification) carries only a response id and usage.
|
|
16
|
+
*/
|
|
17
|
+
export declare const KNOWN_CODEX_NOTIFICATIONS: ReadonlySet<string>;
|
|
18
|
+
/** What the item policy depends on: the session's role and, for a participant, its tool. */
|
|
19
|
+
export interface NotificationPolicy {
|
|
20
|
+
readonly participant: boolean;
|
|
21
|
+
/** The participant's tool name, read at each use; undefined for an analyst. */
|
|
22
|
+
toolName(): string | undefined;
|
|
23
|
+
}
|
|
24
|
+
/** The item policy for a session: a participant's tool name is read at each use. */
|
|
25
|
+
export declare function notificationPolicyOf(participant: {
|
|
26
|
+
readonly tool: {
|
|
27
|
+
readonly name: string;
|
|
28
|
+
};
|
|
29
|
+
} | undefined): NotificationPolicy;
|
|
30
|
+
/** Adds one notification of `method` to a session's unknown-method counts. */
|
|
31
|
+
export declare function countUnknownNotification(counts: Map<string, number>, method: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* The items a notification carries, each with the method whose policy it takes, or null when one
|
|
34
|
+
* is malformed. 0.160.0's schema puts a ThreadItem in `params.item` (item/started,
|
|
35
|
+
* item/completed), `params.turn.items` (turn/started, turn/completed) and
|
|
36
|
+
* `params.thread.turns[].items` (thread/started). An `item` array and an `items` array are read
|
|
37
|
+
* too, for a release that adds them. A nested ThreadItem takes the item/completed policy.
|
|
38
|
+
*/
|
|
39
|
+
export declare function notificationItems(method: string, params: Record<string, unknown>): {
|
|
40
|
+
method: string;
|
|
41
|
+
item: Record<string, unknown>;
|
|
42
|
+
}[] | null;
|
|
43
|
+
/**
|
|
44
|
+
* How a notification fares under the item policy: it carries no item, only allowed items, or a
|
|
45
|
+
* disallowed or malformed one.
|
|
46
|
+
*/
|
|
47
|
+
export declare function itemPolicyOf(method: string, params: Record<string, unknown>, policy: NotificationPolicy): "none" | "allowed" | "violation";
|
|
48
|
+
/**
|
|
49
|
+
* True when an item breaks the item policy. rawResponseItem/completed, and an item of a raw type
|
|
50
|
+
* under any method other than item/started or item/completed, use the raw-item policy. Every
|
|
51
|
+
* other item uses the thread-item policy: an allowed type, the participant's one dynamic tool, and
|
|
52
|
+
* no agent message that delivers asynchronously or asks a question.
|
|
53
|
+
*/
|
|
54
|
+
export declare function itemPolicyViolation(method: string, item: Record<string, unknown>, policy: NotificationPolicy): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* The handler for notifications outside a dispatched turn: during the handshake, before
|
|
57
|
+
* turn/start, between requests and while closing. A disallowed or malformed item refuses; an
|
|
58
|
+
* unknown method without an item is counted; anything else is ignored, as there is no turn to
|
|
59
|
+
* apply it to.
|
|
60
|
+
*/
|
|
61
|
+
export declare function idleNotificationHandler(policy: NotificationPolicy, recordUnknown: (method: string) => void, refuse: (code: RestrictedCodexAnalysisErrorCode) => void): (method: string, params: Record<string, unknown>) => void;
|
|
62
|
+
/** The run warning for unknown notification methods, or undefined when there were none. */
|
|
63
|
+
export declare function unknownNotificationsWarning(counts: Readonly<Record<string, number>> | undefined, cliVersion: string | undefined): string | undefined;
|
|
64
|
+
/** The run warning for a last frame cut off by humanish's own stop, or undefined when none was. */
|
|
65
|
+
export declare function truncatedFrameWarning(bytes: number | undefined): string | undefined;
|
|
66
|
+
/** The session fields its handlers outside a turn read and write (restricted-session). */
|
|
67
|
+
export interface NotificationSessionState {
|
|
68
|
+
readonly unknownNotifications: Map<string, number>;
|
|
69
|
+
/** The request in flight's deadline, or undefined between requests. */
|
|
70
|
+
readonly activeDeadline: RestrictedCodexDeadline | undefined;
|
|
71
|
+
readonly transport: RestrictedCodexTransport | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* The first policy refusal or unchecked output in the session, whenever it happened and whether
|
|
74
|
+
* or not a request reported it: a caller that tolerates a request's failure (the debrief) must
|
|
75
|
+
* not absorb it.
|
|
76
|
+
*/
|
|
77
|
+
policyRefusal: RestrictedCodexAnalysisErrorCode | undefined;
|
|
78
|
+
/** Bytes of last frames cut off after humanish stopped the app-server: a warning only. */
|
|
79
|
+
truncatedFrameBytes: number | undefined;
|
|
80
|
+
}
|
|
81
|
+
type Participant = {
|
|
82
|
+
readonly tool: {
|
|
83
|
+
readonly name: string;
|
|
84
|
+
};
|
|
85
|
+
} | undefined;
|
|
86
|
+
/**
|
|
87
|
+
* A policy refusal: it is recorded, the active request stops with `code`, pending RPCs are
|
|
88
|
+
* rejected, and between requests the next request fails with it.
|
|
89
|
+
*/
|
|
90
|
+
export declare function refuseSession(state: NotificationSessionState, code: RestrictedCodexAnalysisErrorCode): void;
|
|
91
|
+
/** The session's handler for notifications outside a dispatched turn, on its current transport. */
|
|
92
|
+
export declare function idleNotifications(participant: Participant, state: NotificationSessionState): (method: string, params: Record<string, unknown>) => void;
|
|
93
|
+
/**
|
|
94
|
+
* Installs the session's handlers on a new transport, before its first request: notifications
|
|
95
|
+
* outside a turn, notifications once the transport stopped or is closing, and policy failures
|
|
96
|
+
* the transport finds itself.
|
|
97
|
+
*/
|
|
98
|
+
export declare function installSessionHandlers(participant: Participant, state: NotificationSessionState, transport: RestrictedCodexTransport): void;
|
|
99
|
+
/** After a request: the turn's handlers come off the transport, and the idle handlers go on. */
|
|
100
|
+
export declare function detachTurn(participant: Participant, state: NotificationSessionState): void;
|
|
101
|
+
export {};
|