@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
@@ -4,8 +4,10 @@
4
4
  * configured with, so it works with any provider (OpenAI, Anthropic,
5
5
  * Gemini, proxy, etc.).
6
6
  */
7
+ import type { BufferedRecoveryPolicy, BufferedRecoveryRequest } from '../agent/backends/types.js';
7
8
  import { simSwarmExtractFirstJson as extractFirstJson } from '@ztc/sim-swarm';
8
9
  import type { ZodType } from 'zod';
10
+ import { type ResolvedSimulationInference } from './inference.js';
9
11
  import { type SimulationLlmCallContext } from './telemetry.js';
10
12
  export declare function setActiveSimulationSignalGetter(getter: (() => AbortSignal | undefined) | null): void;
11
13
  /** Marker class so callers can distinguish abort-induced failures from real errors. */
@@ -101,4 +103,4 @@ export declare function llmCompleteStructured<T>(system: string, userMessage: st
101
103
  * Rejects with a timeout error after `timeoutMs` milliseconds so the caller
102
104
  * is never blocked permanently by a stalled provider.
103
105
  */
104
- export declare function llmComplete(system: string, userMessage: string, maxTokens?: number, timeoutMs?: number, callContext?: SimulationLlmCallContext, signal?: AbortSignal): Promise<string>;
106
+ export declare function llmComplete(system: string, userMessage: string, maxTokens?: number, timeoutMs?: number, callContext?: SimulationLlmCallContext, signal?: AbortSignal, inferenceOverride?: Pick<ResolvedSimulationInference, 'provider' | 'model' | 'codexEffort' | 'codexFastMode'>, responseValidator?: (responseText: string) => void, outputSchema?: Record<string, unknown>, outputSchemaStrict?: boolean, bufferedRecovery?: BufferedRecoveryPolicy & Pick<BufferedRecoveryRequest, 'onAttempt'>): Promise<string>;
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import { configStore } from '../config.js';
8
8
  import { createBackendForProvider } from '../agent/backends/index.js';
9
+ import { CodexBufferedDeadlineError } from '../agent/backends/codex_buffered_recovery.js';
9
10
  import { jsonrepair } from 'jsonrepair';
10
11
  import { simSwarmExtractFirstJson as extractFirstJson } from '@ztc/sim-swarm';
11
12
  import { resolveSimulationInference, } from './inference.js';
@@ -101,6 +102,7 @@ export function circuitOnFailure(now) {
101
102
  let cachedBackend = null;
102
103
  let cachedBackendKey = null;
103
104
  const DEFAULT_SIM_MAX_TOKENS = 2048;
105
+ const SIM_CODEX_MAX_RESPONSE_BYTES = 8 * 1024 * 1024;
104
106
  /**
105
107
  * Get (or create) a backend instance matching the current config.
106
108
  * Cached until provider or API key changes.
@@ -110,12 +112,19 @@ function getBackend(resolved) {
110
112
  const apiKey = resolved.apiKey ?? configStore.getApiKey(provider);
111
113
  if (!apiKey)
112
114
  throw new Error('No API key configured for LLM fill');
113
- const cacheKey = `${provider}:${apiKey}:${resolved.baseUrl ?? ''}:${resolved.model}`;
115
+ const cacheKey = [
116
+ provider,
117
+ apiKey,
118
+ resolved.baseUrl ?? '',
119
+ resolved.model,
120
+ resolved.codexAuthFilePath ?? '',
121
+ ].join(':');
114
122
  if (cachedBackend && cachedBackendKey === cacheKey)
115
123
  return cachedBackend;
116
124
  cachedBackend = createBackendForProvider(provider, {
117
125
  apiKey,
118
126
  baseUrl: resolved.baseUrl ?? (configStore.getOpenAICompatibleBaseUrl() || undefined),
127
+ codexAuthFilePath: resolved.codexAuthFilePath,
119
128
  });
120
129
  cachedBackendKey = cacheKey;
121
130
  return cachedBackend;
@@ -263,8 +272,13 @@ export const LLM_TIMEOUT_MS = 90_000;
263
272
  */
264
273
  export async function llmCompleteStructured(system, userMessage, schema, context, maxTokens = DEFAULT_SIM_MAX_TOKENS, timeoutMs = LLM_TIMEOUT_MS, callContext, signal) {
265
274
  const jsonHint = '\n\nReturn ONLY a single valid JSON value. No markdown fences, no prose.';
266
- const raw = await llmComplete(system, userMessage + jsonHint, maxTokens, timeoutMs, callContext, signal);
267
- return safeParseJsonWithSchema(raw, schema, context);
275
+ let parsed;
276
+ await llmComplete(system, userMessage + jsonHint, maxTokens, timeoutMs, callContext, signal, undefined, (raw) => {
277
+ parsed = { value: safeParseJsonWithSchema(raw, schema, context) };
278
+ });
279
+ if (parsed === undefined)
280
+ throw new Error(`${context} returned no validated value`);
281
+ return parsed.value;
268
282
  }
269
283
  /**
270
284
  * One-shot LLM completion. Returns the text response.
@@ -273,22 +287,17 @@ export async function llmCompleteStructured(system, userMessage, schema, context
273
287
  * Rejects with a timeout error after `timeoutMs` milliseconds so the caller
274
288
  * is never blocked permanently by a stalled provider.
275
289
  */
276
- export async function llmComplete(system, userMessage, maxTokens = DEFAULT_SIM_MAX_TOKENS, timeoutMs = LLM_TIMEOUT_MS, callContext, signal) {
290
+ export async function llmComplete(system, userMessage, maxTokens = DEFAULT_SIM_MAX_TOKENS, timeoutMs = LLM_TIMEOUT_MS, callContext, signal, inferenceOverride, responseValidator, outputSchema, outputSchemaStrict, bufferedRecovery) {
277
291
  const startedAt = new Date();
278
- const inference = resolveSimulationInference();
292
+ const inference = resolveSimulationInference(inferenceOverride);
279
293
  const backend = getBackend(inference);
280
- const { codexEffort, model, provider } = inference;
294
+ const { codexEffort, codexFastMode, model, provider } = inference;
295
+ if (bufferedRecovery && provider !== 'codex_legacy')
296
+ throw new Error('Buffered Codex recovery requires the Codex subscription provider');
281
297
  const context = callContext ?? { stage: 'world.evolve', component: 'simulation.llm.default' };
282
298
  // When called inside a running sim, default the abort signal to the run's
283
299
  // controller so stop() / cancelGame() cancels in-flight provider HTTP calls.
284
300
  const effectiveSignal = signal ?? getActiveSimAbortSignal();
285
- // Fail fast if the sim was already stopped before the call started.
286
- if (effectiveSignal?.aborted) {
287
- throw new SimulationAbortedError();
288
- }
289
- // Circuit breaker: fail fast (degraded) when consecutive provider failures
290
- // have tripped the breaker, instead of hammering a failing provider.
291
- circuitPreflight(Date.now());
292
301
  let timerId;
293
302
  let abortListener;
294
303
  const requestController = new AbortController();
@@ -296,7 +305,18 @@ export async function llmComplete(system, userMessage, maxTokens = DEFAULT_SIM_M
296
305
  let stopReason;
297
306
  let usage;
298
307
  let caughtError;
308
+ let outcome = 'success';
309
+ let timedOut = false;
310
+ let invalidOutput = false;
311
+ let providerSucceeded = false;
299
312
  try {
313
+ // Fail fast if the simulation stopped before the call started.
314
+ if (effectiveSignal?.aborted) {
315
+ throw new SimulationAbortedError();
316
+ }
317
+ // Circuit breaker: fail fast when earlier provider failures opened it.
318
+ circuitPreflight(Date.now());
319
+ const deadlineAtMs = Date.now() + timeoutMs;
300
320
  const response = await Promise.race([
301
321
  backend.generate({
302
322
  model,
@@ -305,14 +325,20 @@ export async function llmComplete(system, userMessage, maxTokens = DEFAULT_SIM_M
305
325
  messages: [{ role: 'user', content: userMessage }],
306
326
  tools: [],
307
327
  codexEffort,
328
+ codexFastMode,
329
+ maxResponseBytes: SIM_CODEX_MAX_RESPONSE_BYTES,
330
+ outputTokenGuidance: true,
308
331
  signal: requestController.signal,
332
+ ...(bufferedRecovery === undefined ? {} : { bufferedRecovery: { ...bufferedRecovery, deadlineAtMs } }),
333
+ ...(outputSchema === undefined ? {} : { outputSchema, outputSchemaStrict }),
309
334
  }).finally(() => clearTimeout(timerId)),
310
335
  new Promise((_, reject) => {
311
336
  timerId = setTimeout(() => {
337
+ timedOut = true;
312
338
  const timeoutError = new Error(`LLM request timed out after ${timeoutMs}ms`);
313
339
  requestController.abort(timeoutError);
314
340
  reject(timeoutError);
315
- }, timeoutMs);
341
+ }, bufferedRecovery === undefined ? timeoutMs : Math.max(0, deadlineAtMs - Date.now()));
316
342
  // Reject the race immediately on abort so the timeout setTimeout doesn't
317
343
  // keep the event loop alive after the caller has bailed.
318
344
  if (effectiveSignal) {
@@ -332,12 +358,30 @@ export async function llmComplete(system, userMessage, maxTokens = DEFAULT_SIM_M
332
358
  usage = response.usage;
333
359
  const textBlocks = response.content.filter(b => b.type === 'text');
334
360
  if (textBlocks.length === 0) {
361
+ invalidOutput = true;
335
362
  throw new Error(`LLM returned no text content (stopReason: ${response.stopReason})`);
336
363
  }
337
364
  responseText = textBlocks.map(b => b.text).join('\n');
365
+ // The provider answered. Output that fails validation is a model fault,
366
+ // not a provider fault, so it must not count toward the breaker.
338
367
  circuitOnSuccess();
368
+ providerSucceeded = true;
369
+ if (responseValidator) {
370
+ try {
371
+ responseValidator(responseText);
372
+ }
373
+ catch (error) {
374
+ invalidOutput = true;
375
+ throw error;
376
+ }
377
+ }
339
378
  }
340
379
  catch (err) {
380
+ if (err instanceof CodexBufferedDeadlineError) {
381
+ timedOut = true;
382
+ err = new Error(`LLM request timed out after ${timeoutMs}ms`);
383
+ requestController.abort(err);
384
+ }
341
385
  // Wrap raw AbortError from the provider SDK into our marker class so
342
386
  // callers can treat it as "stopped" instead of "failed".
343
387
  if (effectiveSignal?.aborted && !(err instanceof SimulationAbortedError)) {
@@ -348,29 +392,45 @@ export async function llmComplete(system, userMessage, maxTokens = DEFAULT_SIM_M
348
392
  }
349
393
  // Abort is an intentional cancellation, not a provider fault — never trip
350
394
  // the breaker on it. Real provider/transport failures count toward it.
351
- if (!(caughtError instanceof SimulationAbortedError)) {
395
+ if (!providerSucceeded
396
+ && !(caughtError instanceof SimulationAbortedError)
397
+ && !(caughtError instanceof SimulationDegradedError)) {
352
398
  circuitOnFailure(Date.now());
353
399
  }
400
+ outcome = caughtError instanceof SimulationAbortedError
401
+ ? 'aborted'
402
+ : caughtError instanceof SimulationDegradedError
403
+ ? 'circuit-open'
404
+ : timedOut
405
+ ? 'timeout'
406
+ : invalidOutput
407
+ ? 'invalid-output'
408
+ : 'provider-error';
354
409
  }
355
410
  finally {
356
411
  if (effectiveSignal && abortListener) {
357
412
  effectiveSignal.removeEventListener('abort', abortListener);
358
413
  }
359
- recordSimulationLlmCall({
360
- context,
361
- provider,
362
- model,
363
- reasoningEffort: codexEffort,
364
- maxTokensRequested: maxTokens,
365
- system,
366
- userMessage,
367
- responseText,
368
- stopReason,
369
- usage,
370
- startedAt,
371
- endedAt: new Date(),
372
- error: caughtError,
373
- });
414
+ try {
415
+ recordSimulationLlmCall({
416
+ context,
417
+ provider,
418
+ model,
419
+ reasoningEffort: codexEffort,
420
+ maxTokensRequested: maxTokens,
421
+ systemBytes: Buffer.byteLength(system, 'utf8'),
422
+ userBytes: Buffer.byteLength(userMessage, 'utf8'),
423
+ responseBytes: Buffer.byteLength(responseText, 'utf8'),
424
+ outcome,
425
+ stopReason,
426
+ usage,
427
+ startedAt,
428
+ endedAt: new Date(),
429
+ });
430
+ }
431
+ catch {
432
+ // Telemetry is observational. It cannot replace a gameplay result.
433
+ }
374
434
  }
375
435
  if (caughtError)
376
436
  throw caughtError;
@@ -50,4 +50,4 @@ export declare class ZeroEmbeddingProvider implements EmbeddingProvider {
50
50
  * For Anthropic/Gemini/other providers, fall back to OPENAI_API_KEY env var.
51
51
  * No TF-IDF fallback — real embeddings are required.
52
52
  */
53
- export declare function createEmbeddingProvider(cache: Map<string, number[]>): EmbeddingProvider;
53
+ export declare function createEmbeddingProvider(cache: Map<string, number[]>, sessionProvider?: string): EmbeddingProvider;
@@ -145,13 +145,19 @@ export class ZeroEmbeddingProvider {
145
145
  * For Anthropic/Gemini/other providers, fall back to OPENAI_API_KEY env var.
146
146
  * No TF-IDF fallback — real embeddings are required.
147
147
  */
148
- export function createEmbeddingProvider(cache) {
149
- if (process.env.ZTC_SIM_DISABLE_EMBEDDINGS === '1') {
148
+ export function createEmbeddingProvider(cache, sessionProvider) {
149
+ // Session construction and checkpoint restore happen before ambient state is attached.
150
+ if (sessionProvider === 'zergrouter') {
151
+ return new CachedEmbeddingProvider(new ZeroEmbeddingProvider(), cache);
152
+ }
153
+ const inference = resolveSimulationInference();
154
+ // A ZergRouter simulation runs only its one DeepSeek chat model. It has no
155
+ // embedding model, so retrieval stays lexical and no other provider is called.
156
+ if (process.env.ZTC_SIM_DISABLE_EMBEDDINGS === '1' || inference.provider === 'zergrouter') {
150
157
  return new CachedEmbeddingProvider(new ZeroEmbeddingProvider(), cache);
151
158
  }
152
159
  const provider = configStore.getProvider();
153
160
  const cfg = configStore.get();
154
- const inference = resolveSimulationInference();
155
161
  let apiKey;
156
162
  let baseUrl;
157
163
  let model = inference.embeddingModel ?? EMBEDDING_MODEL;
@@ -61,6 +61,7 @@ export declare class FileSystemMemory implements CuratableMemoryStore {
61
61
  private recordCuratorStrictnessProbe;
62
62
  logRetrieval(context: MemoryRetrievalLogContext, results: RetrievalResult[]): void;
63
63
  verifyInvariants(): InvariantViolation[];
64
+ hasSourceFile(relativePath: string): boolean;
64
65
  getIdToNodeMap(): ReadonlyMap<string, ConceptNode>;
65
66
  getStreams(): {
66
67
  seqEvent: readonly ConceptNode[];
@@ -73,6 +74,7 @@ export declare class FileSystemMemory implements CuratableMemoryStore {
73
74
  static fromSnapshot(snapshot: FileSystemMemorySnapshot, clock: SimClock, opts: {
74
75
  outputDir: string;
75
76
  invariantMode?: InvariantMode;
77
+ detached?: boolean;
76
78
  }): FileSystemMemory;
77
79
  private addConceptNode;
78
80
  private autoSupersedeStaleUpdates;
@@ -70,7 +70,7 @@ export class FileSystemMemory {
70
70
  this.outputDir = resolve(opts.outputDir);
71
71
  assertFileSystemMemoryOutputDirAllowed(this.outputDir);
72
72
  this.root = resolve(this.outputDir, 'memory', this.agentId);
73
- this.files = new FileSystemMemoryFileTree(this.outputDir, this.root, this.agentId);
73
+ this.files = new FileSystemMemoryFileTree(this.outputDir, this.root, this.agentId, opts.detached);
74
74
  this.curator = new FileSystemMemoryCuratorPatchExecutor({
75
75
  agentId: this.agentId,
76
76
  now: () => this.auditTimestamp(),
@@ -338,6 +338,9 @@ export class FileSystemMemory {
338
338
  verifyInvariants() {
339
339
  return reportFileSystemMemoryInvariants(this);
340
340
  }
341
+ hasSourceFile(relativePath) {
342
+ return this.files.hasRelativeFile(relativePath);
343
+ }
341
344
  getIdToNodeMap() {
342
345
  return new Map([...this.idToNode.entries()].map(([id, node]) => [id, cloneConceptNode(node)]));
343
346
  }
@@ -373,6 +376,7 @@ export class FileSystemMemory {
373
376
  static fromSnapshot(snapshot, clock, opts) {
374
377
  const memory = new FileSystemMemory(snapshot.agentId, clock, {
375
378
  outputDir: opts.outputDir,
379
+ detached: opts.detached,
376
380
  invariantMode: opts.invariantMode,
377
381
  });
378
382
  memory.seqEvent = snapshot.seqEvent.map(node => ({ ...node }));
@@ -6,13 +6,16 @@ export declare class FileSystemMemoryFileTree {
6
6
  readonly outputDir: string;
7
7
  readonly root: string;
8
8
  private readonly agentId;
9
- constructor(outputDir: string, root: string, agentId: string);
9
+ private readonly detached;
10
+ private readonly detachedFiles;
11
+ constructor(outputDir: string, root: string, agentId: string, detached?: boolean);
10
12
  initializeLayout(personaSeed: string | undefined, episodeDate: string): void;
11
13
  appendNodeBlock(node: ConceptNode, episodeDate: string): ConceptNode['memorySource'];
12
14
  writeCurrentFacts(nodes: ConceptNode[]): void;
13
15
  clear(): void;
14
16
  writeRelative(relativePath: string, content: string): void;
15
17
  readRelative(relativePath: string): string;
18
+ hasRelativeFile(relativePath: string): boolean;
16
19
  writeIfAbsent(relativePath: string, content: string): void;
17
20
  appendText(relativePath: string, content: string): void;
18
21
  makeDirectory(relativePath: string): void;
@@ -43,10 +43,14 @@ export class FileSystemMemoryFileTree {
43
43
  outputDir;
44
44
  root;
45
45
  agentId;
46
- constructor(outputDir, root, agentId) {
46
+ detached;
47
+ // Detached candidates rebuild the same file contents without publishing them.
48
+ detachedFiles = new Map();
49
+ constructor(outputDir, root, agentId, detached = false) {
47
50
  this.outputDir = outputDir;
48
51
  this.root = root;
49
52
  this.agentId = agentId;
53
+ this.detached = detached;
50
54
  const outputRoot = resolve(outputDir);
51
55
  const memoryRoot = resolve(outputRoot, 'memory');
52
56
  this.ensureInside(memoryRoot, root);
@@ -54,7 +58,8 @@ export class FileSystemMemoryFileTree {
54
58
  this.ensureInside(realPathForPolicy(memoryRoot), realPathForPolicy(root));
55
59
  }
56
60
  initializeLayout(personaSeed, episodeDate) {
57
- mkdirSync(this.root, { recursive: true });
61
+ if (!this.detached)
62
+ mkdirSync(this.root, { recursive: true });
58
63
  for (const dir of [
59
64
  'episodes',
60
65
  'facts',
@@ -65,7 +70,8 @@ export class FileSystemMemoryFileTree {
65
70
  'records',
66
71
  'events',
67
72
  ]) {
68
- mkdirSync(this.absolute(dir), { recursive: true });
73
+ if (!this.detached)
74
+ mkdirSync(this.absolute(dir), { recursive: true });
69
75
  }
70
76
  this.writeIfAbsent('profile.md', `# Profile\n\n${personaSeed ? personaSeed.trim() : ''}\n`);
71
77
  this.writeIfAbsent('anchors.md', '# Durable Anchors\n\n');
@@ -86,13 +92,13 @@ export class FileSystemMemoryFileTree {
86
92
  if (category === 'episodes') {
87
93
  this.writeIfAbsent(relativePath, `# Episode ${episodeDate}\n\n`);
88
94
  }
89
- const abs = this.absolute(relativePath);
90
- this.ensureWritablePath(abs);
91
- const text = existsSync(abs) ? readFileSync(abs, 'utf8') : '';
95
+ if (!this.detached)
96
+ this.ensureWritablePath(this.absolute(relativePath));
97
+ const text = this.readRelative(relativePath);
92
98
  const lineStart = lineCount(text) + 1;
93
99
  const block = renderMarkdownBlock(node);
94
100
  const lineEnd = lineStart + lineCount(block) - 1;
95
- writeFileNoFollow(abs, block, true);
101
+ this.appendText(relativePath, block);
96
102
  return {
97
103
  backend: 'filesystem',
98
104
  relativePath,
@@ -125,40 +131,65 @@ export class FileSystemMemoryFileTree {
125
131
  this.writeRelative('facts/current.md', content);
126
132
  }
127
133
  clear() {
134
+ if (this.detached) {
135
+ this.detachedFiles.clear();
136
+ return;
137
+ }
128
138
  rmSync(this.root, { recursive: true, force: true });
129
139
  mkdirSync(this.root, { recursive: true });
130
140
  }
131
141
  writeRelative(relativePath, content) {
132
142
  const abs = this.absolute(relativePath);
143
+ if (this.detached) {
144
+ this.detachedFiles.set(abs, content);
145
+ return;
146
+ }
133
147
  this.ensureWritablePath(abs);
134
148
  writeFileNoFollow(abs, content, false);
135
149
  }
136
150
  readRelative(relativePath) {
137
151
  const abs = this.absolute(relativePath);
152
+ if (this.detached)
153
+ return this.detachedFiles.get(abs) ?? '';
138
154
  return existsSync(abs) ? readFileSync(abs, 'utf8') : '';
139
155
  }
156
+ hasRelativeFile(relativePath) {
157
+ const abs = this.absolute(relativePath);
158
+ return this.detached ? this.detachedFiles.has(abs) : existsSync(abs);
159
+ }
140
160
  writeIfAbsent(relativePath, content) {
141
161
  const abs = this.absolute(relativePath);
162
+ if (this.detached) {
163
+ if (!this.detachedFiles.has(abs))
164
+ this.detachedFiles.set(abs, content);
165
+ return;
166
+ }
142
167
  this.ensureWritablePath(abs);
143
168
  if (!existsSync(abs))
144
169
  writeFileNoFollow(abs, content, false);
145
170
  }
146
171
  appendText(relativePath, content) {
147
172
  const abs = this.absolute(relativePath);
173
+ if (this.detached) {
174
+ this.detachedFiles.set(abs, (this.detachedFiles.get(abs) ?? '') + content);
175
+ return;
176
+ }
148
177
  this.ensureWritablePath(abs);
149
178
  writeFileNoFollow(abs, content, true);
150
179
  }
151
180
  makeDirectory(relativePath) {
152
181
  const abs = this.absolute(relativePath);
182
+ if (this.detached)
183
+ return;
153
184
  this.ensureWritablePath(abs);
154
185
  mkdirSync(abs, { recursive: true });
155
186
  }
156
187
  appendJsonl(relativePath, entry) {
157
- const abs = this.absolute(relativePath);
158
- this.ensureWritablePath(abs);
159
- writeFileNoFollow(abs, `${JSON.stringify(entry)}\n`, true);
188
+ this.appendText(relativePath, `${JSON.stringify(entry)}\n`);
160
189
  }
161
190
  appendTelemetryJsonl(fileName, entry) {
191
+ if (this.detached)
192
+ return;
162
193
  const telemetryDir = resolve(this.outputDir, 'telemetry');
163
194
  this.ensureInside(this.outputDir, telemetryDir);
164
195
  ensureWritableContainedPath(this.outputDir, telemetryDir);
@@ -1,4 +1,3 @@
1
- import { existsSync } from 'node:fs';
2
1
  import { resolve, sep } from 'node:path';
3
2
  import { memoryPrivacyLabel } from './backend.js';
4
3
  export function reportFileSystemMemoryInvariants(mem) {
@@ -120,7 +119,7 @@ export function reportFileSystemMemoryInvariants(mem) {
120
119
  severity: 'hard',
121
120
  });
122
121
  }
123
- if (!existsSync(abs)) {
122
+ if (!mem.hasSourceFile(source.relativePath)) {
124
123
  violations.push({
125
124
  kind: 'missing-source-file',
126
125
  message: `node ${node.nodeId} source file missing: ${source.relativePath}`,
@@ -37,6 +37,7 @@ export interface FileSystemMemoryCuratorFileWriteEntry {
37
37
  }
38
38
  export interface FileSystemMemoryOptions {
39
39
  outputDir: string;
40
+ detached?: boolean;
40
41
  personaSeed?: string;
41
42
  invariantMode?: InvariantMode;
42
43
  }
@@ -36,6 +36,7 @@ export interface AssociativeMemoryOptions {
36
36
  getEmbeddings?: () => Map<string, number[]>;
37
37
  invariantMode?: InvariantMode;
38
38
  outputDir?: string;
39
+ detached?: boolean;
39
40
  }
40
41
  export declare class AssociativeMemory implements AgentMemoryStore {
41
42
  readonly kind: "associative";
@@ -64,6 +65,7 @@ export declare class AssociativeMemory implements AgentMemoryStore {
64
65
  private getEmbeddings?;
65
66
  private agentId?;
66
67
  private outputDir?;
68
+ private readonly detached;
67
69
  constructor(clock: SimClock, opts?: AssociativeMemoryOptions);
68
70
  /** Set/replace the clock (used during checkpoint restore). */
69
71
  setClock(clock: SimClock): void;
@@ -47,12 +47,14 @@ export class AssociativeMemory {
47
47
  getEmbeddings;
48
48
  agentId;
49
49
  outputDir;
50
+ detached;
50
51
  constructor(clock, opts) {
51
52
  this.clock = clock;
52
53
  this.invariantMode = opts?.invariantMode ?? resolveInvariantMode();
53
54
  this.getEmbeddings = opts?.getEmbeddings;
54
55
  this.agentId = opts?.agentId;
55
56
  this.outputDir = opts?.outputDir ? resolve(opts.outputDir) : undefined;
57
+ this.detached = opts?.detached ?? false;
56
58
  if (this.outputDir) {
57
59
  this.touchTelemetryFile('memory_retrieval.jsonl');
58
60
  this.touchTelemetryFile('memory_curator.jsonl');
@@ -571,12 +573,14 @@ export class AssociativeMemory {
571
573
  return memory;
572
574
  }
573
575
  touchTelemetryFile(fileName) {
574
- if (!this.outputDir)
576
+ if (this.detached || !this.outputDir)
575
577
  return;
576
578
  const path = this.telemetryPath(fileName);
577
579
  closeSync(openSync(path, 'a'));
578
580
  }
579
581
  appendTelemetryJsonl(fileName, entry) {
582
+ if (this.detached)
583
+ return;
580
584
  appendFileSync(this.telemetryPath(fileName), `${JSON.stringify(entry)}\n`);
581
585
  }
582
586
  telemetryPath(fileName) {
@@ -85,7 +85,6 @@ async function generateSessionArc(agent, state, maxPeriods, prompts) {
85
85
  stage: 'intent.session_arc',
86
86
  component: 'orchestration.intent',
87
87
  agentId: agent.id,
88
- agentName: agent.identity.fullName,
89
88
  });
90
89
  const trimmed = parsed.session_arc.trim().slice(0, MAX_SESSION_ARC_CHARS);
91
90
  return trimmed.length > 0 ? trimmed : null;
@@ -125,7 +124,6 @@ export async function generateAgentIntent(agent, state, periodCount, maxPeriods,
125
124
  component: 'orchestration.intent',
126
125
  periodNumber: periodCount,
127
126
  agentId: agent.id,
128
- agentName: agent.identity.fullName,
129
127
  });
130
128
  const trimmed = parsed.intent.trim().slice(0, MAX_INTENT_CHARS);
131
129
  return trimmed.length > 0 ? trimmed : null;
@@ -43,7 +43,6 @@ export async function processLifecycleRequests(state, onProgress) {
43
43
  stage: 'lifecycle.hire_review',
44
44
  component: 'orchestration.lifecycle',
45
45
  agentId: req.requesterId,
46
- agentName: requesterName,
47
46
  requestId: req.id,
48
47
  });
49
48
  const approved = parseApprovalDecision(raw);
@@ -77,7 +76,6 @@ export async function processLifecycleRequests(state, onProgress) {
77
76
  stage: 'lifecycle.termination_review',
78
77
  component: 'orchestration.lifecycle',
79
78
  agentId: req.requesterId,
80
- agentName: requesterName,
81
79
  requestId: req.id,
82
80
  });
83
81
  const approved = parseApprovalDecision(raw);
@@ -1,12 +1,36 @@
1
1
  /** Private adapter from the public simulation plugin contract to the ZTC kernel. */
2
- import type { SimulationCompatibilityV1, SimulationDriverRegistrationV1, SimulationHostV1, SimulationJsonObjectV1, SimulationTransitionBatchV1, SimulationTransitionResultV1 } from '../plugin/simulation_contract.js';
2
+ import type { SimulationCompatibilityV1, SimulationDriverRegistrationV1, SimulationDynamicStateV1, SimulationHostV1, SimulationJsonObjectV1, SimulationPlayerCommandV1, SimulationSessionRefV1, SimulationSessionSnapshotV1, SimulationSessionStatusV1, SimulationTransitionBatchV1, SimulationTransitionResultV1 } from '../plugin/simulation_contract.js';
3
3
  import { SimState } from './world/state.js';
4
+ import type { SimulationInputJournalV1 } from '../plugin/simulation_interventions.js';
5
+ export interface SessionRecord {
6
+ inputJournal: SimulationInputJournalV1 | undefined;
7
+ lastTransition: SimulationTransitionBatchV1 | null;
8
+ readonly state: SimState;
9
+ readonly driverKind: string;
10
+ readonly appliedTransitions: Set<string>;
11
+ readonly actorMetadata: Map<string, SimulationJsonObjectV1>;
12
+ readonly submittedPlayerCommandIds: Set<string>;
13
+ pendingPlayerCommand: SimulationPlayerCommandV1 | null;
14
+ dynamicState: SimulationDynamicStateV1 | null;
15
+ pluginData: Record<string, SimulationJsonObjectV1>;
16
+ status: SimulationSessionStatusV1;
17
+ revision: number;
18
+ }
19
+ type StateValidators = Pick<SimulationDriverRegistrationV1, 'validateDynamicState' | 'validateDocuments'>;
20
+ /** Register canonical checkpoint validators without loading a driver or claiming its inference boundary. */
21
+ export declare function registerSimulationCheckpointValidators(kind: string, validators: StateValidators): void;
4
22
  export declare function getKernelSimulationTransitionState(state: SimState): {
5
23
  revision: number;
6
24
  pluginData: SimulationJsonObjectV1;
7
25
  };
8
26
  export declare function applyKernelSimulationTransition(state: SimState, batch: SimulationTransitionBatchV1): Promise<SimulationTransitionResultV1>;
27
+ export declare function detachedSessionRecord(checkpoint: SimulationJsonObjectV1): Promise<SessionRecord>;
28
+ export declare function detachedSessionSnapshot(record: SessionRecord): SimulationSessionSnapshotV1;
29
+ export declare function detachedSessionCheckpoint(record: SessionRecord, source: SimulationJsonObjectV1): SimulationJsonObjectV1;
30
+ export declare function applyDetachedSessionTransition(record: SessionRecord, batch: SimulationTransitionBatchV1): Promise<void>;
31
+ export declare function getOriginalSessionTransition(ref: SimulationSessionRefV1): SimulationTransitionBatchV1 | null;
9
32
  export declare function saveSimulationSessionCheckpoint(state: SimState, outputPath?: string): string;
10
33
  export declare function validateSimulationDriverRegistration(registration: SimulationDriverRegistrationV1): void;
11
34
  export declare function registerSimulationDriver(registration: SimulationDriverRegistrationV1): void;
12
35
  export declare function requireSimulationHost(compatibility: SimulationCompatibilityV1): SimulationHostV1;
36
+ export {};