@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
@@ -0,0 +1,42 @@
1
+ import type { SimulationDynamicStateV1, SimulationDynamicHistoryEntryV1, SimulationDynamicAuditEntryV1, SimulationPersistentAgentStateV1, DynamicHistoryReference, DynamicHistoryArchive } from '../plugin/simulation_contract.js';
2
+ export declare const DYNAMIC_HISTORY_WINDOW = 16;
3
+ export declare const DYNAMIC_HISTORY_RECORD_BYTES = 2097152;
4
+ export type { DynamicHistoryReference, DynamicHistoryArchive };
5
+ export type DynamicHistoryRecord = {
6
+ readonly version: 1;
7
+ readonly identity: string;
8
+ readonly revision: number;
9
+ readonly previous: DynamicHistoryReference | null;
10
+ } & ({
11
+ readonly kind: 'genesis';
12
+ readonly state: SimulationDynamicStateV1;
13
+ } | {
14
+ readonly kind: 'beat';
15
+ readonly entry: SimulationDynamicHistoryEntryV1;
16
+ readonly audit: SimulationDynamicAuditEntryV1;
17
+ });
18
+ /** A host-owned storage boundary. References are content checks, never validation receipts. */
19
+ export interface DynamicHistoryStorage {
20
+ readonly identity: string;
21
+ read(reference: DynamicHistoryReference, maxBytes: number): DynamicHistoryRecord;
22
+ write(reference: DynamicHistoryReference, record: DynamicHistoryRecord): void;
23
+ }
24
+ type HistoryView = {
25
+ genesis: SimulationDynamicStateV1 | null;
26
+ history: readonly SimulationDynamicHistoryEntryV1[];
27
+ audit: readonly SimulationDynamicAuditEntryV1[];
28
+ };
29
+ export declare class DynamicHistoryError extends Error {
30
+ readonly code: 'history-unavailable' | 'history-invalid' | 'history-capacity';
31
+ constructor(code: 'history-unavailable' | 'history-invalid' | 'history-capacity', message: string);
32
+ }
33
+ export declare function withDynamicHistoryStorage<T>(storage: DynamicHistoryStorage, action: () => T): T;
34
+ export declare function activeDynamicHistoryStorage(): DynamicHistoryStorage | undefined;
35
+ export declare function dynamicHistoryReference(record: DynamicHistoryRecord): DynamicHistoryReference;
36
+ export declare function archiveDynamicState<T extends Omit<SimulationDynamicStateV1, 'frame'>>(previous: SimulationDynamicStateV1, next: T): T;
37
+ /** Rebuild derived storage from an original transition before parsing its referenced state. */
38
+ export declare function stageDynamicHistoryTransition(previous: SimulationDynamicStateV1 | null, next: SimulationDynamicStateV1): void;
39
+ export declare function readDynamicHistory(state: Pick<SimulationDynamicStateV1, 'historyArchive' | 'revision' | 'gameKind' | 'rulesVersion' | 'seed' | 'initialization'> & Partial<Pick<SimulationDynamicStateV1, 'history' | 'audit'>>): HistoryView;
40
+ export declare function dynamicHistory(state: SimulationDynamicStateV1): readonly SimulationDynamicHistoryEntryV1[];
41
+ export declare function dynamicMemoryHistory(state: SimulationDynamicStateV1): Readonly<Record<string, readonly SimulationPersistentAgentStateV1['memories'][number][]>> | undefined;
42
+ export declare function dynamicBeliefEvidenceHistory(state: SimulationDynamicStateV1): Readonly<Record<string, Readonly<Record<string, readonly string[]>>>> | undefined;
@@ -0,0 +1,173 @@
1
+ import { parseDynamicHistoryEntry, parseDynamicAuditEntry } from './toolkit/dynamic_state.js';
2
+ import { AsyncLocalStorage } from 'node:async_hooks';
3
+ import { createHash } from 'node:crypto';
4
+ import { isDeepStrictEqual } from 'node:util';
5
+ export const DYNAMIC_HISTORY_WINDOW = 16;
6
+ export const DYNAMIC_HISTORY_RECORD_BYTES = 2_097_152;
7
+ const storageScope = new AsyncLocalStorage();
8
+ const views = new WeakMap();
9
+ function makeImmutable(value) {
10
+ if (value !== null && typeof value === 'object' && !Object.isFrozen(value)) {
11
+ for (const item of Object.values(value))
12
+ makeImmutable(item);
13
+ Object.freeze(value);
14
+ }
15
+ return value;
16
+ }
17
+ export class DynamicHistoryError extends Error {
18
+ code;
19
+ constructor(code, message) {
20
+ super(message);
21
+ this.code = code;
22
+ this.name = 'DynamicHistoryError';
23
+ }
24
+ }
25
+ export function withDynamicHistoryStorage(storage, action) {
26
+ return storageScope.run(storage, action);
27
+ }
28
+ export function activeDynamicHistoryStorage() { return storageScope.getStore(); }
29
+ function storage() {
30
+ const source = storageScope.getStore();
31
+ if (!source)
32
+ throw new DynamicHistoryError('history-unavailable', 'Owned canonical history is unavailable');
33
+ return source;
34
+ }
35
+ function encode(record) {
36
+ const normalize = (value) => Array.isArray(value) ? value.map(normalize)
37
+ : value !== null && typeof value === 'object' ? Object.fromEntries(Object.entries(value).sort(([a], [b]) => a.localeCompare(b)).map(([key, item]) => [key, normalize(item)])) : value;
38
+ const encoded = JSON.stringify(normalize(record));
39
+ if (Buffer.byteLength(encoded) > DYNAMIC_HISTORY_RECORD_BYTES)
40
+ throw new DynamicHistoryError('history-capacity', 'Canonical history record exceeds its byte bound');
41
+ return encoded;
42
+ }
43
+ export function dynamicHistoryReference(record) {
44
+ return { version: 1, identity: record.identity, revision: record.revision, digest: createHash('sha256').update(encode(record)).digest('hex') };
45
+ }
46
+ function read(reference) {
47
+ const source = storage();
48
+ if (reference.version !== 1 || reference.identity !== source.identity || !Number.isSafeInteger(reference.revision) || reference.revision < 0
49
+ || !/^[a-f0-9]{64}$/.test(reference.digest))
50
+ throw new DynamicHistoryError('history-invalid', 'Canonical history reference is invalid or foreign');
51
+ const record = source.read(reference, DYNAMIC_HISTORY_RECORD_BYTES);
52
+ if (record.version !== 1 || !isDeepStrictEqual(dynamicHistoryReference(record), reference))
53
+ throw new DynamicHistoryError('history-invalid', 'Canonical history content differs from its reference');
54
+ return record;
55
+ }
56
+ function write(record) {
57
+ const source = storage();
58
+ if (source.identity !== record.identity)
59
+ throw new DynamicHistoryError('history-invalid', 'Canonical history owner differs');
60
+ const reference = dynamicHistoryReference(record);
61
+ source.write(reference, structuredClone(record));
62
+ return reference;
63
+ }
64
+ export function archiveDynamicState(previous, next) {
65
+ if (!previous.historyArchive && (previous.revision !== 0 || !storageScope.getStore()))
66
+ return next;
67
+ const source = storage();
68
+ const genesis = previous.historyArchive?.genesis ?? write({ version: 1, identity: source.identity, revision: 0, previous: null, kind: 'genesis', state: previous });
69
+ const entry = next.history.at(-1);
70
+ const audit = next.audit.at(-1);
71
+ if (!entry || !audit || entry.revision !== previous.revision + 1 || audit.revision !== entry.revision)
72
+ throw new DynamicHistoryError('history-invalid', 'Canonical history must append its next exact beat');
73
+ const head = write({ version: 1, identity: source.identity, revision: entry.revision, previous: previous.historyArchive?.head ?? genesis, kind: 'beat', entry, audit });
74
+ return { ...next, historyArchive: { version: 1, genesis, head }, history: next.history.slice(-DYNAMIC_HISTORY_WINDOW), audit: next.audit.slice(-DYNAMIC_HISTORY_WINDOW) };
75
+ }
76
+ /** Rebuild derived storage from an original transition before parsing its referenced state. */
77
+ export function stageDynamicHistoryTransition(previous, next) {
78
+ if (!next?.historyArchive)
79
+ return;
80
+ if (!previous)
81
+ throw new DynamicHistoryError('history-invalid', 'Archived history needs its original predecessor');
82
+ const rebuilt = archiveDynamicState(previous, next);
83
+ if (!isDeepStrictEqual(rebuilt.historyArchive, next.historyArchive))
84
+ throw new DynamicHistoryError('history-invalid', 'Canonical history rewrites its committed prefix');
85
+ }
86
+ export function readDynamicHistory(state) {
87
+ const archive = state.historyArchive;
88
+ if (!archive) {
89
+ if (!state.history || !state.audit)
90
+ throw new DynamicHistoryError('history-invalid', 'Unarchived history is missing');
91
+ return { genesis: null, history: state.history, audit: state.audit };
92
+ }
93
+ const source = storage();
94
+ if (archive.head.identity !== source.identity || archive.genesis.identity !== source.identity)
95
+ throw new DynamicHistoryError('history-invalid', 'Canonical history reference is invalid or foreign');
96
+ if (!Number.isSafeInteger(state.revision) || state.revision < 0 || archive.version !== 1 || archive.genesis.revision !== 0 || archive.head.revision < state.revision)
97
+ throw new DynamicHistoryError('history-invalid', 'Canonical history range is invalid');
98
+ const prefix = (value) => state.revision === archive.head.revision ? value
99
+ : { genesis: value.genesis, history: Object.freeze(value.history.slice(0, state.revision)), audit: Object.freeze(value.audit.slice(0, state.revision)) };
100
+ const key = JSON.stringify([archive, state.gameKind, state.rulesVersion, state.seed, state.initialization]);
101
+ const prior = views.get(source)?.find(item => item.key === key);
102
+ if (prior)
103
+ return prefix(prior.value);
104
+ // Keep references while walking backward; record bodies are bounded individual reads.
105
+ const refs = [];
106
+ let cursor = archive.head;
107
+ while (cursor.revision > 0) {
108
+ const record = read(cursor);
109
+ if (record.kind !== 'beat' || !record.previous || record.previous.revision !== record.revision - 1
110
+ || record.entry.revision !== record.revision || record.audit.revision !== record.revision)
111
+ throw new DynamicHistoryError('history-invalid', 'Canonical history is incomplete or out of order');
112
+ refs.push(cursor);
113
+ cursor = record.previous;
114
+ }
115
+ if (!isDeepStrictEqual(cursor, archive.genesis))
116
+ throw new DynamicHistoryError('history-invalid', 'Canonical history has a different genesis');
117
+ const first = read(cursor);
118
+ if (first.kind !== 'genesis' || first.previous !== null || first.state.revision !== 0 || first.state.historyArchive !== undefined
119
+ || first.state.gameKind !== state.gameKind || first.state.rulesVersion !== state.rulesVersion || first.state.seed !== state.seed
120
+ || !isDeepStrictEqual(first.state.initialization, state.initialization))
121
+ throw new DynamicHistoryError('history-invalid', 'Canonical history genesis identity is invalid');
122
+ const history = [];
123
+ const audit = [];
124
+ for (const reference of refs.reverse()) {
125
+ const record = read(reference);
126
+ if (record.kind !== 'beat')
127
+ throw new DynamicHistoryError('history-invalid', 'Canonical history beat is unavailable');
128
+ history.push(parseDynamicHistoryEntry(record.entry));
129
+ audit.push(parseDynamicAuditEntry(record.audit));
130
+ }
131
+ const result = makeImmutable({ genesis: first.state, history, audit });
132
+ // Two immutable decoded views, at most four MiB each, per owned operation.
133
+ if (Buffer.byteLength(JSON.stringify(result)) <= 4_194_304) {
134
+ const retained = views.get(source) ?? [];
135
+ views.set(source, [...retained.slice(-1), { key, value: result }]);
136
+ }
137
+ return prefix(result);
138
+ }
139
+ export function dynamicHistory(state) { return readDynamicHistory(state).history; }
140
+ export function dynamicMemoryHistory(state) {
141
+ if (!state.historyArchive)
142
+ return undefined;
143
+ const source = readDynamicHistory(state);
144
+ const memories = Object.fromEntries(source.genesis.agents.map(actor => [actor.actorId, [...actor.memories]]));
145
+ for (const entry of source.history)
146
+ for (const update of entry.gmProposal.agentUpdates)
147
+ memories[update.actorId]?.push(...update.memoriesToAppend);
148
+ return memories;
149
+ }
150
+ export function dynamicBeliefEvidenceHistory(state) {
151
+ if (!state.historyArchive)
152
+ return undefined;
153
+ const source = readDynamicHistory(state);
154
+ const actors = new Map(source.genesis.agents.map(actor => [actor.actorId,
155
+ new Map(actor.beliefs.map(belief => [belief.id, new Set(belief.evidenceEventIds)]))]));
156
+ for (const entry of source.history)
157
+ for (const update of entry.gmProposal.agentUpdates) {
158
+ const beliefs = actors.get(update.actorId);
159
+ if (!beliefs)
160
+ throw new DynamicHistoryError('history-invalid', 'Archived belief actor is unavailable');
161
+ for (const belief of update.beliefsToAppend)
162
+ beliefs.set(belief.id, new Set(belief.evidenceEventIds));
163
+ for (const updateBelief of update.beliefUpdates) {
164
+ const evidence = beliefs.get(updateBelief.beliefId);
165
+ if (!evidence)
166
+ throw new DynamicHistoryError('history-invalid', 'Archived belief is unavailable');
167
+ for (const eventId of updateBelief.evidenceEventIds)
168
+ evidence.add(eventId);
169
+ }
170
+ }
171
+ return Object.fromEntries([...actors].map(([actorId, beliefs]) => [actorId,
172
+ Object.fromEntries([...beliefs].map(([beliefId, evidence]) => [beliefId, [...evidence]]))]));
173
+ }
@@ -8,6 +8,7 @@ import { join, dirname } from 'path';
8
8
  import { existsSync, mkdirSync } from 'fs';
