@zergai/ztc 0.4.0-beta.1 → 0.5.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (718) hide show
  1. package/README.md +398 -45
  2. package/RUST_THIRD_PARTY_LICENSES.txt +1080 -822
  3. package/THIRD_PARTY_NOTICES.md +273 -12
  4. package/bin/zmux-darwin-arm64 +0 -0
  5. package/bin/ztc-audio-darwin-arm64 +0 -0
  6. package/bin/ztc-capture-darwin-arm64 +0 -0
  7. package/bin/ztc-computer-darwin-arm64 +0 -0
  8. package/bin/ztc-llm-darwin-arm64 +0 -0
  9. package/bin/ztc-tts-darwin-arm64 +0 -0
  10. package/bin/ztc-tui-darwin-arm64 +0 -0
  11. package/bin/ztc-zlicky-overlay-darwin-arm64 +0 -0
  12. package/bin/zterm-darwin-arm64 +0 -0
  13. package/dist/App.js +1206 -209
  14. package/dist/agent/agent.d.ts +74 -8
  15. package/dist/agent/agent.js +1073 -184
  16. package/dist/agent/backends/account_rotation.d.ts +4 -0
  17. package/dist/agent/backends/account_rotation.js +8 -2
  18. package/dist/agent/backends/anthropic.d.ts +13 -0
  19. package/dist/agent/backends/anthropic.js +169 -28
  20. package/dist/agent/backends/claude_cli.js +18 -8
  21. package/dist/agent/backends/codex_app_server.d.ts +1 -0
  22. package/dist/agent/backends/codex_app_server.js +55 -3
  23. package/dist/agent/backends/codex_auth.d.ts +1 -0
  24. package/dist/agent/backends/codex_auth.js +67 -13
  25. package/dist/agent/backends/codex_buffered_recovery.d.ts +27 -0
  26. package/dist/agent/backends/codex_buffered_recovery.js +293 -0
  27. package/dist/agent/backends/gemini.js +3 -1
  28. package/dist/agent/backends/http_error.d.ts +26 -0
  29. package/dist/agent/backends/http_error.js +221 -0
  30. package/dist/agent/backends/index.d.ts +9 -2
  31. package/dist/agent/backends/index.js +22 -2
  32. package/dist/agent/backends/openai.d.ts +0 -6
  33. package/dist/agent/backends/openai.js +5 -2
  34. package/dist/agent/backends/openai_compatible.d.ts +5 -4
  35. package/dist/agent/backends/openai_compatible.js +26 -19
  36. package/dist/agent/backends/openai_responses.d.ts +8 -3
  37. package/dist/agent/backends/openai_responses.js +77 -33
  38. package/dist/agent/backends/provider_ids.d.ts +1 -0
  39. package/dist/agent/backends/provider_ids.js +4 -0
  40. package/dist/agent/backends/request_metrics.js +12 -2
  41. package/dist/agent/backends/types.d.ts +109 -6
  42. package/dist/agent/backends/types.js +5 -1
  43. package/dist/agent/backends/zrouter_stream.d.ts +6 -1
  44. package/dist/agent/backends/zrouter_stream.js +160 -42
  45. package/dist/agent/background_registry.d.ts +2 -0
  46. package/dist/agent/background_registry.js +1 -0
  47. package/dist/agent/claim_observation.d.ts +6 -0
  48. package/dist/agent/claim_observation.js +54 -0
  49. package/dist/agent/commands/accounts.js +46 -177
  50. package/dist/agent/commands/attention.d.ts +2 -0
  51. package/dist/agent/commands/attention.js +67 -0
  52. package/dist/agent/commands/auth.js +18 -2
  53. package/dist/agent/commands/board.d.ts +2 -0
  54. package/dist/agent/commands/board.js +169 -0
  55. package/dist/agent/commands/clipboard.js +50 -1
  56. package/dist/agent/commands/compact.js +21 -13
  57. package/dist/agent/commands/config.js +4 -1
  58. package/dist/agent/commands/context.js +6 -1
  59. package/dist/agent/commands/desktop.d.ts +2 -0
  60. package/dist/agent/commands/desktop.js +29 -0
  61. package/dist/agent/commands/effort.js +14 -6
  62. package/dist/agent/commands/environment.d.ts +3 -0
  63. package/dist/agent/commands/environment.js +109 -0
  64. package/dist/agent/commands/evidence.d.ts +2 -0
  65. package/dist/agent/commands/evidence.js +9 -0
  66. package/dist/agent/commands/fork.js +4 -3
  67. package/dist/agent/commands/goal.d.ts +33 -1
  68. package/dist/agent/commands/goal.js +174 -14
  69. package/dist/agent/commands/goal_exit.d.ts +36 -0
  70. package/dist/agent/commands/goal_exit.js +120 -0
  71. package/dist/agent/commands/help.js +3 -1
  72. package/dist/agent/commands/history.js +3 -1
  73. package/dist/agent/commands/inbox.d.ts +2 -0
  74. package/dist/agent/commands/inbox.js +148 -0
  75. package/dist/agent/commands/index.js +16 -1
  76. package/dist/agent/commands/input_mode.js +8 -6
  77. package/dist/agent/commands/job.d.ts +2 -0
  78. package/dist/agent/commands/job.js +93 -0
  79. package/dist/agent/commands/keybindings.js +4 -1
  80. package/dist/agent/commands/label.d.ts +2 -0
  81. package/dist/agent/commands/label.js +77 -0
  82. package/dist/agent/commands/layout.d.ts +2 -0
  83. package/dist/agent/commands/layout.js +20 -0
  84. package/dist/agent/commands/mirror.js +16 -1
  85. package/dist/agent/commands/model.js +12 -2
  86. package/dist/agent/commands/permissions.d.ts +3 -1
  87. package/dist/agent/commands/permissions.js +79 -89
  88. package/dist/agent/commands/plan.js +5 -15
  89. package/dist/agent/commands/profile.js +21 -2
  90. package/dist/agent/commands/provider_selection.js +20 -1
  91. package/dist/agent/commands/rename.js +1 -1
  92. package/dist/agent/commands/resources.d.ts +2 -0
  93. package/dist/agent/commands/resources.js +67 -0
  94. package/dist/agent/commands/rewind.d.ts +3 -0
  95. package/dist/agent/commands/rewind.js +16 -0
  96. package/dist/agent/commands/runbooks.d.ts +2 -0
  97. package/dist/agent/commands/runbooks.js +73 -0
  98. package/dist/agent/commands/runbooks_lazy.d.ts +2 -0
  99. package/dist/agent/commands/runbooks_lazy.js +8 -0
  100. package/dist/agent/commands/sessions.d.ts +1 -1
  101. package/dist/agent/commands/sessions.js +33 -5
  102. package/dist/agent/commands/settings.js +185 -39
  103. package/dist/agent/commands/setup.d.ts +2 -0
  104. package/dist/agent/commands/setup.js +78 -0
  105. package/dist/agent/commands/share.d.ts +2 -0
  106. package/dist/agent/commands/share.js +64 -0
  107. package/dist/agent/commands/status.js +14 -2
  108. package/dist/agent/commands/types.d.ts +99 -6
  109. package/dist/agent/commands/update.js +8 -0
  110. package/dist/agent/commands/usage.d.ts +2 -0
  111. package/dist/agent/commands/usage.js +8 -0
  112. package/dist/agent/factory.d.ts +11 -0
  113. package/dist/agent/factory.js +113 -88
  114. package/dist/agent/loop_policy.d.ts +6 -3
  115. package/dist/agent/loop_policy.js +12 -3
  116. package/dist/agent/measurement_guidance.d.ts +2 -0
  117. package/dist/agent/measurement_guidance.js +5 -0
  118. package/dist/agent/request_encoder.d.ts +8 -1
  119. package/dist/agent/request_encoder.js +95 -23
  120. package/dist/agent/runtime/benchmark_comparison.d.ts +30 -0
  121. package/dist/agent/runtime/benchmark_comparison.js +94 -0
  122. package/dist/agent/runtime/benchmark_contract.d.ts +48 -0
  123. package/dist/agent/runtime/benchmark_contract.js +90 -0
  124. package/dist/agent/runtime/checked_commands.d.ts +32 -0
  125. package/dist/agent/runtime/checked_commands.js +119 -0
  126. package/dist/agent/runtime/command_execution_policy.d.ts +26 -0
  127. package/dist/agent/runtime/command_execution_policy.js +91 -0
  128. package/dist/agent/runtime/command_jobs.d.ts +36 -18
  129. package/dist/agent/runtime/command_jobs.js +151 -13
  130. package/dist/agent/runtime/command_panes.d.ts +59 -0
  131. package/dist/agent/runtime/command_panes.js +398 -0
  132. package/dist/agent/runtime/command_wait.d.ts +19 -0
  133. package/dist/agent/runtime/command_wait.js +167 -0
  134. package/dist/agent/runtime/cpu_benchmark.d.ts +30 -0
  135. package/dist/agent/runtime/cpu_benchmark.js +126 -0
  136. package/dist/agent/runtime/delegated_evidence.d.ts +26 -0
  137. package/dist/agent/runtime/delegated_evidence.js +80 -0
  138. package/dist/agent/runtime/evidence.d.ts +127 -0
  139. package/dist/agent/runtime/evidence.js +468 -0
  140. package/dist/agent/runtime/execution_context.d.ts +7 -0
  141. package/dist/agent/runtime/execution_context.js +39 -3
  142. package/dist/agent/runtime/json_verifier_recipe.d.ts +8 -0
  143. package/dist/agent/runtime/json_verifier_recipe.js +66 -0
  144. package/dist/agent/runtime/measurements.d.ts +110 -0
  145. package/dist/agent/runtime/measurements.js +317 -0
  146. package/dist/agent/runtime/policy.d.ts +4 -0
  147. package/dist/agent/runtime/policy.js +31 -20
  148. package/dist/agent/runtime/provider_native_evidence.d.ts +20 -0
  149. package/dist/agent/runtime/provider_native_evidence.js +86 -0
  150. package/dist/agent/runtime/recovery.d.ts +2 -0
  151. package/dist/agent/runtime/recovery.js +45 -2
  152. package/dist/agent/runtime/remote_broker_transport.d.ts +10 -0
  153. package/dist/agent/runtime/remote_broker_transport.js +84 -0
  154. package/dist/agent/runtime/remote_deletion_receipts.d.ts +3 -0
  155. package/dist/agent/runtime/remote_deletion_receipts.js +43 -0
  156. package/dist/agent/runtime/remote_journal_replay.d.ts +13 -0
  157. package/dist/agent/runtime/remote_journal_replay.js +233 -0
  158. package/dist/agent/runtime/remote_mutation_journal.d.ts +25 -0
  159. package/dist/agent/runtime/remote_mutation_journal.js +208 -0
  160. package/dist/agent/runtime/remote_resource_endpoint.d.ts +7 -0
  161. package/dist/agent/runtime/remote_resource_endpoint.js +6 -0
  162. package/dist/agent/runtime/remote_resource_errors.d.ts +5 -0
  163. package/dist/agent/runtime/remote_resource_errors.js +9 -0
  164. package/dist/agent/runtime/remote_resource_script.d.ts +2 -0
  165. package/dist/agent/runtime/remote_resource_script.js +1009 -0
  166. package/dist/agent/runtime/remote_resources.d.ts +29 -0
  167. package/dist/agent/runtime/remote_resources.js +160 -0
  168. package/dist/agent/runtime/source_verification.d.ts +12 -0
  169. package/dist/agent/runtime/source_verification.js +210 -0
  170. package/dist/agent/runtime/source_verification_contract.d.ts +75 -0
  171. package/dist/agent/runtime/source_verification_contract.js +203 -0
  172. package/dist/agent/runtime/tool_checkpoints.d.ts +11 -0
  173. package/dist/agent/runtime/tool_checkpoints.js +26 -0
  174. package/dist/agent/runtime/tool_effects.d.ts +5 -0
  175. package/dist/agent/runtime/tool_progress.d.ts +12 -0
  176. package/dist/agent/runtime/tool_progress.js +76 -0
  177. package/dist/agent/runtime/tool_runtime.d.ts +16 -1
  178. package/dist/agent/runtime/tool_runtime.js +204 -10
  179. package/dist/agent/runtime/tracing.d.ts +1 -1
  180. package/dist/agent/runtime/verifier_capture.d.ts +9 -0
  181. package/dist/agent/runtime/verifier_capture.js +100 -0
  182. package/dist/agent/runtime/verifier_contract.d.ts +24 -0
  183. package/dist/agent/runtime/verifier_contract.js +41 -0
  184. package/dist/agent/subagent.d.ts +20 -10
  185. package/dist/agent/subagent.js +266 -29
  186. package/dist/agent/tool_response_directory.d.ts +24 -0
  187. package/dist/agent/tool_response_directory.js +61 -0
  188. package/dist/agent/tool_response_source.d.ts +8 -0
  189. package/dist/agent/tool_response_source.js +49 -0
  190. package/dist/agent/tool_response_store.d.ts +75 -4
  191. package/dist/agent/tool_response_store.js +583 -64
  192. package/dist/agent/tools/ask_user.d.ts +3 -1
  193. package/dist/agent/tools/ask_user.js +30 -11
  194. package/dist/agent/tools/background.js +1 -0
  195. package/dist/agent/tools/benchmark_cpu.d.ts +2 -0
  196. package/dist/agent/tools/benchmark_cpu.js +102 -0
  197. package/dist/agent/tools/compare_benchmarks.d.ts +2 -0
  198. package/dist/agent/tools/compare_benchmarks.js +53 -0
  199. package/dist/agent/tools/deferred.js +1 -0
  200. package/dist/agent/tools/delegate.js +18 -2
  201. package/dist/agent/tools/helper_requirements.d.ts +7 -0
  202. package/dist/agent/tools/helper_requirements.js +19 -0
  203. package/dist/agent/tools/index.d.ts +1 -0
  204. package/dist/agent/tools/index.js +3 -0
  205. package/dist/agent/tools/measurement_report.d.ts +22 -0
  206. package/dist/agent/tools/measurement_report.js +190 -0
  207. package/dist/agent/tools/pane.d.ts +0 -7
  208. package/dist/agent/tools/pane.js +5 -4
  209. package/dist/agent/tools/project_context.d.ts +3 -0
  210. package/dist/agent/tools/project_context.js +45 -0
  211. package/dist/agent/tools/recall_tool_response.d.ts +3 -5
  212. package/dist/agent/tools/recall_tool_response.js +19 -29
  213. package/dist/agent/tools/registry.d.ts +1 -0
  214. package/dist/agent/tools/registry.js +23 -0
  215. package/dist/agent/tools/related_sessions.d.ts +2 -0
  216. package/dist/agent/tools/related_sessions.js +156 -0
  217. package/dist/agent/tools/routine.js +13 -3
  218. package/dist/agent/tools/session_evidence.d.ts +3 -0
  219. package/dist/agent/tools/session_evidence.js +72 -0
  220. package/dist/agent/tools/shell.d.ts +4 -3
  221. package/dist/agent/tools/shell.js +174 -47
  222. package/dist/agent/tools/tool_search.js +3 -2
  223. package/dist/agent/tools/types.d.ts +28 -0
  224. package/dist/agent/tools/verify_artifact.d.ts +2 -0
  225. package/dist/agent/tools/verify_artifact.js +60 -0
  226. package/dist/agent/tools/workflow.js +1 -0
  227. package/dist/app/activity.d.ts +6 -1
  228. package/dist/app/activity.js +81 -12
  229. package/dist/app/agent_runner.d.ts +6 -1
  230. package/dist/app/agent_runner.js +34 -19
  231. package/dist/app/command_context.js +106 -10
  232. package/dist/app/controller.d.ts +15 -4
  233. package/dist/app/controller.js +29 -3
  234. package/dist/app/escape_stop.d.ts +11 -0
  235. package/dist/app/escape_stop.js +15 -0
  236. package/dist/app/liveness.d.ts +6 -4
  237. package/dist/app/liveness.js +13 -3
  238. package/dist/app/model_catalog_cache.d.ts +5 -0
  239. package/dist/app/model_catalog_cache.js +138 -0
  240. package/dist/app/ordered_transcript.js +43 -4
  241. package/dist/app/prompt_turn.d.ts +14 -0
  242. package/dist/app/prompt_turn.js +53 -0
  243. package/dist/app/recap.d.ts +3 -0
  244. package/dist/app/recap.js +9 -3
  245. package/dist/app/restart.d.ts +3 -2
  246. package/dist/app/restart.js +22 -7
  247. package/dist/app/rewind.d.ts +3 -3
  248. package/dist/app/rewind.js +3 -3
  249. package/dist/app/selection_completion.d.ts +17 -2
  250. package/dist/app/selection_completion.js +84 -9
  251. package/dist/app/session_manager.d.ts +38 -6
  252. package/dist/app/session_manager.js +263 -60
  253. package/dist/app/session_messages.d.ts +3 -0
  254. package/dist/app/session_messages.js +60 -0
  255. package/dist/app/task_scope_router.d.ts +20 -0
  256. package/dist/app/task_scope_router.js +173 -0
  257. package/dist/app/transcript_window.d.ts +2 -0
  258. package/dist/app/transcript_window.js +4 -0
  259. package/dist/app/workspace_admission_details.d.ts +3 -0
  260. package/dist/app/workspace_admission_details.js +26 -0
  261. package/dist/app/workspace_layout_controller.d.ts +11 -0
  262. package/dist/app/workspace_layout_controller.js +88 -0
  263. package/dist/app/workspace_monitor.d.ts +1 -0
  264. package/dist/app/workspace_monitor.js +216 -0
  265. package/dist/app/workspace_presets.d.ts +29 -0
  266. package/dist/app/workspace_presets.js +192 -0
  267. package/dist/attention/queue.d.ts +37 -0
  268. package/dist/attention/queue.js +183 -0
  269. package/dist/bench/rf_shared.d.ts +2 -0
  270. package/dist/board/binding.d.ts +42 -0
  271. package/dist/board/binding.js +38 -0
  272. package/dist/board/client.d.ts +42 -0
  273. package/dist/board/client.js +60 -0
  274. package/dist/cli.js +1 -1
  275. package/dist/cli_args.js +19 -17
  276. package/dist/cli_main.js +110 -13
  277. package/dist/cli_ratatui.d.ts +183 -16
  278. package/dist/cli_ratatui.js +3989 -1255
  279. package/dist/components/ActivityLine.d.ts +3 -2
  280. package/dist/components/ActivityLine.js +2 -2
  281. package/dist/components/InputArea.d.ts +19 -1
  282. package/dist/components/InputArea.js +264 -190
  283. package/dist/components/MessageList.d.ts +2 -0
  284. package/dist/components/MessageList.js +3 -1
  285. package/dist/components/SingleMessage.d.ts +2 -0
  286. package/dist/components/SingleMessage.js +4 -2
  287. package/dist/components/StatusBar.d.ts +4 -2
  288. package/dist/components/StatusBar.js +3 -1
  289. package/dist/conductor_branch.js +3 -0
  290. package/dist/config/api_retry.d.ts +6 -1
  291. package/dist/config/api_retry.js +19 -1
  292. package/dist/config/defaults.d.ts +2 -1
  293. package/dist/config/defaults.js +9 -2
  294. package/dist/config/message_display.d.ts +1 -0
  295. package/dist/config/message_display.js +17 -2
  296. package/dist/config/permissions.d.ts +21 -0
  297. package/dist/config/permissions.js +89 -0
  298. package/dist/config/resolved.d.ts +2 -2
  299. package/dist/config/types.d.ts +32 -5
  300. package/dist/config.d.ts +38 -4
  301. package/dist/config.js +290 -42
  302. package/dist/context/project_intelligence.d.ts +44 -0
  303. package/dist/context/project_intelligence.js +246 -0
  304. package/dist/desktop/cli_launch.d.ts +8 -0
  305. package/dist/desktop/cli_launch.js +6 -0
  306. package/dist/desktop/cli_shim.d.ts +8 -0
  307. package/dist/desktop/cli_shim.js +120 -0
  308. package/dist/desktop/runtime.d.ts +16 -0
  309. package/dist/desktop/runtime.js +161 -0
  310. package/dist/desktop/worker_launch.d.ts +7 -0
  311. package/dist/desktop/worker_launch.js +7 -0
  312. package/dist/diagnostics/cargo_mutants_selection.d.ts +27 -0
  313. package/dist/diagnostics/cargo_mutants_selection.js +48 -0
  314. package/dist/diagnostics/native_terminal_benchmark.d.ts +58 -0
  315. package/dist/diagnostics/native_terminal_benchmark.js +1247 -0
  316. package/dist/diagnostics/session_evidence_package.d.ts +40 -0
  317. package/dist/diagnostics/session_evidence_package.js +234 -0
  318. package/dist/diagnostics/session_export.d.ts +93 -0
  319. package/dist/diagnostics/session_export.js +634 -0
  320. package/dist/emulation/tool_adapters.js +48 -18
  321. package/dist/emulation/ztc_addendum.d.ts +1 -0
  322. package/dist/emulation/ztc_addendum.js +13 -12
  323. package/dist/environment/service_runner.d.ts +1 -0
  324. package/dist/environment/service_runner.js +68 -0
  325. package/dist/environment/store.d.ts +120 -0
  326. package/dist/environment/store.js +387 -0
  327. package/dist/events.d.ts +40 -1
  328. package/dist/events.js +10 -17
  329. package/dist/goal_contract.d.ts +25 -0
  330. package/dist/goal_contract.js +44 -0
  331. package/dist/headless.d.ts +31 -0
  332. package/dist/headless.js +578 -70
  333. package/dist/headless_cli.js +8 -0
  334. package/dist/headless_cli_args.d.ts +1 -0
  335. package/dist/headless_cli_args.js +1 -0
  336. package/dist/intake/cli.d.ts +1 -0
  337. package/dist/intake/cli.js +33 -0
  338. package/dist/intake/format.d.ts +2 -0
  339. package/dist/intake/format.js +14 -0
  340. package/dist/intake/notifications.d.ts +16 -0
  341. package/dist/intake/notifications.js +132 -0
  342. package/dist/intake/store.d.ts +56 -0
  343. package/dist/intake/store.js +238 -0
  344. package/dist/library.d.ts +8 -0
  345. package/dist/library.js +19 -10
  346. package/dist/mcp/client.d.ts +1 -0
  347. package/dist/mcp/client.js +20 -0
  348. package/dist/modes/builtin/plan.yaml +2 -2
  349. package/dist/modes/handlers.js +1 -1
  350. package/dist/onboarding/first_run.d.ts +3 -0
  351. package/dist/onboarding/first_run.js +33 -25
  352. package/dist/onboarding/setup.d.ts +32 -0
  353. package/dist/onboarding/setup.js +133 -0
  354. package/dist/onboarding/setup_agent_health.d.ts +17 -0
  355. package/dist/onboarding/setup_agent_health.js +79 -0
  356. package/dist/onboarding/setup_environment.d.ts +66 -0
  357. package/dist/onboarding/setup_environment.js +219 -0
  358. package/dist/onboarding/setup_workspace.d.ts +17 -0
  359. package/dist/onboarding/setup_workspace.js +129 -0
  360. package/dist/optimize/adapters/index.d.ts +4 -1
  361. package/dist/optimize/adapters/index.js +7 -0
  362. package/dist/optimize/adapters/kernelbench.js +14 -5
  363. package/dist/optimize/adapters/popcorn.js +3 -2
  364. package/dist/optimize/adapters/profile_benchmark.js +13 -7
  365. package/dist/optimize/adapters/rfbench.js +25 -14
  366. package/dist/optimize/adapters/types.d.ts +3 -0
  367. package/dist/optimize/adapters/zergpod.js +5 -2
  368. package/dist/optimize/baseline.js +10 -21
  369. package/dist/optimize/branch.js +9 -12
  370. package/dist/optimize/combine.js +2 -3
  371. package/dist/optimize/executor.js +34 -48
  372. package/dist/optimize/measurements.d.ts +55 -0
  373. package/dist/optimize/measurements.js +173 -0
  374. package/dist/optimize/results.d.ts +1 -0
  375. package/dist/optimize/results.js +11 -33
  376. package/dist/optimize/tge.js +2 -1
  377. package/dist/panes/initial_input.d.ts +19 -0
  378. package/dist/panes/initial_input.js +206 -0
  379. package/dist/panes/labels.d.ts +16 -0
  380. package/dist/panes/labels.js +42 -0
  381. package/dist/panes/model_catalog.d.ts +3 -3
  382. package/dist/panes/model_catalog.js +28 -4
  383. package/dist/panes/pane_registry.js +6 -2
  384. package/dist/panes/types.d.ts +3 -0
  385. package/dist/panes/ztc_launch.js +19 -0
  386. package/dist/plugin/optimization.d.ts +2 -0
  387. package/dist/plugin/optimization.js +1 -0
  388. package/dist/plugin/runtime.d.ts +2 -0
  389. package/dist/plugin/simulation.d.ts +6 -1
  390. package/dist/plugin/simulation_contract.d.ts +836 -1
  391. package/dist/plugin/simulation_documents.d.ts +22 -0
  392. package/dist/plugin/simulation_documents.js +1 -0
  393. package/dist/plugin/simulation_interventions.d.ts +103 -0
  394. package/dist/plugin/simulation_interventions.js +1 -0
  395. package/dist/plugin/simulation_living.d.ts +1 -0
  396. package/dist/plugin/simulation_living.js +3 -0
  397. package/dist/plugin/simulation_meetings.d.ts +121 -0
  398. package/dist/plugin/simulation_meetings.js +1 -0
  399. package/dist/plugin/simulation_story_review.d.ts +111 -0
  400. package/dist/plugin/simulation_story_review.js +1 -0
  401. package/dist/plugin/simulation_storyteller.d.ts +91 -0
  402. package/dist/plugin/simulation_storyteller.js +1 -0
  403. package/dist/plugin/simulation_structured.d.ts +2 -0
  404. package/dist/plugin/simulation_structured.js +2 -0
  405. package/dist/plugin/simulation_toolkit.d.ts +21 -0
  406. package/dist/plugin/simulation_toolkit.js +24 -0
  407. package/dist/prompts/tool_delegate_task.j2 +1 -1
  408. package/dist/remote-broker/Dockerfile +10 -0
  409. package/dist/remote-broker/archive.py +1227 -0
  410. package/dist/remote-broker/cutover.py +761 -0
  411. package/dist/remote-broker/requirements.txt +5 -0
  412. package/dist/remote-broker/resources.json +6 -0
  413. package/dist/remote-broker/resources.write-staging.example.json +18 -0
  414. package/dist/remote-broker/retained.py +686 -0
  415. package/dist/remote-broker/retained_cleanup.py +550 -0
  416. package/dist/remote-broker/server.py +648 -0
  417. package/dist/remote-broker/worker.py +1007 -0
  418. package/dist/router_auth.d.ts +31 -0
  419. package/dist/router_auth.js +155 -9
  420. package/dist/runbooks/catalog.d.ts +3 -0
  421. package/dist/runbooks/catalog.js +26 -0
  422. package/dist/runbooks/library.d.ts +11 -0
  423. package/dist/runbooks/library.js +95 -0
  424. package/dist/runbooks/package.d.ts +43 -0
  425. package/dist/runbooks/package.js +102 -0
  426. package/dist/session.d.ts +65 -13
  427. package/dist/session.js +548 -43
  428. package/dist/session_handoff.d.ts +25 -0
  429. package/dist/session_handoff.js +322 -0
  430. package/dist/session_handoff_contract.d.ts +89 -0
  431. package/dist/session_handoff_contract.js +179 -0
  432. package/dist/session_media.d.ts +41 -0
  433. package/dist/session_media.js +357 -0
  434. package/dist/session_ownership.d.ts +16 -0
  435. package/dist/session_ownership.js +221 -0
  436. package/dist/session_public.d.ts +10 -2
  437. package/dist/session_public.js +6 -1
  438. package/dist/simulation/dynamic_history.d.ts +42 -0
  439. package/dist/simulation/dynamic_history.js +173 -0
  440. package/dist/simulation/engines/swarm/pane_manager.js +7 -6
  441. package/dist/simulation/inference.d.ts +3 -1
  442. package/dist/simulation/inference.js +19 -1
  443. package/dist/simulation/intervention_generation.d.ts +27 -0
  444. package/dist/simulation/intervention_generation.js +246 -0
  445. package/dist/simulation/intervention_material.d.ts +4 -0
  446. package/dist/simulation/intervention_material.js +81 -0
  447. package/dist/simulation/living/context.d.ts +3130 -0
  448. package/dist/simulation/living/context.js +944 -0
  449. package/dist/simulation/living/definer.d.ts +12 -0
  450. package/dist/simulation/living/definer.js +223 -0
  451. package/dist/simulation/living/definition.d.ts +257 -0
  452. package/dist/simulation/living/definition.js +341 -0
  453. package/dist/simulation/living/frame.d.ts +259 -0
  454. package/dist/simulation/living/frame.js +223 -0
  455. package/dist/simulation/living/identifiers.d.ts +2 -0
  456. package/dist/simulation/living/identifiers.js +12 -0
  457. package/dist/simulation/living/index.d.ts +15 -0
  458. package/dist/simulation/living/index.js +15 -0
  459. package/dist/simulation/living/inference.d.ts +219 -0
  460. package/dist/simulation/living/inference.js +576 -0
  461. package/dist/simulation/living/mechanics.d.ts +54 -0
  462. package/dist/simulation/living/mechanics.js +588 -0
  463. package/dist/simulation/living/model-input.d.ts +25 -0
  464. package/dist/simulation/living/model-input.js +215 -0
  465. package/dist/simulation/living/open-world.d.ts +257 -0
  466. package/dist/simulation/living/open-world.js +102 -0
  467. package/dist/simulation/living/projection.d.ts +7 -0
  468. package/dist/simulation/living/projection.js +31 -0
  469. package/dist/simulation/living/recall.d.ts +17 -0
  470. package/dist/simulation/living/recall.js +25 -0
  471. package/dist/simulation/living/reduce.d.ts +15 -0
  472. package/dist/simulation/living/reduce.js +1853 -0
  473. package/dist/simulation/living/replay.d.ts +6 -0
  474. package/dist/simulation/living/replay.js +22 -0
  475. package/dist/simulation/living/runtime.d.ts +140 -0
  476. package/dist/simulation/living/runtime.js +3020 -0
  477. package/dist/simulation/living/shared-kinds.d.ts +24 -0
  478. package/dist/simulation/living/shared-kinds.js +96 -0
  479. package/dist/simulation/living/types.d.ts +2785 -0
  480. package/dist/simulation/living/types.js +669 -0
  481. package/dist/simulation/llm.d.ts +3 -1
  482. package/dist/simulation/llm.js +90 -30
  483. package/dist/simulation/memory/embedding.d.ts +1 -1
  484. package/dist/simulation/memory/embedding.js +9 -3
  485. package/dist/simulation/memory/filesystem.d.ts +2 -0
  486. package/dist/simulation/memory/filesystem.js +5 -1
  487. package/dist/simulation/memory/filesystem_file_tree.d.ts +4 -1
  488. package/dist/simulation/memory/filesystem_file_tree.js +41 -10
  489. package/dist/simulation/memory/filesystem_invariants.js +1 -2
  490. package/dist/simulation/memory/filesystem_types.d.ts +1 -0
  491. package/dist/simulation/memory/memory.d.ts +2 -0
  492. package/dist/simulation/memory/memory.js +5 -1
  493. package/dist/simulation/orchestration/intent.js +0 -2
  494. package/dist/simulation/orchestration/lifecycle.js +0 -2
  495. package/dist/simulation/plugin_host.d.ts +25 -1
  496. package/dist/simulation/plugin_host.js +334 -17
  497. package/dist/simulation/session_documents.d.ts +20 -0
  498. package/dist/simulation/session_documents.js +62 -0
  499. package/dist/simulation/session_input_validation.d.ts +43 -0
  500. package/dist/simulation/session_input_validation.js +364 -0
  501. package/dist/simulation/session_inputs.d.ts +32 -0
  502. package/dist/simulation/session_inputs.js +154 -0
  503. package/dist/simulation/telemetry.d.ts +11 -14
  504. package/dist/simulation/telemetry.js +177 -54
  505. package/dist/simulation/toolkit/bounded_turns.d.ts +13 -0
  506. package/dist/simulation/toolkit/bounded_turns.js +80 -0
  507. package/dist/simulation/toolkit/dynamic_agents.d.ts +25 -0
  508. package/dist/simulation/toolkit/dynamic_agents.js +218 -0
  509. package/dist/simulation/toolkit/dynamic_digest.d.ts +1 -0
  510. package/dist/simulation/toolkit/dynamic_digest.js +8 -0
  511. package/dist/simulation/toolkit/dynamic_documents.d.ts +7 -0
  512. package/dist/simulation/toolkit/dynamic_documents.js +71 -0
  513. package/dist/simulation/toolkit/dynamic_driver.d.ts +8 -0
  514. package/dist/simulation/toolkit/dynamic_driver.js +269 -0
  515. package/dist/simulation/toolkit/dynamic_game.d.ts +53 -0
  516. package/dist/simulation/toolkit/dynamic_game.js +805 -0
  517. package/dist/simulation/toolkit/dynamic_knowledge.d.ts +15 -0
  518. package/dist/simulation/toolkit/dynamic_knowledge.js +91 -0
  519. package/dist/simulation/toolkit/dynamic_mechanics.d.ts +22 -0
  520. package/dist/simulation/toolkit/dynamic_mechanics.js +910 -0
  521. package/dist/simulation/toolkit/dynamic_meetings.d.ts +239 -0
  522. package/dist/simulation/toolkit/dynamic_meetings.js +350 -0
  523. package/dist/simulation/toolkit/dynamic_progress.d.ts +131 -0
  524. package/dist/simulation/toolkit/dynamic_progress.js +214 -0
  525. package/dist/simulation/toolkit/dynamic_projection.d.ts +9 -0
  526. package/dist/simulation/toolkit/dynamic_projection.js +219 -0
  527. package/dist/simulation/toolkit/dynamic_runtime.d.ts +412 -0
  528. package/dist/simulation/toolkit/dynamic_runtime.js +6536 -0
  529. package/dist/simulation/toolkit/dynamic_state.d.ts +111 -0
  530. package/dist/simulation/toolkit/dynamic_state.js +1967 -0
  531. package/dist/simulation/toolkit/dynamic_story_review.d.ts +508 -0
  532. package/dist/simulation/toolkit/dynamic_story_review.js +333 -0
  533. package/dist/simulation/toolkit/dynamic_storyteller.d.ts +77 -0
  534. package/dist/simulation/toolkit/dynamic_storyteller.js +114 -0
  535. package/dist/simulation/toolkit/dynamic_storyteller_runtime.d.ts +26 -0
  536. package/dist/simulation/toolkit/dynamic_storyteller_runtime.js +126 -0
  537. package/dist/simulation/toolkit/dynamic_world.d.ts +22 -0
  538. package/dist/simulation/toolkit/dynamic_world.js +377 -0
  539. package/dist/simulation/toolkit/structured_output.d.ts +5 -0
  540. package/dist/simulation/toolkit/structured_output.js +321 -0
  541. package/dist/simulation/types/world.d.ts +2 -0
  542. package/dist/simulation/world/artifact_store.js +1 -1
  543. package/dist/simulation/world/memory_manager.d.ts +5 -0
  544. package/dist/simulation/world/memory_manager.js +17 -2
  545. package/dist/simulation/world/state.d.ts +3 -2
  546. package/dist/simulation/world/state.js +15 -5
  547. package/dist/skills/bundled/measurement-validation/SKILL.md +144 -0
  548. package/dist/terminal_attach.d.ts +1 -0
  549. package/dist/terminal_attach.js +113 -0
  550. package/dist/tool_progress.d.ts +3 -0
  551. package/dist/tool_progress.js +27 -0
  552. package/dist/types.d.ts +145 -10
  553. package/dist/types.js +3 -0
  554. package/dist/ui/core/input.d.ts +3 -0
  555. package/dist/ui/core/input_segments.d.ts +18 -1
  556. package/dist/ui/core/input_segments.js +131 -47
  557. package/dist/ui/core/input_state.d.ts +12 -0
  558. package/dist/ui/core/layout_yoga.d.ts +1 -1
  559. package/dist/ui/core/turn_metadata.d.ts +5 -0
  560. package/dist/ui/core/turn_metadata.js +22 -0
  561. package/dist/ui/ink/render.d.ts +2 -1
  562. package/dist/ui/ink/render.js +6 -5
  563. package/dist/ui/ratatui/headless_pane_manager.d.ts +14 -1
  564. package/dist/ui/ratatui/headless_pane_manager.js +293 -104
  565. package/dist/ui/ratatui/index.d.ts +1 -0
  566. package/dist/ui/ratatui/input.d.ts +4 -0
  567. package/dist/ui/ratatui/input.js +15 -0
  568. package/dist/ui/ratatui/ipc_path.d.ts +2 -0
  569. package/dist/ui/ratatui/ipc_path.js +29 -1
  570. package/dist/ui/ratatui/mux_persistence.d.ts +3 -1
  571. package/dist/ui/ratatui/mux_persistence.js +139 -1
  572. package/dist/ui/ratatui/pane_relay.d.ts +1 -1
  573. package/dist/ui/ratatui/pane_relay.js +55 -27
  574. package/dist/ui/ratatui/process.d.ts +17 -1
  575. package/dist/ui/ratatui/process.js +80 -7
  576. package/dist/ui/ratatui/protocol.d.ts +236 -1
  577. package/dist/ui/ratatui/protocol.js +90 -0
  578. package/dist/ui/scrollback.d.ts +2 -1
  579. package/dist/ui/scrollback.js +9 -4
  580. package/dist/ui/stream_typewriter.d.ts +8 -3
  581. package/dist/ui/stream_typewriter.js +30 -1
  582. package/dist/ui/streaming_scrollback.d.ts +1 -0
  583. package/dist/ui/streaming_scrollback.js +1 -1
  584. package/dist/ui/transcript_render_cache.js +10 -0
  585. package/dist/ui/views/activity_line.d.ts +5 -3
  586. package/dist/ui/views/activity_line.js +65 -7
  587. package/dist/ui/views/app.d.ts +6 -3
  588. package/dist/ui/views/app.js +17 -6
  589. package/dist/ui/views/completion_menu.js +10 -5
  590. package/dist/ui/views/input_area.d.ts +7 -3
  591. package/dist/ui/views/input_area.js +15 -9
  592. package/dist/ui/views/message_list.d.ts +4 -1
  593. package/dist/ui/views/message_list.js +89 -19
  594. package/dist/ui/views/queue_panel.d.ts +3 -1
  595. package/dist/ui/views/queue_panel.js +9 -2
  596. package/dist/ui/views/status_bar.d.ts +4 -2
  597. package/dist/ui/views/status_bar.js +28 -13
  598. package/dist/ui/views/theme.d.ts +2 -0
  599. package/dist/ui/views/theme.js +2 -0
  600. package/dist/ui/widgets/color_panel.js +18 -0
  601. package/dist/ui/widgets/form.js +8 -0
  602. package/dist/ui/widgets/log_view.js +7 -0
  603. package/dist/ui/widgets/navigator_panel.js +8 -0
  604. package/dist/ui/widgets/prompt_viewer.js +2 -0
  605. package/dist/ui/widgets/questionnaire.d.ts +2 -0
  606. package/dist/ui/widgets/questionnaire.js +79 -16
  607. package/dist/ui/widgets/resume_panel.d.ts +2 -0
  608. package/dist/ui/widgets/resume_panel.js +26 -15
  609. package/dist/ui/widgets/rewind_panel.d.ts +2 -2
  610. package/dist/ui/widgets/rewind_panel.js +4 -2
  611. package/dist/ui/widgets/select.js +16 -27
  612. package/dist/ui/widgets/settings_panel.js +16 -0
  613. package/dist/ui/widgets/status_line_panel.d.ts +1 -0
  614. package/dist/ui/widgets/status_line_panel.js +30 -4
  615. package/dist/ui/widgets/text_input.d.ts +2 -0
  616. package/dist/ui/widgets/text_input.js +15 -1
  617. package/dist/ui/widgets/types.d.ts +2 -0
  618. package/dist/usage_projection.d.ts +24 -0
  619. package/dist/usage_projection.js +130 -0
  620. package/dist/usage_snapshot.d.ts +36 -0
  621. package/dist/usage_snapshot.js +131 -0
  622. package/dist/utils/assistant_message.d.ts +2 -0
  623. package/dist/utils/assistant_message.js +5 -0
  624. package/dist/utils/atomic_write.d.ts +6 -2
  625. package/dist/utils/atomic_write.js +29 -4
  626. package/dist/utils/checked_shell.d.ts +25 -0
  627. package/dist/utils/checked_shell.js +107 -0
  628. package/dist/utils/compaction.d.ts +4 -1
  629. package/dist/utils/compaction.js +31 -7
  630. package/dist/utils/context.d.ts +4 -4
  631. package/dist/utils/context.js +14 -12
  632. package/dist/utils/deepseek.d.ts +2 -2
  633. package/dist/utils/deepseek.js +13 -5
  634. package/dist/utils/ephemeral.js +4 -0
  635. package/dist/utils/ephemeral_tools.d.ts +18 -0
  636. package/dist/utils/ephemeral_tools.js +97 -0
  637. package/dist/utils/jev_client.d.ts +4 -0
  638. package/dist/utils/jev_client.js +15 -0
  639. package/dist/utils/model_cache.d.ts +15 -0
  640. package/dist/utils/model_cache.js +143 -0
  641. package/dist/utils/models.d.ts +4 -2
  642. package/dist/utils/models.js +12 -16
  643. package/dist/utils/reasoning.d.ts +8 -1
  644. package/dist/utils/reasoning.js +31 -11
  645. package/dist/utils/router_catalog.d.ts +49 -0
  646. package/dist/utils/router_catalog.js +271 -0
  647. package/dist/utils/sandbox.d.ts +9 -0
  648. package/dist/utils/sandbox.js +118 -15
  649. package/dist/utils/shell.d.ts +7 -0
  650. package/dist/utils/shell.js +98 -34
  651. package/dist/utils/subprocess_env.d.ts +3 -0
  652. package/dist/utils/subprocess_env.js +27 -1
  653. package/dist/web/accounts_mirror.d.ts +3 -1
  654. package/dist/web/accounts_mirror.js +13 -9
  655. package/dist/web/child_publication.d.ts +17 -0
  656. package/dist/web/child_publication.js +45 -0
  657. package/dist/web/mirror_authenticator.d.ts +31 -11
  658. package/dist/web/mirror_authenticator.js +67 -17
  659. package/dist/web/mirror_client.d.ts +31 -4
  660. package/dist/web/mirror_client.js +189 -23
  661. package/dist/web/mirror_stream.d.ts +84 -22
  662. package/dist/web/mirror_stream.js +676 -95
  663. package/dist/web/observer_query_redaction.d.ts +6 -0
  664. package/dist/web/observer_query_redaction.js +58 -0
  665. package/dist/web/pane_registry.d.ts +2 -0
  666. package/dist/web/pane_registry.js +86 -22
  667. package/dist/web/tool_image.d.ts +6 -0
  668. package/dist/web/tool_image.js +17 -0
  669. package/dist/web/view_plugin.d.ts +14 -0
  670. package/dist/web/view_plugin.js +23 -1
  671. package/dist/worker/executor.js +31 -12
  672. package/dist/worker/index.d.ts +1 -0
  673. package/dist/worker/toolsets.js +3 -1
  674. package/dist/worker/types.d.ts +12 -1
  675. package/dist/workflows/registry.js +1 -0
  676. package/dist/workflows/registry_handle.d.ts +2 -0
  677. package/dist/workflows/runtime.d.ts +2 -0
  678. package/dist/workflows/runtime.js +1 -0
  679. package/dist/workspace_agent.d.ts +7 -0
  680. package/dist/workspace_agent.js +36 -0
  681. package/dist/workspace_collision.d.ts +76 -0
  682. package/dist/workspace_collision.js +688 -0
  683. package/dist/workspace_layout.d.ts +18 -0
  684. package/dist/workspace_layout.js +121 -0
  685. package/dist/workspace_runtime.d.ts +44 -0
  686. package/dist/workspace_runtime.js +82 -0
  687. package/dist/workspace_session_context.d.ts +62 -0
  688. package/dist/workspace_session_context.js +160 -0
  689. package/dist/zlm-embed.mjs +32518 -9615
  690. package/dist/zlm.js +1 -0
  691. package/node_modules/@zerg/model-contracts/LICENSE.md +375 -0
  692. package/node_modules/@zerg/model-contracts/README.md +90 -0
  693. package/node_modules/@zerg/model-contracts/index.d.ts +20 -0
  694. package/node_modules/@zerg/model-contracts/index.js +223 -0
  695. package/node_modules/@zerg/model-contracts/package.json +8 -0
  696. package/node_modules/glob/node_modules/brace-expansion/index.js +78 -22
  697. package/node_modules/glob/node_modules/brace-expansion/package.json +1 -1
  698. package/node_modules/readdir-glob/node_modules/brace-expansion/index.js +78 -22
  699. package/node_modules/readdir-glob/node_modules/brace-expansion/package.json +1 -1
  700. package/package.json +45 -24
  701. package/packages/model-contracts/LICENSE.md +375 -0
  702. package/packages/model-contracts/README.md +90 -0
  703. package/packages/model-contracts/index.d.ts +20 -0
  704. package/packages/model-contracts/index.js +223 -0
  705. package/packages/model-contracts/package.json +8 -0
  706. package/remote-broker/Dockerfile +10 -0
  707. package/remote-broker/README.md +308 -0
  708. package/remote-broker/archive.py +1227 -0
  709. package/remote-broker/cutover.py +761 -0
  710. package/remote-broker/requirements.txt +5 -0
  711. package/remote-broker/resources.example.json +6 -0
  712. package/remote-broker/resources.write-staging.example.json +18 -0
  713. package/remote-broker/retained.py +686 -0
  714. package/remote-broker/retained_cleanup.py +550 -0
  715. package/remote-broker/server.py +648 -0
  716. package/scripts/build-remote-broker.mjs +13 -0
  717. package/scripts/ensure-local-packages.mjs +6 -0
  718. package/scripts/node-pty-helpers.mjs +103 -0
