@zergai/ztc 0.4.0-beta.1 → 0.5.0-beta.1
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/README.md +398 -45
- package/RUST_THIRD_PARTY_LICENSES.txt +1080 -822
- package/THIRD_PARTY_NOTICES.md +273 -12
- package/bin/zmux-darwin-arm64 +0 -0
- package/bin/ztc-audio-darwin-arm64 +0 -0
- package/bin/ztc-capture-darwin-arm64 +0 -0
- package/bin/ztc-computer-darwin-arm64 +0 -0
- package/bin/ztc-llm-darwin-arm64 +0 -0
- package/bin/ztc-tts-darwin-arm64 +0 -0
- package/bin/ztc-tui-darwin-arm64 +0 -0
- package/bin/ztc-zlicky-overlay-darwin-arm64 +0 -0
- package/bin/zterm-darwin-arm64 +0 -0
- package/dist/App.js +1206 -209
- package/dist/agent/agent.d.ts +74 -8
- package/dist/agent/agent.js +1073 -184
- package/dist/agent/backends/account_rotation.d.ts +4 -0
- package/dist/agent/backends/account_rotation.js +8 -2
- package/dist/agent/backends/anthropic.d.ts +13 -0
- package/dist/agent/backends/anthropic.js +169 -28
- package/dist/agent/backends/claude_cli.js +18 -8
- package/dist/agent/backends/codex_app_server.d.ts +1 -0
- package/dist/agent/backends/codex_app_server.js +55 -3
- package/dist/agent/backends/codex_auth.d.ts +1 -0
- package/dist/agent/backends/codex_auth.js +67 -13
- package/dist/agent/backends/codex_buffered_recovery.d.ts +27 -0
- package/dist/agent/backends/codex_buffered_recovery.js +293 -0
- package/dist/agent/backends/gemini.js +3 -1
- package/dist/agent/backends/http_error.d.ts +26 -0
- package/dist/agent/backends/http_error.js +221 -0
- package/dist/agent/backends/index.d.ts +9 -2
- package/dist/agent/backends/index.js +22 -2
- package/dist/agent/backends/openai.d.ts +0 -6
- package/dist/agent/backends/openai.js +5 -2
- package/dist/agent/backends/openai_compatible.d.ts +5 -4
- package/dist/agent/backends/openai_compatible.js +26 -19
- package/dist/agent/backends/openai_responses.d.ts +8 -3
- package/dist/agent/backends/openai_responses.js +77 -33
- package/dist/agent/backends/provider_ids.d.ts +1 -0
- package/dist/agent/backends/provider_ids.js +4 -0
- package/dist/agent/backends/request_metrics.js +12 -2
- package/dist/agent/backends/types.d.ts +109 -6
- package/dist/agent/backends/types.js +5 -1
- package/dist/agent/backends/zrouter_stream.d.ts +6 -1
- package/dist/agent/backends/zrouter_stream.js +160 -42
- package/dist/agent/background_registry.d.ts +2 -0
- package/dist/agent/background_registry.js +1 -0
- package/dist/agent/claim_observation.d.ts +6 -0
- package/dist/agent/claim_observation.js +54 -0
- package/dist/agent/commands/accounts.js +46 -177
- package/dist/agent/commands/attention.d.ts +2 -0
- package/dist/agent/commands/attention.js +67 -0
- package/dist/agent/commands/auth.js +18 -2
- package/dist/agent/commands/board.d.ts +2 -0
- package/dist/agent/commands/board.js +169 -0
- package/dist/agent/commands/clipboard.js +50 -1
- package/dist/agent/commands/compact.js +21 -13
- package/dist/agent/commands/config.js +4 -1
- package/dist/agent/commands/context.js +6 -1
- package/dist/agent/commands/desktop.d.ts +2 -0
- package/dist/agent/commands/desktop.js +29 -0
- package/dist/agent/commands/effort.js +14 -6
- package/dist/agent/commands/environment.d.ts +3 -0
- package/dist/agent/commands/environment.js +109 -0
- package/dist/agent/commands/evidence.d.ts +2 -0
- package/dist/agent/commands/evidence.js +9 -0
- package/dist/agent/commands/fork.js +4 -3
- package/dist/agent/commands/goal.d.ts +33 -1
- package/dist/agent/commands/goal.js +174 -14
- package/dist/agent/commands/goal_exit.d.ts +36 -0
- package/dist/agent/commands/goal_exit.js +120 -0
- package/dist/agent/commands/help.js +3 -1
- package/dist/agent/commands/history.js +3 -1
- package/dist/agent/commands/inbox.d.ts +2 -0
- package/dist/agent/commands/inbox.js +148 -0
- package/dist/agent/commands/index.js +16 -1
- package/dist/agent/commands/input_mode.js +8 -6
- package/dist/agent/commands/job.d.ts +2 -0
- package/dist/agent/commands/job.js +93 -0
- package/dist/agent/commands/keybindings.js +4 -1
- package/dist/agent/commands/label.d.ts +2 -0
- package/dist/agent/commands/label.js +77 -0
- package/dist/agent/commands/layout.d.ts +2 -0
- package/dist/agent/commands/layout.js +20 -0
- package/dist/agent/commands/mirror.js +16 -1
- package/dist/agent/commands/model.js +12 -2
- package/dist/agent/commands/permissions.d.ts +3 -1
- package/dist/agent/commands/permissions.js +79 -89
- package/dist/agent/commands/plan.js +5 -15
- package/dist/agent/commands/profile.js +21 -2
- package/dist/agent/commands/provider_selection.js +20 -1
- package/dist/agent/commands/rename.js +1 -1
- package/dist/agent/commands/resources.d.ts +2 -0
- package/dist/agent/commands/resources.js +67 -0
- package/dist/agent/commands/rewind.d.ts +3 -0
- package/dist/agent/commands/rewind.js +16 -0
- package/dist/agent/commands/runbooks.d.ts +2 -0
- package/dist/agent/commands/runbooks.js +73 -0
- package/dist/agent/commands/runbooks_lazy.d.ts +2 -0
- package/dist/agent/commands/runbooks_lazy.js +8 -0
- package/dist/agent/commands/sessions.d.ts +1 -1
- package/dist/agent/commands/sessions.js +33 -5
- package/dist/agent/commands/settings.js +185 -39
- package/dist/agent/commands/setup.d.ts +2 -0
- package/dist/agent/commands/setup.js +78 -0
- package/dist/agent/commands/share.d.ts +2 -0
- package/dist/agent/commands/share.js +64 -0
- package/dist/agent/commands/status.js +14 -2
- package/dist/agent/commands/types.d.ts +99 -6
- package/dist/agent/commands/update.js +8 -0
- package/dist/agent/commands/usage.d.ts +2 -0
- package/dist/agent/commands/usage.js +8 -0
- package/dist/agent/factory.d.ts +11 -0
- package/dist/agent/factory.js +113 -88
- package/dist/agent/loop_policy.d.ts +6 -3
- package/dist/agent/loop_policy.js +12 -3
- package/dist/agent/measurement_guidance.d.ts +2 -0
- package/dist/agent/measurement_guidance.js +5 -0
- package/dist/agent/request_encoder.d.ts +8 -1
- package/dist/agent/request_encoder.js +95 -23
- package/dist/agent/runtime/benchmark_comparison.d.ts +30 -0
- package/dist/agent/runtime/benchmark_comparison.js +94 -0
- package/dist/agent/runtime/benchmark_contract.d.ts +48 -0
- package/dist/agent/runtime/benchmark_contract.js +90 -0
- package/dist/agent/runtime/checked_commands.d.ts +32 -0
- package/dist/agent/runtime/checked_commands.js +119 -0
- package/dist/agent/runtime/command_execution_policy.d.ts +26 -0
- package/dist/agent/runtime/command_execution_policy.js +91 -0
- package/dist/agent/runtime/command_jobs.d.ts +36 -18
- package/dist/agent/runtime/command_jobs.js +151 -13
- package/dist/agent/runtime/command_panes.d.ts +59 -0
- package/dist/agent/runtime/command_panes.js +398 -0
- package/dist/agent/runtime/command_wait.d.ts +19 -0
- package/dist/agent/runtime/command_wait.js +167 -0
- package/dist/agent/runtime/cpu_benchmark.d.ts +30 -0
- package/dist/agent/runtime/cpu_benchmark.js +126 -0
- package/dist/agent/runtime/delegated_evidence.d.ts +26 -0
- package/dist/agent/runtime/delegated_evidence.js +80 -0
- package/dist/agent/runtime/evidence.d.ts +127 -0
- package/dist/agent/runtime/evidence.js +468 -0
- package/dist/agent/runtime/execution_context.d.ts +7 -0
- package/dist/agent/runtime/execution_context.js +39 -3
- package/dist/agent/runtime/json_verifier_recipe.d.ts +8 -0
- package/dist/agent/runtime/json_verifier_recipe.js +66 -0
- package/dist/agent/runtime/measurements.d.ts +110 -0
- package/dist/agent/runtime/measurements.js +317 -0
- package/dist/agent/runtime/policy.d.ts +4 -0
- package/dist/agent/runtime/policy.js +31 -20
- package/dist/agent/runtime/provider_native_evidence.d.ts +20 -0
- package/dist/agent/runtime/provider_native_evidence.js +86 -0
- package/dist/agent/runtime/recovery.d.ts +2 -0
- package/dist/agent/runtime/recovery.js +45 -2
- package/dist/agent/runtime/remote_broker_transport.d.ts +10 -0
- package/dist/agent/runtime/remote_broker_transport.js +84 -0
- package/dist/agent/runtime/remote_deletion_receipts.d.ts +3 -0
- package/dist/agent/runtime/remote_deletion_receipts.js +43 -0
- package/dist/agent/runtime/remote_journal_replay.d.ts +13 -0
- package/dist/agent/runtime/remote_journal_replay.js +233 -0
- package/dist/agent/runtime/remote_mutation_journal.d.ts +25 -0
- package/dist/agent/runtime/remote_mutation_journal.js +208 -0
- package/dist/agent/runtime/remote_resource_endpoint.d.ts +7 -0
- package/dist/agent/runtime/remote_resource_endpoint.js +6 -0
- package/dist/agent/runtime/remote_resource_errors.d.ts +5 -0
- package/dist/agent/runtime/remote_resource_errors.js +9 -0
- package/dist/agent/runtime/remote_resource_script.d.ts +2 -0
- package/dist/agent/runtime/remote_resource_script.js +1009 -0
- package/dist/agent/runtime/remote_resources.d.ts +29 -0
- package/dist/agent/runtime/remote_resources.js +160 -0
- package/dist/agent/runtime/source_verification.d.ts +12 -0
- package/dist/agent/runtime/source_verification.js +210 -0
- package/dist/agent/runtime/source_verification_contract.d.ts +75 -0
- package/dist/agent/runtime/source_verification_contract.js +203 -0
- package/dist/agent/runtime/tool_checkpoints.d.ts +11 -0
- package/dist/agent/runtime/tool_checkpoints.js +26 -0
- package/dist/agent/runtime/tool_effects.d.ts +5 -0
- package/dist/agent/runtime/tool_progress.d.ts +12 -0
- package/dist/agent/runtime/tool_progress.js +76 -0
- package/dist/agent/runtime/tool_runtime.d.ts +16 -1
- package/dist/agent/runtime/tool_runtime.js +204 -10
- package/dist/agent/runtime/tracing.d.ts +1 -1
- package/dist/agent/runtime/verifier_capture.d.ts +9 -0
- package/dist/agent/runtime/verifier_capture.js +100 -0
- package/dist/agent/runtime/verifier_contract.d.ts +24 -0
- package/dist/agent/runtime/verifier_contract.js +41 -0
- package/dist/agent/subagent.d.ts +20 -10
- package/dist/agent/subagent.js +266 -29
- package/dist/agent/tool_response_directory.d.ts +24 -0
- package/dist/agent/tool_response_directory.js +61 -0
- package/dist/agent/tool_response_source.d.ts +8 -0
- package/dist/agent/tool_response_source.js +49 -0
- package/dist/agent/tool_response_store.d.ts +75 -4
- package/dist/agent/tool_response_store.js +583 -64
- package/dist/agent/tools/ask_user.d.ts +3 -1
- package/dist/agent/tools/ask_user.js +30 -11
- package/dist/agent/tools/background.js +1 -0
- package/dist/agent/tools/benchmark_cpu.d.ts +2 -0
- package/dist/agent/tools/benchmark_cpu.js +102 -0
- package/dist/agent/tools/compare_benchmarks.d.ts +2 -0
- package/dist/agent/tools/compare_benchmarks.js +53 -0
- package/dist/agent/tools/deferred.js +1 -0
- package/dist/agent/tools/delegate.js +18 -2
- package/dist/agent/tools/helper_requirements.d.ts +7 -0
- package/dist/agent/tools/helper_requirements.js +19 -0
- package/dist/agent/tools/index.d.ts +1 -0
- package/dist/agent/tools/index.js +3 -0
- package/dist/agent/tools/measurement_report.d.ts +22 -0
- package/dist/agent/tools/measurement_report.js +190 -0
- package/dist/agent/tools/pane.d.ts +0 -7
- package/dist/agent/tools/pane.js +5 -4
- package/dist/agent/tools/project_context.d.ts +3 -0
- package/dist/agent/tools/project_context.js +45 -0
- package/dist/agent/tools/recall_tool_response.d.ts +3 -5
- package/dist/agent/tools/recall_tool_response.js +19 -29
- package/dist/agent/tools/registry.d.ts +1 -0
- package/dist/agent/tools/registry.js +23 -0
- package/dist/agent/tools/related_sessions.d.ts +2 -0
- package/dist/agent/tools/related_sessions.js +156 -0
- package/dist/agent/tools/routine.js +13 -3
- package/dist/agent/tools/session_evidence.d.ts +3 -0
- package/dist/agent/tools/session_evidence.js +72 -0
- package/dist/agent/tools/shell.d.ts +4 -3
- package/dist/agent/tools/shell.js +174 -47
- package/dist/agent/tools/tool_search.js +3 -2
- package/dist/agent/tools/types.d.ts +28 -0
- package/dist/agent/tools/verify_artifact.d.ts +2 -0
- package/dist/agent/tools/verify_artifact.js +60 -0
- package/dist/agent/tools/workflow.js +1 -0
- package/dist/app/activity.d.ts +6 -1
- package/dist/app/activity.js +81 -12
- package/dist/app/agent_runner.d.ts +6 -1
- package/dist/app/agent_runner.js +34 -19
- package/dist/app/command_context.js +106 -10
- package/dist/app/controller.d.ts +15 -4
- package/dist/app/controller.js +29 -3
- package/dist/app/escape_stop.d.ts +11 -0
- package/dist/app/escape_stop.js +15 -0
- package/dist/app/liveness.d.ts +6 -4
- package/dist/app/liveness.js +13 -3
- package/dist/app/model_catalog_cache.d.ts +5 -0
- package/dist/app/model_catalog_cache.js +138 -0
- package/dist/app/ordered_transcript.js +43 -4
- package/dist/app/prompt_turn.d.ts +14 -0
- package/dist/app/prompt_turn.js +53 -0
- package/dist/app/recap.d.ts +3 -0
- package/dist/app/recap.js +9 -3
- package/dist/app/restart.d.ts +3 -2
- package/dist/app/restart.js +22 -7
- package/dist/app/rewind.d.ts +3 -3
- package/dist/app/rewind.js +3 -3
- package/dist/app/selection_completion.d.ts +17 -2
- package/dist/app/selection_completion.js +84 -9
- package/dist/app/session_manager.d.ts +38 -6
- package/dist/app/session_manager.js +263 -60
- package/dist/app/session_messages.d.ts +3 -0
- package/dist/app/session_messages.js +60 -0
- package/dist/app/task_scope_router.d.ts +20 -0
- package/dist/app/task_scope_router.js +173 -0
- package/dist/app/transcript_window.d.ts +2 -0
- package/dist/app/transcript_window.js +4 -0
- package/dist/app/workspace_admission_details.d.ts +3 -0
- package/dist/app/workspace_admission_details.js +26 -0
- package/dist/app/workspace_layout_controller.d.ts +11 -0
- package/dist/app/workspace_layout_controller.js +88 -0
- package/dist/app/workspace_monitor.d.ts +1 -0
- package/dist/app/workspace_monitor.js +216 -0
- package/dist/app/workspace_presets.d.ts +29 -0
- package/dist/app/workspace_presets.js +192 -0
- package/dist/attention/queue.d.ts +37 -0
- package/dist/attention/queue.js +183 -0
- package/dist/bench/rf_shared.d.ts +2 -0
- package/dist/board/binding.d.ts +42 -0
- package/dist/board/binding.js +38 -0
- package/dist/board/client.d.ts +42 -0
- package/dist/board/client.js +60 -0
- package/dist/cli.js +1 -1
- package/dist/cli_args.js +19 -17
- package/dist/cli_main.js +110 -13
- package/dist/cli_ratatui.d.ts +183 -16
- package/dist/cli_ratatui.js +3989 -1255
- package/dist/components/ActivityLine.d.ts +3 -2
- package/dist/components/ActivityLine.js +2 -2
- package/dist/components/InputArea.d.ts +19 -1
- package/dist/components/InputArea.js +264 -190
- package/dist/components/MessageList.d.ts +2 -0
- package/dist/components/MessageList.js +3 -1
- package/dist/components/SingleMessage.d.ts +2 -0
- package/dist/components/SingleMessage.js +4 -2
- package/dist/components/StatusBar.d.ts +4 -2
- package/dist/components/StatusBar.js +3 -1
- package/dist/conductor_branch.js +3 -0
- package/dist/config/api_retry.d.ts +6 -1
- package/dist/config/api_retry.js +19 -1
- package/dist/config/defaults.d.ts +2 -1
- package/dist/config/defaults.js +9 -2
- package/dist/config/message_display.d.ts +1 -0
- package/dist/config/message_display.js +17 -2
- package/dist/config/permissions.d.ts +21 -0
- package/dist/config/permissions.js +89 -0
- package/dist/config/resolved.d.ts +2 -2
- package/dist/config/types.d.ts +32 -5
- package/dist/config.d.ts +38 -4
- package/dist/config.js +290 -42
- package/dist/context/project_intelligence.d.ts +44 -0
- package/dist/context/project_intelligence.js +246 -0
- package/dist/desktop/cli_launch.d.ts +8 -0
- package/dist/desktop/cli_launch.js +6 -0
- package/dist/desktop/cli_shim.d.ts +8 -0
- package/dist/desktop/cli_shim.js +120 -0
- package/dist/desktop/runtime.d.ts +16 -0
- package/dist/desktop/runtime.js +161 -0
- package/dist/desktop/worker_launch.d.ts +7 -0
- package/dist/desktop/worker_launch.js +7 -0
- package/dist/diagnostics/cargo_mutants_selection.d.ts +27 -0
- package/dist/diagnostics/cargo_mutants_selection.js +48 -0
- package/dist/diagnostics/native_terminal_benchmark.d.ts +58 -0
- package/dist/diagnostics/native_terminal_benchmark.js +1247 -0
- package/dist/diagnostics/session_evidence_package.d.ts +40 -0
- package/dist/diagnostics/session_evidence_package.js +234 -0
- package/dist/diagnostics/session_export.d.ts +93 -0
- package/dist/diagnostics/session_export.js +634 -0
- package/dist/emulation/tool_adapters.js +48 -18
- package/dist/emulation/ztc_addendum.d.ts +1 -0
- package/dist/emulation/ztc_addendum.js +13 -12
- package/dist/environment/service_runner.d.ts +1 -0
- package/dist/environment/service_runner.js +68 -0
- package/dist/environment/store.d.ts +120 -0
- package/dist/environment/store.js +387 -0
- package/dist/events.d.ts +40 -1
- package/dist/events.js +10 -17
- package/dist/goal_contract.d.ts +25 -0
- package/dist/goal_contract.js +44 -0
- package/dist/headless.d.ts +31 -0
- package/dist/headless.js +578 -70
- package/dist/headless_cli.js +8 -0
- package/dist/headless_cli_args.d.ts +1 -0
- package/dist/headless_cli_args.js +1 -0
- package/dist/intake/cli.d.ts +1 -0
- package/dist/intake/cli.js +33 -0
- package/dist/intake/format.d.ts +2 -0
- package/dist/intake/format.js +14 -0
- package/dist/intake/notifications.d.ts +16 -0
- package/dist/intake/notifications.js +132 -0
- package/dist/intake/store.d.ts +56 -0
- package/dist/intake/store.js +238 -0
- package/dist/library.d.ts +8 -0
- package/dist/library.js +19 -10
- package/dist/mcp/client.d.ts +1 -0
- package/dist/mcp/client.js +20 -0
- package/dist/modes/builtin/plan.yaml +2 -2
- package/dist/modes/handlers.js +1 -1
- package/dist/onboarding/first_run.d.ts +3 -0
- package/dist/onboarding/first_run.js +33 -25
- package/dist/onboarding/setup.d.ts +32 -0
- package/dist/onboarding/setup.js +133 -0
- package/dist/onboarding/setup_agent_health.d.ts +17 -0
- package/dist/onboarding/setup_agent_health.js +79 -0
- package/dist/onboarding/setup_environment.d.ts +66 -0
- package/dist/onboarding/setup_environment.js +219 -0
- package/dist/onboarding/setup_workspace.d.ts +17 -0
- package/dist/onboarding/setup_workspace.js +129 -0
- package/dist/optimize/adapters/index.d.ts +4 -1
- package/dist/optimize/adapters/index.js +7 -0
- package/dist/optimize/adapters/kernelbench.js +14 -5
- package/dist/optimize/adapters/popcorn.js +3 -2
- package/dist/optimize/adapters/profile_benchmark.js +13 -7
- package/dist/optimize/adapters/rfbench.js +25 -14
- package/dist/optimize/adapters/types.d.ts +3 -0
- package/dist/optimize/adapters/zergpod.js +5 -2
- package/dist/optimize/baseline.js +10 -21
- package/dist/optimize/branch.js +9 -12
- package/dist/optimize/combine.js +2 -3
- package/dist/optimize/executor.js +34 -48
- package/dist/optimize/measurements.d.ts +55 -0
- package/dist/optimize/measurements.js +173 -0
- package/dist/optimize/results.d.ts +1 -0
- package/dist/optimize/results.js +11 -33
- package/dist/optimize/tge.js +2 -1
- package/dist/panes/initial_input.d.ts +19 -0
- package/dist/panes/initial_input.js +206 -0
- package/dist/panes/labels.d.ts +16 -0
- package/dist/panes/labels.js +42 -0
- package/dist/panes/model_catalog.d.ts +3 -3
- package/dist/panes/model_catalog.js +28 -4
- package/dist/panes/pane_registry.js +6 -2
- package/dist/panes/types.d.ts +3 -0
- package/dist/panes/ztc_launch.js +19 -0
- package/dist/plugin/optimization.d.ts +2 -0
- package/dist/plugin/optimization.js +1 -0
- package/dist/plugin/runtime.d.ts +2 -0
- package/dist/plugin/simulation.d.ts +6 -1
- package/dist/plugin/simulation_contract.d.ts +836 -1
- package/dist/plugin/simulation_documents.d.ts +22 -0
- package/dist/plugin/simulation_documents.js +1 -0
- package/dist/plugin/simulation_interventions.d.ts +103 -0
- package/dist/plugin/simulation_interventions.js +1 -0
- package/dist/plugin/simulation_living.d.ts +1 -0
- package/dist/plugin/simulation_living.js +3 -0
- package/dist/plugin/simulation_meetings.d.ts +121 -0
- package/dist/plugin/simulation_meetings.js +1 -0
- package/dist/plugin/simulation_story_review.d.ts +111 -0
- package/dist/plugin/simulation_story_review.js +1 -0
- package/dist/plugin/simulation_storyteller.d.ts +91 -0
- package/dist/plugin/simulation_storyteller.js +1 -0
- package/dist/plugin/simulation_structured.d.ts +2 -0
- package/dist/plugin/simulation_structured.js +2 -0
- package/dist/plugin/simulation_toolkit.d.ts +21 -0
- package/dist/plugin/simulation_toolkit.js +24 -0
- package/dist/prompts/tool_delegate_task.j2 +1 -1
- package/dist/remote-broker/Dockerfile +10 -0
- package/dist/remote-broker/archive.py +1227 -0
- package/dist/remote-broker/cutover.py +761 -0
- package/dist/remote-broker/requirements.txt +5 -0
- package/dist/remote-broker/resources.json +6 -0
- package/dist/remote-broker/resources.write-staging.example.json +18 -0
- package/dist/remote-broker/retained.py +686 -0
- package/dist/remote-broker/retained_cleanup.py +550 -0
- package/dist/remote-broker/server.py +648 -0
- package/dist/remote-broker/worker.py +1007 -0
- package/dist/router_auth.d.ts +31 -0
- package/dist/router_auth.js +155 -9
- package/dist/runbooks/catalog.d.ts +3 -0
- package/dist/runbooks/catalog.js +26 -0
- package/dist/runbooks/library.d.ts +11 -0
- package/dist/runbooks/library.js +95 -0
- package/dist/runbooks/package.d.ts +43 -0
- package/dist/runbooks/package.js +102 -0
- package/dist/session.d.ts +65 -13
- package/dist/session.js +548 -43
- package/dist/session_handoff.d.ts +25 -0
- package/dist/session_handoff.js +322 -0
- package/dist/session_handoff_contract.d.ts +89 -0
- package/dist/session_handoff_contract.js +179 -0
- package/dist/session_media.d.ts +41 -0
- package/dist/session_media.js +357 -0
- package/dist/session_ownership.d.ts +16 -0
- package/dist/session_ownership.js +221 -0
- package/dist/session_public.d.ts +10 -2
- package/dist/session_public.js +6 -1
- package/dist/simulation/dynamic_history.d.ts +42 -0
- package/dist/simulation/dynamic_history.js +173 -0
- package/dist/simulation/engines/swarm/pane_manager.js +7 -6
- package/dist/simulation/inference.d.ts +3 -1
- package/dist/simulation/inference.js +19 -1
- package/dist/simulation/intervention_generation.d.ts +27 -0
- package/dist/simulation/intervention_generation.js +246 -0
- package/dist/simulation/intervention_material.d.ts +4 -0
- package/dist/simulation/intervention_material.js +81 -0
- package/dist/simulation/living/context.d.ts +3130 -0
- package/dist/simulation/living/context.js +944 -0
- package/dist/simulation/living/definer.d.ts +12 -0
- package/dist/simulation/living/definer.js +223 -0
- package/dist/simulation/living/definition.d.ts +257 -0
- package/dist/simulation/living/definition.js +341 -0
- package/dist/simulation/living/frame.d.ts +259 -0
- package/dist/simulation/living/frame.js +223 -0
- package/dist/simulation/living/identifiers.d.ts +2 -0
- package/dist/simulation/living/identifiers.js +12 -0
- package/dist/simulation/living/index.d.ts +15 -0
- package/dist/simulation/living/index.js +15 -0
- package/dist/simulation/living/inference.d.ts +219 -0
- package/dist/simulation/living/inference.js +576 -0
- package/dist/simulation/living/mechanics.d.ts +54 -0
- package/dist/simulation/living/mechanics.js +588 -0
- package/dist/simulation/living/model-input.d.ts +25 -0
- package/dist/simulation/living/model-input.js +215 -0
- package/dist/simulation/living/open-world.d.ts +257 -0
- package/dist/simulation/living/open-world.js +102 -0
- package/dist/simulation/living/projection.d.ts +7 -0
- package/dist/simulation/living/projection.js +31 -0
- package/dist/simulation/living/recall.d.ts +17 -0
- package/dist/simulation/living/recall.js +25 -0
- package/dist/simulation/living/reduce.d.ts +15 -0
- package/dist/simulation/living/reduce.js +1853 -0
- package/dist/simulation/living/replay.d.ts +6 -0
- package/dist/simulation/living/replay.js +22 -0
- package/dist/simulation/living/runtime.d.ts +140 -0
- package/dist/simulation/living/runtime.js +3020 -0
- package/dist/simulation/living/shared-kinds.d.ts +24 -0
- package/dist/simulation/living/shared-kinds.js +96 -0
- package/dist/simulation/living/types.d.ts +2785 -0
- package/dist/simulation/living/types.js +669 -0
- package/dist/simulation/llm.d.ts +3 -1
- package/dist/simulation/llm.js +90 -30
- package/dist/simulation/memory/embedding.d.ts +1 -1
- package/dist/simulation/memory/embedding.js +9 -3
- package/dist/simulation/memory/filesystem.d.ts +2 -0
- package/dist/simulation/memory/filesystem.js +5 -1
- package/dist/simulation/memory/filesystem_file_tree.d.ts +4 -1
- package/dist/simulation/memory/filesystem_file_tree.js +41 -10
- package/dist/simulation/memory/filesystem_invariants.js +1 -2
- package/dist/simulation/memory/filesystem_types.d.ts +1 -0
- package/dist/simulation/memory/memory.d.ts +2 -0
- package/dist/simulation/memory/memory.js +5 -1
- package/dist/simulation/orchestration/intent.js +0 -2
- package/dist/simulation/orchestration/lifecycle.js +0 -2
- package/dist/simulation/plugin_host.d.ts +25 -1
- package/dist/simulation/plugin_host.js +334 -17
- package/dist/simulation/session_documents.d.ts +20 -0
- package/dist/simulation/session_documents.js +62 -0
- package/dist/simulation/session_input_validation.d.ts +43 -0
- package/dist/simulation/session_input_validation.js +364 -0
- package/dist/simulation/session_inputs.d.ts +32 -0
- package/dist/simulation/session_inputs.js +154 -0
- package/dist/simulation/telemetry.d.ts +11 -14
- package/dist/simulation/telemetry.js +177 -54
- package/dist/simulation/toolkit/bounded_turns.d.ts +13 -0
- package/dist/simulation/toolkit/bounded_turns.js +80 -0
- package/dist/simulation/toolkit/dynamic_agents.d.ts +25 -0
- package/dist/simulation/toolkit/dynamic_agents.js +218 -0
- package/dist/simulation/toolkit/dynamic_digest.d.ts +1 -0
- package/dist/simulation/toolkit/dynamic_digest.js +8 -0
- package/dist/simulation/toolkit/dynamic_documents.d.ts +7 -0
- package/dist/simulation/toolkit/dynamic_documents.js +71 -0
- package/dist/simulation/toolkit/dynamic_driver.d.ts +8 -0
- package/dist/simulation/toolkit/dynamic_driver.js +269 -0
- package/dist/simulation/toolkit/dynamic_game.d.ts +53 -0
- package/dist/simulation/toolkit/dynamic_game.js +805 -0
- package/dist/simulation/toolkit/dynamic_knowledge.d.ts +15 -0
- package/dist/simulation/toolkit/dynamic_knowledge.js +91 -0
- package/dist/simulation/toolkit/dynamic_mechanics.d.ts +22 -0
- package/dist/simulation/toolkit/dynamic_mechanics.js +910 -0
- package/dist/simulation/toolkit/dynamic_meetings.d.ts +239 -0
- package/dist/simulation/toolkit/dynamic_meetings.js +350 -0
- package/dist/simulation/toolkit/dynamic_progress.d.ts +131 -0
- package/dist/simulation/toolkit/dynamic_progress.js +214 -0
- package/dist/simulation/toolkit/dynamic_projection.d.ts +9 -0
- package/dist/simulation/toolkit/dynamic_projection.js +219 -0
- package/dist/simulation/toolkit/dynamic_runtime.d.ts +412 -0
- package/dist/simulation/toolkit/dynamic_runtime.js +6536 -0
- package/dist/simulation/toolkit/dynamic_state.d.ts +111 -0
- package/dist/simulation/toolkit/dynamic_state.js +1967 -0
- package/dist/simulation/toolkit/dynamic_story_review.d.ts +508 -0
- package/dist/simulation/toolkit/dynamic_story_review.js +333 -0
- package/dist/simulation/toolkit/dynamic_storyteller.d.ts +77 -0
- package/dist/simulation/toolkit/dynamic_storyteller.js +114 -0
- package/dist/simulation/toolkit/dynamic_storyteller_runtime.d.ts +26 -0
- package/dist/simulation/toolkit/dynamic_storyteller_runtime.js +126 -0
- package/dist/simulation/toolkit/dynamic_world.d.ts +22 -0
- package/dist/simulation/toolkit/dynamic_world.js +377 -0
- package/dist/simulation/toolkit/structured_output.d.ts +5 -0
- package/dist/simulation/toolkit/structured_output.js +321 -0
- package/dist/simulation/types/world.d.ts +2 -0
- package/dist/simulation/world/artifact_store.js +1 -1
- package/dist/simulation/world/memory_manager.d.ts +5 -0
- package/dist/simulation/world/memory_manager.js +17 -2
- package/dist/simulation/world/state.d.ts +3 -2
- package/dist/simulation/world/state.js +15 -5
- package/dist/skills/bundled/measurement-validation/SKILL.md +144 -0
- package/dist/terminal_attach.d.ts +1 -0
- package/dist/terminal_attach.js +113 -0
- package/dist/tool_progress.d.ts +3 -0
- package/dist/tool_progress.js +27 -0
- package/dist/types.d.ts +145 -10
- package/dist/types.js +3 -0
- package/dist/ui/core/input.d.ts +3 -0
- package/dist/ui/core/input_segments.d.ts +18 -1
- package/dist/ui/core/input_segments.js +131 -47
- package/dist/ui/core/input_state.d.ts +12 -0
- package/dist/ui/core/layout_yoga.d.ts +1 -1
- package/dist/ui/core/turn_metadata.d.ts +5 -0
- package/dist/ui/core/turn_metadata.js +22 -0
- package/dist/ui/ink/render.d.ts +2 -1
- package/dist/ui/ink/render.js +6 -5
- package/dist/ui/ratatui/headless_pane_manager.d.ts +14 -1
- package/dist/ui/ratatui/headless_pane_manager.js +293 -104
- package/dist/ui/ratatui/index.d.ts +1 -0
- package/dist/ui/ratatui/input.d.ts +4 -0
- package/dist/ui/ratatui/input.js +15 -0
- package/dist/ui/ratatui/ipc_path.d.ts +2 -0
- package/dist/ui/ratatui/ipc_path.js +29 -1
- package/dist/ui/ratatui/mux_persistence.d.ts +3 -1
- package/dist/ui/ratatui/mux_persistence.js +139 -1
- package/dist/ui/ratatui/pane_relay.d.ts +1 -1
- package/dist/ui/ratatui/pane_relay.js +55 -27
- package/dist/ui/ratatui/process.d.ts +17 -1
- package/dist/ui/ratatui/process.js +80 -7
- package/dist/ui/ratatui/protocol.d.ts +236 -1
- package/dist/ui/ratatui/protocol.js +90 -0
- package/dist/ui/scrollback.d.ts +2 -1
- package/dist/ui/scrollback.js +9 -4
- package/dist/ui/stream_typewriter.d.ts +8 -3
- package/dist/ui/stream_typewriter.js +30 -1
- package/dist/ui/streaming_scrollback.d.ts +1 -0
- package/dist/ui/streaming_scrollback.js +1 -1
- package/dist/ui/transcript_render_cache.js +10 -0
- package/dist/ui/views/activity_line.d.ts +5 -3
- package/dist/ui/views/activity_line.js +65 -7
- package/dist/ui/views/app.d.ts +6 -3
- package/dist/ui/views/app.js +17 -6
- package/dist/ui/views/completion_menu.js +10 -5
- package/dist/ui/views/input_area.d.ts +7 -3
- package/dist/ui/views/input_area.js +15 -9
- package/dist/ui/views/message_list.d.ts +4 -1
- package/dist/ui/views/message_list.js +89 -19
- package/dist/ui/views/queue_panel.d.ts +3 -1
- package/dist/ui/views/queue_panel.js +9 -2
- package/dist/ui/views/status_bar.d.ts +4 -2
- package/dist/ui/views/status_bar.js +28 -13
- package/dist/ui/views/theme.d.ts +2 -0
- package/dist/ui/views/theme.js +2 -0
- package/dist/ui/widgets/color_panel.js +18 -0
- package/dist/ui/widgets/form.js +8 -0
- package/dist/ui/widgets/log_view.js +7 -0
- package/dist/ui/widgets/navigator_panel.js +8 -0
- package/dist/ui/widgets/prompt_viewer.js +2 -0
- package/dist/ui/widgets/questionnaire.d.ts +2 -0
- package/dist/ui/widgets/questionnaire.js +79 -16
- package/dist/ui/widgets/resume_panel.d.ts +2 -0
- package/dist/ui/widgets/resume_panel.js +26 -15
- package/dist/ui/widgets/rewind_panel.d.ts +2 -2
- package/dist/ui/widgets/rewind_panel.js +4 -2
- package/dist/ui/widgets/select.js +16 -27
- package/dist/ui/widgets/settings_panel.js +16 -0
- package/dist/ui/widgets/status_line_panel.d.ts +1 -0
- package/dist/ui/widgets/status_line_panel.js +30 -4
- package/dist/ui/widgets/text_input.d.ts +2 -0
- package/dist/ui/widgets/text_input.js +15 -1
- package/dist/ui/widgets/types.d.ts +2 -0
- package/dist/usage_projection.d.ts +24 -0
- package/dist/usage_projection.js +130 -0
- package/dist/usage_snapshot.d.ts +36 -0
- package/dist/usage_snapshot.js +131 -0
- package/dist/utils/assistant_message.d.ts +2 -0
- package/dist/utils/assistant_message.js +5 -0
- package/dist/utils/atomic_write.d.ts +6 -2
- package/dist/utils/atomic_write.js +29 -4
- package/dist/utils/checked_shell.d.ts +25 -0
- package/dist/utils/checked_shell.js +107 -0
- package/dist/utils/compaction.d.ts +4 -1
- package/dist/utils/compaction.js +31 -7
- package/dist/utils/context.d.ts +4 -4
- package/dist/utils/context.js +14 -12
- package/dist/utils/deepseek.d.ts +2 -2
- package/dist/utils/deepseek.js +13 -5
- package/dist/utils/ephemeral.js +4 -0
- package/dist/utils/ephemeral_tools.d.ts +18 -0
- package/dist/utils/ephemeral_tools.js +97 -0
- package/dist/utils/jev_client.d.ts +4 -0
- package/dist/utils/jev_client.js +15 -0
- package/dist/utils/model_cache.d.ts +15 -0
- package/dist/utils/model_cache.js +143 -0
- package/dist/utils/models.d.ts +4 -2
- package/dist/utils/models.js +12 -16
- package/dist/utils/reasoning.d.ts +8 -1
- package/dist/utils/reasoning.js +31 -11
- package/dist/utils/router_catalog.d.ts +49 -0
- package/dist/utils/router_catalog.js +271 -0
- package/dist/utils/sandbox.d.ts +9 -0
- package/dist/utils/sandbox.js +118 -15
- package/dist/utils/shell.d.ts +7 -0
- package/dist/utils/shell.js +98 -34
- package/dist/utils/subprocess_env.d.ts +3 -0
- package/dist/utils/subprocess_env.js +27 -1
- package/dist/web/accounts_mirror.d.ts +3 -1
- package/dist/web/accounts_mirror.js +13 -9
- package/dist/web/child_publication.d.ts +17 -0
- package/dist/web/child_publication.js +45 -0
- package/dist/web/mirror_authenticator.d.ts +31 -11
- package/dist/web/mirror_authenticator.js +67 -17
- package/dist/web/mirror_client.d.ts +31 -4
- package/dist/web/mirror_client.js +189 -23
- package/dist/web/mirror_stream.d.ts +84 -22
- package/dist/web/mirror_stream.js +676 -95
- package/dist/web/observer_query_redaction.d.ts +6 -0
- package/dist/web/observer_query_redaction.js +58 -0
- package/dist/web/pane_registry.d.ts +2 -0
- package/dist/web/pane_registry.js +86 -22
- package/dist/web/tool_image.d.ts +6 -0
- package/dist/web/tool_image.js +17 -0
- package/dist/web/view_plugin.d.ts +14 -0
- package/dist/web/view_plugin.js +23 -1
- package/dist/worker/executor.js +31 -12
- package/dist/worker/index.d.ts +1 -0
- package/dist/worker/toolsets.js +3 -1
- package/dist/worker/types.d.ts +12 -1
- package/dist/workflows/registry.js +1 -0
- package/dist/workflows/registry_handle.d.ts +2 -0
- package/dist/workflows/runtime.d.ts +2 -0
- package/dist/workflows/runtime.js +1 -0
- package/dist/workspace_agent.d.ts +7 -0
- package/dist/workspace_agent.js +36 -0
- package/dist/workspace_collision.d.ts +76 -0
- package/dist/workspace_collision.js +688 -0
- package/dist/workspace_layout.d.ts +18 -0
- package/dist/workspace_layout.js +121 -0
- package/dist/workspace_runtime.d.ts +44 -0
- package/dist/workspace_runtime.js +82 -0
- package/dist/workspace_session_context.d.ts +62 -0
- package/dist/workspace_session_context.js +160 -0
- package/dist/zlm-embed.mjs +32518 -9615
- package/dist/zlm.js +1 -0
- package/node_modules/@zerg/model-contracts/LICENSE.md +375 -0
- package/node_modules/@zerg/model-contracts/README.md +90 -0
- package/node_modules/@zerg/model-contracts/index.d.ts +20 -0
- package/node_modules/@zerg/model-contracts/index.js +223 -0
- package/node_modules/@zerg/model-contracts/package.json +8 -0
- package/node_modules/glob/node_modules/brace-expansion/index.js +78 -22
- package/node_modules/glob/node_modules/brace-expansion/package.json +1 -1
- package/node_modules/readdir-glob/node_modules/brace-expansion/index.js +78 -22
- package/node_modules/readdir-glob/node_modules/brace-expansion/package.json +1 -1
- package/package.json +45 -24
- package/packages/model-contracts/LICENSE.md +375 -0
- package/packages/model-contracts/README.md +90 -0
- package/packages/model-contracts/index.d.ts +20 -0
- package/packages/model-contracts/index.js +223 -0
- package/packages/model-contracts/package.json +8 -0
- package/remote-broker/Dockerfile +10 -0
- package/remote-broker/README.md +308 -0
- package/remote-broker/archive.py +1227 -0
- package/remote-broker/cutover.py +761 -0
- package/remote-broker/requirements.txt +5 -0
- package/remote-broker/resources.example.json +6 -0
- package/remote-broker/resources.write-staging.example.json +18 -0
- package/remote-broker/retained.py +686 -0
- package/remote-broker/retained_cleanup.py +550 -0
- package/remote-broker/server.py +648 -0
- package/scripts/build-remote-broker.mjs +13 -0
- package/scripts/ensure-local-packages.mjs +6 -0
- package/scripts/node-pty-helpers.mjs +103 -0
|
@@ -11,9 +11,10 @@ import { randomBytes } from 'crypto';
|
|
|
11
11
|
import { chmodSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'fs';
|
|
12
12
|
import { homedir } from 'os';
|
|
13
13
|
import { join } from 'path';
|
|
14
|
-
import { buildResponsesInput, isValidResponsesTerminal, parseResponsesOutput, readBoundedResponsesText, requireValidResponsesOutputItem, streamResponsesSSE, } from './openai_responses.js';
|
|
14
|
+
import { buildResponsesInput, isValidResponsesTerminal, parseResponsesOutput, readBoundedResponsesText, readBoundedProviderError, requireValidResponsesOutputItem, streamResponsesSSE, } from './openai_responses.js';
|
|
15
15
|
import { RateLimitError, parseResetAt } from './rate_limit.js';
|
|
16
16
|
import { CODEX_LEGACY_PROVIDER } from './provider_ids.js';
|
|
17
|
+
import { CodexBufferedRecovery } from './codex_buffered_recovery.js';
|
|
17
18
|
/**
|
|
18
19
|
* Shared auth file with Codex CLI (~/.codex/auth.json). Both ZTC and Codex CLI
|
|
19
20
|
* read and write this file. ZTC replaces it atomically, so concurrent readers
|
|
@@ -33,6 +34,8 @@ function resolveClientId(fileClientId) {
|
|
|
33
34
|
return process.env.CODEX_OAUTH_CLIENT_ID || fileClientId || DEFAULT_CODEX_CLIENT_ID;
|
|
34
35
|
}
|
|
35
36
|
const CODEX_OAUTH_TIMEOUT_MS = 30_000;
|
|
37
|
+
// Credential refresh is small control-plane JSON, not an inference response.
|
|
38
|
+
const CODEX_OAUTH_RESPONSE_BYTES = 1_048_576;
|
|
36
39
|
function isRecord(value) {
|
|
37
40
|
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
38
41
|
}
|
|
@@ -209,7 +212,7 @@ export class CodexAuthManager {
|
|
|
209
212
|
}
|
|
210
213
|
let rawData;
|
|
211
214
|
try {
|
|
212
|
-
const body = await readBoundedResponsesText(res);
|
|
215
|
+
const body = await readBoundedResponsesText(res, CODEX_OAUTH_RESPONSE_BYTES);
|
|
213
216
|
rawData = JSON.parse(body);
|
|
214
217
|
}
|
|
215
218
|
catch (error) {
|
|
@@ -321,7 +324,7 @@ export class CodexAuthBackend {
|
|
|
321
324
|
return headers;
|
|
322
325
|
}
|
|
323
326
|
/** POST the streaming Responses request, refreshing the token once on 401. */
|
|
324
|
-
async fetchResponses(request, _retried = false) {
|
|
327
|
+
async fetchResponses(request, _retried = false, recovery) {
|
|
325
328
|
const headers = await this.buildHeaders(request.signal);
|
|
326
329
|
const input = buildResponsesInput(request.messages);
|
|
327
330
|
const tools = request.tools.map(t => ({
|
|
@@ -330,9 +333,10 @@ export class CodexAuthBackend {
|
|
|
330
333
|
description: t.description,
|
|
331
334
|
parameters: t.parameters,
|
|
332
335
|
}));
|
|
336
|
+
const system = request.system || 'You are a helpful assistant.';
|
|
333
337
|
const body = {
|
|
334
338
|
model: request.model,
|
|
335
|
-
instructions: request.system
|
|
339
|
+
instructions: request.outputTokenGuidance ? `${system}\nAim for at most ${request.maxTokens} output tokens.` : system,
|
|
336
340
|
input,
|
|
337
341
|
stream: true,
|
|
338
342
|
store: false,
|
|
@@ -344,6 +348,11 @@ export class CodexAuthBackend {
|
|
|
344
348
|
body.tools = tools;
|
|
345
349
|
body.tool_choice = 'auto';
|
|
346
350
|
}
|
|
351
|
+
if (request.outputSchema !== undefined) {
|
|
352
|
+
body.text = { format: {
|
|
353
|
+
type: 'json_schema', name: 'ztc_response', strict: request.outputSchemaStrict ?? false, schema: request.outputSchema,
|
|
354
|
+
} };
|
|
355
|
+
}
|
|
347
356
|
// Codex/GPT reasoning effort + fast mode (Responses API shape). Always
|
|
348
357
|
// request a reasoning summary so the agent's thinking streams to the UI as a
|
|
349
358
|
// collapsed thinking block (gpt-5.x are reasoning models).
|
|
@@ -353,18 +362,20 @@ export class CodexAuthBackend {
|
|
|
353
362
|
if (request.codexFastMode) {
|
|
354
363
|
body.service_tier = 'priority';
|
|
355
364
|
}
|
|
356
|
-
const response = await fetch(`${CODEX_API_BASE}/responses`, {
|
|
365
|
+
const response = await (recovery?.fetch ?? fetch)(`${CODEX_API_BASE}/responses`, {
|
|
357
366
|
method: 'POST',
|
|
358
367
|
headers,
|
|
359
368
|
body: JSON.stringify(body),
|
|
360
369
|
signal: request.signal,
|
|
361
370
|
});
|
|
362
371
|
if (!response.ok) {
|
|
363
|
-
if (response.status === 401 && !_retried) {
|
|
372
|
+
if (response.status === 401 && !_retried && (!recovery || recovery.canPost())) {
|
|
373
|
+
if (recovery)
|
|
374
|
+
await response.body?.cancel();
|
|
364
375
|
await this.authManager.refreshToken(request.signal);
|
|
365
|
-
return this.fetchResponses(request, true);
|
|
376
|
+
return this.fetchResponses(request, true, recovery);
|
|
366
377
|
}
|
|
367
|
-
const errorText = await
|
|
378
|
+
const errorText = await readBoundedProviderError(response);
|
|
368
379
|
if (response.status === 429) {
|
|
369
380
|
// Typed so the rotation engine can cool this account and fail over.
|
|
370
381
|
const now = Date.now();
|
|
@@ -384,12 +395,55 @@ export class CodexAuthBackend {
|
|
|
384
395
|
}
|
|
385
396
|
throw new Error(`Codex API error (${response.status}): ${errorText}`);
|
|
386
397
|
}
|
|
387
|
-
return response;
|
|
398
|
+
return request.maxResponseBytes === undefined ? response : this.boundResponse(response, request.maxResponseBytes);
|
|
399
|
+
}
|
|
400
|
+
boundResponse(response, maxBytes) {
|
|
401
|
+
if (!Number.isSafeInteger(maxBytes) || maxBytes < 1) {
|
|
402
|
+
void response.body?.cancel();
|
|
403
|
+
throw new Error('Codex response byte budget must be a positive integer');
|
|
404
|
+
}
|
|
405
|
+
if (!response.body)
|
|
406
|
+
return response;
|
|
407
|
+
const reader = response.body.getReader();
|
|
408
|
+
let received = 0;
|
|
409
|
+
const body = new ReadableStream({
|
|
410
|
+
async pull(controller) {
|
|
411
|
+
try {
|
|
412
|
+
const { done, value } = await reader.read();
|
|
413
|
+
if (done) {
|
|
414
|
+
controller.close();
|
|
415
|
+
reader.releaseLock();
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
received += value.byteLength;
|
|
419
|
+
if (received > maxBytes) {
|
|
420
|
+
const error = new Error('Codex response byte budget exceeded');
|
|
421
|
+
controller.error(error);
|
|
422
|
+
await reader.cancel(error);
|
|
423
|
+
reader.releaseLock();
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
controller.enqueue(value);
|
|
427
|
+
}
|
|
428
|
+
catch (error) {
|
|
429
|
+
controller.error(error);
|
|
430
|
+
}
|
|
431
|
+
},
|
|
432
|
+
async cancel(reason) {
|
|
433
|
+
await reader.cancel(reason);
|
|
434
|
+
reader.releaseLock();
|
|
435
|
+
},
|
|
436
|
+
}, { highWaterMark: 0 });
|
|
437
|
+
return new Response(body, { status: response.status, headers: response.headers });
|
|
388
438
|
}
|
|
389
439
|
/** Buffered path — kept as the fallback when streaming can't run. */
|
|
390
440
|
async generate(request) {
|
|
441
|
+
if (request.bufferedRecovery) {
|
|
442
|
+
const recovery = new CodexBufferedRecovery(request.bufferedRecovery, request.signal);
|
|
443
|
+
return recovery.run(async () => this.parseSSEResponse(await this.fetchResponses(request, false, recovery), request.maxResponseBytes));
|
|
444
|
+
}
|
|
391
445
|
const response = await this.fetchResponses(request);
|
|
392
|
-
return this.parseSSEResponse(response);
|
|
446
|
+
return this.parseSSEResponse(response, request.maxResponseBytes);
|
|
393
447
|
}
|
|
394
448
|
/**
|
|
395
449
|
* Real incremental streaming over the Responses API SSE. Delegates to the
|
|
@@ -398,15 +452,15 @@ export class CodexAuthBackend {
|
|
|
398
452
|
* tool_use + usage + stopReason assembled from the completed output items.
|
|
399
453
|
*/
|
|
400
454
|
async *generateStream(request) {
|
|
401
|
-
yield* streamResponsesSSE(await this.fetchResponses(request));
|
|
455
|
+
yield* streamResponsesSSE(await this.fetchResponses(request), request.maxResponseBytes);
|
|
402
456
|
}
|
|
403
457
|
/**
|
|
404
458
|
* Parse SSE stream and build a BackendResponse.
|
|
405
459
|
* The ChatGPT backend streams output items via response.output_item.done
|
|
406
460
|
* events, while response.completed carries usage but has output: [].
|
|
407
461
|
*/
|
|
408
|
-
async parseSSEResponse(response) {
|
|
409
|
-
const text = await readBoundedResponsesText(response);
|
|
462
|
+
async parseSSEResponse(response, maxBytes) {
|
|
463
|
+
const text = await readBoundedResponsesText(response, maxBytes);
|
|
410
464
|
const outputItems = [];
|
|
411
465
|
let usage;
|
|
412
466
|
let terminalStatus;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { BufferedRecoveryRequest } from './types.js';
|
|
2
|
+
export declare class CodexBufferedDeadlineError extends Error {
|
|
3
|
+
constructor();
|
|
4
|
+
}
|
|
5
|
+
/** Pull-through transport only. The caller retains its existing SSE/output parser. */
|
|
6
|
+
export declare class CodexBufferedRecovery {
|
|
7
|
+
private readonly policy;
|
|
8
|
+
private readonly parent?;
|
|
9
|
+
private readonly controller;
|
|
10
|
+
private readonly deadlineTimer;
|
|
11
|
+
private readonly onParentAbort;
|
|
12
|
+
private readonly epochAtStart;
|
|
13
|
+
private readonly monotonicAtStart;
|
|
14
|
+
private readonly interrupted;
|
|
15
|
+
private readonly duration;
|
|
16
|
+
private posts;
|
|
17
|
+
private body;
|
|
18
|
+
private last;
|
|
19
|
+
constructor(policy: BufferedRecoveryRequest, parent?: AbortSignal | undefined);
|
|
20
|
+
/** Epoch-shaped stamps share one monotonic clock across both physical attempts. */
|
|
21
|
+
private now;
|
|
22
|
+
canPost(): boolean;
|
|
23
|
+
private emit;
|
|
24
|
+
private canRecover;
|
|
25
|
+
run<T>(complete: () => Promise<T>): Promise<T>;
|
|
26
|
+
readonly fetch: (url: string, init: RequestInit) => Promise<Response>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
export class CodexBufferedDeadlineError extends Error {
|
|
3
|
+
constructor() { super('Buffered Codex absolute deadline exceeded'); this.name = 'CodexBufferedDeadlineError'; }
|
|
4
|
+
}
|
|
5
|
+
/** Pull-through transport only. The caller retains its existing SSE/output parser. */
|
|
6
|
+
export class CodexBufferedRecovery {
|
|
7
|
+
policy;
|
|
8
|
+
parent;
|
|
9
|
+
controller = new AbortController();
|
|
10
|
+
deadlineTimer;
|
|
11
|
+
onParentAbort;
|
|
12
|
+
epochAtStart = Date.now();
|
|
13
|
+
monotonicAtStart = performance.now();
|
|
14
|
+
interrupted;
|
|
15
|
+
duration;
|
|
16
|
+
posts = 0;
|
|
17
|
+
body;
|
|
18
|
+
last;
|
|
19
|
+
constructor(policy, parent) {
|
|
20
|
+
this.policy = policy;
|
|
21
|
+
this.parent = parent;
|
|
22
|
+
this.interrupted = policy.version === 'codex-buffered-idle-overload-interrupted-v1' || policy.version === 'codex-buffered-idle-overload-duration-interrupted-v1';
|
|
23
|
+
this.duration = policy.version === 'codex-buffered-idle-overload-duration-v1' || policy.version === 'codex-buffered-idle-overload-duration-interrupted-v1';
|
|
24
|
+
if (!['codex-buffered-idle-v1', 'codex-buffered-idle-overload-v1', 'codex-buffered-idle-overload-duration-v1', 'codex-buffered-idle-overload-interrupted-v1', 'codex-buffered-idle-overload-duration-interrupted-v1'].includes(policy.version) || policy.idleTimeoutMs !== 8000
|
|
25
|
+
|| (this.duration && (!('firstBodyTimeoutMs' in policy) || policy.firstBodyTimeoutMs !== 30000))
|
|
26
|
+
|| !Number.isFinite(policy.deadlineAtMs))
|
|
27
|
+
throw new Error('Unsupported buffered Codex recovery policy');
|
|
28
|
+
this.onParentAbort = () => this.controller.abort(parent?.reason);
|
|
29
|
+
if (parent?.aborted)
|
|
30
|
+
this.onParentAbort();
|
|
31
|
+
else
|
|
32
|
+
parent?.addEventListener('abort', this.onParentAbort, { once: true });
|
|
33
|
+
this.deadlineTimer = setTimeout(() => this.controller.abort(new CodexBufferedDeadlineError()), Math.max(0, policy.deadlineAtMs - this.now()));
|
|
34
|
+
}
|
|
35
|
+
/** Epoch-shaped stamps share one monotonic clock across both physical attempts. */
|
|
36
|
+
now() {
|
|
37
|
+
return this.epochAtStart + (performance.now() - this.monotonicAtStart);
|
|
38
|
+
}
|
|
39
|
+
canPost() {
|
|
40
|
+
return this.posts < 2 && !this.controller.signal.aborted && this.now() < this.policy.deadlineAtMs;
|
|
41
|
+
}
|
|
42
|
+
emit(event) {
|
|
43
|
+
try {
|
|
44
|
+
this.policy.onAttempt?.({ ...event });
|
|
45
|
+
}
|
|
46
|
+
catch { /* Missing metadata invalidates capture, not gameplay. */ }
|
|
47
|
+
}
|
|
48
|
+
canRecover() {
|
|
49
|
+
const event = this.last?.event;
|
|
50
|
+
return event?.reason === 'idle' || (this.duration && event?.reason === 'body-duration')
|
|
51
|
+
|| (this.interrupted && event?.reason === 'body-interrupted')
|
|
52
|
+
|| (this.policy.version !== 'codex-buffered-idle-v1'
|
|
53
|
+
&& event?.reason === 'complete' && event.status === 200 && event.eofAtMs !== undefined
|
|
54
|
+
&& event.providerFailure === 'provider-overload');
|
|
55
|
+
}
|
|
56
|
+
async run(complete) {
|
|
57
|
+
try {
|
|
58
|
+
while (true) {
|
|
59
|
+
this.controller.signal.throwIfAborted();
|
|
60
|
+
try {
|
|
61
|
+
return await complete();
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
if (!this.canRecover() || !this.canPost())
|
|
65
|
+
throw error;
|
|
66
|
+
// Cancellation must finish before the next POST. The same absolute abort still wins.
|
|
67
|
+
await new Promise((resolve, reject) => {
|
|
68
|
+
const abort = () => reject(this.controller.signal.reason);
|
|
69
|
+
this.controller.signal.addEventListener('abort', abort, { once: true });
|
|
70
|
+
void this.last.settled.then(resolve, reject).finally(() => this.controller.signal.removeEventListener('abort', abort));
|
|
71
|
+
if (this.controller.signal.aborted)
|
|
72
|
+
abort();
|
|
73
|
+
});
|
|
74
|
+
this.controller.signal.throwIfAborted();
|
|
75
|
+
if (!this.canRecover() || !this.canPost())
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
clearTimeout(this.deadlineTimer);
|
|
82
|
+
this.parent?.removeEventListener('abort', this.onParentAbort);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
fetch = async (url, init) => {
|
|
86
|
+
this.controller.signal.throwIfAborted();
|
|
87
|
+
if (!this.canPost())
|
|
88
|
+
throw new Error('Buffered Codex POST budget exhausted');
|
|
89
|
+
this.body ??= String(init.body);
|
|
90
|
+
const attemptController = new AbortController();
|
|
91
|
+
const signal = AbortSignal.any([this.controller.signal, attemptController.signal]);
|
|
92
|
+
const event = {
|
|
93
|
+
trigger: this.posts === 0 ? 'initial' : this.last?.event.reason === 'idle' ? 'body-idle' : this.last?.event.reason === 'body-duration' ? 'body-duration' : this.last?.event.reason === 'body-interrupted' ? 'body-interrupted' : this.last?.event.providerFailure === 'provider-overload' ? 'provider-overload' : 'auth-refresh',
|
|
94
|
+
timingClock: 'monotonic-epoch-v1', type: 'started', attempt: ++this.posts, bodySha256: createHash('sha256').update(this.body).digest('hex'),
|
|
95
|
+
bodyBytes: Buffer.byteLength(this.body), startedAtMs: this.now(), deadlineAtMs: this.policy.deadlineAtMs, bytes: 0, chunks: 0, usage: 'unknown',
|
|
96
|
+
};
|
|
97
|
+
let settle;
|
|
98
|
+
const settled = new Promise(resolve => { settle = resolve; });
|
|
99
|
+
this.last = { event, settled };
|
|
100
|
+
this.emit(event);
|
|
101
|
+
let finished = false;
|
|
102
|
+
let idleTimer;
|
|
103
|
+
let bodyTimer;
|
|
104
|
+
let removeAbort = () => { };
|
|
105
|
+
const finish = (reason) => {
|
|
106
|
+
if (finished)
|
|
107
|
+
return;
|
|
108
|
+
finished = true;
|
|
109
|
+
clearTimeout(idleTimer);
|
|
110
|
+
clearTimeout(bodyTimer);
|
|
111
|
+
removeAbort();
|
|
112
|
+
event.type = 'settled';
|
|
113
|
+
event.reason = reason;
|
|
114
|
+
event.endedAtMs = this.now();
|
|
115
|
+
this.emit(event);
|
|
116
|
+
settle();
|
|
117
|
+
};
|
|
118
|
+
let response;
|
|
119
|
+
try {
|
|
120
|
+
response = await fetch(url, { ...init, body: this.body, signal });
|
|
121
|
+
event.status = response.status;
|
|
122
|
+
event.headersAtMs = this.now();
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
if (signal.aborted)
|
|
126
|
+
event.abortAtMs = this.now();
|
|
127
|
+
finish(signal.aborted ? 'abort' : 'transport-error');
|
|
128
|
+
throw error;
|
|
129
|
+
}
|
|
130
|
+
if (!response.body) {
|
|
131
|
+
event.eofAtMs = this.now();
|
|
132
|
+
finish(response.ok ? 'complete' : 'http-error');
|
|
133
|
+
return response;
|
|
134
|
+
}
|
|
135
|
+
const reader = response.body.getReader();
|
|
136
|
+
const decoder = new TextDecoder();
|
|
137
|
+
let lines = '';
|
|
138
|
+
let retryAllowed = true;
|
|
139
|
+
let overload = false;
|
|
140
|
+
let stopping = false;
|
|
141
|
+
let pending;
|
|
142
|
+
let output;
|
|
143
|
+
const stop = async (reason, error) => {
|
|
144
|
+
if (stopping || finished)
|
|
145
|
+
return settled;
|
|
146
|
+
stopping = true;
|
|
147
|
+
clearTimeout(idleTimer);
|
|
148
|
+
clearTimeout(bodyTimer);
|
|
149
|
+
event.reason = reason;
|
|
150
|
+
event.cancelledAtMs = this.now();
|
|
151
|
+
const cancellation = reader.cancel(error);
|
|
152
|
+
event.abortAtMs = this.now();
|
|
153
|
+
attemptController.abort(error);
|
|
154
|
+
if (reason !== 'consumer-cancel')
|
|
155
|
+
output.error(error);
|
|
156
|
+
try {
|
|
157
|
+
await cancellation;
|
|
158
|
+
await pending?.catch(() => { });
|
|
159
|
+
}
|
|
160
|
+
catch (failure) {
|
|
161
|
+
event.reason = 'transport-error';
|
|
162
|
+
throw failure;
|
|
163
|
+
}
|
|
164
|
+
finally {
|
|
165
|
+
reader.releaseLock();
|
|
166
|
+
finish(response.ok ? event.reason : 'http-error');
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
const armCutoff = (reason, observedAtMs, timeoutMs) => {
|
|
170
|
+
const check = () => {
|
|
171
|
+
if (finished || stopping || !retryAllowed || this.posts !== 1)
|
|
172
|
+
return;
|
|
173
|
+
const remaining = observedAtMs + timeoutMs - this.now();
|
|
174
|
+
if (remaining > 0) {
|
|
175
|
+
const timer = setTimeout(check, Math.ceil(remaining));
|
|
176
|
+
if (reason === 'idle')
|
|
177
|
+
idleTimer = timer;
|
|
178
|
+
else
|
|
179
|
+
bodyTimer = timer;
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
void stop(reason, new Error(reason === 'idle' ? 'Buffered Codex body idle cutoff' : 'Buffered Codex first body duration cutoff')).catch(() => { });
|
|
183
|
+
};
|
|
184
|
+
const timer = setTimeout(check, timeoutMs);
|
|
185
|
+
if (reason === 'idle')
|
|
186
|
+
idleTimer = timer;
|
|
187
|
+
else
|
|
188
|
+
bodyTimer = timer;
|
|
189
|
+
};
|
|
190
|
+
const observeLine = (line) => {
|
|
191
|
+
if (!line.startsWith('data:'))
|
|
192
|
+
return;
|
|
193
|
+
const data = line.slice(5).trim();
|
|
194
|
+
let type;
|
|
195
|
+
let message;
|
|
196
|
+
try {
|
|
197
|
+
const parsed = data === '[DONE]' ? { type: '[DONE]' } : JSON.parse(data);
|
|
198
|
+
type = parsed.type;
|
|
199
|
+
message = (parsed.response?.error ?? parsed.error)?.message;
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
retryAllowed = false;
|
|
203
|
+
overload = false;
|
|
204
|
+
clearTimeout(bodyTimer);
|
|
205
|
+
}
|
|
206
|
+
if (type && ['response.completed', 'response.incomplete', 'response.failed', 'error', '[DONE]'].includes(type)) {
|
|
207
|
+
overload = this.policy.version !== 'codex-buffered-idle-v1' && retryAllowed
|
|
208
|
+
&& type === 'response.failed' && message === 'Our servers are currently overloaded. Please try again later.';
|
|
209
|
+
if (!this.interrupted || event.semanticTerminal === undefined) {
|
|
210
|
+
event.semanticTerminal = type;
|
|
211
|
+
event.semanticTerminalAtMs = this.now();
|
|
212
|
+
}
|
|
213
|
+
retryAllowed = false;
|
|
214
|
+
clearTimeout(bodyTimer);
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
const observe = (chunk) => {
|
|
218
|
+
event.bytes += chunk.byteLength;
|
|
219
|
+
event.chunks += 1;
|
|
220
|
+
event.lastChunkAtMs = this.now();
|
|
221
|
+
if (this.duration && response.status === 200
|
|
222
|
+
&& chunk.byteLength > 0 && event.firstChunkAtMs === undefined) {
|
|
223
|
+
event.firstChunkAtMs = event.lastChunkAtMs;
|
|
224
|
+
if (retryAllowed && this.posts === 1)
|
|
225
|
+
armCutoff('body-duration', event.firstChunkAtMs, 30000);
|
|
226
|
+
}
|
|
227
|
+
lines += decoder.decode(chunk, { stream: true });
|
|
228
|
+
let end;
|
|
229
|
+
while ((end = lines.indexOf('\n')) !== -1) {
|
|
230
|
+
const line = lines.slice(0, end).trim();
|
|
231
|
+
lines = lines.slice(end + 1);
|
|
232
|
+
observeLine(line);
|
|
233
|
+
}
|
|
234
|
+
clearTimeout(idleTimer);
|
|
235
|
+
if (response.status === 200 && retryAllowed && this.posts === 1) {
|
|
236
|
+
armCutoff('idle', event.lastChunkAtMs, this.policy.idleTimeoutMs);
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
const now = () => this.now();
|
|
240
|
+
const interruptionPolicy = this.interrupted;
|
|
241
|
+
const overloadPolicy = this.policy.version !== 'codex-buffered-idle-v1';
|
|
242
|
+
const stream = new ReadableStream({
|
|
243
|
+
start(controller) {
|
|
244
|
+
output = controller;
|
|
245
|
+
const abort = () => { void stop('abort', signal.reason).catch(() => { }); };
|
|
246
|
+
signal.addEventListener('abort', abort, { once: true });
|
|
247
|
+
removeAbort = () => signal.removeEventListener('abort', abort);
|
|
248
|
+
if (signal.aborted)
|
|
249
|
+
abort();
|
|
250
|
+
},
|
|
251
|
+
async pull(controller) {
|
|
252
|
+
try {
|
|
253
|
+
pending = reader.read();
|
|
254
|
+
const { done, value } = await pending;
|
|
255
|
+
if (stopping)
|
|
256
|
+
return;
|
|
257
|
+
if (done) {
|
|
258
|
+
if (overloadPolicy) {
|
|
259
|
+
observeLine((lines + decoder.decode()).trim());
|
|
260
|
+
if (overload && response.status === 200)
|
|
261
|
+
event.providerFailure = 'provider-overload';
|
|
262
|
+
}
|
|
263
|
+
event.eofAtMs = now();
|
|
264
|
+
reader.releaseLock();
|
|
265
|
+
finish(response.ok ? 'complete' : 'http-error');
|
|
266
|
+
if (interruptionPolicy && response.ok && event.semanticTerminal !== 'response.completed') {
|
|
267
|
+
controller.error(new Error('Buffered Codex body ended without a completed response'));
|
|
268
|
+
}
|
|
269
|
+
else
|
|
270
|
+
controller.close();
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
observe(value);
|
|
274
|
+
controller.enqueue(value);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
if (stopping)
|
|
279
|
+
return;
|
|
280
|
+
// A terminal event without a newline must still prohibit replacing its output.
|
|
281
|
+
if (interruptionPolicy)
|
|
282
|
+
observeLine((lines + decoder.decode()).trim());
|
|
283
|
+
const interrupted = interruptionPolicy && !signal.aborted && response.status === 200 && event.bytes > 0 && retryAllowed;
|
|
284
|
+
reader.releaseLock();
|
|
285
|
+
finish(signal.aborted ? 'abort' : interrupted ? 'body-interrupted' : 'transport-error');
|
|
286
|
+
controller.error(error);
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
cancel: reason => stop('consumer-cancel', reason),
|
|
290
|
+
}, { highWaterMark: 0 });
|
|
291
|
+
return new Response(stream, { status: response.status, headers: response.headers });
|
|
292
|
+
};
|
|
293
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { reasoningRequestParams } from '@zerg/model-contracts';
|
|
1
2
|
import { BaseBackend } from './base.js';
|
|
2
3
|
export class GeminiBackend extends BaseBackend {
|
|
3
4
|
apiKey;
|
|
@@ -13,7 +14,7 @@ export class GeminiBackend extends BaseBackend {
|
|
|
13
14
|
if (typeof content === 'string') {
|
|
14
15
|
return [{ text: content }];
|
|
15
16
|
}
|
|
16
|
-
return content.map(block => {
|
|
17
|
+
return content.filter(block => block.type !== 'thinking' && block.type !== 'redacted_thinking').map(block => {
|
|
17
18
|
if (block.type === 'text') {
|
|
18
19
|
return { text: block.text };
|
|
19
20
|
}
|
|
@@ -33,6 +34,7 @@ export class GeminiBackend extends BaseBackend {
|
|
|
33
34
|
});
|
|
34
35
|
};
|
|
35
36
|
const body = {
|
|
37
|
+
...reasoningRequestParams('gemini', request.model, request.codexEffort),
|
|
36
38
|
systemInstruction: { parts: [{ text: request.system }] },
|
|
37
39
|
contents: request.messages.map(m => ({
|
|
38
40
|
role: m.role === 'assistant' ? 'model' : 'user',
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { HttpErrorDiagnostic } from './types.js';
|
|
2
|
+
type BodyReadState = HttpErrorDiagnostic['bodyReadState'];
|
|
3
|
+
/** Retains the canonical API-error envelope consumed by admission and OAuth adapters. */
|
|
4
|
+
export declare class BackendHttpError extends Error {
|
|
5
|
+
readonly status: number;
|
|
6
|
+
readonly body: string;
|
|
7
|
+
readonly httpError: HttpErrorDiagnostic;
|
|
8
|
+
/** Transport control only; never copied into the public body diagnostic. */
|
|
9
|
+
readonly retryAtMs?: number;
|
|
10
|
+
constructor(status: number, body: string, options?: {
|
|
11
|
+
prefix?: string;
|
|
12
|
+
headers?: RequestInit['headers'];
|
|
13
|
+
bodyReadState?: BodyReadState;
|
|
14
|
+
retryAfter?: string | null;
|
|
15
|
+
/** Router defines x-ratelimit-reset as relative seconds, not an epoch. */
|
|
16
|
+
rateLimitReset?: string | null;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/** Respect a server's minimum wait, then spread concurrent callers by up to one second. */
|
|
20
|
+
export declare function retryAfterDelayMs(error: unknown): number;
|
|
21
|
+
/** Read at most 16 KiB, then cancel. A failed body never erases already-known status. */
|
|
22
|
+
export declare function readHttpErrorBody(response: Response, signal?: AbortSignal): Promise<{
|
|
23
|
+
body: string;
|
|
24
|
+
bodyReadState: BodyReadState;
|
|
25
|
+
}>;
|
|
26
|
+
export {};
|