@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
@@ -16,6 +16,8 @@ interface MessageListProps {
16
16
  */
17
17
  externalTranscript?: boolean;
18
18
  showThinking?: boolean;
19
+ showTurnMetadata?: boolean;
20
+ cols?: number;
19
21
  }
20
22
  export declare const MessageList: React.FC<MessageListProps>;
21
23
  export default MessageList;
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useRef, useMemo } from 'react';
3
3
  import { InkNode } from '../ui/ink/index.js';
4
4
  import { buildMessageListView } from '../ui/views/message_list.js';
5
- export const MessageList = ({ messages, height, maxMessages = 50, debug = false, expandToolOutputs = false, scrollback = false, externalTranscript = false, showThinking = true, }) => {
5
+ export const MessageList = ({ messages, height, maxMessages = 50, debug = false, expandToolOutputs = false, scrollback = false, externalTranscript = false, showThinking = true, showTurnMetadata = true, cols = process.stdout.columns || 80, }) => {
6
6
  // In scrollback mode, track which messages have been rendered to avoid duplication
7
7
  const renderedIdsRef = useRef(new Set());
8
8
  // Filter to only new, complete messages in scrollback mode
@@ -46,6 +46,8 @@ export const MessageList = ({ messages, height, maxMessages = 50, debug = false,
46
46
  scrollback,
47
47
  externalTranscript,
48
48
  showThinking,
49
+ showTurnMetadata,
50
+ cols,
49
51
  });
50
52
  return _jsx(InkNode, { node: node });
51
53
  };
@@ -3,6 +3,8 @@ import { Message } from '../types.js';
3
3
  interface SingleMessageProps {
4
4
  message: Message;
5
5
  expandToolOutputs?: boolean;
6
+ showTurnMetadata?: boolean;
7
+ cols?: number;
6
8
  }
7
9
  export declare const SingleMessage: React.FC<SingleMessageProps>;
8
10
  export default SingleMessage;
@@ -1,5 +1,7 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Box, Text } from 'ink';
3
+ import { messageHeaderSuffix } from '../ui/core/turn_metadata.js';
4
+ import { displayWidth } from '../ui/core/text_width.js';
3
5
  // Box-drawing characters for tables
4
6
  const BOX = {
5
7
  topLeft: '╭',
@@ -152,7 +154,7 @@ const ContentRenderer = ({ content, diffLines, isToolTrace }) => {
152
154
  return _jsx(Text, { children: line }, lineIdx);
153
155
  }) }, segIdx))) }));
154
156
  };
155
- export const SingleMessage = ({ message, expandToolOutputs = false }) => {
157
+ export const SingleMessage = ({ message, expandToolOutputs = false, showTurnMetadata = true, cols = process.stdout.columns || 80, }) => {
156
158
  const config = roleConfigs[message.role] || roleConfigs.system;
157
159
  const metadata = message.metadata;
158
160
  const toolOutput = metadata?.toolOutput;
@@ -173,6 +175,6 @@ export const SingleMessage = ({ message, expandToolOutputs = false }) => {
173
175
  if (isToolTrace) {
174
176
  return (_jsx(Box, { flexDirection: "column", marginY: 0, paddingX: 1, children: _jsx(Box, { flexDirection: "column", marginLeft: 1, children: _jsx(ContentRenderer, { content: content, diffLines: diffLines, isToolTrace: true }) }) }));
175
177
  }
176
- return (_jsxs(Box, { flexDirection: "column", marginY: 1, paddingX: 1, children: [_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: config.color, bold: true, children: [config.icon, " ", config.label] }), _jsxs(Text, { color: "gray", dimColor: true, children: [" \u2022 ", formatTime(message.timestamp)] }), message.isStreaming && _jsx(Text, { color: "yellow", bold: true, children: " \u258C" })] }), _jsx(Box, { flexDirection: "column", marginLeft: 2, children: _jsx(ContentRenderer, { content: content, diffLines: diffLines, isToolTrace: false }) })] }));
178
+ return (_jsxs(Box, { flexDirection: "column", marginY: 1, paddingX: 1, children: [_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: config.color, bold: true, children: [config.icon, " ", config.label] }), _jsxs(Text, { color: "gray", dimColor: true, children: [" \u2022 ", formatTime(message.timestamp), messageHeaderSuffix(message, cols, displayWidth(`${config.icon} ${config.label} • ${formatTime(message.timestamp)}${message.isStreaming ? ' ▌' : ''}`), showTurnMetadata)] }), message.isStreaming && _jsx(Text, { color: "yellow", bold: true, children: " \u258C" })] }), _jsx(Box, { flexDirection: "column", marginLeft: 2, children: _jsx(ContentRenderer, { content: content, diffLines: diffLines, isToolTrace: false }) })] }));
177
179
  };
178
180
  export default SingleMessage;
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { AgentState } from '../types.js';
2
+ import type { AgentState, InputMode } from '../types.js';
3
3
  import { ContextStatus } from '../utils/context.js';
4
4
  import type { AgentMode } from '../app/modes.js';
5
5
  import type { CodexReasoningEffort } from '../config/types.js';
