@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,42 +1,20 @@
1
+ import { assessOptimizationResult, compareOptimizationResults } from './measurements.js';
2
+ /** A score of comparable reported data, never source verification or benchmark admission. */
1
3
  export function result_score(result) {
2
- if (!result.ok) {
4
+ const report = assessOptimizationResult(result);
5
+ if (report.compatibility !== 'compatible' || report.value === null)
3
6
  return null;
4
- }
5
- if (result.metrics?.candidateValue !== undefined) {
6
- return result.metrics.direction === 'minimize'
7
- ? -result.metrics.candidateValue
8
- : result.metrics.candidateValue;
9
- }
10
- return null;
7
+ return report.direction === 'minimize' ? -report.value : report.value;
11
8
  }
12
9
  export function is_better_result(currentBest, next) {
13
- if (!next.ok) {
14
- return false;
15
- }
16
- if (!currentBest || !currentBest.ok) {
17
- return true;
18
- }
19
- const currentScore = result_score(currentBest);
20
10
  const nextScore = result_score(next);
21
- if (currentScore === null && nextScore === null) {
11
+ if (nextScore === null)
22
12
  return false;
23
- }
24
- if (currentScore === null) {
25
- return nextScore !== null;
26
- }
27
- if (nextScore === null) {
28
- return false;
29
- }
30
- if (nextScore > currentScore) {
13
+ if (!currentBest)
31
14
  return true;
32
- }
33
- if (nextScore < currentScore) {
15
+ // An unqualified incumbent is preserved: there is no declared common baseline to replace.
16
+ if (compareOptimizationResults(currentBest, next).compatibility !== 'compatible')
34
17
  return false;
35
- }
36
- const currentSecondary = currentBest.metrics?.secondaryValue;
37
- const nextSecondary = next.metrics?.secondaryValue;
38
- if (currentSecondary !== undefined && nextSecondary !== undefined) {
39
- return nextSecondary > currentSecondary;
40
- }
41
- return false;
18
+ const currentScore = result_score(currentBest);
19
+ return currentScore !== null && nextScore > currentScore;
42
20
  }
