@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
|
@@ -99,23 +99,35 @@ function isValidResponsesTerminalEvent(eventType, value, observedOutput) {
|
|
|
99
99
|
&& value.status === expectedStatus
|
|
100
100
|
&& isValidResponsesTerminal(value, observedOutput);
|
|
101
101
|
}
|
|
102
|
-
export const MAX_RESPONSES_RESPONSE_BYTES =
|
|
103
|
-
|
|
104
|
-
|
|
102
|
+
export const MAX_RESPONSES_RESPONSE_BYTES = 64 * 1024 * 1024;
|
|
103
|
+
export const MAX_PROVIDER_ERROR_BYTES = 64 * 1024;
|
|
104
|
+
export const MAX_RESPONSES_SSE_EVENT_BYTES = 8 * 1024 * 1024;
|
|
105
|
+
// One turn cannot retain an unbounded sequence of individually valid items.
|
|
106
|
+
export const MAX_RESPONSES_SSE_STREAM_BYTES = 32 * 1024 * 1024;
|
|
107
|
+
class ResponsesBodyLimitError extends Error {
|
|
108
|
+
constructor(maxBytes) {
|
|
109
|
+
super(`Responses API response exceeded ${maxBytes} bytes`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function responseLimitError(maxBytes) {
|
|
113
|
+
return new ResponsesBodyLimitError(maxBytes);
|
|
105
114
|
}
|
|
106
|
-
function rejectOversizedDeclaredBody(response) {
|
|
115
|
+
function rejectOversizedDeclaredBody(response, maxBytes) {
|
|
116
|
+
if (!Number.isSafeInteger(maxBytes) || maxBytes < 1) {
|
|
117
|
+
throw new Error('Responses API byte limit must be a positive safe integer');
|
|
118
|
+
}
|
|
107
119
|
const declaredLength = Number(response.headers.get('content-length'));
|
|
108
|
-
if (Number.isFinite(declaredLength) && declaredLength >
|
|
109
|
-
throw responseLimitError();
|
|
120
|
+
if (Number.isFinite(declaredLength) && declaredLength > maxBytes) {
|
|
121
|
+
throw responseLimitError(maxBytes);
|
|
110
122
|
}
|
|
111
123
|
}
|
|
112
124
|
/** Read a provider body without allowing fetch helpers to buffer it without limit. */
|
|
113
|
-
export async function readBoundedResponsesText(response) {
|
|
114
|
-
rejectOversizedDeclaredBody(response);
|
|
125
|
+
export async function readBoundedResponsesText(response, maxBytes = MAX_RESPONSES_RESPONSE_BYTES) {
|
|
126
|
+
rejectOversizedDeclaredBody(response, maxBytes);
|
|
115
127
|
if (!response.body) {
|
|
116
128
|
const text = await response.text();
|
|
117
|
-
if (Buffer.byteLength(text, 'utf8') >
|
|
118
|
-
throw responseLimitError();
|
|
129
|
+
if (Buffer.byteLength(text, 'utf8') > maxBytes) {
|
|
130
|
+
throw responseLimitError(maxBytes);
|
|
119
131
|
}
|
|
120
132
|
return text;
|
|
121
133
|
}
|
|
@@ -128,9 +140,9 @@ export async function readBoundedResponsesText(response) {
|
|
|
128
140
|
const { done, value } = await reader.read();
|
|
129
141
|
if (done)
|
|
130
142
|
break;
|
|
131
|
-
if (totalBytes + value.byteLength >
|
|
143
|
+
if (totalBytes + value.byteLength > maxBytes) {
|
|
132
144
|
await reader.cancel().catch(() => undefined);
|
|
133
|
-
throw responseLimitError();
|
|
145
|
+
throw responseLimitError(maxBytes);
|
|
134
146
|
}
|
|
135
147
|
totalBytes += value.byteLength;
|
|
136
148
|
parts.push(decoder.decode(value, { stream: true }));
|
|
@@ -142,6 +154,19 @@ export async function readBoundedResponsesText(response) {
|
|
|
142
154
|
reader.releaseLock();
|
|
143
155
|
}
|
|
144
156
|
}
|
|
157
|
+
/** Keep the HTTP status authoritative when an oversized diagnostic must be omitted. */
|
|
158
|
+
export async function readBoundedProviderError(response) {
|
|
159
|
+
try {
|
|
160
|
+
return await readBoundedResponsesText(response, MAX_PROVIDER_ERROR_BYTES);
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
if (!(error instanceof ResponsesBodyLimitError))
|
|
164
|
+
throw error;
|
|
165
|
+
// Declared oversize responses fail before acquiring a reader; cancel those too.
|
|
166
|
+
await response.body?.cancel().catch(() => undefined);
|
|
167
|
+
return `Provider response exceeded ${MAX_PROVIDER_ERROR_BYTES} bytes; body omitted.`;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
145
170
|
// ─── Exported helpers for input/output conversion ───────────────────
|
|
146
171
|
/** Convert internal LlmMessage[] into Responses API input items. */
|
|
147
172
|
export function buildResponsesInput(messages) {
|
|
@@ -281,8 +306,9 @@ export function parseResponsesOutput(data) {
|
|
|
281
306
|
* request was sent with `stream: true`). If the body isn't readable (rare), it
|
|
282
307
|
* buffers the SSE text and parses it whole — the same events, just not live.
|
|
283
308
|
*/
|
|
284
|
-
export async function* streamResponsesSSE(response) {
|
|
285
|
-
rejectOversizedDeclaredBody(response);
|
|
309
|
+
export async function* streamResponsesSSE(response, maxBytes = MAX_RESPONSES_SSE_STREAM_BYTES) {
|
|
310
|
+
rejectOversizedDeclaredBody(response, maxBytes);
|
|
311
|
+
const streamLimit = Math.min(maxBytes, MAX_RESPONSES_SSE_STREAM_BYTES);
|
|
286
312
|
const outputItems = [];
|
|
287
313
|
let usage;
|
|
288
314
|
let terminalEventSeen = false;
|
|
@@ -371,49 +397,67 @@ export async function* streamResponsesSSE(response) {
|
|
|
371
397
|
if (response.body) {
|
|
372
398
|
const reader = response.body.getReader();
|
|
373
399
|
const decoder = new TextDecoder();
|
|
374
|
-
|
|
400
|
+
const lineParts = [];
|
|
401
|
+
let lineBytes = 0;
|
|
375
402
|
let totalBytes = 0;
|
|
403
|
+
const appendLinePart = (part) => {
|
|
404
|
+
lineBytes += Buffer.byteLength(part, 'utf8');
|
|
405
|
+
if (lineBytes > MAX_RESPONSES_SSE_EVENT_BYTES) {
|
|
406
|
+
throw new Error(`Responses SSE event exceeded ${MAX_RESPONSES_SSE_EVENT_BYTES} bytes`);
|
|
407
|
+
}
|
|
408
|
+
if (part)
|
|
409
|
+
lineParts.push(part);
|
|
410
|
+
};
|
|
376
411
|
try {
|
|
377
412
|
for (;;) {
|
|
378
413
|
const { done, value } = await reader.read();
|
|
379
414
|
if (done)
|
|
380
415
|
break;
|
|
381
|
-
const remaining =
|
|
416
|
+
const remaining = streamLimit - totalBytes;
|
|
382
417
|
const overflow = value.byteLength > remaining;
|
|
383
|
-
const accepted = overflow ? value.subarray(0,
|
|
418
|
+
const accepted = overflow ? value.subarray(0, remaining) : value;
|
|
384
419
|
totalBytes += accepted.byteLength;
|
|
385
|
-
|
|
420
|
+
const decoded = decoder.decode(accepted, { stream: true });
|
|
421
|
+
let offset = 0;
|
|
386
422
|
let nl;
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
423
|
+
// Search only newly decoded bytes. Join a split line once, when its
|
|
424
|
+
// delimiter arrives, instead of repeatedly rescanning its full prefix.
|
|
425
|
+
while ((nl = decoded.indexOf('\n', offset)) >= 0) {
|
|
426
|
+
appendLinePart(decoded.slice(offset, nl));
|
|
427
|
+
handleLine(lineParts.join(''));
|
|
428
|
+
lineParts.length = 0;
|
|
429
|
+
lineBytes = 0;
|
|
430
|
+
offset = nl + 1;
|
|
394
431
|
while (pending.length)
|
|
395
432
|
yield pending.shift();
|
|
396
433
|
}
|
|
434
|
+
appendLinePart(decoded.slice(offset));
|
|
397
435
|
if (overflow) {
|
|
398
|
-
|
|
399
|
-
|
|
436
|
+
if (maxBytes < MAX_RESPONSES_SSE_STREAM_BYTES)
|
|
437
|
+
throw responseLimitError(maxBytes);
|
|
438
|
+
throw new Error(`Responses SSE stream exceeded ${MAX_RESPONSES_SSE_STREAM_BYTES} bytes`);
|
|
400
439
|
}
|
|
401
440
|
}
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
handleLine(buffer);
|
|
441
|
+
appendLinePart(decoder.decode());
|
|
442
|
+
if (lineParts.length)
|
|
443
|
+
handleLine(lineParts.join(''));
|
|
406
444
|
while (pending.length)
|
|
407
445
|
yield pending.shift();
|
|
408
446
|
}
|
|
447
|
+
catch (error) {
|
|
448
|
+
await reader.cancel().catch(() => undefined);
|
|
449
|
+
throw error;
|
|
450
|
+
}
|
|
409
451
|
finally {
|
|
410
452
|
reader.releaseLock();
|
|
411
453
|
}
|
|
412
454
|
}
|
|
413
455
|
else {
|
|
414
456
|
// No streamable body (rare) — buffer the SSE text and parse it whole.
|
|
415
|
-
const text = await readBoundedResponsesText(response);
|
|
457
|
+
const text = await readBoundedResponsesText(response, streamLimit);
|
|
416
458
|
for (const rawLine of text.split('\n')) {
|
|
459
|
+
if (Buffer.byteLength(rawLine, 'utf8') > MAX_RESPONSES_SSE_EVENT_BYTES)
|
|
460
|
+
throw new Error(`Responses SSE event exceeded ${MAX_RESPONSES_SSE_EVENT_BYTES} bytes`);
|
|
417
461
|
handleLine(rawLine);
|
|
418
462
|
// Drain per-line so a same-payload delta yields before a later failure throws.
|
|
419
463
|
while (pending.length)
|
|
@@ -520,7 +564,7 @@ export class OpenAIResponsesBackend extends BaseBackend {
|
|
|
520
564
|
'Check network access, proxy configuration, and API key/model access.');
|
|
521
565
|
}
|
|
522
566
|
if (!response.ok) {
|
|
523
|
-
const errorText = await
|
|
567
|
+
const errorText = await readBoundedProviderError(response);
|
|
524
568
|
throw new Error(`API error (${response.status}): ${errorText}`);
|
|
525
569
|
}
|
|
526
570
|
return response;
|
|
@@ -7,3 +7,4 @@ export declare function normalizeProviderId(provider: string): string;
|
|
|
7
7
|
export declare function isCodexAppServerProvider(provider: string): boolean;
|
|
8
8
|
export declare function isCodexLegacyProvider(provider: string): boolean;
|
|
9
9
|
export declare function getProviderDisplayName(provider: string): string;
|
|
10
|
+
export declare function isLocalSubscriptionProvider(provider: string): boolean;
|
|
@@ -37,3 +37,7 @@ export function getProviderDisplayName(provider) {
|
|
|
37
37
|
return provider;
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
+
export function isLocalSubscriptionProvider(provider) {
|
|
41
|
+
return ['codex_app_server', 'codex_legacy', 'claude_code', 'claude-code', 'claude_code_direct', 'claude-code-direct', 'kimi_code', 'kimi-code']
|
|
42
|
+
.includes(normalizeProviderId(provider));
|
|
43
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { isIncompleteModelResponse } from '../completion_state.js';
|
|
3
3
|
import { transportErrorCode } from './transport_errors.js';
|
|
4
|
-
|
|
4
|
+
import { BackendHttpError } from './http_error.js';
|
|
5
|
+
/** One collector per logical backend call, with timings and bounded, redacted HTTP failure details. */
|
|
5
6
|
class RequestMeter {
|
|
6
7
|
request;
|
|
7
8
|
metrics;
|
|
@@ -81,11 +82,16 @@ class RequestMeter {
|
|
|
81
82
|
this.metrics.outcome = isIncompleteModelResponse(event.stopReason) ? 'error' : 'success';
|
|
82
83
|
}
|
|
83
84
|
observeStreamError(error) {
|
|
85
|
+
this.observeError(error);
|
|
84
86
|
const attempt = this.metrics.transportAttempts?.at(-1);
|
|
85
87
|
if (!attempt || attempt.phase === 'before_headers')
|
|
86
88
|
return;
|
|
87
89
|
attempt.phase = 'stream';
|
|
88
|
-
attempt.errorCode = transportErrorCode(error);
|
|
90
|
+
attempt.errorCode = transportErrorCode(error) ?? attempt.errorCode;
|
|
91
|
+
}
|
|
92
|
+
observeError(error) {
|
|
93
|
+
if (error instanceof BackendHttpError)
|
|
94
|
+
this.metrics.httpError = error.httpError;
|
|
89
95
|
}
|
|
90
96
|
finish() {
|
|
91
97
|
this.metrics.totalMs = this.elapsed();
|
|
@@ -105,6 +111,10 @@ export async function measureResponse(request, generate) {
|
|
|
105
111
|
meter.metrics.outcome = isIncompleteModelResponse(response.stopReason) ? 'error' : 'success';
|
|
106
112
|
return response;
|
|
107
113
|
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
meter.observeError(error);
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
108
118
|
finally {
|
|
109
119
|
meter.finish();
|
|
110
120
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { ToolDefinition } from '../../types.js';
|
|
2
|
-
import type { Message } from '../../types.js';
|
|
1
|
+
import type { ToolDefinition, Message } from '../../types.js';
|
|
3
2
|
export interface RequestTextBlock {
|
|
4
3
|
type: 'text';
|
|
5
4
|
text: string;
|
|
@@ -37,7 +36,17 @@ export interface ToolUseRequestBlock {
|
|
|
37
36
|
name: string;
|
|
38
37
|
input: Record<string, unknown>;
|
|
39
38
|
}
|
|
40
|
-
export
|
|
39
|
+
export interface ThinkingBlock {
|
|
40
|
+
type: 'thinking';
|
|
41
|
+
thinking: string;
|
|
42
|
+
/** Opaque provider signature; never alter or synthesize it. */
|
|
43
|
+
signature: string;
|
|
44
|
+
}
|
|
45
|
+
export interface RedactedThinkingBlock {
|
|
46
|
+
type: 'redacted_thinking';
|
|
47
|
+
data: string;
|
|
48
|
+
}
|
|
49
|
+
export type RequestContentBlock = RequestTextBlock | RequestImageBlock | RequestVideoBlock | ToolResultBlock | ToolUseRequestBlock | ThinkingBlock | RedactedThinkingBlock;
|
|
41
50
|
export interface LlmMessage {
|
|
42
51
|
role: 'user' | 'assistant';
|
|
43
52
|
content: string | RequestContentBlock[];
|
|
@@ -56,7 +65,7 @@ export interface ToolUseBlock {
|
|
|
56
65
|
name: string;
|
|
57
66
|
input: Record<string, unknown>;
|
|
58
67
|
}
|
|
59
|
-
export type ContentBlock = TextBlock | ToolUseBlock;
|
|
68
|
+
export type ContentBlock = TextBlock | ToolUseBlock | ThinkingBlock | RedactedThinkingBlock;
|
|
60
69
|
/**
|
|
61
70
|
* An action surfaced by a provider that runs its OWN tool/command loop (e.g. the
|
|
62
71
|
* official Codex App Server). Unlike ZTC-owned tool calls — where the model
|
|
@@ -65,6 +74,13 @@ export type ContentBlock = TextBlock | ToolUseBlock;
|
|
|
65
74
|
* of showing only the provider's final prose. See `codex_app_server.ts`.
|
|
66
75
|
*/
|
|
67
76
|
export type BackendObservation = {
|
|
77
|
+
/** Provider-scoped invocation identity; never a host execution receipt. */
|
|
78
|
+
native?: {
|
|
79
|
+
provider: string;
|
|
80
|
+
threadId: string;
|
|
81
|
+
turnId: string;
|
|
82
|
+
};
|
|
83
|
+
} & ({
|
|
68
84
|
kind: 'command';
|
|
69
85
|
id: string;
|
|
70
86
|
command: string;
|
|
@@ -83,11 +99,69 @@ export type BackendObservation = {
|
|
|
83
99
|
label: string;
|
|
84
100
|
detail?: Record<string, unknown>;
|
|
85
101
|
output?: string;
|
|
102
|
+
status?: string;
|
|
103
|
+
artifacts?: Array<{
|
|
104
|
+
path: string;
|
|
105
|
+
sha256?: string;
|
|
106
|
+
}>;
|
|
107
|
+
partial?: boolean;
|
|
108
|
+
isError?: boolean;
|
|
109
|
+
});
|
|
110
|
+
export type BufferedRecoveryPolicy = {
|
|
111
|
+
version: 'codex-buffered-idle-v1' | 'codex-buffered-idle-overload-v1' | 'codex-buffered-idle-overload-interrupted-v1';
|
|
112
|
+
idleTimeoutMs: 8000;
|
|
113
|
+
} | {
|
|
114
|
+
version: 'codex-buffered-idle-overload-duration-v1' | 'codex-buffered-idle-overload-duration-interrupted-v1';
|
|
115
|
+
idleTimeoutMs: 8000;
|
|
116
|
+
firstBodyTimeoutMs: 30000;
|
|
117
|
+
};
|
|
118
|
+
export interface BufferedTransportAttempt {
|
|
119
|
+
/** Absent in legacy wall-clock captures. New stamps use one anchored monotonic clock. */
|
|
120
|
+
timingClock?: 'monotonic-epoch-v1';
|
|
121
|
+
type: 'started' | 'settled';
|
|
122
|
+
attempt: number;
|
|
123
|
+
trigger: 'initial' | 'body-idle' | 'auth-refresh' | 'provider-overload' | 'body-duration' | 'body-interrupted';
|
|
124
|
+
bodySha256: string;
|
|
125
|
+
bodyBytes: number;
|
|
126
|
+
startedAtMs: number;
|
|
127
|
+
deadlineAtMs: number;
|
|
128
|
+
headersAtMs?: number;
|
|
129
|
+
status?: number;
|
|
130
|
+
bytes: number;
|
|
131
|
+
chunks: number;
|
|
132
|
+
/** Final logical usage is separate; a cancelled physical attempt's cost is unknown. */
|
|
133
|
+
usage: 'unknown';
|
|
134
|
+
firstChunkAtMs?: number;
|
|
135
|
+
lastChunkAtMs?: number;
|
|
136
|
+
semanticTerminal?: string;
|
|
137
|
+
semanticTerminalAtMs?: number;
|
|
138
|
+
providerFailure?: 'provider-overload';
|
|
139
|
+
eofAtMs?: number;
|
|
140
|
+
abortAtMs?: number;
|
|
141
|
+
cancelledAtMs?: number;
|
|
142
|
+
endedAtMs?: number;
|
|
143
|
+
reason?: 'complete' | 'idle' | 'abort' | 'http-error' | 'transport-error' | 'consumer-cancel' | 'body-duration' | 'body-interrupted';
|
|
144
|
+
}
|
|
145
|
+
export type BufferedRecoveryRequest = BufferedRecoveryPolicy & {
|
|
146
|
+
deadlineAtMs: number;
|
|
147
|
+
onAttempt?: (event: BufferedTransportAttempt) => void;
|
|
86
148
|
};
|
|
87
149
|
export interface BackendRequest {
|
|
88
150
|
model: string;
|
|
89
151
|
/** Omit to use the provider default; numeric values are explicit caps. */
|
|
90
152
|
maxTokens?: number;
|
|
153
|
+
/** Explicit buffered Codex opt-in. Streaming and absent options keep legacy behavior. */
|
|
154
|
+
bufferedRecovery?: BufferedRecoveryRequest;
|
|
155
|
+
/** Codex subscription transport cap, including SSE framing and repeated output.
|
|
156
|
+
* This bounds client consumption, not hidden reasoning or billed tokens.
|
|
157
|
+
* Absent keeps the Codex 1 MiB default; simulations explicitly allow 8 MiB. */
|
|
158
|
+
maxResponseBytes?: number;
|
|
159
|
+
/** Codex subscription only: append "Aim for at most <maxTokens> output tokens."
|
|
160
|
+
* to the instructions. Simulations opt in; the agent does not. */
|
|
161
|
+
outputTokenGuidance?: boolean;
|
|
162
|
+
/** Schema guidance for Codex responses. Callers still validate returned JSON. */
|
|
163
|
+
outputSchema?: Record<string, unknown>;
|
|
164
|
+
outputSchemaStrict?: boolean;
|
|
91
165
|
system: string;
|
|
92
166
|
messages: LlmMessage[];
|
|
93
167
|
tools: ToolDefinition[];
|
|
@@ -151,8 +225,11 @@ export interface BackendRequest {
|
|
|
151
225
|
/**
|
|
152
226
|
* Sink for provider-owned tool/command observations (Codex App Server runs its
|
|
153
227
|
* own harness). Backends that own execution call this as each action completes;
|
|
154
|
-
* the agent
|
|
155
|
-
*
|
|
228
|
+
* the agent retains bounded command/action reports as provider_reported and
|
|
229
|
+
* maps them to the canonical evidence and display events. Private reasoning
|
|
230
|
+
* is display-only. Native adapters await asynchronous sinks before completing
|
|
231
|
+
* a turn; the Agent also drains capture for synchronous callback producers.
|
|
232
|
+
* Ignored by ZTC-tool-calling backends.
|
|
156
233
|
*/
|
|
157
234
|
onObservation?: (observation: BackendObservation) => void;
|
|
158
235
|
/**
|
|
@@ -174,6 +251,7 @@ export interface BackendRequest {
|
|
|
174
251
|
maxAttempts: number;
|
|
175
252
|
delayMs: number;
|
|
176
253
|
reason: string;
|
|
254
|
+
rateLimited?: boolean;
|
|
177
255
|
}) => void;
|
|
178
256
|
/** Per HTTP attempt diagnostics for Router and OpenAI-compatible transports. */
|
|
179
257
|
onMetrics?: (metrics: RequestMetrics) => void;
|
|
@@ -202,7 +280,10 @@ export interface ClientToolCallResult {
|
|
|
202
280
|
export interface BackendResponse {
|
|
203
281
|
content: ContentBlock[];
|
|
204
282
|
stopReason: string;
|
|
283
|
+
stopDetails?: Record<string, unknown>;
|
|
205
284
|
usage?: TokenUsage;
|
|
285
|
+
/** Explicit provider-reported USD, independent from token accounting or inferred pricing. */
|
|
286
|
+
costUsd?: number;
|
|
206
287
|
/** Provider-specific opaque reasoning trace (e.g. Kimi/Moonshot thinking
|
|
207
288
|
* models). Persisted on the assistant turn so it can be replayed on the
|
|
208
289
|
* next request — moonshot rejects assistant tool-call replays without it. */
|
|
@@ -240,6 +321,11 @@ export type StreamEvent = {
|
|
|
240
321
|
} | {
|
|
241
322
|
type: 'text_delta';
|
|
242
323
|
text: string;
|
|
324
|
+
}
|
|
325
|
+
/** Completed native block, in provider order, alongside live display deltas. */
|
|
326
|
+
| {
|
|
327
|
+
type: 'content_block';
|
|
328
|
+
block: ContentBlock;
|
|
243
329
|
} | {
|
|
244
330
|
type: 'tool_use_start';
|
|
245
331
|
id: string;
|
|
@@ -254,11 +340,18 @@ export type StreamEvent = {
|
|
|
254
340
|
} | {
|
|
255
341
|
type: 'usage';
|
|
256
342
|
usage: TokenUsage;
|
|
343
|
+
} | {
|
|
344
|
+
type: 'cost';
|
|
345
|
+
costUsd: number;
|
|
257
346
|
} | {
|
|
258
347
|
type: 'done';
|
|
259
348
|
stopReason: string;
|
|
349
|
+
stopDetails?: Record<string, unknown>;
|
|
260
350
|
};
|
|
261
351
|
export interface AgentBackend {
|
|
352
|
+
/** Preserve ordered provider blocks and previously submitted context bytes. */
|
|
353
|
+
readonly preservesNativeHistory?: boolean;
|
|
354
|
+
getModelCapabilities?(model: string): import('../../utils/router_catalog.js').RouterModelCapabilities | undefined;
|
|
262
355
|
/** Deliver user input into a provider-owned active turn when supported. */
|
|
263
356
|
steerUserMessage?(message: Message): Promise<boolean>;
|
|
264
357
|
/**
|
|
@@ -287,6 +380,8 @@ export interface AgentBackend {
|
|
|
287
380
|
streamsSyntheticallyFor?(request: BackendRequest): boolean;
|
|
288
381
|
/** False when a stream retry must stay on the resumable streaming contract. */
|
|
289
382
|
allowsBufferedFallbackAfterStreamFailure?(request: BackendRequest): boolean;
|
|
383
|
+
/** Native harnesses return false once dispatch may have produced external effects. */
|
|
384
|
+
allowsRequestRetryAfterFailure?(request: BackendRequest): boolean;
|
|
290
385
|
/**
|
|
291
386
|
* True when the backend correlates a logical turn across transport reconnects
|
|
292
387
|
* (it stamps a `transportTurnId` so the Router can resume the same buffered
|
|
@@ -307,6 +402,8 @@ export interface RequestMetrics {
|
|
|
307
402
|
requestId: string;
|
|
308
403
|
outcome: 'success' | 'error' | 'aborted';
|
|
309
404
|
status?: number;
|
|
405
|
+
/** Bounded, redacted failure body; never request headers or raw credentials. */
|
|
406
|
+
httpError?: HttpErrorDiagnostic;
|
|
310
407
|
clientPrepareMs?: number;
|
|
311
408
|
headersMs?: number;
|
|
312
409
|
firstReasoningMs?: number;
|
|
@@ -318,6 +415,12 @@ export interface RequestMetrics {
|
|
|
318
415
|
transportAttempts?: TransportAttemptMetrics[];
|
|
319
416
|
usage?: TokenUsage;
|
|
320
417
|
}
|
|
418
|
+
export interface HttpErrorDiagnostic {
|
|
419
|
+
status: number;
|
|
420
|
+
body: string;
|
|
421
|
+
bodyTruncated: boolean;
|
|
422
|
+
bodyReadState: 'complete' | 'truncated' | 'failed' | 'timeout';
|
|
423
|
+
}
|
|
321
424
|
export interface TransportAttemptMetrics {
|
|
322
425
|
attemptId: string;
|
|
323
426
|
status?: number;
|
|
@@ -4,6 +4,7 @@ export function* syntheticStreamEvents(response) {
|
|
|
4
4
|
yield { type: 'reasoning_delta', text: response.reasoning };
|
|
5
5
|
}
|
|
6
6
|
for (const block of response.content) {
|
|
7
|
+
yield { type: 'content_block', block };
|
|
7
8
|
if (block.type === 'text') {
|
|
8
9
|
yield { type: 'text_delta', text: block.text };
|
|
9
10
|
}
|
|
@@ -16,5 +17,8 @@ export function* syntheticStreamEvents(response) {
|
|
|
16
17
|
if (response.usage) {
|
|
17
18
|
yield { type: 'usage', usage: response.usage };
|
|
18
19
|
}
|
|
19
|
-
|
|
20
|
+
if (typeof response.costUsd === 'number' && Number.isFinite(response.costUsd) && response.costUsd >= 0) {
|
|
21
|
+
yield { type: 'cost', costUsd: response.costUsd };
|
|
22
|
+
}
|
|
23
|
+
yield { type: 'done', stopReason: response.stopReason, ...(response.stopDetails ? { stopDetails: response.stopDetails } : {}) };
|
|
20
24
|
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import type { RouterCatalog, RouterModelCapabilities } from '../../utils/router_catalog.js';
|
|
1
2
|
import { AgentBackend, BackendRequest, BackendResponse, StreamEvent } from './types.js';
|
|
2
3
|
export interface ZRouterStreamConfig {
|
|
4
|
+
catalog?: RouterCatalog;
|
|
3
5
|
apiKey: string;
|
|
4
6
|
proxyUrl: string;
|
|
5
7
|
provider: string;
|
|
@@ -26,6 +28,8 @@ export interface ZRouterStreamConfig {
|
|
|
26
28
|
* uses the unified chat endpoint so routing can fall back across providers.
|
|
27
29
|
*/
|
|
28
30
|
export declare class ZRouterStreamBackend implements AgentBackend {
|
|
31
|
+
private readonly initialCatalog?;
|
|
32
|
+
private get catalog();
|
|
29
33
|
private apiKey;
|
|
30
34
|
private proxyUrl;
|
|
31
35
|
private provider;
|
|
@@ -38,8 +42,9 @@ export declare class ZRouterStreamBackend implements AgentBackend {
|
|
|
38
42
|
isAuthenticationConfigured(): boolean;
|
|
39
43
|
allowsBufferedFallbackAfterStreamFailure(): boolean;
|
|
40
44
|
handlesTransportRetries(): boolean;
|
|
45
|
+
getModelCapabilities(model: string): RouterModelCapabilities | undefined;
|
|
41
46
|
private buildOpenAIBody;
|
|
42
|
-
private
|
|
47
|
+
private serializeBody;
|
|
43
48
|
private buildHeaders;
|
|
44
49
|
/**
|
|
45
50
|
* The conversation identity this turn declares to Router, which forwards it to
|