@prestyj/cli 5.9.0 → 5.11.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 (675) hide show
  1. package/README.md +4 -5
  2. package/assets/skills/evidence-led-ui/SKILL.md +1 -1
  3. package/dist/app-sidecar-auth-broadcast.test.d.ts +2 -0
  4. package/dist/app-sidecar-auth-broadcast.test.d.ts.map +1 -0
  5. package/dist/app-sidecar-auth-broadcast.test.js +282 -0
  6. package/dist/app-sidecar-auth-broadcast.test.js.map +1 -0
  7. package/dist/app-sidecar-sessions.d.ts +5 -2
  8. package/dist/app-sidecar-sessions.d.ts.map +1 -1
  9. package/dist/app-sidecar-sessions.js +34 -8
  10. package/dist/app-sidecar-sessions.js.map +1 -1
  11. package/dist/app-sidecar-sessions.test.js +95 -0
  12. package/dist/app-sidecar-sessions.test.js.map +1 -1
  13. package/dist/app-sidecar.js +871 -142
  14. package/dist/app-sidecar.js.map +1 -1
  15. package/dist/chat-agents/general.test.js +5 -3
  16. package/dist/chat-agents/general.test.js.map +1 -1
  17. package/dist/chat-agents/memory.d.ts.map +1 -1
  18. package/dist/chat-agents/memory.js +14 -5
  19. package/dist/chat-agents/memory.js.map +1 -1
  20. package/dist/chat-agents/memory.test.js +11 -1
  21. package/dist/chat-agents/memory.test.js.map +1 -1
  22. package/dist/chat-agents/shared.js +1 -1
  23. package/dist/chat-agents/shared.js.map +1 -1
  24. package/dist/chat-agents/specialists.test.js +3 -2
  25. package/dist/chat-agents/specialists.test.js.map +1 -1
  26. package/dist/cli/command-routing.d.ts +1 -1
  27. package/dist/cli/command-routing.d.ts.map +1 -1
  28. package/dist/cli/command-routing.js +1 -0
  29. package/dist/cli/command-routing.js.map +1 -1
  30. package/dist/cli/command-routing.test.js +1 -0
  31. package/dist/cli/command-routing.test.js.map +1 -1
  32. package/dist/cli.d.ts.map +1 -1
  33. package/dist/cli.js +183 -51
  34. package/dist/cli.js.map +1 -1
  35. package/dist/config.d.ts +16 -0
  36. package/dist/config.d.ts.map +1 -1
  37. package/dist/config.js +51 -2
  38. package/dist/config.js.map +1 -1
  39. package/dist/config.test.js +71 -2
  40. package/dist/config.test.js.map +1 -1
  41. package/dist/core/agent-mcp-passthrough.test.d.ts +2 -0
  42. package/dist/core/agent-mcp-passthrough.test.d.ts.map +1 -0
  43. package/dist/core/agent-mcp-passthrough.test.js +61 -0
  44. package/dist/core/agent-mcp-passthrough.test.js.map +1 -0
  45. package/dist/core/agent-notifications.d.ts +62 -0
  46. package/dist/core/agent-notifications.d.ts.map +1 -0
  47. package/dist/core/agent-notifications.js +92 -0
  48. package/dist/core/agent-notifications.js.map +1 -0
  49. package/dist/core/agent-notifications.test.d.ts +2 -0
  50. package/dist/core/agent-notifications.test.d.ts.map +1 -0
  51. package/dist/core/agent-notifications.test.js +97 -0
  52. package/dist/core/agent-notifications.test.js.map +1 -0
  53. package/dist/core/agent-session-add-dir.test.d.ts +2 -0
  54. package/dist/core/agent-session-add-dir.test.d.ts.map +1 -0
  55. package/dist/core/agent-session-add-dir.test.js +110 -0
  56. package/dist/core/agent-session-add-dir.test.js.map +1 -0
  57. package/dist/core/agent-session-checkpoint-flush.test.d.ts +2 -0
  58. package/dist/core/agent-session-checkpoint-flush.test.d.ts.map +1 -0
  59. package/dist/core/agent-session-checkpoint-flush.test.js +201 -0
  60. package/dist/core/agent-session-checkpoint-flush.test.js.map +1 -0
  61. package/dist/core/agent-session-compaction.test.js +327 -13
  62. package/dist/core/agent-session-compaction.test.js.map +1 -1
  63. package/dist/core/agent-session-crash-durability.test.d.ts +2 -0
  64. package/dist/core/agent-session-crash-durability.test.d.ts.map +1 -0
  65. package/dist/core/agent-session-crash-durability.test.js +102 -0
  66. package/dist/core/agent-session-crash-durability.test.js.map +1 -0
  67. package/dist/core/agent-session-marker-anchors.test.d.ts +2 -0
  68. package/dist/core/agent-session-marker-anchors.test.d.ts.map +1 -0
  69. package/dist/core/agent-session-marker-anchors.test.js +326 -0
  70. package/dist/core/agent-session-marker-anchors.test.js.map +1 -0
  71. package/dist/core/agent-session-memory-tail.test.js +4 -7
  72. package/dist/core/agent-session-memory-tail.test.js.map +1 -1
  73. package/dist/core/agent-session-model-switch.test.d.ts +2 -0
  74. package/dist/core/agent-session-model-switch.test.d.ts.map +1 -0
  75. package/dist/core/agent-session-model-switch.test.js +161 -0
  76. package/dist/core/agent-session-model-switch.test.js.map +1 -0
  77. package/dist/core/agent-session-notifications.test.d.ts +2 -0
  78. package/dist/core/agent-session-notifications.test.d.ts.map +1 -0
  79. package/dist/core/agent-session-notifications.test.js +114 -0
  80. package/dist/core/agent-session-notifications.test.js.map +1 -0
  81. package/dist/core/agent-session-process-gate.test.d.ts +2 -0
  82. package/dist/core/agent-session-process-gate.test.d.ts.map +1 -0
  83. package/dist/core/agent-session-process-gate.test.js +92 -0
  84. package/dist/core/agent-session-process-gate.test.js.map +1 -0
  85. package/dist/core/agent-session-queue.test.js +69 -7
  86. package/dist/core/agent-session-queue.test.js.map +1 -1
  87. package/dist/core/agent-session-review-coverage.test.js +80 -23
  88. package/dist/core/agent-session-review-coverage.test.js.map +1 -1
  89. package/dist/core/agent-session-slash-restore.test.d.ts +2 -0
  90. package/dist/core/agent-session-slash-restore.test.d.ts.map +1 -0
  91. package/dist/core/agent-session-slash-restore.test.js +121 -0
  92. package/dist/core/agent-session-slash-restore.test.js.map +1 -0
  93. package/dist/core/agent-session-subagent-policy.test.js +7 -3
  94. package/dist/core/agent-session-subagent-policy.test.js.map +1 -1
  95. package/dist/core/agent-session.d.ts +256 -10
  96. package/dist/core/agent-session.d.ts.map +1 -1
  97. package/dist/core/agent-session.js +1071 -219
  98. package/dist/core/agent-session.js.map +1 -1
  99. package/dist/core/agent-tools-allowlist.test.js +5 -3
  100. package/dist/core/agent-tools-allowlist.test.js.map +1 -1
  101. package/dist/core/agents.d.ts +11 -0
  102. package/dist/core/agents.d.ts.map +1 -1
  103. package/dist/core/agents.js +21 -0
  104. package/dist/core/agents.js.map +1 -1
  105. package/dist/core/agents.test.d.ts +2 -0
  106. package/dist/core/agents.test.d.ts.map +1 -0
  107. package/dist/core/agents.test.js +67 -0
  108. package/dist/core/agents.test.js.map +1 -0
  109. package/dist/core/auth-providers.js +1 -1
  110. package/dist/core/auth-providers.js.map +1 -1
  111. package/dist/core/compaction/active-context.test.js +21 -0
  112. package/dist/core/compaction/active-context.test.js.map +1 -1
  113. package/dist/core/compaction/compactor.d.ts +108 -8
  114. package/dist/core/compaction/compactor.d.ts.map +1 -1
  115. package/dist/core/compaction/compactor.js +423 -119
  116. package/dist/core/compaction/compactor.js.map +1 -1
  117. package/dist/core/compaction/compactor.test.js +361 -9
  118. package/dist/core/compaction/compactor.test.js.map +1 -1
  119. package/dist/core/compaction/policy.d.ts +17 -0
  120. package/dist/core/compaction/policy.d.ts.map +1 -0
  121. package/dist/core/compaction/policy.js +22 -0
  122. package/dist/core/compaction/policy.js.map +1 -0
  123. package/dist/core/compaction/policy.test.d.ts +2 -0
  124. package/dist/core/compaction/policy.test.d.ts.map +1 -0
  125. package/dist/core/compaction/policy.test.js +35 -0
  126. package/dist/core/compaction/policy.test.js.map +1 -0
  127. package/dist/core/compaction/query-aware-selector.d.ts +33 -0
  128. package/dist/core/compaction/query-aware-selector.d.ts.map +1 -0
  129. package/dist/core/compaction/query-aware-selector.js +202 -0
  130. package/dist/core/compaction/query-aware-selector.js.map +1 -0
  131. package/dist/core/compaction/query-aware-selector.test.d.ts +2 -0
  132. package/dist/core/compaction/query-aware-selector.test.d.ts.map +1 -0
  133. package/dist/core/compaction/query-aware-selector.test.js +96 -0
  134. package/dist/core/compaction/query-aware-selector.test.js.map +1 -0
  135. package/dist/core/compaction/token-estimator.test.js +1 -1
  136. package/dist/core/compaction/token-estimator.test.js.map +1 -1
  137. package/dist/core/compaction/tool-result-pruner.d.ts +24 -11
  138. package/dist/core/compaction/tool-result-pruner.d.ts.map +1 -1
  139. package/dist/core/compaction/tool-result-pruner.js +98 -26
  140. package/dist/core/compaction/tool-result-pruner.js.map +1 -1
  141. package/dist/core/compaction/tool-result-pruner.test.js +178 -6
  142. package/dist/core/compaction/tool-result-pruner.test.js.map +1 -1
  143. package/dist/core/encode-cwd.d.ts +17 -0
  144. package/dist/core/encode-cwd.d.ts.map +1 -1
  145. package/dist/core/encode-cwd.js +20 -7
  146. package/dist/core/encode-cwd.js.map +1 -1
  147. package/dist/core/encode-cwd.test.js +20 -1
  148. package/dist/core/encode-cwd.test.js.map +1 -1
  149. package/dist/core/event-bus.d.ts +23 -0
  150. package/dist/core/event-bus.d.ts.map +1 -1
  151. package/dist/core/event-bus.js +10 -0
  152. package/dist/core/event-bus.js.map +1 -1
  153. package/dist/core/extensions/loader.d.ts.map +1 -1
  154. package/dist/core/extensions/loader.js +28 -8
  155. package/dist/core/extensions/loader.js.map +1 -1
  156. package/dist/core/extensions/plugin-bundles.d.ts +23 -0
  157. package/dist/core/extensions/plugin-bundles.d.ts.map +1 -0
  158. package/dist/core/extensions/plugin-bundles.js +228 -0
  159. package/dist/core/extensions/plugin-bundles.js.map +1 -0
  160. package/dist/core/extensions/plugin-bundles.test.d.ts +2 -0
  161. package/dist/core/extensions/plugin-bundles.test.d.ts.map +1 -0
  162. package/dist/core/extensions/plugin-bundles.test.js +110 -0
  163. package/dist/core/extensions/plugin-bundles.test.js.map +1 -0
  164. package/dist/core/foreign-session-import.d.ts +120 -0
  165. package/dist/core/foreign-session-import.d.ts.map +1 -0
  166. package/dist/core/foreign-session-import.js +598 -0
  167. package/dist/core/foreign-session-import.js.map +1 -0
  168. package/dist/core/foreign-session-import.test.d.ts +2 -0
  169. package/dist/core/foreign-session-import.test.d.ts.map +1 -0
  170. package/dist/core/foreign-session-import.test.js +220 -0
  171. package/dist/core/foreign-session-import.test.js.map +1 -0
  172. package/dist/core/foreign-transcript-blocks.d.ts +51 -0
  173. package/dist/core/foreign-transcript-blocks.d.ts.map +1 -0
  174. package/dist/core/foreign-transcript-blocks.js +151 -0
  175. package/dist/core/foreign-transcript-blocks.js.map +1 -0
  176. package/dist/core/ideal-review.d.ts +20 -1
  177. package/dist/core/ideal-review.d.ts.map +1 -1
  178. package/dist/core/ideal-review.js +43 -3
  179. package/dist/core/ideal-review.js.map +1 -1
  180. package/dist/core/ideal-review.test.js +106 -5
  181. package/dist/core/ideal-review.test.js.map +1 -1
  182. package/dist/core/local-endpoint-store.d.ts +50 -0
  183. package/dist/core/local-endpoint-store.d.ts.map +1 -0
  184. package/dist/core/local-endpoint-store.js +201 -0
  185. package/dist/core/local-endpoint-store.js.map +1 -0
  186. package/dist/core/local-endpoint-store.test.d.ts +2 -0
  187. package/dist/core/local-endpoint-store.test.d.ts.map +1 -0
  188. package/dist/core/local-endpoint-store.test.js +131 -0
  189. package/dist/core/local-endpoint-store.test.js.map +1 -0
  190. package/dist/core/loop-breaker.d.ts.map +1 -1
  191. package/dist/core/loop-breaker.js +1 -0
  192. package/dist/core/loop-breaker.js.map +1 -1
  193. package/dist/core/lsp/client.d.ts +65 -0
  194. package/dist/core/lsp/client.d.ts.map +1 -1
  195. package/dist/core/lsp/client.js +197 -14
  196. package/dist/core/lsp/client.js.map +1 -1
  197. package/dist/core/lsp/jsonrpc.d.ts +38 -1
  198. package/dist/core/lsp/jsonrpc.d.ts.map +1 -1
  199. package/dist/core/lsp/jsonrpc.js +13 -1
  200. package/dist/core/lsp/jsonrpc.js.map +1 -1
  201. package/dist/core/lsp/manager.d.ts +47 -9
  202. package/dist/core/lsp/manager.d.ts.map +1 -1
  203. package/dist/core/lsp/manager.js +107 -59
  204. package/dist/core/lsp/manager.js.map +1 -1
  205. package/dist/core/lsp/manager.test.js +50 -1
  206. package/dist/core/lsp/manager.test.js.map +1 -1
  207. package/dist/core/lsp/pool.d.ts +113 -0
  208. package/dist/core/lsp/pool.d.ts.map +1 -0
  209. package/dist/core/lsp/pool.js +255 -0
  210. package/dist/core/lsp/pool.js.map +1 -0
  211. package/dist/core/lsp/pool.test.d.ts +2 -0
  212. package/dist/core/lsp/pool.test.d.ts.map +1 -0
  213. package/dist/core/lsp/pool.test.js +286 -0
  214. package/dist/core/lsp/pool.test.js.map +1 -0
  215. package/dist/core/lsp/servers.d.ts.map +1 -1
  216. package/dist/core/lsp/servers.js +43 -3
  217. package/dist/core/lsp/servers.js.map +1 -1
  218. package/dist/core/lsp/servers.test.d.ts +2 -0
  219. package/dist/core/lsp/servers.test.d.ts.map +1 -0
  220. package/dist/core/lsp/servers.test.js +67 -0
  221. package/dist/core/lsp/servers.test.js.map +1 -0
  222. package/dist/core/lsp/test-support.d.ts +18 -0
  223. package/dist/core/lsp/test-support.d.ts.map +1 -0
  224. package/dist/core/lsp/test-support.js +27 -0
  225. package/dist/core/lsp/test-support.js.map +1 -0
  226. package/dist/core/lsp/uri.test.d.ts +2 -0
  227. package/dist/core/lsp/uri.test.d.ts.map +1 -0
  228. package/dist/core/lsp/uri.test.js +56 -0
  229. package/dist/core/lsp/uri.test.js.map +1 -0
  230. package/dist/core/lsp/windows.test.d.ts +2 -0
  231. package/dist/core/lsp/windows.test.d.ts.map +1 -0
  232. package/dist/core/lsp/windows.test.js +239 -0
  233. package/dist/core/lsp/windows.test.js.map +1 -0
  234. package/dist/core/mcp/catalog-cache.d.ts +63 -0
  235. package/dist/core/mcp/catalog-cache.d.ts.map +1 -0
  236. package/dist/core/mcp/catalog-cache.js +163 -0
  237. package/dist/core/mcp/catalog-cache.js.map +1 -0
  238. package/dist/core/mcp/catalog-cache.test.d.ts +2 -0
  239. package/dist/core/mcp/catalog-cache.test.d.ts.map +1 -0
  240. package/dist/core/mcp/catalog-cache.test.js +99 -0
  241. package/dist/core/mcp/catalog-cache.test.js.map +1 -0
  242. package/dist/core/mcp/client-session-recovery.test.d.ts +2 -0
  243. package/dist/core/mcp/client-session-recovery.test.d.ts.map +1 -0
  244. package/dist/core/mcp/client-session-recovery.test.js +231 -0
  245. package/dist/core/mcp/client-session-recovery.test.js.map +1 -0
  246. package/dist/core/mcp/client.d.ts +158 -0
  247. package/dist/core/mcp/client.d.ts.map +1 -1
  248. package/dist/core/mcp/client.js +476 -35
  249. package/dist/core/mcp/client.js.map +1 -1
  250. package/dist/core/mcp/elicitation-bridge.d.ts +41 -0
  251. package/dist/core/mcp/elicitation-bridge.d.ts.map +1 -0
  252. package/dist/core/mcp/elicitation-bridge.js +52 -0
  253. package/dist/core/mcp/elicitation-bridge.js.map +1 -0
  254. package/dist/core/mcp/elicitation.test.d.ts +2 -0
  255. package/dist/core/mcp/elicitation.test.d.ts.map +1 -0
  256. package/dist/core/mcp/elicitation.test.js +158 -0
  257. package/dist/core/mcp/elicitation.test.js.map +1 -0
  258. package/dist/core/mcp/index.d.ts +5 -1
  259. package/dist/core/mcp/index.d.ts.map +1 -1
  260. package/dist/core/mcp/index.js +2 -0
  261. package/dist/core/mcp/index.js.map +1 -1
  262. package/dist/core/mcp/legacy-negotiation.test.d.ts +2 -0
  263. package/dist/core/mcp/legacy-negotiation.test.d.ts.map +1 -0
  264. package/dist/core/mcp/legacy-negotiation.test.js +80 -0
  265. package/dist/core/mcp/legacy-negotiation.test.js.map +1 -0
  266. package/dist/core/mcp/oauth-provider.d.ts +1 -2
  267. package/dist/core/mcp/oauth-provider.d.ts.map +1 -1
  268. package/dist/core/mcp/oauth-provider.js +6 -2
  269. package/dist/core/mcp/oauth-provider.js.map +1 -1
  270. package/dist/core/mcp/oauth-store.d.ts +1 -1
  271. package/dist/core/mcp/oauth-store.d.ts.map +1 -1
  272. package/dist/core/mcp/oauth-store.js.map +1 -1
  273. package/dist/core/mcp/resolve-stdio.d.ts +35 -0
  274. package/dist/core/mcp/resolve-stdio.d.ts.map +1 -1
  275. package/dist/core/mcp/resolve-stdio.js +80 -1
  276. package/dist/core/mcp/resolve-stdio.js.map +1 -1
  277. package/dist/core/mcp/resolve-stdio.test.js +99 -4
  278. package/dist/core/mcp/resolve-stdio.test.js.map +1 -1
  279. package/dist/core/mcp/session-elicitation-wiring.test.d.ts +2 -0
  280. package/dist/core/mcp/session-elicitation-wiring.test.d.ts.map +1 -0
  281. package/dist/core/mcp/session-elicitation-wiring.test.js +138 -0
  282. package/dist/core/mcp/session-elicitation-wiring.test.js.map +1 -0
  283. package/dist/core/mcp/shared-pool.d.ts +158 -0
  284. package/dist/core/mcp/shared-pool.d.ts.map +1 -0
  285. package/dist/core/mcp/shared-pool.js +235 -0
  286. package/dist/core/mcp/shared-pool.js.map +1 -0
  287. package/dist/core/mcp/shared-pool.test.d.ts +2 -0
  288. package/dist/core/mcp/shared-pool.test.d.ts.map +1 -0
  289. package/dist/core/mcp/shared-pool.test.js +425 -0
  290. package/dist/core/mcp/shared-pool.test.js.map +1 -0
  291. package/dist/core/mcp/types.d.ts +12 -0
  292. package/dist/core/mcp/types.d.ts.map +1 -1
  293. package/dist/core/mcp/when-connected.test.d.ts +2 -0
  294. package/dist/core/mcp/when-connected.test.d.ts.map +1 -0
  295. package/dist/core/mcp/when-connected.test.js +46 -0
  296. package/dist/core/mcp/when-connected.test.js.map +1 -0
  297. package/dist/core/network-guard.d.ts +47 -0
  298. package/dist/core/network-guard.d.ts.map +1 -0
  299. package/dist/core/network-guard.js +208 -0
  300. package/dist/core/network-guard.js.map +1 -0
  301. package/dist/core/network-guard.test.d.ts +2 -0
  302. package/dist/core/network-guard.test.d.ts.map +1 -0
  303. package/dist/core/network-guard.test.js +72 -0
  304. package/dist/core/network-guard.test.js.map +1 -0
  305. package/dist/core/nolan-context.d.ts.map +1 -1
  306. package/dist/core/nolan-context.js +8 -0
  307. package/dist/core/nolan-context.js.map +1 -1
  308. package/dist/core/nolan-context.test.js +40 -0
  309. package/dist/core/nolan-context.test.js.map +1 -1
  310. package/dist/core/nolan-prompt.js +3 -0
  311. package/dist/core/nolan-prompt.js.map +1 -1
  312. package/dist/core/nolan-prompt.test.js +5 -0
  313. package/dist/core/nolan-prompt.test.js.map +1 -1
  314. package/dist/core/persistent-shell.d.ts +4 -1
  315. package/dist/core/persistent-shell.d.ts.map +1 -1
  316. package/dist/core/persistent-shell.js +21 -4
  317. package/dist/core/persistent-shell.js.map +1 -1
  318. package/dist/core/process-gate.d.ts +45 -0
  319. package/dist/core/process-gate.d.ts.map +1 -0
  320. package/dist/core/process-gate.js +79 -0
  321. package/dist/core/process-gate.js.map +1 -0
  322. package/dist/core/process-gate.test.d.ts +2 -0
  323. package/dist/core/process-gate.test.d.ts.map +1 -0
  324. package/dist/core/process-gate.test.js +87 -0
  325. package/dist/core/process-gate.test.js.map +1 -0
  326. package/dist/core/process-manager-dev-server-repro.test.js +34 -12
  327. package/dist/core/process-manager-dev-server-repro.test.js.map +1 -1
  328. package/dist/core/process-manager-notifications.test.d.ts +2 -0
  329. package/dist/core/process-manager-notifications.test.d.ts.map +1 -0
  330. package/dist/core/process-manager-notifications.test.js +217 -0
  331. package/dist/core/process-manager-notifications.test.js.map +1 -0
  332. package/dist/core/process-manager.d.ts +51 -2
  333. package/dist/core/process-manager.d.ts.map +1 -1
  334. package/dist/core/process-manager.js +212 -15
  335. package/dist/core/process-manager.js.map +1 -1
  336. package/dist/core/project-discovery.d.ts +38 -6
  337. package/dist/core/project-discovery.d.ts.map +1 -1
  338. package/dist/core/project-discovery.js +327 -40
  339. package/dist/core/project-discovery.js.map +1 -1
  340. package/dist/core/project-discovery.test.js +226 -1
  341. package/dist/core/project-discovery.test.js.map +1 -1
  342. package/dist/core/prompt-commands.d.ts.map +1 -1
  343. package/dist/core/prompt-commands.js +89 -156
  344. package/dist/core/prompt-commands.js.map +1 -1
  345. package/dist/core/prompt-commands.test.js +4 -10
  346. package/dist/core/prompt-commands.test.js.map +1 -1
  347. package/dist/core/radio.test.js +4 -1
  348. package/dist/core/radio.test.js.map +1 -1
  349. package/dist/core/regrounding.d.ts.map +1 -1
  350. package/dist/core/regrounding.js +1 -0
  351. package/dist/core/regrounding.js.map +1 -1
  352. package/dist/core/run-claim.d.ts +37 -0
  353. package/dist/core/run-claim.d.ts.map +1 -0
  354. package/dist/core/run-claim.js +46 -0
  355. package/dist/core/run-claim.js.map +1 -0
  356. package/dist/core/run-claim.test.d.ts +2 -0
  357. package/dist/core/run-claim.test.d.ts.map +1 -0
  358. package/dist/core/run-claim.test.js +107 -0
  359. package/dist/core/run-claim.test.js.map +1 -0
  360. package/dist/core/run-journal.test.d.ts +2 -0
  361. package/dist/core/run-journal.test.d.ts.map +1 -0
  362. package/dist/core/run-journal.test.js +195 -0
  363. package/dist/core/run-journal.test.js.map +1 -0
  364. package/dist/core/run-lifecycle.d.ts +22 -3
  365. package/dist/core/run-lifecycle.d.ts.map +1 -1
  366. package/dist/core/run-lifecycle.js +12 -3
  367. package/dist/core/run-lifecycle.js.map +1 -1
  368. package/dist/core/runtime-mode.d.ts +2 -0
  369. package/dist/core/runtime-mode.d.ts.map +1 -1
  370. package/dist/core/runtime-mode.js +4 -0
  371. package/dist/core/runtime-mode.js.map +1 -1
  372. package/dist/core/sandbox-domains.d.ts +14 -0
  373. package/dist/core/sandbox-domains.d.ts.map +1 -0
  374. package/dist/core/sandbox-domains.js +76 -0
  375. package/dist/core/sandbox-domains.js.map +1 -0
  376. package/dist/core/sandbox-feedback.d.ts +22 -0
  377. package/dist/core/sandbox-feedback.d.ts.map +1 -0
  378. package/dist/core/sandbox-feedback.js +69 -0
  379. package/dist/core/sandbox-feedback.js.map +1 -0
  380. package/dist/core/sandbox-feedback.test.d.ts +2 -0
  381. package/dist/core/sandbox-feedback.test.d.ts.map +1 -0
  382. package/dist/core/sandbox-feedback.test.js +32 -0
  383. package/dist/core/sandbox-feedback.test.js.map +1 -0
  384. package/dist/core/sandbox.d.ts +91 -0
  385. package/dist/core/sandbox.d.ts.map +1 -0
  386. package/dist/core/sandbox.js +254 -0
  387. package/dist/core/sandbox.js.map +1 -0
  388. package/dist/core/sandbox.test.d.ts +2 -0
  389. package/dist/core/sandbox.test.d.ts.map +1 -0
  390. package/dist/core/sandbox.test.js +157 -0
  391. package/dist/core/sandbox.test.js.map +1 -0
  392. package/dist/core/session-compaction.d.ts +6 -0
  393. package/dist/core/session-compaction.d.ts.map +1 -1
  394. package/dist/core/session-compaction.js +11 -1
  395. package/dist/core/session-compaction.js.map +1 -1
  396. package/dist/core/session-compaction.test.js +18 -1
  397. package/dist/core/session-compaction.test.js.map +1 -1
  398. package/dist/core/session-export.d.ts +98 -0
  399. package/dist/core/session-export.d.ts.map +1 -0
  400. package/dist/core/session-export.js +364 -0
  401. package/dist/core/session-export.js.map +1 -0
  402. package/dist/core/session-export.test.d.ts +2 -0
  403. package/dist/core/session-export.test.d.ts.map +1 -0
  404. package/dist/core/session-export.test.js +353 -0
  405. package/dist/core/session-export.test.js.map +1 -0
  406. package/dist/core/session-history.d.ts +95 -6
  407. package/dist/core/session-history.d.ts.map +1 -1
  408. package/dist/core/session-history.js +261 -17
  409. package/dist/core/session-history.js.map +1 -1
  410. package/dist/core/session-history.test.js +173 -2
  411. package/dist/core/session-history.test.js.map +1 -1
  412. package/dist/core/session-manager.d.ts +223 -6
  413. package/dist/core/session-manager.d.ts.map +1 -1
  414. package/dist/core/session-manager.js +515 -26
  415. package/dist/core/session-manager.js.map +1 -1
  416. package/dist/core/session-manager.test.js +147 -3
  417. package/dist/core/session-manager.test.js.map +1 -1
  418. package/dist/core/session-notification-visibility.test.d.ts +2 -0
  419. package/dist/core/session-notification-visibility.test.d.ts.map +1 -0
  420. package/dist/core/session-notification-visibility.test.js +113 -0
  421. package/dist/core/session-notification-visibility.test.js.map +1 -0
  422. package/dist/core/session-preview.d.ts +5 -4
  423. package/dist/core/session-preview.d.ts.map +1 -1
  424. package/dist/core/session-preview.js +12 -5
  425. package/dist/core/session-preview.js.map +1 -1
  426. package/dist/core/session-restore-display.test.js +25 -0
  427. package/dist/core/session-restore-display.test.js.map +1 -1
  428. package/dist/core/session-storage.d.ts.map +1 -1
  429. package/dist/core/session-storage.js +64 -4
  430. package/dist/core/session-storage.js.map +1 -1
  431. package/dist/core/session-storage.test.js +10 -2
  432. package/dist/core/session-storage.test.js.map +1 -1
  433. package/dist/core/settings-manager.d.ts +13 -2
  434. package/dist/core/settings-manager.d.ts.map +1 -1
  435. package/dist/core/settings-manager.js +36 -0
  436. package/dist/core/settings-manager.js.map +1 -1
  437. package/dist/core/setup-history.d.ts +0 -6
  438. package/dist/core/setup-history.d.ts.map +1 -1
  439. package/dist/core/setup-history.js +2 -18
  440. package/dist/core/setup-history.js.map +1 -1
  441. package/dist/core/setup-history.test.js +11 -26
  442. package/dist/core/setup-history.test.js.map +1 -1
  443. package/dist/core/skills-routing.test.js +3 -1
  444. package/dist/core/skills-routing.test.js.map +1 -1
  445. package/dist/core/slash-commands.d.ts +18 -0
  446. package/dist/core/slash-commands.d.ts.map +1 -1
  447. package/dist/core/slash-commands.js +42 -10
  448. package/dist/core/slash-commands.js.map +1 -1
  449. package/dist/core/slash-commands.test.d.ts +2 -0
  450. package/dist/core/slash-commands.test.d.ts.map +1 -0
  451. package/dist/core/slash-commands.test.js +59 -0
  452. package/dist/core/slash-commands.test.js.map +1 -0
  453. package/dist/core/speed-benchmark.test.js +9 -3
  454. package/dist/core/speed-benchmark.test.js.map +1 -1
  455. package/dist/core/steering.d.ts +12 -0
  456. package/dist/core/steering.d.ts.map +1 -1
  457. package/dist/core/steering.js +16 -0
  458. package/dist/core/steering.js.map +1 -1
  459. package/dist/core/subagent-manager.d.ts +14 -1
  460. package/dist/core/subagent-manager.d.ts.map +1 -1
  461. package/dist/core/subagent-manager.js +48 -1
  462. package/dist/core/subagent-manager.js.map +1 -1
  463. package/dist/core/subagent-manager.test.js +43 -7
  464. package/dist/core/subagent-manager.test.js.map +1 -1
  465. package/dist/core/subagent-store.test.js +14 -2
  466. package/dist/core/subagent-store.test.js.map +1 -1
  467. package/dist/core/verification-evidence.d.ts +17 -0
  468. package/dist/core/verification-evidence.d.ts.map +1 -0
  469. package/dist/core/verification-evidence.js +283 -0
  470. package/dist/core/verification-evidence.js.map +1 -0
  471. package/dist/core/verification-evidence.test.d.ts +2 -0
  472. package/dist/core/verification-evidence.test.d.ts.map +1 -0
  473. package/dist/core/verification-evidence.test.js +103 -0
  474. package/dist/core/verification-evidence.test.js.map +1 -0
  475. package/dist/core/workspace-guard.d.ts +2 -0
  476. package/dist/core/workspace-guard.d.ts.map +1 -1
  477. package/dist/core/workspace-guard.js +4 -1
  478. package/dist/core/workspace-guard.js.map +1 -1
  479. package/dist/core/workspace-guard.test.js +21 -0
  480. package/dist/core/workspace-guard.test.js.map +1 -1
  481. package/dist/interactive.d.ts.map +1 -1
  482. package/dist/interactive.js +17 -3
  483. package/dist/interactive.js.map +1 -1
  484. package/dist/modes/acp-mode.d.ts +122 -0
  485. package/dist/modes/acp-mode.d.ts.map +1 -0
  486. package/dist/modes/acp-mode.js +1366 -0
  487. package/dist/modes/acp-mode.js.map +1 -0
  488. package/dist/modes/acp-mode.test.d.ts +2 -0
  489. package/dist/modes/acp-mode.test.d.ts.map +1 -0
  490. package/dist/modes/acp-mode.test.js +1065 -0
  491. package/dist/modes/acp-mode.test.js.map +1 -0
  492. package/dist/modes/index.d.ts +1 -0
  493. package/dist/modes/index.d.ts.map +1 -1
  494. package/dist/modes/index.js +1 -0
  495. package/dist/modes/index.js.map +1 -1
  496. package/dist/modes/json-mode.d.ts +35 -0
  497. package/dist/modes/json-mode.d.ts.map +1 -1
  498. package/dist/modes/json-mode.js +38 -0
  499. package/dist/modes/json-mode.js.map +1 -1
  500. package/dist/modes/json-mode.test.d.ts +2 -0
  501. package/dist/modes/json-mode.test.d.ts.map +1 -0
  502. package/dist/modes/json-mode.test.js +84 -0
  503. package/dist/modes/json-mode.test.js.map +1 -0
  504. package/dist/modes/subagent-worker-mode.d.ts +5 -0
  505. package/dist/modes/subagent-worker-mode.d.ts.map +1 -1
  506. package/dist/modes/subagent-worker-mode.js +91 -11
  507. package/dist/modes/subagent-worker-mode.js.map +1 -1
  508. package/dist/modes/subagent-worker-mode.test.d.ts +2 -0
  509. package/dist/modes/subagent-worker-mode.test.d.ts.map +1 -0
  510. package/dist/modes/subagent-worker-mode.test.js +52 -0
  511. package/dist/modes/subagent-worker-mode.test.js.map +1 -0
  512. package/dist/session.d.ts +29 -0
  513. package/dist/session.d.ts.map +1 -1
  514. package/dist/session.js +41 -0
  515. package/dist/session.js.map +1 -1
  516. package/dist/system-prompt.d.ts +11 -1
  517. package/dist/system-prompt.d.ts.map +1 -1
  518. package/dist/system-prompt.js +39 -18
  519. package/dist/system-prompt.js.map +1 -1
  520. package/dist/system-prompt.test.js +33 -17
  521. package/dist/system-prompt.test.js.map +1 -1
  522. package/dist/test-support/fake-home.d.ts +20 -0
  523. package/dist/test-support/fake-home.d.ts.map +1 -0
  524. package/dist/test-support/fake-home.js +37 -0
  525. package/dist/test-support/fake-home.js.map +1 -0
  526. package/dist/tools/bash.d.ts +3 -1
  527. package/dist/tools/bash.d.ts.map +1 -1
  528. package/dist/tools/bash.js +70 -14
  529. package/dist/tools/bash.js.map +1 -1
  530. package/dist/tools/bash.test.js +122 -7
  531. package/dist/tools/bash.test.js.map +1 -1
  532. package/dist/tools/edit-robustness.test.js +3 -1
  533. package/dist/tools/edit-robustness.test.js.map +1 -1
  534. package/dist/tools/find.d.ts.map +1 -1
  535. package/dist/tools/find.js +4 -1
  536. package/dist/tools/find.js.map +1 -1
  537. package/dist/tools/goals.d.ts +2 -2
  538. package/dist/tools/grep.d.ts +3 -1
  539. package/dist/tools/grep.d.ts.map +1 -1
  540. package/dist/tools/grep.js +137 -12
  541. package/dist/tools/grep.js.map +1 -1
  542. package/dist/tools/grep.test.js +53 -0
  543. package/dist/tools/grep.test.js.map +1 -1
  544. package/dist/tools/index.d.ts +19 -2
  545. package/dist/tools/index.d.ts.map +1 -1
  546. package/dist/tools/index.js +22 -19
  547. package/dist/tools/index.js.map +1 -1
  548. package/dist/tools/index.test.d.ts +2 -0
  549. package/dist/tools/index.test.d.ts.map +1 -0
  550. package/dist/tools/index.test.js +55 -0
  551. package/dist/tools/index.test.js.map +1 -0
  552. package/dist/tools/overflow.test.js +4 -7
  553. package/dist/tools/overflow.test.js.map +1 -1
  554. package/dist/tools/path-utils.d.ts +15 -0
  555. package/dist/tools/path-utils.d.ts.map +1 -1
  556. package/dist/tools/path-utils.js +17 -0
  557. package/dist/tools/path-utils.js.map +1 -1
  558. package/dist/tools/path-utils.test.js +7 -2
  559. package/dist/tools/path-utils.test.js.map +1 -1
  560. package/dist/tools/prompt-hints.js +1 -1
  561. package/dist/tools/prompt-hints.js.map +1 -1
  562. package/dist/tools/read-only-bash.d.ts +3 -0
  563. package/dist/tools/read-only-bash.d.ts.map +1 -1
  564. package/dist/tools/read-only-bash.js +7 -9
  565. package/dist/tools/read-only-bash.js.map +1 -1
  566. package/dist/tools/search-code.d.ts.map +1 -1
  567. package/dist/tools/search-code.js +6 -4
  568. package/dist/tools/search-code.js.map +1 -1
  569. package/dist/tools/subagent-control.d.ts.map +1 -1
  570. package/dist/tools/subagent-control.js +6 -2
  571. package/dist/tools/subagent-control.js.map +1 -1
  572. package/dist/tools/subagent-shared.d.ts +6 -0
  573. package/dist/tools/subagent-shared.d.ts.map +1 -1
  574. package/dist/tools/subagent-shared.js +6 -0
  575. package/dist/tools/subagent-shared.js.map +1 -1
  576. package/dist/tools/subagent.d.ts +1 -1
  577. package/dist/tools/subagent.d.ts.map +1 -1
  578. package/dist/tools/subagent.js +51 -8
  579. package/dist/tools/subagent.js.map +1 -1
  580. package/dist/tools/subagent.test.js +65 -3
  581. package/dist/tools/subagent.test.js.map +1 -1
  582. package/dist/tools/task-output.d.ts.map +1 -1
  583. package/dist/tools/task-output.js +3 -1
  584. package/dist/tools/task-output.js.map +1 -1
  585. package/dist/tools/tool-search.d.ts +12 -1
  586. package/dist/tools/tool-search.d.ts.map +1 -1
  587. package/dist/tools/tool-search.js +22 -3
  588. package/dist/tools/tool-search.js.map +1 -1
  589. package/dist/tools/tool-search.test.d.ts +2 -0
  590. package/dist/tools/tool-search.test.d.ts.map +1 -0
  591. package/dist/tools/tool-search.test.js +69 -0
  592. package/dist/tools/tool-search.test.js.map +1 -0
  593. package/dist/tools/web-fetch.d.ts +3 -2
  594. package/dist/tools/web-fetch.d.ts.map +1 -1
  595. package/dist/tools/web-fetch.js +22 -8
  596. package/dist/tools/web-fetch.js.map +1 -1
  597. package/dist/tools/web-fetch.test.js +34 -0
  598. package/dist/tools/web-fetch.test.js.map +1 -1
  599. package/dist/tools/web-search.d.ts +2 -1
  600. package/dist/tools/web-search.d.ts.map +1 -1
  601. package/dist/tools/web-search.js +21 -5
  602. package/dist/tools/web-search.js.map +1 -1
  603. package/dist/types.d.ts +7 -0
  604. package/dist/types.d.ts.map +1 -1
  605. package/dist/ui/App.d.ts.map +1 -1
  606. package/dist/ui/App.js +32 -81
  607. package/dist/ui/App.js.map +1 -1
  608. package/dist/ui/app-items.d.ts +1 -12
  609. package/dist/ui/app-items.d.ts.map +1 -1
  610. package/dist/ui/app-items.js.map +1 -1
  611. package/dist/ui/components/Footer.d.ts +1 -1
  612. package/dist/ui/components/Footer.js +2 -2
  613. package/dist/ui/components/Footer.js.map +1 -1
  614. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  615. package/dist/ui/hooks/useAgentLoop.js +18 -4
  616. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  617. package/dist/ui/hooks/usePixelFixFlow.d.ts +1 -2
  618. package/dist/ui/hooks/usePixelFixFlow.d.ts.map +1 -1
  619. package/dist/ui/hooks/usePixelFixFlow.js +2 -5
  620. package/dist/ui/hooks/usePixelFixFlow.js.map +1 -1
  621. package/dist/ui/login.js +1 -1
  622. package/dist/ui/login.js.map +1 -1
  623. package/dist/ui/terminal-history-status-renderers.d.ts +1 -2
  624. package/dist/ui/terminal-history-status-renderers.d.ts.map +1 -1
  625. package/dist/ui/terminal-history-status-renderers.js +2 -15
  626. package/dist/ui/terminal-history-status-renderers.js.map +1 -1
  627. package/dist/ui/terminal-history.d.ts.map +1 -1
  628. package/dist/ui/terminal-history.js +2 -4
  629. package/dist/ui/terminal-history.js.map +1 -1
  630. package/dist/ui/thinking-level-cycle.test.js +8 -8
  631. package/dist/ui/thinking-level-cycle.test.js.map +1 -1
  632. package/dist/ui/transcript/MiscRows.d.ts +1 -4
  633. package/dist/ui/transcript/MiscRows.d.ts.map +1 -1
  634. package/dist/ui/transcript/MiscRows.js +2 -7
  635. package/dist/ui/transcript/MiscRows.js.map +1 -1
  636. package/dist/ui/transcript/TranscriptRenderer.d.ts.map +1 -1
  637. package/dist/ui/transcript/TranscriptRenderer.js +1 -3
  638. package/dist/ui/transcript/TranscriptRenderer.js.map +1 -1
  639. package/dist/ui/transcript/presentation.d.ts +1 -9
  640. package/dist/ui/transcript/presentation.d.ts.map +1 -1
  641. package/dist/ui/transcript/presentation.js +0 -9
  642. package/dist/ui/transcript/presentation.js.map +1 -1
  643. package/dist/ui/transcript/spacing.d.ts +2 -2
  644. package/dist/ui/transcript/spacing.d.ts.map +1 -1
  645. package/dist/ui/transcript/spacing.js +0 -1
  646. package/dist/ui/transcript/spacing.js.map +1 -1
  647. package/dist/ui/transcript/spacing.test.js +1 -3
  648. package/dist/ui/transcript/spacing.test.js.map +1 -1
  649. package/dist/ui/tui-history-parity.test.js +2 -9
  650. package/dist/ui/tui-history-parity.test.js.map +1 -1
  651. package/dist/utils/github.d.ts +20 -0
  652. package/dist/utils/github.d.ts.map +1 -0
  653. package/dist/utils/github.js +65 -0
  654. package/dist/utils/github.js.map +1 -0
  655. package/dist/utils/github.test.d.ts +2 -0
  656. package/dist/utils/github.test.d.ts.map +1 -0
  657. package/dist/utils/github.test.js +23 -0
  658. package/dist/utils/github.test.js.map +1 -0
  659. package/dist/utils/image.d.ts +26 -3
  660. package/dist/utils/image.d.ts.map +1 -1
  661. package/dist/utils/image.js +83 -14
  662. package/dist/utils/image.js.map +1 -1
  663. package/dist/utils/image.test.d.ts +2 -0
  664. package/dist/utils/image.test.d.ts.map +1 -0
  665. package/dist/utils/image.test.js +139 -0
  666. package/dist/utils/image.test.js.map +1 -0
  667. package/dist/utils/process.d.ts +26 -3
  668. package/dist/utils/process.d.ts.map +1 -1
  669. package/dist/utils/process.js +68 -10
  670. package/dist/utils/process.js.map +1 -1
  671. package/dist/utils/process.test.d.ts +2 -0
  672. package/dist/utils/process.test.d.ts.map +1 -0
  673. package/dist/utils/process.test.js +42 -0
  674. package/dist/utils/process.test.js.map +1 -0
  675. package/package.json +6 -5
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Default network allowlist for the OS command sandbox.
3
+ *
4
+ * The sandbox is allowlist-only (a bare `*` is rejected), so shipping it on by
5
+ * default is only viable if ordinary development still works untouched. These
6
+ * are the hosts mainstream toolchains actually contact for dependency
7
+ * resolution, source checkout and registry auth — nothing that reads user data.
8
+ *
9
+ * Deliberately excluded: arbitrary app/API hosts, telemetry endpoints and
10
+ * URL shorteners. A project that needs one adds it once in Settings, which is
11
+ * the moment the boundary earns its keep.
12
+ */
13
+ export const DEFAULT_ALLOWED_DOMAINS = [
14
+ // ── Source hosting (git clone/fetch/push over HTTPS) ──
15
+ "github.com",
16
+ "*.github.com",
17
+ "*.githubusercontent.com",
18
+ "gitlab.com",
19
+ "*.gitlab.com",
20
+ "bitbucket.org",
21
+ "*.bitbucket.org",
22
+ "codeberg.org",
23
+ // ── JavaScript ──
24
+ "registry.npmjs.org",
25
+ "*.npmjs.org",
26
+ "registry.yarnpkg.com",
27
+ "*.yarnpkg.com",
28
+ "jsr.io",
29
+ "deno.land",
30
+ "*.deno.land",
31
+ "unpkg.com",
32
+ "cdn.jsdelivr.net",
33
+ "*.jsdelivr.net",
34
+ "cdnjs.cloudflare.com",
35
+ // ── Python ──
36
+ "pypi.org",
37
+ "*.pypi.org",
38
+ "files.pythonhosted.org",
39
+ "*.pythonhosted.org",
40
+ // ── Go (module proxy + checksum database) ──
41
+ "proxy.golang.org",
42
+ "sum.golang.org",
43
+ "*.golang.org",
44
+ "storage.googleapis.com",
45
+ // ── Rust ──
46
+ "crates.io",
47
+ "*.crates.io",
48
+ "static.rust-lang.org",
49
+ "*.rust-lang.org",
50
+ // ── Ruby ──
51
+ "rubygems.org",
52
+ "*.rubygems.org",
53
+ // ── JVM ──
54
+ "repo1.maven.org",
55
+ "*.maven.org",
56
+ "repo.maven.apache.org",
57
+ "plugins.gradle.org",
58
+ "*.gradle.org",
59
+ // ── PHP ──
60
+ "packagist.org",
61
+ "*.packagist.org",
62
+ // ── .NET ──
63
+ "api.nuget.org",
64
+ "*.nuget.org",
65
+ // ── Containers ──
66
+ "docker.io",
67
+ "*.docker.io",
68
+ "*.docker.com",
69
+ "ghcr.io",
70
+ "quay.io",
71
+ "registry.k8s.io",
72
+ // ── macOS/Linux toolchain installers ──
73
+ "formulae.brew.sh",
74
+ "*.brew.sh",
75
+ ];
76
+ //# sourceMappingURL=sandbox-domains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox-domains.js","sourceRoot":"","sources":["../../src/core/sandbox-domains.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,yDAAyD;IACzD,YAAY;IACZ,cAAc;IACd,yBAAyB;IACzB,YAAY;IACZ,cAAc;IACd,eAAe;IACf,iBAAiB;IACjB,cAAc;IAEd,mBAAmB;IACnB,oBAAoB;IACpB,aAAa;IACb,sBAAsB;IACtB,eAAe;IACf,QAAQ;IACR,WAAW;IACX,aAAa;IACb,WAAW;IACX,kBAAkB;IAClB,gBAAgB;IAChB,sBAAsB;IAEtB,eAAe;IACf,UAAU;IACV,YAAY;IACZ,wBAAwB;IACxB,oBAAoB;IAEpB,8CAA8C;IAC9C,kBAAkB;IAClB,gBAAgB;IAChB,cAAc;IACd,wBAAwB;IAExB,aAAa;IACb,WAAW;IACX,aAAa;IACb,sBAAsB;IACtB,iBAAiB;IAEjB,aAAa;IACb,cAAc;IACd,gBAAgB;IAEhB,YAAY;IACZ,iBAAiB;IACjB,aAAa;IACb,uBAAuB;IACvB,oBAAoB;IACpB,cAAc;IAEd,YAAY;IACZ,eAAe;IACf,iBAAiB;IAEjB,aAAa;IACb,eAAe;IACf,aAAa;IAEb,mBAAmB;IACnB,WAAW;IACX,aAAa;IACb,cAAc;IACd,SAAS;IACT,SAAS;IACT,iBAAiB;IAEjB,yCAAyC;IACzC,kBAAkB;IAClB,WAAW;CACZ,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Turn raw OS-sandbox denials into guidance the model can act on.
3
+ *
4
+ * A blocked command otherwise surfaces as inscrutable tool noise ("CONNECT
5
+ * tunnel failed, response 403", "Operation not permitted"), which the model
6
+ * tends to retry verbatim. Naming the boundary and the one-step fix is what
7
+ * turns a dead end into a recoverable turn.
8
+ */
9
+ export interface SandboxDenialNote {
10
+ kind: "network" | "filesystem";
11
+ note: string;
12
+ }
13
+ /**
14
+ * Inspect finished command output for a sandbox denial.
15
+ *
16
+ * @param output Combined stdout/stderr as returned to the model.
17
+ * @param sandboxed Whether this command actually ran isolated.
18
+ */
19
+ export declare function describeSandboxDenial(output: string, sandboxed: boolean): SandboxDenialNote | null;
20
+ /** Append the denial note to command output when one applies. */
21
+ export declare function annotateSandboxDenial(output: string, sandboxed: boolean): string;
22
+ //# sourceMappingURL=sandbox-feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox-feedback.d.ts","sourceRoot":"","sources":["../../src/core/sandbox-feedback.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA2BH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,SAAS,GAAG,YAAY,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,OAAO,GACjB,iBAAiB,GAAG,IAAI,CA6B1B;AAED,iEAAiE;AACjE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAGhF"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Turn raw OS-sandbox denials into guidance the model can act on.
3
+ *
4
+ * A blocked command otherwise surfaces as inscrutable tool noise ("CONNECT
5
+ * tunnel failed, response 403", "Operation not permitted"), which the model
6
+ * tends to retry verbatim. Naming the boundary and the one-step fix is what
7
+ * turns a dead end into a recoverable turn.
8
+ */
9
+ /** SRT's proxy rejection, plus how common clients report it. */
10
+ const NETWORK_DENIAL = [
11
+ "blocked-by-allowlist",
12
+ "Connection blocked by network allowlist",
13
+ "CONNECT tunnel failed, response 403",
14
+ ];
15
+ const FILESYSTEM_DENIAL = ["Operation not permitted", "operation not permitted", "EPERM"];
16
+ /** Hosts the command tried to reach, best-effort, for a precise suggestion. */
17
+ function extractHosts(output) {
18
+ const hosts = new Set();
19
+ const patterns = [
20
+ /(?:CONNECT|to)\s+([a-z0-9.-]+\.[a-z]{2,})(?::\d+)?/gi,
21
+ /https?:\/\/([a-z0-9.-]+\.[a-z]{2,})/gi,
22
+ ];
23
+ for (const pattern of patterns) {
24
+ for (const match of output.matchAll(pattern)) {
25
+ const host = match[1]?.toLowerCase();
26
+ if (host && !host.endsWith(".local"))
27
+ hosts.add(host);
28
+ }
29
+ }
30
+ return [...hosts].slice(0, 3);
31
+ }
32
+ /**
33
+ * Inspect finished command output for a sandbox denial.
34
+ *
35
+ * @param output Combined stdout/stderr as returned to the model.
36
+ * @param sandboxed Whether this command actually ran isolated.
37
+ */
38
+ export function describeSandboxDenial(output, sandboxed) {
39
+ if (!sandboxed || !output)
40
+ return null;
41
+ if (NETWORK_DENIAL.some((marker) => output.includes(marker))) {
42
+ const hosts = extractHosts(output);
43
+ const target = hosts.length > 0 ? hosts.join(", ") : "that host";
44
+ return {
45
+ kind: "network",
46
+ note: `\n\n[Sandbox] Network blocked: ${target} is not an approved destination. ` +
47
+ `Common package registries and git hosts are approved already, so double-check the ` +
48
+ `address first. If the user genuinely needs it, ask them to add it under ` +
49
+ `Settings → Command safety → Approved sites (or turn command safety off).`,
50
+ };
51
+ }
52
+ if (FILESYSTEM_DENIAL.some((marker) => output.includes(marker))) {
53
+ return {
54
+ kind: "filesystem",
55
+ note: `\n\n[Sandbox] Write blocked: that path is either outside this project or a ` +
56
+ `protected file (.env). Prefer a path inside the project, or use the write ` +
57
+ `tool if the user asked for that exact file. If they genuinely need shell ` +
58
+ `writes elsewhere, ask them to enable Settings → Command safety → Allow ` +
59
+ `changes outside the project.`,
60
+ };
61
+ }
62
+ return null;
63
+ }
64
+ /** Append the denial note to command output when one applies. */
65
+ export function annotateSandboxDenial(output, sandboxed) {
66
+ const denial = describeSandboxDenial(output, sandboxed);
67
+ return denial ? `${output}${denial.note}` : output;
68
+ }
69
+ //# sourceMappingURL=sandbox-feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox-feedback.js","sourceRoot":"","sources":["../../src/core/sandbox-feedback.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,gEAAgE;AAChE,MAAM,cAAc,GAAG;IACrB,sBAAsB;IACtB,yCAAyC;IACzC,qCAAqC;CACtC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,yBAAyB,EAAE,yBAAyB,EAAE,OAAO,CAAC,CAAC;AAE1F,+EAA+E;AAC/E,SAAS,YAAY,CAAC,MAAc;IAClC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,QAAQ,GAAG;QACf,sDAAsD;QACtD,uCAAuC;KACxC,CAAC;IACF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;YACrC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChC,CAAC;AAOD;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAc,EACd,SAAkB;IAElB,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QACjE,OAAO;YACL,IAAI,EAAE,SAAS;YACf,IAAI,EACF,kCAAkC,MAAM,mCAAmC;gBAC3E,oFAAoF;gBACpF,0EAA0E;gBAC1E,0EAA0E;SAC7E,CAAC;IACJ,CAAC;IAED,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,IAAI,EACF,6EAA6E;gBAC7E,4EAA4E;gBAC5E,2EAA2E;gBAC3E,yEAAyE;gBACzE,8BAA8B;SACjC,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,qBAAqB,CAAC,MAAc,EAAE,SAAkB;IACtE,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACrD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sandbox-feedback.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox-feedback.test.d.ts","sourceRoot":"","sources":["../../src/core/sandbox-feedback.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { annotateSandboxDenial, describeSandboxDenial } from "./sandbox-feedback.js";
3
+ describe("describeSandboxDenial", () => {
4
+ it("names the blocked host and the one place a user can approve it", () => {
5
+ const output = "Exit code: 0\ncurl: (56) CONNECT tunnel failed, response 403\nCONNECT api.example.com:443";
6
+ const denial = describeSandboxDenial(output, true);
7
+ expect(denial?.kind).toBe("network");
8
+ expect(denial?.note).toContain("api.example.com");
9
+ expect(denial?.note).toContain("Approved sites");
10
+ // The model must not be told to silently give up or disable protection first.
11
+ expect(denial?.note).toContain("ask them");
12
+ });
13
+ it("points a blocked write back inside the project", () => {
14
+ const output = "touch: /Users/x/secret: Operation not permitted";
15
+ const denial = describeSandboxDenial(output, true);
16
+ expect(denial?.kind).toBe("filesystem");
17
+ expect(denial?.note).toContain("outside this project");
18
+ });
19
+ it("stays silent for ordinary failures and for unsandboxed commands", () => {
20
+ expect(describeSandboxDenial("Exit code: 1\nnpm ERR! missing script: buil", true)).toBeNull();
21
+ // Same text, but the command never ran isolated — the sandbox cannot be the cause.
22
+ expect(describeSandboxDenial("Operation not permitted", false)).toBeNull();
23
+ });
24
+ it("annotates output without discarding the original text", () => {
25
+ const output = "Exit code: 0\nConnection blocked by network allowlist";
26
+ const annotated = annotateSandboxDenial(output, true);
27
+ expect(annotated.startsWith(output)).toBe(true);
28
+ expect(annotated).toContain("[Sandbox]");
29
+ expect(annotateSandboxDenial(output, false)).toBe(output);
30
+ });
31
+ });
32
+ //# sourceMappingURL=sandbox-feedback.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox-feedback.test.js","sourceRoot":"","sources":["../../src/core/sandbox-feedback.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAErF,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,MAAM,GACV,2FAA2F,CAAC;QAE9F,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAEnD,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACjD,8EAA8E;QAC9E,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,iDAAiD,CAAC;QAEjE,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAEnD,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC,qBAAqB,CAAC,6CAA6C,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC9F,mFAAmF;QACnF,MAAM,CAAC,qBAAqB,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,MAAM,GAAG,uDAAuD,CAAC;QAEvE,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAEtD,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,91 @@
1
+ import type { ShellResolution } from "./shell.js";
2
+ export interface SandboxPolicy {
3
+ /**
4
+ * `workspace` always isolates and fails closed. `auto` isolates wherever the
5
+ * OS supports it and degrades with a warning where the prerequisites are
6
+ * absent, because SRT needs bubblewrap/socat on Linux and an elevated
7
+ * `windows-install` on Windows — enforcing there would break every command.
8
+ */
9
+ mode: "auto" | "workspace" | "off";
10
+ /**
11
+ * Extra hosts reachable while sandboxed, on top of
12
+ * {@link DEFAULT_ALLOWED_DOMAINS} unless {@link strictDomains} is set.
13
+ */
14
+ allowedDomains: string[];
15
+ /**
16
+ * Use only {@link allowedDomains}, dropping the built-in developer defaults.
17
+ * Set when the user has explicitly taken over network policy.
18
+ */
19
+ strictDomains?: boolean;
20
+ /** Extra workspace roots (multi-root sessions), mirroring the write guard. */
21
+ additionalRoots?: string[];
22
+ /** The user consented to writes outside the workspace; do not contradict them. */
23
+ allowOutsideWorkspaceWrites?: boolean;
24
+ }
25
+ export interface SandboxLaunch extends ShellResolution {
26
+ sandboxed: boolean;
27
+ }
28
+ /**
29
+ * Environment applied only to sandboxed commands.
30
+ *
31
+ * The sandbox permanently protects `.git/hooks`, and git's only reason to write
32
+ * there is copying inert `*.sample` templates during `init`/`clone` — which
33
+ * fails the whole command. Pointing git at an empty template directory removes
34
+ * that write, so cloning works with hook protection fully intact.
35
+ */
36
+ export declare const SANDBOX_ENV_PATCH: Readonly<Record<string, string>>;
37
+ interface SandboxSettings {
38
+ network: {
39
+ allowedDomains: string[];
40
+ deniedDomains: string[];
41
+ strictAllowlist: boolean;
42
+ allowUnixSockets: string[];
43
+ allowLocalBinding: boolean;
44
+ };
45
+ /**
46
+ * macOS only: let sandboxed processes reach `com.apple.trustd.agent`.
47
+ *
48
+ * Without it, every client that verifies certificates through Security
49
+ * framework fails — pip (truststore) and Go-based CLIs like gh, terraform
50
+ * and kubectl. We do not terminate TLS, so certificates are still validated
51
+ * against the real upstream and the domain allowlist still applies; this only
52
+ * restores certificate checking itself.
53
+ */
54
+ enableWeakerNetworkIsolation?: boolean;
55
+ filesystem: {
56
+ denyRead: string[];
57
+ allowWrite: string[];
58
+ denyWrite: string[];
59
+ /** Git cannot initialise or clone a repository without writing its config. */
60
+ allowGitConfig: boolean;
61
+ };
62
+ }
63
+ /** Pure policy builder, exported so the security boundary is regression-tested. */
64
+ export declare function buildSandboxSettings(cwd: string, policy: SandboxPolicy, platform?: NodeJS.Platform): SandboxSettings;
65
+ export declare function resetSandboxSupportProbeForTests(): void;
66
+ /**
67
+ * Known limitations when `sandboxMode` is enabled (upstream, not fixable here):
68
+ *
69
+ * - **Linux pipes/redirections**: `echo hi | grep hi` fails with "Permission
70
+ * denied" on /proc/self/fd/3 because bash's pipe setup clobbers the fd the
71
+ * seccomp filter arrives on (sandbox-runtime#261).
72
+ * - **git over SSH**: `git@host:` remotes fail the SOCKS handshake on macOS —
73
+ * the injected ProxyCommand uses `nc`, which cannot authenticate. HTTPS
74
+ * remotes work. `~/.ssh` is also unreadable by design.
75
+ * - **`git config --global`**: `~/.gitconfig` is a mandatory upstream write
76
+ * protection with no opt-out. Repo-local `git config` works.
77
+ * - **Corporate TLS interception / private registries**: need the CA and
78
+ * registry host configured explicitly.
79
+ * - **Ubuntu 24.04+**: AppArmor blocks the sandbox entirely, so `auto`
80
+ * degrades to no isolation (sandbox-runtime#428, #429).
81
+ *
82
+ * These are why the default is `off`; revisit when fixed upstream.
83
+ */
84
+ /**
85
+ * Wrap an already-resolved shell with Anthropic's cross-platform OS sandbox.
86
+ * Initialization and dependency failures remain visible and fail closed: the
87
+ * original command is never spawned outside the sandbox as an implicit fallback.
88
+ */
89
+ export declare function prepareSandboxLaunch(shell: ShellResolution, cwd: string, policy: SandboxPolicy): Promise<SandboxLaunch>;
90
+ export {};
91
+ //# sourceMappingURL=sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/core/sandbox.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,KAAK,CAAC;IACnC;;;OAGG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8EAA8E;IAC9E,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,kFAAkF;IAClF,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,aAAc,SAAQ,eAAe;IACpD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE9D,CAAC;AAEF,UAAU,eAAe;IACvB,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,eAAe,EAAE,OAAO,CAAC;QACzB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,iBAAiB,EAAE,OAAO,CAAC;KAC5B,CAAC;IACF;;;;;;;;OAQG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,8EAA8E;QAC9E,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;CACH;AAgED,mFAAmF;AACnF,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,aAAa,EACrB,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,eAAe,CA+DjB;AAeD,wBAAgB,gCAAgC,IAAI,IAAI,CAGvD;AAwDD;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,aAAa,CAAC,CA4BxB"}
@@ -0,0 +1,254 @@
1
+ import { spawn } from "node:child_process";
2
+ import { createHash } from "node:crypto";
3
+ import fs from "node:fs/promises";
4
+ import { realpathSync } from "node:fs";
5
+ import os from "node:os";
6
+ import path from "node:path";
7
+ import { fileURLToPath } from "node:url";
8
+ import { log } from "./logger.js";
9
+ import { getAppPaths } from "../config.js";
10
+ import { DEFAULT_ALLOWED_DOMAINS } from "./sandbox-domains.js";
11
+ /**
12
+ * Environment applied only to sandboxed commands.
13
+ *
14
+ * The sandbox permanently protects `.git/hooks`, and git's only reason to write
15
+ * there is copying inert `*.sample` templates during `init`/`clone` — which
16
+ * fails the whole command. Pointing git at an empty template directory removes
17
+ * that write, so cloning works with hook protection fully intact.
18
+ */
19
+ export const SANDBOX_ENV_PATCH = {
20
+ GIT_TEMPLATE_DIR: "",
21
+ };
22
+ const SANDBOX_CONFIG_DIR = path.join(os.homedir(), ".ezcoder", "sandbox-configs");
23
+ const PROBE_TIMEOUT_MS = 20_000;
24
+ let warnedUnsupported = false;
25
+ function sensitiveReadPaths(home) {
26
+ return [
27
+ path.join(home, ".ssh"),
28
+ path.join(home, ".aws"),
29
+ path.join(home, ".gnupg"),
30
+ path.join(home, ".kube"),
31
+ path.join(home, ".config", "gcloud"),
32
+ path.join(home, ".azure"),
33
+ path.join(home, ".ezcoder", "auth.json"),
34
+ ];
35
+ }
36
+ /**
37
+ * Package-manager caches that live outside the workspace.
38
+ *
39
+ * `npm install`, `cargo build`, `go mod download` and friends all write to a
40
+ * shared cache in $HOME; without these the sandbox looks like it "breaks npm".
41
+ * Everything here is regenerable build state — no credentials, which stay
42
+ * unreadable via {@link sensitiveReadPaths}.
43
+ */
44
+ function toolCacheDirs(home) {
45
+ return [
46
+ path.join(home, ".npm"),
47
+ path.join(home, ".cache"),
48
+ path.join(home, "Library", "Caches"),
49
+ path.join(home, ".pnpm-store"),
50
+ path.join(home, ".yarn"),
51
+ path.join(home, ".bun"),
52
+ path.join(home, ".deno"),
53
+ path.join(home, ".cargo"),
54
+ path.join(home, ".rustup"),
55
+ path.join(home, "go", "pkg", "mod"),
56
+ path.join(home, ".m2"),
57
+ path.join(home, ".gradle"),
58
+ path.join(home, ".gem"),
59
+ path.join(home, ".bundle"),
60
+ path.join(home, ".nuget"),
61
+ path.join(home, ".composer"),
62
+ path.join(home, ".local", "share", "virtualenvs"),
63
+ ];
64
+ }
65
+ /**
66
+ * A path plus its symlink-resolved twin.
67
+ *
68
+ * macOS resolves /tmp to /private/tmp and /var/folders to /private/var/folders.
69
+ * The sandbox matches on the real path, so listing only the symlink silently
70
+ * denies every write to the system temp directory.
71
+ */
72
+ function withRealPath(target) {
73
+ try {
74
+ const real = realpathSync(target);
75
+ return real === target ? [target] : [target, real];
76
+ }
77
+ catch {
78
+ return [target];
79
+ }
80
+ }
81
+ /** Pure policy builder, exported so the security boundary is regression-tested. */
82
+ export function buildSandboxSettings(cwd, policy, platform = process.platform) {
83
+ const workspace = path.resolve(cwd);
84
+ const temp = path.resolve(os.tmpdir());
85
+ const home = os.homedir();
86
+ const allowedDomains = [
87
+ ...new Set([...(policy.strictDomains ? [] : DEFAULT_ALLOWED_DOMAINS), ...policy.allowedDomains]
88
+ .map((host) => host.trim())
89
+ .filter(Boolean)),
90
+ ].sort();
91
+ // Mirror resolveWriteGuard's roots. The sandbox must never be stricter than
92
+ // the write guard the user already controls, or bash silently loses
93
+ // multi-root workspaces and the documented outside-workspace opt-out.
94
+ const writeRoots = [
95
+ ...new Set([
96
+ workspace,
97
+ ...(policy.additionalRoots ?? []).map((root) => path.resolve(root)),
98
+ temp,
99
+ // The conventional scratch dir, distinct from os.tmpdir() on macOS.
100
+ ...(platform === "win32" ? [] : ["/tmp"]),
101
+ path.resolve(getAppPaths().agentDir),
102
+ ...toolCacheDirs(home),
103
+ ...(policy.allowOutsideWorkspaceWrites ? [home] : []),
104
+ ].flatMap(withRealPath)),
105
+ ];
106
+ return {
107
+ network: {
108
+ allowedDomains,
109
+ deniedDomains: [],
110
+ strictAllowlist: true,
111
+ allowUnixSockets: [],
112
+ // Dev servers, preview servers and the screenshot tool all bind a local
113
+ // port. Loopback never leaves the machine, so blocking it costs core
114
+ // workflows without buying containment.
115
+ allowLocalBinding: true,
116
+ },
117
+ ...(platform === "darwin" ? { enableWeakerNetworkIsolation: true } : {}),
118
+ filesystem: {
119
+ denyRead: sensitiveReadPaths(home),
120
+ // SRT adds its platform-required temporary paths; these are the only
121
+ // product-owned write roots supplied by EZ Coder.
122
+ allowWrite: platform === "win32" ? writeRoots : [...writeRoots, "/dev/null"],
123
+ // `.git/hooks` is a mandatory sandbox protection with no opt-out, which
124
+ // is worth keeping: it stops a command installing a hook that later runs
125
+ // unsandboxed. `git clone`/`git init` only write there to copy inert
126
+ // `.sample` files, which SANDBOX_ENV_PATCH turns off.
127
+ //
128
+ // `.git/config` must be writable or `git init`, `git remote add` and
129
+ // `git clone` all fail outright.
130
+ allowGitConfig: true,
131
+ // Resolve the workspace first: on macOS the sandbox matches real paths, so
132
+ // a deny rule built from the symlinked path (/var/... vs /private/var/...)
133
+ // silently never matches.
134
+ denyWrite: withRealPath(workspace).flatMap((root) => [
135
+ path.join(root, ".env"),
136
+ path.join(root, ".env.local"),
137
+ ]),
138
+ },
139
+ };
140
+ }
141
+ function resolveSandboxCli() {
142
+ const packageEntry = import.meta.resolve("@anthropic-ai/sandbox-runtime");
143
+ return path.join(path.dirname(fileURLToPath(packageEntry)), "cli.js");
144
+ }
145
+ /**
146
+ * Does this machine actually support OS sandboxing? SRT reports missing
147
+ * bubblewrap/socat or an unprovisioned Windows sandbox user only when it
148
+ * initializes, so probe once per process with a trivial command instead of
149
+ * reimplementing its per-platform dependency matrix.
150
+ */
151
+ let supportProbe = null;
152
+ export function resetSandboxSupportProbeForTests() {
153
+ supportProbe = null;
154
+ warnedUnsupported = false;
155
+ }
156
+ function probeSandboxSupport(settingsPath) {
157
+ supportProbe ??= new Promise((resolve) => {
158
+ let child;
159
+ try {
160
+ child = spawn(process.execPath, [resolveSandboxCli(), "--settings", settingsPath, "-c", "exit 0"], {
161
+ stdio: ["ignore", "ignore", "pipe"],
162
+ });
163
+ }
164
+ catch (error) {
165
+ resolve({ supported: false, reason: error.message });
166
+ return;
167
+ }
168
+ let stderr = "";
169
+ child.stderr?.on("data", (chunk) => {
170
+ stderr = `${stderr}${chunk.toString("utf8")}`.slice(-500);
171
+ });
172
+ const timer = setTimeout(() => {
173
+ child.kill("SIGKILL");
174
+ resolve({ supported: false, reason: "sandbox probe timed out" });
175
+ }, PROBE_TIMEOUT_MS);
176
+ timer.unref?.();
177
+ child.once("error", (error) => {
178
+ clearTimeout(timer);
179
+ resolve({ supported: false, reason: error.message });
180
+ });
181
+ child.once("exit", (code) => {
182
+ clearTimeout(timer);
183
+ resolve({
184
+ supported: code === 0,
185
+ reason: code === 0 ? "ok" : stderr.trim() || `sandbox probe exited with code ${code}`,
186
+ });
187
+ });
188
+ });
189
+ return supportProbe;
190
+ }
191
+ async function writeStableSettings(settings) {
192
+ const json = `${JSON.stringify(settings, null, 2)}\n`;
193
+ const digest = createHash("sha256").update(json).digest("hex").slice(0, 20);
194
+ const settingsPath = path.join(SANDBOX_CONFIG_DIR, `${digest}.json`);
195
+ await fs.mkdir(SANDBOX_CONFIG_DIR, { recursive: true, mode: 0o700 });
196
+ try {
197
+ await fs.writeFile(settingsPath, json, { encoding: "utf8", mode: 0o600, flag: "wx" });
198
+ }
199
+ catch (error) {
200
+ if (error.code !== "EEXIST")
201
+ throw error;
202
+ }
203
+ return settingsPath;
204
+ }
205
+ /**
206
+ * Known limitations when `sandboxMode` is enabled (upstream, not fixable here):
207
+ *
208
+ * - **Linux pipes/redirections**: `echo hi | grep hi` fails with "Permission
209
+ * denied" on /proc/self/fd/3 because bash's pipe setup clobbers the fd the
210
+ * seccomp filter arrives on (sandbox-runtime#261).
211
+ * - **git over SSH**: `git@host:` remotes fail the SOCKS handshake on macOS —
212
+ * the injected ProxyCommand uses `nc`, which cannot authenticate. HTTPS
213
+ * remotes work. `~/.ssh` is also unreadable by design.
214
+ * - **`git config --global`**: `~/.gitconfig` is a mandatory upstream write
215
+ * protection with no opt-out. Repo-local `git config` works.
216
+ * - **Corporate TLS interception / private registries**: need the CA and
217
+ * registry host configured explicitly.
218
+ * - **Ubuntu 24.04+**: AppArmor blocks the sandbox entirely, so `auto`
219
+ * degrades to no isolation (sandbox-runtime#428, #429).
220
+ *
221
+ * These are why the default is `off`; revisit when fixed upstream.
222
+ */
223
+ /**
224
+ * Wrap an already-resolved shell with Anthropic's cross-platform OS sandbox.
225
+ * Initialization and dependency failures remain visible and fail closed: the
226
+ * original command is never spawned outside the sandbox as an implicit fallback.
227
+ */
228
+ export async function prepareSandboxLaunch(shell, cwd, policy) {
229
+ if (policy.mode === "off")
230
+ return { ...shell, sandboxed: false };
231
+ const settingsPath = await writeStableSettings(buildSandboxSettings(cwd, policy));
232
+ const support = await probeSandboxSupport(settingsPath);
233
+ if (!support.supported) {
234
+ if (policy.mode === "workspace") {
235
+ throw new Error(`${support.reason}. Install the OS sandbox prerequisites ` +
236
+ `(Linux: bubblewrap + socat; Windows: run \`srt windows-install\`), ` +
237
+ `or set sandboxMode to "auto" to run without OS isolation.`);
238
+ }
239
+ if (!warnedUnsupported) {
240
+ warnedUnsupported = true;
241
+ log("WARN", "sandbox", "OS sandbox unavailable; commands run unisolated", {
242
+ reason: support.reason,
243
+ });
244
+ }
245
+ return { ...shell, sandboxed: false };
246
+ }
247
+ return {
248
+ file: process.execPath,
249
+ args: [resolveSandboxCli(), "--settings", settingsPath, "--", shell.file, ...shell.args],
250
+ isCmdFallback: shell.isCmdFallback,
251
+ sandboxed: true,
252
+ };
253
+ }
254
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/core/sandbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sandbox.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.test.d.ts","sourceRoot":"","sources":["../../src/core/sandbox.test.ts"],"names":[],"mappings":""}