@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.
Files changed (718) hide show
  1. package/README.md +398 -45
  2. package/RUST_THIRD_PARTY_LICENSES.txt +1080 -822
  3. package/THIRD_PARTY_NOTICES.md +273 -12
  4. package/bin/zmux-darwin-arm64 +0 -0
  5. package/bin/ztc-audio-darwin-arm64 +0 -0
  6. package/bin/ztc-capture-darwin-arm64 +0 -0
  7. package/bin/ztc-computer-darwin-arm64 +0 -0
  8. package/bin/ztc-llm-darwin-arm64 +0 -0
  9. package/bin/ztc-tts-darwin-arm64 +0 -0
  10. package/bin/ztc-tui-darwin-arm64 +0 -0
  11. package/bin/ztc-zlicky-overlay-darwin-arm64 +0 -0
  12. package/bin/zterm-darwin-arm64 +0 -0
  13. package/dist/App.js +1206 -209
  14. package/dist/agent/agent.d.ts +74 -8
  15. package/dist/agent/agent.js +1073 -184
  16. package/dist/agent/backends/account_rotation.d.ts +4 -0
  17. package/dist/agent/backends/account_rotation.js +8 -2
  18. package/dist/agent/backends/anthropic.d.ts +13 -0
  19. package/dist/agent/backends/anthropic.js +169 -28
  20. package/dist/agent/backends/claude_cli.js +18 -8
  21. package/dist/agent/backends/codex_app_server.d.ts +1 -0
  22. package/dist/agent/backends/codex_app_server.js +55 -3
  23. package/dist/agent/backends/codex_auth.d.ts +1 -0
  24. package/dist/agent/backends/codex_auth.js +67 -13
  25. package/dist/agent/backends/codex_buffered_recovery.d.ts +27 -0
  26. package/dist/agent/backends/codex_buffered_recovery.js +293 -0
  27. package/dist/agent/backends/gemini.js +3 -1
  28. package/dist/agent/backends/http_error.d.ts +26 -0
  29. package/dist/agent/backends/http_error.js +221 -0
  30. package/dist/agent/backends/index.d.ts +9 -2
  31. package/dist/agent/backends/index.js +22 -2
  32. package/dist/agent/backends/openai.d.ts +0 -6
  33. package/dist/agent/backends/openai.js +5 -2
  34. package/dist/agent/backends/openai_compatible.d.ts +5 -4
  35. package/dist/agent/backends/openai_compatible.js +26 -19
  36. package/dist/agent/backends/openai_responses.d.ts +8 -3
  37. package/dist/agent/backends/openai_responses.js +77 -33
  38. package/dist/agent/backends/provider_ids.d.ts +1 -0
  39. package/dist/agent/backends/provider_ids.js +4 -0
  40. package/dist/agent/backends/request_metrics.js +12 -2
  41. package/dist/agent/backends/types.d.ts +109 -6
  42. package/dist/agent/backends/types.js +5 -1
  43. package/dist/agent/backends/zrouter_stream.d.ts +6 -1
  44. package/dist/agent/backends/zrouter_stream.js +160 -42
  45. package/dist/agent/background_registry.d.ts +2 -0
  46. package/dist/agent/background_registry.js +1 -0
  47. package/dist/agent/claim_observation.d.ts +6 -0
  48. package/dist/agent/claim_observation.js +54 -0
  49. package/dist/agent/commands/accounts.js +46 -177
  50. package/dist/agent/commands/attention.d.ts +2 -0
  51. package/dist/agent/commands/attention.js +67 -0
  52. package/dist/agent/commands/auth.js +18 -2
  53. package/dist/agent/commands/board.d.ts +2 -0
  54. package/dist/agent/commands/board.js +169 -0
  55. package/dist/agent/commands/clipboard.js +50 -1
  56. package/dist/agent/commands/compact.js +21 -13
  57. package/dist/agent/commands/config.js +4 -1
  58. package/dist/agent/commands/context.js +6 -1
  59. package/dist/agent/commands/desktop.d.ts +2 -0
  60. package/dist/agent/commands/desktop.js +29 -0
  61. package/dist/agent/commands/effort.js +14 -6
  62. package/dist/agent/commands/environment.d.ts +3 -0
  63. package/dist/agent/commands/environment.js +109 -0
  64. package/dist/agent/commands/evidence.d.ts +2 -0
  65. package/dist/agent/commands/evidence.js +9 -0
  66. package/dist/agent/commands/fork.js +4 -3
  67. package/dist/agent/commands/goal.d.ts +33 -1
  68. package/dist/agent/commands/goal.js +174 -14
  69. package/dist/agent/commands/goal_exit.d.ts +36 -0
  70. package/dist/agent/commands/goal_exit.js +120 -0
  71. package/dist/agent/commands/help.js +3 -1
  72. package/dist/agent/commands/history.js +3 -1
  73. package/dist/agent/commands/inbox.d.ts +2 -0
  74. package/dist/agent/commands/inbox.js +148 -0
  75. package/dist/agent/commands/index.js +16 -1
  76. package/dist/agent/commands/input_mode.js +8 -6
  77. package/dist/agent/commands/job.d.ts +2 -0
  78. package/dist/agent/commands/job.js +93 -0
  79. package/dist/agent/commands/keybindings.js +4 -1
  80. package/dist/agent/commands/label.d.ts +2 -0
  81. package/dist/agent/commands/label.js +77 -0
  82. package/dist/agent/commands/layout.d.ts +2 -0
  83. package/dist/agent/commands/layout.js +20 -0
  84. package/dist/agent/commands/mirror.js +16 -1
  85. package/dist/agent/commands/model.js +12 -2
  86. package/dist/agent/commands/permissions.d.ts +3 -1
  87. package/dist/agent/commands/permissions.js +79 -89
  88. package/dist/agent/commands/plan.js +5 -15
  89. package/dist/agent/commands/profile.js +21 -2
  90. package/dist/agent/commands/provider_selection.js +20 -1
  91. package/dist/agent/commands/rename.js +1 -1
  92. package/dist/agent/commands/resources.d.ts +2 -0
  93. package/dist/agent/commands/resources.js +67 -0
  94. package/dist/agent/commands/rewind.d.ts +3 -0
  95. package/dist/agent/commands/rewind.js +16 -0
  96. package/dist/agent/commands/runbooks.d.ts +2 -0
  97. package/dist/agent/commands/runbooks.js +73 -0
  98. package/dist/agent/commands/runbooks_lazy.d.ts +2 -0
  99. package/dist/agent/commands/runbooks_lazy.js +8 -0
  100. package/dist/agent/commands/sessions.d.ts +1 -1
  101. package/dist/agent/commands/sessions.js +33 -5
  102. package/dist/agent/commands/settings.js +185 -39
  103. package/dist/agent/commands/setup.d.ts +2 -0
  104. package/dist/agent/commands/setup.js +78 -0
  105. package/dist/agent/commands/share.d.ts +2 -0
  106. package/dist/agent/commands/share.js +64 -0
  107. package/dist/agent/commands/status.js +14 -2
  108. package/dist/agent/commands/types.d.ts +99 -6
  109. package/dist/agent/commands/update.js +8 -0
  110. package/dist/agent/commands/usage.d.ts +2 -0
  111. package/dist/agent/commands/usage.js +8 -0
  112. package/dist/agent/factory.d.ts +11 -0
  113. package/dist/agent/factory.js +113 -88
  114. package/dist/agent/loop_policy.d.ts +6 -3
  115. package/dist/agent/loop_policy.js +12 -3
  116. package/dist/agent/measurement_guidance.d.ts +2 -0
  117. package/dist/agent/measurement_guidance.js +5 -0
  118. package/dist/agent/request_encoder.d.ts +8 -1
  119. package/dist/agent/request_encoder.js +95 -23
  120. package/dist/agent/runtime/benchmark_comparison.d.ts +30 -0
  121. package/dist/agent/runtime/benchmark_comparison.js +94 -0
  122. package/dist/agent/runtime/benchmark_contract.d.ts +48 -0
  123. package/dist/agent/runtime/benchmark_contract.js +90 -0
  124. package/dist/agent/runtime/checked_commands.d.ts +32 -0
  125. package/dist/agent/runtime/checked_commands.js +119 -0
  126. package/dist/agent/runtime/command_execution_policy.d.ts +26 -0
  127. package/dist/agent/runtime/command_execution_policy.js +91 -0
  128. package/dist/agent/runtime/command_jobs.d.ts +36 -18
  129. package/dist/agent/runtime/command_jobs.js +151 -13
  130. package/dist/agent/runtime/command_panes.d.ts +59 -0
  131. package/dist/agent/runtime/command_panes.js +398 -0
  132. package/dist/agent/runtime/command_wait.d.ts +19 -0
  133. package/dist/agent/runtime/command_wait.js +167 -0
  134. package/dist/agent/runtime/cpu_benchmark.d.ts +30 -0
  135. package/dist/agent/runtime/cpu_benchmark.js +126 -0
  136. package/dist/agent/runtime/delegated_evidence.d.ts +26 -0
  137. package/dist/agent/runtime/delegated_evidence.js +80 -0
  138. package/dist/agent/runtime/evidence.d.ts +127 -0
  139. package/dist/agent/runtime/evidence.js +468 -0
  140. package/dist/agent/runtime/execution_context.d.ts +7 -0
  141. package/dist/agent/runtime/execution_context.js +39 -3
  142. package/dist/agent/runtime/json_verifier_recipe.d.ts +8 -0
  143. package/dist/agent/runtime/json_verifier_recipe.js +66 -0
  144. package/dist/agent/runtime/measurements.d.ts +110 -0
  145. package/dist/agent/runtime/measurements.js +317 -0
  146. package/dist/agent/runtime/policy.d.ts +4 -0
  147. package/dist/agent/runtime/policy.js +31 -20
  148. package/dist/agent/runtime/provider_native_evidence.d.ts +20 -0
  149. package/dist/agent/runtime/provider_native_evidence.js +86 -0
  150. package/dist/agent/runtime/recovery.d.ts +2 -0
  151. package/dist/agent/runtime/recovery.js +45 -2
  152. package/dist/agent/runtime/remote_broker_transport.d.ts +10 -0
  153. package/dist/agent/runtime/remote_broker_transport.js +84 -0
  154. package/dist/agent/runtime/remote_deletion_receipts.d.ts +3 -0
  155. package/dist/agent/runtime/remote_deletion_receipts.js +43 -0
  156. package/dist/agent/runtime/remote_journal_replay.d.ts +13 -0
  157. package/dist/agent/runtime/remote_journal_replay.js +233 -0
  158. package/dist/agent/runtime/remote_mutation_journal.d.ts +25 -0
  159. package/dist/agent/runtime/remote_mutation_journal.js +208 -0
  160. package/dist/agent/runtime/remote_resource_endpoint.d.ts +7 -0
  161. package/dist/agent/runtime/remote_resource_endpoint.js +6 -0
  162. package/dist/agent/runtime/remote_resource_errors.d.ts +5 -0
  163. package/dist/agent/runtime/remote_resource_errors.js +9 -0
  164. package/dist/agent/runtime/remote_resource_script.d.ts +2 -0
  165. package/dist/agent/runtime/remote_resource_script.js +1009 -0
  166. package/dist/agent/runtime/remote_resources.d.ts +29 -0
  167. package/dist/agent/runtime/remote_resources.js +160 -0
  168. package/dist/agent/runtime/source_verification.d.ts +12 -0
  169. package/dist/agent/runtime/source_verification.js +210 -0
  170. package/dist/agent/runtime/source_verification_contract.d.ts +75 -0
  171. package/dist/agent/runtime/source_verification_contract.js +203 -0
  172. package/dist/agent/runtime/tool_checkpoints.d.ts +11 -0
  173. package/dist/agent/runtime/tool_checkpoints.js +26 -0
  174. package/dist/agent/runtime/tool_effects.d.ts +5 -0
  175. package/dist/agent/runtime/tool_progress.d.ts +12 -0
  176. package/dist/agent/runtime/tool_progress.js +76 -0
  177. package/dist/agent/runtime/tool_runtime.d.ts +16 -1
  178. package/dist/agent/runtime/tool_runtime.js +204 -10
  179. package/dist/agent/runtime/tracing.d.ts +1 -1
  180. package/dist/agent/runtime/verifier_capture.d.ts +9 -0
  181. package/dist/agent/runtime/verifier_capture.js +100 -0
  182. package/dist/agent/runtime/verifier_contract.d.ts +24 -0
  183. package/dist/agent/runtime/verifier_contract.js +41 -0
  184. package/dist/agent/subagent.d.ts +20 -10
  185. package/dist/agent/subagent.js +266 -29
  186. package/dist/agent/tool_response_directory.d.ts +24 -0
  187. package/dist/agent/tool_response_directory.js +61 -0
  188. package/dist/agent/tool_response_source.d.ts +8 -0
  189. package/dist/agent/tool_response_source.js +49 -0
  190. package/dist/agent/tool_response_store.d.ts +75 -4
  191. package/dist/agent/tool_response_store.js +583 -64
  192. package/dist/agent/tools/ask_user.d.ts +3 -1
  193. package/dist/agent/tools/ask_user.js +30 -11
  194. package/dist/agent/tools/background.js +1 -0
  195. package/dist/agent/tools/benchmark_cpu.d.ts +2 -0
  196. package/dist/agent/tools/benchmark_cpu.js +102 -0
  197. package/dist/agent/tools/compare_benchmarks.d.ts +2 -0
  198. package/dist/agent/tools/compare_benchmarks.js +53 -0
  199. package/dist/agent/tools/deferred.js +1 -0
  200. package/dist/agent/tools/delegate.js +18 -2
  201. package/dist/agent/tools/helper_requirements.d.ts +7 -0
  202. package/dist/agent/tools/helper_requirements.js +19 -0
  203. package/dist/agent/tools/index.d.ts +1 -0
  204. package/dist/agent/tools/index.js +3 -0
  205. package/dist/agent/tools/measurement_report.d.ts +22 -0
  206. package/dist/agent/tools/measurement_report.js +190 -0
  207. package/dist/agent/tools/pane.d.ts +0 -7
  208. package/dist/agent/tools/pane.js +5 -4
  209. package/dist/agent/tools/project_context.d.ts +3 -0
  210. package/dist/agent/tools/project_context.js +45 -0
  211. package/dist/agent/tools/recall_tool_response.d.ts +3 -5
  212. package/dist/agent/tools/recall_tool_response.js +19 -29
  213. package/dist/agent/tools/registry.d.ts +1 -0
  214. package/dist/agent/tools/registry.js +23 -0
  215. package/dist/agent/tools/related_sessions.d.ts +2 -0
  216. package/dist/agent/tools/related_sessions.js +156 -0
  217. package/dist/agent/tools/routine.js +13 -3
  218. package/dist/agent/tools/session_evidence.d.ts +3 -0
  219. package/dist/agent/tools/session_evidence.js +72 -0
  220. package/dist/agent/tools/shell.d.ts +4 -3
  221. package/dist/agent/tools/shell.js +174 -47
  222. package/dist/agent/tools/tool_search.js +3 -2
  223. package/dist/agent/tools/types.d.ts +28 -0
  224. package/dist/agent/tools/verify_artifact.d.ts +2 -0
  225. package/dist/agent/tools/verify_artifact.js +60 -0
  226. package/dist/agent/tools/workflow.js +1 -0
  227. package/dist/app/activity.d.ts +6 -1
  228. package/dist/app/activity.js +81 -12
  229. package/dist/app/agent_runner.d.ts +6 -1
  230. package/dist/app/agent_runner.js +34 -19
  231. package/dist/app/command_context.js +106 -10
  232. package/dist/app/controller.d.ts +15 -4
  233. package/dist/app/controller.js +29 -3
  234. package/dist/app/escape_stop.d.ts +11 -0
  235. package/dist/app/escape_stop.js +15 -0
  236. package/dist/app/liveness.d.ts +6 -4
  237. package/dist/app/liveness.js +13 -3
  238. package/dist/app/model_catalog_cache.d.ts +5 -0
  239. package/dist/app/model_catalog_cache.js +138 -0
  240. package/dist/app/ordered_transcript.js +43 -4
  241. package/dist/app/prompt_turn.d.ts +14 -0
  242. package/dist/app/prompt_turn.js +53 -0
  243. package/dist/app/recap.d.ts +3 -0
  244. package/dist/app/recap.js +9 -3
  245. package/dist/app/restart.d.ts +3 -2
  246. package/dist/app/restart.js +22 -7
  247. package/dist/app/rewind.d.ts +3 -3
  248. package/dist/app/rewind.js +3 -3
  249. package/dist/app/selection_completion.d.ts +17 -2
  250. package/dist/app/selection_completion.js +84 -9
  251. package/dist/app/session_manager.d.ts +38 -6
  252. package/dist/app/session_manager.js +263 -60
  253. package/dist/app/session_messages.d.ts +3 -0
  254. package/dist/app/session_messages.js +60 -0
  255. package/dist/app/task_scope_router.d.ts +20 -0
  256. package/dist/app/task_scope_router.js +173 -0
  257. package/dist/app/transcript_window.d.ts +2 -0
  258. package/dist/app/transcript_window.js +4 -0
  259. package/dist/app/workspace_admission_details.d.ts +3 -0
  260. package/dist/app/workspace_admission_details.js +26 -0
  261. package/dist/app/workspace_layout_controller.d.ts +11 -0
  262. package/dist/app/workspace_layout_controller.js +88 -0
  263. package/dist/app/workspace_monitor.d.ts +1 -0
  264. package/dist/app/workspace_monitor.js +216 -0
  265. package/dist/app/workspace_presets.d.ts +29 -0
  266. package/dist/app/workspace_presets.js +192 -0
  267. package/dist/attention/queue.d.ts +37 -0
  268. package/dist/attention/queue.js +183 -0
  269. package/dist/bench/rf_shared.d.ts +2 -0
  270. package/dist/board/binding.d.ts +42 -0
  271. package/dist/board/binding.js +38 -0
  272. package/dist/board/client.d.ts +42 -0
  273. package/dist/board/client.js +60 -0
  274. package/dist/cli.js +1 -1
  275. package/dist/cli_args.js +19 -17
  276. package/dist/cli_main.js +110 -13
  277. package/dist/cli_ratatui.d.ts +183 -16
  278. package/dist/cli_ratatui.js +3989 -1255
  279. package/dist/components/ActivityLine.d.ts +3 -2
  280. package/dist/components/ActivityLine.js +2 -2
  281. package/dist/components/InputArea.d.ts +19 -1
  282. package/dist/components/InputArea.js +264 -190
  283. package/dist/components/MessageList.d.ts +2 -0
  284. package/dist/components/MessageList.js +3 -1
  285. package/dist/components/SingleMessage.d.ts +2 -0
  286. package/dist/components/SingleMessage.js +4 -2
  287. package/dist/components/StatusBar.d.ts +4 -2
  288. package/dist/components/StatusBar.js +3 -1
  289. package/dist/conductor_branch.js +3 -0
  290. package/dist/config/api_retry.d.ts +6 -1
  291. package/dist/config/api_retry.js +19 -1
  292. package/dist/config/defaults.d.ts +2 -1
  293. package/dist/config/defaults.js +9 -2
  294. package/dist/config/message_display.d.ts +1 -0
  295. package/dist/config/message_display.js +17 -2
  296. package/dist/config/permissions.d.ts +21 -0
  297. package/dist/config/permissions.js +89 -0
  298. package/dist/config/resolved.d.ts +2 -2
  299. package/dist/config/types.d.ts +32 -5
  300. package/dist/config.d.ts +38 -4
  301. package/dist/config.js +290 -42
  302. package/dist/context/project_intelligence.d.ts +44 -0
  303. package/dist/context/project_intelligence.js +246 -0
  304. package/dist/desktop/cli_launch.d.ts +8 -0
  305. package/dist/desktop/cli_launch.js +6 -0
  306. package/dist/desktop/cli_shim.d.ts +8 -0
  307. package/dist/desktop/cli_shim.js +120 -0
  308. package/dist/desktop/runtime.d.ts +16 -0
  309. package/dist/desktop/runtime.js +161 -0
  310. package/dist/desktop/worker_launch.d.ts +7 -0
  311. package/dist/desktop/worker_launch.js +7 -0
  312. package/dist/diagnostics/cargo_mutants_selection.d.ts +27 -0
  313. package/dist/diagnostics/cargo_mutants_selection.js +48 -0
  314. package/dist/diagnostics/native_terminal_benchmark.d.ts +58 -0
  315. package/dist/diagnostics/native_terminal_benchmark.js +1247 -0
  316. package/dist/diagnostics/session_evidence_package.d.ts +40 -0
  317. package/dist/diagnostics/session_evidence_package.js +234 -0
  318. package/dist/diagnostics/session_export.d.ts +93 -0
  319. package/dist/diagnostics/session_export.js +634 -0
  320. package/dist/emulation/tool_adapters.js +48 -18
  321. package/dist/emulation/ztc_addendum.d.ts +1 -0
  322. package/dist/emulation/ztc_addendum.js +13 -12
  323. package/dist/environment/service_runner.d.ts +1 -0
  324. package/dist/environment/service_runner.js +68 -0
  325. package/dist/environment/store.d.ts +120 -0
  326. package/dist/environment/store.js +387 -0
  327. package/dist/events.d.ts +40 -1
  328. package/dist/events.js +10 -17
  329. package/dist/goal_contract.d.ts +25 -0
  330. package/dist/goal_contract.js +44 -0
  331. package/dist/headless.d.ts +31 -0
  332. package/dist/headless.js +578 -70
  333. package/dist/headless_cli.js +8 -0
  334. package/dist/headless_cli_args.d.ts +1 -0
  335. package/dist/headless_cli_args.js +1 -0
  336. package/dist/intake/cli.d.ts +1 -0
  337. package/dist/intake/cli.js +33 -0
  338. package/dist/intake/format.d.ts +2 -0
  339. package/dist/intake/format.js +14 -0
  340. package/dist/intake/notifications.d.ts +16 -0
  341. package/dist/intake/notifications.js +132 -0
  342. package/dist/intake/store.d.ts +56 -0
  343. package/dist/intake/store.js +238 -0
  344. package/dist/library.d.ts +8 -0
  345. package/dist/library.js +19 -10
  346. package/dist/mcp/client.d.ts +1 -0
  347. package/dist/mcp/client.js +20 -0
  348. package/dist/modes/builtin/plan.yaml +2 -2
  349. package/dist/modes/handlers.js +1 -1
  350. package/dist/onboarding/first_run.d.ts +3 -0
  351. package/dist/onboarding/first_run.js +33 -25
  352. package/dist/onboarding/setup.d.ts +32 -0
  353. package/dist/onboarding/setup.js +133 -0
  354. package/dist/onboarding/setup_agent_health.d.ts +17 -0
  355. package/dist/onboarding/setup_agent_health.js +79 -0
  356. package/dist/onboarding/setup_environment.d.ts +66 -0
  357. package/dist/onboarding/setup_environment.js +219 -0
  358. package/dist/onboarding/setup_workspace.d.ts +17 -0
  359. package/dist/onboarding/setup_workspace.js +129 -0
  360. package/dist/optimize/adapters/index.d.ts +4 -1
  361. package/dist/optimize/adapters/index.js +7 -0
  362. package/dist/optimize/adapters/kernelbench.js +14 -5
  363. package/dist/optimize/adapters/popcorn.js +3 -2
  364. package/dist/optimize/adapters/profile_benchmark.js +13 -7
  365. package/dist/optimize/adapters/rfbench.js +25 -14
  366. package/dist/optimize/adapters/types.d.ts +3 -0
  367. package/dist/optimize/adapters/zergpod.js +5 -2
  368. package/dist/optimize/baseline.js +10 -21
  369. package/dist/optimize/branch.js +9 -12
  370. package/dist/optimize/combine.js +2 -3
  371. package/dist/optimize/executor.js +34 -48
  372. package/dist/optimize/measurements.d.ts +55 -0
  373. package/dist/optimize/measurements.js +173 -0
  374. package/dist/optimize/results.d.ts +1 -0
  375. package/dist/optimize/results.js +11 -33
  376. package/dist/optimize/tge.js +2 -1
  377. package/dist/panes/initial_input.d.ts +19 -0
  378. package/dist/panes/initial_input.js +206 -0
  379. package/dist/panes/labels.d.ts +16 -0
  380. package/dist/panes/labels.js +42 -0
  381. package/dist/panes/model_catalog.d.ts +3 -3
  382. package/dist/panes/model_catalog.js +28 -4
  383. package/dist/panes/pane_registry.js +6 -2
  384. package/dist/panes/types.d.ts +3 -0
  385. package/dist/panes/ztc_launch.js +19 -0
  386. package/dist/plugin/optimization.d.ts +2 -0
  387. package/dist/plugin/optimization.js +1 -0
  388. package/dist/plugin/runtime.d.ts +2 -0
  389. package/dist/plugin/simulation.d.ts +6 -1
  390. package/dist/plugin/simulation_contract.d.ts +836 -1
  391. package/dist/plugin/simulation_documents.d.ts +22 -0
  392. package/dist/plugin/simulation_documents.js +1 -0
  393. package/dist/plugin/simulation_interventions.d.ts +103 -0
  394. package/dist/plugin/simulation_interventions.js +1 -0
  395. package/dist/plugin/simulation_living.d.ts +1 -0
  396. package/dist/plugin/simulation_living.js +3 -0
  397. package/dist/plugin/simulation_meetings.d.ts +121 -0
  398. package/dist/plugin/simulation_meetings.js +1 -0
  399. package/dist/plugin/simulation_story_review.d.ts +111 -0
  400. package/dist/plugin/simulation_story_review.js +1 -0
  401. package/dist/plugin/simulation_storyteller.d.ts +91 -0
  402. package/dist/plugin/simulation_storyteller.js +1 -0
  403. package/dist/plugin/simulation_structured.d.ts +2 -0
  404. package/dist/plugin/simulation_structured.js +2 -0
  405. package/dist/plugin/simulation_toolkit.d.ts +21 -0
  406. package/dist/plugin/simulation_toolkit.js +24 -0
  407. package/dist/prompts/tool_delegate_task.j2 +1 -1
  408. package/dist/remote-broker/Dockerfile +10 -0
  409. package/dist/remote-broker/archive.py +1227 -0
  410. package/dist/remote-broker/cutover.py +761 -0
  411. package/dist/remote-broker/requirements.txt +5 -0
  412. package/dist/remote-broker/resources.json +6 -0
  413. package/dist/remote-broker/resources.write-staging.example.json +18 -0
  414. package/dist/remote-broker/retained.py +686 -0
  415. package/dist/remote-broker/retained_cleanup.py +550 -0
  416. package/dist/remote-broker/server.py +648 -0
  417. package/dist/remote-broker/worker.py +1007 -0
  418. package/dist/router_auth.d.ts +31 -0
  419. package/dist/router_auth.js +155 -9
  420. package/dist/runbooks/catalog.d.ts +3 -0
  421. package/dist/runbooks/catalog.js +26 -0
  422. package/dist/runbooks/library.d.ts +11 -0
  423. package/dist/runbooks/library.js +95 -0
  424. package/dist/runbooks/package.d.ts +43 -0
  425. package/dist/runbooks/package.js +102 -0
  426. package/dist/session.d.ts +65 -13
  427. package/dist/session.js +548 -43
  428. package/dist/session_handoff.d.ts +25 -0
  429. package/dist/session_handoff.js +322 -0
  430. package/dist/session_handoff_contract.d.ts +89 -0
  431. package/dist/session_handoff_contract.js +179 -0
  432. package/dist/session_media.d.ts +41 -0
  433. package/dist/session_media.js +357 -0
  434. package/dist/session_ownership.d.ts +16 -0
  435. package/dist/session_ownership.js +221 -0
  436. package/dist/session_public.d.ts +10 -2
  437. package/dist/session_public.js +6 -1
  438. package/dist/simulation/dynamic_history.d.ts +42 -0
  439. package/dist/simulation/dynamic_history.js +173 -0
  440. package/dist/simulation/engines/swarm/pane_manager.js +7 -6
  441. package/dist/simulation/inference.d.ts +3 -1
  442. package/dist/simulation/inference.js +19 -1
  443. package/dist/simulation/intervention_generation.d.ts +27 -0
  444. package/dist/simulation/intervention_generation.js +246 -0
  445. package/dist/simulation/intervention_material.d.ts +4 -0
  446. package/dist/simulation/intervention_material.js +81 -0
  447. package/dist/simulation/living/context.d.ts +3130 -0
  448. package/dist/simulation/living/context.js +944 -0
  449. package/dist/simulation/living/definer.d.ts +12 -0
  450. package/dist/simulation/living/definer.js +223 -0
  451. package/dist/simulation/living/definition.d.ts +257 -0
  452. package/dist/simulation/living/definition.js +341 -0
  453. package/dist/simulation/living/frame.d.ts +259 -0
  454. package/dist/simulation/living/frame.js +223 -0
  455. package/dist/simulation/living/identifiers.d.ts +2 -0
  456. package/dist/simulation/living/identifiers.js +12 -0
  457. package/dist/simulation/living/index.d.ts +15 -0
  458. package/dist/simulation/living/index.js +15 -0
  459. package/dist/simulation/living/inference.d.ts +219 -0
  460. package/dist/simulation/living/inference.js +576 -0
  461. package/dist/simulation/living/mechanics.d.ts +54 -0
  462. package/dist/simulation/living/mechanics.js +588 -0
  463. package/dist/simulation/living/model-input.d.ts +25 -0
  464. package/dist/simulation/living/model-input.js +215 -0
  465. package/dist/simulation/living/open-world.d.ts +257 -0
  466. package/dist/simulation/living/open-world.js +102 -0
  467. package/dist/simulation/living/projection.d.ts +7 -0
  468. package/dist/simulation/living/projection.js +31 -0
  469. package/dist/simulation/living/recall.d.ts +17 -0
  470. package/dist/simulation/living/recall.js +25 -0
  471. package/dist/simulation/living/reduce.d.ts +15 -0
  472. package/dist/simulation/living/reduce.js +1853 -0
  473. package/dist/simulation/living/replay.d.ts +6 -0
  474. package/dist/simulation/living/replay.js +22 -0
  475. package/dist/simulation/living/runtime.d.ts +140 -0
  476. package/dist/simulation/living/runtime.js +3020 -0
  477. package/dist/simulation/living/shared-kinds.d.ts +24 -0
  478. package/dist/simulation/living/shared-kinds.js +96 -0
  479. package/dist/simulation/living/types.d.ts +2785 -0
  480. package/dist/simulation/living/types.js +669 -0
  481. package/dist/simulation/llm.d.ts +3 -1
  482. package/dist/simulation/llm.js +90 -30
  483. package/dist/simulation/memory/embedding.d.ts +1 -1
  484. package/dist/simulation/memory/embedding.js +9 -3
  485. package/dist/simulation/memory/filesystem.d.ts +2 -0
  486. package/dist/simulation/memory/filesystem.js +5 -1
  487. package/dist/simulation/memory/filesystem_file_tree.d.ts +4 -1
  488. package/dist/simulation/memory/filesystem_file_tree.js +41 -10
  489. package/dist/simulation/memory/filesystem_invariants.js +1 -2
  490. package/dist/simulation/memory/filesystem_types.d.ts +1 -0
  491. package/dist/simulation/memory/memory.d.ts +2 -0
  492. package/dist/simulation/memory/memory.js +5 -1
  493. package/dist/simulation/orchestration/intent.js +0 -2
  494. package/dist/simulation/orchestration/lifecycle.js +0 -2
  495. package/dist/simulation/plugin_host.d.ts +25 -1
  496. package/dist/simulation/plugin_host.js +334 -17
  497. package/dist/simulation/session_documents.d.ts +20 -0
  498. package/dist/simulation/session_documents.js +62 -0
  499. package/dist/simulation/session_input_validation.d.ts +43 -0
  500. package/dist/simulation/session_input_validation.js +364 -0
  501. package/dist/simulation/session_inputs.d.ts +32 -0
  502. package/dist/simulation/session_inputs.js +154 -0
  503. package/dist/simulation/telemetry.d.ts +11 -14
  504. package/dist/simulation/telemetry.js +177 -54
  505. package/dist/simulation/toolkit/bounded_turns.d.ts +13 -0
  506. package/dist/simulation/toolkit/bounded_turns.js +80 -0
  507. package/dist/simulation/toolkit/dynamic_agents.d.ts +25 -0
  508. package/dist/simulation/toolkit/dynamic_agents.js +218 -0
  509. package/dist/simulation/toolkit/dynamic_digest.d.ts +1 -0
  510. package/dist/simulation/toolkit/dynamic_digest.js +8 -0
  511. package/dist/simulation/toolkit/dynamic_documents.d.ts +7 -0
  512. package/dist/simulation/toolkit/dynamic_documents.js +71 -0
  513. package/dist/simulation/toolkit/dynamic_driver.d.ts +8 -0
  514. package/dist/simulation/toolkit/dynamic_driver.js +269 -0
  515. package/dist/simulation/toolkit/dynamic_game.d.ts +53 -0
  516. package/dist/simulation/toolkit/dynamic_game.js +805 -0
  517. package/dist/simulation/toolkit/dynamic_knowledge.d.ts +15 -0
  518. package/dist/simulation/toolkit/dynamic_knowledge.js +91 -0
  519. package/dist/simulation/toolkit/dynamic_mechanics.d.ts +22 -0
  520. package/dist/simulation/toolkit/dynamic_mechanics.js +910 -0
  521. package/dist/simulation/toolkit/dynamic_meetings.d.ts +239 -0
  522. package/dist/simulation/toolkit/dynamic_meetings.js +350 -0
  523. package/dist/simulation/toolkit/dynamic_progress.d.ts +131 -0
  524. package/dist/simulation/toolkit/dynamic_progress.js +214 -0
  525. package/dist/simulation/toolkit/dynamic_projection.d.ts +9 -0
  526. package/dist/simulation/toolkit/dynamic_projection.js +219 -0
  527. package/dist/simulation/toolkit/dynamic_runtime.d.ts +412 -0
  528. package/dist/simulation/toolkit/dynamic_runtime.js +6536 -0
  529. package/dist/simulation/toolkit/dynamic_state.d.ts +111 -0
  530. package/dist/simulation/toolkit/dynamic_state.js +1967 -0
  531. package/dist/simulation/toolkit/dynamic_story_review.d.ts +508 -0
  532. package/dist/simulation/toolkit/dynamic_story_review.js +333 -0
  533. package/dist/simulation/toolkit/dynamic_storyteller.d.ts +77 -0
  534. package/dist/simulation/toolkit/dynamic_storyteller.js +114 -0
  535. package/dist/simulation/toolkit/dynamic_storyteller_runtime.d.ts +26 -0
  536. package/dist/simulation/toolkit/dynamic_storyteller_runtime.js +126 -0
  537. package/dist/simulation/toolkit/dynamic_world.d.ts +22 -0
  538. package/dist/simulation/toolkit/dynamic_world.js +377 -0
  539. package/dist/simulation/toolkit/structured_output.d.ts +5 -0
  540. package/dist/simulation/toolkit/structured_output.js +321 -0
  541. package/dist/simulation/types/world.d.ts +2 -0
  542. package/dist/simulation/world/artifact_store.js +1 -1
  543. package/dist/simulation/world/memory_manager.d.ts +5 -0
  544. package/dist/simulation/world/memory_manager.js +17 -2
  545. package/dist/simulation/world/state.d.ts +3 -2
  546. package/dist/simulation/world/state.js +15 -5
  547. package/dist/skills/bundled/measurement-validation/SKILL.md +144 -0
  548. package/dist/terminal_attach.d.ts +1 -0
  549. package/dist/terminal_attach.js +113 -0
  550. package/dist/tool_progress.d.ts +3 -0
  551. package/dist/tool_progress.js +27 -0
  552. package/dist/types.d.ts +145 -10
  553. package/dist/types.js +3 -0
  554. package/dist/ui/core/input.d.ts +3 -0
  555. package/dist/ui/core/input_segments.d.ts +18 -1
  556. package/dist/ui/core/input_segments.js +131 -47
  557. package/dist/ui/core/input_state.d.ts +12 -0
  558. package/dist/ui/core/layout_yoga.d.ts +1 -1
  559. package/dist/ui/core/turn_metadata.d.ts +5 -0
  560. package/dist/ui/core/turn_metadata.js +22 -0
  561. package/dist/ui/ink/render.d.ts +2 -1
  562. package/dist/ui/ink/render.js +6 -5
  563. package/dist/ui/ratatui/headless_pane_manager.d.ts +14 -1
  564. package/dist/ui/ratatui/headless_pane_manager.js +293 -104
  565. package/dist/ui/ratatui/index.d.ts +1 -0
  566. package/dist/ui/ratatui/input.d.ts +4 -0
  567. package/dist/ui/ratatui/input.js +15 -0
  568. package/dist/ui/ratatui/ipc_path.d.ts +2 -0
  569. package/dist/ui/ratatui/ipc_path.js +29 -1
  570. package/dist/ui/ratatui/mux_persistence.d.ts +3 -1
  571. package/dist/ui/ratatui/mux_persistence.js +139 -1
  572. package/dist/ui/ratatui/pane_relay.d.ts +1 -1
  573. package/dist/ui/ratatui/pane_relay.js +55 -27
  574. package/dist/ui/ratatui/process.d.ts +17 -1
  575. package/dist/ui/ratatui/process.js +80 -7
  576. package/dist/ui/ratatui/protocol.d.ts +236 -1
  577. package/dist/ui/ratatui/protocol.js +90 -0
  578. package/dist/ui/scrollback.d.ts +2 -1
  579. package/dist/ui/scrollback.js +9 -4
  580. package/dist/ui/stream_typewriter.d.ts +8 -3
  581. package/dist/ui/stream_typewriter.js +30 -1
  582. package/dist/ui/streaming_scrollback.d.ts +1 -0
  583. package/dist/ui/streaming_scrollback.js +1 -1
  584. package/dist/ui/transcript_render_cache.js +10 -0
  585. package/dist/ui/views/activity_line.d.ts +5 -3
  586. package/dist/ui/views/activity_line.js +65 -7
  587. package/dist/ui/views/app.d.ts +6 -3
  588. package/dist/ui/views/app.js +17 -6
  589. package/dist/ui/views/completion_menu.js +10 -5
  590. package/dist/ui/views/input_area.d.ts +7 -3
  591. package/dist/ui/views/input_area.js +15 -9
  592. package/dist/ui/views/message_list.d.ts +4 -1
  593. package/dist/ui/views/message_list.js +89 -19
  594. package/dist/ui/views/queue_panel.d.ts +3 -1
  595. package/dist/ui/views/queue_panel.js +9 -2
  596. package/dist/ui/views/status_bar.d.ts +4 -2
  597. package/dist/ui/views/status_bar.js +28 -13
  598. package/dist/ui/views/theme.d.ts +2 -0
  599. package/dist/ui/views/theme.js +2 -0
  600. package/dist/ui/widgets/color_panel.js +18 -0
  601. package/dist/ui/widgets/form.js +8 -0
  602. package/dist/ui/widgets/log_view.js +7 -0
  603. package/dist/ui/widgets/navigator_panel.js +8 -0
  604. package/dist/ui/widgets/prompt_viewer.js +2 -0
  605. package/dist/ui/widgets/questionnaire.d.ts +2 -0
  606. package/dist/ui/widgets/questionnaire.js +79 -16
  607. package/dist/ui/widgets/resume_panel.d.ts +2 -0
  608. package/dist/ui/widgets/resume_panel.js +26 -15
  609. package/dist/ui/widgets/rewind_panel.d.ts +2 -2
  610. package/dist/ui/widgets/rewind_panel.js +4 -2
  611. package/dist/ui/widgets/select.js +16 -27
  612. package/dist/ui/widgets/settings_panel.js +16 -0
  613. package/dist/ui/widgets/status_line_panel.d.ts +1 -0
  614. package/dist/ui/widgets/status_line_panel.js +30 -4
  615. package/dist/ui/widgets/text_input.d.ts +2 -0
  616. package/dist/ui/widgets/text_input.js +15 -1
  617. package/dist/ui/widgets/types.d.ts +2 -0
  618. package/dist/usage_projection.d.ts +24 -0
  619. package/dist/usage_projection.js +130 -0
  620. package/dist/usage_snapshot.d.ts +36 -0
  621. package/dist/usage_snapshot.js +131 -0
  622. package/dist/utils/assistant_message.d.ts +2 -0
  623. package/dist/utils/assistant_message.js +5 -0
  624. package/dist/utils/atomic_write.d.ts +6 -2
  625. package/dist/utils/atomic_write.js +29 -4
  626. package/dist/utils/checked_shell.d.ts +25 -0
  627. package/dist/utils/checked_shell.js +107 -0
  628. package/dist/utils/compaction.d.ts +4 -1
  629. package/dist/utils/compaction.js +31 -7
  630. package/dist/utils/context.d.ts +4 -4
  631. package/dist/utils/context.js +14 -12
  632. package/dist/utils/deepseek.d.ts +2 -2
  633. package/dist/utils/deepseek.js +13 -5
  634. package/dist/utils/ephemeral.js +4 -0
  635. package/dist/utils/ephemeral_tools.d.ts +18 -0
  636. package/dist/utils/ephemeral_tools.js +97 -0
  637. package/dist/utils/jev_client.d.ts +4 -0
  638. package/dist/utils/jev_client.js +15 -0
  639. package/dist/utils/model_cache.d.ts +15 -0
  640. package/dist/utils/model_cache.js +143 -0
  641. package/dist/utils/models.d.ts +4 -2
  642. package/dist/utils/models.js +12 -16
  643. package/dist/utils/reasoning.d.ts +8 -1
  644. package/dist/utils/reasoning.js +31 -11
  645. package/dist/utils/router_catalog.d.ts +49 -0
  646. package/dist/utils/router_catalog.js +271 -0
  647. package/dist/utils/sandbox.d.ts +9 -0
  648. package/dist/utils/sandbox.js +118 -15
  649. package/dist/utils/shell.d.ts +7 -0
  650. package/dist/utils/shell.js +98 -34
  651. package/dist/utils/subprocess_env.d.ts +3 -0
  652. package/dist/utils/subprocess_env.js +27 -1
  653. package/dist/web/accounts_mirror.d.ts +3 -1
  654. package/dist/web/accounts_mirror.js +13 -9
  655. package/dist/web/child_publication.d.ts +17 -0
  656. package/dist/web/child_publication.js +45 -0
  657. package/dist/web/mirror_authenticator.d.ts +31 -11
  658. package/dist/web/mirror_authenticator.js +67 -17
  659. package/dist/web/mirror_client.d.ts +31 -4
  660. package/dist/web/mirror_client.js +189 -23
  661. package/dist/web/mirror_stream.d.ts +84 -22
  662. package/dist/web/mirror_stream.js +676 -95
  663. package/dist/web/observer_query_redaction.d.ts +6 -0
  664. package/dist/web/observer_query_redaction.js +58 -0
  665. package/dist/web/pane_registry.d.ts +2 -0
  666. package/dist/web/pane_registry.js +86 -22
  667. package/dist/web/tool_image.d.ts +6 -0
  668. package/dist/web/tool_image.js +17 -0
  669. package/dist/web/view_plugin.d.ts +14 -0
  670. package/dist/web/view_plugin.js +23 -1
  671. package/dist/worker/executor.js +31 -12
  672. package/dist/worker/index.d.ts +1 -0
  673. package/dist/worker/toolsets.js +3 -1
  674. package/dist/worker/types.d.ts +12 -1
  675. package/dist/workflows/registry.js +1 -0
  676. package/dist/workflows/registry_handle.d.ts +2 -0
  677. package/dist/workflows/runtime.d.ts +2 -0
  678. package/dist/workflows/runtime.js +1 -0
  679. package/dist/workspace_agent.d.ts +7 -0
  680. package/dist/workspace_agent.js +36 -0
  681. package/dist/workspace_collision.d.ts +76 -0
  682. package/dist/workspace_collision.js +688 -0
  683. package/dist/workspace_layout.d.ts +18 -0
  684. package/dist/workspace_layout.js +121 -0
  685. package/dist/workspace_runtime.d.ts +44 -0
  686. package/dist/workspace_runtime.js +82 -0
  687. package/dist/workspace_session_context.d.ts +62 -0
  688. package/dist/workspace_session_context.js +160 -0
  689. package/dist/zlm-embed.mjs +32518 -9615
  690. package/dist/zlm.js +1 -0
  691. package/node_modules/@zerg/model-contracts/LICENSE.md +375 -0
  692. package/node_modules/@zerg/model-contracts/README.md +90 -0
  693. package/node_modules/@zerg/model-contracts/index.d.ts +20 -0
  694. package/node_modules/@zerg/model-contracts/index.js +223 -0
  695. package/node_modules/@zerg/model-contracts/package.json +8 -0
  696. package/node_modules/glob/node_modules/brace-expansion/index.js +78 -22
  697. package/node_modules/glob/node_modules/brace-expansion/package.json +1 -1
  698. package/node_modules/readdir-glob/node_modules/brace-expansion/index.js +78 -22
  699. package/node_modules/readdir-glob/node_modules/brace-expansion/package.json +1 -1
  700. package/package.json +45 -24
  701. package/packages/model-contracts/LICENSE.md +375 -0
  702. package/packages/model-contracts/README.md +90 -0
  703. package/packages/model-contracts/index.d.ts +20 -0
  704. package/packages/model-contracts/index.js +223 -0
  705. package/packages/model-contracts/package.json +8 -0
  706. package/remote-broker/Dockerfile +10 -0
  707. package/remote-broker/README.md +308 -0
  708. package/remote-broker/archive.py +1227 -0
  709. package/remote-broker/cutover.py +761 -0
  710. package/remote-broker/requirements.txt +5 -0
  711. package/remote-broker/resources.example.json +6 -0
  712. package/remote-broker/resources.write-staging.example.json +18 -0
  713. package/remote-broker/retained.py +686 -0
  714. package/remote-broker/retained_cleanup.py +550 -0
  715. package/remote-broker/server.py +648 -0
  716. package/scripts/build-remote-broker.mjs +13 -0
  717. package/scripts/ensure-local-packages.mjs +6 -0
  718. 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
