@namzu/cli 26.3.0 → 28.0.0

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 (376) hide show
  1. package/CHANGELOG.md +271 -0
  2. package/README.md +67 -46
  3. package/dist/bin.js +7 -0
  4. package/dist/bin.js.map +1 -1
  5. package/dist/checkpoints/store.d.ts +17 -4
  6. package/dist/checkpoints/store.d.ts.map +1 -1
  7. package/dist/checkpoints/store.js +20 -5
  8. package/dist/checkpoints/store.js.map +1 -1
  9. package/dist/cli.d.ts +2 -0
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +124 -14
  12. package/dist/cli.js.map +1 -1
  13. package/dist/commands/acp.d.ts +23 -1
  14. package/dist/commands/acp.d.ts.map +1 -1
  15. package/dist/commands/acp.js +41 -2
  16. package/dist/commands/acp.js.map +1 -1
  17. package/dist/commands/drain.d.ts +69 -2
  18. package/dist/commands/drain.d.ts.map +1 -1
  19. package/dist/commands/drain.js +216 -136
  20. package/dist/commands/drain.js.map +1 -1
  21. package/dist/commands/eval.js +1 -1
  22. package/dist/commands/eval.js.map +1 -1
  23. package/dist/commands/{run-flags.d.ts → exec-flags.d.ts} +36 -28
  24. package/dist/commands/exec-flags.d.ts.map +1 -0
  25. package/dist/commands/{run-flags.js → exec-flags.js} +35 -27
  26. package/dist/commands/exec-flags.js.map +1 -0
  27. package/dist/commands/exec-json.d.ts +75 -0
  28. package/dist/commands/exec-json.d.ts.map +1 -0
  29. package/dist/commands/exec-json.js +473 -0
  30. package/dist/commands/exec-json.js.map +1 -0
  31. package/dist/commands/exec.d.ts +42 -0
  32. package/dist/commands/exec.d.ts.map +1 -0
  33. package/dist/commands/exec.js +683 -0
  34. package/dist/commands/exec.js.map +1 -0
  35. package/dist/commands/host-queries.d.ts +12 -0
  36. package/dist/commands/host-queries.d.ts.map +1 -0
  37. package/dist/commands/host-queries.js +149 -0
  38. package/dist/commands/host-queries.js.map +1 -0
  39. package/dist/commands/prior-messages.js +1 -1
  40. package/dist/commands/prior-messages.js.map +1 -1
  41. package/dist/commands/provider-wait.d.ts +5 -5
  42. package/dist/commands/provider-wait.d.ts.map +1 -1
  43. package/dist/commands/provider-wait.js +2 -2
  44. package/dist/commands/registry.d.ts.map +1 -1
  45. package/dist/commands/registry.js +2 -0
  46. package/dist/commands/registry.js.map +1 -1
  47. package/dist/commands/resident-flags.d.ts +2 -2
  48. package/dist/commands/resident-flags.d.ts.map +1 -1
  49. package/dist/commands/resident-flags.js +4 -2
  50. package/dist/commands/resident-flags.js.map +1 -1
  51. package/dist/commands/resident-learning.js +1 -1
  52. package/dist/commands/resident-learning.js.map +1 -1
  53. package/dist/commands/resident.d.ts.map +1 -1
  54. package/dist/commands/resident.js +3 -2
  55. package/dist/commands/resident.js.map +1 -1
  56. package/dist/commands/serve.js +2 -2
  57. package/dist/commands/serve.js.map +1 -1
  58. package/dist/commands/skills.js +1 -1
  59. package/dist/commands/skills.js.map +1 -1
  60. package/dist/commands/state.js +8 -8
  61. package/dist/commands/state.js.map +1 -1
  62. package/dist/commands/stdin.d.ts +5 -5
  63. package/dist/commands/stdin.js +5 -5
  64. package/dist/commands/types.d.ts +2 -0
  65. package/dist/commands/types.d.ts.map +1 -1
  66. package/dist/config/load.d.ts +1 -1
  67. package/dist/config/load.d.ts.map +1 -1
  68. package/dist/config/load.js +36 -5
  69. package/dist/config/load.js.map +1 -1
  70. package/dist/config/schema.d.ts +59 -20
  71. package/dist/config/schema.d.ts.map +1 -1
  72. package/dist/config/schema.js.map +1 -1
  73. package/dist/config/tool-result-screens.js +1 -1
  74. package/dist/config/turn-guards.d.ts +23 -0
  75. package/dist/config/turn-guards.d.ts.map +1 -0
  76. package/dist/config/turn-guards.js +46 -0
  77. package/dist/config/turn-guards.js.map +1 -0
  78. package/dist/context/directories.d.ts +37 -0
  79. package/dist/context/directories.d.ts.map +1 -0
  80. package/dist/context/directories.js +69 -0
  81. package/dist/context/directories.js.map +1 -0
  82. package/dist/context/environment.d.ts +55 -0
  83. package/dist/context/environment.d.ts.map +1 -1
  84. package/dist/context/environment.js +96 -0
  85. package/dist/context/environment.js.map +1 -1
  86. package/dist/context/project-tracker.d.ts +3 -3
  87. package/dist/context/project-tracker.d.ts.map +1 -1
  88. package/dist/context/project-tracker.js +3 -3
  89. package/dist/context/project-tracker.js.map +1 -1
  90. package/dist/context/project.d.ts +2 -2
  91. package/dist/context/project.js +2 -2
  92. package/dist/context/sandbox.d.ts +22 -3
  93. package/dist/context/sandbox.d.ts.map +1 -1
  94. package/dist/context/sandbox.js +42 -4
  95. package/dist/context/sandbox.js.map +1 -1
  96. package/dist/doctor/checks/chain.d.ts +1 -1
  97. package/dist/doctor/checks/chain.js +7 -7
  98. package/dist/doctor/checks/chain.js.map +1 -1
  99. package/dist/doctor/checks/invariants.d.ts +2 -2
  100. package/dist/doctor/checks/invariants.js +5 -5
  101. package/dist/doctor/checks/invariants.js.map +1 -1
  102. package/dist/doctor/checks/logging.js +1 -1
  103. package/dist/doctor/checks/logging.js.map +1 -1
  104. package/dist/doctor/checks/sandbox.js +1 -1
  105. package/dist/doctor/checks/sandbox.js.map +1 -1
  106. package/dist/doctor/checks/session-export.d.ts +1 -1
  107. package/dist/doctor/checks/session-export.js +2 -2
  108. package/dist/doctor/checks/session-export.js.map +1 -1
  109. package/dist/doctor/checks/telemetry.d.ts +1 -1
  110. package/dist/doctor/checks/telemetry.js +1 -1
  111. package/dist/doctor/registry.js +2 -2
  112. package/dist/doctor/registry.js.map +1 -1
  113. package/dist/exit-codes.d.ts +2 -2
  114. package/dist/exit-codes.js +2 -2
  115. package/dist/integrations/mcp/servers.d.ts +1 -1
  116. package/dist/integrations/providers/access.d.ts +4 -1
  117. package/dist/integrations/providers/access.d.ts.map +1 -1
  118. package/dist/integrations/providers/access.js +6 -3
  119. package/dist/integrations/providers/access.js.map +1 -1
  120. package/dist/integrations/providers/chain-capabilities.d.ts +6 -6
  121. package/dist/integrations/providers/chain-capabilities.js +8 -8
  122. package/dist/integrations/providers/chain-capabilities.js.map +1 -1
  123. package/dist/integrations/providers/register.d.ts +1 -1
  124. package/dist/integrations/providers/register.js +1 -1
  125. package/dist/integrations/providers/registry.d.ts +1 -1
  126. package/dist/integrations/providers/zen-catalogue.d.ts +100 -0
  127. package/dist/integrations/providers/zen-catalogue.d.ts.map +1 -0
  128. package/dist/integrations/providers/zen-catalogue.js +196 -0
  129. package/dist/integrations/providers/zen-catalogue.js.map +1 -0
  130. package/dist/integrations/resident/inspection.d.ts +4 -1
  131. package/dist/integrations/resident/inspection.d.ts.map +1 -1
  132. package/dist/integrations/resident/inspection.js +53 -34
  133. package/dist/integrations/resident/inspection.js.map +1 -1
  134. package/dist/integrations/resident/learning-storage.d.ts +7 -2
  135. package/dist/integrations/resident/learning-storage.d.ts.map +1 -1
  136. package/dist/integrations/resident/learning-storage.js +12 -8
  137. package/dist/integrations/resident/learning-storage.js.map +1 -1
  138. package/dist/integrations/resident/runner-launch.d.ts +3 -3
  139. package/dist/integrations/resident/runner-launch.d.ts.map +1 -1
  140. package/dist/integrations/resident/runner-store.d.ts +1 -1
  141. package/dist/integrations/resident/runner-store.d.ts.map +1 -1
  142. package/dist/integrations/resident/runner-store.js +5 -2
  143. package/dist/integrations/resident/runner-store.js.map +1 -1
  144. package/dist/integrations/resident/runner-worker.js +23 -0
  145. package/dist/integrations/resident/runner-worker.js.map +1 -1
  146. package/dist/integrations/resident/session-log-reads.d.ts +37 -0
  147. package/dist/integrations/resident/session-log-reads.d.ts.map +1 -0
  148. package/dist/integrations/resident/session-log-reads.js +125 -0
  149. package/dist/integrations/resident/session-log-reads.js.map +1 -0
  150. package/dist/integrations/resident/session-step.d.ts +4 -2
  151. package/dist/integrations/resident/session-step.d.ts.map +1 -1
  152. package/dist/integrations/resident/session-step.js +16 -14
  153. package/dist/integrations/resident/session-step.js.map +1 -1
  154. package/dist/integrations/resident/storage.d.ts +23 -1
  155. package/dist/integrations/resident/storage.d.ts.map +1 -1
  156. package/dist/integrations/resident/storage.js +60 -17
  157. package/dist/integrations/resident/storage.js.map +1 -1
  158. package/dist/integrations/resident/tool-evidence.d.ts +4 -2
  159. package/dist/integrations/resident/tool-evidence.d.ts.map +1 -1
  160. package/dist/integrations/resident/tool-evidence.js +36 -30
  161. package/dist/integrations/resident/tool-evidence.js.map +1 -1
  162. package/dist/integrations/resident/verification.d.ts +2 -2
  163. package/dist/integrations/resident/verification.d.ts.map +1 -1
  164. package/dist/integrations/resident/verification.js +4 -4
  165. package/dist/integrations/resident/verification.js.map +1 -1
  166. package/dist/integrations/sessions/checkpoint-view.d.ts +13 -0
  167. package/dist/integrations/sessions/checkpoint-view.d.ts.map +1 -0
  168. package/dist/integrations/sessions/checkpoint-view.js +48 -0
  169. package/dist/integrations/sessions/checkpoint-view.js.map +1 -0
  170. package/dist/integrations/sessions/context-inventory.js +1 -1
  171. package/dist/integrations/sessions/context-inventory.js.map +1 -1
  172. package/dist/integrations/sessions/conversation-search.d.ts +16 -20
  173. package/dist/integrations/sessions/conversation-search.d.ts.map +1 -1
  174. package/dist/integrations/sessions/conversation-search.js +305 -731
  175. package/dist/integrations/sessions/conversation-search.js.map +1 -1
  176. package/dist/integrations/sessions/evidence-page-validation.d.ts +4 -4
  177. package/dist/integrations/sessions/evidence-page-validation.d.ts.map +1 -1
  178. package/dist/integrations/sessions/evidence-page-validation.js +1 -1
  179. package/dist/integrations/sessions/evidence-page-validation.js.map +1 -1
  180. package/dist/integrations/sessions/evidence-recall.d.ts +40 -2
  181. package/dist/integrations/sessions/evidence-recall.d.ts.map +1 -1
  182. package/dist/integrations/sessions/evidence-recall.js +41 -97
  183. package/dist/integrations/sessions/evidence-recall.js.map +1 -1
  184. package/dist/integrations/sessions/store.d.ts +153 -85
  185. package/dist/integrations/sessions/store.d.ts.map +1 -1
  186. package/dist/integrations/sessions/store.js +414 -484
  187. package/dist/integrations/sessions/store.js.map +1 -1
  188. package/dist/integrations/sessions/task-context.d.ts +15 -2
  189. package/dist/integrations/sessions/task-context.d.ts.map +1 -1
  190. package/dist/integrations/sessions/task-context.js +34 -11
  191. package/dist/integrations/sessions/task-context.js.map +1 -1
  192. package/dist/integrations/sessions/transcript-export.d.ts +13 -6
  193. package/dist/integrations/sessions/transcript-export.d.ts.map +1 -1
  194. package/dist/integrations/sessions/transcript-export.js +148 -263
  195. package/dist/integrations/sessions/transcript-export.js.map +1 -1
  196. package/dist/integrations/state/home.d.ts +4 -16
  197. package/dist/integrations/state/home.d.ts.map +1 -1
  198. package/dist/integrations/state/home.js +6 -42
  199. package/dist/integrations/state/home.js.map +1 -1
  200. package/dist/integrations/state/project.d.ts +6 -7
  201. package/dist/integrations/state/project.d.ts.map +1 -1
  202. package/dist/integrations/state/project.js +7 -9
  203. package/dist/integrations/state/project.js.map +1 -1
  204. package/dist/integrations/state/report.d.ts +27 -41
  205. package/dist/integrations/state/report.d.ts.map +1 -1
  206. package/dist/integrations/state/report.js +172 -464
  207. package/dist/integrations/state/report.js.map +1 -1
  208. package/dist/integrations/state/retention.d.ts +18 -0
  209. package/dist/integrations/state/retention.d.ts.map +1 -0
  210. package/dist/integrations/state/retention.js +18 -0
  211. package/dist/integrations/state/retention.js.map +1 -0
  212. package/dist/integrations/subagents/activity.d.ts +36 -31
  213. package/dist/integrations/subagents/activity.d.ts.map +1 -1
  214. package/dist/integrations/subagents/activity.js +27 -23
  215. package/dist/integrations/subagents/activity.js.map +1 -1
  216. package/dist/integrations/subagents/batches.d.ts +91 -0
  217. package/dist/integrations/subagents/batches.d.ts.map +1 -0
  218. package/dist/integrations/subagents/batches.js +172 -0
  219. package/dist/integrations/subagents/batches.js.map +1 -0
  220. package/dist/integrations/subagents/parent.d.ts +26 -11
  221. package/dist/integrations/subagents/parent.d.ts.map +1 -1
  222. package/dist/integrations/subagents/parent.js +13 -28
  223. package/dist/integrations/subagents/parent.js.map +1 -1
  224. package/dist/integrations/subagents/policy.d.ts +2 -2
  225. package/dist/integrations/subagents/policy.d.ts.map +1 -1
  226. package/dist/integrations/subagents/policy.js +2 -2
  227. package/dist/integrations/subagents/policy.js.map +1 -1
  228. package/dist/integrations/subagents/replay.d.ts +91 -26
  229. package/dist/integrations/subagents/replay.d.ts.map +1 -1
  230. package/dist/integrations/subagents/replay.js +216 -114
  231. package/dist/integrations/subagents/replay.js.map +1 -1
  232. package/dist/integrations/subagents/runtime.d.ts +50 -26
  233. package/dist/integrations/subagents/runtime.d.ts.map +1 -1
  234. package/dist/integrations/subagents/runtime.js +132 -126
  235. package/dist/integrations/subagents/runtime.js.map +1 -1
  236. package/dist/integrations/subagents/saved-agents.d.ts +57 -0
  237. package/dist/integrations/subagents/saved-agents.d.ts.map +1 -0
  238. package/dist/integrations/subagents/saved-agents.js +102 -0
  239. package/dist/integrations/subagents/saved-agents.js.map +1 -0
  240. package/dist/integrations/subagents/slash.d.ts +55 -0
  241. package/dist/integrations/subagents/slash.d.ts.map +1 -0
  242. package/dist/integrations/subagents/slash.js +45 -0
  243. package/dist/integrations/subagents/slash.js.map +1 -0
  244. package/dist/integrations/telemetry/session-export.d.ts +6 -6
  245. package/dist/integrations/telemetry/session-export.d.ts.map +1 -1
  246. package/dist/integrations/telemetry/session-export.js +2 -2
  247. package/dist/integrations/web/search.d.ts +1 -1
  248. package/dist/logging.d.ts +5 -5
  249. package/dist/logging.js +6 -6
  250. package/dist/memory/presentation.d.ts +11 -0
  251. package/dist/memory/presentation.d.ts.map +1 -1
  252. package/dist/memory/presentation.js +25 -0
  253. package/dist/memory/presentation.js.map +1 -1
  254. package/dist/memory/store.d.ts +13 -7
  255. package/dist/memory/store.d.ts.map +1 -1
  256. package/dist/memory/store.js +37 -11
  257. package/dist/memory/store.js.map +1 -1
  258. package/dist/memory/typed.d.ts +116 -0
  259. package/dist/memory/typed.d.ts.map +1 -0
  260. package/dist/memory/typed.js +336 -0
  261. package/dist/memory/typed.js.map +1 -0
  262. package/dist/permissions/checks.d.ts +1 -1
  263. package/dist/permissions/checks.js +1 -1
  264. package/dist/permissions/headless-trust.d.ts +4 -4
  265. package/dist/permissions/headless-trust.d.ts.map +1 -1
  266. package/dist/permissions/headless-trust.js +6 -6
  267. package/dist/permissions/headless-trust.js.map +1 -1
  268. package/dist/permissions/mode.d.ts +4 -4
  269. package/dist/permissions/mode.js +1 -1
  270. package/dist/permissions/rules.d.ts +1 -1
  271. package/dist/permissions/rules.js +1 -1
  272. package/dist/termination.d.ts +75 -0
  273. package/dist/termination.d.ts.map +1 -0
  274. package/dist/termination.js +143 -0
  275. package/dist/termination.js.map +1 -0
  276. package/dist/tui/AgentExplorer.d.ts +2 -2
  277. package/dist/tui/AgentExplorer.js +4 -4
  278. package/dist/tui/AgentExplorer.js.map +1 -1
  279. package/dist/tui/App.d.ts +9 -1
  280. package/dist/tui/App.d.ts.map +1 -1
  281. package/dist/tui/App.js +456 -307
  282. package/dist/tui/App.js.map +1 -1
  283. package/dist/tui/LiveActivity.d.ts +1 -1
  284. package/dist/tui/LiveActivity.d.ts.map +1 -1
  285. package/dist/tui/PermissionOverlay.d.ts +8 -0
  286. package/dist/tui/PermissionOverlay.d.ts.map +1 -1
  287. package/dist/tui/PermissionOverlay.js +25 -2
  288. package/dist/tui/PermissionOverlay.js.map +1 -1
  289. package/dist/tui/Picker.js +1 -1
  290. package/dist/tui/agent.d.ts +211 -135
  291. package/dist/tui/agent.d.ts.map +1 -1
  292. package/dist/tui/agent.js +535 -316
  293. package/dist/tui/agent.js.map +1 -1
  294. package/dist/tui/conversation-evidence-view.js +3 -3
  295. package/dist/tui/conversation-evidence-view.js.map +1 -1
  296. package/dist/tui/conversation-history.d.ts +4 -21
  297. package/dist/tui/conversation-history.d.ts.map +1 -1
  298. package/dist/tui/conversation-history.js +4 -28
  299. package/dist/tui/conversation-history.js.map +1 -1
  300. package/dist/tui/index.d.ts.map +1 -1
  301. package/dist/tui/index.js +27 -1
  302. package/dist/tui/index.js.map +1 -1
  303. package/dist/tui/log-pane.js +1 -1
  304. package/dist/tui/markdownParser.d.ts +1 -1
  305. package/dist/tui/markdownParser.js +1 -1
  306. package/dist/tui/permission-review.d.ts +16 -0
  307. package/dist/tui/permission-review.d.ts.map +1 -1
  308. package/dist/tui/permission-review.js +25 -2
  309. package/dist/tui/permission-review.js.map +1 -1
  310. package/dist/tui/slashCommands.d.ts +30 -41
  311. package/dist/tui/slashCommands.d.ts.map +1 -1
  312. package/dist/tui/slashCommands.js +75 -66
  313. package/dist/tui/slashCommands.js.map +1 -1
  314. package/dist/tui/status-panel-layout.js +1 -1
  315. package/dist/tui/status-panel-layout.js.map +1 -1
  316. package/dist/tui/{run-interruption.d.ts → turn-interruption.d.ts} +4 -4
  317. package/dist/tui/turn-interruption.d.ts.map +1 -0
  318. package/dist/tui/{run-interruption.js → turn-interruption.js} +20 -20
  319. package/dist/tui/turn-interruption.js.map +1 -0
  320. package/dist/tui/turn-limits-settings.d.ts +39 -0
  321. package/dist/tui/turn-limits-settings.d.ts.map +1 -0
  322. package/dist/tui/{run-limits-settings.js → turn-limits-settings.js} +18 -18
  323. package/dist/tui/turn-limits-settings.js.map +1 -0
  324. package/dist/tui/types.d.ts +3 -3
  325. package/dist/tui/types.d.ts.map +1 -1
  326. package/dist/user-commands/store.d.ts +4 -4
  327. package/dist/user-commands/store.js +5 -5
  328. package/dist/user-commands/store.js.map +1 -1
  329. package/package.json +6 -6
  330. package/dist/commands/run-flags.d.ts.map +0 -1
  331. package/dist/commands/run-flags.js.map +0 -1
  332. package/dist/commands/run-stream.d.ts +0 -65
  333. package/dist/commands/run-stream.d.ts.map +0 -1
  334. package/dist/commands/run-stream.js +0 -603
  335. package/dist/commands/run-stream.js.map +0 -1
  336. package/dist/commands/run.d.ts +0 -39
  337. package/dist/commands/run.d.ts.map +0 -1
  338. package/dist/commands/run.js +0 -533
  339. package/dist/commands/run.js.map +0 -1
  340. package/dist/config/run-limits.d.ts +0 -11
  341. package/dist/config/run-limits.d.ts.map +0 -1
  342. package/dist/config/run-limits.js +0 -64
  343. package/dist/config/run-limits.js.map +0 -1
  344. package/dist/integrations/sessions/compaction-evidence.d.ts +0 -5
  345. package/dist/integrations/sessions/compaction-evidence.d.ts.map +0 -1
  346. package/dist/integrations/sessions/compaction-evidence.js +0 -59
  347. package/dist/integrations/sessions/compaction-evidence.js.map +0 -1
  348. package/dist/integrations/sessions/database.d.ts +0 -5
  349. package/dist/integrations/sessions/database.d.ts.map +0 -1
  350. package/dist/integrations/sessions/database.js +0 -34
  351. package/dist/integrations/sessions/database.js.map +0 -1
  352. package/dist/integrations/sessions/paths.d.ts +0 -7
  353. package/dist/integrations/sessions/paths.d.ts.map +0 -1
  354. package/dist/integrations/sessions/paths.js +0 -14
  355. package/dist/integrations/sessions/paths.js.map +0 -1
  356. package/dist/integrations/sessions/run-discovery.d.ts +0 -24
  357. package/dist/integrations/sessions/run-discovery.d.ts.map +0 -1
  358. package/dist/integrations/sessions/run-discovery.js +0 -142
  359. package/dist/integrations/sessions/run-discovery.js.map +0 -1
  360. package/dist/integrations/sessions/turn-evidence.d.ts +0 -129
  361. package/dist/integrations/sessions/turn-evidence.d.ts.map +0 -1
  362. package/dist/integrations/sessions/turn-evidence.js +0 -517
  363. package/dist/integrations/sessions/turn-evidence.js.map +0 -1
  364. package/dist/integrations/subagents/history.d.ts +0 -26
  365. package/dist/integrations/subagents/history.d.ts.map +0 -1
  366. package/dist/integrations/subagents/history.js +0 -76
  367. package/dist/integrations/subagents/history.js.map +0 -1
  368. package/dist/integrations/subagents/runs.d.ts +0 -72
  369. package/dist/integrations/subagents/runs.d.ts.map +0 -1
  370. package/dist/integrations/subagents/runs.js +0 -155
  371. package/dist/integrations/subagents/runs.js.map +0 -1
  372. package/dist/tui/run-interruption.d.ts.map +0 -1
  373. package/dist/tui/run-interruption.js.map +0 -1
  374. package/dist/tui/run-limits-settings.d.ts +0 -39
  375. package/dist/tui/run-limits-settings.d.ts.map +0 -1
  376. package/dist/tui/run-limits-settings.js.map +0 -1
