@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
@@ -11,11 +11,12 @@
11
11
  * shown only once it passes the stall threshold. Disappears the
12
12
  * moment an event lands, so it never lingers as noise.
13
13
  *
14
- * Tool phases are intentionally exempt from the quiet label: a long build or
15
- * test run is expected, and the tool verb already says what is happening.
14
+ * Owned tool observations have their own clock and a separate silence advisory.
15
+ * Silence is an observation: a long build may legitimately be waiting.
16
16
  */
17
- import type { AgentStatus } from '../types.js';
17
+ import type { AgentStatus, AgentState } from '../types.js';
18
18
  export declare const DEFAULT_STALL_HINT_MS = 15000;
19
+ export declare const TOOL_QUIET_HINT_MS = 30000;
19
20
  export interface LivenessInput {
20
21
  status: AgentStatus;
21
22
  /** Render-time clock in ms since epoch (injectable for deterministic tests). */
@@ -25,6 +26,7 @@ export interface LivenessInput {
25
26
  /** Timestamp of the most recent agent event (token deltas included). */
26
27
  lastEventAt?: Date | null;
27
28
  stallHintMs?: number;
29
+ toolProgress?: AgentState['toolProgress'];
28
30
  }
29
31
  export interface Liveness {
30
32
  elapsedLabel: string | null;
@@ -35,7 +37,7 @@ export interface Liveness {
35
37
  * (0s, 59s, 1m 00s, 59m 59s, 1h 00m 00s, 2h 03m 09s).
36
38
  */
37
39
  export declare function formatCompactElapsed(ms: number): string;
38
- export declare function describeLiveness({ status, now, turnStartedAt, lastEventAt, stallHintMs, }: LivenessInput): Liveness;
40
+ export declare function describeLiveness({ status, now, turnStartedAt, lastEventAt, stallHintMs, toolProgress, }: LivenessInput): Liveness;
39
41
  /**
40
42
  * Resolve the stall threshold, honoring the `ZTC_STALL_HINT_MS` diagnostic
41
43
  * override (used by tests to observe the marker without waiting 15 seconds).
@@ -11,10 +11,11 @@
11
11
  * shown only once it passes the stall threshold. Disappears the
12
12
  * moment an event lands, so it never lingers as noise.
13
13
  *
14
- * Tool phases are intentionally exempt from the quiet label: a long build or
15
- * test run is expected, and the tool verb already says what is happening.
14
+ * Owned tool observations have their own clock and a separate silence advisory.
15
+ * Silence is an observation: a long build may legitimately be waiting.
16
16
  */
17
17
  export const DEFAULT_STALL_HINT_MS = 15_000;
18
+ export const TOOL_QUIET_HINT_MS = 30_000;
18
19
  const ACTIVE_STATUSES = new Set(['thinking', 'streaming', 'tool_use']);
19
20
  const MODEL_WAIT_STATUSES = new Set(['thinking', 'streaming']);
20
21
  /**
@@ -35,10 +36,19 @@ export function formatCompactElapsed(ms) {
35
36
  const minutes = Math.floor((totalSeconds % 3600) / 60);
36
37
  return `${hours}h ${String(minutes).padStart(2, '0')}m ${String(seconds).padStart(2, '0')}s`;
37
38
  }
38
- export function describeLiveness({ status, now, turnStartedAt, lastEventAt, stallHintMs = DEFAULT_STALL_HINT_MS, }) {
39
+ export function describeLiveness({ status, now, turnStartedAt, lastEventAt, stallHintMs = DEFAULT_STALL_HINT_MS, toolProgress, }) {
39
40
  if (!ACTIVE_STATUSES.has(status)) {
40
41
  return { elapsedLabel: null, quietLabel: null };
41
42
  }
43
+ if (status === 'tool_use' && toolProgress) {
44
+ const progress = toolProgress.progress;
45
+ const quietMs = Math.max(0, now - (progress.lastOutputAt ?? progress.startedAt));
46
+ return {
47
+ elapsedLabel: `tool ${formatCompactElapsed(now - progress.startedAt)}`,
48
+ quietLabel: quietMs >= TOOL_QUIET_HINT_MS
49
+ ? `no tool output ${formatCompactElapsed(quietMs)} (may be waiting)` : null,
50
+ };
51
+ }
42
52
  const elapsedLabel = turnStartedAt
43
53
  ? formatCompactElapsed(now - turnStartedAt.getTime())
44
54
  : null;
@@ -0,0 +1,5 @@
1
+ import { listModels } from '../utils/models.js';
2
+ type ListModelsOptions = Parameters<typeof listModels>[0];
3
+ /** Shared discovery for all renderers. Disk rows are previews, not entitlements. */
4
+ export declare function loadModelCatalog(options: ListModelsOptions, onVerified?: (models: string[]) => void): Promise<string[]>;
5
+ export {};
@@ -0,0 +1,138 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { profileConfigDir } from '../config/profiles.js';
3
+ import { listModels } from '../utils/models.js';
4
+ import { clearCachedModels, readCachedModels, readCachedModelsFetchedAt, writeCachedModels } from '../utils/model_cache.js';
5
+ const FRESH_MS = 30_000;
6
+ const OFFLINE_MAX_AGE_MS = 24 * 60 * 60 * 1000;
7
+ const MAX_SCOPES = 64;
8
+ const MAX_CACHED_MODELS = 512;
9
+ const catalogs = new Map();
10
+ let writes = Promise.resolve();
11
+ function scopeFor(options) {
12
+ // Never persist raw credentials. Profiles, endpoints and credential identities
13
+ // are separate catalogs; switching any of them must bypass the old entry.
14
+ const identity = [profileConfigDir(), options.provider, options.proxyUrl?.replace(/\/$/, ''),
15
+ options.authToken, options.workspaceId, options.baseUrl?.replace(/\/$/, ''), options.apiKey,
16
+ options.codexAppServerCommand, options.codexAppServerArgs, options.codexHome,
17
+ options.codexAuthFilePath, options.kimiCredsFilePath];
18
+ return `${options.provider}:${createHash('sha256').update(JSON.stringify(identity)).digest('hex')}`;
19
+ }
20
+ function persist(profile, action) {
21
+ writes = writes.then(async () => {
22
+ // A response can arrive after a profile switch. Do not write that response
23
+ // into the new profile's cache, even under an unreachable hashed scope.
24
+ if (profileConfigDir() === profile)
25
+ await action();
26
+ }).catch(() => { });
27
+ }
28
+ function joinRequest(entry, pending, signal) {
29
+ signal?.throwIfAborted();
30
+ entry.waiters++;
31
+ return new Promise((resolve, reject) => {
32
+ let finished = false;
33
+ const finish = () => {
34
+ if (finished)
35
+ return false;
36
+ finished = true;
37
+ signal?.removeEventListener('abort', abort);
38
+ entry.waiters--;
39
+ if (!entry.waiters && !entry.background)
40
+ entry.controller?.abort();
41
+ return true;
42
+ };
43
+ const abort = () => { if (finish())
44
+ reject(signal.reason); };
45
+ signal?.addEventListener('abort', abort, { once: true });
46
+ pending.then(models => { if (finish())
47
+ resolve([...models]); }, error => { if (finish())
48
+ reject(error); });
49
+ });
50
+ }
51
+ function freshModels(entry) {
52
+ if (entry.models === undefined || entry.checkedAt === null)
53
+ return undefined;
54
+ const age = Date.now() - entry.checkedAt;
55
+ return age >= 0 && age < FRESH_MS ? [...entry.models] : undefined;
56
+ }
57
+ /** Shared discovery for all renderers. Disk rows are previews, not entitlements. */
58
+ export async function loadModelCatalog(options, onVerified) {
59
+ options.signal?.throwIfAborted();
60
+ const profile = profileConfigDir();
61
+ const scope = scopeFor(options);
62
+ let entry = catalogs.get(scope);
63
+ if (entry?.controller?.signal.aborted) {
64
+ catalogs.delete(scope);
65
+ entry = undefined;
66
+ }
67
+ if (!entry) {
68
+ if (catalogs.size >= MAX_SCOPES) {
69
+ const oldest = catalogs.keys().next().value;
70
+ catalogs.get(oldest).controller?.abort();
71
+ catalogs.delete(oldest);
72
+ }
73
+ entry = { checkedAt: null, waiters: 0, background: false, diskChecked: false };
74
+ catalogs.set(scope, entry);
75
+ }
76
+ // Keep the map in access order for bounded eviction.
77
+ catalogs.delete(scope);
78
+ catalogs.set(scope, entry);
79
+ const fresh = freshModels(entry);
80
+ if (fresh !== undefined) {
81
+ onVerified?.([...fresh]);
82
+ return fresh;
83
+ }
84
+ if (entry.models === undefined && !entry.pending && !entry.diskChecked) {
85
+ entry.diskChecked = true;
86
+ const [cached, fetchedAt] = await Promise.all([readCachedModels(scope), readCachedModelsFetchedAt(scope)]);
87
+ options.signal?.throwIfAborted();
88
+ const age = fetchedAt === undefined ? Infinity : Date.now() - fetchedAt;
89
+ if (entry.models === undefined && cached.length && age >= 0 && age < OFFLINE_MAX_AGE_MS)
90
+ entry.models = cached;
91
+ }
92
+ if (catalogs.get(scope) !== entry)
93
+ throw new DOMException('Model discovery was superseded', 'AbortError');
94
+ const afterRead = freshModels(entry);
95
+ if (afterRead !== undefined) {
96
+ onVerified?.([...afterRead]);
97
+ return afterRead;
98
+ }
99
+ const current = entry;
100
+ const refresh = () => {
101
+ if (current.pending)
102
+ return current.pending;
103
+ const controller = new AbortController();
104
+ current.controller = controller;
105
+ const pending = listModels({ ...options, signal: controller.signal }).then(models => {
106
+ controller.signal.throwIfAborted();
107
+ const cacheable = models.length <= MAX_CACHED_MODELS
108
+ && models.every(id => id.length <= 256 && !/[\r\n\0]/.test(id));
109
+ current.models = cacheable ? [...models] : undefined;
110
+ current.checkedAt = Date.now();
111
+ persist(profile, () => models.length && cacheable ? writeCachedModels(scope, models) : clearCachedModels(scope));
112
+ return models;
113
+ }).catch(error => {
114
+ // A denial invalidates the preview. Temporary transport errors retain it.
115
+ if (error instanceof Error && /\((401|403)\)/.test(error.message)) {
116
+ current.models = undefined;
117
+ persist(profile, () => clearCachedModels(scope));
118
+ }
119
+ throw error;
120
+ }).finally(() => {
121
+ if (current.pending === pending) {
122
+ current.pending = undefined;
123
+ current.controller = undefined;
124
+ current.background = false;
125
+ }
126
+ });
127
+ current.pending = pending;
128
+ return pending;
129
+ };
130
+ if (current.models !== undefined) {
131
+ current.background = true;
132
+ void refresh().then(models => onVerified?.([...models])).catch(() => { });
133
+ return [...current.models];
134
+ }
135
+ const models = await joinRequest(current, refresh(), options.signal);
136
+ onVerified?.([...models]);
137
+ return models;
138
+ }
@@ -5,13 +5,34 @@ export function reconcileOrderedTranscript(options) {
5
5
  if (!iterations.length)
6
6
  return [...live];
7
7
  const byIteration = iterations.map(() => []);
8
+ const answerAnchors = new Map();
9
+ let answerSearchFrom = iterations[0].start;
8
10
  let current = 0;
9
11
  for (const message of ordered) {
10
12
  if (message.toolCalls?.length)
11
13
  current = toolIterations.get(message.toolCalls[0].id) ?? current;
14
+ else if (isPersistableAssistantMessage(message)) {
15
+ // A no-tool answer can also precede consumed steering. Its canonical
16
+ // checkpoint and streamed bubble have different IDs; match in arrival
17
+ // order so identical text in later iterations still has its own source.
18
+ let position = live.findIndex(candidate => candidate.id === message.id);
19
+ if (position < 0)
20
+ position = live.findIndex((candidate, index) => index >= answerSearchFrom
21
+ && isPersistableAssistantMessage(candidate) && candidate.content === message.content);
22
+ if (position >= iterations[0].start) {
23
+ answerAnchors.set(message.id, live[position].id);
24
+ answerSearchFrom = position + 1;
25
+ current = 0;
26
+ for (const [index, frame] of iterations.entries())
27
+ if (frame.start <= position)
28
+ current = index;
29
+ }
30
+ }
12
31
  byIteration[current].push(message);
13
32
  }
14
33
  const consumed = new Set(ordered.filter(message => message.role === 'user').map(message => message.id));
34
+ const acceptedInput = new Map(live.filter(message => message.role === 'user'
35
+ && !message.metadata?.toolResult).map(message => [message.id, message]));
15
36
  const output = live.slice(0, iterations[0].start);
16
37
  for (let index = 0; index < iterations.length; index++) {
17
38
  const frame = iterations[index];
@@ -19,10 +40,14 @@ export function reconcileOrderedTranscript(options) {
19
40
  const segment = live.slice(frame.start, end).filter(message => !consumed.has(message.id));
20
41
  const canonical = byIteration[index].find(message => message.toolCalls?.length);
21
42
  if (canonical) {
22
- const calls = canonical.toolCalls.map(({ result: _result, error: _error, ...call }) => call);
43
+ const calls = canonical.metadata?.toolCheckpoint === true
44
+ ? canonical.toolCalls.map(call => ({ ...call }))
45
+ : canonical.toolCalls.map(({ result: _result, error: _error, ...call }) => call);
23
46
  const beforeTools = live.slice(frame.start, frame.toolStart ?? end);
24
47
  const anchorId = beforeTools.filter(isPersistableAssistantMessage).at(-1)?.id;
25
- const anchor = segment.findIndex(message => message.id === anchorId);
48
+ const recorded = segment.findIndex(message => message.id === canonical.id
49
+ || message.toolCalls?.some(call => canonical.toolCalls.some(source => source.id === call.id)));
50
+ const anchor = recorded >= 0 ? recorded : segment.findIndex(message => message.id === anchorId);
26
51
  if (anchor >= 0) {
27
52
  segment[anchor] = { ...segment[anchor], toolCalls: calls,
28
53
  metadata: { ...segment[anchor].metadata, ...canonical.metadata, toolCallsInTranscript: true } };
@@ -34,10 +59,24 @@ export function reconcileOrderedTranscript(options) {
34
59
  const alreadyDisplayed = segment.filter(isPersistableAssistantMessage).map(message => message.content).join('') === canonical.content;
35
60
  segment.splice(trace < 0 ? segment.length : trace, 0, { ...canonical,
36
61
  content: alreadyDisplayed ? '[Using tools...]' : canonical.content,
37
- toolCalls: calls, metadata: { ...canonical.metadata, toolCallsInTranscript: true } });
62
+ toolCalls: calls, metadata: { ...canonical.metadata, toolCallsInTranscript: true,
63
+ toolUseOnly: !canonical.content.trim() || canonical.content === '[Using tools...]' } });
38
64
  }
39
65
  }
40
- output.push(...segment, ...byIteration[index].filter(message => message !== canonical));
66
+ const additional = byIteration[index].filter(message => message !== canonical).flatMap(message => {
67
+ const anchorId = answerAnchors.get(message.id);
68
+ if (anchorId !== undefined) {
69
+ const anchor = segment.findIndex(candidate => candidate.id === anchorId);
70
+ if (anchor >= 0) {
71
+ segment[anchor] = { ...segment[anchor], content: message.content,
72
+ metadata: { ...segment[anchor].metadata, ...message.metadata } };
73
+ return [];
74
+ }
75
+ }
76
+ const accepted = acceptedInput.get(message.id);
77
+ return [accepted ? { ...message, metadata: { ...message.metadata, ...accepted.metadata } } : message];
78
+ });
79
+ output.push(...segment, ...additional);
41
80
  }
42
81
  if (finalMessage) {
43
82
  const finalFrame = iterations.length - 1;
@@ -0,0 +1,14 @@
1
+ import type { ModelUsageObserver, PromptTurnMetadata } from '../types.js';
2
+ /** One human prompt owns its main requests and workers across retries/continuations. */
3
+ export declare class PromptTurn {
4
+ private readonly changed;
5
+ private metadata;
6
+ private mainRuns;
7
+ private workers;
8
+ readonly observe: ModelUsageObserver;
9
+ constructor(id: string, changed: () => void, startedAt?: number);
10
+ snapshot(): PromptTurnMetadata;
11
+ start(): void;
12
+ finish(): void;
13
+ private settle;
14
+ }
@@ -0,0 +1,53 @@
1
+ /** One human prompt owns its main requests and workers across retries/continuations. */
2
+ export class PromptTurn {
3
+ changed;
4
+ metadata;
5
+ mainRuns = 0;
6
+ workers = 0;
7
+ observe;
8
+ constructor(id, changed, startedAt = Date.now()) {
9
+ this.changed = changed;
10
+ this.metadata = { id, startedAt, tokens: 0, estimated: false };
11
+ this.observe = Object.assign((usage) => {
12
+ const tokens = usage.totalTokens;
13
+ this.metadata = {
14
+ ...this.metadata,
15
+ tokens: this.metadata.tokens + (Number.isFinite(tokens) && tokens >= 0 ? tokens : 0),
16
+ estimated: this.metadata.estimated || usage.estimated === true || !Number.isFinite(tokens) || tokens < 0,
17
+ ...(usage.unreported === true ? { usageIncomplete: true } : {}),
18
+ };
19
+ this.changed();
20
+ }, {
21
+ getTurn: () => this.snapshot(),
22
+ workerStarted: () => {
23
+ this.workers++;
24
+ this.metadata = { ...this.metadata, finishedAt: undefined };
25
+ this.changed();
26
+ let finished = false;
27
+ return () => {
28
+ if (finished)
29
+ return;
30
+ finished = true;
31
+ this.workers--;
32
+ this.settle();
33
+ };
34
+ },
35
+ });
36
+ }
37
+ snapshot() { return { ...this.metadata }; }
38
+ start() {
39
+ this.mainRuns++;
40
+ this.metadata = { ...this.metadata, finishedAt: undefined };
41
+ this.changed();
42
+ }
43
+ finish() {
44
+ this.mainRuns = Math.max(0, this.mainRuns - 1);
45
+ this.settle();
46
+ }
47
+ settle() {
48
+ if (this.mainRuns === 0 && this.workers === 0) {
49
+ this.metadata = { ...this.metadata, finishedAt: this.metadata.finishedAt ?? Date.now() };
50
+ }
51
+ this.changed();
52
+ }
53
+ }
@@ -4,6 +4,7 @@
4
4
  * a back-to-back idle transition aborts the previous call.
5
5
  */
6
6
  import { Message } from '../types.js';
7
+ import type { ModelUsageObserver } from '../types.js';
7
8
  export declare const RECAP_MIN_DURATION_MS = 60000;
8
9
  export declare const RECAP_MIN_TOOL_CALLS = 4;
9
10
  export declare const RECAP_MIN_OUTPUT_TOKENS = 600;
@@ -27,6 +28,7 @@ export interface RecapRequest {
27
28
  model: string;
28
29
  apiKey: string;
29
30
  onRecap: (content: string) => void;
31
+ onUsage?: ModelUsageObserver;
30
32
  /** Test seam — bypasses the real backend call. */
31
33
  llm?: (args: {
32
34
  provider: string;
@@ -35,6 +37,7 @@ export interface RecapRequest {
35
37
  system: string;
36
38
  prompt: string;
37
39
  signal: AbortSignal;
40
+ onUsage?: ModelUsageObserver;
38
41
  }) => Promise<string>;
39
42
  }
40
43
  export interface RecapController {
package/dist/app/recap.js CHANGED
@@ -75,7 +75,11 @@ async function defaultLlm(args) {
75
75
  messages: [{ role: 'user', content: args.prompt }],
76
76
  tools: [],
77
77
  signal: args.signal,
78
+ }).catch(error => {
79
+ args.onUsage?.({ inputTokens: 0, outputTokens: 0, totalTokens: 0, estimated: true, unreported: true });
80
+ throw error;
78
81
  });
82
+ args.onUsage?.(response.usage ?? { inputTokens: 0, outputTokens: 0, totalTokens: 0, estimated: true, unreported: true });
79
83
  return response.content
80
84
  .filter((b) => b.type === 'text')
81
85
  .map(b => b.text)
@@ -102,14 +106,16 @@ class RecapControllerImpl {
102
106
  const aborter = new AbortController();
103
107
  this.aborter = aborter;
104
108
  const llm = args.llm ?? defaultLlm;
105
- llm({
109
+ const workerFinished = args.onUsage?.workerStarted?.();
110
+ Promise.resolve().then(() => llm({
106
111
  provider: args.provider,
107
112
  model: args.model,
108
113
  apiKey: args.apiKey,
109
114
  system: RECAP_SYSTEM_PROMPT,
110
115
  prompt: `Recent turn:\n\n${conversationText}`,
111
116
  signal: aborter.signal,
112
- })
117
+ onUsage: args.onUsage,
118
+ }))
113
119
  .then((text) => {
114
120
  if (aborter.signal.aborted)
115
121
  return;
@@ -130,7 +136,7 @@ class RecapControllerImpl {
130
136
  }
131
137
  if (this.aborter === aborter)
132
138
  this.aborter = null;
133
- });
139
+ }).finally(() => workerFinished?.());
134
140
  }
135
141
  cancel() {
136
142
  if (this.aborter) {
@@ -1,4 +1,5 @@
1
1
  import type { RustEvent } from '../ui/ratatui/protocol.js';
2
+ import type { DesktopRuntime } from '../desktop/runtime.js';
2
3
  export interface HotRestartLaunch {
3
4
  command: string;
4
5
  args: string[];
@@ -69,7 +70,7 @@ export declare function reduceDesktopUpdateOwnerHandshake(phase: DesktopUpdateOw
69
70
  */
70
71
  export declare function prepareDesktopUpdateAuthorization(persistSession: (force: true) => Promise<void>, send: (command: DesktopUpdateRestartCommand) => boolean): Promise<DesktopUpdatePreparation>;
71
72
  export declare function buildHotRestartArgs(argv: readonly string[], sessionId: string): string[];
72
- export declare function buildHotRestartLaunch(argv: readonly string[], sessionId: string, execPath: string): HotRestartLaunch;
73
- export declare function buildDesktopUpdateRelaunchContext(argv: readonly string[], sessionId: string, execPath: string, cwd: string, ownerPid: number): string;
73
+ export declare function buildHotRestartLaunch(argv: readonly string[], sessionId: string, execPath: string, cwd?: string, desktopRuntime?: DesktopRuntime | null): HotRestartLaunch;
74
+ export declare function buildDesktopUpdateRelaunchContext(argv: readonly string[], sessionId: string, execPath: string, cwd: string, ownerPid: number, desktopRuntime?: DesktopRuntime | null): string;
74
75
  export declare function requestColonyCellRestart(env?: Record<string, string | undefined>, fetchImpl?: typeof fetch): Promise<void>;
75
76
  export {};
@@ -1,3 +1,6 @@
1
+ import { createRequire } from 'node:module';
2
+ import { pathToFileURL } from 'node:url';
3
+ import { resolveOwnedCliLaunch } from '../desktop/cli_launch.js';
1
4
  const RESTART_SESSION_FLAGS = new Set(['--resume', '--continue', '-c', '--session-id']);
2
5
  /**
3
6
  * Reduce native updater protocol events and local persistence outcomes into
@@ -113,18 +116,30 @@ export function buildHotRestartArgs(argv, sessionId) {
113
116
  }
114
117
  return [...next, '--resume', sessionId];
115
118
  }
116
- export function buildHotRestartLaunch(argv, sessionId, execPath) {
119
+ export function buildHotRestartLaunch(argv, sessionId, execPath, cwd, desktopRuntime) {
117
120
  const relaunchArgs = buildHotRestartArgs(argv, sessionId);
121
+ // The picker can switch workspaces. Override a launcher's original --cwd;
122
+ // cli_main deliberately uses the last occurrence of that flag.
123
+ if (cwd)
124
+ relaunchArgs.push('--cwd', cwd);
125
+ const owned = resolveOwnedCliLaunch(relaunchArgs.slice(1), desktopRuntime);
126
+ if (owned)
127
+ return owned;
118
128
  const entryScript = relaunchArgs[0] || '';
119
- const isTsEntry = entryScript.endsWith('.ts');
129
+ const isTsEntry = /\.[cm]?tsx?$/.test(entryScript);
130
+ // Resolve from this installation, not the selected session's working dir.
131
+ // Direct argv also preserves spaces/metacharacters without a shell or npx.
132
+ const loaderArgs = isTsEntry
133
+ ? ['--import', pathToFileURL(createRequire(import.meta.url).resolve('tsx')).href]
134
+ : [];
120
135
  return {
121
- command: isTsEntry ? 'npx' : execPath,
122
- args: isTsEntry ? ['tsx', ...relaunchArgs] : relaunchArgs,
123
- shell: isTsEntry,
136
+ command: execPath,
137
+ args: [...loaderArgs, ...relaunchArgs],
138
+ shell: false,
124
139
  };
125
140
  }
126
- export function buildDesktopUpdateRelaunchContext(argv, sessionId, execPath, cwd, ownerPid) {
127
- const launch = buildHotRestartLaunch(argv, sessionId, execPath);
141
+ export function buildDesktopUpdateRelaunchContext(argv, sessionId, execPath, cwd, ownerPid, desktopRuntime) {
142
+ const launch = buildHotRestartLaunch(argv, sessionId, execPath, undefined, desktopRuntime);
128
143
  const command = launch.shell ? '/usr/bin/env' : launch.command;
129
144
  const args = launch.shell ? [launch.command, ...launch.args] : launch.args;
130
145
  return JSON.stringify({
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Rewind — pure helpers behind the Esc-while-idle prompt picker.
2
+ * Rewind — pure helpers behind the explicit /rewind prompt picker.
3
3
  *
4
- * Esc during a run interrupts the agent but keeps the turn in the transcript.
5
- * Esc while idle is the explicit way back out: the picker lists the prompts the
4
+ * Confirmed Escape stops a run but keeps its turn in the transcript.
5
+ * /rewind is the explicit way back out: the picker lists the prompts the
6
6
  * user sent (newest first) and rewinding to one drops that prompt and
7
7
  * everything after it, then hands the prompt text and attachments back to the
8
8
  * composer so the user can edit and resend.
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Rewind — pure helpers behind the Esc-while-idle prompt picker.
2
+ * Rewind — pure helpers behind the explicit /rewind prompt picker.
3
3
  *
4
- * Esc during a run interrupts the agent but keeps the turn in the transcript.
5
- * Esc while idle is the explicit way back out: the picker lists the prompts the
4
+ * Confirmed Escape stops a run but keeps its turn in the transcript.
5
+ * /rewind is the explicit way back out: the picker lists the prompts the
6
6
  * user sent (newest first) and rewinding to one drops that prompt and
7
7
  * everything after it, then hands the prompt text and attachments back to the
8
8
  * composer so the user can edit and resend.
@@ -1,3 +1,6 @@
1
+ import { type RouterCatalog } from '../utils/router_catalog.js';
2
+ import { type ReasoningContract } from '../utils/reasoning.js';
3
+ import type { CodexReasoningEffort } from '../config/types.js';
1
4
  import { type SlashCommandUsage } from '../agent/commands/usage_spec.js';
2
5
  export interface SelectionCandidate {
3
6
  value: string;
@@ -8,7 +11,9 @@ export interface SelectionCandidate {
8
11
  needsArgument?: boolean;
9
12
  }
10
13
  export interface SelectionCompletionView {
11
- kind?: 'command' | 'provider' | 'model' | 'usage';
14
+ kind?: 'command' | 'provider' | 'model' | 'usage' | 'reasoning';
15
+ command?: 'effort' | 'thinking';
16
+ model?: string;
12
17
  query?: string;
13
18
  usage?: string;
14
19
  provider?: string;
@@ -22,6 +27,13 @@ export interface SelectionCompletionView {
22
27
  unavailable?: boolean;
23
28
  visibleRows?: number;
24
29
  }
30
+ export interface ReasoningCompletionContext {
31
+ catalog?: RouterCatalog;
32
+ current?: CodexReasoningEffort;
33
+ contract?: ReasoningContract;
34
+ /** Opaque account/profile identity; invalidate definitions when it changes. */
35
+ scope?: string;
36
+ }
25
37
  export declare function fuzzySelections(candidates: SelectionCandidate[], query: string): SelectionCandidate[];
26
38
  export declare function modelSelections(provider: string, discovered?: string[]): SelectionCandidate[];
27
39
  /** Static preview for renderers without a completion controller. Explicit null hides it. */
@@ -49,8 +61,10 @@ export declare class SelectionCompletion {
49
61
  private requestController;
50
62
  private commands;
51
63
  private currentModel?;
64
+ private routerCatalog?;
65
+ private reasoning;
52
66
  constructor(changed?: () => void);
53
- update(text: string, provider: string, loadModels?: (signal: AbortSignal, provider: string, authMode?: 'direct' | 'zrouter') => Promise<string[]>, commands?: SlashCommandUsage[], currentModel?: string): void;
67
+ update(text: string, provider: string, loadModels?: (signal: AbortSignal, provider: string, authMode?: 'direct' | 'zrouter') => Promise<string[]>, commands?: SlashCommandUsage[], currentModel?: string, loadCatalog?: (signal: AbortSignal) => Promise<RouterCatalog>, activeRouted?: boolean, reasoning?: ReasoningCompletionContext): void;
54
68
  private filter;
55
69
  private revealSelection;
56
70
  setVisibleRows(rows: number): void;
@@ -73,6 +87,7 @@ export declare class SelectionCompletion {
73
87
  }): {
74
88
  handled: boolean;
75
89
  text?: string;
90
+ submit?: boolean;
76
91
  };
77
92
  }
78
93
  export declare const SELECTION_VISIBLE_ROWS = 4;