@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,6 +1,7 @@
|
|
|
1
1
|
import type { ShellResult } from '../../agent/commands/types.js';
|
|
2
2
|
import type { OptimizationEngineId, OptimizationPlanArtifacts, OptimizationSpec } from '../types.js';
|
|
3
3
|
import type { OptimizationStrategyVariant } from '../arl.js';
|
|
4
|
+
import type { OptimizationMeasurementSource, OptimizationMeasurementReport } from '../measurements.js';
|
|
4
5
|
export interface OptimizationBranchVariant {
|
|
5
6
|
id: string;
|
|
6
7
|
label: string;
|
|
@@ -80,6 +81,8 @@ export interface OptimizationExecutionResult {
|
|
|
80
81
|
deferredStages: OptimizationEngineId[];
|
|
81
82
|
notes: string[];
|
|
82
83
|
metrics?: OptimizationExecutionMetrics;
|
|
84
|
+
measurement?: OptimizationMeasurementSource;
|
|
85
|
+
measurementReport?: OptimizationMeasurementReport;
|
|
83
86
|
}
|
|
84
87
|
export interface OptimizationAdapter {
|
|
85
88
|
readonly id: string;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'fs';
|
|
2
2
|
import { basename, dirname, join, resolve } from 'path';
|
|
3
|
+
import { captureAdapterOptimizationMeasurement } from '../measurements.js';
|
|
3
4
|
import { run_shell_with_timeout, shell_join, sh_quote } from './runtime.js';
|
|
4
5
|
import { resolve_path_reference, resolve_path_within_cwd } from '../paths.js';
|
|
5
6
|
function repo_root() {
|
|
@@ -428,9 +429,11 @@ async function evaluate_candidate_spec(spec, deps, artifacts) {
|
|
|
428
429
|
improved: Boolean(payload.improved),
|
|
429
430
|
},
|
|
430
431
|
};
|
|
431
|
-
|
|
432
|
+
const capturedResult = captureAdapterOptimizationMeasurement(result, adapterPayloadPath, readFileSync(adapterPayloadPath, 'utf-8'), !shellResult.truncated, { runId: artifacts.runId, unit: 'hours', selection: { projectDir, benchName,
|
|
433
|
+
baselineRuntimeHours: payload.baseline_projected_runtime_hours, baselineRunId: payload.baseline_run_id, profile: spec.profile } });
|
|
434
|
+
write_json_atomic(join(artifacts.runDir, 'execution_result.json'), capturedResult);
|
|
432
435
|
deps.onProgress?.(`ZergPod bench: ${payload.candidate_variant_id} completed with candidate_value=${payload.candidate_projected_runtime_hours.toFixed(4)} baseline_value=${payload.baseline_projected_runtime_hours.toFixed(4)} improved=${payload.improved}.`);
|
|
433
|
-
return
|
|
436
|
+
return capturedResult;
|
|
434
437
|
}
|
|
435
438
|
export const zergpodOptimizationAdapter = {
|
|
436
439
|
id: 'zergpod_audio',
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { evaluate_optimization_adapter } from './adapters/index.js';
|
|
1
2
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
2
3
|
import { basename, extname, join } from 'path';
|
|
3
4
|
import { extract_code_payload, generate_text_with_backend } from './llm.js';
|
|
4
5
|
import { resolve_path_reference, resolve_path_within_cwd } from './paths.js';
|
|
5
6
|
import { is_better_result } from './results.js';
|
|
7
|
+
import { assessOptimizationResult } from './measurements.js';
|
|
6
8
|
function build_sub_artifacts(parent, subdir) {
|
|
7
9
|
const runDir = join(parent.runDir, subdir);
|
|
8
10
|
mkdirSync(runDir, { recursive: true });
|
|
@@ -86,18 +88,10 @@ function json_artifact_requirements(spec, adapter) {
|
|
|
86
88
|
];
|
|
87
89
|
}
|
|
88
90
|
function needs_baseline_generation(currentResult) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const value = currentResult.metrics?.candidateValue;
|
|
94
|
-
if (value === undefined) {
|
|
95
|
-
return true;
|
|
96
|
-
}
|
|
97
|
-
if (kind === 'score' || kind === 'correctness' || kind === 'pass_rate') {
|
|
98
|
-
return value < 1.0;
|
|
99
|
-
}
|
|
100
|
-
return false;
|
|
91
|
+
const reported = assessOptimizationResult(currentResult);
|
|
92
|
+
// No generic scalar threshold proves correctness. Unknown data receives the bounded generation budget.
|
|
93
|
+
return reported.compatibility !== 'compatible' || reported.objectiveKind === 'score'
|
|
94
|
+
|| reported.objectiveKind === 'correctness' || reported.objectiveKind === 'pass_rate';
|
|
101
95
|
}
|
|
102
96
|
function build_baseline_prompt(spec, adapter, seedPath, seedSource, attempt, previousFailures) {
|
|
103
97
|
const modeContext = load_mode_context(spec);
|
|
@@ -150,20 +144,20 @@ export async function execute_native_baseline(spec, adapter, deps, artifacts) {
|
|
|
150
144
|
if (!adapter.evaluate) {
|
|
151
145
|
return {
|
|
152
146
|
spec,
|
|
153
|
-
result: await adapter
|
|
147
|
+
result: await evaluate_optimization_adapter(adapter, spec, deps, artifacts),
|
|
154
148
|
notes: ['Native baseline fell back to adapter.execute because candidate-level evaluation is unavailable.'],
|
|
155
149
|
};
|
|
156
150
|
}
|
|
157
151
|
if (!spec.target || (spec.target.kind !== 'file' && spec.target.kind !== 'artifact')) {
|
|
158
152
|
return {
|
|
159
153
|
spec,
|
|
160
|
-
result: await adapter
|
|
154
|
+
result: await evaluate_optimization_adapter(adapter, spec, deps, artifacts),
|
|
161
155
|
notes: ['Native baseline evaluated the current spec directly because no concrete artifact target was provided.'],
|
|
162
156
|
};
|
|
163
157
|
}
|
|
164
158
|
const seedPath = resolve_target_path(spec);
|
|
165
159
|
const seedSource = readFileSync(seedPath, 'utf-8');
|
|
166
|
-
const currentResult = await adapter
|
|
160
|
+
const currentResult = await evaluate_optimization_adapter(adapter, spec, deps, artifacts);
|
|
167
161
|
deps.onProgress?.(`Baseline: seed evaluation finished with candidate_value=${currentResult.metrics?.candidateValue ?? 'n/a'} status=${currentResult.status}.`);
|
|
168
162
|
if (!needs_baseline_generation(currentResult)) {
|
|
169
163
|
return {
|
|
@@ -209,7 +203,7 @@ export async function execute_native_baseline(spec, adapter, deps, artifacts) {
|
|
|
209
203
|
writeFileSync(candidateArtifacts.specPath, JSON.stringify(candidateSpec, null, 2), 'utf-8');
|
|
210
204
|
writeFileSync(candidateArtifacts.planPath, '', 'utf-8');
|
|
211
205
|
deps.onProgress?.(`Baseline: evaluating candidate ${attempt}/${baseline_candidate_count(spec)} at ${candidatePath}.`);
|
|
212
|
-
const candidateResult = await adapter
|
|
206
|
+
const candidateResult = await evaluate_optimization_adapter(adapter, candidateSpec, deps, candidateArtifacts);
|
|
213
207
|
deps.onProgress?.(`Baseline: candidate ${attempt}/${baseline_candidate_count(spec)} finished with candidate_value=${candidateResult.metrics?.candidateValue ?? 'n/a'} status=${candidateResult.status}.`);
|
|
214
208
|
summaries.push({
|
|
215
209
|
attempt,
|
|
@@ -221,11 +215,6 @@ export async function execute_native_baseline(spec, adapter, deps, artifacts) {
|
|
|
221
215
|
bestSpec = candidateSpec;
|
|
222
216
|
bestResult = candidateResult;
|
|
223
217
|
}
|
|
224
|
-
const objectiveKind = candidateResult.metrics?.objectiveKind;
|
|
225
|
-
const candidateValue = candidateResult.metrics?.candidateValue;
|
|
226
|
-
if ((objectiveKind === 'score' || objectiveKind === 'correctness' || objectiveKind === 'pass_rate') && candidateValue !== undefined && candidateValue >= 1.0) {
|
|
227
|
-
break;
|
|
228
|
-
}
|
|
229
218
|
}
|
|
230
219
|
writeFileSync(join(candidateDir, 'candidate_results.json'), JSON.stringify(summaries, null, 2), 'utf-8');
|
|
231
220
|
return {
|
package/dist/optimize/branch.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { evaluate_optimization_adapter } from './adapters/index.js';
|
|
1
2
|
import { mkdirSync, writeFileSync } from 'fs';
|
|
2
3
|
import { extname, join } from 'path';
|
|
3
4
|
import { execute_native_combine } from './combine.js';
|
|
4
|
-
import { is_better_result } from './results.js';
|
|
5
|
+
import { is_better_result, result_score } from './results.js';
|
|
6
|
+
import { compareOptimizationResults } from './measurements.js';
|
|
5
7
|
import { execute_native_tge } from './tge.js';
|
|
6
8
|
import { resolve_path_reference, resolve_path_within_cwd } from './paths.js';
|
|
7
9
|
function positive_int_env(name) {
|
|
@@ -56,12 +58,6 @@ function branch_family_key(record) {
|
|
|
56
58
|
}
|
|
57
59
|
return 'branch';
|
|
58
60
|
}
|
|
59
|
-
function branch_record_score(record) {
|
|
60
|
-
const result = record.result || null;
|
|
61
|
-
const metrics = result?.metrics || null;
|
|
62
|
-
const candidateValue = metrics?.candidateValue;
|
|
63
|
-
return typeof candidateValue === 'number' && Number.isFinite(candidateValue) ? candidateValue : Number.NEGATIVE_INFINITY;
|
|
64
|
-
}
|
|
65
61
|
function build_sub_artifacts(parent, subdir) {
|
|
66
62
|
const runDir = join(parent.runDir, subdir);
|
|
67
63
|
mkdirSync(runDir, { recursive: true });
|
|
@@ -100,9 +96,7 @@ async function materialize_branch_seed(spec, adapter, deps, currentResult, artif
|
|
|
100
96
|
writeFileSync(artifacts.requestPath, branchSpec.request || '', 'utf-8');
|
|
101
97
|
writeFileSync(artifacts.specPath, JSON.stringify(branchSpec, null, 2), 'utf-8');
|
|
102
98
|
writeFileSync(artifacts.planPath, '', 'utf-8');
|
|
103
|
-
const branchResult = adapter
|
|
104
|
-
? await adapter.evaluate(branchSpec, deps, artifacts)
|
|
105
|
-
: await adapter.execute(branchSpec, deps, artifacts);
|
|
99
|
+
const branchResult = await evaluate_optimization_adapter(adapter, branchSpec, deps, artifacts);
|
|
106
100
|
return {
|
|
107
101
|
spec: branchSpec,
|
|
108
102
|
result: branchResult,
|
|
@@ -178,7 +172,10 @@ export async function execute_native_branch(spec, adapter, deps, artifacts, curr
|
|
|
178
172
|
}
|
|
179
173
|
const survivorLimit = branch_survivors_per_family(spec);
|
|
180
174
|
const familyRanks = new Map();
|
|
181
|
-
|
|
175
|
+
const comparableRecords = branchRecords.filter(record => compareOptimizationResults(currentResult, record.result).compatibility === 'compatible');
|
|
176
|
+
for (const record of branchRecords)
|
|
177
|
+
record.survivedFamilyPolicy = false;
|
|
178
|
+
for (const record of comparableRecords.sort((left, right) => result_score(right.result) - result_score(left.result))) {
|
|
182
179
|
const familyKey = branch_family_key(record);
|
|
183
180
|
const nextRank = (familyRanks.get(familyKey) || 0) + 1;
|
|
184
181
|
familyRanks.set(familyKey, nextRank);
|
|
@@ -208,7 +205,7 @@ export async function execute_native_branch(spec, adapter, deps, artifacts, curr
|
|
|
208
205
|
notes: [
|
|
209
206
|
`Native branch evaluated ${variants.length} branch variant(s).`,
|
|
210
207
|
`Native branch survivor policy preserved top ${survivorLimit} candidate(s) per family across ${familyRanks.size} family/families.`,
|
|
211
|
-
`Native branch
|
|
208
|
+
`Native branch retained ${bestSpec.target?.ref || resolve_target_path(spec)} after comparing declared reported objectives; verification and benchmark eligibility remain unknown.`,
|
|
212
209
|
...(bestSpec.target?.ref === spec.target.ref ? ['Native branch kept the incoming candidate; no branch beat the parent result.'] : []),
|
|
213
210
|
...notes,
|
|
214
211
|
],
|
package/dist/optimize/combine.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { evaluate_optimization_adapter } from './adapters/index.js';
|
|
1
2
|
import { mkdirSync, writeFileSync } from 'fs';
|
|
2
3
|
import { extname, join } from 'path';
|
|
3
4
|
import { is_better_result } from './results.js';
|
|
@@ -65,9 +66,7 @@ async function materialize_combine_seed(spec, adapter, deps, currentResult, arti
|
|
|
65
66
|
writeFileSync(artifacts.requestPath, combineSpec.request || '', 'utf-8');
|
|
66
67
|
writeFileSync(artifacts.specPath, JSON.stringify(combineSpec, null, 2), 'utf-8');
|
|
67
68
|
writeFileSync(artifacts.planPath, '', 'utf-8');
|
|
68
|
-
const combineResult = adapter
|
|
69
|
-
? await adapter.evaluate(combineSpec, deps, artifacts)
|
|
70
|
-
: await adapter.execute(combineSpec, deps, artifacts);
|
|
69
|
+
const combineResult = await evaluate_optimization_adapter(adapter, combineSpec, deps, artifacts);
|
|
71
70
|
return {
|
|
72
71
|
spec: combineSpec,
|
|
73
72
|
result: combineResult,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { evaluate_optimization_adapter } from './adapters/index.js';
|
|
1
2
|
import { copyFileSync, existsSync, mkdirSync, writeFileSync } from 'fs';
|
|
2
3
|
import { join } from 'path';
|
|
3
4
|
import { resolve_optimization_adapter } from './adapters/index.js';
|
|
@@ -6,6 +7,7 @@ import { execute_native_baseline } from './baseline.js';
|
|
|
6
7
|
import { execute_native_branch } from './branch.js';
|
|
7
8
|
import { materialize_mpe_candidates, promote_mpe_candidate } from './mpe.js';
|
|
8
9
|
import { is_better_result, result_score } from './results.js';
|
|
10
|
+
import { assessOptimizationResult, compareOptimizationResults, describeOptimizationResult } from './measurements.js';
|
|
9
11
|
import { execute_native_tge } from './tge.js';
|
|
10
12
|
function emit_progress(deps, message) {
|
|
11
13
|
deps.onProgress?.(message);
|
|
@@ -24,19 +26,6 @@ function materialize_artifacts(parent, subdir) {
|
|
|
24
26
|
planPath: join(runDir, 'plan.md'),
|
|
25
27
|
};
|
|
26
28
|
}
|
|
27
|
-
function choose_better_result(currentBest, currentCandidate, next, nextCandidate) {
|
|
28
|
-
if (is_better_result(currentBest, next)) {
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
const currentScore = currentBest ? result_score(currentBest) : null;
|
|
32
|
-
const nextScore = result_score(next);
|
|
33
|
-
if (currentScore === nextScore && currentScore === null) {
|
|
34
|
-
return currentCandidate === null || currentCandidate.kind !== 'mutated'
|
|
35
|
-
? false
|
|
36
|
-
: nextCandidate.kind === 'base';
|
|
37
|
-
}
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
29
|
async function run_native_pipeline(spec, deps, artifacts) {
|
|
41
30
|
const pipelineResult = await run_native_pipeline_stages(spec, deps, artifacts, spec.pipeline, null);
|
|
42
31
|
const currentSpec = pipelineResult.spec;
|
|
@@ -66,7 +55,7 @@ async function run_native_pipeline_stages(spec, deps, artifacts, stages, initial
|
|
|
66
55
|
if (!adapter.evaluate) {
|
|
67
56
|
return {
|
|
68
57
|
spec,
|
|
69
|
-
result: await adapter
|
|
58
|
+
result: await evaluate_optimization_adapter(adapter, spec, deps, artifacts),
|
|
70
59
|
stageHistory: [],
|
|
71
60
|
notes: [],
|
|
72
61
|
};
|
|
@@ -121,7 +110,7 @@ async function run_native_pipeline_stages(spec, deps, artifacts, stages, initial
|
|
|
121
110
|
if (stage.engine === 'branch') {
|
|
122
111
|
if (!currentResult) {
|
|
123
112
|
emit_progress(deps, 'No current result for branch; evaluating the incoming target first.');
|
|
124
|
-
currentResult = await adapter
|
|
113
|
+
currentResult = await evaluate_optimization_adapter(adapter, currentSpec, deps, artifacts);
|
|
125
114
|
stageHistory.push({ stage: 'baseline(auto)', runDir: artifacts.runDir, result: currentResult });
|
|
126
115
|
}
|
|
127
116
|
const stageArtifacts = materialize_artifacts(artifacts, stage.engine);
|
|
@@ -170,7 +159,7 @@ async function run_native_pipeline_stages(spec, deps, artifacts, stages, initial
|
|
|
170
159
|
if (stage.engine === 'tge') {
|
|
171
160
|
if (!currentResult) {
|
|
172
161
|
emit_progress(deps, 'No current result for TGE; evaluating the incoming target first.');
|
|
173
|
-
currentResult = await adapter
|
|
162
|
+
currentResult = await evaluate_optimization_adapter(adapter, currentSpec, deps, stageArtifacts);
|
|
174
163
|
stageHistory.push({ stage: 'baseline(auto)', runDir: stageArtifacts.runDir, result: currentResult });
|
|
175
164
|
}
|
|
176
165
|
const stageResult = await execute_native_tge(currentSpec, adapter, deps, stageArtifacts, currentResult);
|
|
@@ -184,7 +173,7 @@ async function run_native_pipeline_stages(spec, deps, artifacts, stages, initial
|
|
|
184
173
|
if (stage.engine === 'arl') {
|
|
185
174
|
if (!currentResult) {
|
|
186
175
|
emit_progress(deps, 'No current result for ARL; evaluating the incoming target first.');
|
|
187
|
-
currentResult = await adapter
|
|
176
|
+
currentResult = await evaluate_optimization_adapter(adapter, currentSpec, deps, stageArtifacts);
|
|
188
177
|
stageHistory.push({ stage: 'baseline(auto)', runDir: stageArtifacts.runDir, result: currentResult });
|
|
189
178
|
}
|
|
190
179
|
const stageResult = await execute_native_arl(currentSpec, adapter, deps, stageArtifacts, currentResult);
|
|
@@ -197,7 +186,7 @@ async function run_native_pipeline_stages(spec, deps, artifacts, stages, initial
|
|
|
197
186
|
}
|
|
198
187
|
}
|
|
199
188
|
if (!currentResult) {
|
|
200
|
-
currentResult = await adapter
|
|
189
|
+
currentResult = await evaluate_optimization_adapter(adapter, currentSpec, deps, artifacts);
|
|
201
190
|
}
|
|
202
191
|
return {
|
|
203
192
|
spec: currentSpec,
|
|
@@ -243,19 +232,19 @@ export async function execute_optimization_spec(spec, deps, artifacts) {
|
|
|
243
232
|
? await run_native_pipeline(executionSpec, deps, artifacts)
|
|
244
233
|
: {
|
|
245
234
|
spec: executionSpec,
|
|
246
|
-
result: await adapter
|
|
235
|
+
result: await evaluate_optimization_adapter(adapter, executionSpec, deps, artifacts),
|
|
247
236
|
};
|
|
248
237
|
const result = nativeResult.result;
|
|
249
238
|
result.notes = [...materialized.notes, ...result.notes];
|
|
250
239
|
if (materialized.saveModeAs
|
|
251
|
-
&& result.
|
|
240
|
+
&& assessOptimizationResult(result).improved === true
|
|
252
241
|
&& materialized.candidates[0]
|
|
253
242
|
&& materialized.candidates[0].kind === 'mutated') {
|
|
254
243
|
const savedPath = promote_mpe_candidate(materialized.candidates[0], materialized.saveModeAs);
|
|
255
|
-
result.notes.push(`Saved evolved mode for reuse at ${savedPath}.`);
|
|
244
|
+
result.notes.push(`Saved evolved mode for reuse at ${savedPath} using reported measurements; verification and benchmark eligibility remain unknown.`);
|
|
256
245
|
}
|
|
257
246
|
else if (materialized.saveModeAs) {
|
|
258
|
-
result.notes.push(`Skipped saving evolved mode "${materialized.saveModeAs}" because no mutated MPE policy won with a
|
|
247
|
+
result.notes.push(`Skipped saving evolved mode "${materialized.saveModeAs}" because no mutated MPE policy won with a comparable reported downstream improvement.`);
|
|
259
248
|
}
|
|
260
249
|
writeFileSync(executionSpecPath, JSON.stringify(nativeResult.spec, null, 2), 'utf-8');
|
|
261
250
|
writeFileSync(join(artifacts.runDir, 'execution_result.json'), JSON.stringify(result, null, 2), 'utf-8');
|
|
@@ -266,7 +255,7 @@ export async function execute_optimization_spec(spec, deps, artifacts) {
|
|
|
266
255
|
let bestCandidate = null;
|
|
267
256
|
let bestCandidateIndex = 0;
|
|
268
257
|
let bestExecutionSpec = null;
|
|
269
|
-
let
|
|
258
|
+
let baseResult = null;
|
|
270
259
|
for (const candidate of materialized.candidates) {
|
|
271
260
|
const candidateArtifacts = materialize_artifacts(artifacts, join('mpe_candidates', candidate.kind === 'base' ? 'base' : `candidate_${String(candidate.index).padStart(2, '0')}`));
|
|
272
261
|
writeFileSync(candidateArtifacts.requestPath, candidate.spec.request || '', 'utf-8');
|
|
@@ -276,7 +265,7 @@ export async function execute_optimization_spec(spec, deps, artifacts) {
|
|
|
276
265
|
? await run_native_pipeline(candidate.spec, deps, candidateArtifacts)
|
|
277
266
|
: {
|
|
278
267
|
spec: candidate.spec,
|
|
279
|
-
result: await adapter
|
|
268
|
+
result: await evaluate_optimization_adapter(adapter, candidate.spec, deps, candidateArtifacts),
|
|
280
269
|
};
|
|
281
270
|
const candidateResult = nativeResult.result;
|
|
282
271
|
candidateResult.notes = [
|
|
@@ -293,9 +282,11 @@ export async function execute_optimization_spec(spec, deps, artifacts) {
|
|
|
293
282
|
result: candidateResult,
|
|
294
283
|
});
|
|
295
284
|
if (candidate.kind === 'base') {
|
|
296
|
-
|
|
285
|
+
baseResult = candidateResult;
|
|
297
286
|
}
|
|
298
|
-
|
|
287
|
+
const comparison = bestResult ? compareOptimizationResults(bestResult, candidateResult) : null;
|
|
288
|
+
candidateSummaries[candidateSummaries.length - 1].comparison = comparison;
|
|
289
|
+
if (bestResult === null || is_better_result(bestResult, candidateResult)) {
|
|
299
290
|
bestResult = candidateResult;
|
|
300
291
|
bestCandidate = candidate;
|
|
301
292
|
bestCandidateIndex = candidate.index;
|
|
@@ -329,37 +320,31 @@ export async function execute_optimization_spec(spec, deps, artifacts) {
|
|
|
329
320
|
result.planPath = artifacts.planPath;
|
|
330
321
|
result.specPath = artifacts.specPath;
|
|
331
322
|
writeFileSync(executionSpecPath, JSON.stringify(bestExecutionSpec || selectedCandidate.spec, null, 2), 'utf-8');
|
|
323
|
+
const hasComparableScore = result_score(result) !== null;
|
|
332
324
|
result.summary = result.ok
|
|
333
|
-
? `${result.summary} Selected MPE candidate: ${selectedCandidate.label}.`
|
|
325
|
+
? hasComparableScore ? `${result.summary} Selected MPE candidate from comparable reported data: ${selectedCandidate.label}.`
|
|
326
|
+
: `${result.summary} Retained incoming MPE policy; measurement comparability is unknown.`
|
|
334
327
|
: result.summary;
|
|
335
328
|
result.notes = [
|
|
336
329
|
...materialized.notes,
|
|
337
|
-
`Selected MPE candidate ${selectedCandidate.label} from
|
|
330
|
+
hasComparableScore ? `Selected MPE candidate ${selectedCandidate.label} from comparable reported data; verification and benchmark eligibility remain unknown.`
|
|
331
|
+
: `Retained MPE candidate ${selectedCandidate.label}; no comparable reported winner was established across ${materialized.candidates.length} execution(s).`,
|
|
338
332
|
...result.notes,
|
|
339
333
|
];
|
|
340
|
-
const
|
|
341
|
-
if (
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
result.
|
|
346
|
-
objectiveKind: result.metrics?.objectiveKind || spec.objective?.kind || 'score',
|
|
347
|
-
direction: result.metrics?.direction || 'maximize',
|
|
348
|
-
...result.metrics,
|
|
349
|
-
baselineValue: baseCandidateScore,
|
|
350
|
-
candidateValue: result.metrics?.candidateValue ?? selectedCandidateScore,
|
|
351
|
-
deltaValue: selectedCandidateScore - baseCandidateScore,
|
|
352
|
-
improved: true,
|
|
353
|
-
};
|
|
354
|
-
result.notes.push(`Selected mutated MPE candidate improved benchmark score from ${baseCandidateScore} to ${selectedCandidateScore}.`);
|
|
334
|
+
const reportedImprovement = selectedCandidate.kind === 'mutated' && baseResult !== null && is_better_result(baseResult, result);
|
|
335
|
+
if (reportedImprovement && baseResult) {
|
|
336
|
+
const baseline = assessOptimizationResult(baseResult), selected = assessOptimizationResult(result);
|
|
337
|
+
result.metrics = { ...result.metrics, objectiveKind: selected.objectiveKind, direction: selected.direction,
|
|
338
|
+
baselineValue: baseline.value, candidateValue: selected.value, deltaValue: selected.value - baseline.value, improved: true };
|
|
339
|
+
result.notes.push(`Selected mutated MPE candidate improved its comparable reported objective from ${baseline.value} to ${selected.value}; verification and benchmark eligibility remain unknown.`);
|
|
355
340
|
}
|
|
356
341
|
if (materialized.saveModeAs) {
|
|
357
|
-
if (
|
|
342
|
+
if (reportedImprovement) {
|
|
358
343
|
const savedPath = promote_mpe_candidate(selectedCandidate, materialized.saveModeAs);
|
|
359
|
-
result.notes.push(`Saved evolved mode for reuse at ${savedPath}.`);
|
|
344
|
+
result.notes.push(`Saved evolved mode for reuse at ${savedPath} using reported measurements; verification and benchmark eligibility remain unknown.`);
|
|
360
345
|
}
|
|
361
346
|
else {
|
|
362
|
-
result.notes.push(`Skipped saving evolved mode "${materialized.saveModeAs}" because no mutated MPE policy won with a
|
|
347
|
+
result.notes.push(`Skipped saving evolved mode "${materialized.saveModeAs}" because no mutated MPE policy won with a comparable reported downstream improvement.`);
|
|
363
348
|
}
|
|
364
349
|
}
|
|
365
350
|
if (bestResult?.stdoutPath) {
|
|
@@ -376,6 +361,7 @@ export async function execute_optimization_spec(spec, deps, artifacts) {
|
|
|
376
361
|
copyFileSync(selectedPlanJsonPath, join(artifacts.runDir, 'execution_plan.json'));
|
|
377
362
|
}
|
|
378
363
|
}
|
|
379
|
-
|
|
380
|
-
|
|
364
|
+
const described = describeOptimizationResult(result);
|
|
365
|
+
writeFileSync(join(artifacts.runDir, 'execution_result.json'), JSON.stringify(described, null, 2), 'utf-8');
|
|
366
|
+
return described;
|
|
381
367
|
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type MeasurementEnvelope, type MeasurementRequirements, type MeasurementCompatibility, type MeasurementCompletion, type MeasurementReason } from '../agent/runtime/measurements.js';
|
|
2
|
+
import type { OptimizationExecutionResult } from './adapters/types.js';
|
|
3
|
+
/** An adapter-captured copy of reported data. This is not a trusted host receipt. */
|
|
4
|
+
export interface OptimizationMeasurementSource {
|
|
5
|
+
schemaVersion: 1;
|
|
6
|
+
sourceId: string;
|
|
7
|
+
sourceSha256: string;
|
|
8
|
+
sizeBytes: number;
|
|
9
|
+
complete: boolean;
|
|
10
|
+
rawOutput: string | null;
|
|
11
|
+
}
|
|
12
|
+
export interface OptimizationMeasurementDeclaration {
|
|
13
|
+
schemaVersion: 1;
|
|
14
|
+
objectiveKind: string;
|
|
15
|
+
direction: 'minimize' | 'maximize';
|
|
16
|
+
requirements: MeasurementRequirements;
|
|
17
|
+
envelope: MeasurementEnvelope;
|
|
18
|
+
baseline?: MeasurementEnvelope;
|
|
19
|
+
}
|
|
20
|
+
export interface OptimizationMeasurementReport {
|
|
21
|
+
compatibility: MeasurementCompatibility;
|
|
22
|
+
completion: MeasurementCompletion;
|
|
23
|
+
verification: 'unknown';
|
|
24
|
+
benchmarkEligibility: 'unknown';
|
|
25
|
+
sourceId: string | null;
|
|
26
|
+
sourceSha256: string | null;
|
|
27
|
+
runId: string | null;
|
|
28
|
+
declaredSource: MeasurementEnvelope['source'] | null;
|
|
29
|
+
reasons: MeasurementReason[];
|
|
30
|
+
objectiveKind: string | null;
|
|
31
|
+
direction: 'minimize' | 'maximize' | null;
|
|
32
|
+
value: number | null;
|
|
33
|
+
baselineValue: number | null;
|
|
34
|
+
improved: boolean | null;
|
|
35
|
+
}
|
|
36
|
+
/** Recompute from captured bytes on every read; saved reports and scalar ok/improved flags confer no qualification. */
|
|
37
|
+
export declare function assessOptimizationResult(result: OptimizationExecutionResult): OptimizationMeasurementReport;
|
|
38
|
+
export declare function compareOptimizationResults(base: OptimizationExecutionResult, candidate: OptimizationExecutionResult): {
|
|
39
|
+
compatibility: MeasurementCompatibility;
|
|
40
|
+
reasons: MeasurementReason[];
|
|
41
|
+
baseline: OptimizationMeasurementReport;
|
|
42
|
+
candidate: OptimizationMeasurementReport;
|
|
43
|
+
};
|
|
44
|
+
export declare function describeOptimizationResult(result: OptimizationExecutionResult): OptimizationExecutionResult;
|
|
45
|
+
/** Preserve exact bounded producer bytes and their hash; do not truncate or infer a missing declaration from scalars. */
|
|
46
|
+
export declare function captureOptimizationMeasurement(result: OptimizationExecutionResult, sourceId: string, rawOutput: string, complete: boolean): OptimizationExecutionResult;
|
|
47
|
+
/** Adapter-owned producer contract for its parsed summary, not a scientific smoke test. */
|
|
48
|
+
export interface AdapterSummaryComparison {
|
|
49
|
+
runId: string;
|
|
50
|
+
unit: string;
|
|
51
|
+
selection: Record<string, string | number | boolean | null>;
|
|
52
|
+
}
|
|
53
|
+
/** Emit a source-linked declaration from this adapter invocation. Historical
|
|
54
|
+
* scalar artifacts still require their original explicit declaration. */
|
|
55
|
+
export declare function captureAdapterOptimizationMeasurement(result: OptimizationExecutionResult, sourceId: string, rawOutput: string, complete: boolean, comparison: AdapterSummaryComparison): OptimizationExecutionResult;
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { writeFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { assessMeasurements, compareMeasurements, parseMeasurementEnvelope, parseMeasurementRequirements, MEASUREMENT_MAX_ENVELOPE_BYTES } from '../agent/runtime/measurements.js';
|
|
5
|
+
function canonical(value) {
|
|
6
|
+
if (Array.isArray(value))
|
|
7
|
+
return `[${value.map(canonical).join(',')}]`;
|
|
8
|
+
if (value && typeof value === 'object')
|
|
9
|
+
return `{${Object.entries(value).sort(([a], [b]) => a.localeCompare(b))
|
|
10
|
+
.map(([key, item]) => `${JSON.stringify(key)}:${canonical(item)}`).join(',')}}`;
|
|
11
|
+
return JSON.stringify(value);
|
|
12
|
+
}
|
|
13
|
+
function contractKey(declaration) {
|
|
14
|
+
const r = declaration.requirements;
|
|
15
|
+
return canonical({ objectiveKind: declaration.objectiveKind, direction: declaration.direction, requirements: {
|
|
16
|
+
...r, metricIds: [...r.metricIds].sort(), smokeFields: [...r.smokeFields].sort(), expectedRanks: [...r.expectedRanks].sort((a, b) => a - b),
|
|
17
|
+
} });
|
|
18
|
+
}
|
|
19
|
+
function declaration(source) {
|
|
20
|
+
if (!source || source.schemaVersion !== 1 || source.complete !== true || typeof source.sourceId !== 'string' || !source.sourceId.trim()
|
|
21
|
+
|| Buffer.byteLength(source.sourceId) > 4096 || /[\u0000-\u001f\u007f]/u.test(source.sourceId)
|
|
22
|
+
|| typeof source.sourceSha256 !== 'string' || !/^[a-f0-9]{64}$/.test(source.sourceSha256)
|
|
23
|
+
|| typeof source.rawOutput !== 'string' || Buffer.byteLength(source.rawOutput) > MEASUREMENT_MAX_ENVELOPE_BYTES
|
|
24
|
+
|| source.sizeBytes !== Buffer.byteLength(source.rawOutput)
|
|
25
|
+
|| createHash('sha256').update(source.rawOutput).digest('hex') !== source.sourceSha256)
|
|
26
|
+
return null;
|
|
27
|
+
try {
|
|
28
|
+
const payload = JSON.parse(source.rawOutput);
|
|
29
|
+
if (!payload || typeof payload !== 'object' || Array.isArray(payload))
|
|
30
|
+
return null;
|
|
31
|
+
const value = payload.optimizationMeasurement;
|
|
32
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
33
|
+
return null;
|
|
34
|
+
const record = value;
|
|
35
|
+
if (record.schemaVersion !== 1 || Object.keys(record).some(key => !['schemaVersion', 'objectiveKind', 'direction', 'requirements', 'envelope', 'baseline'].includes(key))
|
|
36
|
+
|| typeof record.objectiveKind !== 'string' || !record.objectiveKind.trim() || Buffer.byteLength(record.objectiveKind) > 128
|
|
37
|
+
|| /[\u0000-\u001f\u007f]/u.test(record.objectiveKind) || (record.direction !== 'minimize' && record.direction !== 'maximize'))
|
|
38
|
+
return null;
|
|
39
|
+
const requirements = parseMeasurementRequirements(record.requirements), envelope = parseMeasurementEnvelope(record.envelope);
|
|
40
|
+
const baseline = record.baseline === undefined ? undefined : parseMeasurementEnvelope(record.baseline);
|
|
41
|
+
if (!requirements || !envelope || baseline === null)
|
|
42
|
+
return null;
|
|
43
|
+
return { schemaVersion: 1, objectiveKind: record.objectiveKind, direction: record.direction, requirements, envelope,
|
|
44
|
+
...(baseline === undefined ? {} : { baseline }) };
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function objectiveValue(envelope, requirements) {
|
|
51
|
+
const report = assessMeasurements(envelope, requirements);
|
|
52
|
+
if (report.compatibility !== 'compatible' || report.completion !== 'reported_pass')
|
|
53
|
+
return null;
|
|
54
|
+
return requirements.aggregation === 'sum_exclusive' ? report.aggregate : report.values.length === 1 ? report.values[0].value : null;
|
|
55
|
+
}
|
|
56
|
+
/** Recompute from captured bytes on every read; saved reports and scalar ok/improved flags confer no qualification. */
|
|
57
|
+
export function assessOptimizationResult(result) {
|
|
58
|
+
const d = declaration(result.measurement);
|
|
59
|
+
const report = { compatibility: 'unknown', completion: 'unknown', verification: 'unknown', benchmarkEligibility: 'unknown',
|
|
60
|
+
sourceId: null, sourceSha256: null, runId: null, declaredSource: null, reasons: [], objectiveKind: null, direction: null, value: null, baselineValue: null, improved: null };
|
|
61
|
+
const source = result.measurement;
|
|
62
|
+
if (source && source.schemaVersion === 1 && typeof source.sourceId === 'string' && source.sourceId.trim()
|
|
63
|
+
&& Buffer.byteLength(source.sourceId) <= 4096 && !/[\u0000-\u001f\u007f]/u.test(source.sourceId)
|
|
64
|
+
&& typeof source.sourceSha256 === 'string' && /^[a-f0-9]{64}$/.test(source.sourceSha256)) {
|
|
65
|
+
report.sourceId = source.sourceId;
|
|
66
|
+
report.sourceSha256 = source.sourceSha256;
|
|
67
|
+
}
|
|
68
|
+
if (!d) {
|
|
69
|
+
report.reasons.push({ code: result.measurement ? 'invalid_capture_or_declaration' : 'legacy_scalar',
|
|
70
|
+
message: 'A bounded intact captured source with an explicit measurement declaration is required; scalar artifacts remain readable.' });
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
const assessment = assessMeasurements(d.envelope, d.requirements);
|
|
74
|
+
Object.assign(report, { compatibility: assessment.compatibility, completion: assessment.completion, sourceId: result.measurement.sourceId,
|
|
75
|
+
sourceSha256: result.measurement.sourceSha256, runId: assessment.runId, declaredSource: assessment.source,
|
|
76
|
+
reasons: [...assessment.reasons], objectiveKind: d.objectiveKind, direction: d.direction });
|
|
77
|
+
report.value = objectiveValue(d.envelope, d.requirements);
|
|
78
|
+
if (assessment.compatibility === 'compatible' && report.value === null) {
|
|
79
|
+
report.compatibility = 'unknown';
|
|
80
|
+
report.reasons.push({ code: 'ambiguous_objective', message: 'Declare one selected objective or an explicit compatible aggregation.' });
|
|
81
|
+
}
|
|
82
|
+
if (d.baseline && compareMeasurements(d.baseline, d.envelope, d.requirements).compatibility === 'compatible') {
|
|
83
|
+
report.baselineValue = objectiveValue(d.baseline, d.requirements);
|
|
84
|
+
if (report.value !== null && report.baselineValue !== null)
|
|
85
|
+
report.improved = d.direction === 'minimize'
|
|
86
|
+
? report.value < report.baselineValue : report.value > report.baselineValue;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (!result.ok || result.status !== 'completed' || (result.exitCode !== undefined && result.exitCode !== 0)) {
|
|
90
|
+
report.compatibility = 'incompatible';
|
|
91
|
+
report.completion = 'reported_fail';
|
|
92
|
+
report.value = null;
|
|
93
|
+
report.improved = null;
|
|
94
|
+
report.reasons.push({ code: 'execution_not_completed', message: 'The adapter execution did not complete successfully.' });
|
|
95
|
+
}
|
|
96
|
+
return report;
|
|
97
|
+
}
|
|
98
|
+
export function compareOptimizationResults(base, candidate) {
|
|
99
|
+
const baseline = assessOptimizationResult(base), next = assessOptimizationResult(candidate);
|
|
100
|
+
const a = declaration(base.measurement), b = declaration(candidate.measurement);
|
|
101
|
+
if (!a || !b || baseline.compatibility !== 'compatible' || next.compatibility !== 'compatible')
|
|
102
|
+
return {
|
|
103
|
+
compatibility: baseline.compatibility === 'incompatible' || next.compatibility === 'incompatible' ? 'incompatible' : 'unknown',
|
|
104
|
+
reasons: [{ code: 'unqualified_comparison', message: 'Both results need a complete comparable reported objective.' }], baseline, candidate: next
|
|
105
|
+
};
|
|
106
|
+
if (contractKey(a) !== contractKey(b))
|
|
107
|
+
return { compatibility: 'incompatible',
|
|
108
|
+
reasons: [{ code: 'contract_mismatch', message: 'Objective, direction and declared measurement requirements must match.' }], baseline, candidate: next };
|
|
109
|
+
const compared = compareMeasurements(a.envelope, b.envelope, a.requirements);
|
|
110
|
+
return { compatibility: compared.compatibility, reasons: compared.reasons, baseline, candidate: next };
|
|
111
|
+
}
|
|
112
|
+
export function describeOptimizationResult(result) {
|
|
113
|
+
const measurementReport = assessOptimizationResult(result);
|
|
114
|
+
const prefix = '[measurement-contract] ';
|
|
115
|
+
const projection = `${prefix}comparison=${measurementReport.compatibility}; completion=${measurementReport.completion}; `
|
|
116
|
+
+ `verification=${measurementReport.verification}; benchmarkEligibility=${measurementReport.benchmarkEligibility}; `
|
|
117
|
+
+ `source=${measurementReport.sourceId ?? 'unavailable'}; sha256=${measurementReport.sourceSha256 ?? 'unavailable'}; `
|
|
118
|
+
+ `run=${measurementReport.runId ?? 'unknown'}; reasons=${measurementReport.reasons.map(reason => reason.code).join(',') || 'none'}.`;
|
|
119
|
+
// Replacing only this canonical projection prevents stale positive notes on repeated/failed replay.
|
|
120
|
+
return { ...result, measurementReport, notes: [...result.notes.filter(note => !note.startsWith(prefix)), projection] };
|
|
121
|
+
}
|
|
122
|
+
/** Preserve exact bounded producer bytes and their hash; do not truncate or infer a missing declaration from scalars. */
|
|
123
|
+
export function captureOptimizationMeasurement(result, sourceId, rawOutput, complete) {
|
|
124
|
+
const sizeBytes = Buffer.byteLength(rawOutput);
|
|
125
|
+
const measured = { ...result, measurement: { schemaVersion: 1, sourceId,
|
|
126
|
+
complete, sourceSha256: createHash('sha256').update(rawOutput).digest('hex'), sizeBytes,
|
|
127
|
+
rawOutput: sizeBytes <= MEASUREMENT_MAX_ENVELOPE_BYTES ? rawOutput : null } };
|
|
128
|
+
return describeOptimizationResult(measured);
|
|
129
|
+
}
|
|
130
|
+
/** Emit a source-linked declaration from this adapter invocation. Historical
|
|
131
|
+
* scalar artifacts still require their original explicit declaration. */
|
|
132
|
+
export function captureAdapterOptimizationMeasurement(result, sourceId, rawOutput, complete, comparison) {
|
|
133
|
+
// Never replace or repair a producer's existing declaration, including an
|
|
134
|
+
// invalid one. Its original captured bytes keep their existing admission.
|
|
135
|
+
try {
|
|
136
|
+
const payload = JSON.parse(rawOutput);
|
|
137
|
+
if (payload && typeof payload === 'object' && Object.hasOwn(payload, 'optimizationMeasurement'))
|
|
138
|
+
return captureOptimizationMeasurement(result, sourceId, rawOutput, complete);
|
|
139
|
+
}
|
|
140
|
+
catch { /* Existing native evaluators also emit log-prefixed/text summaries. */ }
|
|
141
|
+
const metrics = result.metrics;
|
|
142
|
+
if (!complete || !result.ok || result.status !== 'completed' || !result.adapterId || !metrics
|
|
143
|
+
|| typeof metrics.candidateValue !== 'number' || !Number.isFinite(metrics.candidateValue) || metrics.candidateValue < 0
|
|
144
|
+
|| Buffer.byteLength(rawOutput) > MEASUREMENT_MAX_ENVELOPE_BYTES)
|
|
145
|
+
return captureOptimizationMeasurement(result, sourceId, rawOutput, complete);
|
|
146
|
+
const rawSha256 = createHash('sha256').update(rawOutput).digest('hex');
|
|
147
|
+
const workload = { id: `${result.adapterId}:reported-summary`, stage: 'candidate-evaluation', inputShape: {
|
|
148
|
+
selectionSha256: createHash('sha256').update(canonical(comparison.selection)).digest('hex'),
|
|
149
|
+
} };
|
|
150
|
+
const instrumentation = { mode: 'adapter-reported-summary', version: '1', synchronization: 'diagnostic',
|
|
151
|
+
runtimePath: `ztc/optimize/${result.adapterId}` };
|
|
152
|
+
const requirements = { workload, instrumentation, metricIds: ['reported-objective'],
|
|
153
|
+
unit: comparison.unit, timingDomain: 'adapter-summary', scope: 'selected-evaluator', worldSize: 1,
|
|
154
|
+
expectedRanks: [0], smokeFields: ['reported-objective'], aggregation: 'none' };
|
|
155
|
+
const envelope = (value, runId) => ({ schemaVersion: 1, runId,
|
|
156
|
+
source: { revision: 'ztc-adapter-summary-v1', artifactSha256: rawSha256 }, workload, instrumentation,
|
|
157
|
+
completion: { status: 'completed', passed: true },
|
|
158
|
+
// This smoke records successful summary parsing on the named adapter path.
|
|
159
|
+
// Diagnostic instrumentation prevents it claiming a production benchmark.
|
|
160
|
+
smoke: { mode: instrumentation.mode, runtimePath: instrumentation.runtimePath, fields: ['reported-objective'], passed: true },
|
|
161
|
+
metrics: [{ id: 'reported-objective', value, unit: comparison.unit, timingDomain: requirements.timingDomain,
|
|
162
|
+
scope: requirements.scope, rank: 0, worldSize: 1, coverage: 'exclusive' }] });
|
|
163
|
+
const declared = { schemaVersion: 1, objectiveKind: metrics.objectiveKind,
|
|
164
|
+
direction: metrics.direction, requirements, envelope: envelope(metrics.candidateValue, comparison.runId),
|
|
165
|
+
...(typeof metrics.baselineValue === 'number' && Number.isFinite(metrics.baselineValue) && metrics.baselineValue >= 0
|
|
166
|
+
? { baseline: envelope(metrics.baselineValue, `${comparison.runId}:baseline`) } : {}) };
|
|
167
|
+
const captured = JSON.stringify({ optimizationMeasurement: declared,
|
|
168
|
+
adapterSummary: { sourceId, sourceSha256: rawSha256, rawOutput, selection: comparison.selection,
|
|
169
|
+
scope: 'reported adapter summary only; source verification and benchmark eligibility remain unknown' } });
|
|
170
|
+
const declarationPath = join(result.runDir, 'adapter_measurement.json');
|
|
171
|
+
writeFileSync(declarationPath, captured, 'utf8');
|
|
172
|
+
return captureOptimizationMeasurement(result, declarationPath, captured, complete);
|
|
173
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { OptimizationExecutionResult } from './adapters/types.js';
|
|
2
|
+
/** A score of comparable reported data, never source verification or benchmark admission. */
|
|
2
3
|
export declare function result_score(result: OptimizationExecutionResult): number | null;
|
|
3
4
|
export declare function is_better_result(currentBest: OptimizationExecutionResult | null, next: OptimizationExecutionResult): boolean;
|