@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
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: measurement-validation
|
|
3
|
+
name: measurement-validation
|
|
4
|
+
description: Establish measurement meaning, comparability and instrumentation before optimizing a reported bottleneck
|
|
5
|
+
keywords: [measurement, profiling, benchmark, performance, optimization, instrumentation]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Measurement validation workflow
|
|
9
|
+
|
|
10
|
+
Before expensive implementation or a full benchmark, define the discriminating
|
|
11
|
+
check: which measured field, workload and runtime path would support or refute
|
|
12
|
+
the proposed bottleneck? A plausible number does not answer that question.
|
|
13
|
+
|
|
14
|
+
1. **Declare the question.** State the metric definition, unit, timing domain,
|
|
15
|
+
workload, stage, input shape, selected ranks and scope. Prefill and decode
|
|
16
|
+
are different workloads. Host time, device time, diagnostic synchronization,
|
|
17
|
+
logical allocation counts and fresh physical allocations are different
|
|
18
|
+
measurements. Do not infer these definitions from a field name.
|
|
19
|
+
2. **Capture the original source.** Use a managed `run_command`/`read_command`
|
|
20
|
+
observation whose entire output is one JSON envelope, as shown below. Keep
|
|
21
|
+
its observation ID and captured digest through `session_evidence`. Project
|
|
22
|
+
analyzers produce this generic format; domain-specific profile interpretation
|
|
23
|
+
belongs in the project, not in ZTC core. Do not strip arbitrary log text to
|
|
24
|
+
find a convenient numeric JSON object.
|
|
25
|
+
3. **Run a small instrumentation smoke.** In the requested mode and selected
|
|
26
|
+
runtime path, demonstrate the expected field actually appears. Check that
|
|
27
|
+
field's unit, timing domain, rank and shape before the expensive full run.
|
|
28
|
+
A field emitted in another mode or path is insufficient. If the field is
|
|
29
|
+
absent, stop to resolve the instrumentation rather than claiming a zero cost.
|
|
30
|
+
4. **Validate retained observations.** Discover `measurement_report` with
|
|
31
|
+
`tool_search`, then pass one observation ID for assessment or two IDs in
|
|
32
|
+
baseline/candidate order for comparison. Pass declared requirements, not
|
|
33
|
+
copied values, fabricated receipts or model-written measurements. Check
|
|
34
|
+
compatibility and every reason before using the numbers.
|
|
35
|
+
5. **Respect lifecycle.** A startup artifact with `passed: false` and a running
|
|
36
|
+
owner job is incomplete. It is not a failed final run. Re-read the same job
|
|
37
|
+
from cursor 0 until a complete terminal observation is available; do not relaunch it just
|
|
38
|
+
to obtain a final-looking artifact. Unavailable, partial or malformed source
|
|
39
|
+
observations remain unknown.
|
|
40
|
+
6. **Keep hierarchy and overlap explicit.** Never sum an inclusive parent and
|
|
41
|
+
child, or an ancestor and descendant, as exclusive wall-time shares. Sum
|
|
42
|
+
only explicitly exclusive measurements in the same timing domain, scope
|
|
43
|
+
and rank. Cross-rank overlap is not serial wall time. A parent denominator
|
|
44
|
+
must use the same units/domain/scope/rank as its selected components.
|
|
45
|
+
7. **Interpret conservatively.** Arithmetic residuals stay unattributed. Record
|
|
46
|
+
a residual explanation as a hypothesis with supporting observation IDs via
|
|
47
|
+
`session_evidence`; demonstrate independent attribution before calling it a
|
|
48
|
+
measured removable performance win. An increase from 78.58 to 79.63 ms is
|
|
49
|
+
an increase of 1.05 ms, not a speedup. A zero baseline has no defined relative
|
|
50
|
+
percentage. Do not manufacture component shares from unexplained remainder.
|
|
51
|
+
|
|
52
|
+
Compatibility checks reported shape and meaning against the visible declaration.
|
|
53
|
+
It does not prove producer truth, current source identity or correctness:
|
|
54
|
+
benchmark eligibility remains unknown. Source qualification, correctness checks
|
|
55
|
+
and benchmark admission are separate requirements. A report never authorizes a
|
|
56
|
+
command or changes user instructions.
|
|
57
|
+
|
|
58
|
+
## Producer envelope (one complete JSON document)
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"schemaVersion": 1,
|
|
63
|
+
"runId": "smoke-baseline",
|
|
64
|
+
"source": {
|
|
65
|
+
"revision": "reported-project-revision",
|
|
66
|
+
"artifactSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
67
|
+
},
|
|
68
|
+
"workload": {
|
|
69
|
+
"id": "decode-fixture",
|
|
70
|
+
"stage": "decode",
|
|
71
|
+
"inputShape": { "batch": 1, "tokens": 1 }
|
|
72
|
+
},
|
|
73
|
+
"instrumentation": {
|
|
74
|
+
"mode": "production-timing",
|
|
75
|
+
"version": "1",
|
|
76
|
+
"synchronization": "production",
|
|
77
|
+
"runtimePath": "fixture/decode"
|
|
78
|
+
},
|
|
79
|
+
"completion": { "status": "completed", "passed": true },
|
|
80
|
+
"smoke": {
|
|
81
|
+
"mode": "production-timing",
|
|
82
|
+
"runtimePath": "fixture/decode",
|
|
83
|
+
"fields": ["step-r0"],
|
|
84
|
+
"passed": true
|
|
85
|
+
},
|
|
86
|
+
"metrics": [
|
|
87
|
+
{
|
|
88
|
+
"id": "step-r0",
|
|
89
|
+
"value": 78.58,
|
|
90
|
+
"unit": "ms",
|
|
91
|
+
"timingDomain": "host-wall",
|
|
92
|
+
"scope": "step",
|
|
93
|
+
"rank": 0,
|
|
94
|
+
"worldSize": 1,
|
|
95
|
+
"coverage": "inclusive"
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Metric IDs are unique across ranks. Child metrics declare `parentId`. Requested
|
|
102
|
+
`smokeFields` name actual metric IDs present in both `metrics` and `smoke.fields`.
|
|
103
|
+
The terminal observation must capture the output from byte 0; a final JSON
|
|
104
|
+
suffix after earlier log text is incomplete. The whole serialized command
|
|
105
|
+
receipt must fit 32768 UTF-8 bytes, and the tool report is bounded to 64 KiB.
|
|
106
|
+
The
|
|
107
|
+
source revision/hash above are producer reports, not a host certification.
|
|
108
|
+
|
|
109
|
+
## Tool requirements
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"observation_ids": ["original-baseline-observation", "original-candidate-observation"],
|
|
114
|
+
"requirements": {
|
|
115
|
+
"workload": {
|
|
116
|
+
"id": "decode-fixture",
|
|
117
|
+
"stage": "decode",
|
|
118
|
+
"inputShape": { "batch": 1, "tokens": 1 }
|
|
119
|
+
},
|
|
120
|
+
"instrumentation": {
|
|
121
|
+
"mode": "production-timing",
|
|
122
|
+
"version": "1",
|
|
123
|
+
"synchronization": "production",
|
|
124
|
+
"runtimePath": "fixture/decode"
|
|
125
|
+
},
|
|
126
|
+
"metricIds": ["step-r0"],
|
|
127
|
+
"unit": "ms",
|
|
128
|
+
"timingDomain": "host-wall",
|
|
129
|
+
"scope": "step",
|
|
130
|
+
"worldSize": 1,
|
|
131
|
+
"expectedRanks": [0],
|
|
132
|
+
"smokeFields": ["step-r0"],
|
|
133
|
+
"aggregation": "none"
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Declare every rank needed for the question; an explicit rank-0 selection does
|
|
139
|
+
not establish all-rank coverage. No automatic unit conversion is performed.
|
|
140
|
+
Use `aggregation: "sum_exclusive"` only for comparable exclusive components;
|
|
141
|
+
optional `totalMetricId` names an inclusive denominator and requests an
|
|
142
|
+
arithmetic residual with no attribution.
|
|
143
|
+
If source capture cannot fit the bounded envelope, reduce the project analyzer's
|
|
144
|
+
output to a focused profile while retaining its original source identity.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runTerminalAttachCli(args: string[]): Promise<number>;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/** Durable terminal attachment through local tmux or authenticated OpenSSH. */
|
|
2
|
+
import { spawn } from 'node:child_process';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
const HELP = `Usage: ztc attach --session <tmux-session> [--ssh <host>] [--ssh-config <file>] [--read-only] [--no-reconnect]
|
|
5
|
+
|
|
6
|
+
Attach to an existing tmux session. The task keeps running in tmux when you detach or the connection drops.
|
|
7
|
+
Local native ZTC sessions also remain available through Ctrl+B W.
|
|
8
|
+
Remote hosts use your OpenSSH configuration and require a verified known host key.
|
|
9
|
+
--read-only observes the tmux session without forwarding input or changing its size.
|
|
10
|
+
This flag restricts the terminal client; it does not reduce your SSH account permissions.
|
|
11
|
+
Remote connections retry up to three times after a transport interruption. Run the same command to reconnect later.
|
|
12
|
+
Ctrl+B D detaches without ending the task. Create the backend on its host first: tmux new-session -s <name> ztc
|
|
13
|
+
`;
|
|
14
|
+
export async function runTerminalAttachCli(args) {
|
|
15
|
+
if (args.length === 1 && ['--help', '-h'].includes(args[0])) {
|
|
16
|
+
process.stdout.write(HELP);
|
|
17
|
+
return 0;
|
|
18
|
+
}
|
|
19
|
+
let session = '';
|
|
20
|
+
let host = '';
|
|
21
|
+
let sshConfig = '';
|
|
22
|
+
let readOnly = false;
|
|
23
|
+
let reconnect = true;
|
|
24
|
+
const seen = new Set();
|
|
25
|
+
try {
|
|
26
|
+
for (let i = 0; i < args.length; i++) {
|
|
27
|
+
const flag = args[i];
|
|
28
|
+
if (seen.has(flag))
|
|
29
|
+
throw new Error(`Specify ${flag} only once.`);
|
|
30
|
+
seen.add(flag);
|
|
31
|
+
if (flag === '--read-only') {
|
|
32
|
+
readOnly = true;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (flag === '--no-reconnect') {
|
|
36
|
+
reconnect = false;
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (!['--session', '--ssh', '--ssh-config'].includes(flag))
|
|
40
|
+
throw new Error(`Unknown attach option: ${flag}`);
|
|
41
|
+
const value = args[++i];
|
|
42
|
+
if (!value)
|
|
43
|
+
throw new Error(`Missing value for ${flag}.`);
|
|
44
|
+
if (flag === '--session') {
|
|
45
|
+
if (!/^[A-Za-z0-9_][A-Za-z0-9_.-]{0,63}$/.test(value))
|
|
46
|
+
throw new Error('Invalid tmux session. Use 1–64 letters, numbers, underscores, dots or dashes.');
|
|
47
|
+
session = value;
|
|
48
|
+
}
|
|
49
|
+
else if (flag === '--ssh') {
|
|
50
|
+
if (value.startsWith('-') || !/^[A-Za-z0-9_.@:[\]-]+$/.test(value))
|
|
51
|
+
throw new Error('Invalid SSH host. Use a trusted OpenSSH host alias or user@hostname.');
|
|
52
|
+
host = value;
|
|
53
|
+
}
|
|
54
|
+
else
|
|
55
|
+
sshConfig = resolve(value);
|
|
56
|
+
}
|
|
57
|
+
if (!session)
|
|
58
|
+
throw new Error('A named tmux backend is required: --session <name>.');
|
|
59
|
+
if (sshConfig && !host)
|
|
60
|
+
throw new Error('--ssh-config requires --ssh.');
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
process.stderr.write(`[ztc attach] ${error instanceof Error ? error.message : String(error)}\n${HELP}`);
|
|
64
|
+
return 2;
|
|
65
|
+
}
|
|
66
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
67
|
+
process.stderr.write('[ztc attach] Attachment requires an interactive terminal.\n');
|
|
68
|
+
return 2;
|
|
69
|
+
}
|
|
70
|
+
const tmuxArgs = ['attach-session', ...(readOnly ? ['-r'] : []), '-t', `=${session}`];
|
|
71
|
+
const executable = host ? 'ssh' : 'tmux';
|
|
72
|
+
const command = host
|
|
73
|
+
? [...(sshConfig ? ['-F', sshConfig] : []), '-tt', '-o', 'StrictHostKeyChecking=yes', '-o', 'ServerAliveInterval=5', '-o', 'ServerAliveCountMax=2', '--', host, 'tmux', ...tmuxArgs]
|
|
74
|
+
: tmuxArgs;
|
|
75
|
+
process.stderr.write(`[ztc attach] ${readOnly ? 'Read-only observation' : 'Terminal control'} · ${host || 'local host'} · tmux ${session}\n`);
|
|
76
|
+
const limit = host && reconnect ? 4 : 1;
|
|
77
|
+
for (let attempt = 0; attempt < limit; attempt++) {
|
|
78
|
+
const code = await new Promise(resolveExit => {
|
|
79
|
+
const child = spawn(executable, command, { stdio: 'inherit' });
|
|
80
|
+
let interrupted = null;
|
|
81
|
+
let forceStop = null;
|
|
82
|
+
const stop = (signal, exitCode) => {
|
|
83
|
+
if (interrupted !== null)
|
|
84
|
+
return;
|
|
85
|
+
interrupted = exitCode;
|
|
86
|
+
child.kill(signal);
|
|
87
|
+
forceStop = setTimeout(() => {
|
|
88
|
+
if (child.exitCode === null && child.signalCode === null)
|
|
89
|
+
child.kill('SIGKILL');
|
|
90
|
+
}, 2000);
|
|
91
|
+
forceStop.unref();
|
|
92
|
+
};
|
|
93
|
+
const onInterrupt = () => stop('SIGINT', 130);
|
|
94
|
+
const onTerminate = () => stop('SIGTERM', 143);
|
|
95
|
+
process.on('SIGINT', onInterrupt);
|
|
96
|
+
process.on('SIGTERM', onTerminate);
|
|
97
|
+
const finish = (status) => {
|
|
98
|
+
process.off('SIGINT', onInterrupt);
|
|
99
|
+
process.off('SIGTERM', onTerminate);
|
|
100
|
+
if (forceStop)
|
|
101
|
+
clearTimeout(forceStop);
|
|
102
|
+
resolveExit(interrupted ?? status);
|
|
103
|
+
};
|
|
104
|
+
child.once('error', error => { process.stderr.write(`[ztc attach] ${error.message}\n`); finish(127); });
|
|
105
|
+
child.once('exit', (status, signal) => finish(status ?? (signal ? 130 : 1)));
|
|
106
|
+
});
|
|
107
|
+
if (code !== 255 || attempt + 1 === limit)
|
|
108
|
+
return code;
|
|
109
|
+
process.stderr.write(`[ztc attach] SSH disconnected. Reconnecting to the same tmux session (${attempt + 1}/3).\n`);
|
|
110
|
+
await new Promise(resolveWait => setTimeout(resolveWait, 1000));
|
|
111
|
+
}
|
|
112
|
+
return 1;
|
|
113
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Parse only bounded display facts; this DTO grants no execution or evidence authority. */
|
|
2
|
+
export function parseToolProgress(value) {
|
|
3
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
4
|
+
return null;
|
|
5
|
+
const row = value;
|
|
6
|
+
if (typeof row.toolCallId !== 'string' || !row.toolCallId
|
|
7
|
+
|| new TextEncoder().encode(row.toolCallId).length > 256 || /[\u0000-\u001f\u007f]/u.test(row.toolCallId)
|
|
8
|
+
|| typeof row.tool !== 'string' || !row.tool
|
|
9
|
+
|| new TextEncoder().encode(row.tool).length > 128 || /[\u0000-\u001f\u007f]/u.test(row.tool)
|
|
10
|
+
|| typeof row.progress !== 'object' || row.progress === null || Array.isArray(row.progress))
|
|
11
|
+
return null;
|
|
12
|
+
const progress = row.progress;
|
|
13
|
+
const { startedAt, lastOutputAt, outputBytes, outputLines, latestLine } = progress;
|
|
14
|
+
if (typeof startedAt !== 'number' || !Number.isSafeInteger(startedAt) || startedAt < 0
|
|
15
|
+
|| (lastOutputAt !== undefined && (typeof lastOutputAt !== 'number'
|
|
16
|
+
|| !Number.isSafeInteger(lastOutputAt) || lastOutputAt < startedAt))
|
|
17
|
+
|| typeof outputBytes !== 'number' || !Number.isSafeInteger(outputBytes) || outputBytes < 0
|
|
18
|
+
|| typeof outputLines !== 'number' || !Number.isSafeInteger(outputLines) || outputLines < 0
|
|
19
|
+
|| typeof latestLine !== 'string' || new TextEncoder().encode(latestLine).length > 512)
|
|
20
|
+
return null;
|
|
21
|
+
return {
|
|
22
|
+
toolCallId: row.toolCallId,
|
|
23
|
+
tool: row.tool,
|
|
24
|
+
progress: { startedAt, ...(lastOutputAt === undefined ? {} : { lastOutputAt: lastOutputAt }),
|
|
25
|
+
outputBytes, outputLines, latestLine },
|
|
26
|
+
};
|
|
27
|
+
}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { RequestMetrics, TokenUsage } from './agent/backends/types.js';
|
|
1
|
+
import type { RequestContentBlock, RequestMetrics, TokenUsage } from './agent/backends/types.js';
|
|
2
|
+
import type { EvidenceSnapshot } from './agent/runtime/evidence.js';
|
|
2
3
|
export type MessageRole = 'user' | 'assistant' | 'tool' | 'system';
|
|
3
4
|
export type ToolStatus = 'pending' | 'running' | 'complete' | 'error';
|
|
4
5
|
export type AgentStatus = 'idle' | 'thinking' | 'tool_use' | 'streaming' | 'error';
|
|
@@ -11,7 +12,10 @@ export type TodoStatus = typeof TODO_STATUSES[number];
|
|
|
11
12
|
* never ASCII `...`) if they want one.
|
|
12
13
|
*/
|
|
13
14
|
export declare const AGENT_STATUS_LABELS: Record<AgentStatus, string>;
|
|
14
|
-
export type
|
|
15
|
+
export type CanonicalInputMode = 'steer' | 'interrupt';
|
|
16
|
+
/** `queue` is a legacy spelling of steer; Tab owns end-of-turn queuing. */
|
|
17
|
+
export type InputMode = CanonicalInputMode | 'queue';
|
|
18
|
+
export declare function normalizeInputMode(mode: InputMode): CanonicalInputMode;
|
|
15
19
|
/**
|
|
16
20
|
* When a busy-turn submission should reach the model.
|
|
17
21
|
*
|
|
@@ -66,6 +70,13 @@ export interface FormWidgetData {
|
|
|
66
70
|
submitLabel?: string;
|
|
67
71
|
formId: string;
|
|
68
72
|
}
|
|
73
|
+
/** Source-qualified image bytes owned by the checkpoint beside which they are stored. */
|
|
74
|
+
export interface DurableImageReference {
|
|
75
|
+
version: 1;
|
|
76
|
+
sessionFile: string;
|
|
77
|
+
file: string;
|
|
78
|
+
sha256: string;
|
|
79
|
+
}
|
|
69
80
|
export interface MessageAttachment {
|
|
70
81
|
id: string;
|
|
71
82
|
kind: 'image';
|
|
@@ -75,26 +86,110 @@ export interface MessageAttachment {
|
|
|
75
86
|
url?: string;
|
|
76
87
|
localPath?: string;
|
|
77
88
|
stale?: boolean;
|
|
89
|
+
durable?: DurableImageReference;
|
|
78
90
|
}
|
|
79
91
|
export interface MessageInput {
|
|
80
92
|
text: string;
|
|
81
93
|
attachments: MessageAttachment[];
|
|
82
94
|
pane_id?: number;
|
|
83
95
|
}
|
|
96
|
+
/** Usage belongs to the prompt which dispatched the request, including its workers. */
|
|
97
|
+
export interface ModelUsage extends TokenUsage {
|
|
98
|
+
/** The call completed without reporting usage; a complete total is unavailable. */
|
|
99
|
+
unreported?: boolean;
|
|
100
|
+
}
|
|
101
|
+
export type ModelUsageObserver = ((usage: ModelUsage) => void) & {
|
|
102
|
+
forRequest?: () => ModelUsageObserver;
|
|
103
|
+
workerStarted?: () => () => void;
|
|
104
|
+
getTurn?: () => PromptTurnMetadata;
|
|
105
|
+
};
|
|
106
|
+
export interface PromptTurnMetadata {
|
|
107
|
+
id: string;
|
|
108
|
+
startedAt: number;
|
|
109
|
+
finishedAt?: number;
|
|
110
|
+
tokens: number;
|
|
111
|
+
estimated: boolean;
|
|
112
|
+
usageIncomplete?: boolean;
|
|
113
|
+
}
|
|
114
|
+
/** Bounded, source-linked host warning about a claim; not an execution receipt. */
|
|
115
|
+
export interface HostClaimObservation {
|
|
116
|
+
version: 1;
|
|
117
|
+
sourceMessageId: string;
|
|
118
|
+
sourceSha256: string;
|
|
119
|
+
basis: 'no_tool_calls' | 'contradictory_tool_output';
|
|
120
|
+
toolCallCount: number;
|
|
121
|
+
observedAt: string;
|
|
122
|
+
}
|
|
84
123
|
export interface Message {
|
|
85
124
|
id: string;
|
|
86
125
|
role: MessageRole;
|
|
87
126
|
content: string;
|
|
127
|
+
/** Ordered model-facing blocks, including opaque signed thinking. Not UI text. */
|
|
128
|
+
nativeContent?: string | RequestContentBlock[];
|
|
129
|
+
/** Model that produced/submitted nativeContent; do not replay across models. */
|
|
130
|
+
nativeModel?: string;
|
|
131
|
+
/** Stable system/tool prefix identity for opaque native reasoning. */
|
|
132
|
+
nativeContextId?: string;
|
|
88
133
|
timestamp: Date;
|
|
134
|
+
turn?: PromptTurnMetadata;
|
|
89
135
|
toolCalls?: ToolCall[];
|
|
90
136
|
isStreaming?: boolean;
|
|
91
|
-
metadata?: Record<string, unknown
|
|
137
|
+
metadata?: Record<string, unknown> & {
|
|
138
|
+
/** Opaque provider context for API replay; never displayed as assistant reasoning. */
|
|
139
|
+
providerReasoning?: string;
|
|
140
|
+
/** Durable host Clear event UUID; resaves and compaction preserve its identity. */
|
|
141
|
+
taskHandoffReset?: string;
|
|
142
|
+
/** Historical host warning replayed only while its authored source still matches. */
|
|
143
|
+
hostClaimObservation?: HostClaimObservation;
|
|
144
|
+
/** Host observations are literal text; quoted media/tool-result tokens authorize no new reads. */
|
|
145
|
+
hostContext?: boolean;
|
|
146
|
+
};
|
|
92
147
|
attachments?: MessageAttachment[];
|
|
93
148
|
widget?: FormWidgetData;
|
|
94
149
|
}
|
|
150
|
+
/** Bounded host observation of an active managed-command wait, never inferred from tool text. */
|
|
151
|
+
export interface CommandWaitingState {
|
|
152
|
+
kind: 'managed_command';
|
|
153
|
+
toolCallId: string;
|
|
154
|
+
jobId: string;
|
|
155
|
+
cursor: number;
|
|
156
|
+
startedAt: number;
|
|
157
|
+
deadlineAt?: number;
|
|
158
|
+
}
|
|
159
|
+
/** Informational output observed while an owned tool invocation is running. */
|
|
160
|
+
export interface AgentToolProgress {
|
|
161
|
+
startedAt: number;
|
|
162
|
+
lastOutputAt?: number;
|
|
163
|
+
outputBytes: number;
|
|
164
|
+
outputLines: number;
|
|
165
|
+
/** Latest observed logical line/current partial, capped at 512 UTF-8 bytes. */
|
|
166
|
+
latestLine: string;
|
|
167
|
+
}
|
|
95
168
|
export interface AgentState {
|
|
96
169
|
status: AgentStatus;
|
|
170
|
+
/** Fresh, bounded local advisory evidence, never a remote mutation grant. */
|
|
171
|
+
workspaceCollision?: import('./workspace_collision.js').WorkspaceCollisionSnapshot;
|
|
172
|
+
taskHandoff?: {
|
|
173
|
+
sessionId: string;
|
|
174
|
+
projection: import('./session_handoff_contract.js').TaskHandoffProjection | null;
|
|
175
|
+
};
|
|
176
|
+
evidence?: {
|
|
177
|
+
sessionId: string;
|
|
178
|
+
snapshot: EvidenceSnapshot;
|
|
179
|
+
};
|
|
180
|
+
waiting?: CommandWaitingState;
|
|
181
|
+
requestRetry?: {
|
|
182
|
+
phase: 'retry' | 'recovery';
|
|
183
|
+
attempt: number;
|
|
184
|
+
delay: number;
|
|
185
|
+
rateLimited?: boolean;
|
|
186
|
+
};
|
|
97
187
|
currentTool?: string;
|
|
188
|
+
toolProgress?: {
|
|
189
|
+
toolCallId: string;
|
|
190
|
+
tool: string;
|
|
191
|
+
progress: AgentToolProgress;
|
|
192
|
+
};
|
|
98
193
|
tokensUsed?: number;
|
|
99
194
|
contextTokens?: number;
|
|
100
195
|
/**
|
|
@@ -128,19 +223,33 @@ export interface ZTCConfig {
|
|
|
128
223
|
timeout?: number;
|
|
129
224
|
tools?: string[];
|
|
130
225
|
}
|
|
226
|
+
export interface ToolParameterSchema {
|
|
227
|
+
type: string;
|
|
228
|
+
description?: string;
|
|
229
|
+
enum?: string[];
|
|
230
|
+
minimum?: number;
|
|
231
|
+
maximum?: number;
|
|
232
|
+
minLength?: number;
|
|
233
|
+
maxLength?: number;
|
|
234
|
+
minItems?: number;
|
|
235
|
+
maxItems?: number;
|
|
236
|
+
uniqueItems?: boolean;
|
|
237
|
+
properties?: Record<string, ToolParameterSchema>;
|
|
238
|
+
items?: ToolParameterSchema;
|
|
239
|
+
required?: string[];
|
|
240
|
+
additionalProperties?: boolean;
|
|
241
|
+
}
|
|
131
242
|
export interface ToolDefinition {
|
|
132
243
|
name: string;
|
|
133
244
|
description: string;
|
|
134
245
|
parameters: {
|
|
135
246
|
type: 'object';
|
|
136
|
-
properties: Record<string,
|
|
137
|
-
type: string;
|
|
138
|
-
description: string;
|
|
139
|
-
enum?: string[];
|
|
140
|
-
minimum?: number;
|
|
141
|
-
maximum?: number;
|
|
142
|
-
}>;
|
|
247
|
+
properties: Record<string, ToolParameterSchema>;
|
|
143
248
|
required?: string[];
|
|
249
|
+
oneOf?: {
|
|
250
|
+
required: string[];
|
|
251
|
+
}[];
|
|
252
|
+
additionalProperties?: boolean;
|
|
144
253
|
};
|
|
145
254
|
/**
|
|
146
255
|
* This tool duplicates a capability that harness-owning providers (Codex App
|
|
@@ -152,6 +261,17 @@ export interface ToolDefinition {
|
|
|
152
261
|
overlapsProviderHarness?: boolean;
|
|
153
262
|
}
|
|
154
263
|
export type AgentEvent = {
|
|
264
|
+
type: 'request_usage';
|
|
265
|
+
receipt: import('./usage_snapshot.js').UsageReceipt;
|
|
266
|
+
} | {
|
|
267
|
+
type: 'task_handoff';
|
|
268
|
+
sessionId: string;
|
|
269
|
+
projection: import('./session_handoff_contract.js').TaskHandoffProjection | null;
|
|
270
|
+
} | {
|
|
271
|
+
type: 'evidence';
|
|
272
|
+
sessionId: string;
|
|
273
|
+
snapshot: EvidenceSnapshot;
|
|
274
|
+
} | {
|
|
155
275
|
type: 'history_checkpoint';
|
|
156
276
|
messages: Message[];
|
|
157
277
|
} | {
|
|
@@ -161,6 +281,11 @@ export type AgentEvent = {
|
|
|
161
281
|
tool: string;
|
|
162
282
|
args: Record<string, unknown>;
|
|
163
283
|
toolCallId: string;
|
|
284
|
+
} | {
|
|
285
|
+
type: 'tool_progress';
|
|
286
|
+
toolCallId: string;
|
|
287
|
+
tool: string;
|
|
288
|
+
progress: AgentToolProgress;
|
|
164
289
|
} | {
|
|
165
290
|
type: 'tool_end';
|
|
166
291
|
tool: string;
|
|
@@ -171,6 +296,13 @@ export type AgentEvent = {
|
|
|
171
296
|
tool: string;
|
|
172
297
|
error: string;
|
|
173
298
|
toolCallId: string;
|
|
299
|
+
} | {
|
|
300
|
+
type: 'command_wait';
|
|
301
|
+
waiting: CommandWaitingState;
|
|
302
|
+
} | {
|
|
303
|
+
type: 'command_wait_end';
|
|
304
|
+
toolCallId: string;
|
|
305
|
+
reason: 'output' | 'terminal' | 'deadline' | 'steering' | 'cancelled' | 'error';
|
|
174
306
|
} | {
|
|
175
307
|
type: 'stream_start';
|
|
176
308
|
} | {
|
|
@@ -197,6 +329,9 @@ export type AgentEvent = {
|
|
|
197
329
|
maxAttempts: number;
|
|
198
330
|
delay: number;
|
|
199
331
|
reason: string;
|
|
332
|
+
phase?: 'retry' | 'recovery';
|
|
333
|
+
elapsedMs?: number;
|
|
334
|
+
rateLimited?: boolean;
|
|
200
335
|
} | {
|
|
201
336
|
type: 'auto_continue';
|
|
202
337
|
reason?: string;
|
package/dist/types.js
CHANGED
package/dist/ui/core/input.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export interface InputKey {
|
|
|
7
7
|
rightArrow?: boolean;
|
|
8
8
|
ctrl?: boolean;
|
|
9
9
|
meta?: boolean;
|
|
10
|
+
alt?: boolean;
|
|
11
|
+
super?: boolean;
|
|
10
12
|
backspace?: boolean;
|
|
11
13
|
delete?: boolean;
|
|
12
14
|
tab?: boolean;
|
|
@@ -19,6 +21,7 @@ export interface InputKey {
|
|
|
19
21
|
export interface InputEvent {
|
|
20
22
|
input: string;
|
|
21
23
|
key: InputKey;
|
|
24
|
+
paste?: true;
|
|
22
25
|
}
|
|
23
26
|
export interface InputBus {
|
|
24
27
|
subscribe(handler: (event: InputEvent) => void): () => void;
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
import { InputSegment, InputCursor, InputState } from './input_state.js';
|
|
1
|
+
import { InputSegment, InputCursor, InputState, InputKill, InputDraftSnapshot } from './input_state.js';
|
|
2
|
+
import type { MessageInput } from '../../types.js';
|
|
2
3
|
export declare const PASTE_BADGE_THRESHOLD = 4;
|
|
3
4
|
export declare function normalizeSegments(segments: InputSegment[]): InputSegment[];
|
|
4
5
|
export declare function clampCursor(segments: InputSegment[], cursor: InputCursor): InputCursor;
|
|
5
6
|
export declare function insertText(state: InputState, text: string): InputState;
|
|
6
7
|
export declare function insertSegment(state: InputState, segment: InputSegment): InputState;
|
|
7
8
|
export declare function insertBadge(state: InputState, segment: InputSegment): InputState;
|
|
9
|
+
/** The focused text badge, or its immediate neighbor across a text boundary. */
|
|
10
|
+
export declare function getExpandablePasteIndex(state: Pick<InputState, 'segments' | 'cursor'>): number;
|
|
11
|
+
export declare function getPasteExpansionHint(state: Pick<InputState, 'segments' | 'cursor'>): string | null;
|
|
12
|
+
/** Expand only the targeted text badge, preserving attachments and draft bytes. */
|
|
13
|
+
export declare function expandPasteBadge(state: InputState): InputState;
|
|
8
14
|
export declare function backspace(state: InputState): InputState;
|
|
9
15
|
export declare function deleteForward(state: InputState): InputState;
|
|
10
16
|
export declare function killToEnd(state: InputState): InputState;
|
|
@@ -18,6 +24,8 @@ export declare function textCursorIndex(segments: InputSegment[], cursor: InputC
|
|
|
18
24
|
export declare function cursorFromTextIndex(segments: InputSegment[], pos: number): InputCursor;
|
|
19
25
|
export declare function getPlainText(segments: InputSegment[]): string;
|
|
20
26
|
export declare function serializeSegments(segments: InputSegment[]): string;
|
|
27
|
+
/** Capture admitted images separately; path-only badges keep their legacy tokens. */
|
|
28
|
+
export declare function serializeMessageInput(segments: readonly InputSegment[]): MessageInput;
|
|
21
29
|
export declare function createEmptyState(): InputState;
|
|
22
30
|
export declare function moveToStart(state: InputState): InputState;
|
|
23
31
|
export declare function moveToEnd(state: InputState): InputState;
|
|
@@ -65,5 +73,14 @@ export interface VerticalMove {
|
|
|
65
73
|
* caller's signal that the caret is at an edge, where history takes over.
|
|
66
74
|
*/
|
|
67
75
|
export declare function moveVertical(state: InputState, direction: -1 | 1, goalColumn?: number): VerticalMove;
|
|
76
|
+
/** Whole-draft kills retain badge identity and the original caret. */
|
|
77
|
+
export declare function killInputDraft(state: InputState): {
|
|
78
|
+
state: InputState;
|
|
79
|
+
killed: InputDraftSnapshot;
|
|
80
|
+
};
|
|
81
|
+
export declare function yankInputKill(state: InputState, killed: InputKill): InputState;
|
|
82
|
+
export declare function getInputShortcutHint(state: Pick<InputState, 'segments' | 'cursor'>, running?: boolean, canYank?: boolean): string | null;
|
|
83
|
+
/** Save history and clear a submitted draft in one place for both renderers. */
|
|
84
|
+
export declare function recordInputHistory(state: InputState, entry?: string, maxEntries?: number): InputState;
|
|
68
85
|
export declare function historyUp(state: InputState): InputState;
|
|
69
86
|
export declare function historyDown(state: InputState): InputState;
|