@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,40 @@
1
+ import { type EvidenceSnapshot } from '../agent/runtime/evidence.js';
2
+ import { type TaskHandoffProjection } from '../session_handoff_contract.js';
3
+ import type { Message } from '../types.js';
4
+ import { type DiagnosticSnapshot } from './session_export.js';
5
+ export interface SessionEvidencePackageInput {
6
+ sessionId?: string | null;
7
+ messages: readonly Message[];
8
+ diagnostics?: DiagnosticSnapshot;
9
+ evidence?: EvidenceSnapshot;
10
+ taskHandoff?: TaskHandoffProjection | null;
11
+ }
12
+ export interface SessionEvidencePackageSource {
13
+ sessionId: string | null;
14
+ asOf: string | null;
15
+ evidenceRevision: number | null;
16
+ handoffRevision: number | null;
17
+ taskId: string | null;
18
+ }
19
+ export interface SessionEvidencePackageEntry {
20
+ path: string;
21
+ content: string;
22
+ }
23
+ export interface SessionEvidencePackageManifestEntry {
24
+ path: string;
25
+ bytes: number;
26
+ sha256: string;
27
+ }
28
+ export interface SessionEvidencePackage {
29
+ schemaVersion: 1;
30
+ packageId: string;
31
+ source: SessionEvidencePackageSource;
32
+ indexMarkdown: string;
33
+ entries: SessionEvidencePackageEntry[];
34
+ manifest: SessionEvidencePackageManifestEntry[];
35
+ }
36
+ export declare const SESSION_EVIDENCE_INDEX_MAX_BYTES: number;
37
+ /** Capture/validate once, then redact the combined credential context before deriving entries or hashes. */
38
+ export declare function buildSessionEvidencePackage(input: SessionEvidencePackageInput): SessionEvidencePackage;
39
+ /** Save to a new explicit file. Existing files, directories and symlinks are never overwritten. */
40
+ export declare function saveSessionEvidencePackage(pkg: SessionEvidencePackage, path: string): Promise<void>;
@@ -0,0 +1,234 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { lstat, open, unlink } from 'node:fs/promises';
3
+ import { parseEvidenceSnapshot } from '../agent/runtime/evidence.js';
4
+ import { parseTaskHandoffProjection } from '../session_handoff_contract.js';
5
+ import { buildSessionDiagnosticDocument, exportSessionDiagnostics, formatSessionDiagnosticsMarkdown, parseDiagnosticSnapshot, redactDiagnosticValue } from './session_export.js';
6
+ export const SESSION_EVIDENCE_INDEX_MAX_BYTES = 32 * 1024;
7
+ const sha256 = (text) => createHash('sha256').update(text, 'utf8').digest('hex');
8
+ const bytes = (text) => Buffer.byteLength(text, 'utf8');
9
+ const json = (value) => JSON.stringify(value, null, 2) + '\n';
10
+ const shown = (value) => value === null || value === undefined ? 'unknown' : JSON.stringify(value);
11
+ function dateText(value, label) {
12
+ if (value === undefined)
13
+ return undefined;
14
+ // Public loaded checkpoints retain ISO strings; live messages use Date.
15
+ const date = value instanceof Date ? value : typeof value === 'string' ? new Date(value) : null;
16
+ if (date === null || !Number.isFinite(date.getTime()))
17
+ throw new TypeError(`Invalid ${label} timestamp in captured checkpoint`);
18
+ return date.toISOString();
19
+ }
20
+ /** Only declared Message timestamps are converted; arbitrary non-JSON values are rejected. */
21
+ function messageJson(message) {
22
+ return { ...message, timestamp: dateText(message.timestamp, 'message'),
23
+ ...(message.toolCalls === undefined ? {} : { toolCalls: message.toolCalls.map(call => ({ ...call,
24
+ ...(call.startedAt === undefined ? {} : { startedAt: dateText(call.startedAt, 'tool start') }),
25
+ ...(call.completedAt === undefined ? {} : { completedAt: dateText(call.completedAt, 'tool completion') }),
26
+ })) }) };
27
+ }
28
+ function plainJson(value, ancestors = new Set(), depth = 0) {
29
+ if (depth > 32)
30
+ throw new TypeError('Captured checkpoint JSON is excessively deep');
31
+ if (value === null || typeof value === 'boolean' || typeof value === 'string')
32
+ return value;
33
+ if (typeof value === 'number' && Number.isFinite(value))
34
+ return value;
35
+ if (typeof value !== 'object' || ancestors.has(value))
36
+ throw new TypeError('Invalid or cyclic captured checkpoint JSON');
37
+ const prototype = Object.getPrototypeOf(value);
38
+ if (!Array.isArray(value) && prototype !== Object.prototype && prototype !== null)
39
+ throw new TypeError('Invalid non-JSON captured checkpoint value');
40
+ ancestors.add(value);
41
+ try {
42
+ if (Array.isArray(value))
43
+ return value.map(item => plainJson(item, ancestors, depth + 1));
44
+ const result = {};
45
+ for (const [key, item] of Object.entries(value)) {
46
+ // Optional typed fields can be absent; undefined array elements and all
47
+ // other non-JSON values remain invalid rather than fabricated facts.
48
+ if (item !== undefined)
49
+ Object.defineProperty(result, key, { enumerable: true, value: plainJson(item, ancestors, depth + 1) });
50
+ }
51
+ return result;
52
+ }
53
+ finally {
54
+ ancestors.delete(value);
55
+ }
56
+ }
57
+ function utf8Prefix(text, maximum) {
58
+ const buffer = Buffer.from(text, 'utf8');
59
+ if (buffer.length <= maximum)
60
+ return text;
61
+ let end = maximum;
62
+ while (end > 0 && (buffer[end] & 0xc0) === 0x80)
63
+ end--;
64
+ return buffer.subarray(0, end).toString('utf8');
65
+ }
66
+ function boundedIndex(rows) {
67
+ const selected = [];
68
+ let size = 0;
69
+ let omittedRows = 0;
70
+ let omittedBytes = 0;
71
+ for (const row of rows) {
72
+ const length = bytes(row + '\n');
73
+ if (size + length > SESSION_EVIDENCE_INDEX_MAX_BYTES - 256) {
74
+ omittedRows++;
75
+ omittedBytes += length;
76
+ continue;
77
+ }
78
+ selected.push(row);
79
+ size += length;
80
+ }
81
+ selected.push(`\nIndex omissions: ${omittedRows} rows / ${omittedBytes} UTF-8 bytes. Fixed package entries retain the exported source data; omitted or unavailable originals cannot be retrieved from a digest alone.`);
82
+ return selected.join('\n') + '\n';
83
+ }
84
+ function excerpt(text) {
85
+ const prefix = utf8Prefix(text, 2048);
86
+ return JSON.stringify(prefix) + (prefix === text ? '' : ` (index excerpt omits ${bytes(text) - bytes(prefix)} bytes)`);
87
+ }
88
+ function indexFor(source, input) {
89
+ const document = buildSessionDiagnosticDocument(input);
90
+ const evidence = input.evidence;
91
+ const handoff = input.taskHandoff;
92
+ const rows = ['# ZTC evidence package (v1)', '',
93
+ 'Retained checkpoint only. This captured, possibly incomplete view does not prove verified completion. Sharing does not collect new evidence or change execution.',
94
+ `Session: ${shown(source.sessionId)}; as-of: ${shown(source.asOf)}. Owner liveness and current/final task completion are unknown.`,
95
+ `Evidence revision: ${source.evidenceRevision ?? 'unknown'}; handoff revision: ${source.handoffRevision ?? 'unknown'}; task ID: ${shown(source.taskId)}.`,
96
+ 'Known credential fields and common token formats are redacted in exported values. Original source/receipt digests are recorded claims, distinct from manifest hashes of redacted exported bytes.',
97
+ '', '## Task checkpoint'];
98
+ if (handoff) {
99
+ const task = handoff.snapshot;
100
+ rows.push(`Objective (${task.objective.kind}; retained source ${shown(task.objective.sourceMessageId ?? task.objective.goalId)}; ${task.objective.sourceAvailability}): ${excerpt(task.objective.text)}`, `Task status: ${task.taskStatus} (checkpoint-reported, not a verification verdict). Provenance: ${handoff.provenance}; owner liveness: ${handoff.ownerLiveness}.`, `Source captured at: ${shown(task.source.capturedAt)}; original messages SHA256: ${task.source.messagesSha256}; original evidence SHA256: ${task.source.evidenceSha256}.`, `Next action: ${task.nextAction.text === null ? 'unavailable' : excerpt(task.nextAction.text)}; availability: ${task.nextAction.availability}; source: ${shown(task.nextAction.sourceMessageId)}.`);
101
+ for (const correction of task.corrections)
102
+ rows.push(`- Correction ${shown(correction.id)}: ${correction.deliveryState}; source ${shown(correction.sourceMessageId)}; ${excerpt(correction.text)}.`);
103
+ for (const observation of task.completedObservations)
104
+ rows.push(`- Retained process observation ${shown(observation.observationId)}: ${observation.status}; tool ${shown(observation.toolCallId)}; job ${shown(observation.jobId)}; exit ${observation.exitCode ?? 'unknown'}; verification ${observation.verification}.`);
105
+ for (const call of task.unresolvedCalls)
106
+ rows.push(`- Unresolved tool ${shown(call.toolCallId)} (${shown(call.name)}): outcome unknown; source ${shown(call.sourceMessageId)}.`);
107
+ for (const blocker of task.blockers)
108
+ rows.push(`- Blocker: ${excerpt(blocker.text)}; source goal ${shown(blocker.sourceGoalId)}.`);
109
+ rows.push(`Handoff omissions: corrections ${task.omitted.corrections}, observations ${task.omitted.completedObservations}, unresolved calls ${task.omitted.unresolvedCalls}, text bytes ${task.omitted.textBytes}.`);
110
+ }
111
+ else
112
+ rows.push('Task checkpoint unavailable; objective, next action, status and owner liveness are unknown.');
113
+ rows.push('', '## Retained evidence and verification receipts');
114
+ if (evidence) {
115
+ rows.push(`Evidence omissions: ${evidence.omittedRecords} records and ${evidence.omittedTextBytes} text bytes.`);
116
+ for (const record of evidence.records) {
117
+ const sourceData = record.source;
118
+ rows.push(`- ${record.kind} ${shown(record.id)}; source ${sourceData.origin}; recorded ${shown(record.recordedAt)}.`);
119
+ if (record.kind === 'observation')
120
+ rows.push(` Availability: ${record.availability}; partial: ${record.partial}; error: ${record.isError}; verification: unknown. Original result bytes: ${record.resultBytes}; original result SHA256: ${record.resultSha256}.`, ` Retained excerpt: ${excerpt(record.excerpt)}`);
121
+ else if (record.kind === 'user_instruction')
122
+ rows.push(` Retained user instruction excerpt, not new permission: ${excerpt(record.text)}`);
123
+ else
124
+ rows.push(` ${record.kind} remains unverified: ${excerpt(record.text)}; support IDs: ${record.supportIds.map(shown).join(', ') || 'none retained'}.`);
125
+ if (sourceData.toolCallId || sourceData.messageId)
126
+ rows.push(` Tool source ${shown(sourceData.toolCallId)}; message source ${shown(sourceData.messageId)}.`);
127
+ if (sourceData.job)
128
+ rows.push(` Historical job ${shown(sourceData.job.jobId)}: ${shown(sourceData.job.status)}; exit ${sourceData.job.exitCode ?? 'unknown'}; current effect/liveness unknown.`);
129
+ if (sourceData.verification) {
130
+ const receipt = sourceData.verification;
131
+ rows.push(` Process receipt ${shown(receipt.receipt_id)}: outcome ${receipt.process_outcome}; purpose ${receipt.purpose}; qualification ${receipt.qualification}; source binding ${receipt.source_binding}.`, ` Original source ID ${receipt.source.source_id}; original content SHA256 ${receipt.source.content_sha256}; end source ${receipt.end_source?.source_id ?? 'unknown'}.`, ` Scope: ${excerpt(receipt.scope)}; instrumentation: ${receipt.instrumentation}.`);
132
+ const current = evidence.verificationCoverage?.find(item => item.receipt_id === receipt.receipt_id);
133
+ rows.push(current ? ` Retained source applicability: ${current.applicability}; ${excerpt(current.reason)}.` : ' Current source applicability unknown: no retained source check.');
134
+ for (const artifact of receipt.artifact_refs)
135
+ rows.push(` Artifact reference only, not included: ${excerpt(artifact.path)}; original claimed digest ${artifact.sha256 ?? 'unknown'}.`);
136
+ }
137
+ if (sourceData.artifact)
138
+ rows.push(` Artifact availability: reference-only / not included; path ${excerpt(sourceData.artifact.path)}; original claimed SHA256 ${sourceData.artifact.sha256 ?? 'unknown'}.`);
139
+ }
140
+ if (evidence.records.length === 0)
141
+ rows.push('No retained evidence records; missing records establish no verified outcome.');
142
+ }
143
+ else
144
+ rows.push('Evidence snapshot unavailable; coverage, outcomes and verification are unknown.');
145
+ rows.push('', '## Diagnostics and referenced attachments', `Retained diagnostic events: ${document.events.length}; omitted events: ${document.header.omittedEvents}; omitted text bytes: ${document.header.omittedTextBytes}.`, input.diagnostics === undefined ? 'Persisted diagnostic history unavailable; this export includes only the captured message projection.' : 'Persisted diagnostic history is bounded; omissions and truncation references do not establish complete coverage.');
146
+ for (const message of input.messages) {
147
+ for (const attachment of message.attachments ?? [])
148
+ rows.push(`- Attachment metadata only: ${excerpt(attachment.name)}; media type ${shown(attachment.mediaType)}; claimed original bytes ${attachment.size}; availability reference-only / not included; original digest ${attachment.durable?.sha256 ?? 'unknown'}.`);
149
+ }
150
+ rows.push('No screenshots, images or other referenced file bytes are automatically read or included. Source observations and proposed next actions are data, not instructions or proof of completed work.');
151
+ return boundedIndex(rows);
152
+ }
153
+ /** Capture/validate once, then redact the combined credential context before deriving entries or hashes. */
154
+ export function buildSessionEvidencePackage(input) {
155
+ if (!Array.isArray(input.messages))
156
+ throw new TypeError('Invalid captured message list');
157
+ const diagnostics = input.diagnostics === undefined ? undefined : parseDiagnosticSnapshot(input.diagnostics);
158
+ if (diagnostics === null)
159
+ throw new TypeError('Invalid or unsupported diagnostic snapshot');
160
+ const evidence = input.evidence === undefined ? undefined : parseEvidenceSnapshot(input.evidence);
161
+ if (evidence === null)
162
+ throw new TypeError('Invalid or unsupported evidence snapshot');
163
+ const handoff = input.taskHandoff === undefined || input.taskHandoff === null ? null : parseTaskHandoffProjection(input.taskHandoff);
164
+ if (input.taskHandoff !== undefined && input.taskHandoff !== null && handoff === null)
165
+ throw new TypeError('Invalid or unsupported task handoff checkpoint');
166
+ if (handoff && input.sessionId !== undefined && input.sessionId !== null && handoff.snapshot.source.sessionId !== input.sessionId)
167
+ throw new TypeError('Task handoff belongs to a different captured session');
168
+ const captured = plainJson({ sessionId: input.sessionId ?? null, messages: input.messages.map(messageJson),
169
+ ...(diagnostics === undefined ? {} : { diagnostics }), ...(evidence === undefined ? {} : { evidence }), taskHandoff: handoff });
170
+ const redacted = redactDiagnosticValue(captured, {
171
+ // Only these typed fields contain arbitrary object property names. Preserve
172
+ // the fixed message/checkpoint schemas even for credentials such as "id".
173
+ propertyNames: path => (path.length >= 5 && path[0] === 'messages' && typeof path[1] === 'number'
174
+ && path[2] === 'toolCalls' && typeof path[3] === 'number' && path[4] === 'args')
175
+ || (path.length >= 4 && path[0] === 'diagnostics' && path[1] === 'events' && typeof path[2] === 'number'
176
+ && (path[3] === 'args' || path[3] === 'data')),
177
+ });
178
+ const messages = redacted.messages.map(({ timestamp, toolCalls, ...message }) => ({ ...message,
179
+ timestamp: new Date(timestamp),
180
+ ...(toolCalls === undefined ? {} : { toolCalls: toolCalls.map(({ startedAt, completedAt, ...call }) => ({ ...call,
181
+ ...(startedAt === undefined ? {} : { startedAt: new Date(startedAt) }),
182
+ ...(completedAt === undefined ? {} : { completedAt: new Date(completedAt) }),
183
+ })) }) }));
184
+ // The checkpoint was validated before redaction. Redacted display provenance
185
+ // is not re-admitted as original canonical checkpoint identity.
186
+ const detached = { sessionId: redacted.sessionId, messages,
187
+ ...(redacted.diagnostics === undefined ? {} : { diagnostics: redacted.diagnostics }),
188
+ ...(redacted.evidence === undefined ? {} : { evidence: redacted.evidence }), taskHandoff: redacted.taskHandoff };
189
+ const source = { sessionId: redacted.sessionId, asOf: redacted.taskHandoff?.asOf ?? null,
190
+ evidenceRevision: redacted.evidence?.revision ?? null, handoffRevision: redacted.taskHandoff?.snapshot.revision ?? null,
191
+ taskId: redacted.taskHandoff?.snapshot.taskId ?? null };
192
+ const indexMarkdown = indexFor(source, detached);
193
+ const entries = [{ path: 'index.md', content: indexMarkdown },
194
+ { path: 'diagnostics.jsonl', content: exportSessionDiagnostics(detached) },
195
+ { path: 'diagnostics.md', content: formatSessionDiagnosticsMarkdown(detached) },
196
+ ...(redacted.evidence === undefined ? [] : [{ path: 'evidence.json', content: json(redacted.evidence) }]),
197
+ ...(redacted.taskHandoff === null ? [] : [{ path: 'task-handoff.json', content: json(redacted.taskHandoff) }])];
198
+ const manifest = entries.map(entry => ({ path: entry.path, bytes: bytes(entry.content), sha256: sha256(entry.content) }));
199
+ const packageId = sha256(JSON.stringify({ schemaVersion: 1, source, manifest }));
200
+ return { schemaVersion: 1, packageId, source, indexMarkdown, entries, manifest };
201
+ }
202
+ /** Save to a new explicit file. Existing files, directories and symlinks are never overwritten. */
203
+ export async function saveSessionEvidencePackage(pkg, path) {
204
+ if (typeof path !== 'string' || !path.trim() || path.includes('\0'))
205
+ throw new TypeError('A fresh package destination file is required');
206
+ const serialized = json(pkg); // Capture bytes synchronously before the first I/O await.
207
+ let handle;
208
+ try {
209
+ handle = await open(path, 'wx', 0o600);
210
+ }
211
+ catch (error) {
212
+ if (error.code === 'EEXIST')
213
+ throw new Error('Package destination already exists; choose a fresh file without overwriting.');
214
+ throw error;
215
+ }
216
+ let identity;
217
+ try {
218
+ identity = await handle.stat();
219
+ await handle.writeFile(serialized, 'utf8');
220
+ await handle.sync();
221
+ await handle.close();
222
+ }
223
+ catch (error) {
224
+ await handle.close().catch(() => { });
225
+ // Remove only our own partial regular file, never a concurrently replaced destination.
226
+ try {
227
+ const current = await lstat(path);
228
+ if (identity && current.isFile() && current.dev === identity.dev && current.ino === identity.ino)
229
+ await unlink(path);
230
+ }
231
+ catch { /* Original failure remains visible even if partial-file cleanup is unavailable. */ }
232
+ throw error;
233
+ }
234
+ }
@@ -0,0 +1,93 @@
1
+ import type { Message } from '../types.js';
2
+ export type DiagnosticJsonValue = null | boolean | number | string | DiagnosticJsonValue[] | DiagnosticJsonObject;
3
+ export interface DiagnosticJsonObject {
4
+ [key: string]: DiagnosticJsonValue;
5
+ }
6
+ export type DiagnosticEventKind = 'user' | 'assistant' | 'reasoning' | 'tool_invocation' | 'tool_result' | 'system_notice' | 'synthetic_host' | 'legacy_unknown' | 'runtime' | 'mode' | 'provider_response' | 'turn_end' | 'job';
7
+ export type DiagnosticOrigin = 'user' | 'assistant' | 'host' | 'provider' | 'host_tool' | 'system' | 'synthetic_host' | 'legacy_unknown';
8
+ export interface DiagnosticTruncation {
9
+ field: string;
10
+ originalBytes: number;
11
+ /** Redacted preview representation bytes, capped at originalBytes. Preview
12
+ * adornments can make the omitted-source byte count a conservative lower bound. */
13
+ retainedBytes: number;
14
+ sha256: string;
15
+ reference: string;
16
+ availability: 'truncated' | 'unavailable';
17
+ }
18
+ export interface DiagnosticEvent {
19
+ recordType: 'event';
20
+ id: string | null;
21
+ kind: DiagnosticEventKind;
22
+ origin: DiagnosticOrigin;
23
+ storedRole: string | null;
24
+ /** Source-provided time, or null when unknown. Repeated identical assistant
25
+ * observations retain the first known time, without claiming precise authorship time. */
26
+ timestamp: string | null;
27
+ content?: string;
28
+ toolCallId?: string | null;
29
+ toolName?: string | null;
30
+ args?: DiagnosticJsonValue;
31
+ status?: string | null;
32
+ data?: DiagnosticJsonObject;
33
+ truncations?: DiagnosticTruncation[];
34
+ }
35
+ export type DiagnosticEventInput = Omit<DiagnosticEvent, 'recordType'> & {
36
+ recordType?: 'event';
37
+ };
38
+ export interface DiagnosticSnapshot {
39
+ schemaVersion: 1;
40
+ events: DiagnosticEvent[];
41
+ /** Conservative lower bound when two independently truncated histories merge. */
42
+ omittedEvents: number;
43
+ omittedTextBytes: number;
44
+ }
45
+ export interface DiagnosticExportHeader {
46
+ recordType: 'header';
47
+ schemaVersion: 1;
48
+ sessionId: string | null;
49
+ redacted: true;
50
+ omittedEvents: number;
51
+ omittedTextBytes: number;
52
+ }
53
+ export interface DiagnosticDocument {
54
+ header: DiagnosticExportHeader;
55
+ events: DiagnosticEvent[];
56
+ }
57
+ export interface DiagnosticRedactionOptions {
58
+ /** Select authored object subtrees by their path. False preserves literal
59
+ * schema field names; values and embedded JSON strings are still filtered. */
60
+ propertyNames?: (path: readonly (string | number)[]) => boolean;
61
+ }
62
+ export interface SessionDiagnosticInput {
63
+ sessionId?: string | null;
64
+ messages: readonly Message[];
65
+ diagnostics?: DiagnosticSnapshot;
66
+ }
67
+ export declare const DIAGNOSTIC_LIMITS: Readonly<{
68
+ events: 1024;
69
+ snapshotBytes: number;
70
+ eventBytes: number;
71
+ textBytes: number;
72
+ markdownBytes: number;
73
+ jsonDepth: 32;
74
+ }>;
75
+ export declare class DiagnosticExportError extends Error {
76
+ readonly code: 'INVALID_EXPORT' | 'UNSUPPORTED_SCHEMA' | 'LIMIT_EXCEEDED';
77
+ constructor(message: string, code: 'INVALID_EXPORT' | 'UNSUPPORTED_SCHEMA' | 'LIMIT_EXCEEDED');
78
+ }
79
+ /** Default credential filtering shared by persistence annotations and exports. */
80
+ export declare function redactDiagnosticValue(value: unknown, options?: DiagnosticRedactionOptions): DiagnosticJsonValue;
81
+ export declare function describeDiagnosticTruncation(field: string, fullText: string, retainedText: string, availability: DiagnosticTruncation['availability']): DiagnosticTruncation;
82
+ export declare function createDiagnosticSnapshot(): DiagnosticSnapshot;
83
+ export declare function recordDiagnosticEvent(snapshot: DiagnosticSnapshot, event: DiagnosticEventInput): DiagnosticSnapshot;
84
+ export declare function mergeDiagnosticSnapshots(first: DiagnosticSnapshot, second: DiagnosticSnapshot): DiagnosticSnapshot;
85
+ export declare function parseDiagnosticSnapshot(value: unknown): DiagnosticSnapshot | null;
86
+ /** Capture canonical message facts before checkpoint trimming or compaction.
87
+ * Telemetry remains immutable; only a matching canonical invocation may advance
88
+ * its observed lifecycle, and a matching result may retain a richer same-source preview. */
89
+ export declare function captureSessionDiagnosticSnapshot(input: SessionDiagnosticInput): DiagnosticSnapshot;
90
+ export declare function buildSessionDiagnosticDocument(input: SessionDiagnosticInput): DiagnosticDocument;
91
+ export declare function exportSessionDiagnostics(input: SessionDiagnosticInput): string;
92
+ export declare function parseDiagnosticExport(text: string): DiagnosticDocument;
93
+ export declare function formatSessionDiagnosticsMarkdown(input: SessionDiagnosticInput): string;