@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
@@ -99,23 +99,35 @@ function isValidResponsesTerminalEvent(eventType, value, observedOutput) {
99
99
  && value.status === expectedStatus
100
100
  && isValidResponsesTerminal(value, observedOutput);
101
101
  }
102
- export const MAX_RESPONSES_RESPONSE_BYTES = 1_048_576;
103
- function responseLimitError() {
104
- return new Error(`Responses API response exceeded ${MAX_RESPONSES_RESPONSE_BYTES} bytes`);
102
+ export const MAX_RESPONSES_RESPONSE_BYTES = 64 * 1024 * 1024;
103
+ export const MAX_PROVIDER_ERROR_BYTES = 64 * 1024;
104
+ export const MAX_RESPONSES_SSE_EVENT_BYTES = 8 * 1024 * 1024;
105
+ // One turn cannot retain an unbounded sequence of individually valid items.
106
+ export const MAX_RESPONSES_SSE_STREAM_BYTES = 32 * 1024 * 1024;
107
+ class ResponsesBodyLimitError extends Error {
108
+ constructor(maxBytes) {
109
+ super(`Responses API response exceeded ${maxBytes} bytes`);
110
+ }
111
+ }
112
+ function responseLimitError(maxBytes) {
113
+ return new ResponsesBodyLimitError(maxBytes);
105
114
  }
106
- function rejectOversizedDeclaredBody(response) {
115
+ function rejectOversizedDeclaredBody(response, maxBytes) {
116
+ if (!Number.isSafeInteger(maxBytes) || maxBytes < 1) {
117
+ throw new Error('Responses API byte limit must be a positive safe integer');
118
+ }
107
119
  const declaredLength = Number(response.headers.get('content-length'));
108
- if (Number.isFinite(declaredLength) && declaredLength > MAX_RESPONSES_RESPONSE_BYTES) {
109
- throw responseLimitError();
120
+ if (Number.isFinite(declaredLength) && declaredLength > maxBytes) {
121
+ throw responseLimitError(maxBytes);
110
122
  }
111
123
  }
112
124
  /** Read a provider body without allowing fetch helpers to buffer it without limit. */
113
- export async function readBoundedResponsesText(response) {
114
- rejectOversizedDeclaredBody(response);
125
+ export async function readBoundedResponsesText(response, maxBytes = MAX_RESPONSES_RESPONSE_BYTES) {
126
+ rejectOversizedDeclaredBody(response, maxBytes);
115
127
  if (!response.body) {
116
128
  const text = await response.text();
117
- if (Buffer.byteLength(text, 'utf8') > MAX_RESPONSES_RESPONSE_BYTES) {
118
- throw responseLimitError();
129
+ if (Buffer.byteLength(text, 'utf8') > maxBytes) {
130
+ throw responseLimitError(maxBytes);
119
131
  }
120
132
  return text;
121
133
  }
@@ -128,9 +140,9 @@ export async function readBoundedResponsesText(response) {
128
140
  const { done, value } = await reader.read();
129
141
  if (done)
130
142
  break;
131
- if (totalBytes + value.byteLength > MAX_RESPONSES_RESPONSE_BYTES) {
143
+ if (totalBytes + value.byteLength > maxBytes) {
132
144
  await reader.cancel().catch(() => undefined);
133
- throw responseLimitError();
145
+ throw responseLimitError(maxBytes);
134
146
  }
135
147
  totalBytes += value.byteLength;
136
148
  parts.push(decoder.decode(value, { stream: true }));
@@ -142,6 +154,19 @@ export async function readBoundedResponsesText(response) {
142
154
  reader.releaseLock();
143
155
  }
144
156
  }
157
+ /** Keep the HTTP status authoritative when an oversized diagnostic must be omitted. */
158
+ export async function readBoundedProviderError(response) {
159
+ try {
160
+ return await readBoundedResponsesText(response, MAX_PROVIDER_ERROR_BYTES);
161
+ }
162
+ catch (error) {
163
+ if (!(error instanceof ResponsesBodyLimitError))
164
+ throw error;
165
+ // Declared oversize responses fail before acquiring a reader; cancel those too.
166
+ await response.body?.cancel().catch(() => undefined);
167
+ return `Provider response exceeded ${MAX_PROVIDER_ERROR_BYTES} bytes; body omitted.`;
168
+ }
169
+ }
145
170
  // ─── Exported helpers for input/output conversion ───────────────────
146
171
  /** Convert internal LlmMessage[] into Responses API input items. */
147
172
  export function buildResponsesInput(messages) {
@@ -281,8 +306,9 @@ export function parseResponsesOutput(data) {
281
306
  * request was sent with `stream: true`). If the body isn't readable (rare), it
282
307
  * buffers the SSE text and parses it whole — the same events, just not live.
283
308
  */
284
- export async function* streamResponsesSSE(response) {
285
- rejectOversizedDeclaredBody(response);
309
+ export async function* streamResponsesSSE(response, maxBytes = MAX_RESPONSES_SSE_STREAM_BYTES) {
310
+ rejectOversizedDeclaredBody(response, maxBytes);
311
+ const streamLimit = Math.min(maxBytes, MAX_RESPONSES_SSE_STREAM_BYTES);
286
312
  const outputItems = [];
287
313
  let usage;
288
314
  let terminalEventSeen = false;
@@ -371,49 +397,67 @@ export async function* streamResponsesSSE(response) {
371
397
  if (response.body) {
372
398
  const reader = response.body.getReader();
373
399
  const decoder = new TextDecoder();
374
- let buffer = '';
400
+ const lineParts = [];
401
+ let lineBytes = 0;
375
402
  let totalBytes = 0;
403
+ const appendLinePart = (part) => {
404
+ lineBytes += Buffer.byteLength(part, 'utf8');
405
+ if (lineBytes > MAX_RESPONSES_SSE_EVENT_BYTES) {
406
+ throw new Error(`Responses SSE event exceeded ${MAX_RESPONSES_SSE_EVENT_BYTES} bytes`);
407
+ }
408
+ if (part)
409
+ lineParts.push(part);
410
+ };
376
411
  try {
377
412
  for (;;) {
378
413
  const { done, value } = await reader.read();
379
414
  if (done)
380
415
  break;
381
- const remaining = MAX_RESPONSES_RESPONSE_BYTES - totalBytes;
416
+ const remaining = streamLimit - totalBytes;
382
417
  const overflow = value.byteLength > remaining;
383
- const accepted = overflow ? value.subarray(0, Math.max(0, remaining)) : value;
418
+ const accepted = overflow ? value.subarray(0, remaining) : value;
384
419
  totalBytes += accepted.byteLength;
385
- buffer += decoder.decode(accepted, { stream: true });
420
+ const decoded = decoder.decode(accepted, { stream: true });
421
+ let offset = 0;
386
422
  let nl;
387
- while ((nl = buffer.indexOf('\n')) >= 0) {
388
- handleLine(buffer.slice(0, nl));
389
- buffer = buffer.slice(nl + 1);
390
- // Drain per-line, not per-chunk: a delta and response.failed can share a
391
- // single chunk. If we buffered until every line parsed, handleLine would
392
- // throw on the failure BEFORE the queued delta yields — the agent would
393
- // then see no delta and re-call generate() as a buffered fallback.
423
+ // Search only newly decoded bytes. Join a split line once, when its
424
+ // delimiter arrives, instead of repeatedly rescanning its full prefix.
425
+ while ((nl = decoded.indexOf('\n', offset)) >= 0) {
426
+ appendLinePart(decoded.slice(offset, nl));
427
+ handleLine(lineParts.join(''));
428
+ lineParts.length = 0;
429
+ lineBytes = 0;
430
+ offset = nl + 1;
394
431
  while (pending.length)
395
432
  yield pending.shift();
396
433
  }
434
+ appendLinePart(decoded.slice(offset));
397
435
  if (overflow) {
398
- await reader.cancel().catch(() => undefined);
399
- throw responseLimitError();
436
+ if (maxBytes < MAX_RESPONSES_SSE_STREAM_BYTES)
437
+ throw responseLimitError(maxBytes);
438
+ throw new Error(`Responses SSE stream exceeded ${MAX_RESPONSES_SSE_STREAM_BYTES} bytes`);
400
439
  }
401
440
  }
402
- // Flush a trailing line with no terminating newline (spec-valid) — else
403
- // the final response.completed (usage) / last item would be lost.
404
- if (buffer.trim())
405
- handleLine(buffer);
441
+ appendLinePart(decoder.decode());
442
+ if (lineParts.length)
443
+ handleLine(lineParts.join(''));
406
444
  while (pending.length)
407
445
  yield pending.shift();
408
446
  }
447
+ catch (error) {
448
+ await reader.cancel().catch(() => undefined);
449
+ throw error;
450
+ }
409
451
  finally {
410
452
  reader.releaseLock();
411
453
  }
412
454
  }
413
455
  else {
414
456
  // No streamable body (rare) — buffer the SSE text and parse it whole.
415
- const text = await readBoundedResponsesText(response);
457
+ const text = await readBoundedResponsesText(response, streamLimit);
416
458
  for (const rawLine of text.split('\n')) {
459
+ if (Buffer.byteLength(rawLine, 'utf8') > MAX_RESPONSES_SSE_EVENT_BYTES)
460
+ throw new Error(`Responses SSE event exceeded ${MAX_RESPONSES_SSE_EVENT_BYTES} bytes`);
417
461
  handleLine(rawLine);
418
462
  // Drain per-line so a same-payload delta yields before a later failure throws.
419
463
  while (pending.length)
@@ -520,7 +564,7 @@ export class OpenAIResponsesBackend extends BaseBackend {
520
564
  'Check network access, proxy configuration, and API key/model access.');
521
565
  }
522
566
  if (!response.ok) {
523
- const errorText = await readBoundedResponsesText(response);
567
+ const errorText = await readBoundedProviderError(response);
524
568
  throw new Error(`API error (${response.status}): ${errorText}`);
525
569
  }
526
570
  return response;
@@ -7,3 +7,4 @@ export declare function normalizeProviderId(provider: string): string;
7
7
  export declare function isCodexAppServerProvider(provider: string): boolean;
8
8
  export declare function isCodexLegacyProvider(provider: string): boolean;
9
9
  export declare function getProviderDisplayName(provider: string): string;
10
+ export declare function isLocalSubscriptionProvider(provider: string): boolean;
@@ -37,3 +37,7 @@ export function getProviderDisplayName(provider) {
37
37
  return provider;
38
38
  }
39
39
  }
40
+ export function isLocalSubscriptionProvider(provider) {
41
+ return ['codex_app_server', 'codex_legacy', 'claude_code', 'claude-code', 'claude_code_direct', 'claude-code-direct', 'kimi_code', 'kimi-code']
42
+ .includes(normalizeProviderId(provider));
43
+ }
@@ -1,7 +1,8 @@
1
1
  import { randomUUID } from 'node:crypto';
2
2
  import { isIncompleteModelResponse } from '../completion_state.js';
3
3
  import { transportErrorCode } from './transport_errors.js';
4
- /** One collector per logical backend call. Contains counters and timings, never prompts or credentials. */
4
+ import { BackendHttpError } from './http_error.js';
5
+ /** One collector per logical backend call, with timings and bounded, redacted HTTP failure details. */
5
6
  class RequestMeter {
6
7
  request;
7
8
  metrics;
@@ -81,11 +82,16 @@ class RequestMeter {
81
82
  this.metrics.outcome = isIncompleteModelResponse(event.stopReason) ? 'error' : 'success';
82
83
  }
83
84
  observeStreamError(error) {
85
+ this.observeError(error);
84
86
  const attempt = this.metrics.transportAttempts?.at(-1);
85
87
  if (!attempt || attempt.phase === 'before_headers')
86
88
  return;
87
89
  attempt.phase = 'stream';
88
- attempt.errorCode = transportErrorCode(error);
90
+ attempt.errorCode = transportErrorCode(error) ?? attempt.errorCode;
91
+ }
92
+ observeError(error) {
93
+ if (error instanceof BackendHttpError)
94
+ this.metrics.httpError = error.httpError;
89
95
  }
90
96
  finish() {
91
97
  this.metrics.totalMs = this.elapsed();
@@ -105,6 +111,10 @@ export async function measureResponse(request, generate) {
105
111
  meter.metrics.outcome = isIncompleteModelResponse(response.stopReason) ? 'error' : 'success';
106
112
  return response;
107
113
  }
114
+ catch (error) {
115
+ meter.observeError(error);
116
+ throw error;
117
+ }
108
118
  finally {
109
119
  meter.finish();
110
120
  }
@@ -1,5 +1,4 @@
1
- import { ToolDefinition } from '../../types.js';
2
- import type { Message } from '../../types.js';
1
+ import type { ToolDefinition, Message } from '../../types.js';
3
2
  export interface RequestTextBlock {
4
3
  type: 'text';
5
4
  text: string;
@@ -37,7 +36,17 @@ export interface ToolUseRequestBlock {
37
36
  name: string;
38
37
  input: Record<string, unknown>;
39
38
  }
40
- export type RequestContentBlock = RequestTextBlock | RequestImageBlock | RequestVideoBlock | ToolResultBlock | ToolUseRequestBlock;
39
+ export interface ThinkingBlock {
40
+ type: 'thinking';
41
+ thinking: string;
42
+ /** Opaque provider signature; never alter or synthesize it. */
43
+ signature: string;
44
+ }
45
+ export interface RedactedThinkingBlock {
46
+ type: 'redacted_thinking';
47
+ data: string;
48
+ }
49
+ export type RequestContentBlock = RequestTextBlock | RequestImageBlock | RequestVideoBlock | ToolResultBlock | ToolUseRequestBlock | ThinkingBlock | RedactedThinkingBlock;
41
50
  export interface LlmMessage {
42
51
  role: 'user' | 'assistant';
43
52
  content: string | RequestContentBlock[];
@@ -56,7 +65,7 @@ export interface ToolUseBlock {
56
65
  name: string;
57
66
  input: Record<string, unknown>;
58
67
  }
59
- export type ContentBlock = TextBlock | ToolUseBlock;
68
+ export type ContentBlock = TextBlock | ToolUseBlock | ThinkingBlock | RedactedThinkingBlock;
60
69
  /**
61
70
  * An action surfaced by a provider that runs its OWN tool/command loop (e.g. the
62
71
  * official Codex App Server). Unlike ZTC-owned tool calls — where the model
@@ -65,6 +74,13 @@ export type ContentBlock = TextBlock | ToolUseBlock;
65
74
  * of showing only the provider's final prose. See `codex_app_server.ts`.
66
75
  */
67
76
  export type BackendObservation = {
77
+ /** Provider-scoped invocation identity; never a host execution receipt. */
78
+ native?: {
79
+ provider: string;
80
+ threadId: string;
81
+ turnId: string;
82
+ };
83
+ } & ({
68
84
  kind: 'command';
69
85
  id: string;
70
86
  command: string;
@@ -83,11 +99,69 @@ export type BackendObservation = {
83
99
  label: string;
84
100
  detail?: Record<string, unknown>;
85
101
  output?: string;
102
+ status?: string;
103
+ artifacts?: Array<{
104
+ path: string;
105
+ sha256?: string;
106
+ }>;
107
+ partial?: boolean;
108
+ isError?: boolean;
109
+ });
110
+ export type BufferedRecoveryPolicy = {
111
+ version: 'codex-buffered-idle-v1' | 'codex-buffered-idle-overload-v1' | 'codex-buffered-idle-overload-interrupted-v1';
112
+ idleTimeoutMs: 8000;
113
+ } | {
114
+ version: 'codex-buffered-idle-overload-duration-v1' | 'codex-buffered-idle-overload-duration-interrupted-v1';
115
+ idleTimeoutMs: 8000;
116
+ firstBodyTimeoutMs: 30000;
117
+ };
118
+ export interface BufferedTransportAttempt {
119
+ /** Absent in legacy wall-clock captures. New stamps use one anchored monotonic clock. */
120
+ timingClock?: 'monotonic-epoch-v1';
121
+ type: 'started' | 'settled';
122
+ attempt: number;
123
+ trigger: 'initial' | 'body-idle' | 'auth-refresh' | 'provider-overload' | 'body-duration' | 'body-interrupted';
124
+ bodySha256: string;
125
+ bodyBytes: number;
126
+ startedAtMs: number;
127
+ deadlineAtMs: number;
128
+ headersAtMs?: number;
129
+ status?: number;
130
+ bytes: number;
131
+ chunks: number;
132
+ /** Final logical usage is separate; a cancelled physical attempt's cost is unknown. */
133
+ usage: 'unknown';
134
+ firstChunkAtMs?: number;
135
+ lastChunkAtMs?: number;
136
+ semanticTerminal?: string;
137
+ semanticTerminalAtMs?: number;
138
+ providerFailure?: 'provider-overload';
139
+ eofAtMs?: number;
140
+ abortAtMs?: number;
141
+ cancelledAtMs?: number;
142
+ endedAtMs?: number;
143
+ reason?: 'complete' | 'idle' | 'abort' | 'http-error' | 'transport-error' | 'consumer-cancel' | 'body-duration' | 'body-interrupted';
144
+ }
145
+ export type BufferedRecoveryRequest = BufferedRecoveryPolicy & {
146
+ deadlineAtMs: number;
147
+ onAttempt?: (event: BufferedTransportAttempt) => void;
86
148
  };
87
149
  export interface BackendRequest {
88
150
  model: string;
89
151
  /** Omit to use the provider default; numeric values are explicit caps. */
90
152
  maxTokens?: number;
153
+ /** Explicit buffered Codex opt-in. Streaming and absent options keep legacy behavior. */
154
+ bufferedRecovery?: BufferedRecoveryRequest;
155
+ /** Codex subscription transport cap, including SSE framing and repeated output.
156
+ * This bounds client consumption, not hidden reasoning or billed tokens.
157
+ * Absent keeps the Codex 1 MiB default; simulations explicitly allow 8 MiB. */
158
+ maxResponseBytes?: number;
159
+ /** Codex subscription only: append "Aim for at most <maxTokens> output tokens."
160
+ * to the instructions. Simulations opt in; the agent does not. */
161
+ outputTokenGuidance?: boolean;
162
+ /** Schema guidance for Codex responses. Callers still validate returned JSON. */
163
+ outputSchema?: Record<string, unknown>;
164
+ outputSchemaStrict?: boolean;
91
165
  system: string;
92
166
  messages: LlmMessage[];
93
167
  tools: ToolDefinition[];
@@ -151,8 +225,11 @@ export interface BackendRequest {
151
225
  /**
152
226
  * Sink for provider-owned tool/command observations (Codex App Server runs its
153
227
  * own harness). Backends that own execution call this as each action completes;
154
- * the agent maps observations to tool_start/tool_end/reasoning_delta events so
155
- * they appear in the mirror. Ignored by ZTC-tool-calling backends.
228
+ * the agent retains bounded command/action reports as provider_reported and
229
+ * maps them to the canonical evidence and display events. Private reasoning
230
+ * is display-only. Native adapters await asynchronous sinks before completing
231
+ * a turn; the Agent also drains capture for synchronous callback producers.
232
+ * Ignored by ZTC-tool-calling backends.
156
233
  */
157
234
  onObservation?: (observation: BackendObservation) => void;
158
235
  /**
@@ -174,6 +251,7 @@ export interface BackendRequest {
174
251
  maxAttempts: number;
175
252
  delayMs: number;
176
253
  reason: string;
254
+ rateLimited?: boolean;
177
255
  }) => void;
178
256
  /** Per HTTP attempt diagnostics for Router and OpenAI-compatible transports. */
179
257
  onMetrics?: (metrics: RequestMetrics) => void;
@@ -202,7 +280,10 @@ export interface ClientToolCallResult {
202
280
  export interface BackendResponse {
203
281
  content: ContentBlock[];
204
282
  stopReason: string;
283
+ stopDetails?: Record<string, unknown>;
205
284
  usage?: TokenUsage;
285
+ /** Explicit provider-reported USD, independent from token accounting or inferred pricing. */
286
+ costUsd?: number;
206
287
  /** Provider-specific opaque reasoning trace (e.g. Kimi/Moonshot thinking
207
288
  * models). Persisted on the assistant turn so it can be replayed on the
208
289
  * next request — moonshot rejects assistant tool-call replays without it. */
@@ -240,6 +321,11 @@ export type StreamEvent = {
240
321
  } | {
241
322
  type: 'text_delta';
242
323
  text: string;
324
+ }
325
+ /** Completed native block, in provider order, alongside live display deltas. */
326
+ | {
327
+ type: 'content_block';
328
+ block: ContentBlock;
243
329
  } | {
244
330
  type: 'tool_use_start';
245
331
  id: string;
@@ -254,11 +340,18 @@ export type StreamEvent = {
254
340
  } | {
255
341
  type: 'usage';
256
342
  usage: TokenUsage;
343
+ } | {
344
+ type: 'cost';
345
+ costUsd: number;
257
346
  } | {
258
347
  type: 'done';
259
348
  stopReason: string;
349
+ stopDetails?: Record<string, unknown>;
260
350
  };
261
351
  export interface AgentBackend {
352
+ /** Preserve ordered provider blocks and previously submitted context bytes. */
353
+ readonly preservesNativeHistory?: boolean;
354
+ getModelCapabilities?(model: string): import('../../utils/router_catalog.js').RouterModelCapabilities | undefined;
262
355
  /** Deliver user input into a provider-owned active turn when supported. */
263
356
  steerUserMessage?(message: Message): Promise<boolean>;
264
357
  /**
@@ -287,6 +380,8 @@ export interface AgentBackend {
287
380
  streamsSyntheticallyFor?(request: BackendRequest): boolean;
288
381
  /** False when a stream retry must stay on the resumable streaming contract. */
289
382
  allowsBufferedFallbackAfterStreamFailure?(request: BackendRequest): boolean;
383
+ /** Native harnesses return false once dispatch may have produced external effects. */
384
+ allowsRequestRetryAfterFailure?(request: BackendRequest): boolean;
290
385
  /**
291
386
  * True when the backend correlates a logical turn across transport reconnects
292
387
  * (it stamps a `transportTurnId` so the Router can resume the same buffered
@@ -307,6 +402,8 @@ export interface RequestMetrics {
307
402
  requestId: string;
308
403
  outcome: 'success' | 'error' | 'aborted';
309
404
  status?: number;
405
+ /** Bounded, redacted failure body; never request headers or raw credentials. */
406
+ httpError?: HttpErrorDiagnostic;
310
407
  clientPrepareMs?: number;
311
408
  headersMs?: number;
312
409
  firstReasoningMs?: number;
@@ -318,6 +415,12 @@ export interface RequestMetrics {
318
415
  transportAttempts?: TransportAttemptMetrics[];
319
416
  usage?: TokenUsage;
320
417
  }
418
+ export interface HttpErrorDiagnostic {
419
+ status: number;
420
+ body: string;
421
+ bodyTruncated: boolean;
422
+ bodyReadState: 'complete' | 'truncated' | 'failed' | 'timeout';
423
+ }
321
424
  export interface TransportAttemptMetrics {
322
425
  attemptId: string;
323
426
  status?: number;
@@ -4,6 +4,7 @@ export function* syntheticStreamEvents(response) {
4
4
  yield { type: 'reasoning_delta', text: response.reasoning };
5
5
  }
6
6
  for (const block of response.content) {
7
+ yield { type: 'content_block', block };
7
8
  if (block.type === 'text') {
8
9
  yield { type: 'text_delta', text: block.text };
9
10
  }
@@ -16,5 +17,8 @@ export function* syntheticStreamEvents(response) {
16
17
  if (response.usage) {
17
18
  yield { type: 'usage', usage: response.usage };
18
19
  }
19
- yield { type: 'done', stopReason: response.stopReason };
20
+ if (typeof response.costUsd === 'number' && Number.isFinite(response.costUsd) && response.costUsd >= 0) {
21
+ yield { type: 'cost', costUsd: response.costUsd };
22
+ }
23
+ yield { type: 'done', stopReason: response.stopReason, ...(response.stopDetails ? { stopDetails: response.stopDetails } : {}) };
20
24
  }
@@ -1,5 +1,7 @@
1
+ import type { RouterCatalog, RouterModelCapabilities } from '../../utils/router_catalog.js';
1
2
  import { AgentBackend, BackendRequest, BackendResponse, StreamEvent } from './types.js';
2
3
  export interface ZRouterStreamConfig {
4
+ catalog?: RouterCatalog;
3
5
  apiKey: string;
4
6
  proxyUrl: string;
5
7
  provider: string;
@@ -26,6 +28,8 @@ export interface ZRouterStreamConfig {
26
28
  * uses the unified chat endpoint so routing can fall back across providers.
27
29
  */
28
30
  export declare class ZRouterStreamBackend implements AgentBackend {
31
+ private readonly initialCatalog?;
32
+ private get catalog();
29
33
  private apiKey;
30
34
  private proxyUrl;
31
35
  private provider;
@@ -38,8 +42,9 @@ export declare class ZRouterStreamBackend implements AgentBackend {
38
42
  isAuthenticationConfigured(): boolean;
39
43
  allowsBufferedFallbackAfterStreamFailure(): boolean;
40
44
  handlesTransportRetries(): boolean;
45
+ getModelCapabilities(model: string): RouterModelCapabilities | undefined;
41
46
  private buildOpenAIBody;
42
- private buildBody;
47
+ private serializeBody;
43
48
  private buildHeaders;
44
49
  /**
45
50
  * The conversation identity this turn declares to Router, which forwards it to