@@ -1,3 +1,4 @@
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 { generate_text_with_backend, extract_code_payload } from './llm.js';
@@ -207,7 +208,7 @@ export async function execute_native_tge(spec, adapter, deps, artifacts, current
207
208
  writeFileSync(candidateArtifacts.specPath, JSON.stringify(candidateSpec, null, 2), 'utf-8');
208
209
  writeFileSync(candidateArtifacts.planPath, '', 'utf-8');
209
210
  deps.onProgress?.(`TGE: evaluating candidate ${index}/${totalCandidates} at ${candidatePath}.`);
210
- const candidateResult = await adapter.evaluate(candidateSpec, deps, candidateArtifacts);
211
+ const candidateResult = await evaluate_optimization_adapter(adapter, candidateSpec, deps, candidateArtifacts);
211
212
  deps.onProgress?.(`TGE: candidate ${index}/${totalCandidates} finished with candidate_value=${candidateResult.metrics?.candidateValue ?? 'n/a'} status=${candidateResult.status}.`);
212
213
  summaries.push({
213
214
  index,
@@ -0,0 +1,19 @@
1
+ import type { MessageInput } from '../types.js';
2
+ export interface PaneInitialInput {
3
+ path: string;
4
+ sessionId: string;
5
+ input: MessageInput;
6
+ digest: string;
7
+ }
8
+ /** Capture immutable image bytes before handing the launch to the renderer. */
9
+ export declare function preparePaneInitialInput(raw: MessageInput, sessionId: string, cwd: string): Promise<PaneInitialInput>;
10
+ /** Fresh child launch only: the persisted pane launch spec never carries this path. */
11
+ export declare function loadPaneInitialInput(path: string, sessionId: string): Promise<PaneInitialInput | null>;
12
+ /** Rebind the live child input to its own checkpoint before releasing transport images. */
13
+ export declare function readSavedPaneInitialInput(captured: PaneInitialInput, cwd: string): Promise<MessageInput | null>;
14
+ /** Only a real saved child checkpoint can acknowledge the captured source. */
15
+ export declare function acknowledgePaneInitialInput(captured: PaneInitialInput, cwd: string): Promise<boolean>;
16
+ export declare function paneInitialInputAcknowledged(captured: PaneInitialInput): Promise<boolean>;
17
+ export declare function waitForPaneInitialInput(captured: PaneInitialInput, cancelled: () => boolean, timeoutMs?: number): Promise<boolean>;
18
+ /** Delete only this owned transport copy, after a confirmed refusal or child checkpoint. */
19
+ export declare function cleanupPaneInitialInput(captured: PaneInitialInput): Promise<void>;
@@ -0,0 +1,206 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { constants, lstatSync, realpathSync } from 'node:fs';
3
+ import { mkdir, mkdtemp, open, rm } from 'node:fs/promises';
4
+ import { homedir, tmpdir } from 'node:os';
5
+ import { basename, dirname, join, resolve, sep } from 'node:path';
6
+ import { setTimeout as delay } from 'node:timers/promises';
7
+ import { loadSessionByIdOrName, getProjectHash } from '../session.js';
8
+ import { prepareSessionMedia, readDurableSessionImageSync, SESSION_MEDIA_LIMITS } from '../session_media.js';
9
+ import { isMirrorMediaPath, MIRROR_MEDIA_ROOT } from '../utils/mirror_media.js';
10
+ import { writeFileAtomic } from '../utils/atomic_write.js';
11
+ const MAX_INPUT_BYTES = 64 * 1024;
12
+ const MAX_ATTACHMENTS = 32;
13
+ const MEDIA_TYPES = new Set(['image/png', 'image/jpeg', 'image/gif', 'image/webp']);
14
+ async function boundedRead(path, limit) {
15
+ const handle = await open(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));
16
+ try {
17
+ const stat = await handle.stat();
18
+ if (!stat.isFile() || stat.size > limit)
19
+ throw new Error('Pane input file is unavailable or exceeds its bound.');
20
+ const bytes = Buffer.alloc(limit + 1);
21
+ let size = 0;
22
+ while (size < bytes.length) {
23
+ const result = await handle.read(bytes, size, bytes.length - size, null);
24
+ if (!result.bytesRead)
25
+ break;
26
+ size += result.bytesRead;
27
+ }
28
+ if (size > limit)
29
+ throw new Error('Pane input file exceeds its bound.');
30
+ return bytes.subarray(0, size);
31
+ }
32
+ finally {
33
+ await handle.close();
34
+ }
35
+ }
36
+ function validateInput(value) {
37
+ if (typeof value.text !== 'string' || Buffer.byteLength(value.text) > MAX_INPUT_BYTES
38
+ || !Array.isArray(value.attachments) || value.attachments.length > MAX_ATTACHMENTS) {
39
+ throw new Error('Pane input exceeds its text or attachment bound.');
40
+ }
41
+ if (!value.text.trim() && value.attachments.length === 0)
42
+ throw new Error('Empty pane input has no source to transfer.');
43
+ const ids = new Set();
44
+ for (const image of value.attachments) {
45
+ if (image.kind !== 'image' || !MEDIA_TYPES.has(image.mediaType) || image.stale
46
+ || typeof image.id !== 'string' || !image.id || ids.has(image.id)
47
+ || typeof image.name !== 'string' || image.name.length > 1024
48
+ || !Number.isSafeInteger(image.size) || image.size <= 0 || image.size > SESSION_MEDIA_LIMITS.imageBytes) {
49
+ throw new Error('Unsupported, duplicate or unavailable pane attachment; the draft is retained.');
50
+ }
51
+ ids.add(image.id);
52
+ }
53
+ }
54
+ function digestInput(input) {
55
+ return createHash('sha256').update(JSON.stringify({ text: input.text, attachments: input.attachments.map(image => ({
56
+ id: image.id, name: image.name, kind: image.kind, mediaType: image.mediaType,
57
+ size: image.size, sha256: image.durable?.sha256,
58
+ })) })).digest('hex');
59
+ }
60
+ function checkedPath(path) {
61
+ const root = realpathSync(tmpdir());
62
+ const directory = dirname(resolve(path));
63
+ if (basename(path) !== 'input.json' || dirname(directory) !== root
64
+ || !/^ztc-pane-input-[A-Za-z0-9]{6}$/u.test(basename(directory))
65
+ || realpathSync(directory) !== directory || lstatSync(directory).isSymbolicLink()
66
+ || !lstatSync(directory).isDirectory())
67
+ throw new Error('Invalid pane input handoff path.');
68
+ return join(directory, 'input.json');
69
+ }
70
+ /** Capture immutable image bytes before handing the launch to the renderer. */
71
+ export async function preparePaneInitialInput(raw, sessionId, cwd) {
72
+ validateInput(raw);
73
+ const input = structuredClone(raw);
74
+ delete input.pane_id;
75
+ const directory = await mkdtemp(join(realpathSync(tmpdir()), 'ztc-pane-input-'));
76
+ const path = join(directory, 'input.json');
77
+ let clipboardCopies = null;
78
+ try {
79
+ for (const image of input.attachments) {
80
+ if (image.durable !== undefined || isMirrorMediaPath(image.localPath))
81
+ continue;
82
+ const source = image.localPath ? resolve(image.localPath) : '';
83
+ const clipboardRoot = join(homedir(), '.ztc', 'clipboard');
84
+ if (!source.startsWith(clipboardRoot + sep) || dirname(source) !== clipboardRoot
85
+ || !/^clipboard-\d+-[0-9a-f]{8}\.png$/u.test(basename(source))
86
+ || realpathSync(clipboardRoot) !== clipboardRoot)
87
+ throw new Error('Unsupported pane attachment source; the draft is retained.');
88
+ const bytes = await boundedRead(source, SESSION_MEDIA_LIMITS.imageBytes);
89
+ await mkdir(MIRROR_MEDIA_ROOT, { recursive: true, mode: 0o700 });
90
+ clipboardCopies ??= await mkdtemp(join(MIRROR_MEDIA_ROOT, 'pane-input-'));
91
+ const copied = join(clipboardCopies, randomUUID() + '.png');
92
+ const handle = await open(copied, 'wx', 0o600);
93
+ try {
94
+ await handle.writeFile(bytes);
95
+ }
96
+ finally {
97
+ await handle.close();
98
+ }
99
+ image.localPath = copied;
100
+ }
101
+ const message = { id: 'pane-input-' + sessionId, role: 'user', content: input.text,
102
+ attachments: input.attachments, timestamp: new Date() };
103
+ const prepared = await prepareSessionMedia({ sessionFile: path, sessionId, messages: [message] });
104
+ try {
105
+ input.attachments = prepared.messages[0].attachments ?? [];
106
+ if (input.attachments.some(image => image.durable === undefined))
107
+ throw new Error('Pane image capture was not durable.');
108
+ const now = new Date().toISOString();
109
+ const payload = JSON.stringify({ schemaVersion: 1, metadata: { id: sessionId, projectHash: getProjectHash(cwd),
110
+ cwd, model: '', provider: '', createdAt: now, updatedAt: now, messageCount: 1 }, messages: prepared.messages });
111
+ if (Buffer.byteLength(payload) > SESSION_MEDIA_LIMITS.checkpointBytes)
112
+ throw new Error('Pane input metadata exceeds its bound.');
113
+ const handle = await open(path, 'wx', 0o600);
114
+ try {
115
+ await handle.writeFile(payload);
116
+ }
117
+ finally {
118
+ await handle.close();
119
+ }
120
+ prepared.markCommitted();
121
+ return { path, sessionId, input, digest: digestInput(input) };
122
+ }
123
+ catch (error) {
124
+ await prepared.rollback();
125
+ throw error;
126
+ }
127
+ }
128
+ catch (error) {
129
+ await rm(directory, { recursive: true, force: true });
130
+ throw error;
131
+ }
132
+ finally {
133
+ if (clipboardCopies !== null)
134
+ await rm(clipboardCopies, { recursive: true, force: true });
135
+ }
136
+ }
137
+ /** Fresh child launch only: the persisted pane launch spec never carries this path. */
138
+ export async function loadPaneInitialInput(path, sessionId) {
139
+ const checked = checkedPath(path);
140
+ const payload = JSON.parse((await boundedRead(checked, SESSION_MEDIA_LIMITS.checkpointBytes)).toString('utf8'));
141
+ if (payload.schemaVersion !== 1 || payload.metadata.id !== sessionId || payload.messages.length !== 1
142
+ || payload.messages[0]?.role !== 'user')
143
+ throw new Error('Pane input does not match this fresh child session.');
144
+ const source = payload.messages[0];
145
+ const input = { text: source.content, attachments: source.attachments ?? [] };
146
+ validateInput(input);
147
+ for (const image of input.attachments) {
148
+ if (!image.durable || image.durable.sessionFile !== checked || !readDurableSessionImageSync(image)) {
149
+ throw new Error('Pane image capture is unavailable or belongs to another source.');
150
+ }
151
+ }
152
+ const captured = { path: checked, sessionId, input, digest: digestInput(input) };
153
+ return await paneInitialInputAcknowledged(captured) ? null : captured;
154
+ }
155
+ /** Rebind the live child input to its own checkpoint before releasing transport images. */
156
+ export async function readSavedPaneInitialInput(captured, cwd) {
157
+ const checkpoint = await loadSessionByIdOrName(captured.sessionId, cwd);
158
+ const source = checkpoint?.messages.find(message => message.role === 'user' && message.content === captured.input.text
159
+ && digestInput({ text: message.content, attachments: message.attachments ?? [] }) === captured.digest);
160
+ if (!source)
161
+ return null;
162
+ for (const image of source.attachments ?? []) {
163
+ if (!image.durable || image.durable.sessionFile === captured.path || !readDurableSessionImageSync(image))
164
+ return null;
165
+ }
166
+ return { text: source.content, attachments: source.attachments ?? [] };
167
+ }
168
+ /** Only a real saved child checkpoint can acknowledge the captured source. */
169
+ export async function acknowledgePaneInitialInput(captured, cwd) {
170
+ if (!await readSavedPaneInitialInput(captured, cwd))
171
+ return false;
172
+ await writeFileAtomic(checkedPath(captured.path) + '.accepted', JSON.stringify({ sessionId: captured.sessionId, digest: captured.digest }));
173
+ return true;
174
+ }
175
+ export async function paneInitialInputAcknowledged(captured) {
176
+ try {
177
+ const receipt = JSON.parse((await boundedRead(checkedPath(captured.path) + '.accepted', 1024)).toString('utf8'));
178
+ return receipt.sessionId === captured.sessionId && receipt.digest === captured.digest;
179
+ }
180
+ catch (error) {
181
+ if (error.code === 'ENOENT')
182
+ return false;
183
+ throw error;
184
+ }
185
+ }
186
+ export async function waitForPaneInitialInput(captured, cancelled, timeoutMs = 15000) {
187
+ const deadline = Date.now() + timeoutMs;
188
+ do {
189
+ if (await paneInitialInputAcknowledged(captured))
190
+ return true;
191
+ if (cancelled())
192
+ return false;
193
+ await delay(25);
194
+ } while (Date.now() < deadline);
195
+ return false;
196
+ }
197
+ /** Delete only this owned transport copy, after a confirmed refusal or child checkpoint. */
198
+ export async function cleanupPaneInitialInput(captured) {
199
+ try {
200
+ await rm(dirname(checkedPath(captured.path)), { recursive: true, force: true });
201
+ }
202
+ catch (error) {
203
+ if (error.code !== 'ENOENT')
204
+ throw error;
205
+ }
206
+ }
@@ -0,0 +1,16 @@
1
+ import type { PaneLabels, RustCommand, RustEvent } from '../ui/ratatui/protocol.js';
2
+ export declare function replacePaneLabels(current: PaneLabels, incoming: PaneLabels, ifNewer?: boolean): PaneLabels;
3
+ export declare function readPaneLabels(transport: {
4
+ send(command: RustCommand): boolean;
5
+ on(handler: (event: RustEvent) => void): () => void;
6
+ hasCapability?(name: string): boolean;
7
+ }, paneId: number): Promise<PaneLabels>;
8
+ /** Mirror of the native PaneLabels projection; inferred state stays independent. */
9
+ export declare function displayPaneTitle(inferred: string, labels?: PaneLabels): string;
10
+ export declare function inferAgentPaneTitle(input: {
11
+ cwd: string;
12
+ branch?: string;
13
+ sessionId: string;
14
+ paneId: number;
15
+ task?: string;
16
+ }): string;
@@ -0,0 +1,42 @@
1
+ export function replacePaneLabels(current, incoming, ifNewer = false) {
2
+ const previous = current.updated_at_ms ?? 0;
3
+ const timestamp = incoming.updated_at_ms ?? 0;
4
+ if (ifNewer && previous > 0 && timestamp <= previous)
5
+ return current;
6
+ return { ...incoming, updated_at_ms: ifNewer ? timestamp : Math.max(Date.now(), previous + 1, timestamp + 1) };
7
+ }
8
+ export async function readPaneLabels(transport, paneId) {
9
+ if (transport.hasCapability && !transport.hasCapability('pane_labels_v1')) {
10
+ throw new Error('This native renderer needs an update to support /label.');
11
+ }
12
+ return new Promise((resolve, reject) => {
13
+ const timer = setTimeout(() => { off(); reject(new Error('Pane labels timed out.')); }, 2000);
14
+ const off = transport.on(event => {
15
+ if (event.type !== 'pane_list')
16
+ return;
17
+ clearTimeout(timer);
18
+ off();
19
+ const pane = event.panes.find(pane => pane.id === paneId);
20
+ if (!pane)
21
+ reject(new Error(`Pane ${paneId} does not exist.`));
22
+ else
23
+ resolve({ ...pane.labels });
24
+ });
25
+ if (!transport.send({ type: 'list_panes' })) {
26
+ clearTimeout(timer);
27
+ off();
28
+ reject(new Error('Pane transport is unavailable.'));
29
+ }
30
+ });
31
+ }
32
+ /** Mirror of the native PaneLabels projection; inferred state stays independent. */
33
+ export function displayPaneTitle(inferred, labels = {}) {
34
+ const title = labels.manual_title || [labels.project, labels.task, inferred].filter(Boolean).join(' · ');
35
+ return labels.group ? `[${labels.group}] ${title}` : title;
36
+ }
37
+ export function inferAgentPaneTitle(input) {
38
+ const project = input.cwd.replace(/[\\/]+$/, '').split(/[\\/]/).pop() || input.cwd;
39
+ const task = input.task ? Array.from(input.task.replace(/\s+/g, ' ').trim()).slice(0, 40).join('') : undefined;
40
+ const identity = `${input.paneId}:${input.sessionId.slice(-6)}`;
41
+ return [project, input.branch, task, identity].filter(Boolean).join(' · ');
42
+ }
@@ -1,5 +1,5 @@
1
1
  export declare const PANE_PROVIDERS: readonly ["anthropic", "claude_code", "openai", "codex_app_server", "codex_legacy", "gemini", "deepseek", "fireworks", "modal", "kimi", "kimi_code"];
2
- export type PaneProvider = typeof PANE_PROVIDERS[number];
2
+ export type PaneProvider = string;
3
3
  export interface CatalogModel {
4
4
  id: string;
5
5
  name: string;
@@ -14,13 +14,13 @@ export interface CatalogProviderGroup {
14
14
  models: CatalogModel[];
15
15
  }
16
16
  export declare const MODEL_CATALOG: CatalogProviderGroup[];
17
- export declare function isPaneProvider(value: string | undefined): value is PaneProvider;
17
+ export declare function isPaneProvider(value: string | undefined, route?: 'auto' | 'direct' | 'zrouter'): value is PaneProvider;
18
18
  export declare function getModelDisplayName(modelId: string): string;
19
19
  export declare function getProviderForModel(modelId: string): PaneProvider | undefined;
20
20
  /** Provider-aware membership for duplicate model IDs such as the Codex catalogs. */
21
21
  export declare function isModelAvailableForProvider(provider: string, modelId: string): boolean;
22
22
  export declare function isCatalogModelForProvider(provider: PaneProvider, modelId: string): boolean;
23
- export declare function resolveModelAndProvider(rawModel: string, rawProvider?: string): {
23
+ export declare function resolveModelAndProvider(rawModel: string, rawProvider?: string, route?: 'auto' | 'direct' | 'zrouter'): {
24
24
  model: string;
25
25
  provider?: PaneProvider | string;
26
26
  };
@@ -1,3 +1,4 @@
1
+ import { configStore } from '../config.js';
1
2
  import { GPT_6_API_EFFORTS, getKimiModelInfo, getSupportedCodexReasoningEfforts, KIMI_CODE_MODEL_IDS, KIMI_MODEL_IDS, KIMI_MODEL_INFO, OFFICIAL_CODEX_MODEL_IDS, OFFICIAL_CODEX_MODEL_INFO, } from '../utils/models.js';
2
3
  import { DEEPSEEK_FLASH_EFFORTS, DEEPSEEK_FLASH_MODEL, MODAL_DEEPSEEK_FLASH_EFFORTS, MODAL_DEEPSEEK_FLASH_MODEL } from '../utils/deepseek.js';
3
4
  import { FIREWORKS_CHAT_MODELS, FIREWORKS_FUNDED_MODEL } from '../utils/fireworks.js';
@@ -183,8 +184,8 @@ function getCodexModelAliases(id) {
183
184
  return [];
184
185
  }
185
186
  }
186
- export function isPaneProvider(value) {
187
- return !!value && PROVIDER_SET.has(value);
187
+ export function isPaneProvider(value, route) {
188
+ return !!value && (PROVIDER_SET.has(value) || ((route === 'zrouter' || route === 'auto') && /^[a-z][a-z0-9_-]{0,127}$/.test(value)));
188
189
  }
189
190
  export function getModelDisplayName(modelId) {
190
191
  return MODEL_BY_ID.get(modelId)?.name
@@ -203,8 +204,17 @@ export function isModelAvailableForProvider(provider, modelId) {
203
204
  export function isCatalogModelForProvider(provider, modelId) {
204
205
  return MODEL_CATALOG.some((group) => group.provider === provider && group.models.some((model) => model.id === modelId));
205
206
  }
206
- export function resolveModelAndProvider(rawModel, rawProvider) {
207
+ export function resolveModelAndProvider(rawModel, rawProvider, route) {
207
208
  const trimmed = rawModel.trim();
209
+ if (route === 'zrouter' && rawProvider)
210
+ return { model: trimmed, provider: rawProvider };
211
+ if (route === 'zrouter') {
212
+ const matches = configStore.getRouterCatalog()?.models.filter(row => row.id === trimmed && row.capabilities?.chat);
213
+ if (matches?.length === 1)
214
+ return { model: trimmed, provider: matches[0].owned_by };
215
+ if (matches && matches.length > 1)
216
+ throw new Error('Ambiguous Router model. Specify --provider.');
217
+ }
208
218
  const normalized = normalizeLookupValue(trimmed);
209
219
  const providerNormalized = (rawProvider || '').toLowerCase();
210
220
  // A custom OpenAI-compatible endpoint names its own models, so the id is a
@@ -289,5 +299,19 @@ function getCodexLegacyModelAliases(id) {
289
299
  }
290
300
  }
291
301
  export function getModelCatalogPayload() {
292
- return { providers: MODEL_CATALOG };
302
+ const catalog = configStore.getRoutedModelCatalog();
303
+ if (catalog?.version !== 1)
304
+ return { providers: MODEL_CATALOG };
305
+ const groups = new Map();
306
+ for (const row of catalog.models) {
307
+ if (!row.capabilities?.chat)
308
+ continue;
309
+ const group = groups.get(row.owned_by) ?? { provider: row.owned_by, label: row.provider_display_name || row.owned_by, models: [] };
310
+ group.models.push({ id: row.id, name: row.display_name || row.id,
311
+ description: [row.capabilities.tools === false ? 'Chat only' : '', row.available === false ? 'Access unavailable' : ''].filter(Boolean).join(' · '),
312
+ supportedReasoningEfforts: row.capabilities.reasoning?.choices,
313
+ defaultReasoningEffort: row.capabilities.reasoning?.default });
314
+ groups.set(row.owned_by, group);
315
+ }
316
+ return { providers: [...groups.values()] };
293
317
  }
@@ -26,15 +26,19 @@ function inferZtcLaunchSpec(pane) {
26
26
  }
27
27
  if (!sessionId)
28
28
  return undefined;
29
+ const route = parseFlagValue(args, '--auth-mode');
30
+ const authMode = route === 'zrouter' || route === 'direct' || route === 'auto' ? route : undefined;
29
31
  const explicitProvider = parseFlagValue(args, '--provider');
30
32
  const explicitModel = parseFlagValue(args, '--model');
31
- const resolved = explicitModel ? resolveModelAndProvider(explicitModel, explicitProvider) : { model: undefined, provider: explicitProvider };
33
+ const resolved = explicitModel ? resolveModelAndProvider(explicitModel, explicitProvider, authMode) : { model: undefined, provider: explicitProvider };
32
34
  return {
33
35
  kind: 'ztc',
36
+ authMode,
37
+ routerOrigin: parseFlagValue(args, '--router-url'),
34
38
  session: { mode: sessionMode, id: sessionId },
35
39
  cwd: pane.cwd,
36
40
  title: pane.title,
37
- providerOverride: isPaneProvider(resolved.provider) ? resolved.provider : undefined,
41
+ providerOverride: isPaneProvider(resolved.provider, authMode) ? resolved.provider : undefined,
38
42
  modelOverride: resolved.model,
39
43
  };
40
44
  }
@@ -13,6 +13,8 @@ export type PaneSessionSelector = {
13
13
  id: string;
14
14
  };
15
15
  export interface ZtcPaneLaunchSpec {
16
+ authMode?: 'auto' | 'direct' | 'zrouter';
17
+ routerOrigin?: string;
16
18
  kind: 'ztc';
17
19
  session: PaneSessionSelector;
18
20
  cwd?: string;
@@ -30,6 +32,7 @@ export interface ProcessPaneLaunchSpec {
30
32
  paneType: 'process' | 'command';
31
33
  }
32
34
  export interface DocPaneLaunchSpec {
35
+ commandPaneId?: string;
33
36
  kind: 'doc' | 'feed';
34
37
  title: string;
35
38
  content?: string;
@@ -1,7 +1,10 @@
1
+ import { isLocalSubscriptionProvider } from '../agent/backends/provider_ids.js';
2
+ import { configStore } from '../config.js';
1
3
  import { existsSync } from 'fs';
2
4
  import { dirname, join } from 'path';
3
5
  import { generateSessionId } from '../session.js';
4
6
  import { activeProfile } from '../config/profiles.js';
7
+ import { resolveOwnedCliLaunch } from '../desktop/cli_launch.js';
5
8
  const CHILD_ZTC_SCRIPT_RE = /(?:^|[\\/])cli_(?:main|ratatui)\.(?:js|ts)$/;
6
9
  function filterChildZtcArgs(args) {
7
10
  const skipFlags = new Set([
@@ -21,12 +24,17 @@ function filterChildZtcArgs(args) {
21
24
  '--voyager',
22
25
  ]);
23
26
  const skipWithArg = new Set([
27
+ '--layout',
28
+ '--layout-refresh-ms',
29
+ '--layout-workers',
24
30
  '--num-zergs',
25
31
  '--mirror-port',
26
32
  '--resume',
27
33
  '--continue',
28
34
  '-c',
29
35
  '--session-id',
36
+ '--auth-mode',
37
+ '--router-url',
30
38
  '--provider',
31
39
  '--model',
32
40
  '--profile',
@@ -77,10 +85,19 @@ export function buildZtcPaneLaunchCommand(spec, argv = process.argv) {
77
85
  childArgs.push('--session-id', spec.session.id || generateSessionId());
78
86
  }
79
87
  childArgs.push('--pane');
88
+ const local = isLocalSubscriptionProvider(spec.providerOverride ?? configStore.getProvider());
89
+ const authMode = local ? 'direct' : spec.authMode ?? configStore.getChildAuthMode();
90
+ childArgs.push('--auth-mode', authMode);
91
+ const origin = spec.routerOrigin ?? configStore.get().zergProxyUrl;
92
+ if (authMode !== 'direct' && origin)
93
+ childArgs.push('--router-url', origin);
80
94
  if (spec.providerOverride)
81
95
  childArgs.push('--provider', spec.providerOverride);
82
96
  if (spec.modelOverride)
83
97
  childArgs.push('--model', spec.modelOverride);
98
+ const owned = resolveOwnedCliLaunch(childArgs);
99
+ if (owned)
100
+ return { command: owned.command, args: owned.args, cwd: spec.cwd, childSessionId: spec.session.id };
84
101
  if (scriptPath.endsWith('.ts')) {
85
102
  const tsxBin = join(dirname(dirname(scriptPath)), 'node_modules', '.bin', process.platform === 'win32' ? 'tsx.cmd' : 'tsx');
86
103
  if (existsSync(tsxBin)) {
@@ -113,6 +130,8 @@ export function createZtcLaunchSpec(options) {
113
130
  session: { mode: sessionMode, id: sessionId },
114
131
  cwd: options?.cwd,
115
132
  title: options?.title || 'ZTC',
133
+ authMode: isLocalSubscriptionProvider(options?.providerOverride ?? configStore.getProvider()) ? 'direct' : configStore.getChildAuthMode(),
134
+ routerOrigin: configStore.get().zergProxyUrl,
116
135
  providerOverride: options?.providerOverride,
117
136
  modelOverride: options?.modelOverride,
118
137
  extraArgs: options?.extraArgs,
@@ -5,3 +5,5 @@ export { compile_optimization_spec } from '../optimize/planner.js';
5
5
  export { resolve_path_reference, resolve_path_within_cwd } from '../optimize/paths.js';
6
6
  export type { OptimizationPlanArtifacts, OptimizationSpec } from '../optimize/types.js';
7
7
  export type { OptimizationStrategyVariant } from '../optimize/arl.js';
8
+ export { captureOptimizationMeasurement, describeOptimizationResult, assessOptimizationResult, compareOptimizationResults } from '../optimize/measurements.js';
9
+ export type { OptimizationMeasurementSource, OptimizationMeasurementDeclaration, OptimizationMeasurementReport } from '../optimize/measurements.js';
@@ -2,3 +2,4 @@ export { run_shell_with_timeout, sh_quote } from '../optimize/adapters/runtime.j
2
2
  export { execute_optimization_spec } from '../optimize/executor.js';
3
3
  export { compile_optimization_spec } from '../optimize/planner.js';
4
4
  export { resolve_path_reference, resolve_path_within_cwd } from '../optimize/paths.js';
5
+ export { captureOptimizationMeasurement, describeOptimizationResult, assessOptimizationResult, compareOptimizationResults } from '../optimize/measurements.js';
@@ -4,7 +4,9 @@ export type { EmbeddedRuntimeContext, EmbeddedRuntimeSession, } from '../embedde
4
4
  export type { EmbeddedBackendType, EmbeddedDocPaneDefinition, EmbeddedEmulatorDefinition, EmbeddedFeedPaneDefinition, EmbeddedPaneDefinition, EmbeddedProcessPaneDefinition, EmbeddedRuntimeDefinition, EmbeddedSystemDefinition, EmbeddedSystemSummary, EmbeddedWorkflowDefinition, LoadedEmbeddedSystem, } from '../embedded/types.js';
5
5
  export type { Command, CommandContext, ShellResult } from '../agent/commands/types.js';
6
6
  export type { CommandJobView, MirrorViewState, ViewPlugin, ViewPluginContext } from '../web/view_plugin.js';
7
+ export type { CommandPaneView } from '../agent/runtime/command_panes.js';
7
8
  export type { MirrorEvent, MirrorPaneRecord } from '../web/mirror_stream.js';
9
+ export type { AttentionItem, AttentionKind, AttentionSnapshot } from '../attention/queue.js';
8
10
  export { COLONY_WORKTREE_MARKER, generateSessionId, getMuxStatePathForCwd, getSessionDirForCwd, getSessionPathForCwd, loadSessionById, saveSession, } from '../session.js';
9
11
  export type { PaneCommandTransport } from '../ui/ratatui/pane_relay.js';
10
12
  export type { RustCommand, RustEvent, MuxSessionState, PaneInfo } from '../ui/ratatui/protocol.js';
@@ -1,2 +1,7 @@
1
1
  export { SIMULATION_PLUGIN_API_VERSION } from './simulation_contract.js';
2
- export type { SimulationActorSeedV1, SimulationActorSnapshotV1, SimulationCheckpointExtensionV1, SimulationCheckpointRefV1, SimulationCheckpointRequestV1, SimulationCompatibilityV1, SimulationCreateSessionRequestV1, SimulationDocumentNotificationV1, SimulationDocumentSnapshotV1, SimulationDocumentWriteV1, SimulationDriverAuthorityV1, SimulationDriverContextV1, SimulationDriverRegistrationV1, SimulationDriverV1, SimulationHostCapabilitiesV1, SimulationHostV1, SimulationInferenceContextV1, SimulationInferenceRequestV1, SimulationInferenceResultV1, SimulationJsonObjectV1, SimulationJsonPrimitiveV1, SimulationJsonValueV1, SimulationLifecycleNotificationV1, SimulationLoadSessionRequestV1, SimulationNotificationV1, SimulationPluginActivationContextV1, SimulationPluginDataWriteV1, SimulationProgressNotificationV1, SimulationRuntimeOptionsV1, SimulationSessionRefV1, SimulationSessionSnapshotV1, SimulationSessionStatusV1, SimulationSessionV1, SimulationStartSessionRequestV1, SimulationTelemetryNotificationV1, SimulationTransitionBatchV1, SimulationTransitionOperationV1, SimulationTransitionResultV1, SimulationWorldPatchV1, SimulationWorldWriteV1, } from './simulation_contract.js';
2
+ export type * from './simulation_interventions.js';
3
+ export type { SimulationActorSeedV1, SimulationActorSnapshotV1, SimulationCheckpointExtensionV1, SimulationCheckpointRefV1, SimulationCheckpointRequestV1, SimulationCompatibilityV1, SimulationCreateSessionRequestV1, SimulationDocumentNotificationV1, SimulationDocumentSnapshotV1, SimulationDocumentWriteV1, SimulationDefinitionV1, SimulationDriverAuthorityV1, SimulationDriverContextV1, SimulationDriverRegistrationV1, SimulationDriverV1, SimulationHostCapabilitiesV1, SimulationHostV1, SimulationInferenceContextV1, SimulationInferenceRoutingV1, SimulationInferenceRequestV1, SimulationInferenceResultV1, SimulationAgentBeliefV1, SimulationAgentGoalV1, SimulationAgentIntentV1, SimulationAgentMemoryV1, SimulationAgentRelationshipV1, SimulationAgentUpdateProposalV1, SimulationCharacterActionMotivationV1, SimulationCharacterActionProposalV1, SimulationCharacterProposalV1, SimulationDynamicIntentActivityV1, SimulationDynamicActivityV1, SimulationDomainActionProposalV1, SimulationDynamicAgentViewV1, SimulationDynamicAuditEntryV1, SimulationNativeCallV1, SimulationNativeGmCallV1, SimulationNativeParticipantCallV1, SimulationInferenceSettlementV1, SimulationDynamicDomainObjectLinkV1, SimulationDynamicDomainObjectV1, SimulationDynamicDomainObjectViewV1, SimulationDynamicHistoryEntryV1, SimulationDynamicInferenceCallV1, SimulationDynamicInferenceV1, SimulationDynamicKnowledgeViewV1, SimulationDynamicMechanicDefinitionV1, SimulationDynamicParameterDefinitionV1, SimulationDynamicPlayerActionV1, SimulationDynamicPlayFrameV1, SimulationDynamicResourceDefinitionV1, SimulationDynamicRunStatusV1, SimulationDynamicStateCommitV1, SimulationDynamicStateV1, SimulationDynamicTimelineKindV1, SimulationDynamicObjectVisibilityV1, SimulationDynamicWorldEffectV1, SimulationDynamicWorldEffectViewV1, SimulationDynamicWorldStateV1, SimulationGmProposalV1, SimulationKnowledgeVisibilityV1, SimulationPersistentAgentStateV1, SimulationJsonObjectV1, SimulationJsonPrimitiveV1, SimulationJsonValueV1, SimulationLifecycleNotificationV1, SimulationLoadSessionRequestV1, SimulationNotificationV1, SimulationPluginActivationContextV1, SimulationPluginDataWriteV1, SimulationPlayerCommandResultV1, SimulationPlayerCommandV1, SimulationProgressNotificationV1, SimulationRuntimeOptionsV1, SimulationSessionRefV1, SimulationSessionSnapshotV1, SimulationSessionStatusV1, SimulationSessionV1, SimulationStartSessionRequestV1, SimulationTelemetryNotificationV1, SimulationTransitionBatchV1, SimulationTransitionOperationV1, SimulationTransitionResultV1, SimulationWorldPatchV1, SimulationWorldWriteV1, SimulationRouterAuditRouteV1, SimulationRouterModelV1, SimulationServingRouteV1, } from './simulation_contract.js';
4
+ export type * from './simulation_meetings.js';
5
+ export type { SimulationDocumentProvenanceV1, SimulationDocumentPolicyV1 } from './simulation_documents.js';
6
+ export type { DynamicInitialization, DynamicInitializationV1, DynamicInitializationV2, DynamicSelectionV1, StorytellerPersonalityV1, StorytellerDecisionV1, StorytellerReceiptV1, StorytellerObservationV1, StorytellerSetbackV2, StorytellerOpportunityV2, StorytellerRecoveryV2 } from './simulation_storyteller.js';
7
+ export type { StoryEvidenceV1, StoryReviewDecisionV1, StoryReviewReceiptV1, StoryEpisodeV1, StoryReviewViewV1 } from './simulation_story_review.js';