9
9
  import { fileURLToPath } from 'url';
10
10
  import { randomUUID } from 'crypto';
11
+ import { resolveOwnedCliLaunch } from '../../../desktop/cli_launch.js';
11
12
  import { DEFAULT_FREE_SIM_CONFIG } from '../../types.js';
12
13
  import { extractMeetingUtterance, isZtcRequestBusEnvelope } from './message_envelope.js';
13
14
  import { clearBusTransport, setBusTransport } from '../../../agent/tools/bus_message.js';
@@ -427,7 +428,7 @@ export async function setupRealPanes(state, logs, infra, onProgress, agentsOverr
427
428
  }
428
429
  // 5. Start PaneRelayServer so children can manage sub-panes
429
430
  infra.relayServer = new PaneRelayServer(infra.tuiProcess, simEnv.ZTC_PANE_RELAY);
430
- infra.relayServer.start();
431
+ await infra.relayServer.start();
431
432
  // 6. Wire bus transport (same pattern as cli_ratatui.ts:419-431)
432
433
  const server = infra.mirrorServer;
433
434
  setBusTransport({
@@ -487,15 +488,15 @@ export async function setupRealPanes(state, logs, infra, onProgress, agentsOverr
487
488
  }
488
489
  else {
489
490
  const paneCreated = waitForPaneCreated(infra.tuiProcess, paneTitle, PANE_CREATION_TIMEOUT_MS, stopSignal);
491
+ const childArgs = ['--headless', '--pane', '--session-id', sessionId,
492
+ '--model', state.config.model, '--provider', state.config.provider];
493
+ const ownedLaunch = resolveOwnedCliLaunch(childArgs);
490
494
  const sent = infra.tuiProcess.send({
491
495
  type: 'create_pane',
492
- command: process.execPath,
496
+ command: ownedLaunch?.command ?? process.execPath,
493
497
  // --headless --pane: child enters RatatuiApp headless-mirror path with bus
494
498
  // connectivity via MirrorClient (ZTC_MIRROR_PORT).
495
- args: [
496
- ztcEntry, '--headless', '--pane', '--session-id', sessionId,
497
- '--model', state.config.model, '--provider', state.config.provider,
498
- ],
499
+ args: ownedLaunch?.args ?? [ztcEntry, ...childArgs],
499
500
  cwd: state.config.outputDir,
500
501
  title: paneTitle,
501
502
  pane_type: 'ztc',
@@ -3,10 +3,12 @@ export interface ResolvedSimulationInference {
3
3
  provider: string;
4
4
  model: string;
5
5
  codexEffort?: CodexReasoningEffort;
6
+ codexFastMode?: boolean;
6
7
  apiKey?: string;
7
8
  baseUrl?: string;
8
9
  embeddingApiKey?: string;
9
10
  embeddingBaseUrl?: string;
10
11
  embeddingModel?: string;
12
+ codexAuthFilePath?: string;
11
13
  }
12
- export declare function resolveSimulationInference(): ResolvedSimulationInference;
14
+ export declare function resolveSimulationInference(explicitRoute?: Pick<ResolvedSimulationInference, 'provider' | 'model' | 'codexEffort' | 'codexFastMode'>): ResolvedSimulationInference;
@@ -13,7 +13,25 @@ function resolveApiKeyFromConfig(provider, explicitApiKey, envVarName) {
13
13
  }
14
14
  return configStore.getApiKey(provider) || process.env.OPENAI_API_KEY;
15
15
  }
16
- export function resolveSimulationInference() {
16
+ export function resolveSimulationInference(explicitRoute) {
17
+ if (explicitRoute) {
18
+ const backendConfig = configStore.resolveLLMBackendConfig({
19
+ provider: explicitRoute.provider,
20
+ model: explicitRoute.model,
21
+ });
22
+ const apiKey = resolveApiKeyFromConfig(explicitRoute.provider);
23
+ const baseUrl = explicitRoute.provider === 'openai_compatible'
24
+ ? configStore.getOpenAICompatibleBaseUrl() || undefined
25
+ : undefined;
26
+ return {
27
+ ...explicitRoute,
28
+ apiKey,
29
+ baseUrl,
30
+ embeddingApiKey: apiKey,
31
+ embeddingBaseUrl: baseUrl,
32
+ codexAuthFilePath: backendConfig.codexAuthFilePath,
33
+ };
34
+ }
17
35
  const envProvider = process.env.ZTC_SIM_PROVIDER;
18
36
  const envModel = process.env.ZTC_SIM_MODEL;
19
37
  if (envProvider && envModel) {
@@ -0,0 +1,27 @@
1
+ import type { SimulationPersistentAgentStateV1 } from '../plugin/simulation_contract.js';
2
+ import type { ActorInterventionContext } from '../plugin/simulation_interventions.js';
3
+ interface Schema {
4
+ [key: string]: unknown;
5
+ properties?: Record<string, Schema>;
6
+ required?: string[];
7
+ anyOf?: Schema[];
8
+ oneOf?: Schema[];
9
+ items?: Schema;
10
+ enum?: readonly unknown[];
11
+ }
12
+ /** Bind the explicitly selected receipt to its typed output; acceptance remains canonical. */
13
+ export declare function interventionActorResponseSchema(context: ActorInterventionContext, updateSchema: Schema, actor: SimulationPersistentAgentStateV1, causeIds: readonly string[], agencyVersion?: 'emergent-v1', receiptVersion?: 1 | 2 | 3): Schema;
14
+ /** Offer one optional slot per already-permitted relationship target. */
15
+ export declare function keyedActorResponseSchema(schema: Schema): Schema;
16
+ export type DynamicActorInstructionVersion = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11;
17
+ export interface ActorReceiptCauseBinding {
18
+ readonly version: 3;
19
+ readonly actorId: string;
20
+ readonly revision: number;
21
+ readonly inputIds: readonly string[];
22
+ readonly sourceActionIds: readonly string[];
23
+ readonly sourceAdjudicationProposalIds?: readonly string[];
24
+ }
25
+ /** Move explicit wire witnesses into their canonical update without changing authored values. */
26
+ export declare function normalizeDynamicActorResponse(value: Record<string, unknown>, version: DynamicActorInstructionVersion, binding?: ActorReceiptCauseBinding): Record<string, unknown>;
27
+ export {};
@@ -0,0 +1,246 @@
1
+ import { intentSchema } from './toolkit/dynamic_state.js';
2
+ import { isDeepStrictEqual } from 'node:util';
3
+ import { interventionResolutionSchema, SimulationInputError } from './session_input_validation.js';
4
+ /** Bind the explicitly selected receipt to its typed output; acceptance remains canonical. */
5
+ export function interventionActorResponseSchema(context, updateSchema, actor, causeIds, agencyVersion, receiptVersion = 1) {
6
+ const properties = updateSchema.properties;
7
+ const goals = properties.goalsToAppend.items.properties.id.enum;
8
+ const receipts = interventionResolutionSchema(context, updateSchema, actor.goals.filter(goal => goal.status === 'active').map(goal => goal.id), causeIds, agencyVersion);
9
+ if (agencyVersion === 'emergent-v1' && (receiptVersion === 2 || receiptVersion === 3)) {
10
+ const receipt = receipts.items.anyOf[0];
11
+ const kinds = receipt.properties.change.anyOf;
12
+ const changes = kinds.flatMap(option => {
13
+ const kind = option.properties.kind.const;
14
+ const fields = kind === 'intent' ? [['nextIntent', properties.nextIntent]]
15
+ : kind === 'belief' ? [['beliefUpdate', properties.beliefUpdates.items], ['beliefToAppend', properties.beliefsToAppend.items]]
16
+ : [['relationshipDelta', properties.relationshipDeltas.items]];
17
+ return fields.map(([field, schema]) => ({ ...option, required: [...option.required, field],
18
+ properties: { ...option.properties, [field]: schema } }));
19
+ });
20
+ const linked = { ...receipts, items: { anyOf: [
21
+ { ...receipt, properties: { ...receipt.properties, change: { anyOf: changes } } },
22
+ receipts.items.anyOf[1],
23
+ ] } };
24
+ if (receiptVersion === 3) {
25
+ linked.items.anyOf = linked.items.anyOf.map(item => {
26
+ const { causeIds: _causeIds, ...properties } = item.properties;
27
+ return { ...item, required: item.required.filter(field => field !== 'causeIds'), properties };
28
+ });
29
+ }
30
+ return { type: 'object', additionalProperties: false, required: ['consequence'], properties: { consequence: {
31
+ type: 'object', additionalProperties: false, required: ['agentUpdate', 'inputResolutions', 'receiptVersion'], properties: {
32
+ agentUpdate: { anyOf: [updateSchema, { type: 'null' }] }, inputResolutions: linked, receiptVersion: { const: receiptVersion, type: 'integer' },
33
+ },
34
+ } }, 'x-ztc-compact-keys': true };
35
+ }
36
+ if (agencyVersion === 'emergent-v1')
37
+ return {
38
+ type: 'object', additionalProperties: false, required: ['consequence'], properties: { consequence: {
39
+ type: 'object', additionalProperties: false, required: ['agentUpdate', 'inputResolutions'], properties: {
40
+ agentUpdate: { anyOf: [updateSchema, { type: 'null' }] }, inputResolutions: receipts,
41
+ },
42
+ } }, 'x-ztc-compact-keys': true,
43
+ };
44
+ const branches = [];
45
+ const intentsForGoal = (goalId) => properties.nextIntent.anyOf.flatMap(option => option.oneOf ?? []).filter(intent => {
46
+ const goal = intent.properties.goalId;
47
+ return goal.const === goalId || goal.enum?.includes(goalId);
48
+ }).map(intent => ({ ...intent, properties: { ...intent.properties, goalId: { const: goalId } } }));
49
+ const existingIntents = actor.goals.filter(goal => goal.status === 'active').flatMap(goal => intentsForGoal(goal.id));
50
+ const existingNextIntent = { anyOf: [{ type: 'null' }, ...(existingIntents.length ? [{ oneOf: existingIntents }] : [])] };
51
+ const branch = (kind, recordId, fields) => {
52
+ const update = { ...updateSchema, required: [...new Set([...updateSchema.required, ...Object.keys(fields)])], properties: { ...properties, nextIntent: existingNextIntent, ...fields } };
53
+ branches.push({ type: 'object', additionalProperties: false, required: ['agentUpdate', 'inputResolutions'], properties: {
54
+ agentUpdate: update,
55
+ inputResolutions: { ...receipts, items: { ...receipts.items, properties: { ...receipts.items.properties,
56
+ change: { type: 'object', additionalProperties: false, required: ['kind', 'recordId'], properties: { kind: { const: kind }, recordId: { const: recordId } } }, } } },
57
+ } });
58
+ };
59
+ const selectedArray = (name, idField, id, extra = {}) => ({
60
+ ...properties[name], minItems: 1, maxItems: 1, items: { ...properties[name].items, properties: { ...properties[name].items.properties, [idField]: { const: id }, ...extra } },
61
+ });
62
+ for (const goalId of [...actor.goals.filter(goal => goal.status === 'active').map(goal => goal.id), ...goals]) {
63
+ const intents = intentsForGoal(goalId);
64
+ if (intents.length > 0)
65
+ branch('intent', goalId, {
66
+ nextIntent: { anyOf: intents },
67
+ ...(goals.includes(goalId) ? { goalsToAppend: selectedArray('goalsToAppend', 'id', goalId) } : {}),
68
+ });
69
+ }
70
+ for (const belief of actor.beliefs) {
71
+ const confidence = [
72
+ ...(belief.confidence > 0 ? [{ type: 'integer', minimum: 0, maximum: belief.confidence - 1 }] : []),
73
+ ...(belief.confidence < 100 ? [{ type: 'integer', minimum: belief.confidence + 1, maximum: 100 }] : []),
74
+ ];
75
+ branch('belief', belief.id, { beliefUpdates: selectedArray('beliefUpdates', 'beliefId', belief.id, { confidence: { anyOf: confidence } }) });
76
+ }
77
+ for (const id of properties.beliefsToAppend.items.properties.id.enum) {
78
+ branch('belief', id, { beliefsToAppend: selectedArray('beliefsToAppend', 'id', id) });
79
+ }
80
+ for (const id of properties.relationshipDeltas.items.properties.targetActorId.enum) {
81
+ branch('relationship', id, { relationshipDeltas: selectedArray('relationshipDeltas', 'targetActorId', id) });
82
+ }
83
+ return { type: 'object', additionalProperties: false, required: ['consequence'], properties: { consequence: { anyOf: branches } }, 'x-ztc-compact-keys': true };
84
+ }
85
+ /** Offer one optional slot per already-permitted relationship target. */
86
+ export function keyedActorResponseSchema(schema) {
87
+ const result = structuredClone(schema);
88
+ const envelope = result.properties.consequence ?? result;
89
+ const update = envelope.properties.agentUpdate.anyOf[0];
90
+ const entries = update.properties.relationshipDeltas.items.anyOf ?? [];
91
+ update.properties.relationshipDeltas = { type: 'object', additionalProperties: false, required: [],
92
+ properties: Object.fromEntries(entries.map(entry => [entry.properties.targetActorId.const, entry])),
93
+ };
94
+ result['x-ztc-keyed-relationships'] = 2;
95
+ return result;
96
+ }
97
+ /** Move explicit wire witnesses into their canonical update without changing authored values. */
98
+ export function normalizeDynamicActorResponse(value, version, binding) {
99
+ function invalid() { throw new SimulationInputError('input_resolution_invalid', 'Actor receipt wire version or typed witness is invalid'); }
100
+ if (![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].includes(version))
101
+ invalid();
102
+ const object = (item) => item !== null && typeof item === 'object' && !Array.isArray(item);
103
+ const envelope = structuredClone(value);
104
+ if (binding !== undefined) {
105
+ const consequence = envelope.consequence;
106
+ if (binding.version !== 3 || ![8, 9, 11].includes(version) || !object(consequence)
107
+ || consequence.receiptVersion !== 3 || !Array.isArray(consequence.inputResolutions)
108
+ || binding.inputIds.length === 0 || new Set(binding.inputIds).size !== binding.inputIds.length)
109
+ invalid();
110
+ const sources = [...binding.sourceActionIds, ...(binding.sourceAdjudicationProposalIds ?? [])];
111
+ if (new Set(sources).size !== sources.length || sources.some(id => binding.inputIds.includes(id)))
112
+ invalid();
113
+ const results = consequence.inputResolutions;
114
+ if (results.length !== binding.inputIds.length || new Set(results.map(result => object(result) ? result.inputId : null)).size !== binding.inputIds.length)
115
+ invalid();
116
+ const sameIds = (actual, expected) => Array.isArray(actual)
117
+ && actual.every(id => typeof id === 'string') && isDeepStrictEqual([...actual].sort(), [...expected].sort());
118
+ const update = consequence.agentUpdate;
119
+ if (update !== null && (!object(update) || update.actorId !== binding.actorId
120
+ || (update.sourceActionIds !== undefined && !sameIds(update.sourceActionIds, binding.sourceActionIds))
121
+ || (update.sourceAdjudicationProposalIds !== undefined && !sameIds(update.sourceAdjudicationProposalIds, binding.sourceAdjudicationProposalIds ?? []))))
122
+ invalid();
123
+ for (const result of results) {
124
+ if (!object(result) || result.actorId !== binding.actorId || result.revision !== binding.revision
125
+ || typeof result.inputId !== 'string' || !binding.inputIds.includes(result.inputId) || Object.hasOwn(result, 'causeIds'))
126
+ invalid();
127
+ result.causeIds = result.change === null ? [result.inputId] : [result.inputId, ...sources];
128
+ }
129
+ consequence.receiptVersion = 2;
130
+ }
131
+ if (version === 10 || version === 11) {
132
+ const body = version === 11 ? envelope.consequence : envelope;
133
+ if (!object(body))
134
+ invalid();
135
+ const update = body.agentUpdate;
136
+ if (object(update) && Object.hasOwn(update, 'relationshipDeltas')) {
137
+ const slots = update.relationshipDeltas;
138
+ if (!object(slots))
139
+ invalid();
140
+ update.relationshipDeltas = Object.entries(slots).flatMap(([targetActorId, delta]) => {
141
+ if (delta === null)
142
+ return [];
143
+ if (!object(delta) || delta.targetActorId !== targetActorId)
144
+ invalid();
145
+ return [delta];
146
+ });
147
+ }
148
+ version = version === 10 ? 7 : 9;
149
+ }
150
+ if (version !== 6 && version !== 8 && version !== 9) {
151
+ if (Object.hasOwn(envelope, 'receiptVersion') || (object(envelope.consequence) && Object.hasOwn(envelope.consequence, 'receiptVersion')))
152
+ invalid();
153
+ return envelope;
154
+ }
155
+ const consequence = envelope.consequence;
156
+ if (Object.keys(envelope).length !== 1 || !object(consequence) || consequence.receiptVersion !== 2
157
+ || Object.keys(consequence).sort().join(',') !== 'agentUpdate,inputResolutions,receiptVersion'
158
+ || !Array.isArray(consequence.inputResolutions) || (consequence.agentUpdate !== null && !object(consequence.agentUpdate)))
159
+ invalid();
160
+ let update = consequence.agentUpdate;
161
+ const pending = new Map();
162
+ for (const result of consequence.inputResolutions) {
163
+ if (!object(result))
164
+ invalid();
165
+ const change = result.change;
166
+ if (change === null)
167
+ continue;
168
+ if (!object(change) || typeof result.actorId !== 'string')
169
+ invalid();
170
+ const fields = change.kind === 'intent' ? ['nextIntent'] : change.kind === 'belief' ? ['beliefUpdate', 'beliefToAppend']
171
+ : change.kind === 'relationship' ? ['relationshipDelta'] : invalid();
172
+ const present = fields.filter(field => Object.hasOwn(change, field));
173
+ if (present.length !== 1 || Object.keys(change).length !== 3 || typeof change.recordId !== 'string')
174
+ invalid();
175
+ update ??= { actorId: result.actorId };
176
+ if (update.actorId !== result.actorId)
177
+ invalid();
178
+ const field = present[0];
179
+ const authored = change[field];
180
+ if (field === 'nextIntent') {
181
+ if (authored !== null && !object(authored))
182
+ invalid();
183
+ if (version === 9) {
184
+ if (authored !== null && !intentSchema.safeParse(authored).success)
185
+ invalid();
186
+ if (Object.hasOwn(update, field)) {
187
+ const canonical = update[field];
188
+ if (canonical !== null && !intentSchema.safeParse(canonical).success)
189
+ invalid();
190
+ const actionFields = (intent) => intent === null ? null
191
+ : Object.fromEntries(Object.entries(intent).filter(([key]) => key !== 'summary'));
192
+ if (!isDeepStrictEqual(actionFields(canonical), actionFields(authored)))
193
+ invalid();
194
+ }
195
+ else
196
+ update[field] = authored;
197
+ }
198
+ else {
199
+ if (Object.hasOwn(update, field) && !isDeepStrictEqual(update[field], authored))
200
+ invalid();
201
+ update[field] = authored;
202
+ }
203
+ }
204
+ else {
205
+ if (!object(authored))
206
+ invalid();
207
+ const [target, idField] = field === 'beliefUpdate' ? ['beliefUpdates', 'beliefId']
208
+ : field === 'beliefToAppend' ? ['beliefsToAppend', 'id'] : ['relationshipDeltas', 'targetActorId'];
209
+ const id = authored[idField];
210
+ if (typeof id !== 'string' || id !== change.recordId)
211
+ invalid();
212
+ const values = pending.get(target) ?? new Map();
213
+ const prior = values.get(id);
214
+ if (prior !== undefined && !isDeepStrictEqual(prior, authored))
215
+ invalid();
216
+ values.set(id, authored);
217
+ pending.set(target, values);
218
+ }
219
+ result.change = { kind: change.kind, recordId: change.recordId };
220
+ }
221
+ for (const [target, values] of pending) {
222
+ const idField = target === 'beliefUpdates' ? 'beliefId' : target === 'beliefsToAppend' ? 'id' : 'targetActorId';
223
+ const prior = update[target];
224
+ if (prior !== undefined && !Array.isArray(prior))
225
+ invalid();
226
+ const merged = (prior ?? []);
227
+ for (const [id, authored] of [...values].sort(([left], [right]) => left.localeCompare(right))) {
228
+ const matching = merged.filter(item => object(item) && item[idField] === id);
229
+ if (matching.length > 1 || (matching.length === 1 && !isDeepStrictEqual(matching[0], authored)))
230
+ invalid();
231
+ if (matching.length === 0)
232
+ merged.push(authored);
233
+ }
234
+ update[target] = merged;
235
+ }
236
+ if (update !== null) {
237
+ const existing = update.beliefUpdates;
238
+ const appended = update.beliefsToAppend;
239
+ if (Array.isArray(existing) && Array.isArray(appended) && existing.some(item => object(item)
240
+ && appended.some(other => object(other) && item.beliefId === other.id)))
241
+ invalid();
242
+ }
243
+ consequence.agentUpdate = update;
244
+ delete consequence.receiptVersion;
245
+ return envelope;
246
+ }
@@ -0,0 +1,4 @@
1
+ import type { SimulationDynamicHistoryEntryV1, SimulationPersistentAgentStateV1 } from '../plugin/simulation_contract.js';
2
+ import type { SimulationInterventionResolutionV1 } from '../plugin/simulation_interventions.js';
3
+ /** Check the claimed change or a permitted no-change decision; canonical transition validation owns the world. */
4
+ export declare function hasMaterialInterventionChange(before: SimulationPersistentAgentStateV1, entry: SimulationDynamicHistoryEntryV1, result: SimulationInterventionResolutionV1, after?: SimulationPersistentAgentStateV1, agencyVersion?: 'emergent-v1', beliefEvidenceHistory?: Readonly<Record<string, readonly string[]>>): boolean;