@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
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { resolve } from 'path';
|
|
2
2
|
import { ToolCapability } from '../runtime/capabilities.js';
|
|
3
3
|
import { runShellCommand } from '../../utils/shell.js';
|
|
4
|
-
import { startCommandJob, readCommandJob, stopCommandJob } from '../runtime/command_jobs.js';
|
|
4
|
+
import { startCommandJob, readCommandJob, stopCommandJob, waitForCommandProgress } from '../runtime/command_jobs.js';
|
|
5
5
|
import { resolveExecutionSettings } from '../../config/execution.js';
|
|
6
6
|
import { configStore } from '../../config.js';
|
|
7
7
|
import { assertTemporaryRootSafe, isPathWithinRoot } from '../../utils/temporary_write_root.js';
|
|
8
|
+
import { parseCheckedCommandPlan } from '../runtime/checked_commands.js';
|
|
9
|
+
import { parseVerificationRequest } from '../runtime/source_verification_contract.js';
|
|
10
|
+
import { createCommandVerification, finishCommandVerification, projectCurrentVerification } from '../runtime/source_verification.js';
|
|
8
11
|
export const FAILURE_OUTPUT_LIMIT = 2000;
|
|
9
12
|
/**
|
|
10
13
|
* Bound failure output without losing the tail: build and test summaries and
|
|
@@ -20,31 +23,29 @@ export function summarizeCommandFailure(output, limit = FAILURE_OUTPUT_LIMIT) {
|
|
|
20
23
|
return `${output.slice(0, headLength)}\n… [${omitted} characters omitted] …\n${output.slice(-tailLength)}`;
|
|
21
24
|
}
|
|
22
25
|
/**
|
|
23
|
-
* R6/F7: actionable
|
|
24
|
-
*
|
|
26
|
+
* R6/F7: actionable hints require observed diagnostics or executor evidence.
|
|
27
|
+
* A nonzero predicate outcome alone establishes neither cause nor completeness.
|
|
28
|
+
* Returns null when nothing useful can be said. Pure + exported
|
|
25
29
|
* so it can be unit-tested without spawning a process.
|
|
26
30
|
*/
|
|
27
|
-
export function shellErrorHint(exitCode, stderr, hasStdout) {
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
if (exitCode === 124) {
|
|
32
|
-
return 'The command hit its timeout and was killed — its output is incomplete. Retry with a larger timeout (maximum 600000 ms), or narrow the command so it finishes sooner.';
|
|
31
|
+
export function shellErrorHint(exitCode, stderr, hasStdout, timedOut = false) {
|
|
32
|
+
// A program can exit 124 without a timer firing. Only the executor knows the cause.
|
|
33
|
+
if (timedOut) {
|
|
34
|
+
return 'The command hit its timeout and local cleanup was requested; its output is incomplete. Retry with a larger timeout, use a managed background command for longer work, or narrow the command so it finishes sooner. Remote cleanup is unknown.';
|
|
33
35
|
}
|
|
34
36
|
if (/unrecognized option|invalid option|illegal option/i.test(stderr)) {
|
|
35
37
|
return "The command rejected an option it does not recognize. If it looks like a ZTC concept (e.g. '--pane'), that is not a shell flag — pane targeting uses the pane tools (create_ztc_pane / ask_ztc_pane). Otherwise re-run with valid flags only.";
|
|
36
38
|
}
|
|
37
|
-
if (exitCode === 127) {
|
|
39
|
+
if (exitCode === 127 && /not found/i.test(stderr)) {
|
|
38
40
|
return 'Command not found — the binary is not installed or not on PATH. Check the name or install it.';
|
|
39
41
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return 'This command produced output but exited non-zero — the output is PARTIAL, not authoritative. Some entries were likely skipped (e.g. permission-denied subtrees). Do not treat it as complete; narrow the path or read specific files directly.';
|
|
42
|
+
if (/permission denied|EACCES/i.test(stderr)) {
|
|
43
|
+
return hasStdout
|
|
44
|
+
? 'Permission denied — the command reported an access failure while producing output. Do not treat the output as complete for the inaccessible resources; inspect the reported paths and correct access or narrow the command.'
|
|
45
|
+
: 'Permission denied — the command reported an access failure. Inspect the reported path and permissions or use a different command.';
|
|
45
46
|
}
|
|
46
|
-
if (
|
|
47
|
-
return '
|
|
47
|
+
if (hasStdout) {
|
|
48
|
+
return 'This command produced output and exited non-zero. Output completeness and the failure cause are unknown; inspect the captured diagnostics and the program’s exit-status contract before retrying.';
|
|
48
49
|
}
|
|
49
50
|
return null;
|
|
50
51
|
}
|
|
@@ -56,14 +57,27 @@ function failedCommandReceipt(content) {
|
|
|
56
57
|
return false;
|
|
57
58
|
}
|
|
58
59
|
}
|
|
60
|
+
function executionObservation(policy) {
|
|
61
|
+
if (!policy)
|
|
62
|
+
return {};
|
|
63
|
+
const observed = Date.now();
|
|
64
|
+
const elapsed = observed - Date.parse(policy.started_at);
|
|
65
|
+
return { execution_policy: policy, ...(Number.isSafeInteger(elapsed) && elapsed >= 0
|
|
66
|
+
? { observed_at: new Date(observed).toISOString(), elapsed_ms: elapsed } : {}) };
|
|
67
|
+
}
|
|
59
68
|
// --- Shell Tool ---
|
|
69
|
+
function resolveRunCommandCwd(args, context) {
|
|
70
|
+
const baseCwd = context?.cwd || process.cwd();
|
|
71
|
+
return args.cwd ? resolve(baseCwd, String(args.cwd)) : baseCwd;
|
|
72
|
+
}
|
|
60
73
|
export const runCommandTool = {
|
|
61
74
|
isErrorResult: failedCommandReceipt,
|
|
75
|
+
resolveExecutionCwd: resolveRunCommandCwd,
|
|
62
76
|
capabilities: [ToolCapability.SHELL_EXEC],
|
|
63
77
|
definition: {
|
|
64
78
|
name: 'run_command',
|
|
65
79
|
overlapsProviderHarness: true,
|
|
66
|
-
description: 'Run
|
|
80
|
+
description: 'Run either ordinary shell text or an explicit checked literal-argv plan. For builds/tests prefer checked steps and bounded managed logs instead of piping shell text into tail. Checked pipelines report every declared stage and gate later steps; they do not certify source/build correctness or child-script internals. Local macOS/Linux Bash only.',
|
|
67
81
|
parameters: {
|
|
68
82
|
type: 'object',
|
|
69
83
|
properties: {
|
|
@@ -71,34 +85,74 @@ export const runCommandTool = {
|
|
|
71
85
|
type: 'string',
|
|
72
86
|
description: 'Shell command to execute'
|
|
73
87
|
},
|
|
88
|
+
checked: {
|
|
89
|
+
type: 'object', description: 'Mutually exclusive with command. Up to 8 ordered steps, each with up to 8 concurrent pipeline stages. Literal executable/args only; default acceptable_exit_codes [0]. A later step runs only after every prior declared stage is accepted. Explicit predicates may accept 1 or 141; exit 141 is not proven SIGPIPE. Total normalized plan ≤16KiB.',
|
|
90
|
+
properties: { steps: { type: 'array', minItems: 1, maxItems: 8, items: {
|
|
91
|
+
type: 'object', required: ['id', 'pipeline'], additionalProperties: false,
|
|
92
|
+
properties: { id: { type: 'string', maxLength: 64 }, pipeline: {
|
|
93
|
+
type: 'array', minItems: 1, maxItems: 8, items: {
|
|
94
|
+
type: 'object', required: ['executable', 'args'], additionalProperties: false,
|
|
95
|
+
properties: { executable: { type: 'string', maxLength: 512 }, args: {
|
|
96
|
+
type: 'array', maxItems: 64, items: { type: 'string', maxLength: 4096 }
|
|
97
|
+
},
|
|
98
|
+
acceptable_exit_codes: { type: 'array', minItems: 1, maxItems: 8,
|
|
99
|
+
items: { type: 'integer', minimum: 0, maximum: 255 } } },
|
|
100
|
+
},
|
|
101
|
+
} },
|
|
102
|
+
} } }, required: ['steps'], additionalProperties: false,
|
|
103
|
+
},
|
|
74
104
|
cwd: {
|
|
75
105
|
type: 'string',
|
|
76
106
|
description: 'Working directory for the command'
|
|
77
107
|
},
|
|
108
|
+
verification: {
|
|
109
|
+
type: 'object', description: 'Optional scoped source observations. Declared purpose is separate from actual process outcome and never certifies semantic qualification. Capture up to64 relative files (2MiB each,8MiB total), with source digests and Git metadata; current/stale/unknown applicability is checked separately. Local execution only.',
|
|
110
|
+
required: ['purpose', 'scope', 'source_paths'], additionalProperties: false,
|
|
111
|
+
properties: {
|
|
112
|
+
purpose: { type: 'string', enum: ['compile', 'test', 'benchmark', 'qualification'] },
|
|
113
|
+
scope: { type: 'string', maxLength: 512 },
|
|
114
|
+
source_paths: { type: 'array', minItems: 1, maxItems: 64, items: { type: 'string', maxLength: 512 } },
|
|
115
|
+
environment_id: { type: 'string', maxLength: 256 }, build_identity: { type: 'string', maxLength: 256 },
|
|
116
|
+
instrumentation: { type: 'string', enum: ['production', 'diagnostic', 'unknown'] },
|
|
117
|
+
},
|
|
118
|
+
},
|
|
78
119
|
timeout: {
|
|
79
|
-
type: '
|
|
80
|
-
description: '
|
|
120
|
+
type: 'integer', minimum: 1, maximum: 86400000,
|
|
121
|
+
description: 'Process lifetime in milliseconds. Foreground: 1–600000, omitted uses local 30000 or Docker 120000. Native background: 1–86400000 (24 hours), omitted is unlimited. Independent of initial yield and read waits. Outer owner deadlines still apply; local wrapper cleanup does not prove remote cleanup.'
|
|
81
122
|
},
|
|
82
123
|
background: { type: 'boolean', description: 'Start a managed background job. Use read_command and stop_command with its job_id; survives a turn interrupt by default.' },
|
|
83
|
-
yield_time_ms: { type: '
|
|
124
|
+
yield_time_ms: { type: 'integer', minimum: 0, maximum: 60000, description: 'Initial background observation wait, 0–60000ms (default 1000). Expiry returns a running receipt and does not stop the process.' },
|
|
84
125
|
stdin: {
|
|
85
126
|
type: 'string',
|
|
86
127
|
description: 'Optional text written to the command stdin. Prefer this over heredocs or nested quoting for multi-line payloads (e.g. git commit -F -).'
|
|
87
128
|
}
|
|
88
129
|
},
|
|
89
|
-
required: ['command']
|
|
130
|
+
oneOf: [{ required: ['command'] }, { required: ['checked'] }],
|
|
90
131
|
}
|
|
91
132
|
},
|
|
92
133
|
execute: async (args, context) => {
|
|
93
|
-
|
|
134
|
+
const hasChecked = Object.hasOwn(args, 'checked');
|
|
135
|
+
const hasVerification = Object.hasOwn(args, 'verification');
|
|
136
|
+
const verificationRequest = hasVerification ? parseVerificationRequest(args.verification) : undefined;
|
|
137
|
+
if (hasVerification && !verificationRequest)
|
|
138
|
+
throw new Error('run_command: invalid source verification request');
|
|
139
|
+
if (hasVerification && process.env.ZTC_DOCKER_CONTAINER) {
|
|
140
|
+
throw new Error('Source verification supports local execution only; Docker source inputs cannot be captured from this host.');
|
|
141
|
+
}
|
|
142
|
+
if (hasChecked && Object.hasOwn(args, 'command')) {
|
|
143
|
+
throw new Error('run_command: provide exactly one of command or checked; they are mutually exclusive');
|
|
144
|
+
}
|
|
145
|
+
const checked = hasChecked ? parseCheckedCommandPlan(args.checked) : undefined;
|
|
146
|
+
if (hasChecked && !checked)
|
|
147
|
+
throw new Error('run_command: invalid checked plan');
|
|
148
|
+
if (!hasChecked && (args.command === undefined || args.command === null)) {
|
|
94
149
|
throw new Error('run_command: command argument is required but was not provided');
|
|
95
150
|
}
|
|
96
|
-
const command = String(args.command);
|
|
151
|
+
const command = checked ? JSON.stringify(checked) : String(args.command);
|
|
97
152
|
if (command === 'undefined' || command.trim() === '') {
|
|
98
153
|
throw new Error(`run_command: command argument is invalid: "${command}"`);
|
|
99
154
|
}
|
|
100
|
-
const
|
|
101
|
-
const cwd = args.cwd ? resolve(baseCwd, String(args.cwd)) : baseCwd;
|
|
155
|
+
const cwd = resolveRunCommandCwd(args, context);
|
|
102
156
|
const temporaryWriteRoot = context?.temporaryWriteRoot === undefined
|
|
103
157
|
? undefined
|
|
104
158
|
: resolve(context.temporaryWriteRoot);
|
|
@@ -117,17 +171,23 @@ export const runCommandTool = {
|
|
|
117
171
|
if (parsed <= 0) {
|
|
118
172
|
throw new Error('run_command: timeout must be greater than 0 milliseconds');
|
|
119
173
|
}
|
|
120
|
-
if (
|
|
121
|
-
throw new Error('run_command: timeout must be
|
|
174
|
+
if (typeof args.timeout === 'boolean' || !Number.isSafeInteger(parsed)) {
|
|
175
|
+
throw new Error('run_command: timeout must be an integer number of milliseconds');
|
|
176
|
+
}
|
|
177
|
+
const maximum = args.background === true ? 86400000 : 600000;
|
|
178
|
+
if (parsed > maximum) {
|
|
179
|
+
throw new Error(`run_command: timeout must be less than or equal to ${maximum} milliseconds`);
|
|
122
180
|
}
|
|
123
|
-
timeoutMs =
|
|
181
|
+
timeoutMs = parsed;
|
|
124
182
|
}
|
|
125
183
|
// Use runShellCommand which handles docker routing via ZTC_DOCKER_CONTAINER
|
|
126
184
|
const config = configStore.get();
|
|
127
|
-
const
|
|
128
|
-
const
|
|
185
|
+
const admitted = context?.commandPolicy;
|
|
186
|
+
const profileId = admitted?.profileId ?? config.permissionProfile ?? 'trusted';
|
|
187
|
+
const baseProfile = admitted === undefined ? config.permissionProfiles?.[profileId] : admitted.profile;
|
|
188
|
+
const baseSandbox = admitted === undefined ? config.sandbox : admitted.sandbox;
|
|
129
189
|
const profile = temporaryWriteRoot === undefined
|
|
130
|
-
?
|
|
190
|
+
? baseProfile
|
|
131
191
|
: {
|
|
132
192
|
...(baseProfile || {}),
|
|
133
193
|
allowedPaths: [temporaryWriteRoot],
|
|
@@ -137,9 +197,9 @@ export const runCommandTool = {
|
|
|
137
197
|
},
|
|
138
198
|
};
|
|
139
199
|
const sandbox = temporaryWriteRoot === undefined
|
|
140
|
-
?
|
|
200
|
+
? baseSandbox
|
|
141
201
|
: {
|
|
142
|
-
...(
|
|
202
|
+
...(baseSandbox || {}),
|
|
143
203
|
requireOsEnforcement: true,
|
|
144
204
|
};
|
|
145
205
|
const stdin = typeof args.stdin === 'string'
|
|
@@ -153,6 +213,7 @@ export const runCommandTool = {
|
|
|
153
213
|
temporaryWriteRoot,
|
|
154
214
|
stdin,
|
|
155
215
|
env: context?.subprocessEnv,
|
|
216
|
+
...(checked ? { checked } : {}),
|
|
156
217
|
};
|
|
157
218
|
if (args.background === true) {
|
|
158
219
|
if (temporaryWriteRoot)
|
|
@@ -163,44 +224,107 @@ export const runCommandTool = {
|
|
|
163
224
|
if (!Number.isSafeInteger(wait) || wait < 0 || wait > 60000)
|
|
164
225
|
throw new Error('yield_time_ms must be between 0 and 60000');
|
|
165
226
|
const settings = resolveExecutionSettings(config.execution);
|
|
227
|
+
const verification = verificationRequest ? await createCommandVerification(verificationRequest, cwd, command, checked ? 'checked' : 'shell') : undefined;
|
|
166
228
|
const receipt = await startCommandJob({ sessionId: context.sessionId, command, cwd, timeoutMs,
|
|
167
229
|
shell: shellOptions, maxJobs: settings.maxBackgroundJobs,
|
|
168
|
-
signal: settings.interruptBackgroundJobs ? context.signal : undefined
|
|
169
|
-
|
|
230
|
+
signal: settings.interruptBackgroundJobs ? context.signal : undefined, verification,
|
|
231
|
+
canInspectVerificationSource: context.canInspectVerificationSource });
|
|
232
|
+
const result = await readCommandJob(context.sessionId, receipt.job_id, 0, wait, context.signal, context.canInspectVerificationSource);
|
|
233
|
+
context.onManagedCommand?.({ sessionId: context.sessionId, result, requestedWaitMs: wait, kind: 'launch' });
|
|
234
|
+
return JSON.stringify(result);
|
|
235
|
+
}
|
|
236
|
+
const initialVerification = verificationRequest ? await createCommandVerification(verificationRequest, cwd, command, checked ? 'checked' : 'shell') : undefined;
|
|
237
|
+
let launchPolicy;
|
|
238
|
+
let result;
|
|
239
|
+
try {
|
|
240
|
+
result = await runShellCommand(command, cwd, context?.signal, timeoutMs, { ...shellOptions,
|
|
241
|
+
onExecutionPolicy: policy => { launchPolicy = policy; },
|
|
242
|
+
onOutput: (stream, chunk) => {
|
|
243
|
+
try {
|
|
244
|
+
context?.onOutput?.(stream, chunk);
|
|
245
|
+
}
|
|
246
|
+
catch { /* informational observer only */ }
|
|
247
|
+
} });
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
if (!initialVerification)
|
|
251
|
+
throw error;
|
|
252
|
+
const observation = executionObservation(launchPolicy);
|
|
253
|
+
const cancelled = Boolean(context?.signal?.aborted);
|
|
254
|
+
const verification = await finishCommandVerification(initialVerification, cancelled ? 'cancelled' : 'unknown', context?.canInspectVerificationSource);
|
|
255
|
+
context?.onVerificationReceipt?.(verification);
|
|
256
|
+
return JSON.stringify({ command, cwd, stdout: '', stderr: error.message,
|
|
257
|
+
...observation,
|
|
258
|
+
status: cancelled ? 'cancelled' : 'failed', verification,
|
|
259
|
+
verification_current: await projectCurrentVerification(verification, context?.canInspectVerificationSource) });
|
|
260
|
+
}
|
|
261
|
+
const observation = executionObservation(result.execution_policy);
|
|
262
|
+
if (initialVerification) {
|
|
263
|
+
const outcome = result.checked ? result.checked.status === 'passed' ? 'passed'
|
|
264
|
+
: result.checked.status === 'timed_out' ? 'timed_out' : result.checked.status === 'cancelled' ? 'cancelled' : 'failed'
|
|
265
|
+
: result.timedOut === true ? 'timed_out' : result.exitCode === 0 ? 'passed' : 'failed';
|
|
266
|
+
const verification = await finishCommandVerification(initialVerification, outcome, context?.canInspectVerificationSource);
|
|
267
|
+
context?.onVerificationReceipt?.(verification);
|
|
268
|
+
return JSON.stringify({ command: result.command, cwd: result.cwd, stdout: result.stdout, stderr: result.stderr,
|
|
269
|
+
truncated: result.truncated, exit_code: result.exitCode,
|
|
270
|
+
...observation,
|
|
271
|
+
status: outcome === 'passed' ? 'completed' : outcome === 'timed_out' ? 'timed_out' : outcome === 'cancelled' ? 'cancelled' : 'failed',
|
|
272
|
+
...(result.checked ? { checked: result.checked } : {}), verification,
|
|
273
|
+
verification_current: await projectCurrentVerification(verification, context?.canInspectVerificationSource) });
|
|
274
|
+
}
|
|
275
|
+
if (result.checked) {
|
|
276
|
+
return JSON.stringify({ command: result.command, cwd: result.cwd, stdout: result.stdout,
|
|
277
|
+
stderr: result.stderr, truncated: result.truncated, exit_code: result.exitCode,
|
|
278
|
+
...observation,
|
|
279
|
+
status: result.checked.status === 'passed' ? 'completed' : result.checked.status === 'timed_out'
|
|
280
|
+
? 'timed_out' : result.checked.status === 'cancelled' ? 'cancelled' : 'failed', checked: result.checked });
|
|
170
281
|
}
|
|
171
|
-
const result = await runShellCommand(command, cwd, context?.signal, timeoutMs, shellOptions);
|
|
172
282
|
// Handle non-zero exit codes
|
|
173
283
|
if (result.exitCode !== 0) {
|
|
174
284
|
const output = [result.stdout, result.stderr].filter(Boolean).join('\n').trim();
|
|
175
285
|
const outputSnippet = summarizeCommandFailure(output) || '(no output)';
|
|
176
|
-
// R6/F7:
|
|
177
|
-
//
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
throw new Error(`Command failed (exit ${result.exitCode}):\n${outputSnippet}${hint ? `\n\nhint: ${hint}` : ''}`);
|
|
286
|
+
// R6/F7: retain the failed status; hints distinguish observed causes from
|
|
287
|
+
// unknown completeness without guessing which compound stage failed.
|
|
288
|
+
const hint = shellErrorHint(result.exitCode, result.stderr ?? '', Boolean(result.stdout?.trim()), result.timedOut === true);
|
|
289
|
+
throw new Error(`Command failed (exit ${result.exitCode}):\n${outputSnippet}${result.execution_policy ? `\nexecution: ${JSON.stringify(observation)}` : ''}${hint ? `\n\nhint: ${hint}` : ''}`);
|
|
181
290
|
}
|
|
182
291
|
return JSON.stringify({
|
|
183
292
|
command: result.command,
|
|
184
293
|
cwd: result.cwd,
|
|
185
294
|
stdout: result.stdout,
|
|
186
295
|
stderr: result.stderr,
|
|
187
|
-
truncated: result.truncated
|
|
296
|
+
truncated: result.truncated,
|
|
297
|
+
...observation
|
|
188
298
|
});
|
|
189
299
|
}
|
|
190
300
|
};
|
|
191
301
|
export const readCommandTool = {
|
|
302
|
+
parallelSafe: true,
|
|
192
303
|
isErrorResult: failedCommandReceipt,
|
|
193
304
|
capabilities: [ToolCapability.FILE_READ],
|
|
194
305
|
definition: {
|
|
195
|
-
name: 'read_command', description: 'Read a managed command receipt and up to 16KB of incremental output. Cursor is a byte offset returned by the previous receipt.
|
|
306
|
+
name: 'read_command', description: 'Read a managed command receipt and up to 16KB of incremental output. Cursor is a byte offset returned by the previous receipt. Zero wait is nonblocking. A positive wait wakes on output or terminal state; the host may keep waiting on a healthy silent job between model requests. Running does not mean success.',
|
|
196
307
|
parameters: { type: 'object', properties: {
|
|
197
|
-
job_id: { type: 'string', description: 'Session-owned job ID from run_command.' }, cursor: { type: 'number', description: 'Byte cursor from the previous read (default 0).' }, wait_ms: { type: 'number', description: '0–60000ms;
|
|
308
|
+
job_id: { type: 'string', description: 'Session-owned job ID from run_command.' }, cursor: { type: 'number', description: 'Byte cursor from the previous read (default 0).' }, wait_ms: { type: 'number', description: '0–60000ms; wakes for output, terminal state or this read deadline. Zero requests an immediate inspection.' },
|
|
198
309
|
}, required: ['job_id'] },
|
|
199
310
|
},
|
|
200
311
|
execute: async (args, context) => {
|
|
201
312
|
if (!context?.sessionId)
|
|
202
313
|
throw new Error('Managed commands require a session ID.');
|
|
203
|
-
|
|
314
|
+
const requestedWaitMs = Number(args.wait_ms ?? 0);
|
|
315
|
+
if (!Number.isSafeInteger(requestedWaitMs) || requestedWaitMs < 0 || requestedWaitMs > 60000) {
|
|
316
|
+
throw new Error('wait_ms must be an integer between 0 and 60000.');
|
|
317
|
+
}
|
|
318
|
+
const slice = context.managedCommandWaitSliceMs;
|
|
319
|
+
if (slice !== undefined && (!Number.isSafeInteger(slice) || slice < 0 || slice > 60000)) {
|
|
320
|
+
throw new Error('managedCommandWaitSliceMs must be an integer between 0 and 60000.');
|
|
321
|
+
}
|
|
322
|
+
const maxWaitMs = slice === undefined ? requestedWaitMs : Math.min(requestedWaitMs, slice);
|
|
323
|
+
const result = requestedWaitMs === 0
|
|
324
|
+
? await readCommandJob(context.sessionId, String(args.job_id), Number(args.cursor ?? 0), 0, context.signal, context.canInspectVerificationSource)
|
|
325
|
+
: (await waitForCommandProgress(context.sessionId, String(args.job_id), { cursor: Number(args.cursor ?? 0), maxWaitMs, signal: context.signal, canInspectVerificationSource: context.canInspectVerificationSource })).result;
|
|
326
|
+
context.onManagedCommand?.({ sessionId: context.sessionId, result, requestedWaitMs, kind: 'read' });
|
|
327
|
+
return JSON.stringify(result);
|
|
204
328
|
},
|
|
205
329
|
};
|
|
206
330
|
export const stopCommandTool = {
|
|
@@ -212,6 +336,9 @@ export const stopCommandTool = {
|
|
|
212
336
|
execute: async (args, context) => {
|
|
213
337
|
if (!context?.sessionId)
|
|
214
338
|
throw new Error('Managed commands require a session ID.');
|
|
215
|
-
|
|
339
|
+
const result = await stopCommandJob(context.sessionId, String(args.job_id), context.canInspectVerificationSource);
|
|
340
|
+
if (result.verification)
|
|
341
|
+
context.onVerificationReceipt?.(result.verification);
|
|
342
|
+
return JSON.stringify(result);
|
|
216
343
|
},
|
|
217
344
|
};
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* ranking tokens), or `foo bar` (ranked keyword search).
|
|
5
5
|
*/
|
|
6
6
|
import { ToolCapability } from '../runtime/capabilities.js';
|
|
7
|
+
import { captureHelperRequirements } from './helper_requirements.js';
|
|
7
8
|
import { defaultTools } from './registry.js';
|
|
8
9
|
import { getDeferredDefinitions } from './deferred.js';
|
|
9
10
|
import { getToolBundle, listToolBundles } from './bundle_registry.js';
|
|
@@ -112,7 +113,7 @@ function searchToolSpecs(query, deferred, maxResults) {
|
|
|
112
113
|
schemas,
|
|
113
114
|
};
|
|
114
115
|
}
|
|
115
|
-
export const toolSearchTool = {
|
|
116
|
+
export const toolSearchTool = captureHelperRequirements({
|
|
116
117
|
capabilities: [ToolCapability.FILE_READ],
|
|
117
118
|
definition: {
|
|
118
119
|
name: 'tool_search',
|
|
@@ -181,4 +182,4 @@ export const toolSearchTool = {
|
|
|
181
182
|
}
|
|
182
183
|
return JSON.stringify(result);
|
|
183
184
|
},
|
|
184
|
-
};
|
|
185
|
+
});
|
|
@@ -1,23 +1,51 @@
|
|
|
1
1
|
import { ToolDefinition } from '../../types.js';
|
|
2
|
+
import type { ModelUsageObserver } from '../../types.js';
|
|
2
3
|
import { ToolCapability } from '../runtime/capabilities.js';
|
|
3
4
|
import type { ToolEffectKind } from '../runtime/tool_effects.js';
|
|
4
5
|
import type { ToolResponseStore } from '../tool_response_store.js';
|
|
6
|
+
import type { ManagedCommandObservation } from '../runtime/command_jobs.js';
|
|
7
|
+
import type { CommandVerificationReceipt, SourceSnapshot } from '../runtime/source_verification_contract.js';
|
|
8
|
+
import type { HostVerifierDecision } from '../runtime/verifier_contract.js';
|
|
9
|
+
import type { BenchmarkComparisonDecision } from '../runtime/benchmark_comparison.js';
|
|
5
10
|
export interface ToolContext {
|
|
11
|
+
/** Host-owned command launch policy; never accepted from tool arguments. */
|
|
12
|
+
commandPolicy?: import('../../utils/sandbox.js').SandboxCommandOptions;
|
|
6
13
|
cwd: string;
|
|
7
14
|
/** The model-provided tool-use id that originated this execution. */
|
|
8
15
|
toolCallId?: string;
|
|
16
|
+
/** Captured owner of the request which dispatched this tool. */
|
|
17
|
+
onUsage?: ModelUsageObserver;
|
|
9
18
|
sessionId?: string;
|
|
10
19
|
signal?: AbortSignal;
|
|
11
20
|
temporaryWriteRoot?: string;
|
|
12
21
|
/** Exact environment for shell-tool subprocesses; undefined inherits legacy ambient env. */
|
|
13
22
|
subprocessEnv?: NodeJS.ProcessEnv;
|
|
23
|
+
/** Host-owned informational output channel for trusted built-in commands. */
|
|
24
|
+
onOutput?: (stream: 'stdout' | 'stderr', chunk: string) => void;
|
|
14
25
|
toolResponseStore: ToolResponseStore;
|
|
15
26
|
discoveredTools: Set<string>;
|
|
16
27
|
availableTools?: Tool[];
|
|
17
28
|
workflowTimeoutMs?: number;
|
|
29
|
+
/** Host-owned initial read slice; the agent waits after recording the tool pair. */
|
|
30
|
+
managedCommandWaitSliceMs?: number;
|
|
31
|
+
/** Runtime-owned observation channel; exposed only to the built-in managed command tools. */
|
|
32
|
+
onManagedCommand?: (observation: ManagedCommandObservation) => void;
|
|
33
|
+
/** Genuine built-in command observation; custom tool output cannot populate this channel. */
|
|
34
|
+
onVerificationReceipt?: (receipt: CommandVerificationReceipt) => void;
|
|
35
|
+
/** Runtime-owned admission for fresh source reads; never supplied to custom tools. */
|
|
36
|
+
canInspectVerificationSource?: (source: SourceSnapshot) => boolean | Promise<boolean>;
|
|
37
|
+
/** Trusted registered adapter admission; stripped from all custom tools. */
|
|
38
|
+
onHostVerifier?: (receipt: CommandVerificationReceipt, decision: HostVerifierDecision) => void;
|
|
39
|
+
/** Trusted registered comparison; original measurements remain in the canonical evidence store. */
|
|
40
|
+
onHostBenchmarkComparison?: (decision: BenchmarkComparisonDecision) => void;
|
|
18
41
|
}
|
|
19
42
|
export interface Tool {
|
|
20
43
|
definition: ToolDefinition;
|
|
44
|
+
/** Host-created adapter reference to the canonical command output source. */
|
|
45
|
+
outputSource?: Tool;
|
|
46
|
+
/** Host-created structured directory mapping, shared with execution. This
|
|
47
|
+
* describes invocation arguments, not directories inferred from shell text. */
|
|
48
|
+
resolveExecutionCwd?: (args: Record<string, unknown>, context?: ToolContext) => string;
|
|
21
49
|
/** Explicit scheduling opt-in; only read effects may run concurrently. */
|
|
22
50
|
parallelSafe?: boolean;
|
|
23
51
|
isErrorResult?: (content: string) => boolean;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { ToolCapability } from '../runtime/capabilities.js';
|
|
4
|
+
import { jsonAssertionsRecipe } from '../runtime/json_verifier_recipe.js';
|
|
5
|
+
import { captureVerifierInputs } from '../runtime/verifier_capture.js';
|
|
6
|
+
import { parseCommandVerificationReceipt, parseVerificationRequest } from '../runtime/source_verification_contract.js';
|
|
7
|
+
import { parseVerifierDecision } from '../runtime/verifier_contract.js';
|
|
8
|
+
const recipeText = jsonAssertionsRecipe.toString();
|
|
9
|
+
const hash = (value) => createHash('sha256').update(value).digest('hex');
|
|
10
|
+
export const verifyArtifactTool = Object.freeze({
|
|
11
|
+
capabilities: [ToolCapability.FILE_READ], effect: 'read', parallelSafe: true,
|
|
12
|
+
definition: {
|
|
13
|
+
name: 'verify_artifact',
|
|
14
|
+
description: 'Run the registered host json_assertions verifier against bounded immutable captures of a JSON input artifact and assertion configuration. Configuration: {schema_version:1,checks:[{path:JSON_pointer,op:"equals",value:scalar} or {path:JSON_pointer,op:"number_close",value:number,absolute_tolerance:number}]}. Proves only these configured artifact assertions, not producer correctness, whole-program verification or benchmark eligibility. Each file must be a regular local file of at most 65536 bytes. Changed captures remain unknown; later edits stale applicability. Never supplies a custom recipe or a claimed outcome.',
|
|
15
|
+
parameters: { type: 'object', additionalProperties: false, properties: {
|
|
16
|
+
adapter_id: { type: 'string', enum: ['json_assertions'] },
|
|
17
|
+
input_path: { type: 'string', description: 'Relative JSON artifact path under the current admitted working directory.' },
|
|
18
|
+
config_path: { type: 'string', description: 'Relative assertion configuration path; distinct from input_path.' },
|
|
19
|
+
}, required: ['adapter_id', 'input_path', 'config_path'] },
|
|
20
|
+
},
|
|
21
|
+
execute: async (args, context) => {
|
|
22
|
+
if (!context)
|
|
23
|
+
throw new Error('verify_artifact requires a host execution context');
|
|
24
|
+
if (Object.keys(args).some(key => !['adapter_id', 'input_path', 'config_path'].includes(key)) || args.adapter_id !== 'json_assertions') {
|
|
25
|
+
throw new TypeError('verify_artifact accepts only a registered adapter and input/config paths');
|
|
26
|
+
}
|
|
27
|
+
const request = parseVerificationRequest({ purpose: 'test', scope: 'artifact:json_assertions',
|
|
28
|
+
source_paths: [args.input_path, args.config_path], instrumentation: 'unknown' });
|
|
29
|
+
if (!request)
|
|
30
|
+
throw new TypeError('verify_artifact requires two distinct bounded relative input/config paths');
|
|
31
|
+
const captured = await captureVerifierInputs(context, request.source_paths);
|
|
32
|
+
const receipt = { schema_version: 1, receipt_id: randomUUID(), source: captured.source,
|
|
33
|
+
end_source: null, purpose: 'test', scope: 'artifact:json_assertions', command_sha256: hash(recipeText), command_kind: 'host_verifier',
|
|
34
|
+
environment: { platform: process.platform, arch: process.arch, node_version: process.version, declared_id: null },
|
|
35
|
+
build_identity: null, instrumentation: 'unknown', process_outcome: 'running', source_binding: 'unknown', qualification: 'unverified', artifact_refs: [] };
|
|
36
|
+
const input = captured.documents.get(String(args.input_path));
|
|
37
|
+
const config = captured.documents.get(String(args.config_path));
|
|
38
|
+
const binding = input !== undefined && config !== undefined && !context.signal?.aborted
|
|
39
|
+
? 'immutable_bytes' : 'unknown';
|
|
40
|
+
const result = binding === 'immutable_bytes'
|
|
41
|
+
? jsonAssertionsRecipe(input, config) : { outcome: 'unknown', checks_total: 0, checks_passed: 0,
|
|
42
|
+
reason: 'The complete immutable UTF-8 input capture was unavailable, changed, denied or cancelled.' };
|
|
43
|
+
const end = (await captureVerifierInputs(context, request.source_paths)).source;
|
|
44
|
+
const finished = { ...receipt, end_source: end, process_outcome: result.outcome,
|
|
45
|
+
source_binding: receipt.source.coverage === 'complete' && end.coverage === 'complete'
|
|
46
|
+
&& receipt.source.source_id === end.source_id ? 'observed_endpoints' : 'unknown' };
|
|
47
|
+
finished.artifact_refs = receipt.source.files.filter(file => file.kind === 'file').map(file => ({
|
|
48
|
+
origin: 'local', path: join(receipt.source.cwd, file.path), sha256: file.sha256,
|
|
49
|
+
}));
|
|
50
|
+
const verifier = parseVerifierDecision({ schema_version: 1, adapter_id: 'json_assertions', recipe_version: 1, execution: 'host_in_process',
|
|
51
|
+
recipe_sha256: hash(recipeText), receipt_id: receipt.receipt_id, source_id: receipt.source.source_id,
|
|
52
|
+
scope: 'artifact:json_assertions', input_path: args.input_path, config_path: args.config_path,
|
|
53
|
+
input_binding: binding, ...result, benchmark_eligibility: 'unknown' }, finished);
|
|
54
|
+
if (!parseCommandVerificationReceipt(finished) || !verifier)
|
|
55
|
+
throw new Error('The host adapter produced an invalid bounded decision');
|
|
56
|
+
if (!context.signal?.aborted)
|
|
57
|
+
context.onHostVerifier?.(finished, verifier);
|
|
58
|
+
return JSON.stringify({ verification: finished, verifier });
|
|
59
|
+
},
|
|
60
|
+
});
|
|
@@ -39,6 +39,7 @@ export const workflowTool = {
|
|
|
39
39
|
args: args.args,
|
|
40
40
|
budgetTokens: readBudgetTokens(args.budgetTokens),
|
|
41
41
|
workflowTimeoutMs: context?.workflowTimeoutMs,
|
|
42
|
+
onUsage: context?.onUsage,
|
|
42
43
|
});
|
|
43
44
|
if (args.background === true) {
|
|
44
45
|
return `Workflow started in background: ${runId}`;
|
package/dist/app/activity.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { type AgentEvent, type AgentState } from '../types.js';
|
|
1
|
+
import { type AgentEvent, type AgentState, type CommandWaitingState } from '../types.js';
|
|
2
2
|
export type ActivityWireStatus = 'idle' | 'thinking' | 'tool_executing' | 'streaming' | 'error';
|
|
3
3
|
export interface ActivityDisplayState {
|
|
4
4
|
wireStatus: ActivityWireStatus;
|
|
5
5
|
verb?: string;
|
|
6
6
|
label: string | null;
|
|
7
|
+
waiting?: CommandWaitingState;
|
|
8
|
+
toolProgress?: AgentState['toolProgress'];
|
|
7
9
|
}
|
|
8
10
|
export declare function applyAgentEventToState(previous: AgentState, event: AgentEvent): AgentState;
|
|
9
11
|
export declare function buildActivityDisplayState(state: AgentState, thinkingLabel: string | null): ActivityDisplayState;
|
|
@@ -14,6 +16,9 @@ export declare function buildActivityDisplayState(state: AgentState, thinkingLab
|
|
|
14
16
|
* Returns null for idle/error.
|
|
15
17
|
*/
|
|
16
18
|
export declare function getAgentActionLabel(state: AgentState): string | null;
|
|
19
|
+
export declare function formatApiRetryNotice(event: Extract<AgentEvent, {
|
|
20
|
+
type: 'api_retry';
|
|
21
|
+
}>): string;
|
|
17
22
|
/**
|
|
18
23
|
* Placeholder text for the composer while the agent is active.
|
|
19
24
|
* Shared by every renderer so Ink and Ratatui show the same prompt.
|