@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
@@ -64,6 +64,14 @@ async function main() {
64
64
  configStore.setCliOverride('model', options.model);
65
65
  if (options.effort)
66
66
  configStore.setCliOverride('codexEffort', options.effort);
67
+ // The headless package is a standalone entry, so it must discover configured
68
+ // MCP tools before the synchronous agent factory builds the allowed surface.
69
+ // Required servers fail startup; optional failures retain the client policy.
70
+ const servers = configStore.get().mcpServers;
71
+ if (servers && Object.keys(servers).length > 0) {
72
+ const { initMcpServers } = await import('./mcp/client.js');
73
+ await initMcpServers(servers);
74
+ }
67
75
  try {
68
76
  const { preloadSkillsManifest } = await import('./skills/registry.js');
69
77
  await preloadSkillsManifest();
@@ -6,6 +6,7 @@ export interface HeadlessCliOptions {
6
6
  timestamps?: boolean;
7
7
  verbose?: boolean;
8
8
  sessionFile?: string;
9
+ detachEnvironment?: boolean;
9
10
  provider?: string;
10
11
  model?: string;
11
12
  effort?: CodexReasoningEffort;
@@ -9,6 +9,7 @@ export function parseHeadlessCliArgs(args) {
9
9
  jsonStream: false,
10
10
  };
11
11
  const booleanFlags = new Map([
12
+ ['--detach-environment', () => { options.detachEnvironment = true; }],
12
13
  ['--json', () => { options.json = true; }],
13
14
  ['--json-stream', () => { options.jsonStream = true; }],
14
15
  ['--quiet', () => { options.quiet = true; }],
@@ -0,0 +1 @@
1
+ export declare function runInboxCli(args: string[]): Promise<void>;
@@ -0,0 +1,33 @@
1
+ import { readFile, stat } from 'node:fs/promises';
2
+ import { receiveIntakeRequest, listIntakeReceipts, getIntakeReceipt } from './store.js';
3
+ import { formatIntakeReceipt } from './format.js';
4
+ export async function runInboxCli(args) {
5
+ const json = args.includes('--json');
6
+ const tokens = args.filter(arg => arg !== '--json');
7
+ let result;
8
+ if (tokens[0] === 'receive' && tokens[1] === '--file' && tokens.length === 3) {
9
+ if ((await stat(tokens[2])).size > 64 * 1024)
10
+ throw new Error('Intake envelope exceeds 64 KiB.');
11
+ result = await receiveIntakeRequest(JSON.parse(await readFile(tokens[2], 'utf8')));
12
+ }
13
+ else if ((tokens[0] === 'list' && tokens.length === 1) || tokens.length === 0) {
14
+ result = await listIntakeReceipts();
15
+ }
16
+ else if (tokens[0] === 'show' && tokens.length === 2) {
17
+ result = await getIntakeReceipt(tokens[1]);
18
+ }
19
+ else
20
+ throw new Error('Usage: ztc inbox list|show <req-ID>|receive --file <request.json> [--json]');
21
+ if (json)
22
+ process.stdout.write(JSON.stringify(result) + '\n');
23
+ else if ('receipts' in result) {
24
+ const list = result;
25
+ console.log(list.receipts.length ? list.receipts.map(formatIntakeReceipt).join('\n\n') : 'Inbox is empty. Receive a request with ztc inbox receive --file request.json.');
26
+ }
27
+ else if ('receipt' in result) {
28
+ const received = result;
29
+ console.log(`${received.duplicate ? 'Existing' : 'New'} receipt\n${formatIntakeReceipt(received.receipt)}`);
30
+ }
31
+ else
32
+ console.log(formatIntakeReceipt(result));
33
+ }
@@ -0,0 +1,2 @@
1
+ import type { IntakeReceipt } from './store.js';
2
+ export declare function formatIntakeReceipt(receipt: IntakeReceipt): string;
@@ -0,0 +1,14 @@
1
+ export function formatIntakeReceipt(receipt) {
2
+ return [receipt.intakeId, `Task: ${receipt.taskId}`,
3
+ `Source: ${receipt.source.channel} · ${receipt.source.account} · ${receipt.source.eventId}`,
4
+ `Received: ${receipt.receivedAt}${receipt.sentAt ? ` · sent ${receipt.sentAt}` : ''}`,
5
+ `State: ${receipt.state}${receipt.state === 'accepted' ? ' (submitted, outcome not yet recorded)' : ''}`,
6
+ `Acknowledgment: ${receipt.acknowledgedAt ?? 'pending'}`,
7
+ `Owner: ${receipt.owner ? `${receipt.owner.sessionId} · ${receipt.owner.cwd}` : 'unassigned, awaiting your review'}`,
8
+ `Request: ${receipt.action}`, receipt.outcome ? `Outcome: ${receipt.outcome}` : '',
9
+ receipt.owner ? `Session: /inbox open ${receipt.intakeId} session` : '',
10
+ ...Object.entries(receipt.links ?? {}).map(([kind, target]) => `${kind}: ${target}\nOpen: /inbox open ${receipt.intakeId} ${kind}`),
11
+ `Acknowledge: /inbox ack ${receipt.intakeId}`,
12
+ receipt.state === 'received' ? `Run only after review: /inbox run ${receipt.intakeId}` : '',
13
+ ].filter(Boolean).join('\n');
14
+ }
@@ -0,0 +1,16 @@
1
+ import { type IntakeOwner } from './store.js';
2
+ /** Read-only receipt notifications. This surface never acknowledges or runs work. */
3
+ export declare class IntakeNotifications {
4
+ private seen;
5
+ private polling;
6
+ private profileDirectory;
7
+ private watcher?;
8
+ private watchedDirectory?;
9
+ private initialRead;
10
+ private changed;
11
+ private receipts;
12
+ private overflow;
13
+ dispose(): void;
14
+ private watchProfile;
15
+ poll(owner: IntakeOwner): Promise<string | null>;
16
+ }
@@ -0,0 +1,132 @@
1
+ import { getIntakeReceipt, listIntakeReceipts } from './store.js';
2
+ import { watch } from 'node:fs';
3
+ import { lstat } from 'node:fs/promises';
4
+ import { join } from 'node:path';
5
+ import { profileConfigDir } from '../config/profiles.js';
6
+ /** Read-only receipt notifications. This surface never acknowledges or runs work. */
7
+ export class IntakeNotifications {
8
+ seen = new Set();
9
+ polling = false;
10
+ profileDirectory = '';
11
+ watcher;
12
+ watchedDirectory;
13
+ initialRead = true;
14
+ changed = new Set();
15
+ receipts = new Map();
16
+ overflow = false;
17
+ dispose() { this.watcher?.close(); this.watcher = undefined; this.watchedDirectory = undefined; }
18
+ async watchProfile(directory) {
19
+ try {
20
+ const info = await lstat(join(directory, 'inbox'));
21
+ if (!info.isDirectory() || info.isSymbolicLink())
22
+ throw new Error('Inbox notifications require an owned directory.');
23
+ if (this.watcher && this.watchedDirectory?.dev === info.dev && this.watchedDirectory.ino === info.ino)
24
+ return;
25
+ this.dispose();
26
+ this.initialRead = true;
27
+ // Watch new receipt directories only, avoiding one native watch per revision/history directory.
28
+ const watcher = watch(join(directory, 'inbox'), { recursive: false }, (_event, filename) => {
29
+ if (this.watcher !== watcher || this.profileDirectory !== directory)
30
+ return;
31
+ const match = filename?.toString().replace(/\\/g, '/').match(/^(req-[a-f0-9]{64})(?:\/\d{6}\.json)?$/);
32
+ if (!match)
33
+ return;
34
+ if (this.changed.size >= 512 && !this.changed.has(match[1])) {
35
+ this.overflow = true;
36
+ return;
37
+ }
38
+ this.changed.add(match[1]);
39
+ });
40
+ this.watcher = watcher;
41
+ this.watchedDirectory = { dev: info.dev, ino: info.ino };
42
+ watcher.on('error', () => { if (this.watcher === watcher) {
43
+ this.dispose();
44
+ this.initialRead = true;
45
+ } });
46
+ watcher.unref();
47
+ }
48
+ catch {
49
+ this.dispose();
50
+ this.initialRead = true;
51
+ } // An inbox created later is picked up on the next poll.
52
+ }
53
+ async poll(owner) {
54
+ if (this.polling)
55
+ return null;
56
+ this.polling = true;
57
+ try {
58
+ const profileDirectory = profileConfigDir();
59
+ if (profileDirectory !== this.profileDirectory) {
60
+ this.dispose();
61
+ this.receipts.clear();
62
+ this.changed.clear();
63
+ this.initialRead = true;
64
+ this.overflow = false;
65
+ this.seen.clear();
66
+ this.profileDirectory = profileDirectory;
67
+ }
68
+ await this.watchProfile(profileDirectory);
69
+ if (this.initialRead) {
70
+ const result = await listIntakeReceipts();
71
+ if (profileConfigDir() !== profileDirectory)
72
+ return null;
73
+ this.receipts = new Map(result.receipts.map(receipt => [receipt.intakeId, receipt]));
74
+ this.initialRead = !this.watcher;
75
+ }
76
+ else {
77
+ // One tick reads at most 64 changed receipts, never all retained history.
78
+ for (const id of [...this.changed].slice(0, 64)) {
79
+ if (profileConfigDir() !== profileDirectory)
80
+ return null;
81
+ this.changed.delete(id);
82
+ try {
83
+ this.receipts.set(id, await getIntakeReceipt(id));
84
+ }
85
+ catch (error) {
86
+ if (error instanceof Error && error.message === 'Receipt is still being published; retry.')
87
+ this.changed.add(id);
88
+ else if (error.code === 'ENOENT')
89
+ this.receipts.delete(id);
90
+ else
91
+ throw error;
92
+ }
93
+ }
94
+ }
95
+ if (profileConfigDir() !== profileDirectory)
96
+ return null;
97
+ const receipts = [...this.receipts.values()].sort((a, b) => b.receivedAt.localeCompare(a.receivedAt) || a.intakeId.localeCompare(b.intakeId)).slice(0, 100);
98
+ this.receipts = new Map(receipts.map(receipt => [receipt.intakeId, receipt]));
99
+ if (this.overflow) {
100
+ this.overflow = false;
101
+ return 'Inbox activity exceeded the 512-receipt notification queue. Use /inbox to review the retained requests. Nothing has been started.';
102
+ }
103
+ const visible = new Set(receipts.map(receipt => receipt.intakeId));
104
+ this.seen = new Set([...this.seen].filter(id => visible.has(id)));
105
+ const candidates = receipts.filter(receipt => receipt.state === 'received' && !receipt.acknowledgedAt && !this.seen.has(receipt.intakeId)
106
+ && (!receipt.owner || (receipt.owner.sessionId === owner.sessionId && receipt.owner.cwd === owner.cwd)));
107
+ const pending = [];
108
+ // A receipt may be acknowledged after discovery. Verify only unseen,
109
+ // eligible candidates instead of recursively watching all past revisions.
110
+ for (const candidate of candidates) {
111
+ if (profileConfigDir() !== profileDirectory)
112
+ return null;
113
+ const receipt = await getIntakeReceipt(candidate.intakeId);
114
+ if (profileConfigDir() !== profileDirectory)
115
+ return null;
116
+ this.receipts.set(receipt.intakeId, receipt);
117
+ if (receipt.state === 'received' && !receipt.acknowledgedAt && (!receipt.owner || (receipt.owner.sessionId === owner.sessionId && receipt.owner.cwd === owner.cwd)))
118
+ pending.push(receipt);
119
+ }
120
+ if (!pending.length)
121
+ return null;
122
+ for (const receipt of pending)
123
+ this.seen.add(receipt.intakeId);
124
+ return [`Inbox: ${pending.length} new request${pending.length === 1 ? '' : 's'} awaiting your review.`,
125
+ ...pending.slice(0, 3).map(receipt => `${receipt.source.channel} · ${receipt.action.replace(/\s+/g, ' ').slice(0, 80)}\n/inbox show ${receipt.intakeId}`),
126
+ 'Receipt only. Use /inbox to review; nothing has been started.'].join('\n');
127
+ }
128
+ finally {
129
+ this.polling = false;
130
+ }
131
+ }
132
+ }
@@ -0,0 +1,56 @@
1
+ export interface IntakeOwner {
2
+ sessionId: string;
3
+ cwd: string;
4
+ }
5
+ export interface IntakeLinks {
6
+ source?: string;
7
+ card?: string;
8
+ artifact?: string;
9
+ }
10
+ export interface IntakeRequest {
11
+ source: {
12
+ channel: string;
13
+ account: string;
14
+ eventId: string;
15
+ };
16
+ action: string;
17
+ sentAt?: string;
18
+ owner?: IntakeOwner;
19
+ links?: IntakeLinks;
20
+ }
21
+ export type IntakeState = 'received' | 'accepted' | 'completed' | 'failed' | 'dismissed';
22
+ export interface IntakeReceipt extends IntakeRequest {
23
+ schemaVersion: 1;
24
+ intakeId: string;
25
+ taskId: string;
26
+ receivedAt: string;
27
+ revision: number;
28
+ state: IntakeState;
29
+ acknowledgedAt?: string;
30
+ acceptedAt?: string;
31
+ outcome?: string;
32
+ }
33
+ export type IntakeChange = {
34
+ type: 'acknowledge';
35
+ } | {
36
+ type: 'accept';
37
+ owner: IntakeOwner;
38
+ } | {
39
+ type: 'complete' | 'fail' | 'dismiss';
40
+ note: string;
41
+ } | {
42
+ type: 'link';
43
+ links: IntakeLinks;
44
+ };
45
+ export declare function validateIntakeRequest(value: unknown): IntakeRequest;
46
+ export declare function getIntakeReceipt(id: string): Promise<IntakeReceipt>;
47
+ export declare function receiveIntakeRequest(value: unknown): Promise<{
48
+ receipt: IntakeReceipt;
49
+ duplicate: boolean;
50
+ }>;
51
+ export declare function listIntakeReceipts(limit?: number): Promise<{
52
+ receipts: IntakeReceipt[];
53
+ total: number;
54
+ unavailable?: number;
55
+ }>;
56
+ export declare function changeIntakeReceipt(id: string, change: IntakeChange): Promise<IntakeReceipt>;
@@ -0,0 +1,238 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { mkdir, readFile, readdir, writeFile, link, unlink, stat } from 'node:fs/promises';
3
+ import { join, isAbsolute } from 'node:path';
4
+ import { profileConfigDir } from '../config/profiles.js';
5
+ const MAX_BYTES = 64 * 1024;
6
+ class IntakeRecordError extends Error {
7
+ }
8
+ const ID = /^req-[a-f0-9]{64}$/;
9
+ const root = () => join(profileConfigDir(), 'inbox');
10
+ const directory = (id) => {
11
+ if (!ID.test(id))
12
+ throw new Error('Use the full req- ID from /inbox.');
13
+ return join(root(), id);
14
+ };
15
+ function text(value, name, max) {
16
+ if (typeof value !== 'string' || !value.trim() || value.length > max || /[\x00-\x08\x0b-\x1f\x7f]/.test(value)) {
17
+ throw new Error(`${name} must contain 1–${max} characters without terminal control characters.`);
18
+ }
19
+ return value;
20
+ }
21
+ function owner(value) {
22
+ if (!value || typeof value !== 'object' || Array.isArray(value))
23
+ throw new Error('Invalid owner object.');
24
+ const sessionId = text(value.sessionId, 'Session ID', 128);
25
+ if (!/^[a-zA-Z0-9_-]+$/.test(sessionId))
26
+ throw new Error('Invalid session ID.');
27
+ const cwd = text(value.cwd, 'Working directory', 4096);
28
+ if (!isAbsolute(cwd))
29
+ throw new Error('Owner working directory must be absolute.');
30
+ return { sessionId, cwd };
31
+ }
32
+ function links(value) {
33
+ if (!value || typeof value !== 'object' || Array.isArray(value))
34
+ throw new Error('Invalid links object.');
35
+ const result = {};
36
+ for (const key of ['source', 'card']) {
37
+ if (value[key] === undefined)
38
+ continue;
39
+ const url = new URL(text(value[key], `${key} URL`, 4096));
40
+ if (url.protocol !== 'https:' || url.username || url.password)
41
+ throw new Error('Receipt links must use HTTPS without credentials.');
42
+ if (key === 'card' && (url.hostname !== 'zergboard.com' || !/^\/app\/cards\/[a-f0-9-]{36}$/.test(url.pathname))) {
43
+ throw new Error('Card links must point to a ZergBoard card.');
44
+ }
45
+ result[key] = text(url.href, `${key} URL`, 4096);
46
+ }
47
+ if (value.artifact !== undefined) {
48
+ result.artifact = text(value.artifact, 'Artifact path', 4096);
49
+ if (!isAbsolute(result.artifact))
50
+ throw new Error('Artifact path must be absolute.');
51
+ }
52
+ return result;
53
+ }
54
+ export function validateIntakeRequest(value) {
55
+ if (!value || typeof value !== 'object' || Array.isArray(value))
56
+ throw new Error('Expected an intake request object.');
57
+ const input = value;
58
+ if (!input.source || typeof input.source !== 'object')
59
+ throw new Error('Request source is required.');
60
+ const channel = text(input.source.channel, 'Source channel', 64);
61
+ const account = text(input.source.account, 'Source account', 256);
62
+ const eventId = text(input.source.eventId, 'Source event ID', 1024);
63
+ if ([channel, account, eventId].some(value => /[\n\t]/.test(value)))
64
+ throw new Error('Source provenance must use a single line.');
65
+ const action = text(input.action, 'Requested action', 16_384);
66
+ let sentAt;
67
+ if (input.sentAt !== undefined) {
68
+ if (typeof input.sentAt !== 'string' || !Number.isFinite(Date.parse(input.sentAt)))
69
+ throw new Error('Invalid source timestamp.');
70
+ sentAt = new Date(input.sentAt).toISOString();
71
+ }
72
+ return { source: { channel, account, eventId }, action, ...(sentAt ? { sentAt } : {}),
73
+ ...(input.owner !== undefined ? { owner: owner(input.owner) } : {}), ...(input.links !== undefined ? { links: links(input.links) } : {}) };
74
+ }
75
+ // Publish immutable files with an exclusive hard link. Competing processes can
76
+ // neither overwrite a receipt nor publish two revisions at the same position.
77
+ // A crash leaves, at worst, an ignored temporary file; it never leaves a lock.
78
+ async function publish(path, value) {
79
+ const content = JSON.stringify(value);
80
+ if (Buffer.byteLength(content) > MAX_BYTES)
81
+ throw new Error('Inbox record exceeds 64 KiB.');
82
+ const temporary = `${path}.tmp-${randomUUID()}`;
83
+ await writeFile(temporary, content, { flag: 'wx', mode: 0o600 });
84
+ try {
85
+ await link(temporary, path);
86
+ return true;
87
+ }
88
+ catch (error) {
89
+ if (error.code === 'EEXIST')
90
+ return false;
91
+ throw error;
92
+ }
93
+ finally {
94
+ await unlink(temporary);
95
+ }
96
+ }
97
+ async function read(path) {
98
+ if ((await stat(path)).size > MAX_BYTES)
99
+ throw new IntakeRecordError('Inbox record exceeds 64 KiB.');
100
+ const bytes = await readFile(path, 'utf8');
101
+ let receipt;
102
+ try {
103
+ receipt = JSON.parse(bytes);
104
+ }
105
+ catch (error) {
106
+ if (error instanceof SyntaxError)
107
+ throw new IntakeRecordError('Inbox record is not valid JSON.');
108
+ throw error;
109
+ }
110
+ if (!receipt || typeof receipt !== 'object' || Array.isArray(receipt)
111
+ || receipt.schemaVersion !== 1 || !ID.test(receipt.intakeId))
112
+ throw new IntakeRecordError('Unsupported inbox record.');
113
+ if (typeof receipt.receivedAt !== 'string' || !Number.isFinite(Date.parse(receipt.receivedAt))
114
+ || !Number.isSafeInteger(receipt.revision) || receipt.revision < 0 || receipt.revision > 999999
115
+ || !['received', 'accepted', 'completed', 'failed', 'dismissed'].includes(receipt.state)) {
116
+ throw new IntakeRecordError('Invalid inbox receipt metadata.');
117
+ }
118
+ try {
119
+ validateIntakeRequest(receipt);
120
+ }
121
+ catch (error) {
122
+ if (error instanceof Error)
123
+ throw new IntakeRecordError(error.message);
124
+ throw error;
125
+ }
126
+ return receipt;
127
+ }
128
+ export async function getIntakeReceipt(id) {
129
+ return readReceiptDirectory(directory(id));
130
+ }
131
+ async function readReceiptDirectory(dir) {
132
+ const files = await readdir(dir);
133
+ const revisions = files.filter(file => /^\d{6}\.json$/.test(file)).sort();
134
+ if (!revisions.length)
135
+ throw new Error('Receipt is still being published; retry.');
136
+ return read(join(dir, revisions.at(-1)));
137
+ }
138
+ export async function receiveIntakeRequest(value) {
139
+ const input = validateIntakeRequest(value);
140
+ const hash = createHash('sha256').update(JSON.stringify(input.source)).digest('hex');
141
+ const intakeId = `req-${hash}`;
142
+ const dir = directory(intakeId);
143
+ await mkdir(dir, { recursive: true, mode: 0o700 });
144
+ const receipt = { ...input, schemaVersion: 1, intakeId, taskId: `task-${hash}`,
145
+ receivedAt: new Date().toISOString(), revision: 0, state: 'received' };
146
+ if (await publish(join(dir, '000000.json'), receipt))
147
+ return { receipt, duplicate: false };
148
+ const original = await read(join(dir, '000000.json'));
149
+ if (JSON.stringify(validateIntakeRequest(original)) !== JSON.stringify(input)) {
150
+ throw new Error('Source event ID was reused with different request content. The original receipt was preserved.');
151
+ }
152
+ return { receipt: await getIntakeReceipt(intakeId), duplicate: true };
153
+ }
154
+ export async function listIntakeReceipts(limit = 100) {
155
+ if (!Number.isInteger(limit) || limit < 1 || limit > 1000)
156
+ throw new Error('Inbox limit must be 1–1000.');
157
+ const profileRoot = root();
158
+ let files;
159
+ try {
160
+ files = await readdir(profileRoot);
161
+ }
162
+ catch (error) {
163
+ if (error.code === 'ENOENT')
164
+ return { receipts: [], total: 0 };
165
+ throw error;
166
+ }
167
+ const ids = files.filter(file => ID.test(file));
168
+ const receipts = [];
169
+ let total = 0;
170
+ let unavailable = 0;
171
+ // Keep filesystem reads sequential and the preview bounded. Durable records
172
+ // remain addressable by their immutable ID after they leave the preview.
173
+ for (const id of ids) {
174
+ try {
175
+ receipts.push(await readReceiptDirectory(join(profileRoot, id)));
176
+ total++;
177
+ }
178
+ catch (error) {
179
+ if (error instanceof Error && error.message === 'Receipt is still being published; retry.')
180
+ continue;
181
+ if (error instanceof IntakeRecordError) {
182
+ unavailable++;
183
+ continue;
184
+ }
185
+ throw error;
186
+ }
187
+ receipts.sort((a, b) => b.receivedAt.localeCompare(a.receivedAt) || a.intakeId.localeCompare(b.intakeId));
188
+ if (receipts.length > limit)
189
+ receipts.pop();
190
+ }
191
+ return { receipts, total, ...(unavailable > 0 ? { unavailable } : {}) };
192
+ }
193
+ export async function changeIntakeReceipt(id, change) {
194
+ for (let attempt = 0; attempt < 32; attempt++) {
195
+ const before = await getIntakeReceipt(id);
196
+ const next = { ...before, revision: before.revision + 1 };
197
+ if (next.revision > 999999)
198
+ throw new Error('Receipt revision limit reached.');
199
+ const now = new Date().toISOString();
200
+ switch (change.type) {
201
+ case 'acknowledge':
202
+ if (before.acknowledgedAt)
203
+ return before;
204
+ next.acknowledgedAt = now;
205
+ break;
206
+ case 'accept': {
207
+ if (before.state !== 'received')
208
+ throw new Error(`Request is ${before.state}; it cannot be submitted again.`);
209
+ const target = owner(change.owner);
210
+ if (before.owner && (before.owner.sessionId !== target.sessionId || before.owner.cwd !== target.cwd)) {
211
+ throw new Error('Request belongs to another session. Open its receipt to resume that owner.');
212
+ }
213
+ next.owner = target;
214
+ next.state = 'accepted';
215
+ next.acceptedAt = now;
216
+ next.acknowledgedAt ??= now;
217
+ break;
218
+ }
219
+ case 'complete':
220
+ case 'fail':
221
+ case 'dismiss':
222
+ if (change.type === 'dismiss' ? before.state !== 'received' : before.state !== 'accepted') {
223
+ throw new Error(`Cannot ${change.type} a ${before.state} request.`);
224
+ }
225
+ next.state = change.type === 'complete' ? 'completed' : change.type === 'fail' ? 'failed' : 'dismissed';
226
+ next.outcome = text(change.note, 'Outcome note', 4096);
227
+ next.acknowledgedAt ??= now;
228
+ break;
229
+ case 'link':
230
+ next.links = { ...before.links, ...links(change.links) };
231
+ break;
232
+ }
233
+ const path = join(directory(id), `${String(next.revision).padStart(6, '0')}.json`);
234
+ if (await publish(path, next))
235
+ return next;
236
+ }
237
+ throw new Error('Receipt changed too often; retry.');
238
+ }
package/dist/library.d.ts CHANGED
@@ -25,6 +25,7 @@
25
25
  */
26
26
  import { Agent } from './agent/agent.js';
27
27
  import type { AgentBackend } from './agent/backends/types.js';
28
+ import type { NativeAnthropicMessagesRouterConfig } from './agent/backends/index.js';
28
29
  import type { Tool } from './agent/tools/types.js';
29
30
  import type { Policy } from './agent/runtime/policy.js';
30
31
  import type { HostApprovalContext } from './agent/runtime/tool_runtime.js';
@@ -33,13 +34,18 @@ import type { ToolCapability } from './agent/runtime/capabilities.js';
33
34
  import type { AgentHandlerFn } from './agent/tools/sim_domain_tools.js';
34
35
  import type { AgentEvent, Message } from './types.js';
35
36
  import type { HostMetadata, InferenceCredentialProvider, ToolEffectObserver } from './host/index.js';
37
+ import type { CodexReasoningEffort } from './config/types.js';
36
38
  export type { AgentEvent, Message, MessageRole, ToolCall } from './types.js';
37
39
  export type { AgentConfig } from './agent/agent.js';
38
40
  export type { AgentBackend } from './agent/backends/types.js';
41
+ export type { NativeAnthropicMessagesRouterConfig } from './agent/backends/anthropic.js';
42
+ export type { ContentBlock, RequestContentBlock, ThinkingBlock, RedactedThinkingBlock } from './agent/backends/types.js';
39
43
  export type { Tool } from './agent/tools/types.js';
40
44
  export type { AgentHandlerFn } from './agent/tools/sim_domain_tools.js';
41
45
  /** Options for `createAgent`. All fields are optional; sensible defaults come from env. */
42
46
  export interface CreateAgentOptions {
47
+ /** Explicit hosted native Messages transport; ambient provider keys are ignored. */
48
+ nativeAnthropicMessagesRouter?: NativeAnthropicMessagesRouterConfig;
43
49
  /** Provider name: 'anthropic' | 'openai' | 'gemini' | 'kimi' | 'deepseek' | ... */
44
50
  provider?: string;
45
51
  /** Model id. Defaults to the provider's canonical model. */
@@ -128,6 +134,8 @@ export interface CreateAgentOptions {
128
134
  * explicitly here if you need to pin the value across ZTC upgrades.
129
135
  */
130
136
  maxTokens?: number;
137
+ /** Provider reasoning effort for every request. Opus 5.5 defaults to high. */
138
+ codexEffort?: CodexReasoningEffort;
131
139
  /** Auto-continue on incomplete responses (default true). */
132
140
  autoContinue?: boolean;
133
141
  /**
package/dist/library.js CHANGED
@@ -24,7 +24,7 @@
24
24
  * }
25
25
  */
26
26
  import { Agent } from './agent/agent.js';
27
- import { createBackendForProvider } from './agent/backends/index.js';
27
+ import { createBackendForProvider, createNativeAnthropicMessagesRouterBackend } from './agent/backends/index.js';
28
28
  import { defaultTools as baseDefaultTools } from './agent/tools/registry.js';
29
29
  import { toolSearchTool } from './agent/tools/tool_search.js';
30
30
  import { recallToolResponseTool } from './agent/tools/recall_tool_response.js';
@@ -44,10 +44,16 @@ export async function createAgent(opts = {}) {
44
44
  if (opts.backend && opts.inferenceCredentialProvider) {
45
45
  throw new Error('backend and inferenceCredentialProvider are mutually exclusive');
46
46
  }
47
+ if (opts.nativeAnthropicMessagesRouter && (opts.backend || opts.inferenceCredentialProvider)) {
48
+ throw new Error('nativeAnthropicMessagesRouter supplies its own backend and credential authority');
49
+ }
47
50
  const ambientDiscovery = opts.ambientDiscovery ?? true;
48
- const provider = opts.provider ?? (ambientDiscovery ? inferDefaultProvider() : 'anthropic');
51
+ const provider = opts.provider ?? (opts.nativeAnthropicMessagesRouter ? 'anthropic' : ambientDiscovery ? inferDefaultProvider() : 'anthropic');
52
+ if (opts.nativeAnthropicMessagesRouter && provider !== 'anthropic' && provider !== 'claude') {
53
+ throw new Error('Native Anthropic Router requires the anthropic provider');
54
+ }
49
55
  const model = opts.model ?? getDefaultModelForProvider(provider);
50
- const apiKey = opts.inferenceCredentialProvider
56
+ const apiKey = opts.inferenceCredentialProvider || opts.nativeAnthropicMessagesRouter
51
57
  ? ''
52
58
  : (opts.apiKey ?? (ambientDiscovery ? getDefaultApiKeyForProvider(provider) : undefined) ?? '');
53
59
  const makeBackend = (bearer) => createBackendForProvider(provider, {
@@ -55,7 +61,8 @@ export async function createAgent(opts = {}) {
55
61
  apiEndpoint: opts.apiEndpoint,
56
62
  baseUrl: opts.openaiCompatibleBaseUrl,
57
63
  });
58
- const backend = opts.backend ?? (opts.inferenceCredentialProvider
64
+ const backend = opts.backend ?? (opts.nativeAnthropicMessagesRouter
65
+ ? createNativeAnthropicMessagesRouterBackend(opts.nativeAnthropicMessagesRouter) : (opts.inferenceCredentialProvider
59
66
  ? createCredentialedBackend({
60
67
  provider: opts.inferenceCredentialProvider,
61
68
  providerId: provider,
@@ -63,7 +70,7 @@ export async function createAgent(opts = {}) {
63
70
  context: opts.inferenceCredentialContext,
64
71
  requestId: opts.inferenceRequestId,
65
72
  })
66
- : makeBackend(apiKey));
73
+ : makeBackend(apiKey)));
67
74
  let tools = opts.tools
68
75
  ? [...opts.tools]
69
76
  : (ambientDiscovery ? [...defaultTools] : []);
@@ -108,8 +115,8 @@ export async function createAgent(opts = {}) {
108
115
  }
109
116
  const config = {
110
117
  apiKey,
111
- disableApiKeyFallback: opts.inferenceCredentialProvider !== undefined,
112
- runtimeCredentialsAvailable: opts.inferenceCredentialProvider !== undefined,
118
+ disableApiKeyFallback: Boolean(opts.inferenceCredentialProvider || opts.nativeAnthropicMessagesRouter),
119
+ runtimeCredentialsAvailable: Boolean(opts.inferenceCredentialProvider || opts.nativeAnthropicMessagesRouter),
113
120
  ambientDiscovery,
114
121
  model,
115
122
  apiEndpoint: opts.apiEndpoint,
@@ -117,15 +124,16 @@ export async function createAgent(opts = {}) {
117
124
  backend,
118
125
  tools,
119
126
  alwaysLoadedToolNames: opts.alwaysLoadedToolNames,
120
- deferToolSchemas: opts.deferToolSchemas,
127
+ deferToolSchemas: opts.deferToolSchemas ?? (opts.nativeAnthropicMessagesRouter ? false : undefined),
121
128
  cwd: opts.cwd,
122
- pinTaskHeader: opts.pinTaskHeader,
123
- subprocessEnv: opts.inferenceCredentialProvider
129
+ pinTaskHeader: opts.nativeAnthropicMessagesRouter ? false : opts.pinTaskHeader,
130
+ subprocessEnv: opts.inferenceCredentialProvider || opts.nativeAnthropicMessagesRouter
124
131
  ? buildCredentialSafeSubprocessEnv(opts.subprocessEnv ?? process.env)
125
132
  : opts.subprocessEnv,
126
133
  toolEffectObserver: opts.toolEffectObserver,
127
134
  maxIterations: opts.maxIterations,
128
135
  maxTokens: opts.maxTokens,
136
+ codexEffort: opts.codexEffort,
129
137
  autoContinue: opts.autoContinue,
130
138
  llmRequestTimeoutMs: opts.llmRequestTimeoutMs,
131
139
  policy: opts.policy,
@@ -198,6 +206,7 @@ async function* runAndAppend(agent, messages, userMsg) {
198
206
  id: `assistant_${Date.now()}`,
199
207
  role: 'assistant',
200
208
  content: result.content,
209
+ ...(result.nativeContent ? { nativeContent: result.nativeContent, nativeModel: result.nativeModel, nativeContextId: result.nativeContextId } : {}),
201
210
  timestamp: new Date(),
202
211
  toolCalls: result.toolCalls?.length ? result.toolCalls : undefined,
203
212
  // Reasoning models expect their trace replayed with the assistant
@@ -1,4 +1,5 @@
1
1
  import type { MCPServerConfig } from '../config/types.js';
2
+ export declare const MAX_MCP_IMAGE_BYTES: number;
2
3
  export { ZTC_MCP_TOOL_CALL_ID_META_KEY, RequiredMcpServerError, getMcpTools, getMcpServerStatuses, noteShadowedMcpTool, getColonyAttachInfo, closeMcpServers, type McpServerStatus, } from './registry.js';
3
4
  /**
4
5
  * Connect every configured (and the default colony) MCP server and collect their