@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
package/dist/mcp/client.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
2
2
|
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
3
3
|
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
4
|
+
export const MAX_MCP_IMAGE_BYTES = 4 * 1024 * 1024;
|
|
4
5
|
const CLIENT_INFO = { name: 'ztc', version: '0.1.0' };
|
|
5
6
|
// Connection-independent state and accessors live in registry.ts (so light
|
|
6
7
|
// consumers avoid the SDK import); re-export them to preserve this module's
|
|
@@ -71,6 +72,25 @@ function adaptTool(client, serverName, mcpTool) {
|
|
|
71
72
|
// isError tool result the LLM can see and react to.
|
|
72
73
|
if (result.isError)
|
|
73
74
|
throw new Error(text || `MCP tool "${mcpTool.name}" failed`);
|
|
75
|
+
const images = blocks.filter(block => block.type === 'image');
|
|
76
|
+
if (images.length > 1)
|
|
77
|
+
throw new Error(`MCP tool "${mcpTool.name}" returned more than one image; request separate image reads`);
|
|
78
|
+
if (images.length === 1) {
|
|
79
|
+
const image = images[0];
|
|
80
|
+
if (!['image/png', 'image/jpeg', 'image/webp', 'image/gif'].includes(image.mimeType ?? ''))
|
|
81
|
+
throw new Error(`Unsupported MCP image MIME: ${image.mimeType ?? '(missing)'}`);
|
|
82
|
+
if (typeof image.data === 'string') {
|
|
83
|
+
const padding = image.data.endsWith('==') ? 2 : image.data.endsWith('=') ? 1 : 0;
|
|
84
|
+
if (Math.floor(image.data.length / 4) * 3 - padding > MAX_MCP_IMAGE_BYTES) {
|
|
85
|
+
throw new Error(`MCP image exceeds ${MAX_MCP_IMAGE_BYTES} bytes; request a smaller raster image`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (typeof image.data !== 'string' || !image.data.length || image.data.length % 4 !== 0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(image.data) || Buffer.from(image.data, 'base64').toString('base64') !== image.data)
|
|
89
|
+
throw new Error('MCP image data must be nonempty canonical base64');
|
|
90
|
+
// The persisted image envelope is already force-inline and replayed as
|
|
91
|
+
// actual provider image blocks by the request encoder and session store.
|
|
92
|
+
return JSON.stringify({ type: 'image', mediaType: image.mimeType, data: image.data, description: text || `Image from MCP tool "${mcpTool.name}"` });
|
|
93
|
+
}
|
|
74
94
|
return text || '(no output)';
|
|
75
95
|
},
|
|
76
96
|
};
|
|
@@ -83,7 +83,7 @@ system_prompt: |
|
|
|
83
83
|
- Verification criteria
|
|
84
84
|
|
|
85
85
|
When your plan is complete, tell the user to run /execute to begin implementation.
|
|
86
|
-
|
|
86
|
+
After approval, implement the plan, run its verification commands, and summarize the result.
|
|
87
87
|
|
|
88
88
|
artifact:
|
|
89
89
|
enabled: true
|
|
@@ -119,4 +119,4 @@ messages:
|
|
|
119
119
|
- /execute: Approve the plan and begin implementation
|
|
120
120
|
|
|
121
121
|
on_exit: |
|
|
122
|
-
|
|
122
|
+
Plan mode off.
|
package/dist/modes/handlers.js
CHANGED
|
@@ -148,7 +148,7 @@ export const planExecuteHandler = async (args, context) => {
|
|
|
148
148
|
Plan: ${artifactPath}
|
|
149
149
|
Tasks extracted: ${tasks.length}
|
|
150
150
|
|
|
151
|
-
${tasks.length > 0 ? '
|
|
151
|
+
${tasks.length > 0 ? 'Implementation steps are included in the plan below.' : 'No tasks found in Implementation Steps section.'}
|
|
152
152
|
|
|
153
153
|
The agent will now implement the plan.`,
|
|
154
154
|
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { GitWorkingTreeStatus } from '../runtime_info.js';
|
|
2
|
+
import { type TaskHandoffSnapshot } from '../session_handoff_contract.js';
|
|
2
3
|
export declare const FIRST_RUN_MESSAGE_METADATA: {
|
|
3
4
|
readonly ephemeral: true;
|
|
4
5
|
readonly onboarding: "first-run";
|
|
@@ -68,6 +69,8 @@ export declare function createFirstRunLaunchMessage(content: string): FirstRunLa
|
|
|
68
69
|
export declare function excludePrintedFirstRunWelcome<T extends FirstRunMessageLike>(messages: readonly T[], printedIds: ReadonlySet<string>): T[];
|
|
69
70
|
export declare function shouldDeferFirstRunScrollback(message: FirstRunMessageLike, messageCount: number): boolean;
|
|
70
71
|
export declare function buildCredentialSetupMessage(): string;
|
|
72
|
+
/** Keep the paste target separate from the historical checkpoint details. */
|
|
73
|
+
export declare function buildSavedSessionNotice(snapshot: TaskHandoffSnapshot, profile: string): string;
|
|
71
74
|
export declare function buildNoCredentialsWelcome(options?: Pick<FirstRunWelcomeOptions, 'mode'>): string;
|
|
72
75
|
export declare function buildReadyWelcome(options?: FirstRunWelcomeOptions): string;
|
|
73
76
|
export declare function buildResumedWelcome(options: ResumedWelcomeOptions): string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { displayWidth, sanitizeTerminalText } from '../ui/core/text_width.js';
|
|
2
|
+
import { formatTaskHandoffContext, projectTaskHandoff } from '../session_handoff_contract.js';
|
|
2
3
|
const WELCOME_TITLE = 'Welcome to ZTC - Zerg Terminal Client.';
|
|
3
4
|
const FIRST_RUN_MESSAGE_KIND = 'first-run';
|
|
4
5
|
const READOUT_CONTENT_WIDTH = 76;
|
|
@@ -125,8 +126,12 @@ function formatProjectLine(options) {
|
|
|
125
126
|
return parts.join(' · ');
|
|
126
127
|
}
|
|
127
128
|
function formatRuntimeLine(options) {
|
|
129
|
+
const providerId = singleLine(options.provider);
|
|
130
|
+
const modelId = singleLine(options.model);
|
|
131
|
+
const displayModel = providerId && modelId.startsWith(`${providerId}/`)
|
|
132
|
+
? modelId.slice(providerId.length + 1) : modelId;
|
|
128
133
|
const provider = compact(options.provider, 12) || 'not configured';
|
|
129
|
-
const model = compact(
|
|
134
|
+
const model = compact(displayModel, 24) || 'default';
|
|
130
135
|
const version = compact(options.version, 12);
|
|
131
136
|
return `Runtime: ${provider}/${model}${version ? ` · ZTC v${version}` : ''}`;
|
|
132
137
|
}
|
|
@@ -211,37 +216,39 @@ export function shouldDeferFirstRunScrollback(message, messageCount) {
|
|
|
211
216
|
export function buildCredentialSetupMessage() {
|
|
212
217
|
return [
|
|
213
218
|
'⚠️ No API credentials configured.',
|
|
214
|
-
'
|
|
219
|
+
'Set up ZTC: /setup',
|
|
215
220
|
' 1. Zerg account: /auth login',
|
|
221
|
+
' Complete signup/email verification; then /auth readiness.',
|
|
222
|
+
' Fund personal pay-as-you-go with /auth billing; review pricing and caps.',
|
|
216
223
|
' 2. Claude Code: run `claude setup-token`, export CLAUDE_CODE_OAUTH_TOKEN, then /config provider claude_code',
|
|
217
224
|
' 3. Provider API key: /config key <api-key>',
|
|
218
225
|
'You can also set the provider-specific API key environment variable.',
|
|
219
226
|
].join('\n');
|
|
220
227
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
'⚠️ No credentials yet. Choose one:',
|
|
227
|
-
' 1. Zerg account: /auth login',
|
|
228
|
-
' 2. Claude Code: claude setup-token, then /config provider claude_code',
|
|
229
|
-
' 3. Provider key: /config key <api-key>',
|
|
230
|
-
].join('\n'),
|
|
231
|
-
'Plan mode is active. Authenticate, then describe what to inspect.',
|
|
232
|
-
].join('\n\n');
|
|
233
|
-
}
|
|
228
|
+
/** Keep the paste target separate from the historical checkpoint details. */
|
|
229
|
+
export function buildSavedSessionNotice(snapshot, profile) {
|
|
230
|
+
const handoff = projectTaskHandoff(snapshot);
|
|
231
|
+
const quote = (value) => `'${value.replace(/'/g, "'\\''")}'`;
|
|
232
|
+
const command = `${handoff.resumeCommand} --cwd ${quote(handoff.snapshot.source.cwd)} --profile ${quote(profile)}`;
|
|
234
233
|
return [
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
234
|
+
'Saved project work is available.',
|
|
235
|
+
'Paste into your terminal to resume:',
|
|
236
|
+
command,
|
|
237
|
+
'',
|
|
238
|
+
formatTaskHandoffContext(handoff.snapshot),
|
|
239
|
+
].join('\n');
|
|
240
|
+
}
|
|
241
|
+
export function buildNoCredentialsWelcome(options = {}) {
|
|
242
|
+
const credentials = [
|
|
243
|
+
'⚠️ No credentials yet. Set up ZTC: /setup',
|
|
244
|
+
' 1. Zerg account: /auth login (finish email verification in the browser)',
|
|
245
|
+
' Funding: /auth readiness · Pay-as-you-go and caps: /auth billing',
|
|
246
|
+
' 2. Claude Code: claude setup-token, then /config provider claude_code',
|
|
247
|
+
' 3. Provider key: /config key <api-key>',
|
|
248
|
+
].join('\n');
|
|
249
|
+
return [WELCOME_TITLE, credentials, isPlanMode(options.mode)
|
|
250
|
+
? 'Plan mode is active. Authenticate, then describe what to inspect.'
|
|
251
|
+
: formatFirstRunWorkflows(), ...(isPlanMode(options.mode) ? [] : ['Use /help for every command.'])].join('\n\n');
|
|
245
252
|
}
|
|
246
253
|
export function buildReadyWelcome(options = {}) {
|
|
247
254
|
const permissionProfile = compact(options.permissionProfile, 20) || 'trusted';
|
|
@@ -289,6 +296,7 @@ export function buildResumedWelcome(options) {
|
|
|
289
296
|
planMode && context ? `Context: ${context}` : undefined,
|
|
290
297
|
formatRuntimeLine(options),
|
|
291
298
|
formatIdentityLine(options),
|
|
299
|
+
credentialsReady ? undefined : 'Set up ZTC: /setup',
|
|
292
300
|
credentialsReady
|
|
293
301
|
? undefined
|
|
294
302
|
: 'Authentication: required · /auth login or /config key <api-key>',
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ConfigController } from '../agent/commands/types.js';
|
|
2
|
+
import { type SetupAgentProbeResult } from './setup_agent_health.js';
|
|
3
|
+
import { type SetupCheckStatus, type SetupEnvironmentReport, type SetupInstallAttempt } from './setup_environment.js';
|
|
4
|
+
import { type SetupWorkspaceResult } from './setup_workspace.js';
|
|
5
|
+
export interface SetupStepResult {
|
|
6
|
+
id: 'configuration' | 'workspace' | 'shell' | 'agent';
|
|
7
|
+
status: SetupCheckStatus;
|
|
8
|
+
detail: string;
|
|
9
|
+
}
|
|
10
|
+
export interface SetupReport {
|
|
11
|
+
status: 'ready' | 'needs_auth' | 'blocked' | 'cancelled';
|
|
12
|
+
environment?: SetupEnvironmentReport;
|
|
13
|
+
installations: SetupInstallAttempt[];
|
|
14
|
+
steps: SetupStepResult[];
|
|
15
|
+
workspace?: SetupWorkspaceResult;
|
|
16
|
+
agent?: SetupAgentProbeResult;
|
|
17
|
+
}
|
|
18
|
+
export interface CompleteSetupOptions {
|
|
19
|
+
config: ConfigController;
|
|
20
|
+
cwd: string;
|
|
21
|
+
env?: NodeJS.ProcessEnv;
|
|
22
|
+
signal?: AbortSignal;
|
|
23
|
+
workspaceRoot?: string;
|
|
24
|
+
agentTimeoutMs?: number;
|
|
25
|
+
/** Requires an explicit human confirmation in the command UI. May use paid quota. */
|
|
26
|
+
checkAgent?: boolean;
|
|
27
|
+
onProgress?: (message: string) => void;
|
|
28
|
+
}
|
|
29
|
+
/** One setup action over existing runtime, accounts and canonical sessions. */
|
|
30
|
+
export declare function completeSetup(options: CompleteSetupOptions): Promise<SetupReport>;
|
|
31
|
+
/** A bounded success/failure readout, including optional tools and next actions. */
|
|
32
|
+
export declare function formatSetupReport(report: SetupReport): string;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { profileConfigDir } from '../config/profiles.js';
|
|
4
|
+
import { loadDesktopRuntime } from '../desktop/runtime.js';
|
|
5
|
+
import { probeSetupAgent } from './setup_agent_health.js';
|
|
6
|
+
import { inspectSetupEnvironment, installMissingSetupTools, runSetupShellHealth, } from './setup_environment.js';
|
|
7
|
+
import { ensureSetupWorkspace } from './setup_workspace.js';
|
|
8
|
+
import { sanitizeTerminalText } from '../ui/core/text_width.js';
|
|
9
|
+
/** Existing configuration bytes are kept; a fresh config must survive a real read. */
|
|
10
|
+
async function ensureConfiguration(config) {
|
|
11
|
+
const path = join(profileConfigDir(), 'config.json');
|
|
12
|
+
let text;
|
|
13
|
+
try {
|
|
14
|
+
text = await readFile(path, 'utf8');
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
if (error.code !== 'ENOENT')
|
|
18
|
+
throw error;
|
|
19
|
+
await config.save();
|
|
20
|
+
// ConfigStore.save logs failures rather than rejecting: do not treat its
|
|
21
|
+
// return as evidence that defaults were persisted.
|
|
22
|
+
text = await readFile(path, 'utf8');
|
|
23
|
+
}
|
|
24
|
+
const saved = JSON.parse(text);
|
|
25
|
+
if (typeof saved !== 'object' || saved === null || Array.isArray(saved)) {
|
|
26
|
+
throw new Error('Saved configuration is not a configuration object.');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function cancelled(options) {
|
|
30
|
+
return options.signal?.aborted === true;
|
|
31
|
+
}
|
|
32
|
+
/** One setup action over existing runtime, accounts and canonical sessions. */
|
|
33
|
+
export async function completeSetup(options) {
|
|
34
|
+
const report = { status: 'blocked', installations: [], steps: [] };
|
|
35
|
+
if (cancelled(options))
|
|
36
|
+
return { ...report, status: 'cancelled' };
|
|
37
|
+
let runtimeKind;
|
|
38
|
+
try {
|
|
39
|
+
runtimeKind = loadDesktopRuntime() ? 'bundled' : 'host';
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
report.steps.push({ id: 'configuration', status: 'failed', detail: 'The bundled runtime could not be validated. Restart the matching app bundle or reinstall it, then run /setup.' });
|
|
43
|
+
return report;
|
|
44
|
+
}
|
|
45
|
+
const inspection = { cwd: options.cwd, env: options.env, signal: options.signal, runtimeKind };
|
|
46
|
+
options.onProgress?.('Checking the running Node, shell, tools and GitHub sign-in…');
|
|
47
|
+
report.environment = await inspectSetupEnvironment(inspection);
|
|
48
|
+
if (cancelled(options))
|
|
49
|
+
return { ...report, status: 'cancelled' };
|
|
50
|
+
const missing = report.environment.checks.filter(check => (check.id === 'git' || check.id === 'rg') && check.status === 'missing')
|
|
51
|
+
.map(check => check.id);
|
|
52
|
+
if (missing.length && report.environment.packageManager.status === 'ready') {
|
|
53
|
+
options.onProgress?.(`Installing missing ${missing.map(tool => tool === 'rg' ? 'ripgrep' : 'Git').join(' and ')} using the detected package manager…`);
|
|
54
|
+
const installed = await installMissingSetupTools({ ...inspection, tools: missing });
|
|
55
|
+
report.installations = installed.attempts;
|
|
56
|
+
report.environment = installed.after;
|
|
57
|
+
}
|
|
58
|
+
if (cancelled(options))
|
|
59
|
+
return { ...report, status: 'cancelled' };
|
|
60
|
+
if (!report.environment.ready)
|
|
61
|
+
return report;
|
|
62
|
+
try {
|
|
63
|
+
await ensureConfiguration(options.config);
|
|
64
|
+
report.steps.push({ id: 'configuration', status: 'ready', detail: 'Existing account, model and configuration are preserved; configuration storage is readable.' });
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
report.steps.push({ id: 'configuration', status: 'failed', detail: 'Configuration could not be persisted or read. Check the active profile’s config.json and storage permissions, preserve existing data, then run /setup.' });
|
|
68
|
+
return report;
|
|
69
|
+
}
|
|
70
|
+
const llm = options.config.resolveLLMBackendConfig();
|
|
71
|
+
try {
|
|
72
|
+
report.workspace = await ensureSetupWorkspace({ workspaceRoot: options.workspaceRoot, provider: llm.provider, model: llm.model, signal: options.signal });
|
|
73
|
+
report.steps.push({ id: 'workspace', status: 'ready', detail: report.workspace.created ? 'Sample workspace and canonical session created.' : 'Existing sample workspace, edits and canonical session preserved.' });
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
report.steps.push({ id: 'workspace', status: cancelled(options) ? 'cancelled' : 'failed', detail: 'The sample workspace could not be created or verified. Preserve existing files, check the getting-started directory and session-storage permissions, then run /setup.' });
|
|
77
|
+
if (cancelled(options))
|
|
78
|
+
report.status = 'cancelled';
|
|
79
|
+
return report;
|
|
80
|
+
}
|
|
81
|
+
const shell = await runSetupShellHealth({ ...inspection, cwd: report.workspace.path });
|
|
82
|
+
report.steps.push({ id: 'shell', status: shell.status, detail: shell.detail });
|
|
83
|
+
if (cancelled(options))
|
|
84
|
+
return { ...report, status: 'cancelled' };
|
|
85
|
+
if (shell.status !== 'ready')
|
|
86
|
+
return report;
|
|
87
|
+
if (!options.checkAgent) {
|
|
88
|
+
report.status = 'ready';
|
|
89
|
+
return report;
|
|
90
|
+
}
|
|
91
|
+
options.onProgress?.('Checking the selected account and model with one short, isolated agent request…');
|
|
92
|
+
report.agent = await probeSetupAgent({
|
|
93
|
+
config: options.config.get(), provider: llm.provider, model: llm.model,
|
|
94
|
+
cwd: report.workspace.path, signal: options.signal, timeoutMs: options.agentTimeoutMs,
|
|
95
|
+
});
|
|
96
|
+
report.steps.push({ id: 'agent', status: report.agent.status, detail: report.agent.detail });
|
|
97
|
+
report.status = cancelled(options) ? 'cancelled'
|
|
98
|
+
: report.agent.status === 'ready' ? 'ready'
|
|
99
|
+
: report.agent.status === 'missing' ? 'needs_auth' : 'blocked';
|
|
100
|
+
return report;
|
|
101
|
+
}
|
|
102
|
+
function safeLine(value) {
|
|
103
|
+
return sanitizeTerminalText(value).replace(/\s+/g, ' ').slice(0, 280);
|
|
104
|
+
}
|
|
105
|
+
/** A bounded success/failure readout, including optional tools and next actions. */
|
|
106
|
+
export function formatSetupReport(report) {
|
|
107
|
+
const title = report.status === 'ready' ? (report.agent ? 'ZTC setup complete — shell and agent are ready.' : 'ZTC environment ready — no model quota used.')
|
|
108
|
+
: report.status === 'cancelled' ? 'ZTC setup cancelled. Completed steps were preserved; run /setup to resume.'
|
|
109
|
+
: report.status === 'needs_auth' ? 'ZTC setup needs an account.'
|
|
110
|
+
: 'ZTC setup incomplete — review the checks below, then run /setup again.';
|
|
111
|
+
const lines = [title];
|
|
112
|
+
const env = report.environment;
|
|
113
|
+
if (env) {
|
|
114
|
+
lines.push(`OS: ${env.platform}`, `Node (${env.node.runtimeKind}): ${env.node.status} — ${safeLine(env.node.version)}`, `Shell: ${env.shell.status} — ${safeLine(env.shell.detail)}`, `Package manager: ${env.packageManager.status} — ${safeLine(env.packageManager.detail)}`);
|
|
115
|
+
for (const check of env.checks)
|
|
116
|
+
lines.push(`${check.label}${check.required ? ' (required)' : ''}: ${check.status} — ${safeLine(check.detail)}`);
|
|
117
|
+
}
|
|
118
|
+
for (const attempt of report.installations)
|
|
119
|
+
lines.push(`Install ${attempt.tool}: ${attempt.status} — ${safeLine(attempt.detail)}`);
|
|
120
|
+
for (const step of report.steps)
|
|
121
|
+
lines.push(`${step.id}: ${step.status} — ${safeLine(step.detail)}`);
|
|
122
|
+
if (report.agent)
|
|
123
|
+
lines.push(`Selected model: ${safeLine(report.agent.provider)}/${safeLine(report.agent.model)}`);
|
|
124
|
+
if (report.workspace) {
|
|
125
|
+
lines.push(`Sample: ${safeLine(report.workspace.path)}`, `Sample session: ${report.workspace.sessionId}`, `Open the sample: /cd ${safeLine(report.workspace.path)}; then /resume ${report.workspace.sessionId}`);
|
|
126
|
+
}
|
|
127
|
+
if (report.status === 'needs_auth')
|
|
128
|
+
lines.push('Next: /auth login for Zerg Router, or /accounts and /config for your existing provider. Then run /setup.');
|
|
129
|
+
if (!report.agent && report.status === 'ready')
|
|
130
|
+
lines.push('Next: /auth login, then /auth readiness to check personal funding. Review pay-as-you-go pricing and caps with /auth billing. Optional /setup --check-agent sends one bounded model request after confirmation.');
|
|
131
|
+
lines.push('Your current project, conversation, shell configuration and PATH are preserved.');
|
|
132
|
+
return lines.join('\n');
|
|
133
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ZTCConfig } from '../config/types.js';
|
|
2
|
+
export interface SetupAgentProbeOptions {
|
|
3
|
+
config: ZTCConfig;
|
|
4
|
+
provider: string;
|
|
5
|
+
model: string;
|
|
6
|
+
cwd: string;
|
|
7
|
+
signal?: AbortSignal;
|
|
8
|
+
timeoutMs?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface SetupAgentProbeResult {
|
|
11
|
+
status: 'ready' | 'missing' | 'failed' | 'timeout' | 'cancelled' | 'unsupported';
|
|
12
|
+
detail: string;
|
|
13
|
+
provider: string;
|
|
14
|
+
model: string;
|
|
15
|
+
}
|
|
16
|
+
/** Check an isolated, tool-free turn without borrowing the active conversation. */
|
|
17
|
+
export declare function probeSetupAgent(options: SetupAgentProbeOptions): Promise<SetupAgentProbeResult>;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { Agent } from '../agent/agent.js';
|
|
3
|
+
import { resolveAgentBackendFromConfig } from '../agent/factory.js';
|
|
4
|
+
import { runtimePluginRegistry } from '../plugin/runtime_registry.js';
|
|
5
|
+
/** Check an isolated, tool-free turn without borrowing the active conversation. */
|
|
6
|
+
export async function probeSetupAgent(options) {
|
|
7
|
+
const result = (status, detail) => ({
|
|
8
|
+
status, detail, provider: options.provider, model: options.model,
|
|
9
|
+
});
|
|
10
|
+
if (options.signal?.aborted)
|
|
11
|
+
return result('cancelled', 'Health check cancelled.');
|
|
12
|
+
const timeoutMs = options.timeoutMs ?? 15_000;
|
|
13
|
+
if (timeoutMs <= 0)
|
|
14
|
+
return result('timeout', 'Health check deadline expired. Retry when ready.');
|
|
15
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs > 30_000) {
|
|
16
|
+
return result('failed', 'Health check deadline must be a finite value of at most 30 seconds.');
|
|
17
|
+
}
|
|
18
|
+
if (!options.provider.trim() || !options.model.trim()) {
|
|
19
|
+
return result('missing', 'Choose a provider and model before checking its connection.');
|
|
20
|
+
}
|
|
21
|
+
// Plugin hosts own conversation admission. A local health turn must never
|
|
22
|
+
// inherit their currently selected cloud conversation or credential broker.
|
|
23
|
+
if (process.env.ZTC_HOST_RUNTIME !== undefined || runtimePluginRegistry.resolveHostRuntime({ mode: 'normal' })) {
|
|
24
|
+
return result('unsupported', 'This host owns its conversation. Check the connection through the host, then retry local setup.');
|
|
25
|
+
}
|
|
26
|
+
const config = structuredClone(options.config);
|
|
27
|
+
if (config.accounts) {
|
|
28
|
+
config.accounts.rotation = { enabled: false, mode: 'failover', defaultCooldownMs: 0,
|
|
29
|
+
weeklyCooldownMs: 0, subagentInheritance: 'inherit' };
|
|
30
|
+
}
|
|
31
|
+
// Native Codex owns subprocess tools independently of Agent's tool list.
|
|
32
|
+
// Keep this fresh diagnostic thread read-only while retaining its account.
|
|
33
|
+
config.codexAppServer = { ...config.codexAppServer, sandbox: 'read-only' };
|
|
34
|
+
const owner = new AbortController();
|
|
35
|
+
let expired = false;
|
|
36
|
+
const cancel = () => owner.abort();
|
|
37
|
+
options.signal?.addEventListener('abort', cancel, { once: true });
|
|
38
|
+
const timer = setTimeout(() => { expired = true; owner.abort(); }, timeoutMs);
|
|
39
|
+
let agent;
|
|
40
|
+
try {
|
|
41
|
+
const sessionId = `setup-health-${randomUUID()}`;
|
|
42
|
+
const resolved = resolveAgentBackendFromConfig({ config, provider: options.provider,
|
|
43
|
+
model: options.model, cwd: options.cwd, sessionId });
|
|
44
|
+
if (!resolved)
|
|
45
|
+
return result('missing', 'No usable credentials or endpoint. Sign in or configure this provider, then retry.');
|
|
46
|
+
agent = new Agent({
|
|
47
|
+
backend: resolved.backend, apiKey: resolved.apiKey, model: resolved.model,
|
|
48
|
+
sessionId, cwd: options.cwd, tools: [], ambientDiscovery: false,
|
|
49
|
+
disableApiKeyFallback: true, runtimeCredentialsAvailable: resolved.provider === 'openai_compatible',
|
|
50
|
+
autoContinue: false, maxIterations: 1, maxTokens: 64,
|
|
51
|
+
apiRetry: { maxAttempts: 1, baseDelayMs: 0, recoveryWindowMs: 0 },
|
|
52
|
+
systemPrompt: 'This is a connection health check. Reply briefly with plain text. Do not call tools or change files.',
|
|
53
|
+
});
|
|
54
|
+
const reply = await agent.run([{ id: randomUUID(), role: 'user',
|
|
55
|
+
content: 'Confirm this connection is responding.', timestamp: new Date() }], owner.signal);
|
|
56
|
+
if (options.signal?.aborted)
|
|
57
|
+
return result('cancelled', 'Health check cancelled.');
|
|
58
|
+
if (expired)
|
|
59
|
+
return result('timeout', 'Health check timed out. Check the provider connection and retry.');
|
|
60
|
+
if (reply.stopReason !== 'complete' || reply.toolCalls.length !== 0 || !reply.content.trim()) {
|
|
61
|
+
return result('failed', 'The provider did not complete a nonempty, tool-free reply. Check its model settings and retry.');
|
|
62
|
+
}
|
|
63
|
+
return result('ready', 'The provider completed an isolated connection check.');
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
if (options.signal?.aborted)
|
|
67
|
+
return result('cancelled', 'Health check cancelled.');
|
|
68
|
+
if (expired)
|
|
69
|
+
return result('timeout', 'Health check timed out. Check the provider connection and retry.');
|
|
70
|
+
// Provider errors and output can contain credential echoes. Fixed details
|
|
71
|
+
// stay bounded and never copy those payloads into setup's visible report.
|
|
72
|
+
return result('failed', 'Health check failed. Check provider credentials, model access and endpoint, then retry.');
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
clearTimeout(timer);
|
|
76
|
+
options.signal?.removeEventListener('abort', cancel);
|
|
77
|
+
agent?.dispose();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export type SetupCheckStatus = 'ready' | 'missing' | 'unsupported' | 'timeout' | 'failed' | 'cancelled' | 'output_limit';
|
|
2
|
+
export type SetupRuntimeKind = 'host' | 'bundled';
|
|
3
|
+
export type SetupInstallTool = 'git' | 'rg';
|
|
4
|
+
export type SetupPackageManagerId = 'brew' | 'apt' | 'dnf';
|
|
5
|
+
export type SetupToolId = 'git' | 'rg' | 'gh' | 'gh_auth' | 'python' | 'bun' | 'deno' | 'make' | 'curl' | 'ssh' | 'tar' | 'unzip';
|
|
6
|
+
export interface SetupInspectionOptions {
|
|
7
|
+
cwd?: string;
|
|
8
|
+
/** A child-only environment; inspection never changes process.env or PATH. */
|
|
9
|
+
env?: NodeJS.ProcessEnv;
|
|
10
|
+
signal?: AbortSignal;
|
|
11
|
+
/** Supplied by the caller's established desktop-runtime ownership check. */
|
|
12
|
+
runtimeKind?: SetupRuntimeKind;
|
|
13
|
+
}
|
|
14
|
+
export interface SetupToolCheck {
|
|
15
|
+
id: SetupToolId;
|
|
16
|
+
label: string;
|
|
17
|
+
required: boolean;
|
|
18
|
+
status: SetupCheckStatus;
|
|
19
|
+
detail: string;
|
|
20
|
+
version?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface SetupShellHealth {
|
|
23
|
+
name: string;
|
|
24
|
+
path: string;
|
|
25
|
+
status: SetupCheckStatus;
|
|
26
|
+
detail: string;
|
|
27
|
+
}
|
|
28
|
+
export interface SetupEnvironmentReport {
|
|
29
|
+
platform: NodeJS.Platform;
|
|
30
|
+
shell: SetupShellHealth;
|
|
31
|
+
node: {
|
|
32
|
+
version: string;
|
|
33
|
+
executable: string;
|
|
34
|
+
runtimeKind: SetupRuntimeKind;
|
|
35
|
+
status: SetupCheckStatus;
|
|
36
|
+
detail: string;
|
|
37
|
+
};
|
|
38
|
+
packageManager: {
|
|
39
|
+
id: SetupPackageManagerId | null;
|
|
40
|
+
status: SetupCheckStatus;
|
|
41
|
+
detail: string;
|
|
42
|
+
};
|
|
43
|
+
checks: SetupToolCheck[];
|
|
44
|
+
ready: boolean;
|
|
45
|
+
}
|
|
46
|
+
export interface SetupInstallOptions extends SetupInspectionOptions {
|
|
47
|
+
tools: readonly SetupInstallTool[];
|
|
48
|
+
}
|
|
49
|
+
export interface SetupInstallAttempt {
|
|
50
|
+
tool: SetupInstallTool;
|
|
51
|
+
status: SetupCheckStatus;
|
|
52
|
+
action: 'installed' | 'skipped' | 'not_installed';
|
|
53
|
+
command?: string;
|
|
54
|
+
args?: string[];
|
|
55
|
+
detail: string;
|
|
56
|
+
}
|
|
57
|
+
export interface SetupInstallReport {
|
|
58
|
+
before: SetupEnvironmentReport;
|
|
59
|
+
attempts: SetupInstallAttempt[];
|
|
60
|
+
after: SetupEnvironmentReport;
|
|
61
|
+
}
|
|
62
|
+
/** Health uses only an allowlisted shell name and a fixed, literal sentinel. */
|
|
63
|
+
export declare function runSetupShellHealth(options?: SetupInspectionOptions): Promise<SetupShellHealth>;
|
|
64
|
+
export declare function inspectSetupEnvironment(options?: SetupInspectionOptions): Promise<SetupEnvironmentReport>;
|
|
65
|
+
/** Only fixed package names/argv are supported; no sudo or arbitrary command input. */
|
|
66
|
+
export declare function installMissingSetupTools(options: SetupInstallOptions): Promise<SetupInstallReport>;
|