- write_json_atomic(join(artifacts.runDir, 'execution_result.json'), result);
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 result;
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
- if (!currentResult.ok) {
90
- return true;
91
- }
92
- const kind = currentResult.metrics?.objectiveKind || 'unknown';
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.execute(spec, deps, artifacts),
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.evaluate(spec, deps, artifacts),
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.evaluate(spec, deps, artifacts);
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.evaluate(candidateSpec, deps, candidateArtifacts);
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 {
@@ -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.evaluate
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
- for (const record of [...branchRecords].sort((left, right) => branch_record_score(right) - branch_record_score(left))) {
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 selected ${bestSpec.target?.ref || resolve_target_path(spec)} as the best downstream result.`,
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
  ],
@@ -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.evaluate
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.execute(spec, deps, artifacts),
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.evaluate(currentSpec, deps, artifacts);
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.evaluate(currentSpec, deps, stageArtifacts);
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.evaluate(currentSpec, deps, stageArtifacts);
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.evaluate(currentSpec, deps, artifacts);
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.execute(executionSpec, deps, artifacts),
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.metrics?.improved
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 measured downstream improvement.`);
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 baseCandidateScore = null;
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.execute(candidate.spec, deps, candidateArtifacts),
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
- baseCandidateScore = result_score(candidateResult);
285
+ baseResult = candidateResult;
297
286
  }
298
- if (choose_better_result(bestResult, bestCandidate, candidateResult, candidate)) {
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 ${materialized.candidates.length} candidate(s).`,
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 selectedCandidateScore = result_score(result);
341
- if (selectedCandidate.kind === 'mutated'
342
- && baseCandidateScore !== null
343
- && selectedCandidateScore !== null
344
- && selectedCandidateScore > baseCandidateScore) {
345
- result.metrics = {
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 (result.metrics?.improved && selectedCandidate.kind === 'mutated') {
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 measured downstream improvement.`);
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
- writeFileSync(join(artifacts.runDir, 'execution_result.json'), JSON.stringify(result, null, 2), 'utf-8');
380
- return result;
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;