@@ -7,6 +7,7 @@ import type { StatusLineSettings } from '../ui/status_line_config.js';
7
7
  interface StatusBarProps {
8
8
  state: AgentState;
9
9
  sessionId?: string;
10
+ sessionName?: string;
10
11
  version?: string;
11
12
  connectionStatus?: 'connected' | 'disconnected' | 'connecting';
12
13
  contextLength?: number;
@@ -17,7 +18,8 @@ interface StatusBarProps {
17
18
  emulationId?: string;
18
19
  /** Effort in effect for the active model; undefined follows the provider. */
19
20
  effort?: CodexReasoningEffort;
20
- inputMode?: 'queue' | 'interrupt';
21
+ inputMode?: InputMode;
22
+ escapeHint?: string;
21
23
  toast?: string | null;
22
24
  spinnerLabel?: string | null;
23
25
  debug?: boolean;
@@ -1,10 +1,11 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { InkNode } from '../ui/ink/index.js';
3
3
  import { buildStatusBarView } from '../ui/views/status_bar.js';
4
- export const StatusBar = ({ state, sessionId, version = '0.1.0', connectionStatus = 'connected', contextLength, contextEstimated, contextStatus, provider, model, emulationId, effort, inputMode, toast, spinnerLabel, debug = false, mode, cols, statusLine, }) => {
4
+ export const StatusBar = ({ state, sessionId, sessionName, version = '0.1.0', connectionStatus = 'connected', contextLength, contextEstimated, contextStatus, provider, model, emulationId, effort, inputMode = 'steer', escapeHint, toast, spinnerLabel, debug = false, mode, cols, statusLine, }) => {
5
5
  const node = buildStatusBarView({
6
6
  state,
7
7
  sessionId,
8
+ sessionName,
8
9
  version,
9
10
  connectionStatus,
10
11
  contextLength,
@@ -15,6 +16,7 @@ export const StatusBar = ({ state, sessionId, version = '0.1.0', connectionStatu
15
16
  emulationId,
16
17
  effort,
17
18
  inputMode,
19
+ escapeHint,
18
20
  toast,
19
21
  spinnerLabel,
20
22
  debug,
@@ -57,6 +57,9 @@ export function resolveConductorWorkspace(branch, env = process.env) {
57
57
  }
58
58
  export function buildConductorBranchLaunch(branch, ztcArgs, options = {}) {
59
59
  const env = options.env || process.env;
60
+ if (env.ZTC_DESKTOP_RUNTIME_MANIFEST) {
61
+ throw new Error('The bundled ZTC runtime does not support --branch; use a source or npm CLI to run branch-local code.');
62
+ }
60
63
  const callerCwd = options.callerCwd || process.cwd();
61
64
  const workspacePath = resolveConductorWorkspace(branch, env);
62
65
  if (!existsSync(workspacePath) || !statSync(workspacePath).isDirectory()) {
@@ -22,7 +22,7 @@ export declare const MIN_API_RETRY_ATTEMPTS = 1;
22
22
  * How many times to retry, and how long to wait, are the user's decisions. A
23
23
  * long outage may be worth riding out with more attempts than a fixed menu
24
24
  * offers, and a local endpoint may want a 10 ms backoff where a hosted one wants
25
- * seconds. Nothing here caps that.
25
+ * seconds. The configurable delay cap limits each wait, not the attempt count.
26
26
  */
27
27
  export declare const MAX_API_RETRY_ATTEMPTS: number;
28
28
  export declare const MIN_API_RETRY_BASE_DELAY_MS = 0;
@@ -39,6 +39,11 @@ export declare const DEFAULT_API_RETRY: Required<ApiRetrySettings>;
39
39
  export declare function parseApiRetryAttempts(value: unknown): number | null;
40
40
  export declare function parseApiRetryBaseDelayMs(value: unknown): number | null;
41
41
  export declare function parseApiRetryTimeoutMs(value: unknown): number | null;
42
+ export declare function parseApiRetryMaxDelayMs(value: unknown): number | null;
43
+ /** null is continuous recovery; undefined denotes an invalid setting. */
44
+ export declare function parseApiRecoveryWindowMs(value: unknown): number | null | undefined;
45
+ /** Capped equal jitter avoids synchronized retry waves and timer overflow. */
46
+ export declare function apiRetryDelayMs(attempt: number, policy: Required<ApiRetrySettings>): number;
42
47
  /**
43
48
  * Fill in defaults for missing or unusable fields.
44
49
  *
@@ -21,7 +21,7 @@ export const MIN_API_RETRY_ATTEMPTS = 1;
21
21
  * How many times to retry, and how long to wait, are the user's decisions. A
22
22
  * long outage may be worth riding out with more attempts than a fixed menu
23
23
  * offers, and a local endpoint may want a 10 ms backoff where a hosted one wants
24
- * seconds. Nothing here caps that.
24
+ * seconds. The configurable delay cap limits each wait, not the attempt count.
25
25
  */
26
26
  export const MAX_API_RETRY_ATTEMPTS = Number.MAX_SAFE_INTEGER;
27
27
  export const MIN_API_RETRY_BASE_DELAY_MS = 0;
@@ -38,6 +38,8 @@ export const DEFAULT_API_RETRY = {
38
38
  maxAttempts: 3,
39
39
  baseDelayMs: 2_000,
40
40
  requestTimeoutMs: 120_000,
41
+ maxDelayMs: 30_000,
42
+ recoveryWindowMs: null,
41
43
  };
42
44
  function parseBoundedInteger(value, min, max) {
43
45
  if (value === undefined || value === null || value === '')
@@ -56,6 +58,20 @@ export function parseApiRetryBaseDelayMs(value) {
56
58
  export function parseApiRetryTimeoutMs(value) {
57
59
  return parseBoundedInteger(value, MIN_API_RETRY_TIMEOUT_MS, MAX_API_RETRY_TIMEOUT_MS);
58
60
  }
61
+ export function parseApiRetryMaxDelayMs(value) {
62
+ return parseBoundedInteger(value, 1, MAX_TIMER_DELAY_MS);
63
+ }
64
+ /** null is continuous recovery; undefined denotes an invalid setting. */
65
+ export function parseApiRecoveryWindowMs(value) {
66
+ if (value === null || value === 'continuous')
67
+ return null;
68
+ return parseBoundedInteger(value, 0, Number.MAX_SAFE_INTEGER) ?? undefined;
69
+ }
70
+ /** Capped equal jitter avoids synchronized retry waves and timer overflow. */
71
+ export function apiRetryDelayMs(attempt, policy) {
72
+ const cap = Math.min(policy.maxDelayMs, policy.baseDelayMs * 2 ** Math.min(attempt - 1, 1023));
73
+ return Math.floor(cap * (0.5 + Math.random() * 0.5));
74
+ }
59
75
  /**
60
76
  * Fill in defaults for missing or unusable fields.
61
77
  *
@@ -69,5 +85,7 @@ export function resolveApiRetrySettings(config) {
69
85
  baseDelayMs: parseApiRetryBaseDelayMs(config.apiRetry?.baseDelayMs) ?? DEFAULT_API_RETRY.baseDelayMs,
70
86
  requestTimeoutMs: parseApiRetryTimeoutMs(config.apiRetry?.requestTimeoutMs)
71
87
  ?? DEFAULT_API_RETRY.requestTimeoutMs,
88
+ maxDelayMs: parseApiRetryMaxDelayMs(config.apiRetry?.maxDelayMs) ?? DEFAULT_API_RETRY.maxDelayMs,
89
+ recoveryWindowMs: parseApiRecoveryWindowMs(config.apiRetry?.recoveryWindowMs) ?? DEFAULT_API_RETRY.recoveryWindowMs,
72
90
  };
73
91
  }
@@ -1,3 +1,4 @@
1
+ import type { ReasoningWireSurface } from '@zerg/model-contracts';
1
2
  import type { CodexReasoningEffort, ZTCConfig } from './types.js';
2
3
  export declare const DEFAULT_OPENAI_MODEL = "gpt-5.4-nano";
3
4
  export declare const DEFAULT_CODEX_MODEL = "gpt-5.6-sol";
@@ -14,7 +15,7 @@ export declare const DEFAULT_CLARIFAI_MODEL = "https://clarifai.com/openai/chat-
14
15
  * undefined (use the provider default). Used both when building an agent
15
16
  * (factory) and to display the active effort in the model picker.
16
17
  */
17
- export declare function resolveCodexEffort(config: ZTCConfig, provider?: string, model?: string): CodexReasoningEffort | undefined;
18
+ export declare function resolveCodexEffort(config: ZTCConfig, provider?: string, model?: string, contract?: ReasoningWireSurface | import('../utils/router_catalog.js').RouterModelCapabilities): CodexReasoningEffort | undefined;
18
19
  /**
19
20
  * The highest-priority saved effort when the active model rejects it, so the
20
21
  * UI can say the choice is not applied instead of silently falling back.
@@ -20,14 +20,19 @@ export const DEFAULT_CLARIFAI_MODEL = 'https://clarifai.com/openai/chat-completi
20
20
  * undefined (use the provider default). Used both when building an agent
21
21
  * (factory) and to display the active effort in the model picker.
22
22
  */
23
- export function resolveCodexEffort(config, provider, model) {
23
+ export function resolveCodexEffort(config, provider, model, contract = config.authMode === 'zrouter' || provider === 'openai_compatible' ? 'chat_tools' : 'native_api') {
24
24
  const candidates = [
25
25
  model ? config.codexEffortByModel?.[model] : undefined,
26
26
  provider ? config.codexEffortByProvider?.[provider] : undefined,
27
27
  config.codexEffort,
28
28
  ];
29
29
  for (const candidate of candidates) {
30
- if (candidate && isCodexReasoningEffortSupported(provider, model, candidate))
30
+ if (!candidate)
31
+ continue;
32
+ const supported = typeof contract === 'string'
33
+ ? isCodexReasoningEffortSupported(provider, model, candidate, contract)
34
+ : contract.reasoning?.choices.includes(candidate);
35
+ if (candidate && supported)
31
36
  return candidate;
32
37
  }
33
38
  return undefined;
@@ -143,6 +148,8 @@ export function getDefaultApiKeyForProvider(provider) {
143
148
  return process.env.DEEPSEEK_API_KEY;
144
149
  case 'modal':
145
150
  return undefined; // Modal credentials belong to the Router platform.
151
+ case 'fireworks':
152
+ return process.env.FIREWORKS_API_KEY;
146
153
  default:
147
154
  return (process.env.ANTHROPIC_API_KEY
148
155
  || process.env.OPENAI_API_KEY
@@ -7,5 +7,6 @@ export declare const MIN_TOOL_OUTPUT_LINES = 0;
7
7
  */
8
8
  export declare const MAX_TOOL_OUTPUT_LINES: number;
9
9
  export declare const DEFAULT_MESSAGE_DISPLAY: Required<MessageDisplaySettings>;
10
+ export declare function parseProseReadingRate(value: unknown): number | null | undefined;
10
11
  export declare function parseToolOutputLines(value: unknown): number | null;
11
12
  export declare function resolveMessageDisplaySettings(config: Pick<ZTCConfig, 'messageDisplay'>): Required<MessageDisplaySettings>;
@@ -9,9 +9,20 @@ export const DEFAULT_MESSAGE_DISPLAY = {
9
9
  toolOutputLines: 2,
10
10
  collapseToolCalls: true,
11
11
  groupToolCalls: true,
12
- showThinking: true,
12
+ showThinking: false,
13
+ showTurnMetadata: true,
13
14
  smoothStreaming: true,
15
+ proseReadingRateWordsPerSecond: null,
14
16
  };
17
+ export function parseProseReadingRate(value) {
18
+ if (value === null || (typeof value === 'string' && value.trim().toLowerCase() === 'off'))
19
+ return null;
20
+ if ((typeof value !== 'number' && typeof value !== 'string')
21
+ || (typeof value === 'string' && value.trim() === ''))
22
+ return undefined;
23
+ const rate = Number(value);
24
+ return Number.isFinite(rate) && rate > 0 ? rate : undefined;
25
+ }
15
26
  export function parseToolOutputLines(value) {
16
27
  const parsed = Number(value);
17
28
  if (!Number.isSafeInteger(parsed)
@@ -22,11 +33,15 @@ export function parseToolOutputLines(value) {
22
33
  }
23
34
  export function resolveMessageDisplaySettings(config) {
24
35
  const configuredLines = parseToolOutputLines(config.messageDisplay?.toolOutputLines);
36
+ const readingRate = parseProseReadingRate(config.messageDisplay?.proseReadingRateWordsPerSecond);
25
37
  return {
26
38
  toolOutputLines: configuredLines ?? DEFAULT_MESSAGE_DISPLAY.toolOutputLines,
27
39
  collapseToolCalls: config.messageDisplay?.collapseToolCalls !== false,
28
40
  groupToolCalls: config.messageDisplay?.groupToolCalls !== false,
29
- showThinking: config.messageDisplay?.showThinking !== false,
41
+ showThinking: config.messageDisplay?.showThinking ?? DEFAULT_MESSAGE_DISPLAY.showThinking,
42
+ showTurnMetadata: config.messageDisplay?.showTurnMetadata !== false,
30
43
  smoothStreaming: config.messageDisplay?.smoothStreaming !== false,
44
+ proseReadingRateWordsPerSecond: readingRate === undefined
45
+ ? DEFAULT_MESSAGE_DISPLAY.proseReadingRateWordsPerSecond : readingRate,
31
46
  };
32
47
  }
@@ -0,0 +1,21 @@
1
+ import { type SandboxBackendStatus } from '../utils/sandbox.js';
2
+ import type { ZTCConfig, ZTCPermissionProfile, ZTCToolCapability } from './types.js';
3
+ export declare const PERMISSION_CAPABILITIES: readonly ["file_read", "file_write", "shell_exec", "network", "screen_capture", "computer_control", "ml_inference"];
4
+ export interface PermissionPolicySnapshot {
5
+ id: string;
6
+ capabilities: Record<ZTCToolCapability, boolean>;
7
+ approvalRequiredCapabilities: ZTCToolCapability[];
8
+ commandSandbox: SandboxBackendStatus & {
9
+ requested: boolean;
10
+ required: boolean;
11
+ };
12
+ scope: string;
13
+ }
14
+ export declare function resolvePermissionProfile(config: ZTCConfig): ZTCPermissionProfile;
15
+ export declare function projectPermissionPolicy(config: ZTCConfig): PermissionPolicySnapshot;
16
+ /** Native provider-owned tools do not pass through ZTC's capability/approval boundary. */
17
+ export declare function admitPermissionProvider(profile: ZTCPermissionProfile, policy: PermissionPolicySnapshot, provider: string): void;
18
+ export declare function describePermissionPolicy(policy: PermissionPolicySnapshot): string;
19
+ export declare function describePermissionChanges(before: PermissionPolicySnapshot, after: PermissionPolicySnapshot): string;
20
+ /** Explicit user import only. Never auto-activate policy from a repository. */
21
+ export declare function readRepoPermissionProfiles(cwd: string): Promise<Record<string, ZTCPermissionProfile>>;
@@ -0,0 +1,89 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { homedir } from 'node:os';
3
+ import { join, resolve } from 'node:path';
4
+ import { z } from 'zod';
5
+ import { DEFAULT_PERMISSION_PROFILES } from '../config.js';
6
+ import { getSandboxPolicyStatus } from '../utils/sandbox.js';
7
+ import { normalizeProviderId } from '../agent/backends/provider_ids.js';
8
+ export const PERMISSION_CAPABILITIES = ['file_read', 'file_write', 'shell_exec', 'network', 'screen_capture', 'computer_control', 'ml_inference'];
9
+ const strings = z.array(z.string().min(1).max(2048)).max(128);
10
+ const profileSchema = z.object({
11
+ description: z.string().max(2000).optional(),
12
+ capabilities: z.object(Object.fromEntries(PERMISSION_CAPABILITIES.map(cap => [cap, z.boolean().optional()]))).strict().optional(),
13
+ approvalRequiredCapabilities: z.array(z.enum(PERMISSION_CAPABILITIES)).max(7).optional(),
14
+ allowedPaths: strings.optional(), deniedPaths: strings.optional(),
15
+ allowedShellCommands: strings.optional(), deniedShellCommands: strings.optional(),
16
+ networkHosts: z.object({ allow: strings.optional(), deny: strings.optional() }).strict().optional(),
17
+ sandbox: z.object({ backend: z.enum(['auto', 'none', 'seatbelt', 'bubblewrap', 'windows-job']).optional(), requireOsEnforcement: z.boolean().optional() }).strict().optional(),
18
+ }).strict();
19
+ export function resolvePermissionProfile(config) {
20
+ const id = config.permissionProfile ?? 'trusted';
21
+ const profile = config.permissionProfiles?.[id] ?? DEFAULT_PERMISSION_PROFILES[id];
22
+ if (!profile)
23
+ throw new Error(`Unknown permission profile: ${id}`);
24
+ const parsed = profileSchema.safeParse(profile);
25
+ if (!parsed.success)
26
+ throw new Error(`Invalid permission profile: ${id}`);
27
+ return parsed.data;
28
+ }
29
+ export function projectPermissionPolicy(config) {
30
+ const id = config.permissionProfile ?? 'trusted', profile = resolvePermissionProfile(config);
31
+ const capabilities = Object.fromEntries(PERMISSION_CAPABILITIES.map(cap => [cap,
32
+ config.toolPermissions?.[cap] !== false && profile.capabilities?.[cap] !== false]));
33
+ const approvals = id === 'ask_before_mutation' ? ['file_write', 'shell_exec', 'computer_control']
34
+ : profile.approvalRequiredCapabilities ?? [];
35
+ return { id, capabilities, approvalRequiredCapabilities: [...new Set(approvals)].filter(cap => capabilities[cap]),
36
+ commandSandbox: getSandboxPolicyStatus({ profile, profileId: id, sandbox: config.sandbox }),
37
+ scope: profile.allowedPaths?.length ? `File roots: ${profile.allowedPaths.join(', ')}` : 'File roots: unrestricted by profile',
38
+ };
39
+ }
40
+ /** Native provider-owned tools do not pass through ZTC's capability/approval boundary. */
41
+ export function admitPermissionProvider(profile, policy, provider) {
42
+ const native = ['claude_code', 'claude_code_direct', 'codex_app_server', 'codex_legacy', 'kimi_code'].includes(normalizeProviderId(provider).replaceAll('-', '_'));
43
+ const constrained = Object.values(policy.capabilities).includes(false) || policy.approvalRequiredCapabilities.length > 0
44
+ || Boolean(profile.allowedPaths?.length || profile.deniedPaths?.length || profile.allowedShellCommands?.length
45
+ || profile.deniedShellCommands?.length || profile.networkHosts?.allow?.length || profile.networkHosts?.deny?.length || policy.commandSandbox.requested);
46
+ if (native && constrained)
47
+ throw new Error('Permission profile unsupported by this native provider; use a ZTC-managed API provider for tool policy and host approval enforcement.');
48
+ if (policy.commandSandbox.required && policy.commandSandbox.enforcement !== 'os')
49
+ throw new Error('Permission profile requires OS command sandbox enforcement, but the selected backend is unavailable.');
50
+ }
51
+ export function describePermissionPolicy(policy) {
52
+ const sandbox = policy.commandSandbox;
53
+ return [
54
+ `Permission profile: ${policy.id}. Policy checks at tool boundaries; not session-wide OS isolation.`,
55
+ ...PERMISSION_CAPABILITIES.map(cap => ` ${cap}: ${policy.capabilities[cap] ? 'on' : 'off'}${policy.approvalRequiredCapabilities.includes(cap) ? ' (host approval required)' : ''}`),
56
+ policy.scope,
57
+ !sandbox.requested ? 'OS command sandbox: not requested.'
58
+ : `OS command sandbox: ${sandbox.required ? 'required' : 'requested'}; ${sandbox.backend} ${sandbox.available ? `available (${sandbox.enforcement}) for managed command launches` : 'unavailable (unsupported)'}. ${sandbox.required && sandbox.enforcement !== 'os' ? 'Command launch is blocked.' : 'This is backend availability, not proof that a command ran in isolation.'}`,
59
+ ].join('\n');
60
+ }
61
+ export function describePermissionChanges(before, after) {
62
+ const label = (policy, cap) => !policy.capabilities[cap] ? 'off'
63
+ : policy.approvalRequiredCapabilities.includes(cap) ? 'on with approval' : 'on';
64
+ const changed = PERMISSION_CAPABILITIES.filter(cap => label(before, cap) !== label(after, cap));
65
+ return ['Permission changes:', ...changed.map(cap => ` ${cap}: ${label(before, cap)} → ${label(after, cap)}`),
66
+ ...(changed.length ? [] : [' No capability changes; existing tool permission denials still apply.']), describePermissionPolicy(after)].join('\n');
67
+ }
68
+ /** Explicit user import only. Never auto-activate policy from a repository. */
69
+ export async function readRepoPermissionProfiles(cwd) {
70
+ let input;
71
+ try {
72
+ const bytes = await readFile(join(cwd, '.ztc', 'config.json'));
73
+ if (bytes.length > 256 * 1024)
74
+ throw new Error('oversized');
75
+ input = JSON.parse(bytes.toString('utf8'));
76
+ }
77
+ catch {
78
+ throw new Error('Invalid repo permission config; expected .ztc/config.json (maximum 256 KiB)');
79
+ }
80
+ const parsed = z.object({ permissionProfiles: z.record(z.string().regex(/^[a-z][a-z0-9_-]{0,63}$/), profileSchema) }).safeParse(input);
81
+ if (!parsed.success)
82
+ throw new Error('Invalid repo permission profiles; capability values must be booleans and policy fields must be supported');
83
+ const anchor = (path) => resolve(cwd, path === '~' ? homedir() : path.replace(/^~(?=\/|$)/, homedir()));
84
+ return Object.fromEntries(Object.entries(parsed.data.permissionProfiles).map(([id, profile]) => [id, {
85
+ ...profile,
86
+ ...(profile.allowedPaths ? { allowedPaths: profile.allowedPaths.map(anchor) } : {}),
87
+ ...(profile.deniedPaths ? { deniedPaths: profile.deniedPaths.map(anchor) } : {}),
88
+ }]));
89
+ }
@@ -35,8 +35,8 @@ export interface AuthContext {
35
35
  * `apiKey` is the DIRECT provider key (what a direct backend would use).
36
36
  * `authToken` is the platform/proxy bearer. When `useProxy` is true the active
37
37
  * backend streams through `proxyUrl` with `authToken`; the direct `apiKey` is
38
- * still surfaced so callers that special-case a provider (e.g. a direct Gemini
39
- * key) can opt out of the proxy.
38
+ * still surfaced for direct-provider construction. Auto-mode preferences are
39
+ * resolved before `useProxy` is returned.
40
40
  */
41
41
  export interface ResolvedLLMConfig {
42
42
  provider: string;
@@ -183,6 +183,8 @@ export interface ZTCPermissionProfile {
183
183
  description?: string;
184
184
  /** Capability allow/deny map. Missing entries default to allowed. */
185
185
  capabilities?: Partial<Record<ZTCToolCapability, boolean>>;
186
+ /** Existing host approval gate, applied before tools with these capabilities. */
187
+ approvalRequiredCapabilities?: ZTCToolCapability[];
186
188
  /** File roots that read/write tools may access. Relative entries resolve from the current cwd. */
187
189
  allowedPaths?: string[];
188
190
  /** File roots that read/write tools may never access. Relative entries resolve from the current cwd. */
@@ -223,12 +225,17 @@ export interface ContextProgressBarSettings {
223
225
  }
224
226
  export interface ApiRetrySettings {
225
227
  /**
226
- * Total attempts for a retryable LLM request failure, including the first
227
- * try. 1 disables retrying. Default: 3.
228
+ * Attempts before entering sustained recovery, including the first try.
229
+ * 1 disables Agent-level retries and recovery. Default: 3.
228
230
  */
229
231
  maxAttempts?: number;
230
232
  /** Exponential backoff base in milliseconds. Default: 2000 (2s, 4s, 8s, …). */
231
233
  baseDelayMs?: number;
234
+ /** Maximum jittered retry wait in milliseconds. Default: 30000. */
235
+ maxDelayMs?: number;
236
+ /** Extra recovery window after the initial attempts. null waits until
237
+ * cancellation; 0 disables sustained recovery. Default: null. */
238
+ recoveryWindowMs?: number | null;
232
239
  /**
233
240
  * Per-attempt inactivity timeout in milliseconds. `ZTC_LLM_REQUEST_TIMEOUT_MS`
234
241
  * (legacy `ZTC_LLM_TIMEOUT_MS`) overrides this when set. Default: 120000.
@@ -242,14 +249,18 @@ export interface MessageDisplaySettings {
242
249
  collapseToolCalls?: boolean;
243
250
  /** Combine consecutive tool calls into one transcript entry. Default: true. */
244
251
  groupToolCalls?: boolean;
245
- /** Render provider reasoning messages in the terminal transcript. Default: true. */
252
+ /** Render provider reasoning messages in the terminal transcript. Default: false. */
246
253
  showThinking?: boolean;
254
+ /** Show elapsed time and model usage beside assistant timestamps. Default: true. */
255
+ showTurnMetadata?: boolean;
247
256
  /**
248
257
  * Pace streaming answers instead of painting each arrival as one burst.
249
- * Small chunks still show immediately; the reveal keeps a bounded lag and
250
- * never delays the finished message. Default: true.
258
+ * With the reading cap off, small chunks show immediately and completed
259
+ * answers flush the bounded-lag reveal. Default: true.
251
260
  */
252
261
  smoothStreaming?: boolean;
262
+ /** Assistant prose reveal rate; null disables the cap. Default: 9 words/second. */
263
+ proseReadingRateWordsPerSecond?: number | null;
253
264
  }
254
265
  /** How conversation history is compacted when the context fills up. */
255
266
  export type CompactionMethod = 'summary' | 'jev';
@@ -296,7 +307,16 @@ export interface CompactionSettings {
296
307
  method?: CompactionMethod;
297
308
  jev?: JevCompactionSettings;
298
309
  }
310
+ export interface TerminalInteractionSettings {
311
+ mouseCapture?: boolean;
312
+ /** Number of lines per wheel event, from 1 through 20. */
313
+ wheelScrollLines?: number;
314
+ }
299
315
  export interface ZTCConfig {
316
+ /** Presence creates a guarded remote session with required, host-managed leases. */
317
+ remoteResources?: import('../agent/runtime/remote_resources.js').RemoteResource[];
318
+ /** Number of unowned, unnamed sessions retained per workspace. Null/absent disables automatic pruning. */
319
+ sessionRetentionCount?: number | null;
300
320
  /** Marks the one-time replacement of pre-preset settings in this profile. */
301
321
  settingsDefaultsVersion?: number;
302
322
  /** Configurable terminal status line fields, ordering, separator, and colors. */
@@ -315,6 +335,11 @@ export interface ZTCConfig {
315
335
  hostedThreadInstructions?: string;
316
336
  /** ZergRouter-only fallback plan. Direct provider backends ignore this. */
317
337
  zrouterRoutePlan?: ZRouterRoutePlan;
338
+ /** Explicit hosted native Messages transport; bypasses all provider-key discovery. */
339
+ nativeAnthropicMessagesRouter?: {
340
+ baseUrl: string;
341
+ authToken: string;
342
+ };
318
343
  zergEndpoint?: string;
319
344
  emulationId?: string;
320
345
  spinnerVerbs?: string[];
@@ -329,6 +354,8 @@ export interface ZTCConfig {
329
354
  execution?: import('./execution.js').ExecutionSettings;
330
355
  /** Terminal transcript density and reasoning visibility. */
331
356
  messageDisplay?: MessageDisplaySettings;
357
+ /** Native terminal mouse capture and wheel scrolling preferences. */
358
+ terminalInteraction?: TerminalInteractionSettings;
332
359
  /** Context compaction strategy (summarize, or Jev delete-only). */
333
360
  compaction?: CompactionSettings;
334
361
  /**
package/dist/config.d.ts CHANGED
@@ -1,4 +1,7 @@
1
- import { ZTCConfig, ZTCAuthCredentials, ApiEnvironment, ZTCAuthMode, ZTCConfigScope, CompactionTriggerMode, OpenAICompatibleSettings, ZTCPermissionProfile, IntentLayerSettings, ContextProgressBarSettings, CodexReasoningEffort, WorkflowSettings, Account, AccountRotation } from './config/types.js';
1
+ import { type ReasoningWireSurface } from '@zerg/model-contracts';
2
+ import { type RouterCatalog, type RouterCatalogConnection } from './utils/router_catalog.js';
3
+ import type { ReasoningContract } from './utils/reasoning.js';
4
+ import { ZTCConfig, ZTCAuthCredentials, ApiEnvironment, ZTCAuthMode, ZTCConfigScope, CompactionTriggerMode, OpenAICompatibleSettings, ZTCPermissionProfile, IntentLayerSettings, ContextProgressBarSettings, CodexReasoningEffort, WorkflowSettings, Account, AccountRotation, type TerminalInteractionSettings } from './config/types.js';
2
5
  import type { AuthContext, ResolvedLLMConfig } from './config/resolved.js';
3
6
  /** Validate and normalize an OpenAI-compatible inference destination. */
4
7
  export declare function compatEndpoint(value: string, options?: {
@@ -8,12 +11,20 @@ export declare function normalizeAuthMode(value: string | undefined): ZTCAuthMod
8
11
  export declare function resolveAuthMode(config: Pick<ZTCConfig, 'authMode'>): ZTCAuthMode;
9
12
  export declare const DEFAULT_PERMISSION_PROFILES: Record<string, ZTCPermissionProfile>;
10
13
  export declare const DEFAULT_CONTEXT_PROGRESS_BAR: ContextProgressBarSettings;
14
+ export declare const DEFAULT_TERMINAL_INTERACTION: Required<TerminalInteractionSettings>;
15
+ export declare function resolveTerminalInteractionSettings(value: unknown): Required<TerminalInteractionSettings>;
11
16
  export declare function build_default_config(): ZTCConfig;
12
17
  export declare function shouldRefreshSuperuserStatus(env?: NodeJS.ProcessEnv): boolean;
13
18
  export declare class ConfigStore {
14
19
  private config;
15
20
  private profileEmulation;
16
21
  private legacyApiKeyFromEnvironment;
22
+ /**
23
+ * Whether the routing in `this.config` came from a saved file or an explicit
24
+ * choice, rather than the built-in default. A config-less process that never
25
+ * picked a route must not hard-fail on the preset Router route it inherited.
26
+ */
27
+ private routingIsConfigured;
17
28
  private routerCredentials;
18
29
  private routerCredentialsError;
19
30
  private routerFallbackWarning;
@@ -21,6 +32,7 @@ export declare class ConfigStore {
21
32
  private configScope;
22
33
  /** Session-local overrides. Never persisted to config.json. */
23
34
  private sessionOverrides;
35
+ private restoredSessionSelection;
24
36
  /** CLI-only overrides. Never persisted to config.json. */
25
37
  private cliOverrides;
26
38
  /**
@@ -35,6 +47,10 @@ export declare class ConfigStore {
35
47
  private applyEnvOverrides;
36
48
  load(force?: boolean): Promise<ZTCConfig>;
37
49
  refresh(): Promise<void>;
50
+ /** Copy saved settings and Router credentials, then activate them transactionally.
51
+ * Account registrations retain their credential paths; account homes are not cloned.
52
+ */
53
+ duplicateProfile(requestedName: string, source?: string, activate?: () => void | Promise<void>): Promise<string>;
38
54
  /** Load a profile in this process; restore the old view if runtime activation fails. */
39
55
  switchProfile(name: string, activate: () => void | Promise<void>): Promise<void>;
40
56
  save(): Promise<void>;
@@ -54,6 +70,7 @@ export declare class ConfigStore {
54
70
  setConfigScope(scope: ZTCConfigScope): void;
55
71
  clearSessionOverrides(): void;
56
72
  withConfigScope<T>(scope: ZTCConfigScope, fn: () => T | Promise<T>): Promise<T>;
73
+ private releaseRestoredSelection;
57
74
  set<K extends keyof ZTCConfig>(key: K, value: ZTCConfig[K]): void;
58
75
  setGlobal<K extends keyof ZTCConfig>(key: K, value: ZTCConfig[K]): void;
59
76
  setAll(next: Partial<ZTCConfig>): void;
@@ -68,7 +85,7 @@ export declare class ConfigStore {
68
85
  * `undefined` removes the override instead of shadowing the saved value with
69
86
  * an explicit undefined, so the configured setting applies again.
70
87
  */
71
- setCliOverride<K extends keyof Pick<ZTCConfig, 'provider' | 'model' | 'codexEffort'>>(key: K, value: Pick<ZTCConfig, 'provider' | 'model' | 'codexEffort'>[K]): void;
88
+ setCliOverride<K extends keyof Pick<ZTCConfig, 'provider' | 'model' | 'codexEffort' | 'authMode' | 'zergProxyUrl'>>(key: K, value: Pick<ZTCConfig, 'provider' | 'model' | 'codexEffort' | 'authMode' | 'zergProxyUrl'>[K] | undefined): void;
72
89
  getProvider(): string;
73
90
  setProvider(provider: string): void;
74
91
  /** All registered accounts (empty when no pool is configured). */
@@ -110,7 +127,10 @@ export declare class ConfigStore {
110
127
  * Effective Codex effort for the active (or given) provider/model. Priority:
111
128
  * per-model > per-provider > global. Defaults to the current provider/model.
112
129
  */
130
+ getReasoningWireSurface(provider?: string, model?: string): ReasoningWireSurface;
113
131
  getCodexEffort(provider?: string, model?: string): CodexReasoningEffort | undefined;
132
+ /** The active transport owns the model's choices, aliases and advertised default. */
133
+ getReasoningContract(provider?: string, model?: string): ReasoningContract;
114
134
  /** Saved effort the active (or given) model rejects; undefined when it applies. */
115
135
  getUnsupportedCodexEffort(provider?: string, model?: string): CodexReasoningEffort | undefined;
116
136
  /** Effort chosen by a startup `--effort` flag for this process (= none when unset). */
@@ -165,6 +185,21 @@ export declare class ConfigStore {
165
185
  * getters stay — they are still used widely.
166
186
  */
167
187
  getAuthContext(): AuthContext;
188
+ restoreSessionSelection(metadata: {
189
+ provider: string;
190
+ model: string;
191
+ authMode?: ZTCAuthMode;
192
+ routerOrigin?: string;
193
+ configProfile?: string;
194
+ }): void;
195
+ getRouterCatalogConnection(destination?: string | undefined): RouterCatalogConnection | undefined;
196
+ /** New children use configured routing, not a parent's restored inference route. */
197
+ getChildAuthMode(): ZTCAuthMode;
198
+ adoptRouterCatalog(catalog: RouterCatalog): Promise<void>;
199
+ getRouterCatalog(): RouterCatalog | undefined;
200
+ getResolvedAuthMode(): ZTCAuthMode;
201
+ getRoutedModelCatalog(): RouterCatalog | undefined;
202
+ getModelContextWindow(model?: string, provider?: string): number | null | undefined;
168
203
  /**
169
204
  * Resolve everything a backend factory needs into one struct. Folds in the
170
205
  * provider/model override precedence, the direct-key precedence
@@ -179,8 +214,7 @@ export declare class ConfigStore {
179
214
  *
180
215
  * Reads through `get()` and the env-aware getters (never raw `this.config`)
181
216
  * so cli/session overrides stay honored. `apiKey` is the DIRECT provider key;
182
- * `authToken`/`useProxy` describe the proxy route separately, so a caller can
183
- * still prefer a direct key (e.g. Gemini) over the proxy.
217
+ * `authToken`/`useProxy` describe the selected proxy route separately.
184
218
  */
185
219
  resolveLLMBackendConfig(opts?: {
186
220
  provider?: string;