@@ -1,3 +1,5 @@
1
+ import { exportSessionDiagnostics, formatSessionDiagnosticsMarkdown } from '../../diagnostics/session_export.js';
2
+ import { buildSessionEvidencePackage, saveSessionEvidencePackage } from '../../diagnostics/session_evidence_package.js';
1
3
  function formatMessages(messages) {
2
4
  return messages
3
5
  .map(msg => {
@@ -23,12 +25,59 @@ export const clipboardCommand = {
23
25
  name: 'clipboard',
24
26
  description: 'Copy conversation text to the clipboard',
25
27
  usage: {
26
- default: '<all|last|assistant|user|system>',
28
+ default: '<all|last|assistant|user|system|diagnostic|evidence>',
27
29
  variants: [
28
30
  { when: { 0: ['last'] }, usage: '<all|last|assistant|user|system> [assistant|user|system]' },
31
+ { when: { 0: ['diagnostic'] }, usage: 'diagnostic <markdown|jsonl>' },
32
+ { when: { 0: ['evidence'] }, usage: 'evidence <preview|copy|save <file>>' },
29
33
  ],
30
34
  },
31
35
  handler: async (args, ctx) => {
36
+ if (args[0]?.toLowerCase() === 'evidence') {
37
+ const action = (args[1] ?? 'copy').toLowerCase();
38
+ const destination = args.slice(2).join(' ');
39
+ if (!['preview', 'copy', 'save'].includes(action) || (action === 'save' ? !destination.trim() : args.length > 2)) {
40
+ ctx.addMessage({ role: 'system', content: 'Usage: /clipboard evidence <preview|copy|save <file>> (copy is the default)' });
41
+ return;
42
+ }
43
+ try {
44
+ const pkg = buildSessionEvidencePackage({ sessionId: ctx.getSessionId?.() ?? null,
45
+ messages: ctx.getMessages(), diagnostics: ctx.getDiagnostics?.(), evidence: ctx.getEvidenceSnapshot?.(),
46
+ taskHandoff: ctx.getTaskHandoff?.() ?? null });
47
+ if (action === 'preview')
48
+ ctx.addMessage({ role: 'system', content: pkg.indexMarkdown });
49
+ else if (action === 'copy') {
50
+ await ctx.clipboard.writeText(pkg.indexMarkdown);
51
+ ctx.addMessage({ role: 'system', content: `✓ Copied ZTC evidence package index (${Buffer.byteLength(pkg.indexMarkdown)} bytes; retained checkpoint ${pkg.packageId})` });
52
+ }
53
+ else {
54
+ await saveSessionEvidencePackage(pkg, destination);
55
+ ctx.addMessage({ role: 'system', content: `✓ Saved ZTC evidence package to ${destination} (retained checkpoint ${pkg.packageId}; credentials redacted)` });
56
+ }
57
+ }
58
+ catch (error) {
59
+ ctx.addMessage({ role: 'system', content: `Evidence package error: ${error instanceof Error ? error.message : 'Sharing failed'}` });
60
+ }
61
+ return;
62
+ }
63
+ if (args[0]?.toLowerCase() === 'diagnostic') {
64
+ const format = (args[1] ?? 'markdown').toLowerCase();
65
+ if (format !== 'markdown' && format !== 'jsonl') {
66
+ ctx.addMessage({ role: 'system', content: 'Usage: /clipboard diagnostic <markdown|jsonl>' });
67
+ return;
68
+ }
69
+ try {
70
+ const input = { sessionId: ctx.getSessionId?.() ?? null, messages: ctx.getMessages(), diagnostics: ctx.getDiagnostics?.() };
71
+ const text = format === 'jsonl' ? exportSessionDiagnostics(input) : formatSessionDiagnosticsMarkdown(input);
72
+ await ctx.clipboard.writeText(text);
73
+ ctx.addMessage({ role: 'system', content: `✓ Copied ${text.length} chars (diagnostic ${format}; credentials redacted)` });
74
+ }
75
+ catch (err) {
76
+ const message = err instanceof Error ? err.message : 'Failed to copy diagnostic export';
77
+ ctx.addMessage({ role: 'system', content: `Clipboard error: ${message}` });
78
+ }
79
+ return;
80
+ }
32
81
  const messages = ctx.getMessages();
33
82
  if (messages.length === 0) {
34
83
  ctx.addMessage({ role: 'system', content: 'Clipboard: no messages to copy.' });
@@ -1,5 +1,5 @@
1
1
  import { compactConversation, describeCompaction, smartSummarizer, localSummarizer } from '../../utils/compaction.js';
2
- import { getContextStatus, contextStatusFromUsed, formatTokenCount } from '../../utils/context.js';
2
+ import { estimateConversationTokens, getContextStatus, contextStatusFromUsed, formatTokenCount } from '../../utils/context.js';
3
3
  import { MAX_COMPACTION_TARGET_PERCENT, MIN_COMPACTION_TARGET_PERCENT, resolveCompactionSettings, resolveCompactionTargetPercent, resolveContextTokenBudget, tokenTriggerActive, } from '../../config/compaction.js';
4
4
  export const compactCommand = {
5
5
  name: 'compact',
@@ -7,6 +7,7 @@ export const compactCommand = {
7
7
  usage: '/compact [target%]',
8
8
  handler: async (args, ctx) => {
9
9
  const messages = ctx.getMessages();
10
+ const authoredHistory = JSON.stringify(messages.filter(message => message.role !== 'system'));
10
11
  if (messages.length < 3) {
11
12
  ctx.addMessage({
12
13
  role: 'system',
@@ -18,9 +19,10 @@ export const compactCommand = {
18
19
  // The "before" percentage should match the context bar (the real provider
19
20
  // token count); fall back to the char/4 estimate only before the first call.
20
21
  const realUsed = ctx.getContextTokens?.() ?? 0;
22
+ const catalogWindow = ctx.config.getModelContextWindow?.(model);
21
23
  const status = realUsed > 0
22
- ? contextStatusFromUsed(realUsed, model, ctx.getContextWindow?.())
23
- : getContextStatus(messages, model);
24
+ ? contextStatusFromUsed(realUsed, model, catalogWindow !== undefined ? catalogWindow : ctx.getContextWindow?.())
25
+ : getContextStatus(messages, model, catalogWindow);
24
26
  // An explicit argument wins; otherwise the configured target applies, so
25
27
  // /compact and auto-compaction aim at the same place.
26
28
  const targetPercent = args[0] ? parseInt(args[0], 10) : resolveCompactionTargetPercent(ctx.config.get());
@@ -55,7 +57,7 @@ export const compactCommand = {
55
57
  ? resolveContextTokenBudget(ctx.config.get())
56
58
  : undefined;
57
59
  const targetTokens = budget === undefined
58
- ? undefined
60
+ ? (catalogWindow === undefined ? undefined : Math.max(1, Math.floor((catalogWindow ?? estimateConversationTokens(messages)) * targetPercent / 100)))
59
61
  : Math.floor(budget * (targetPercent / 100));
60
62
  const result = await compactConversation(messages, model, {
61
63
  method: compaction.method,
@@ -65,16 +67,22 @@ export const compactCommand = {
65
67
  keepRecentMin: 10,
66
68
  targetTokens,
67
69
  });
68
- ctx.clearMessages();
69
- for (const msg of result.messages) {
70
- ctx.addMessage({
71
- role: msg.role,
72
- content: msg.content,
73
- ...(msg.toolCalls ? { toolCalls: msg.toolCalls } : {}),
74
- ...(msg.metadata ? { metadata: msg.metadata } : {}),
75
- });
70
+ // The summarizer yields while the host can admit steering or a user clear.
71
+ // Never replace that newer canonical history with an earlier snapshot.
72
+ if (JSON.stringify(ctx.getMessages().filter(message => message.role !== 'system')) !== authoredHistory) {
73
+ ctx.addMessage({ role: 'system', content: 'Conversation changed during compaction; current history is unchanged. Retry against the current conversation.' });
74
+ return;
76
75
  }
77
- const newStatus = getContextStatus(result.messages, model);
76
+ // A summary that could not fit is not a surviving copy of the evicted task.
77
+ // Preserve the authored history rather than silently manufacturing continuity.
78
+ const hasNewSummary = result.messages.some(message => message.metadata?.compactionSummary === true
79
+ && message.content.trim().length > 0 && !messages.some(original => original.id === message.id));
80
+ if (result.method !== 'jev' && result.removed > 0 && !hasNewSummary) {
81
+ ctx.addMessage({ role: 'system', content: 'Compaction summary cannot fit the target; history is unchanged. Choose a larger target.' });
82
+ return;
83
+ }
84
+ ctx.setMessages(result.messages);
85
+ const newStatus = getContextStatus(result.messages, model, catalogWindow);
78
86
  // Reactively shrink the context bar to the compacted size — the backend
79
87
  // won't report this until the next turn, and the bar would otherwise stay
80
88
  // stuck at the pre-compaction (larger) value.
@@ -894,7 +894,10 @@ Usage: /config context-progress-bar <enabled|accent|warning|critical|track|reset
894
894
  return;
895
895
  }
896
896
  case 'effort': {
897
- const EFFORT_LEVELS = CODEX_REASONING_EFFORTS;
897
+ const catalog = ctx.config.getRoutedModelCatalog?.();
898
+ const EFFORT_LEVELS = catalog?.version === 1
899
+ ? catalog.models.find(row => row.owned_by === ctx.config.getProvider() && row.id === getEffectiveModel(ctx))?.capabilities?.reasoning?.choices ?? []
900
+ : CODEX_REASONING_EFFORTS;
898
901
  const CLEAR_WORDS = ['clear', 'default', 'unset', 'reset'];
899
902
  const config = ctx.config.get();
900
903
  const activeEffort = () => `Active (${config.provider} · ${config.model}): ${formatReasoningEffort(resolveCodexEffort(ctx.config.get(), config.provider, config.model))}`;
@@ -55,7 +55,12 @@ export const contextCommand = {
55
55
  const estimated = realTokens <= 0;
56
56
  const usedTokens = estimated ? estimateConversationTokens(messages) : realTokens;
57
57
  // Use the provider-reported window the bar used (Codex) so /context agrees.
58
- const status = contextStatusFromUsed(usedTokens, model, estimated ? undefined : ctx.getContextWindow?.());
58
+ const catalogWindow = ctx.config.getModelContextWindow?.(model);
59
+ const status = contextStatusFromUsed(usedTokens, model, catalogWindow !== undefined ? catalogWindow : estimated ? undefined : ctx.getContextWindow?.());
60
+ if (status.total === 0) {
61
+ ctx.addMessage({ role: 'system', content: `Context: ${formatTokens(usedTokens)} tokens${estimated ? ' (estimated)' : ''}. Context limit is unknown for this Router model.` });
62
+ return;
63
+ }
59
64
  const total = status.total;
60
65
  const usedPct = status.percentage;
61
66
  const freeTokens = Math.max(0, total - usedTokens);
@@ -0,0 +1,2 @@
1
+ import type { Command } from './types.js';
2
+ export declare const desktopCommand: Command;
@@ -0,0 +1,29 @@
1
+ import { installDesktopCli } from '../../desktop/cli_shim.js';
2
+ export const desktopCommand = {
3
+ name: 'desktop',
4
+ description: 'Install the bundled app’s optional ztc terminal command',
5
+ agentRunnable: false,
6
+ usage: '/desktop install-cli [directory]',
7
+ handler: async (args, ctx) => {
8
+ if (ctx.commandOrigin === 'agent') {
9
+ ctx.addMessage({ role: 'system', content: 'CLI installation requires the user to type /desktop install-cli [directory].' });
10
+ return;
11
+ }
12
+ if (args[0] !== 'install-cli' || args.length < 1 || args.length > 2) {
13
+ ctx.addMessage({ role: 'system', content: 'Usage: /desktop install-cli [directory]' });
14
+ return;
15
+ }
16
+ try {
17
+ const result = await installDesktopCli(args[1]);
18
+ const notice = result.pathStatus === 'selected'
19
+ ? 'Your current PATH selects this bundled command.'
20
+ : result.pathStatus === 'shadowed'
21
+ ? `Your current PATH selects ${result.selectedCommand} first. Use the installed path directly or move its directory earlier in PATH.`
22
+ : 'Use this path directly or add its directory to PATH in your shell configuration.';
23
+ ctx.addMessage({ role: 'system', content: `${result.status === 'installed' ? 'Installed' : 'Already installed'}: ${result.path}\n${notice}\nYour PATH and shell configuration were not changed.` });
24
+ }
25
+ catch (error) {
26
+ ctx.addMessage({ role: 'system', content: `CLI installation failed: ${error.message}` });
27
+ }
28
+ },
29
+ };
@@ -1,15 +1,23 @@
1
1
  import { CODEX_REASONING_EFFORTS } from '../../config/types.js';
2
2
  import { resolveCodexEffort } from '../../config/defaults.js';
3
3
  import { getSupportedCodexReasoningEfforts } from '../../utils/models.js';
4
- import { formatReasoningEffort, parseReasoningSelection } from '../../utils/reasoning.js';
4
+ import { formatReasoningEffort, parseReasoningSelection, reasoningCommandChoices } from '../../utils/reasoning.js';
5
+ import { resolveRouterModel } from '../../utils/router_catalog.js';
5
6
  async function configureReasoning(kind, args, ctx) {
6
7
  const config = ctx.config.get();
7
8
  const provider = ctx.config.getProvider?.() || config.provider || 'anthropic';
8
9
  const model = ctx.config.getModel?.() || config.model;
9
- const current = resolveCodexEffort(config, provider, model);
10
- const supported = getSupportedCodexReasoningEfforts(model, provider);
10
+ const surface = ctx.config.getReasoningWireSurface?.(provider, model)
11
+ ?? (config.authMode === 'zrouter' || provider === 'openai_compatible' ? 'chat_tools' : 'native_api');
12
+ const catalog = ctx.config.getRoutedModelCatalog?.();
13
+ const capabilities = catalog?.version === 1 ? resolveRouterModel(catalog, provider, model)?.capabilities : undefined;
14
+ const current = resolveCodexEffort(config, provider, model, capabilities ?? surface);
15
+ const supported = catalog?.version === 1 ? capabilities?.reasoning?.choices ?? [] : getSupportedCodexReasoningEfforts(model, provider, surface);
16
+ const contract = ctx.config.getReasoningContract?.(provider, model)
17
+ ?? (catalog?.version === 1 ? capabilities?.reasoning ?? [] : surface);
18
+ const thinkingChoices = reasoningCommandChoices('thinking', provider, model, contract);
11
19
  const status = () => {
12
- const effective = resolveCodexEffort(ctx.config.get(), provider, model);
20
+ const effective = resolveCodexEffort(ctx.config.get(), provider, model, capabilities ?? surface);
13
21
  // A startup flag is this process's value, never the saved default, so say
14
22
  // where an effort that came from one is coming from.
15
23
  const processEffort = ctx.config.getCodexEffortOverride?.();
@@ -20,7 +28,7 @@ async function configureReasoning(kind, args, ctx) {
20
28
  ctx.addMessage({ role: 'system', content: status() +
21
29
  (supported?.length === 0 ? '\nThis model does not support a reasoning-effort setting.' :
22
30
  `\nSupported: ${(supported ?? CODEX_REASONING_EFFORTS).join(', ')}. /effort default inherits provider/global defaults.`) +
23
- (supported?.includes('none') ? '\n/thinking off disables reasoning; /thinking on enables it.' : '') });
31
+ (thinkingChoices.length ? `\nThinking settings: ${thinkingChoices.join(', ')}.` : '') });
24
32
  return;
25
33
  }
26
34
  if (args.length !== 1) {
@@ -29,7 +37,7 @@ async function configureReasoning(kind, args, ctx) {
29
37
  }
30
38
  let level;
31
39
  try {
32
- level = parseReasoningSelection(provider, model, current, { [kind]: args[0] });
40
+ level = parseReasoningSelection(provider, model, current, { [kind]: args[0] }, contract);
33
41
  }
34
42
  catch (error) {
35
43
  ctx.addMessage({ role: 'system', content: error.message });
@@ -0,0 +1,3 @@
1
+ import type { Command } from './types.js';
2
+ export declare function environmentOperationInProgress(sessionId: string): boolean;
3
+ export declare const environmentCommand: Command;
@@ -0,0 +1,109 @@
1
+ import { createEnvironment, getEnvironment, listEnvironments, openEnvironment, releaseEnvironment, checkpointEnvironment, restoreEnvironment, pauseEnvironment, resumeEnvironment, discardEnvironment, addEnvironmentNote, startEnvironmentService, environmentForWorkspace, environmentSummary, } from '../../environment/store.js';
2
+ import { activeProfile } from '../../config/profiles.js';
3
+ const usage = '/environment [list|create <name>|open <name>|status [--json]|checkpoint [label]|restore <ID>|pause|resume|leave|note <text>|service start <name> <command>|discard]';
4
+ const activeOperations = new Set();
5
+ export function environmentOperationInProgress(sessionId) { return activeOperations.has(sessionId); }
6
+ export const environmentCommand = {
7
+ name: 'environment', description: 'Manage durable local workspaces, checkpoints and services', usage, category: 'core',
8
+ handler: async (args, ctx) => {
9
+ const say = (content) => ctx.addMessage({ role: 'system', content });
10
+ const action = args[0] ?? 'status';
11
+ let operationSession;
12
+ try {
13
+ if (ctx.commandOrigin === 'agent' && !['list', 'status'].includes(action))
14
+ throw new Error('Environment lifecycle requires an operator command.');
15
+ if (!ctx.environmentAvailable?.())
16
+ throw new Error('Local environment management is unavailable in this runtime.');
17
+ if (!['list', 'status'].includes(action) && ctx.isAgentRunning?.())
18
+ throw new Error('Wait for the active agent turn to finish before changing its environment.');
19
+ const sessionId = ctx.getSessionId?.();
20
+ if (!sessionId)
21
+ throw new Error('Environment management requires a persistent ZTC session.');
22
+ if (!['list', 'status'].includes(action)) {
23
+ if (activeOperations.has(sessionId))
24
+ throw new Error('Wait for the current environment operation to finish.');
25
+ activeOperations.add(sessionId);
26
+ operationSession = sessionId;
27
+ }
28
+ if (action === 'list') {
29
+ say(JSON.stringify((await listEnvironments()).map(environmentSummary), null, 2));
30
+ return;
31
+ }
32
+ const current = ctx.getEnvironment?.() ?? await environmentForWorkspace(ctx.shell.getCwd());
33
+ if (action === 'create' || action === 'open') {
34
+ if (current && current.name !== args[1])
35
+ throw new Error('Leave the current environment before opening another.');
36
+ const returnCwd = ctx.shell.getCwd();
37
+ const record = action === 'create' ? await createEnvironment(args[1] ?? '', sessionId) : await openEnvironment(args[1] ?? '', sessionId);
38
+ await ctx.shell.setCwd(record.workspacePath);
39
+ await ctx.environmentChanged?.(record.name, current ? undefined : returnCwd);
40
+ ctx.reloadAgent({ defer: true });
41
+ say(`Environment ${action === 'create' ? 'created' : 'opened'}: ${record.name}\nWorkspace: ${record.workspacePath}\nCredentials: profile ${record.credentialProfile}. Services are never restarted automatically.`);
42
+ return;
43
+ }
44
+ if (!current)
45
+ throw new Error('No environment open. Use /environment create <name> or open <name>.');
46
+ const record = await getEnvironment(current.name);
47
+ if (record.id !== current.id)
48
+ throw new Error('The environment was replaced; inspect it before recovery.');
49
+ if (action === 'status') {
50
+ say(JSON.stringify(environmentSummary(record), null, 2));
51
+ return;
52
+ }
53
+ if (record.credentialProfile !== activeProfile())
54
+ throw new Error(`Select profile ${record.credentialProfile} before changing this environment.`);
55
+ let message;
56
+ if (action === 'checkpoint') {
57
+ const point = await checkpointEnvironment(record.name, sessionId, args.slice(1).join(' ') || 'Checkpoint');
58
+ message = `Checkpoint created: ${point.id} · ${point.files.filter(f => f.kind !== 'directory').length} retained files`;
59
+ }
60
+ else if (action === 'restore') {
61
+ const restored = await restoreEnvironment(record.name, sessionId, args[1] ?? '');
62
+ // A rename leaves process.cwd() in the recovery backup until explicitly rebound.
63
+ await ctx.shell.setCwd(restored.workspacePath);
64
+ message = `Environment restored: ${restored.recovery?.checkpointId}\n${restored.recovery?.retainedFiles} files retained. Services needing explicit restart: ${restored.recovery?.servicesNeedingRestart.join(', ') || 'none'}\nExternal symlinks requiring separate recovery: ${restored.recovery?.externalLinks.join(', ') || 'none'}`;
65
+ }
66
+ else if (action === 'pause') {
67
+ await pauseEnvironment(record.name, sessionId);
68
+ message = 'Environment paused. Workspace and dependencies retained. Agent turns require /environment resume.';
69
+ }
70
+ else if (action === 'resume') {
71
+ await resumeEnvironment(record.name, sessionId);
72
+ message = 'Environment resumed. Services require explicit start.';
73
+ }
74
+ else if (action === 'note') {
75
+ await addEnvironmentNote(record.name, sessionId, args.slice(1).join(' '));
76
+ message = 'Setup note saved. Future agent turns receive this note.';
77
+ }
78
+ else if (action === 'service' && args[1] === 'start') {
79
+ const config = ctx.config.get();
80
+ const permissionId = config.permissionProfile || 'trusted';
81
+ const receipt = await startEnvironmentService(record.name, sessionId, args[2] ?? '', args.slice(3).join(' '), {
82
+ profileId: permissionId, profile: ctx.config.getEffectivePermissionProfile?.(permissionId), sandbox: config.sandbox,
83
+ }, ctx.shell.getCwd());
84
+ message = `Service launching: ${receipt.name}\nDirectory: ${receipt.cwd}\nLog: ${receipt.logPath}\nUse /environment status to check its receipt; launch does not guarantee readiness.`;
85
+ }
86
+ else if (action === 'leave' || action === 'discard') {
87
+ const archive = action === 'discard' ? await discardEnvironment(record.name, sessionId) : undefined;
88
+ if (!archive)
89
+ await releaseEnvironment(record.name, sessionId);
90
+ await ctx.environmentChanged?.(null);
91
+ ctx.reloadAgent({ defer: true });
92
+ say(archive ? `Environment discarded to recovery archive: ${archive}` : 'Environment left. Files and running services retained.');
93
+ return;
94
+ }
95
+ else
96
+ throw new Error(usage);
97
+ await ctx.environmentChanged?.(record.name);
98
+ ctx.reloadAgent({ defer: true });
99
+ say(message);
100
+ }
101
+ catch (error) {
102
+ say(`Environment: ${error instanceof Error ? error.message : String(error)}`);
103
+ }
104
+ finally {
105
+ if (operationSession)
106
+ activeOperations.delete(operationSession);
107
+ }
108
+ },
109
+ };
@@ -0,0 +1,2 @@
1
+ import type { Command } from './types.js';
2
+ export declare const evidenceCommand: Command;
@@ -0,0 +1,9 @@
1
+ import { formatEvidenceContext } from '../runtime/evidence.js';
2
+ export const evidenceCommand = {
3
+ name: 'evidence', description: 'Inspect retained observations and interpretation sources', usage: '/evidence',
4
+ handler: (_args, ctx) => {
5
+ const snapshot = ctx.getEvidenceSnapshot?.();
6
+ ctx.addMessage({ role: 'system', content: !snapshot ? 'Retained evidence unavailable in this host.'
7
+ : snapshot.records.length ? formatEvidenceContext(snapshot) : 'No retained evidence in this session.' });
8
+ },
9
+ };
@@ -7,7 +7,8 @@
7
7
  * would have decided. A task argument becomes the child's first message.
8
8
  */
9
9
  async function createSidePane(args, ctx, commandName) {
10
- const task = args.join(' ').trim();
10
+ const task = args.join(' ');
11
+ const hasTask = task.trim().length > 0;
11
12
  const createZtcPane = ctx.zmux?.createZtcPane;
12
13
  if (!createZtcPane) {
13
14
  ctx.addMessage({
@@ -16,13 +17,13 @@ async function createSidePane(args, ctx, commandName) {
16
17
  });
17
18
  return;
18
19
  }
19
- const result = await createZtcPane(task ? { task } : {});
20
+ const result = await createZtcPane(hasTask ? { task } : {});
20
21
  if (result.error) {
21
22
  ctx.addMessage({ role: 'system', content: `/${commandName} could not open a pane: ${result.error}` });
22
23
  return;
23
24
  }
24
25
  const where = result.cwd ? ` in ${result.cwd}` : '';
25
- const handoff = task ? ' and sent it the task' : '';
26
+ const handoff = hasTask ? ' with its startup task' : '';
26
27
  ctx.addMessage({
27
28
  role: 'system',
28
29
  content: `Opened ZTC pane ${result.paneId}${where}${handoff}.`,
@@ -53,6 +53,9 @@
53
53
  * stop decision live here in one pure, unit-tested place: decideContinuation().
54
54
  */
55
55
  import { Command } from './types.js';
56
+ import type { Message, AgentEvent } from '../../types.js';
57
+ import type { EvidenceSnapshot } from '../runtime/evidence.js';
58
+ import { type GoalPlateauCriteria, type GoalPlateauState, type GoalExitReason } from './goal_exit.js';
56
59
  export type GoalStatus = 'active' | 'paused' | 'complete' | 'budget_limited' | 'blocked';
57
60
  export interface GoalRecord {
58
61
  /** Unique identity for this goal instance, regenerated on every `set`. A fresh
@@ -87,6 +90,18 @@ export interface GoalRecord {
87
90
  blockedSource?: GoalBlockedSource;
88
91
  createdAt: number;
89
92
  updatedAt: number;
93
+ plateau?: GoalPlateauState;
94
+ exitReason?: GoalExitReason;
95
+ /** Exact authored request provenance; its original text remains in canonical user evidence. */
96
+ sustained?: {
97
+ sourceMessageId: string;
98
+ sourceTextSha256: string;
99
+ hostExitOnly: boolean;
100
+ };
101
+ blockedAudit?: {
102
+ condition: string;
103
+ streak: number;
104
+ };
90
105
  }
91
106
  /** Why a goal reached `blocked`. Drives the wording, never the behaviour. */
92
107
  export type GoalBlockedSource = 'agent' | 'execution';
@@ -102,6 +117,10 @@ export interface GoalTurnAccounting {
102
117
  }
103
118
  /** Facts about the turn that just finished, fed to the continuation decision. */
104
119
  export interface GoalTurnFacts extends GoalTurnAccounting {
120
+ /** Agent-reported missing prerequisite; this is not a host verification claim. */
121
+ blockedReason?: string;
122
+ /** Canonical host evidence, never reported scores or parsed model prose. */
123
+ evidence?: EvidenceSnapshot;
105
124
  /** Number of tool calls the just-finished turn made. */
106
125
  toolCallCount: number;
107
126
  /**
@@ -394,6 +413,7 @@ export declare function parseGoalArgs(args: string[]): {
394
413
  objective: string;
395
414
  tokenBudget?: number;
396
415
  maxTurns?: number;
416
+ plateau?: GoalPlateauCriteria;
397
417
  } | {
398
418
  error: string;
399
419
  };
@@ -440,15 +460,27 @@ export declare class GoalManager {
440
460
  * gets a fresh final turn.
441
461
  */
442
462
  private finalTurnAccounted;
463
+ private sustainedFirstTurnPending;
443
464
  constructor(clock?: GoalClock);
444
465
  /** A defensive copy so callers cannot mutate internal state. */
445
466
  get(): GoalRecord | null;
467
+ /** Admit an explicit authored sustained-work request into the existing loop, without deriving extra scope or budget. */
468
+ adoptUserIntent(message: Message, opts?: {
469
+ configuredMaxTurns?: number | null;
470
+ }): GoalRecord | null;
471
+ /** The authored opening turn spends the same budget as later automatic turns. */
472
+ accountSustainedFirstTurn(facts: GoalTurnFacts): GoalContinuationDecision | null;
473
+ /** Host wait events retain an owned job reference; tool text never establishes waiting. */
474
+ observeHostWait(event: Extract<AgentEvent, {
475
+ type: 'command_wait' | 'command_wait_end';
476
+ }>): GoalRecord | null;
446
477
  /** Start a brand-new goal (replaces any existing one) and arm the first turn. */
447
478
  set(objective: string, opts?: {
448
479
  tokenBudget?: number;
449
480
  maxTurns?: number;
481
+ plateau?: GoalPlateauCriteria;
450
482
  }): GoalRecord;
451
- pause(): GoalRecord | null;
483
+ pause(kind?: 'user_pause' | 'user_cancelled'): GoalRecord | null;
452
484
  /**
453
485
  * Re-activate a paused / budget-limited goal and arm a continuation turn.
454
486
  * Resuming also clears whatever stop condition fired so the goal makes