@@ -48,17 +48,17 @@ export type HookEvent = ShellHookEvent;
48
48
  export type HookEntry = ShellHookEntry;
49
49
  export type HooksConfig = ShellHooksConfig;
50
50
  /** See `NamzuCliConfig.limits`. */
51
- export interface RunLimitsConfig {
52
- /** Main-loop iterations one run may make. Omitted or 0 means unlimited. */
51
+ export interface TurnLimitsConfig {
52
+ /** Main-loop iterations one turn may make. Omitted or 0 means unlimited. */
53
53
  readonly maxIterations?: number;
54
- /** Aggregate prompt and completion tokens for the run and descendants. Omitted or 0 means unlimited. */
54
+ /** Aggregate prompt and completion tokens for the turn and descendants. Omitted or 0 means unlimited. */
55
55
  readonly tokenBudget?: number;
56
- /** Total run duration in milliseconds. Omitted or 0 means unlimited. */
56
+ /** Total turn duration in milliseconds. Omitted or 0 means unlimited. */
57
57
  readonly timeoutMs?: number;
58
58
  /**
59
- * Milliseconds a headless run may spend waiting out provider pauses — a
60
- * rate limit, an outage — resuming from its checkpoint after each, before
61
- * it stops with exit code 75. Default 0: a pause ends the run at once.
59
+ * Milliseconds a headless `namzu exec` may spend waiting out provider
60
+ * pauses — a rate limit, an outage — resuming from its checkpoint after
61
+ * each, before it stops with exit code 75. Default 0: a pause ends it at once.
62
62
  */
63
63
  readonly waitForProviderMs?: number;
64
64
  }
@@ -88,7 +88,7 @@ export interface CompactionCliConfig {
88
88
  readonly contextWindowTokens?: number;
89
89
  /**
90
90
  * Use consolidation (one `learning` entry) instead of the default
91
- * extracted-claim promoter when the run ends. Both write to the project's
91
+ * extracted-claim promoter when the turn ends. Both write to the project's
92
92
  * memory store. This selects the writer; `memory.recall` controls retrieval.
93
93
  */
94
94
  readonly consolidate?: boolean;
@@ -142,7 +142,7 @@ export interface NamzuCliConfig {
142
142
  * What the operator believes the table above decides, checked at startup.
143
143
  *
144
144
  * Each entry names a tool, an input, and the expected `"allow" | "ask" |
145
- * "deny"`. A mismatch is reported by index and the run continues — the
145
+ * "deny"`. A mismatch is reported by index and the turn continues — the
146
146
  * point is to say that a policy does not do what its author said, which
147
147
  * a table of globs cannot be read for. Absent means nothing is checked,
148
148
  * which is what it meant before this existed.
@@ -177,12 +177,12 @@ export interface NamzuCliConfig {
177
177
  /** Executable extension bundles. Absent keeps discovery and imports off. */
178
178
  readonly plugins?: PluginConfig;
179
179
  /**
180
- * How far one run may go before the kernel stops it. Headless `run` and
181
- * `run-stream` read these; `--max-iterations` and `--token-budget` override
182
- * them for one run. Absent means unlimited tokens, iterations and run duration.
180
+ * How far one turn may go before the kernel stops it. Headless `exec` and
181
+ * `exec --json` read these; `--max-iterations` and `--token-budget` override
182
+ * them for one turn. Absent means unlimited tokens, iterations and turn duration.
183
183
  * Explicit token budgets cover descendants.
184
184
  */
185
- readonly limits?: RunLimitsConfig;
185
+ readonly limits?: TurnLimitsConfig;
186
186
  /**
187
187
  * Isolation for the commands this CLI runs.
188
188
  *
@@ -209,7 +209,7 @@ export interface NamzuCliConfig {
209
209
  readonly web?: WebConfig;
210
210
  /**
211
211
  * Shell commands to run at points in the agent's loop: before or after a
212
- * tool call, when a run starts or ends. File-only, never from the
212
+ * tool call, when a turn starts or ends. File-only, never from the
213
213
  * environment — a hook runs a command with the operator's authority, and
214
214
  * a shell profile must not be able to plant one. Exit `2` from a
215
215
  * `pre_tool_use` hook blocks the call and tells the model why; any other
@@ -265,6 +265,20 @@ export interface NamzuCliConfig {
265
265
  readonly telemetry?: TelemetryConfig;
266
266
  /** Interactive-terminal-only behaviour. Absent leaves notifications off. */
267
267
  readonly tui?: TuiConfig;
268
+ /**
269
+ * Refresh provider model catalogues in the background on every launch.
270
+ *
271
+ * Today this is the Zen and Zen Go catalogue. Absent or `true` means on: the
272
+ * interactive TUI, `resume`, `exec` and `acp` start one refresh
273
+ * that never delays startup, gives up after 30 seconds, and is cancelled when
274
+ * the command ends. A refresh that lands becomes the catalogue the session
275
+ * lists and routes with and is kept under the application home as the
276
+ * last-good copy; one that fails keeps the last-good copy, or the bundled
277
+ * snapshot, and logs one line. `false` turns it off entirely — no network
278
+ * read, and no last-good copy either: the bundled snapshot alone. Read
279
+ * before a project is trusted, so a project file does not affect it.
280
+ */
281
+ readonly modelCatalogueRefresh?: boolean;
268
282
  }
269
283
  export interface TelemetryConfig {
270
284
  /**
@@ -310,14 +324,39 @@ export interface SessionExportConfig {
310
324
  export type SessionExportRedactorName = 'secrets';
311
325
  export interface SandboxConfig {
312
326
  /**
313
- * Run commands inside a sandbox. Default `true`.
327
+ * Run commands inside an OS sandbox.
328
+ *
329
+ * Off by default: commands and file tools run on this machine, under the
330
+ * permission prompts, the way other coding agents run them — a shell
331
+ * command is reviewed before it runs, and a file tool's path outside the
332
+ * working directory and the added directories is an approval request,
333
+ * not a refusal. `true` confines each command to the working directory
334
+ * and the added directories, with the network cut where the platform can
335
+ * cut it; whatever the sandbox cannot reach then needs `/add-dir` or a
336
+ * per-command escape the user approves.
314
337
  *
315
- * Setting it to `false` is a real choice with a real reason — a host
316
- * that provides its own isolation, or a platform where the sandbox
317
- * cannot start — and it is announced on startup rather than assumed.
318
- * It is not a way to make a failing sandbox quiet.
338
+ * Unset, it is on when `requireIsolation` names a control or `workspace`
339
+ * is `ephemeral`: both only mean anything inside a sandbox, and dropping
340
+ * a requirement because a switch was left at its default is the silent
341
+ * downgrade this key exists to prevent. The resolved state is announced
342
+ * on startup either way.
319
343
  */
320
344
  readonly enabled?: boolean;
345
+ /**
346
+ * Whether a sandboxed `bash` call may ask to run one command outside the
347
+ * sandbox (`dangerously_disable_sandbox`). Default `true`: the request is
348
+ * put to the user every time — `auto` and `--yolo` included; `plan` and
349
+ * `strict` refuse it — and written to the session's audit trail. `false`
350
+ * refuses every such request.
351
+ */
352
+ readonly allowEscape?: boolean;
353
+ /**
354
+ * Whether that escape may be granted with nobody to ask (a headless or
355
+ * `--print` turn, a drained turn). Default `false`: an unattended escape
356
+ * is refused. `true` grants it without a prompt, on the audit record;
357
+ * set it only for a host where leaving the sandbox is already decided.
358
+ */
359
+ readonly allowUnattendedEscape?: boolean;
321
360
  /**
322
361
  * Controls this machine must actually enforce, or the CLI refuses to
323
362
  * start.
@@ -339,7 +378,7 @@ export interface SandboxConfig {
339
378
  */
340
379
  readonly workspace?: 'working-directory' | 'ephemeral';
341
380
  /**
342
- * How long a completed or cancelled run waits for sandbox teardown.
381
+ * How long a completed or cancelled turn waits for sandbox teardown.
343
382
  * Defaults to 30 seconds. Set to `0` to preserve the former unbounded wait.
344
383
  */
345
384
  readonly teardownTimeoutMs?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsWH,MAAM,CAAC,MAAM,cAAc,GAAmB,MAAM,CAAC,MAAM,CAAC;IAC3D,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,KAAK;CACZ,CAAC,CAAA"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6YH,MAAM,CAAC,MAAM,cAAc,GAAmB,MAAM,CAAC,MAAM,CAAC;IAC3D,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,KAAK;CACZ,CAAC,CAAA"}
@@ -32,7 +32,7 @@ export function toolResultScreenName(entry) {
32
32
  /**
33
33
  * Built on demand rather than held in a table: a screen is cheap and
34
34
  * stateless, and a shared instance would be one more thing a caller could
35
- * mutate out from under a later run.
35
+ * mutate out from under a later turn.
36
36
  */
37
37
  function buildScreen(entry) {
38
38
  const name = toolResultScreenName(entry);
@@ -0,0 +1,23 @@
1
+ import type { SessionLog, TurnId } from '@namzu/sdk';
2
+ import type { NamzuCliConfig } from './schema.js';
3
+ /** The `limits` block of a CLI config: what one turn may spend. */
4
+ type LimitsConfig = NonNullable<NamzuCliConfig['limits']>;
5
+ export type TurnGuardKey = 'tokenBudget' | 'maxIterations' | 'timeoutMs';
6
+ export type TurnGuards = {
7
+ -readonly [K in TurnGuardKey]: number;
8
+ };
9
+ /** CLI policy; independent of the SDK's defaults for embedding hosts. */
10
+ export declare function resolveTurnGuards(...layers: readonly (LimitsConfig | undefined)[]): TurnGuards;
11
+ /**
12
+ * Restore a turn's own limits, including overrides made before a provider
13
+ * pause, from the `turn_started` record that opened it.
14
+ *
15
+ * The session log is the only place a turn's settings are written, so this
16
+ * reads the log rather than a sidecar. The read is strict: a log whose chain
17
+ * does not verify is refused rather than trusted for the limits a resumed
18
+ * turn runs under. `undefined` means the log holds no such turn, which is
19
+ * what an embedded host that never recorded one looks like.
20
+ */
21
+ export declare function readStoredTurnGuards(log: Pick<SessionLog, 'sessionId' | 'read'>, turnId: TurnId): Promise<TurnGuards | undefined>;
22
+ export {};
23
+ //# sourceMappingURL=turn-guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-guards.d.ts","sourceRoot":"","sources":["../../src/config/turn-guards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,mEAAmE;AACnE,KAAK,YAAY,GAAG,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAA;AAEzD,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,eAAe,GAAG,WAAW,CAAA;AACxE,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,UAAU,CAAC,IAAI,YAAY,GAAG,MAAM;CAAE,CAAA;AAIlE,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,GAAG,MAAM,EAAE,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC,EAAE,GAAG,UAAU,CAkB9F;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACzC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,MAAM,CAAC,EAC3C,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAejC"}
@@ -0,0 +1,46 @@
1
+ const GUARD_KEYS = ['tokenBudget', 'maxIterations', 'timeoutMs'];
2
+ /** CLI policy; independent of the SDK's defaults for embedding hosts. */
3
+ export function resolveTurnGuards(...layers) {
4
+ const resolved = { tokenBudget: 0, maxIterations: 0, timeoutMs: 0 };
5
+ for (const layer of layers) {
6
+ for (const key of GUARD_KEYS) {
7
+ const value = layer?.[key];
8
+ if (value === undefined)
9
+ continue;
10
+ if (!Number.isSafeInteger(value) ||
11
+ value < 0 ||
12
+ (key === 'timeoutMs' && value > 2_147_483_647))
13
+ throw new Error(`Invalid ${key}: use a nonnegative safe integer${key === 'timeoutMs' ? ' at most 2147483647' : ''}. 0 means unlimited.`);
14
+ resolved[key] = value;
15
+ }
16
+ }
17
+ return resolved;
18
+ }
19
+ /**
20
+ * Restore a turn's own limits, including overrides made before a provider
21
+ * pause, from the `turn_started` record that opened it.
22
+ *
23
+ * The session log is the only place a turn's settings are written, so this
24
+ * reads the log rather than a sidecar. The read is strict: a log whose chain
25
+ * does not verify is refused rather than trusted for the limits a resumed
26
+ * turn runs under. `undefined` means the log holds no such turn, which is
27
+ * what an embedded host that never recorded one looks like.
28
+ */
29
+ export async function readStoredTurnGuards(log, turnId) {
30
+ for await (const { record } of log.read({ mode: 'strict' })) {
31
+ if (record.type !== 'turn_started' || record.turnId !== turnId)
32
+ continue;
33
+ if (record.sessionId !== log.sessionId)
34
+ throw new Error('Turn record belongs to a different session than the resumed turn');
35
+ const config = { ...record.config };
36
+ if (GUARD_KEYS.some((key) => typeof config[key] !== 'number'))
37
+ throw new Error('Turn record does not contain its original limits');
38
+ return resolveTurnGuards({
39
+ tokenBudget: config.tokenBudget,
40
+ maxIterations: config.maxIterations,
41
+ timeoutMs: config.timeoutMs,
42
+ });
43
+ }
44
+ return undefined;
45
+ }
46
+ //# sourceMappingURL=turn-guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-guards.js","sourceRoot":"","sources":["../../src/config/turn-guards.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,GAAG,CAAC,aAAa,EAAE,eAAe,EAAE,WAAW,CAAU,CAAA;AAEzE,yEAAyE;AACzE,MAAM,UAAU,iBAAiB,CAAC,GAAG,MAA6C;IACjF,MAAM,QAAQ,GAAe,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAA;IAC/E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAA;YAC1B,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAQ;YACjC,IACC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;gBAC5B,KAAK,GAAG,CAAC;gBACT,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,GAAG,aAAa,CAAC;gBAE9C,MAAM,IAAI,KAAK,CACd,WAAW,GAAG,mCAAmC,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,sBAAsB,CACvH,CAAA;YACF,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACtB,CAAC;IACF,CAAC;IACD,OAAO,QAAQ,CAAA;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,GAA2C,EAC3C,MAAc;IAEd,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QAC7D,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM;YAAE,SAAQ;QACxE,IAAI,MAAM,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS;YACrC,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;QACpF,MAAM,MAAM,GAA4B,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;QAC5D,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;QACpE,OAAO,iBAAiB,CAAC;YACxB,WAAW,EAAE,MAAM,CAAC,WAAqB;YACzC,aAAa,EAAE,MAAM,CAAC,aAAuB;YAC7C,SAAS,EAAE,MAAM,CAAC,SAAmB;SACrC,CAAC,CAAA;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AACjB,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * The session's added directories: the ones `/add-dir` extends and every turn
3
+ * reads fresh — the query, the sandbox binds and the environment prompt.
4
+ */
5
+ export interface SessionDirectories {
6
+ list(): readonly string[];
7
+ /**
8
+ * Add one for the rest of the session, stored under its canonical path.
9
+ *
10
+ * A directory inside the working directory is not added: the tools
11
+ * already reach it, and a root inside the tree the agent writes to is one
12
+ * a later command could swap for a link.
13
+ *
14
+ * A directory outside the working directory — decided after links are
15
+ * followed — is added only when `approve` answers yes for the canonical
16
+ * path it leads to. Adding one lets every file tool reach
17
+ * it with no further question, which is exactly the question a path there
18
+ * otherwise gets, so the user is asked once here instead. Without an
19
+ * `approve` such a directory is refused: an add that nobody confirmed is
20
+ * not one this session makes on its own.
21
+ */
22
+ add(path: string, options?: {
23
+ readonly approve?: (absolute: string) => Promise<boolean>;
24
+ }): Promise<{
25
+ readonly added: boolean;
26
+ readonly path: string;
27
+ readonly reason?: string;
28
+ }>;
29
+ }
30
+ /**
31
+ * The session's directories over a list the caller keeps.
32
+ *
33
+ * The list is shared rather than copied: the session reads it at every turn,
34
+ * and `/add-dir` must be visible to the next one.
35
+ */
36
+ export declare function createSessionDirectories(cwd: string, directories: string[]): SessionDirectories;
37
+ //# sourceMappingURL=directories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directories.d.ts","sourceRoot":"","sources":["../../src/context/directories.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAClC,IAAI,IAAI,SAAS,MAAM,EAAE,CAAA;IACzB;;;;;;;;;;;;;;OAcG;IACH,GAAG,CACF,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,GACrE,OAAO,CAAC;QACV,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;QACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KACxB,CAAC,CAAA;CACF;AAQD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAqD/F"}
@@ -0,0 +1,69 @@
1
+ import { realpath, stat } from 'node:fs/promises';
2
+ import { isAbsolute, relative, resolve } from 'node:path';
3
+ /** True when `candidate` is `root` or below it. */
4
+ function isInside(root, candidate) {
5
+ const rel = relative(root, candidate);
6
+ return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel));
7
+ }
8
+ /**
9
+ * The session's directories over a list the caller keeps.
10
+ *
11
+ * The list is shared rather than copied: the session reads it at every turn,
12
+ * and `/add-dir` must be visible to the next one.
13
+ */
14
+ export function createSessionDirectories(cwd, directories) {
15
+ const root = resolve(cwd);
16
+ return {
17
+ list: () => [...directories],
18
+ add: async (path, options) => {
19
+ const absolute = resolve(root, path);
20
+ if (absolute === root)
21
+ return { added: false, path: absolute, reason: 'That is the working directory.' };
22
+ if (directories.includes(absolute))
23
+ return { added: false, path: absolute, reason: 'Already added.' };
24
+ const entry = await stat(absolute).catch(() => null);
25
+ if (!entry?.isDirectory())
26
+ return { added: false, path: absolute, reason: 'Not a directory.' };
27
+ // Decided on canonical paths, because the file tools resolve an
28
+ // added directory through its links (`resolveWithinReal`): a
29
+ // lexical test would call `./link -> /elsewhere` inside, add it
30
+ // unasked, and every tool would then reach /elsewhere. The
31
+ // question names where it really leads.
32
+ const real = await realpath(absolute);
33
+ const realRoot = await realpath(root).catch(() => root);
34
+ if (real === realRoot)
35
+ return { added: false, path: absolute, reason: 'That is the working directory.' };
36
+ // Inside the working directory there is nothing to add: the tools
37
+ // already reach it. Adding it anyway would make a root the agent can
38
+ // rewrite — `rm -r sub && ln -s /elsewhere sub` from one command, a
39
+ // sandboxed one included — and the file tools canonicalize a root at
40
+ // every call, so the added root would then lead elsewhere unasked.
41
+ if (isInside(realRoot, real)) {
42
+ return {
43
+ added: false,
44
+ path: real,
45
+ reason: 'It is inside the working directory, which the tools already reach.',
46
+ };
47
+ }
48
+ if (directories.includes(real))
49
+ return { added: false, path: real, reason: 'Already added.' };
50
+ if (!options?.approve) {
51
+ return {
52
+ added: false,
53
+ path: absolute,
54
+ reason: 'It is outside the working directory, and adding it needs your approval, which this surface cannot ask for.',
55
+ };
56
+ }
57
+ if (!(await options.approve(real))) {
58
+ return { added: false, path: absolute, reason: 'Not approved.' };
59
+ }
60
+ // The canonical path, the one that was approved — never the spelling.
61
+ // The file tools canonicalize a root at every call, so a stored
62
+ // `./link` would follow wherever the link points later, not where it
63
+ // pointed when the question was asked.
64
+ directories.push(real);
65
+ return { added: true, path: real };
66
+ },
67
+ };
68
+ }
69
+ //# sourceMappingURL=directories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directories.js","sourceRoot":"","sources":["../../src/context/directories.ts"],"names":[],"mappings":"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"}
@@ -31,11 +31,66 @@
31
31
  * text only changes when the fact changes, a fresh read costs a cache miss
32
32
  * exactly when a cache hit would have been wrong.
33
33
  */
34
+ /**
35
+ * Where the tools run and how the model gets past the edge of it.
36
+ *
37
+ * The model used to learn its boundary from refusal strings — "Path escapes
38
+ * the working directory… Tools may only reach inside X" — and read every one
39
+ * as a wall, including the ones with a door in them. Stated up front, it can
40
+ * say what it can reach, and ask for the right thing when it cannot.
41
+ */
42
+ export interface ExecutionBoundary {
43
+ /** Present when commands run in the OS sandbox; absent means the host. */
44
+ readonly sandbox?: {
45
+ /** The environment the sandbox resolved to, e.g. `linux-bwrap`. */
46
+ readonly environment: string;
47
+ /** Controls this machine actually applies, e.g. `filesystem`, `network`. */
48
+ readonly enforced: readonly string[];
49
+ };
50
+ /**
51
+ * What a sandboxed command's `dangerously_disable_sandbox` gets: put to the
52
+ * user (`ask`), granted unasked by configuration (`unattended`), or refused
53
+ * (`refused` — escapes off, or nobody to ask). Ignored on the host.
54
+ */
55
+ readonly escape: 'ask' | 'unattended' | 'refused';
56
+ /** Whether a person answers the permission prompts in this session. */
57
+ readonly interactive: boolean;
58
+ }
59
+ /** What the model needs to know about running under WSL. */
60
+ export interface WslFacts {
61
+ /** `WSL_DISTRO_NAME`, when the environment carries it. */
62
+ readonly distro: string | null;
63
+ /** Windows executables can be started from the Linux side. */
64
+ readonly interop: boolean;
65
+ /** Windows drives mounted under `/mnt`, as `/mnt/<letter>`. */
66
+ readonly drives: readonly string[];
67
+ }
68
+ /**
69
+ * WSL, or `undefined` on any other Linux.
70
+ *
71
+ * The environment is the signal: WSL sets `WSL_DISTRO_NAME` in every
72
+ * process it starts, and `WSL_INTEROP` names the interop socket when interop
73
+ * is on. Interop also counts as on when its binfmt handler is registered
74
+ * (`/proc/sys/fs/binfmt_misc/WSLInterop`), which survives a shell that
75
+ * dropped the variable. Drives are the one-letter directories under `/mnt`
76
+ * — `/mnt/wsl` and `/mnt/wslg` are WSL's own and are not drives.
77
+ *
78
+ * Every probe is injectable so a test can describe a machine it is not
79
+ * running on; the defaults read this one.
80
+ */
81
+ export declare function detectWsl(env?: NodeJS.ProcessEnv, probe?: {
82
+ readonly exists?: (path: string) => boolean;
83
+ readonly list?: (path: string) => readonly string[];
84
+ }): WslFacts | undefined;
34
85
  export interface EnvironmentFacts {
35
86
  /** ISO calendar date, `YYYY-MM-DD`, in the machine's own timezone. */
36
87
  readonly today: string;
37
88
  /** Directories besides the working directory the file tools may reach, absolute. */
38
89
  readonly additionalDirectories?: readonly string[];
90
+ /** Where the tools run; absent leaves the boundary unstated, as before. */
91
+ readonly boundary?: ExecutionBoundary;
92
+ /** Present when this is WSL. */
93
+ readonly wsl?: WslFacts;
39
94
  /**
40
95
  * `branch` when on one, `null` when the working directory is not a
41
96
  * repository, `'detached'` when it is one with no branch checked out.
@@ -1 +1 @@
1
- {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/context/environment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAUH,MAAM,WAAW,gBAAgB;IAChC,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,oFAAoF;IACpF,QAAQ,CAAC,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAClD;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,CAG9C;AAeD,wBAAsB,oBAAoB,CACzC,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,IAAiB,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAmB3B;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAoBxE"}
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/context/environment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAWH;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IACjC,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,CAAC,EAAE;QAClB,mEAAmE;QACnE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;QAC5B,4EAA4E;QAC5E,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;KACpC,CAAA;IACD;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,YAAY,GAAG,SAAS,CAAA;IACjD,uEAAuE;IACvE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;CAC7B;AAED,4DAA4D;AAC5D,MAAM,WAAW,QAAQ;IACxB,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,+DAA+D;IAC/D,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAClC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CACxB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,KAAK,GAAE;IACN,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAA;CAC9C,GACJ,QAAQ,GAAG,SAAS,CAoBtB;AAED,MAAM,WAAW,gBAAgB;IAChC,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,oFAAoF;IACpF,QAAQ,CAAC,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAClD,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IACrC,gCAAgC;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAA;IACvB;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,CAG9C;AAeD,wBAAsB,oBAAoB,CACzC,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,IAAiB,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAmB3B;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAsBxE"}
@@ -32,10 +32,46 @@
32
32
  * exactly when a cache hit would have been wrong.
33
33
  */
34
34
  import { execFile } from 'node:child_process';
35
+ import { existsSync, readdirSync } from 'node:fs';
35
36
  import { promisify } from 'node:util';
36
37
  const run = promisify(execFile);
37
38
  /** Bound on a single git call. A wedged repository must not stall a turn. */
38
39
  const GIT_TIMEOUT_MS = 2_000;
40
+ /**
41
+ * WSL, or `undefined` on any other Linux.
42
+ *
43
+ * The environment is the signal: WSL sets `WSL_DISTRO_NAME` in every
44
+ * process it starts, and `WSL_INTEROP` names the interop socket when interop
45
+ * is on. Interop also counts as on when its binfmt handler is registered
46
+ * (`/proc/sys/fs/binfmt_misc/WSLInterop`), which survives a shell that
47
+ * dropped the variable. Drives are the one-letter directories under `/mnt`
48
+ * — `/mnt/wsl` and `/mnt/wslg` are WSL's own and are not drives.
49
+ *
50
+ * Every probe is injectable so a test can describe a machine it is not
51
+ * running on; the defaults read this one.
52
+ */
53
+ export function detectWsl(env = process.env, probe = {}) {
54
+ const distro = env.WSL_DISTRO_NAME?.trim() || null;
55
+ const socket = env.WSL_INTEROP?.trim() || null;
56
+ if (!distro && !socket)
57
+ return undefined;
58
+ const exists = probe.exists ?? existsSync;
59
+ const list = probe.list ??
60
+ ((path) => {
61
+ try {
62
+ return readdirSync(path);
63
+ }
64
+ catch {
65
+ return [];
66
+ }
67
+ });
68
+ const interop = socket !== null || exists('/proc/sys/fs/binfmt_misc/WSLInterop');
69
+ const drives = list('/mnt')
70
+ .filter((name) => /^[a-z]$/i.test(name))
71
+ .sort()
72
+ .map((name) => `/mnt/${name}`);
73
+ return { distro, interop, drives };
74
+ }
39
75
  /**
40
76
  * The machine's local calendar date.
41
77
  *
@@ -94,7 +130,67 @@ export function composeEnvironmentPrompt(facts) {
94
130
  if (facts.additionalDirectories && facts.additionalDirectories.length > 0) {
95
131
  lines.push(`Besides the working directory, the file tools may reach these directories, by absolute path: ${facts.additionalDirectories.map((d) => `\`${d}\``).join(', ')}. Relative paths still resolve against the working directory.`);
96
132
  }
133
+ if (facts.boundary)
134
+ lines.push(...boundaryLines(facts.boundary));
135
+ if (facts.wsl)
136
+ lines.push(...wslLines(facts.wsl, facts.boundary));
97
137
  lines.push('These are facts about right now. Prefer them over any date or branch you would otherwise assume.');
98
138
  return `## Environment\n\n${lines.join('\n')}`;
99
139
  }
140
+ /** The boundary, and the way past it, in the words the model acts on. */
141
+ function boundaryLines(boundary) {
142
+ if (!boundary.sandbox) {
143
+ const outside = boundary.interactive
144
+ ? 'A path anywhere else is not refused outright: the user is asked to approve that call first, every time — in plan mode too, for a read; the strict permission mode refuses it. When you need a directory repeatedly, suggest the user add it with `/add-dir <path>`.'
145
+ : 'A path anywhere else is refused in this session, because it needs a person to approve it and nobody is at the terminal. If you need one, say which directory and why, so the user can add it (`--add-dir <path>`) and run again.';
146
+ return [
147
+ 'Tools run on this machine, not in a sandbox: shell commands and file changes go through the permission settings, which may ask the user before they run.',
148
+ `The file tools reach the working directory and any added directories directly. ${outside} A refusal that remains is a decision, not a missing file; say so rather than retrying another spelling.`,
149
+ ];
150
+ }
151
+ const { environment, enforced } = boundary.sandbox;
152
+ const network = enforced.includes('network')
153
+ ? ' The network is cut inside it.'
154
+ : ' It does not cut the network on this machine.';
155
+ const escapeRoute = boundary.escape === 'ask'
156
+ ? 'When one command genuinely cannot work inside it (it needs the network, a path it does not mount, or a host tool), set `dangerously_disable_sandbox: true` on that one `bash` call: the user is asked to approve it every time, whatever else is approved; the plan and strict permission modes refuse it. Never use it to get around a permission refusal.'
157
+ : boundary.escape === 'unattended'
158
+ ? 'When one command genuinely cannot work inside it, `dangerously_disable_sandbox: true` on that `bash` call runs it on the host: this session is configured to allow that without asking, and every use is recorded. Use it only when the sandbox is the obstacle.'
159
+ : 'Commands cannot leave the sandbox in this session. When one needs something the sandbox withholds, say what and why, and let the user decide.';
160
+ // Said per what the platform enforces, never more. A tier that does not
161
+ // confine the file system (`linux-namespace`, `basic`) leaves the whole
162
+ // host visible to a command; one that does still shows it the system
163
+ // directories programs need, read-only, and a private /tmp.
164
+ const files = enforced.includes('filesystem')
165
+ ? ' Inside it, commands can read and write the working directory and the added directories; the system directories programs need are readable, /tmp is private to the command, and the rest of this machine (the home directory, other projects, other mounts) cannot be reached from it, so no spelling of such a path will be found.'
166
+ : ' It does not confine the file system here, so commands can still see files outside the working directory.';
167
+ return [
168
+ `Shell commands run in a sandbox (${environment}${enforced.length > 0 ? `, enforcing ${enforced.join(', ')}` : ', enforcing nothing on this platform'}).${files}${network} The file tools reach only the working directory and the added directories.`,
169
+ `To reach another directory, ask the user to add it with \`/add-dir <path>\` (the next turn binds it). ${escapeRoute}`,
170
+ ];
171
+ }
172
+ /** WSL: where the Windows side is, and how to reach it from here. */
173
+ function wslLines(wsl, boundary) {
174
+ // Only a sandbox that confines the file system hides the drives; one that
175
+ // does not leaves them visible to commands, like the host.
176
+ const sandboxed = boundary?.sandbox?.enforced.includes('filesystem') === true;
177
+ const fileTools = boundary?.sandbox !== undefined
178
+ ? 'the file tools reach them only once added with `/add-dir`'
179
+ : boundary?.interactive === false
180
+ ? 'a file tool reaching them is refused in this session, since nobody is here to approve it'
181
+ : 'a file tool reaching them asks for approval first, like any other outside path';
182
+ const drives = wsl.drives.length > 0
183
+ ? `Windows drives are mounted under ${wsl.drives.map((d) => `\`${d}\``).join(', ')} (\`C:\\Users\` is \`/mnt/c/Users\`; \`wslpath -w\` and \`wslpath -u\` convert).`
184
+ : 'No Windows drive is mounted under `/mnt` right now.';
185
+ const reach = sandboxed
186
+ ? 'They are outside the sandbox, so a command there needs `/add-dir` or the sandbox escape.'
187
+ : `They are outside the working directory, so ${fileTools}.`;
188
+ const interop = wsl.interop
189
+ ? `Windows programs start from the shell through WSL interop, by their \`.exe\` name: \`powershell.exe -NoProfile -Command ...\`, \`cmd.exe /c ...\`, \`explorer.exe .\`. \`cmd.exe\` started from a Linux directory warns that UNC paths are unsupported and falls back to C:\\Windows, so \`cd\` under \`/mnt/c\` first or use \`powershell.exe\`. If a name is not found, the Windows side of \`PATH\` was not appended; \`cmd.exe\` is under \`/mnt/c/Windows/System32\` and \`powershell.exe\` under its \`WindowsPowerShell/v1.0\`.${sandboxed ? ' The sandbox does not mount the Windows drives those programs live on, so running one needs the sandbox escape.' : ''}`
190
+ : 'WSL interop is off here, so Windows `.exe` programs cannot be started from the shell.';
191
+ return [
192
+ `This machine is Windows Subsystem for Linux${wsl.distro ? ` (distro \`${wsl.distro}\`)` : ''}. ${drives} ${reach}`,
193
+ interop,
194
+ ];
195
+ }
100
196
  //# sourceMappingURL=environment.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/context/environment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/context/environment.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { type SkippedInstructionFile } from './project.js';
3
3
  /** Total model-visible instruction text held by one session. */
4
4
  export declare const MAX_TOTAL_PROJECT_INSTRUCTION_CHARS = 256000;
5
5
  /**
6
- * Session-owned live instruction state. Each run gets its own drain cursor;
6
+ * Session-owned live instruction state. Each turn gets its own drain cursor;
7
7
  * children share discovery without being able to consume the parent's update.
8
8
  */
9
9
  export declare class ProjectInstructionTracker {
@@ -15,8 +15,8 @@ export declare class ProjectInstructionTracker {
15
15
  rehydrate(messages: readonly Message[]): void;
16
16
  /** Refresh known scopes and return the exact policy for a new human turn. */
17
17
  prepareSnapshot(messages: readonly Message[]): UserMessage | null;
18
- /** Each run's durable messages are its cursor over the shared discovered state. */
19
- createRunContext(): ProjectInstructionContext;
18
+ /** Each turn's durable messages are its cursor over the shared discovered state. */
19
+ createTurnContext(): ProjectInstructionContext;
20
20
  get instructionFiles(): readonly string[];
21
21
  get skippedInstructionFiles(): readonly SkippedInstructionFile[];
22
22
  private observe;
@@ -1 +1 @@
1
- {"version":3,"file":"project-tracker.d.ts","sourceRoot":"","sources":["../../src/context/project-tracker.ts"],"names":[],"mappings":"AAEA,OAAO,EAEN,KAAK,OAAO,EACZ,KAAK,yBAAyB,EAE9B,KAAK,WAAW,EAGhB,MAAM,YAAY,CAAA;AAGnB,OAAO,EAIN,KAAK,sBAAsB,EAG3B,MAAM,cAAc,CAAA;AAErB,gEAAgE;AAChE,eAAO,MAAM,mCAAmC,SAAU,CAAA;AA0D1D;;;GAGG;AACH,qBAAa,yBAAyB;IACrC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;gBAE3C,GAAG,EAAE,MAAM;IAMvB,mFAAmF;IACnF,SAAS,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI;IAa7C,6EAA6E;IAC7E,eAAe,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,WAAW,GAAG,IAAI;IAKjE,mFAAmF;IACnF,gBAAgB,IAAI,yBAAyB;IAa7C,IAAI,gBAAgB,IAAI,SAAS,MAAM,EAAE,CAExC;IAED,IAAI,uBAAuB,IAAI,SAAS,sBAAsB,EAAE,CAE/D;IAED,OAAO,CAAC,OAAO;IAyBf,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,IAAI;IAkDZ,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,uBAAuB;CAa/B"}
1
+ {"version":3,"file":"project-tracker.d.ts","sourceRoot":"","sources":["../../src/context/project-tracker.ts"],"names":[],"mappings":"AAEA,OAAO,EAEN,KAAK,OAAO,EACZ,KAAK,yBAAyB,EAE9B,KAAK,WAAW,EAGhB,MAAM,YAAY,CAAA;AAGnB,OAAO,EAIN,KAAK,sBAAsB,EAG3B,MAAM,cAAc,CAAA;AAErB,gEAAgE;AAChE,eAAO,MAAM,mCAAmC,SAAU,CAAA;AA0D1D;;;GAGG;AACH,qBAAa,yBAAyB;IACrC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;gBAE3C,GAAG,EAAE,MAAM;IAMvB,mFAAmF;IACnF,SAAS,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI;IAa7C,6EAA6E;IAC7E,eAAe,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,WAAW,GAAG,IAAI;IAKjE,oFAAoF;IACpF,iBAAiB,IAAI,yBAAyB;IAa9C,IAAI,gBAAgB,IAAI,SAAS,MAAM,EAAE,CAExC;IAED,IAAI,uBAAuB,IAAI,SAAS,sBAAsB,EAAE,CAE/D;IAED,OAAO,CAAC,OAAO;IAyBf,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,IAAI;IAkDZ,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,uBAAuB;CAa/B"}