windows-development-sandbox 1.5.0 → 1.9.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 (709) hide show
  1. package/README.md +1 -0
  2. package/config.example.json +27 -1
  3. package/dist/app/context.d.ts +8 -0
  4. package/dist/app/context.js +12 -0
  5. package/dist/app/features/defs.d.ts +322 -0
  6. package/dist/app/features/defs.js +28 -0
  7. package/dist/app/features/sandbox/index.d.ts +2 -0
  8. package/dist/app/features/sandbox/index.js +3 -0
  9. package/dist/app/features/sandbox/sandbox.def.d.ts +193 -0
  10. package/dist/app/features/sandbox/sandbox.def.js +245 -0
  11. package/dist/app/features/sandbox/sandbox.run.d.ts +72 -0
  12. package/dist/app/features/sandbox/sandbox.run.js +98 -0
  13. package/dist/app/features/sessions/index.d.ts +2 -0
  14. package/dist/app/features/sessions/index.js +3 -0
  15. package/dist/app/features/sessions/sessions.def.d.ts +141 -0
  16. package/dist/app/features/sessions/sessions.def.js +176 -0
  17. package/dist/app/features/sessions/sessions.run.d.ts +39 -0
  18. package/dist/app/features/sessions/sessions.run.js +58 -0
  19. package/dist/{cli/menu/settings/categories.d.ts → app/features/settings/categories.def.d.ts} +4 -0
  20. package/dist/{cli/menu/settings/categories.js → app/features/settings/categories.def.js} +40 -46
  21. package/dist/app/features/settings/index.d.ts +5 -0
  22. package/dist/app/features/settings/index.js +6 -0
  23. package/dist/{cli/menu/settings/config-file.d.ts → app/features/settings/settings-file.d.ts} +1 -1
  24. package/dist/{cli/menu/settings/config-file.js → app/features/settings/settings-file.js} +1 -1
  25. package/dist/app/features/settings/settings-rows.d.ts +35 -0
  26. package/dist/app/features/settings/settings-rows.js +94 -0
  27. package/dist/app/features/settings/settings.def.d.ts +157 -0
  28. package/dist/app/features/settings/settings.def.js +179 -0
  29. package/dist/app/features/settings/settings.run.d.ts +67 -0
  30. package/dist/app/features/settings/settings.run.js +84 -0
  31. package/dist/app/kernel/define.d.ts +143 -0
  32. package/dist/app/kernel/define.js +42 -0
  33. package/dist/app/kernel/errors.d.ts +34 -0
  34. package/dist/app/kernel/errors.js +45 -0
  35. package/dist/app/kernel/fields.d.ts +70 -0
  36. package/dist/app/kernel/fields.js +243 -0
  37. package/dist/app/kernel/index.d.ts +8 -0
  38. package/dist/app/kernel/index.js +10 -0
  39. package/dist/app/kernel/io.d.ts +193 -0
  40. package/dist/app/kernel/io.js +126 -0
  41. package/dist/app/kernel/rpc.d.ts +156 -0
  42. package/dist/app/kernel/rpc.js +47 -0
  43. package/dist/{cli/menu/settings → app/kernel}/schema-node.d.ts +9 -0
  44. package/dist/{cli/menu/settings → app/kernel}/schema-node.js +26 -0
  45. package/dist/app/kernel/text.d.ts +6 -0
  46. package/dist/app/kernel/text.js +57 -0
  47. package/dist/app/kernel/view.d.ts +146 -0
  48. package/dist/app/kernel/view.js +28 -0
  49. package/dist/app/registry.d.ts +10 -0
  50. package/dist/app/registry.js +50 -0
  51. package/dist/cli/args.d.ts +18 -2
  52. package/dist/cli/args.js +101 -24
  53. package/dist/cli/commands/accounts.js +45 -17
  54. package/dist/cli/commands/context.d.ts +2 -0
  55. package/dist/cli/commands/context.js +9 -2
  56. package/dist/cli/commands/data/clean.js +32 -9
  57. package/dist/cli/commands/engine.d.ts +2 -0
  58. package/dist/cli/commands/engine.js +60 -0
  59. package/dist/cli/commands/index.d.ts +2 -1
  60. package/dist/cli/commands/index.js +2 -1
  61. package/dist/cli/commands/launch/add-root.d.ts +3 -2
  62. package/dist/cli/commands/launch/add-root.js +11 -10
  63. package/dist/cli/commands/launch/launch.js +102 -9
  64. package/dist/cli/commands/launch/prepare.js +6 -4
  65. package/dist/cli/commands/launch/running.js +2 -1
  66. package/dist/cli/commands/launch/summary.d.ts +2 -0
  67. package/dist/cli/commands/maintenance/audit.js +1 -1
  68. package/dist/cli/commands/maintenance/clean.d.ts +1 -1
  69. package/dist/cli/commands/maintenance/clean.js +17 -3
  70. package/dist/cli/commands/maintenance/config-share.d.ts +12 -0
  71. package/dist/cli/commands/maintenance/config-share.js +80 -0
  72. package/dist/cli/commands/maintenance/config.d.ts +1 -1
  73. package/dist/cli/commands/maintenance/config.js +38 -10
  74. package/dist/cli/commands/maintenance/doctor.d.ts +1 -1
  75. package/dist/cli/commands/maintenance/doctor.js +2 -4
  76. package/dist/cli/commands/maintenance/logs.js +14 -0
  77. package/dist/cli/commands/maintenance/migrate.d.ts +2 -1
  78. package/dist/cli/commands/maintenance/migrate.js +19 -4
  79. package/dist/cli/commands/maintenance/sync.js +2 -0
  80. package/dist/cli/commands/maintenance/update.d.ts +2 -0
  81. package/dist/cli/commands/maintenance/update.js +27 -4
  82. package/dist/cli/commands/projects/here.js +12 -7
  83. package/dist/cli/commands/projects/projects.js +26 -17
  84. package/dist/cli/commands/registry.js +10 -7
  85. package/dist/cli/commands/repair/checks/agents.d.ts +2 -0
  86. package/dist/cli/commands/repair/checks/agents.js +70 -0
  87. package/dist/cli/commands/repair/checks/common.d.ts +8 -0
  88. package/dist/cli/commands/repair/checks/common.js +22 -0
  89. package/dist/cli/commands/repair/checks/contained.d.ts +2 -0
  90. package/dist/cli/commands/repair/checks/contained.js +139 -0
  91. package/dist/cli/commands/repair/checks/data.d.ts +2 -0
  92. package/dist/cli/commands/repair/checks/data.js +241 -0
  93. package/dist/cli/commands/repair/checks/hcs.d.ts +7 -0
  94. package/dist/cli/commands/repair/checks/hcs.js +28 -0
  95. package/dist/cli/commands/repair/checks/index.d.ts +2 -0
  96. package/dist/cli/commands/repair/checks/index.js +24 -0
  97. package/dist/cli/commands/repair/checks/install.d.ts +5 -0
  98. package/dist/cli/commands/repair/checks/install.js +318 -0
  99. package/dist/cli/commands/repair/checks/machine.d.ts +2 -0
  100. package/dist/cli/commands/repair/checks/machine.js +232 -0
  101. package/dist/cli/commands/repair/checks/network.d.ts +6 -0
  102. package/dist/cli/commands/repair/checks/network.js +60 -0
  103. package/dist/cli/commands/repair/checks/pc.d.ts +4 -0
  104. package/dist/cli/commands/repair/checks/pc.js +86 -0
  105. package/dist/cli/commands/repair/checks/sandbox.d.ts +2 -0
  106. package/dist/cli/commands/repair/checks/sandbox.js +282 -0
  107. package/dist/cli/commands/repair/checks/settings.d.ts +2 -0
  108. package/dist/cli/commands/repair/checks/settings.js +169 -0
  109. package/dist/cli/commands/repair/checks/vpn.d.ts +2 -0
  110. package/dist/cli/commands/repair/checks/vpn.js +78 -0
  111. package/dist/cli/commands/repair/engine.d.ts +32 -0
  112. package/dist/cli/commands/repair/engine.js +127 -0
  113. package/dist/cli/commands/repair/env.d.ts +7 -0
  114. package/dist/cli/commands/repair/env.js +50 -0
  115. package/dist/cli/commands/repair/index.d.ts +1 -9
  116. package/dist/cli/commands/repair/index.js +2 -54
  117. package/dist/cli/commands/repair/log.d.ts +17 -0
  118. package/dist/cli/commands/repair/log.js +82 -0
  119. package/dist/cli/commands/repair/printer.d.ts +32 -0
  120. package/dist/cli/commands/repair/printer.js +132 -0
  121. package/dist/cli/commands/repair/run.d.ts +33 -0
  122. package/dist/cli/commands/repair/run.js +133 -0
  123. package/dist/cli/commands/repair/types.d.ts +97 -9
  124. package/dist/cli/commands/repair/types.js +11 -7
  125. package/dist/cli/commands/resume.js +2 -2
  126. package/dist/cli/commands/sessions/index.d.ts +0 -4
  127. package/dist/cli/commands/sessions/index.js +3 -7
  128. package/dist/cli/commands/setup/index.d.ts +5 -0
  129. package/dist/cli/commands/setup/index.js +25 -1
  130. package/dist/cli/commands/shared-use.d.ts +5 -2
  131. package/dist/cli/commands/shared-use.js +11 -8
  132. package/dist/cli/commands/storage/contained.d.ts +3 -0
  133. package/dist/cli/commands/storage/contained.js +179 -0
  134. package/dist/cli/commands/storage/index.d.ts +2 -0
  135. package/dist/cli/commands/storage/index.js +2 -0
  136. package/dist/cli/commands/storage/offer.d.ts +3 -0
  137. package/dist/cli/commands/storage/offer.js +91 -0
  138. package/dist/cli/commands/storage/storage.d.ts +8 -0
  139. package/dist/cli/commands/storage/storage.js +179 -0
  140. package/dist/cli/commands/user-config.js +2 -2
  141. package/dist/cli/commands/vpn.d.ts +4 -0
  142. package/dist/cli/commands/vpn.js +91 -0
  143. package/dist/cli/commands/web.d.ts +4 -0
  144. package/dist/cli/commands/web.js +97 -0
  145. package/dist/cli/history.js +1 -1
  146. package/dist/cli/index.js +48 -4
  147. package/dist/cli/manifest.d.ts +339 -97
  148. package/dist/cli/manifest.js +222 -67
  149. package/dist/cli/menu/add-agent.d.ts +47 -0
  150. package/dist/cli/menu/add-agent.js +168 -0
  151. package/dist/cli/menu/apps.d.ts +38 -3
  152. package/dist/cli/menu/apps.js +80 -5
  153. package/dist/cli/menu/command-fields.d.ts +18 -0
  154. package/dist/cli/menu/command-fields.js +61 -0
  155. package/dist/cli/menu/command-form.d.ts +22 -0
  156. package/dist/cli/menu/command-form.js +169 -46
  157. package/dist/cli/menu/data-folder.d.ts +18 -0
  158. package/dist/cli/menu/data-folder.js +99 -0
  159. package/dist/cli/menu/io-menu.d.ts +29 -0
  160. package/dist/cli/menu/io-menu.js +126 -0
  161. package/dist/cli/menu/live.d.ts +27 -0
  162. package/dist/cli/menu/live.js +69 -0
  163. package/dist/cli/menu/memory.d.ts +19 -0
  164. package/dist/cli/menu/memory.js +53 -0
  165. package/dist/cli/menu/menu.d.ts +11 -2
  166. package/dist/cli/menu/menu.js +36 -15
  167. package/dist/cli/menu/pages/accounts-page.js +55 -24
  168. package/dist/cli/menu/pages/agents-page.d.ts +68 -0
  169. package/dist/cli/menu/pages/agents-page.js +345 -0
  170. package/dist/cli/menu/pages/apps-page.d.ts +3 -1
  171. package/dist/cli/menu/pages/apps-page.js +20 -4
  172. package/dist/cli/menu/pages/list-page.d.ts +43 -3
  173. package/dist/cli/menu/pages/list-page.js +146 -12
  174. package/dist/cli/menu/pages/maintenance-page.d.ts +9 -5
  175. package/dist/cli/menu/pages/maintenance-page.js +172 -85
  176. package/dist/cli/menu/pages/sandbox-page.d.ts +7 -6
  177. package/dist/cli/menu/pages/sandbox-page.js +117 -120
  178. package/dist/cli/menu/pages/scopes.d.ts +1 -1
  179. package/dist/cli/menu/pages/sessions-page.d.ts +6 -8
  180. package/dist/cli/menu/pages/sessions-page.js +22 -75
  181. package/dist/cli/menu/pages/settings-page.d.ts +10 -14
  182. package/dist/cli/menu/pages/settings-page.js +95 -102
  183. package/dist/cli/menu/render-view.d.ts +28 -0
  184. package/dist/cli/menu/render-view.js +112 -0
  185. package/dist/cli/menu/settings/ask-path.d.ts +14 -0
  186. package/dist/cli/menu/settings/ask-path.js +14 -0
  187. package/dist/cli/menu/settings/collections/collection-editor.d.ts +8 -2
  188. package/dist/cli/menu/settings/collections/collection-editor.js +12 -8
  189. package/dist/cli/menu/settings/collections/map-editor.js +5 -1
  190. package/dist/cli/menu/settings/collections/object-list-editor.js +2 -2
  191. package/dist/cli/menu/settings/collections/object-map-editor.js +2 -2
  192. package/dist/cli/menu/settings/collections/string-list-editor.d.ts +10 -1
  193. package/dist/cli/menu/settings/collections/string-list-editor.js +23 -0
  194. package/dist/cli/menu/settings/draft.d.ts +1 -1
  195. package/dist/cli/menu/settings/format.d.ts +1 -3
  196. package/dist/cli/menu/settings/format.js +6 -36
  197. package/dist/cli/menu/settings/index.d.ts +1 -3
  198. package/dist/cli/menu/settings/index.js +3 -3
  199. package/dist/cli/menu/settings/object-editor.d.ts +6 -2
  200. package/dist/cli/menu/settings/object-editor.js +15 -4
  201. package/dist/cli/menu/settings/share.d.ts +36 -0
  202. package/dist/cli/menu/settings/share.js +131 -0
  203. package/dist/cli/menu/settings/value-editor.d.ts +10 -1
  204. package/dist/cli/menu/settings/value-editor.js +99 -63
  205. package/dist/cli/menu/several.js +7 -5
  206. package/dist/cli/menu/share-settings.d.ts +21 -0
  207. package/dist/cli/menu/share-settings.js +112 -0
  208. package/dist/cli/menu/shell.d.ts +53 -10
  209. package/dist/cli/menu/shell.js +115 -10
  210. package/dist/cli/menu/views.d.ts +7 -0
  211. package/dist/cli/menu/views.js +11 -0
  212. package/dist/cli/menu/vpn-login.d.ts +16 -0
  213. package/dist/cli/menu/vpn-login.js +74 -0
  214. package/dist/cli/operations/handler.d.ts +6 -0
  215. package/dist/cli/operations/handler.js +61 -0
  216. package/dist/cli/operations/index.d.ts +4 -0
  217. package/dist/cli/operations/index.js +5 -0
  218. package/dist/cli/operations/input.d.ts +6 -0
  219. package/dist/cli/operations/input.js +37 -0
  220. package/dist/cli/operations/io-cli.d.ts +7 -0
  221. package/dist/cli/operations/io-cli.js +62 -0
  222. package/dist/cli/operations/spec.d.ts +18 -0
  223. package/dist/cli/operations/spec.js +108 -0
  224. package/dist/cli/output/colors.d.ts +2 -2
  225. package/dist/cli/output/colors.js +2 -11
  226. package/dist/cli/output/index.d.ts +1 -0
  227. package/dist/cli/output/index.js +1 -0
  228. package/dist/cli/output/print.d.ts +5 -1
  229. package/dist/cli/output/print.js +15 -4
  230. package/dist/cli/output/progress.d.ts +15 -0
  231. package/dist/cli/output/progress.js +44 -0
  232. package/dist/cli/output/render-view.d.ts +4 -0
  233. package/dist/cli/output/render-view.js +63 -0
  234. package/dist/cli/services/accounts-service.d.ts +2 -0
  235. package/dist/cli/services/accounts-service.js +2 -2
  236. package/dist/cli/services/agent-commands-service.d.ts +2 -0
  237. package/dist/cli/services/agent-commands-service.js +11 -2
  238. package/dist/cli/services/health-service.d.ts +0 -6
  239. package/dist/cli/services/health-service.js +5 -42
  240. package/dist/cli/services/index.d.ts +3 -1
  241. package/dist/cli/services/index.js +3 -1
  242. package/dist/cli/services/logs-service.js +4 -3
  243. package/dist/cli/services/migrate-service.js +1 -1
  244. package/dist/cli/services/update-service.d.ts +2 -0
  245. package/dist/cli/services/update-service.js +13 -6
  246. package/dist/cli/services/vpn-service.d.ts +28 -0
  247. package/dist/cli/services/vpn-service.js +46 -0
  248. package/dist/cli/services/web-service.d.ts +22 -0
  249. package/dist/cli/services/web-service.js +111 -0
  250. package/dist/cli/tui/app.d.ts +12 -4
  251. package/dist/cli/tui/app.js +38 -9
  252. package/dist/cli/tui/dialogs/path-listing.d.ts +43 -0
  253. package/dist/cli/tui/dialogs/path-listing.js +127 -0
  254. package/dist/cli/tui/dialogs/path-picker.d.ts +67 -0
  255. package/dist/cli/tui/dialogs/path-picker.js +423 -0
  256. package/dist/cli/tui/dialogs/text-screen.d.ts +6 -0
  257. package/dist/cli/tui/dialogs/text-screen.js +10 -3
  258. package/dist/cli/tui/frame.d.ts +7 -10
  259. package/dist/cli/tui/frame.js +19 -10
  260. package/dist/cli/tui/index.d.ts +4 -3
  261. package/dist/cli/tui/index.js +2 -1
  262. package/dist/cli/tui/list/list-screen.d.ts +28 -2
  263. package/dist/cli/tui/list/list-screen.js +130 -66
  264. package/dist/cli/tui/list/list-types.d.ts +10 -4
  265. package/dist/cli/tui/nav.d.ts +29 -0
  266. package/dist/cli/tui/nav.js +67 -0
  267. package/dist/cli/tui/terminal.d.ts +7 -0
  268. package/dist/cli/tui/terminal.js +30 -10
  269. package/dist/cli/validate.d.ts +1 -1
  270. package/dist/cli/validate.js +3 -3
  271. package/dist/cli/version.d.ts +2 -0
  272. package/dist/cli/version.js +11 -0
  273. package/dist/core/config/defaults.js +13 -1
  274. package/dist/core/config/loader.js +12 -2
  275. package/dist/core/local-config/overrides.js +1 -0
  276. package/dist/core/prompt.d.ts +19 -0
  277. package/dist/core/prompt.js +43 -3
  278. package/dist/core/schema/common.d.ts +6 -0
  279. package/dist/core/schema/common.js +8 -0
  280. package/dist/core/schema/config.d.ts +36 -0
  281. package/dist/core/schema/config.js +26 -2
  282. package/dist/core/schema/harness.d.ts +2 -0
  283. package/dist/core/schema/harness.js +13 -2
  284. package/dist/core/schema/index.d.ts +3 -1
  285. package/dist/core/schema/index.js +3 -1
  286. package/dist/core/schema/profile.d.ts +1 -0
  287. package/dist/core/schema/profile.js +3 -0
  288. package/dist/core/schema/redact.d.ts +13 -0
  289. package/dist/core/schema/redact.js +75 -0
  290. package/dist/core/schema/sandbox.d.ts +6 -0
  291. package/dist/core/schema/sandbox.js +21 -3
  292. package/dist/core/schema/vpn.d.ts +18 -0
  293. package/dist/core/schema/vpn.js +22 -0
  294. package/dist/core/schema/web.d.ts +6 -0
  295. package/dist/core/schema/web.js +14 -0
  296. package/dist/core/types.d.ts +44 -0
  297. package/dist/core/util/fs.d.ts +2 -0
  298. package/dist/core/util/fs.js +9 -0
  299. package/dist/core/util/index.d.ts +1 -1
  300. package/dist/core/util/index.js +1 -1
  301. package/dist/guest/agents/agent-files.d.ts +54 -0
  302. package/dist/guest/agents/agent-files.js +67 -0
  303. package/dist/guest/agents/agent-installer.js +2 -9
  304. package/dist/guest/agents/local-state.d.ts +14 -0
  305. package/dist/guest/agents/local-state.js +218 -0
  306. package/dist/guest/agents/sbx-agent.d.ts +2 -0
  307. package/dist/guest/agents/sbx-agent.js +35 -0
  308. package/dist/guest/boot/boot.d.ts +4 -0
  309. package/dist/guest/boot/boot.js +51 -11
  310. package/dist/guest/daemon/daemon.js +8 -1
  311. package/dist/guest/daemon/exec.js +2 -1
  312. package/dist/guest/daemon/idle-shutdown.js +2 -0
  313. package/dist/guest/daemon/sessions.d.ts +5 -0
  314. package/dist/guest/daemon/sessions.js +20 -3
  315. package/dist/guest/entries/agent.d.ts +1 -0
  316. package/dist/guest/entries/agent.js +10 -0
  317. package/dist/guest/entries/daemon.js +5 -0
  318. package/dist/guest/governor/decide.d.ts +61 -0
  319. package/dist/guest/governor/decide.js +182 -0
  320. package/dist/guest/governor/governor.d.ts +42 -0
  321. package/dist/guest/governor/governor.js +214 -0
  322. package/dist/guest/governor/index.d.ts +2 -0
  323. package/dist/guest/governor/index.js +2 -0
  324. package/dist/guest/runtime/csc.d.ts +2 -0
  325. package/dist/guest/runtime/csc.js +2 -0
  326. package/dist/guest/runtime/secrets.d.ts +12 -0
  327. package/dist/guest/runtime/secrets.js +63 -0
  328. package/dist/guest/sessions/viewer.js +3 -1
  329. package/dist/guest/setup/claude-profile.d.ts +2 -1
  330. package/dist/guest/setup/claude-profile.js +12 -1
  331. package/dist/guest/setup/environment.d.ts +6 -0
  332. package/dist/guest/setup/environment.js +56 -6
  333. package/dist/guest/setup/path-plan.d.ts +32 -0
  334. package/dist/guest/setup/path-plan.js +67 -0
  335. package/dist/guest/setup/shell-path.d.ts +1 -0
  336. package/dist/guest/setup/shell-path.js +22 -0
  337. package/dist/guest/toolchains/languages/python.js +1 -1
  338. package/dist/guest/toolchains/native/rust-extras.js +4 -2
  339. package/dist/guest/toolchains/runtimes.js +2 -2
  340. package/dist/guest/vpn/index.d.ts +1 -0
  341. package/dist/guest/vpn/index.js +1 -0
  342. package/dist/guest/vpn/openvpn.d.ts +9 -0
  343. package/dist/guest/vpn/openvpn.js +47 -0
  344. package/dist/guest/vpn/tunnel.d.ts +17 -0
  345. package/dist/guest/vpn/tunnel.js +78 -0
  346. package/dist/guest/vpn/vpn.d.ts +6 -0
  347. package/dist/guest/vpn/vpn.js +174 -0
  348. package/dist/guest/vpn/wireguard.d.ts +32 -0
  349. package/dist/guest/vpn/wireguard.js +132 -0
  350. package/dist/host/agent-commands/commands.d.ts +4 -0
  351. package/dist/host/agent-commands/commands.js +31 -7
  352. package/dist/host/audit/log.d.ts +1 -1
  353. package/dist/host/channel/attach.d.ts +6 -2
  354. package/dist/host/channel/attach.js +6 -3
  355. package/dist/host/channel/channel.d.ts +9 -0
  356. package/dist/host/channel/channel.js +30 -2
  357. package/dist/host/engines/engine.d.ts +12 -0
  358. package/dist/host/engines/engine.js +1 -0
  359. package/dist/host/engines/hcs/check.d.ts +25 -0
  360. package/dist/host/engines/hcs/check.js +95 -0
  361. package/dist/host/engines/hcs/documents.d.ts +44 -0
  362. package/dist/host/engines/hcs/documents.js +155 -0
  363. package/dist/host/engines/hcs/engine.d.ts +39 -0
  364. package/dist/host/engines/hcs/engine.js +171 -0
  365. package/dist/host/engines/hcs/helper.d.ts +43 -0
  366. package/dist/host/engines/hcs/helper.js +173 -0
  367. package/dist/host/engines/hcs/images.d.ts +37 -0
  368. package/dist/host/engines/hcs/images.js +152 -0
  369. package/dist/host/engines/index.d.ts +7 -0
  370. package/dist/host/engines/index.js +5 -0
  371. package/dist/host/engines/registry.d.ts +16 -0
  372. package/dist/host/engines/registry.js +30 -0
  373. package/dist/host/engines/types.d.ts +58 -0
  374. package/dist/host/engines/types.js +1 -0
  375. package/dist/host/engines/windows-sandbox/engine.d.ts +16 -0
  376. package/dist/host/engines/windows-sandbox/engine.js +63 -0
  377. package/dist/host/engines/windows-sandbox/wsb-text.d.ts +2 -0
  378. package/dist/host/engines/windows-sandbox/wsb-text.js +29 -0
  379. package/dist/host/health/acl-read.d.ts +17 -0
  380. package/dist/host/health/acl-read.js +45 -0
  381. package/dist/host/health/config-backup.d.ts +11 -0
  382. package/dist/host/health/config-backup.js +73 -0
  383. package/dist/host/health/index.d.ts +6 -0
  384. package/dist/host/health/index.js +7 -0
  385. package/dist/host/health/install-state.d.ts +33 -0
  386. package/dist/host/health/install-state.js +110 -0
  387. package/dist/host/health/path-copies.d.ts +32 -0
  388. package/dist/host/health/path-copies.js +82 -0
  389. package/dist/host/health/stale.d.ts +45 -0
  390. package/dist/host/health/stale.js +120 -0
  391. package/dist/host/health/system.d.ts +37 -0
  392. package/dist/host/health/system.js +87 -0
  393. package/dist/host/install/copies.d.ts +13 -0
  394. package/dist/host/install/copies.js +63 -0
  395. package/dist/host/install/index.d.ts +1 -0
  396. package/dist/host/install/index.js +1 -0
  397. package/dist/host/launch/generate.d.ts +5 -1
  398. package/dist/host/launch/generate.js +73 -7
  399. package/dist/host/launch/index.d.ts +3 -1
  400. package/dist/host/launch/index.js +3 -1
  401. package/dist/host/launch/launch-plan.d.ts +13 -0
  402. package/dist/host/launch/launch-plan.js +26 -0
  403. package/dist/host/launch/mappings.js +2 -1
  404. package/dist/host/launch/risk-notes.d.ts +10 -0
  405. package/dist/host/launch/risk-notes.js +18 -0
  406. package/dist/host/launch/session-file.d.ts +2 -0
  407. package/dist/host/launch/session-file.js +11 -2
  408. package/dist/host/launch/stage.js +1 -1
  409. package/dist/host/launch/wsb-file.d.ts +28 -4
  410. package/dist/host/launch/wsb-file.js +61 -42
  411. package/dist/host/life/crash-report.d.ts +27 -1
  412. package/dist/host/life/crash-report.js +173 -7
  413. package/dist/host/life/host-memory.d.ts +40 -0
  414. package/dist/host/life/host-memory.js +137 -0
  415. package/dist/host/life/index.d.ts +2 -0
  416. package/dist/host/life/index.js +2 -0
  417. package/dist/host/life/stop-events.d.ts +2 -0
  418. package/dist/host/life/stop-events.js +20 -3
  419. package/dist/host/life/stop-warning.js +1 -1
  420. package/dist/host/life/watchdog.d.ts +54 -0
  421. package/dist/host/life/watchdog.js +108 -0
  422. package/dist/host/migrate/backup.js +3 -0
  423. package/dist/host/migrate/migrations/config-file.d.ts +2 -0
  424. package/dist/host/migrate/migrations/config-file.js +7 -0
  425. package/dist/host/migrate/migrations/follow-machine-storage.js +9 -1
  426. package/dist/host/migrate/migrations/pin-storage-root.d.ts +4 -0
  427. package/dist/host/migrate/migrations/pin-storage-root.js +46 -0
  428. package/dist/host/migrate/migrations/unpin-config-defaults.js +4 -1
  429. package/dist/host/migrate/registry.js +2 -1
  430. package/dist/host/native.d.ts +3 -2
  431. package/dist/host/native.js +22 -3
  432. package/dist/host/profile/accounts.d.ts +25 -1
  433. package/dist/host/profile/accounts.js +96 -13
  434. package/dist/host/profile/agent-accounts.d.ts +5 -1
  435. package/dist/host/profile/agent-accounts.js +35 -5
  436. package/dist/host/profile/claude-login.js +3 -2
  437. package/dist/host/profile/index.d.ts +2 -1
  438. package/dist/host/profile/index.js +1 -0
  439. package/dist/host/profile/plugin-share.d.ts +26 -0
  440. package/dist/host/profile/plugin-share.js +146 -0
  441. package/dist/host/projects/join.d.ts +7 -1
  442. package/dist/host/projects/join.js +21 -4
  443. package/dist/host/projects/registry.d.ts +16 -10
  444. package/dist/host/projects/registry.js +74 -6
  445. package/dist/host/sandbox/contained-deps.d.ts +2 -0
  446. package/dist/host/sandbox/contained-deps.js +17 -0
  447. package/dist/host/sandbox/index.d.ts +2 -0
  448. package/dist/host/sandbox/index.js +2 -0
  449. package/dist/host/sandbox/platform.d.ts +4 -0
  450. package/dist/host/sandbox/platform.js +23 -4
  451. package/dist/host/sandbox/tasklist.d.ts +13 -0
  452. package/dist/host/sandbox/tasklist.js +47 -0
  453. package/dist/host/secrets/index.d.ts +2 -0
  454. package/dist/host/secrets/index.js +2 -0
  455. package/dist/host/secrets/launch-secrets.d.ts +17 -0
  456. package/dist/host/secrets/launch-secrets.js +94 -0
  457. package/dist/host/secrets/secret-store.d.ts +25 -0
  458. package/dist/host/secrets/secret-store.js +89 -0
  459. package/dist/host/sharing/acl.d.ts +16 -2
  460. package/dist/host/sharing/acl.js +35 -10
  461. package/dist/host/sharing/current.js +8 -3
  462. package/dist/host/sharing/doctor.d.ts +2 -0
  463. package/dist/host/sharing/doctor.js +44 -0
  464. package/dist/host/sharing/group-access.d.ts +6 -0
  465. package/dist/host/sharing/group-access.js +24 -0
  466. package/dist/host/sharing/index.d.ts +2 -1
  467. package/dist/host/sharing/index.js +2 -1
  468. package/dist/host/sharing/lifecycle.d.ts +8 -2
  469. package/dist/host/sharing/lifecycle.js +16 -7
  470. package/dist/host/storage/cleanup.d.ts +2 -0
  471. package/dist/host/storage/cleanup.js +2 -1
  472. package/dist/host/storage/contained/check.d.ts +9 -0
  473. package/dist/host/storage/contained/check.js +37 -0
  474. package/dist/host/storage/contained/contained-storage.d.ts +66 -0
  475. package/dist/host/storage/contained/contained-storage.js +168 -0
  476. package/dist/host/storage/contained/disk-port.d.ts +43 -0
  477. package/dist/host/storage/contained/disk-port.js +122 -0
  478. package/dist/host/storage/contained/index.d.ts +9 -0
  479. package/dist/host/storage/contained/index.js +8 -0
  480. package/dist/host/storage/contained/layout.d.ts +28 -0
  481. package/dist/host/storage/contained/layout.js +45 -0
  482. package/dist/host/storage/contained/resolve.d.ts +4 -0
  483. package/dist/host/storage/contained/resolve.js +30 -0
  484. package/dist/host/storage/contained/setting.d.ts +1 -0
  485. package/dist/host/storage/contained/setting.js +5 -0
  486. package/dist/host/storage/contained/state.d.ts +89 -0
  487. package/dist/host/storage/contained/state.js +166 -0
  488. package/dist/host/storage/contained/transfer.d.ts +24 -0
  489. package/dist/host/storage/contained/transfer.js +121 -0
  490. package/dist/host/storage/history.d.ts +21 -0
  491. package/dist/host/storage/history.js +49 -0
  492. package/dist/host/storage/index.d.ts +6 -0
  493. package/dist/host/storage/index.js +6 -0
  494. package/dist/host/storage/move.d.ts +95 -0
  495. package/dist/host/storage/move.js +384 -0
  496. package/dist/host/storage/offer.d.ts +11 -0
  497. package/dist/host/storage/offer.js +36 -0
  498. package/dist/host/storage/providers/contained.d.ts +15 -0
  499. package/dist/host/storage/providers/contained.js +39 -0
  500. package/dist/host/storage/providers/folder.d.ts +12 -0
  501. package/dist/host/storage/providers/folder.js +20 -0
  502. package/dist/host/storage/providers/index.d.ts +4 -0
  503. package/dist/host/storage/providers/index.js +3 -0
  504. package/dist/host/storage/providers/registry.d.ts +9 -0
  505. package/dist/host/storage/providers/registry.js +14 -0
  506. package/dist/host/storage/providers/types.d.ts +33 -0
  507. package/dist/host/storage/providers/types.js +1 -0
  508. package/dist/host/storage/root.d.ts +18 -0
  509. package/dist/host/storage/root.js +77 -0
  510. package/dist/host/tools/conpty.js +3 -2
  511. package/dist/host/tools/windows-terminal.d.ts +2 -0
  512. package/dist/host/tools/windows-terminal.js +31 -12
  513. package/dist/host/update/index.d.ts +1 -1
  514. package/dist/host/update/index.js +1 -1
  515. package/dist/host/update/notice.d.ts +2 -0
  516. package/dist/host/update/notice.js +13 -1
  517. package/dist/host/update/update-state.d.ts +6 -0
  518. package/dist/host/update/update-state.js +2 -0
  519. package/dist/host/update/updater.d.ts +19 -0
  520. package/dist/host/update/updater.js +88 -12
  521. package/dist/host/vpn/index.d.ts +4 -0
  522. package/dist/host/vpn/index.js +4 -0
  523. package/dist/host/vpn/login.d.ts +24 -0
  524. package/dist/host/vpn/login.js +79 -0
  525. package/dist/host/vpn/nordvpn.d.ts +21 -0
  526. package/dist/host/vpn/nordvpn.js +77 -0
  527. package/dist/host/vpn/prepare.d.ts +19 -0
  528. package/dist/host/vpn/prepare.js +138 -0
  529. package/dist/host/vpn/status.d.ts +12 -0
  530. package/dist/host/vpn/status.js +53 -0
  531. package/dist/host/web/auth.d.ts +38 -0
  532. package/dist/host/web/auth.js +96 -0
  533. package/dist/host/web/backend.d.ts +14 -0
  534. package/dist/host/web/backend.js +1 -0
  535. package/dist/host/web/bridge.d.ts +27 -0
  536. package/dist/host/web/bridge.js +144 -0
  537. package/dist/host/web/browser.d.ts +3 -0
  538. package/dist/host/web/browser.js +23 -0
  539. package/dist/host/web/control.d.ts +17 -0
  540. package/dist/host/web/control.js +67 -0
  541. package/dist/host/web/index.d.ts +10 -0
  542. package/dist/host/web/index.js +9 -0
  543. package/dist/host/web/rpc.d.ts +24 -0
  544. package/dist/host/web/rpc.js +149 -0
  545. package/dist/host/web/runner.d.ts +16 -0
  546. package/dist/host/web/runner.js +44 -0
  547. package/dist/host/web/server.d.ts +47 -0
  548. package/dist/host/web/server.js +238 -0
  549. package/dist/host/web/state.d.ts +20 -0
  550. package/dist/host/web/state.js +41 -0
  551. package/dist/host/web/static-files.d.ts +13 -0
  552. package/dist/host/web/static-files.js +57 -0
  553. package/dist/runtime/agent.js +27675 -0
  554. package/dist/runtime/daemon.js +1950 -1122
  555. package/dist/runtime/db.js +302 -111
  556. package/dist/runtime/main.js +1560 -275
  557. package/dist/runtime/netproxy.js +168 -8
  558. package/dist/runtime/view.js +186 -13
  559. package/dist/selftest/accounts.test.js +40 -0
  560. package/dist/selftest/agent-paths.test.d.ts +2 -0
  561. package/dist/selftest/agent-paths.test.js +125 -0
  562. package/dist/selftest/app.test.d.ts +2 -0
  563. package/dist/selftest/app.test.js +324 -0
  564. package/dist/selftest/channel.test.js +18 -0
  565. package/dist/selftest/cli.test.js +35 -4
  566. package/dist/selftest/config.test.js +59 -0
  567. package/dist/selftest/contained.test.d.ts +2 -0
  568. package/dist/selftest/contained.test.js +544 -0
  569. package/dist/selftest/credentials.test.d.ts +2 -0
  570. package/dist/selftest/credentials.test.js +198 -0
  571. package/dist/selftest/engine.test.d.ts +2 -0
  572. package/dist/selftest/engine.test.js +127 -0
  573. package/dist/selftest/generate.test.js +1 -1
  574. package/dist/selftest/hcs.test.d.ts +2 -0
  575. package/dist/selftest/hcs.test.js +482 -0
  576. package/dist/selftest/health.test.d.ts +2 -0
  577. package/dist/selftest/health.test.js +470 -0
  578. package/dist/selftest/heavy-load.test.d.ts +2 -0
  579. package/dist/selftest/heavy-load.test.js +329 -0
  580. package/dist/selftest/host-sim.test.js +2 -0
  581. package/dist/selftest/index.js +31 -0
  582. package/dist/selftest/layout.test.js +14 -0
  583. package/dist/selftest/menu-perf.test.d.ts +2 -0
  584. package/dist/selftest/menu-perf.test.js +248 -0
  585. package/dist/selftest/menu-screens.d.ts +7 -0
  586. package/dist/selftest/menu-screens.js +68 -17
  587. package/dist/selftest/menu.test.js +603 -22
  588. package/dist/selftest/migrate.test.js +1 -1
  589. package/dist/selftest/personalization.test.js +3 -1
  590. package/dist/selftest/projects.test.js +39 -1
  591. package/dist/selftest/shared-use.test.js +64 -2
  592. package/dist/selftest/sharing.test.js +50 -1
  593. package/dist/selftest/storage.test.d.ts +2 -0
  594. package/dist/selftest/storage.test.js +363 -0
  595. package/dist/selftest/support/engine-cases.d.ts +8 -0
  596. package/dist/selftest/support/engine-cases.js +65 -0
  597. package/dist/selftest/support/engine-golden.d.ts +3 -0
  598. package/dist/selftest/support/engine-golden.js +66 -0
  599. package/dist/selftest/support/fixtures.d.ts +20 -0
  600. package/dist/selftest/support/hcs-probes.d.ts +17 -0
  601. package/dist/selftest/support/hcs-probes.js +41 -0
  602. package/dist/selftest/support/releases.js +1 -1
  603. package/dist/selftest/toolchains.test.js +21 -0
  604. package/dist/selftest/update-service.test.js +87 -3
  605. package/dist/selftest/vpn.test.d.ts +2 -0
  606. package/dist/selftest/vpn.test.js +412 -0
  607. package/dist/selftest/web.test.d.ts +2 -0
  608. package/dist/selftest/web.test.js +402 -0
  609. package/dist/shared/apps/catalogue.js +31 -0
  610. package/dist/shared/channel/index.d.ts +1 -0
  611. package/dist/shared/channel/index.js +1 -0
  612. package/dist/shared/channel/run-dir.d.ts +9 -1
  613. package/dist/shared/channel/run-dir.js +18 -1
  614. package/dist/shared/channel/schema.d.ts +53 -0
  615. package/dist/shared/channel/schema.js +38 -0
  616. package/dist/shared/channel/secrets.d.ts +29 -0
  617. package/dist/shared/channel/secrets.js +50 -0
  618. package/dist/shared/memory/index.d.ts +1 -0
  619. package/dist/shared/memory/index.js +1 -0
  620. package/dist/shared/memory/policy.d.ts +33 -0
  621. package/dist/shared/memory/policy.js +55 -0
  622. package/dist/shared/pty/output-filter.d.ts +14 -1
  623. package/dist/shared/pty/output-filter.js +22 -4
  624. package/dist/shared/pty/terminal.d.ts +4 -1
  625. package/dist/shared/pty/terminal.js +4 -2
  626. package/dist/shared/system.d.ts +1 -0
  627. package/dist/shared/system.js +1 -0
  628. package/dist/shared/vpn/download.d.ts +29 -0
  629. package/dist/shared/vpn/download.js +30 -0
  630. package/dist/shared/vpn/kill-switch.d.ts +18 -0
  631. package/dist/shared/vpn/kill-switch.js +81 -0
  632. package/dist/shared/vpn/ovpn.d.ts +23 -0
  633. package/dist/shared/vpn/ovpn.js +244 -0
  634. package/dist/shared/vpn/wireguard.d.ts +51 -0
  635. package/dist/shared/vpn/wireguard.js +227 -0
  636. package/dist/shared/web/index.d.ts +1 -0
  637. package/dist/shared/web/index.js +1 -0
  638. package/dist/shared/web/protocol.d.ts +61 -0
  639. package/dist/shared/web/protocol.js +35 -0
  640. package/dist/sync/sync-cycle.js +9 -5
  641. package/dist/sync/sync-state.d.ts +1 -0
  642. package/dist/sync/sync-state.js +1 -0
  643. package/dist/sync/watcher.d.ts +13 -0
  644. package/dist/sync/watcher.js +102 -3
  645. package/dist/web/index.html +14 -0
  646. package/dist/web/main-NRRS5O6Z.js +157 -0
  647. package/dist/web/main-T5DMCHYV.css +1 -0
  648. package/native/csharp/FolderSecurity.cs +29 -0
  649. package/native/csharp/HcsHost/AssemblyInfo.cs +14 -0
  650. package/native/csharp/HcsHost/Guard.cs +100 -0
  651. package/native/csharp/HcsHost/Hcs.cs +256 -0
  652. package/native/csharp/HcsHost/Json.cs +78 -0
  653. package/native/csharp/HcsHost/Program.cs +185 -0
  654. package/native/csharp/HcsHost/VirtualDisk.cs +95 -0
  655. package/native/csharp/HostTools/AssemblyInfo.cs +14 -0
  656. package/native/csharp/HostTools/MemoryStatus.cs +107 -0
  657. package/native/csharp/HostTools/Program.cs +58 -17
  658. package/native/scripts/check-contained.ps1 +28 -0
  659. package/native/scripts/contained-common.ps1 +241 -0
  660. package/native/scripts/dismount-contained.ps1 +66 -0
  661. package/native/scripts/memory-status.ps1 +34 -0
  662. package/native/scripts/mount-contained.ps1 +139 -0
  663. package/native/scripts/protect-data.ps1 +29 -0
  664. package/native/scripts/read-folder-sddl.ps1 +10 -0
  665. package/native/scripts/run-elevated.ps1 +17 -4
  666. package/native/scripts/set-folder-access.ps1 +49 -7
  667. package/native/scripts/stop-events.ps1 +23 -8
  668. package/node_modules/ws/LICENSE +20 -0
  669. package/node_modules/ws/README.md +548 -0
  670. package/node_modules/ws/browser.js +8 -0
  671. package/node_modules/ws/index.js +22 -0
  672. package/node_modules/ws/lib/buffer-util.js +131 -0
  673. package/node_modules/ws/lib/constants.js +19 -0
  674. package/node_modules/ws/lib/event-target.js +292 -0
  675. package/node_modules/ws/lib/extension.js +203 -0
  676. package/node_modules/ws/lib/limiter.js +55 -0
  677. package/node_modules/ws/lib/permessage-deflate.js +530 -0
  678. package/node_modules/ws/lib/receiver.js +743 -0
  679. package/node_modules/ws/lib/sender.js +607 -0
  680. package/node_modules/ws/lib/stream.js +161 -0
  681. package/node_modules/ws/lib/subprotocol.js +62 -0
  682. package/node_modules/ws/lib/validation.js +152 -0
  683. package/node_modules/ws/lib/websocket-server.js +562 -0
  684. package/node_modules/ws/lib/websocket.js +1421 -0
  685. package/node_modules/ws/package.json +74 -0
  686. package/node_modules/ws/wrapper.mjs +21 -0
  687. package/package.json +22 -5
  688. package/sandbox/csharp/EnvBroadcast.cs +33 -0
  689. package/sandbox/csharp/MemGov.cs +398 -0
  690. package/sandbox/csharp/PathSync.cs +90 -0
  691. package/sandbox/csharp/PtyHost.cs +111 -5
  692. package/sandbox/scripts/install-shell-path.ps1 +73 -0
  693. package/sandbox/scripts/set-machine-environment.ps1 +37 -4
  694. package/schemas/config.schema.json +136 -7
  695. package/schemas/sandbox-config.schema.json +17 -4
  696. package/dist/cli/commands/repair/checks.d.ts +0 -2
  697. package/dist/cli/commands/repair/checks.js +0 -246
  698. package/dist/cli/commands/sessions/control.d.ts +0 -4
  699. package/dist/cli/commands/sessions/control.js +0 -66
  700. package/dist/cli/commands/sessions/list.d.ts +0 -2
  701. package/dist/cli/commands/sessions/list.js +0 -45
  702. package/dist/cli/commands/sessions/status.d.ts +0 -2
  703. package/dist/cli/commands/sessions/status.js +0 -93
  704. package/dist/cli/commands/sessions/window.d.ts +0 -3
  705. package/dist/cli/commands/sessions/window.js +0 -18
  706. package/dist/cli/menu/pages/start-page.d.ts +0 -43
  707. package/dist/cli/menu/pages/start-page.js +0 -192
  708. package/dist/cli/tui/tab-bar.d.ts +0 -9
  709. package/dist/cli/tui/tab-bar.js +0 -33
@@ -79,7 +79,7 @@ sealed class SessionHost
79
79
  log.Write("starting: " + command);
80
80
  while (true)
81
81
  {
82
- using (PseudoConsole console = PseudoConsole.Start(command, hub.Cols, hub.Rows, hub.Broadcast))
82
+ using (PseudoConsole console = PseudoConsole.Start(command, hub.Cols, hub.Rows, hub.Broadcast, log))
83
83
  {
84
84
  hub.Attach(console);
85
85
  log.Write("pseudo console: " + Native.ConsoleKind);
@@ -856,7 +856,7 @@ sealed class PseudoConsole : IDisposable
856
856
  this.pump = pump;
857
857
  }
858
858
 
859
- public static PseudoConsole Start(string commandLine, short cols, short rows, Action<byte[]> onOutput)
859
+ public static PseudoConsole Start(string commandLine, short cols, short rows, Action<byte[]> onOutput, Log log)
860
860
  {
861
861
  SafeFileHandle inRead;
862
862
  SafeFileHandle inWrite;
@@ -872,7 +872,7 @@ sealed class PseudoConsole : IDisposable
872
872
  }
873
873
  inRead.Dispose();
874
874
  outWrite.Dispose();
875
- IntPtr process = Native.Spawn(commandLine, handle);
875
+ IntPtr process = Native.Spawn(commandLine, handle, log);
876
876
  FileStream output = new FileStream(outRead, FileAccess.Read);
877
877
  Thread pump = new Thread(() => Pump(output, onOutput));
878
878
  pump.IsBackground = true;
@@ -1085,6 +1085,12 @@ sealed class Log
1085
1085
  static class Native
1086
1086
  {
1087
1087
  private const uint ExtendedStartupInfoPresent = 0x00080000;
1088
+ private const uint CreateSuspended = 0x00000004;
1089
+ // The shared job of everything the agents start (the memory governor in the daemon opens it by this name).
1090
+ private const string AgentJobName = "Local\\AgentSandboxAgentsJob";
1091
+ private const int JobObjectExtendedLimitInformation = 9;
1092
+ private const uint JobObjectLimitJobMemory = 0x00000200;
1093
+ private const long BytesPerMb = 1024L * 1024L;
1088
1094
  private const int UseStdHandles = 0x00000100;
1089
1095
  private static readonly IntPtr PseudoConsoleAttribute = (IntPtr)0x00020016;
1090
1096
 
@@ -1125,6 +1131,43 @@ static class Native
1125
1131
  public IntPtr lpAttributeList;
1126
1132
  }
1127
1133
 
1134
+ // JOBOBJECT_BASIC_LIMIT_INFORMATION, IO_COUNTERS and JOBOBJECT_EXTENDED_LIMIT_INFORMATION.
1135
+ [StructLayout(LayoutKind.Sequential)]
1136
+ private struct JobBasicLimit
1137
+ {
1138
+ public long PerProcessUserTimeLimit;
1139
+ public long PerJobUserTimeLimit;
1140
+ public uint LimitFlags;
1141
+ public UIntPtr MinimumWorkingSetSize;
1142
+ public UIntPtr MaximumWorkingSetSize;
1143
+ public uint ActiveProcessLimit;
1144
+ public UIntPtr Affinity;
1145
+ public uint PriorityClass;
1146
+ public uint SchedulingClass;
1147
+ }
1148
+
1149
+ [StructLayout(LayoutKind.Sequential)]
1150
+ private struct IoCounters
1151
+ {
1152
+ public ulong ReadOperationCount;
1153
+ public ulong WriteOperationCount;
1154
+ public ulong OtherOperationCount;
1155
+ public ulong ReadTransferCount;
1156
+ public ulong WriteTransferCount;
1157
+ public ulong OtherTransferCount;
1158
+ }
1159
+
1160
+ [StructLayout(LayoutKind.Sequential)]
1161
+ private struct JobExtendedLimit
1162
+ {
1163
+ public JobBasicLimit BasicLimitInformation;
1164
+ public IoCounters IoInfo;
1165
+ public UIntPtr ProcessMemoryLimit;
1166
+ public UIntPtr JobMemoryLimit;
1167
+ public UIntPtr PeakProcessMemoryUsed;
1168
+ public UIntPtr PeakJobMemoryUsed;
1169
+ }
1170
+
1128
1171
  [StructLayout(LayoutKind.Sequential)]
1129
1172
  private struct ProcessInformation
1130
1173
  {
@@ -1182,6 +1225,18 @@ static class Native
1182
1225
  [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
1183
1226
  public static extern bool CreateProcessW(string lpApplicationName, StringBuilder lpCommandLine, IntPtr lpProcessAttributes, IntPtr lpThreadAttributes, bool bInheritHandles, uint dwCreationFlags, IntPtr lpEnvironment, string lpCurrentDirectory, ref StartupInfoEx lpStartupInfo, out ProcessInformation lpProcessInformation);
1184
1227
 
1228
+ [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
1229
+ public static extern IntPtr CreateJobObjectW(IntPtr attributes, string name);
1230
+
1231
+ [DllImport("kernel32.dll", SetLastError = true)]
1232
+ public static extern bool SetInformationJobObject(IntPtr job, int infoClass, ref JobExtendedLimit info, int length);
1233
+
1234
+ [DllImport("kernel32.dll", SetLastError = true)]
1235
+ public static extern bool AssignProcessToJobObject(IntPtr job, IntPtr process);
1236
+
1237
+ [DllImport("kernel32.dll", SetLastError = true)]
1238
+ public static extern uint ResumeThread(IntPtr thread);
1239
+
1185
1240
  [DllImport("kernel32.dll", SetLastError = true)]
1186
1241
  public static extern uint WaitForSingleObject(IntPtr hHandle, uint dwMilliseconds);
1187
1242
 
@@ -1241,9 +1296,51 @@ static class Native
1241
1296
  return NativeMethods.CreatePipe(out read, out write, IntPtr.Zero, 0);
1242
1297
  }
1243
1298
 
1299
+ private static IntPtr agentJob;
1300
+ private static bool agentJobTried;
1301
+
1302
+ /// <summary>
1303
+ /// The shared job of everything the agents start, with a memory limit for all of it together (PTYHOST_JOB_MB, set
1304
+ /// by the daemon from sandbox.agentMemoryHeadroomMb): a runaway build then gets out-of-memory errors in its own
1305
+ /// session instead of using up the whole sandbox. Zero when no limit is asked for or the job cannot be made; ptyhost
1306
+ /// itself is never in it. The handle stays open for ptyhost's whole life (the job lives while a handle is open).
1307
+ /// </summary>
1308
+ private static IntPtr AgentJob(Log log)
1309
+ {
1310
+ if (agentJobTried)
1311
+ {
1312
+ return agentJob;
1313
+ }
1314
+ agentJobTried = true;
1315
+ long limitMb;
1316
+ if (!long.TryParse(Environment.GetEnvironmentVariable("PTYHOST_JOB_MB"), out limitMb) || limitMb < 512)
1317
+ {
1318
+ return IntPtr.Zero;
1319
+ }
1320
+ IntPtr job = NativeMethods.CreateJobObjectW(IntPtr.Zero, AgentJobName);
1321
+ if (job == IntPtr.Zero)
1322
+ {
1323
+ log.Write("agent job: CreateJobObject failed (" + Marshal.GetLastWin32Error() + "); no memory limit");
1324
+ return IntPtr.Zero;
1325
+ }
1326
+ JobExtendedLimit info = new JobExtendedLimit();
1327
+ info.BasicLimitInformation.LimitFlags = JobObjectLimitJobMemory;
1328
+ info.JobMemoryLimit = new UIntPtr((ulong)(limitMb * BytesPerMb));
1329
+ if (!NativeMethods.SetInformationJobObject(job, JobObjectExtendedLimitInformation, ref info, Marshal.SizeOf(typeof(JobExtendedLimit))))
1330
+ {
1331
+ log.Write("agent job: setting the limit failed (" + Marshal.GetLastWin32Error() + "); no memory limit");
1332
+ NativeMethods.CloseHandle(job);
1333
+ return IntPtr.Zero;
1334
+ }
1335
+ log.Write("agent job: everything the agent starts may use " + limitMb + " MB together");
1336
+ agentJob = job;
1337
+ return job;
1338
+ }
1339
+
1244
1340
  /// <summary>Starts `commandLine` attached to the pseudo console. Null std handles: never leak our own stdio into the child.</summary>
1245
- public static IntPtr Spawn(string commandLine, IntPtr pseudoConsole)
1341
+ public static IntPtr Spawn(string commandLine, IntPtr pseudoConsole, Log log)
1246
1342
  {
1343
+ IntPtr job = AgentJob(log);
1247
1344
  IntPtr size = IntPtr.Zero;
1248
1345
  NativeMethods.InitializeProcThreadAttributeList(IntPtr.Zero, 1, 0, ref size);
1249
1346
  IntPtr attributes = Marshal.AllocHGlobal(size);
@@ -1256,10 +1353,19 @@ static class Native
1256
1353
  info.StartupInfo.dwFlags = UseStdHandles;
1257
1354
  info.lpAttributeList = attributes;
1258
1355
  ProcessInformation pi;
1259
- if (!NativeMethods.CreateProcessW(null, new StringBuilder(commandLine), IntPtr.Zero, IntPtr.Zero, false, ExtendedStartupInfoPresent, IntPtr.Zero, null, ref info, out pi))
1356
+ if (!NativeMethods.CreateProcessW(null, new StringBuilder(commandLine), IntPtr.Zero, IntPtr.Zero, false, ExtendedStartupInfoPresent | (job != IntPtr.Zero ? CreateSuspended : 0), IntPtr.Zero, null, ref info, out pi))
1260
1357
  {
1261
1358
  throw new IOException("CreateProcess failed (" + Marshal.GetLastWin32Error() + "): " + commandLine);
1262
1359
  }
1360
+ if (job != IntPtr.Zero)
1361
+ {
1362
+ // Suspended until it is in the job, so nothing it starts can be outside.
1363
+ if (!NativeMethods.AssignProcessToJobObject(job, pi.hProcess))
1364
+ {
1365
+ log.Write("agent job: could not add the agent (" + Marshal.GetLastWin32Error() + "); it runs without the memory limit");
1366
+ }
1367
+ NativeMethods.ResumeThread(pi.hThread);
1368
+ }
1263
1369
  NativeMethods.CloseHandle(pi.hThread);
1264
1370
  return pi.hProcess;
1265
1371
  }
@@ -0,0 +1,73 @@
1
+ #Requires -Version 5.1
2
+ # Every new shell starts with the CURRENT machine + user PATH, whatever its parent had: tools added later in the boot
3
+ # (python, rust, pwsh, agents ...) reach Windows Terminal tabs, Explorer launches and every other shell this way. The
4
+ # start-up files call pathsync.exe (sandbox\csharp\PathSync.cs, built each boot):
5
+ # Windows PowerShell and PowerShell 7: the all-users profile.ps1
6
+ # cmd.exe: HKLM\Software\Microsoft\Command Processor AutoRun -> shell-path.cmd (does nothing for `cmd /c`)
7
+ # Git Bash: etc\profile.d\agent-sandbox-path.sh
8
+ # -Helper is pathsync.exe. -PwshDir and -GitRoot are optional. -Root writes under that folder instead of the machine
9
+ # (tests): no registry is touched then.
10
+ param(
11
+ [Parameter(Mandatory = $true)][string]$Helper,
12
+ [string]$PwshDir = '',
13
+ [string]$GitRoot = '',
14
+ [string]$Root = ''
15
+ )
16
+ $ErrorActionPreference = 'Stop'
17
+
18
+ $marker = 'agent-sandbox path sync'
19
+
20
+ function Write-Ours([string]$file, [string]$text) {
21
+ if (Test-Path -LiteralPath $file) {
22
+ if (-not (Select-String -LiteralPath $file -SimpleMatch $marker -Quiet)) { return }
23
+ } else {
24
+ New-Item -ItemType Directory -Force -Path (Split-Path -Parent $file) | Out-Null
25
+ }
26
+ [IO.File]::WriteAllText($file, $text, (New-Object Text.UTF8Encoding($false)))
27
+ }
28
+
29
+ $profileText = "# $marker`r`n" +
30
+ "try { `$p = & '$Helper'; if (`$p) { `$env:Path = `$p } } catch { }`r`n"
31
+
32
+ $windowsProfileDir = if ($Root) { Join-Path $Root 'windowspowershell' } else { Join-Path $env:windir 'System32\WindowsPowerShell\v1.0' }
33
+ Write-Ours (Join-Path $windowsProfileDir 'profile.ps1') $profileText
34
+ if ($PwshDir -and (Test-Path -LiteralPath $PwshDir)) { Write-Ours (Join-Path $PwshDir 'profile.ps1') $profileText }
35
+
36
+ # cmd: interactive only. `cmd /c ...` (what programs and for /f start) has /c in its command line and leaves at once, which
37
+ # also stops the loop of the for /f below.
38
+ $cmdFile = Join-Path (Split-Path -Parent $Helper) 'shell-path.cmd'
39
+ $cmdText = "@echo off`r`n" +
40
+ "rem $marker`r`n" +
41
+ "setlocal enabledelayedexpansion`r`n" +
42
+ "set `"_L=!cmdcmdline!`"`r`n" +
43
+ "if not `"!_L:/c=!`"==`"!_L!`" exit /b 0`r`n" +
44
+ "if not `"!_L:/r=!`"==`"!_L!`" exit /b 0`r`n" +
45
+ "set `"_P=`"`r`n" +
46
+ "for /f `"delims=`" %%P in ('`"$Helper`"') do set `"_P=%%P`"`r`n" +
47
+ "if not defined _P exit /b 0`r`n" +
48
+ "endlocal & set `"PATH=%_P%`"`r`n"
49
+ if (-not (Test-Path -LiteralPath $cmdFile) -or (Select-String -LiteralPath $cmdFile -SimpleMatch $marker -Quiet)) {
50
+ [IO.File]::WriteAllText($cmdFile, $cmdText, [Text.Encoding]::ASCII)
51
+ }
52
+ if (-not $Root) {
53
+ $key = 'HKLM:\Software\Microsoft\Command Processor'
54
+ $current = (Get-ItemProperty -Path $key -Name AutoRun -ErrorAction SilentlyContinue).AutoRun
55
+ if (-not $current -or $current -like '*shell-path.cmd*') {
56
+ if (-not (Test-Path $key)) { New-Item -Path $key -Force | Out-Null }
57
+ Set-ItemProperty -Path $key -Name AutoRun -Value "if exist `"$cmdFile`" call `"$cmdFile`""
58
+ }
59
+ }
60
+
61
+ if ($GitRoot -and (Test-Path -LiteralPath (Join-Path $GitRoot 'etc\profile.d'))) {
62
+ $posixHelper = $Helper -replace '\\', '/'
63
+ $shText = "# $marker`n" +
64
+ "_w=`"`$('$posixHelper' 2>/dev/null)`"`n" +
65
+ "if [ -n `"`$_w`" ]; then`n" +
66
+ " _n=`"`$(cygpath -u -p `"`$_w`" 2>/dev/null)`"`n" +
67
+ " _o=`$IFS; IFS=:`n" +
68
+ " for _d in `$_n; do case `":`$PATH:`" in *`":`$_d:`"*) ;; *) PATH=`"`$PATH:`$_d`" ;; esac; done`n" +
69
+ " IFS=`$_o; export PATH`n" +
70
+ "fi`n" +
71
+ "unset _w _n _o _d`n"
72
+ Write-Ours (Join-Path $GitRoot 'etc\profile.d\agent-sandbox-path.sh') $shText
73
+ }
@@ -2,28 +2,61 @@
2
2
  # Machine-wide environment variables and PATH folders, so every new terminal tab and anything an agent starts sees the
3
3
  # same tools (guest/setup/environment.ts). -SettingsFile is JSON written by the runtime:
4
4
  # vars: { name: value } set machine-wide (with additive: only the ones not set yet)
5
- # path: string | null replaces the machine PATH
5
+ # path: string | null replaces the machine PATH (already ordered and de-duplicated by the runtime)
6
6
  # add: [folders] added to PATH when missing: in front, or (additive) at the end
7
+ # create: [folders] created first (folders a tool fills in later, such as pip's Scripts)
8
+ # The PATH is always saved without duplicates (case, trailing slash) and Explorer / Windows Terminal are told.
7
9
  param([Parameter(Mandatory = $true)][string]$SettingsFile)
8
10
  $ErrorActionPreference = 'Stop'
9
11
 
10
12
  $settings = Get-Content -LiteralPath $SettingsFile -Raw -Encoding UTF8 | ConvertFrom-Json
11
13
  $additive = [bool]$settings.additive
12
14
 
15
+ function Get-Key([string]$folder) {
16
+ $key = $folder.Trim().Trim('"')
17
+ if ($key.Length -gt 3) { $key = $key.TrimEnd('\', '/') }
18
+ return $key.ToLowerInvariant()
19
+ }
20
+
21
+ function Join-Folders([string[]]$folders) {
22
+ $seen = @{}
23
+ $kept = foreach ($folder in $folders) {
24
+ if ([string]::IsNullOrWhiteSpace($folder)) { continue }
25
+ $key = Get-Key $folder
26
+ if ($seen.ContainsKey($key)) { continue }
27
+ $seen[$key] = $true
28
+ $folder.Trim()
29
+ }
30
+ return ($kept -join ';')
31
+ }
32
+
33
+ foreach ($folder in @($settings.create)) {
34
+ if ($folder) { New-Item -ItemType Directory -Force -Path $folder | Out-Null }
35
+ }
36
+
13
37
  foreach ($variable in $settings.vars.PSObject.Properties) {
14
38
  if ($additive -and [Environment]::GetEnvironmentVariable($variable.Name, 'Machine')) { continue }
15
39
  [Environment]::SetEnvironmentVariable($variable.Name, [string]$variable.Value, 'Machine')
16
40
  }
17
41
 
18
42
  if ($null -ne $settings.path) {
19
- [Environment]::SetEnvironmentVariable('Path', [string]$settings.path, 'Machine')
43
+ [Environment]::SetEnvironmentVariable('Path', (Join-Folders ([string]$settings.path -split ';')), 'Machine')
20
44
  }
21
45
 
22
46
  if ($settings.add) {
23
47
  $current = [Environment]::GetEnvironmentVariable('Path', 'Machine') -split ';'
24
- $missing = @($settings.add | Where-Object { $current -notcontains $_ })
48
+ $known = @{}
49
+ foreach ($folder in $current) { $known[(Get-Key $folder)] = $true }
50
+ $missing = @($settings.add | Where-Object { -not $known.ContainsKey((Get-Key $_)) })
25
51
  if ($missing.Count) {
26
52
  $combined = if ($additive) { $current + $missing } else { $missing + $current }
27
- [Environment]::SetEnvironmentVariable('Path', ($combined -join ';'), 'Machine')
53
+ [Environment]::SetEnvironmentVariable('Path', (Join-Folders $combined), 'Machine')
28
54
  }
29
55
  }
56
+
57
+ try {
58
+ Add-Type -Path (Join-Path $PSScriptRoot '..\csharp\EnvBroadcast.cs')
59
+ [AgentSandbox.EnvBroadcast]::Notify()
60
+ } catch {
61
+ # Programs started later read the registry anyway; only windows that are already open miss the news.
62
+ }
@@ -120,6 +120,14 @@
120
120
  "sandbox": {
121
121
  "type": "object",
122
122
  "properties": {
123
+ "engine": {
124
+ "type": "string",
125
+ "enum": [
126
+ "windows-sandbox",
127
+ "hcs"
128
+ ],
129
+ "description": "(alpha) What runs the sandbox. \"windows-sandbox\" = Windows Sandbox (the default: desktop, Windows Terminal, GPU, clipboard, audio, printers). \"hcs\" = a headless Hyper-V isolated Server Core container for agents (no desktop, GPU or clipboard); it needs Windows features and an image on this PC (sandbox engine check hcs lists what is missing), and starting it is not enabled yet in this alpha. sandbox engine shows what each engine can do. Yours only: a project file (.sandbox-config.json) cannot set it."
130
+ },
123
131
  "memoryMb": {
124
132
  "anyOf": [
125
133
  {
@@ -170,11 +178,33 @@
170
178
  "type": "integer",
171
179
  "minimum": 0,
172
180
  "maximum": 9007199254740991,
173
- "description": "RAM always left for this PC when memoryMb is \"auto\"."
181
+ "description": "Memory always left for this PC when memoryMb is \"auto\": the sandbox gets at most (free RAM, and RAM plus paging file still unused) minus this."
182
+ },
183
+ "agentMemoryHeadroomMb": {
184
+ "anyOf": [
185
+ {
186
+ "type": "string",
187
+ "const": "auto"
188
+ },
189
+ {
190
+ "type": "string",
191
+ "const": "none"
192
+ },
193
+ {
194
+ "type": "integer",
195
+ "minimum": 0,
196
+ "maximum": 9007199254740991
197
+ }
198
+ ],
199
+ "description": "Memory kept out of the agents reach inside the sandbox, in MB: everything the agents start (their builds, tests, tools) together may use at most the sandbox memory minus this; a runaway parallel build then gets out-of-memory errors in its own session instead of freezing or crashing the whole sandbox. \"auto\" = the larger of 2048 MB and 10 % of the sandbox memory; \"none\" = no limit. Yours only: a project file cannot change it."
200
+ },
201
+ "pressureResponse": {
202
+ "type": "boolean",
203
+ "description": "When the sandbox (or this PC) runs low on memory, slow the heaviest build programs down (lower priority) and, if that is not enough, pause the biggest compiler for a few seconds at a time, so heavy parallel builds slow down instead of closing the sandbox. Never touches the agents themselves. Yours only: a project file cannot change it."
174
204
  },
175
205
  "vGpu": {
176
206
  "type": "boolean",
177
- "description": "Virtual GPU. Off by default: Microsoft notes it widens the sandbox attack surface."
207
+ "description": "Virtual GPU. Off by default: Microsoft notes it widens the sandbox attack surface. The sandbox then uses this PC's graphics card, and with some graphics drivers heavy use can freeze the whole PC: turn it on only when a program in the sandbox needs the GPU (the mesa toolchain gives software OpenGL without it)."
178
208
  },
179
209
  "networking": {
180
210
  "type": "boolean",
@@ -182,7 +212,7 @@
182
212
  },
183
213
  "clipboard": {
184
214
  "type": "boolean",
185
- "description": "Shared clipboard between this PC and the sandbox."
215
+ "description": "Shared clipboard between this PC and the sandbox. Also lets an agent's copy (in sandbox attach) reach this PC's clipboard."
186
216
  },
187
217
  "audioInput": {
188
218
  "type": "boolean",
@@ -227,7 +257,7 @@
227
257
  "root": {
228
258
  "type": "string",
229
259
  "minLength": 1,
230
- "description": "Where everything is kept on this PC (tools, databases, logins, launches)."
260
+ "description": "Where everything is kept on this PC (tools, databases, logins, launches). The default is a private folder for you under %ProgramData%\\AgentSandbox\\users, which works for installs for one user and for everyone. sandbox storage move <folder> moves it."
231
261
  },
232
262
  "persistAgentState": {
233
263
  "type": "boolean",
@@ -242,6 +272,20 @@
242
272
  "type": "boolean",
243
273
  "description": "Programs and scripts (.exe, .ps1, .bat, .cmd, .msi, .lnk ...) that appear or change in your project while a sandbox runs get Windows' \"downloaded from the internet\" mark, so SmartScreen and PowerShell ask before they run on this PC."
244
274
  },
275
+ "contained": {
276
+ "type": "string",
277
+ "enum": [
278
+ "off",
279
+ "vhdx"
280
+ ],
281
+ "description": "(beta) Keep the sandbox tools, state and logs inside one disk image file (vhdx) instead of loose folders, so scanning programs on this PC see one file. Not yet tried on a real PC. Turn it on with sandbox storage contained on (it moves your files and asks first); Windows asks for permission to mount the image when a sandbox starts. \"off\" = loose folders, as always. Yours only: a project file (.sandbox-config.json) cannot set it."
282
+ },
283
+ "containedMaxGb": {
284
+ "type": "integer",
285
+ "minimum": 8,
286
+ "maximum": 4096,
287
+ "description": "(beta) Largest size, in GB, the disk image of storage.contained may grow to."
288
+ },
245
289
  "warnDataGb": {
246
290
  "type": "number",
247
291
  "minimum": 0,
@@ -313,6 +357,46 @@
313
357
  },
314
358
  "additionalProperties": false
315
359
  },
360
+ "vpn": {
361
+ "type": "object",
362
+ "properties": {
363
+ "enabled": {
364
+ "type": "boolean",
365
+ "description": "Send the sandbox's traffic through a VPN. Only the sandbox: your PC's own connection is untouched. Needs a saved login first (sandbox vpn login). The agent in the sandbox can read that login and can turn the tunnel off (it is the administrator there)."
366
+ },
367
+ "provider": {
368
+ "type": "string",
369
+ "enum": [
370
+ "nordvpn",
371
+ "openvpn-file",
372
+ "wireguard-file"
373
+ ],
374
+ "description": "nordvpn: a recommended NordVPN server is picked at every launch. openvpn-file: your own .ovpn file (configFile). wireguard-file: your own WireGuard .conf (configFile), e.g. from your company."
375
+ },
376
+ "protocol": {
377
+ "type": "string",
378
+ "enum": [
379
+ "udp",
380
+ "tcp"
381
+ ],
382
+ "description": "udp is faster; tcp gets through networks that block udp."
383
+ },
384
+ "country": {
385
+ "type": "string",
386
+ "pattern": "^([A-Za-z][A-Za-z .'-]{0,39})?$",
387
+ "description": "nordvpn: the country of the server, e.g. uk, us or Germany. Empty = the best server anywhere."
388
+ },
389
+ "configFile": {
390
+ "type": "string",
391
+ "description": "openvpn-file / wireguard-file: the .ovpn or .conf file on this PC (an .ovpn has its certificates inside it). Files that run programs (script-security, up, down, plugin, PostUp ...) are refused. A WireGuard file holds your private key: it is read when a sandbox starts and handed over in a one-shot file. A project's file can never set this."
392
+ },
393
+ "killSwitch": {
394
+ "type": "boolean",
395
+ "description": "Block all traffic that does not go through the tunnel: when the tunnel cannot start, the sandbox stays offline instead of using your normal connection. A project can only turn this on, never off."
396
+ }
397
+ },
398
+ "additionalProperties": false
399
+ },
316
400
  "provisioning": {
317
401
  "type": "object",
318
402
  "properties": {
@@ -1147,6 +1231,22 @@
1147
1231
  },
1148
1232
  "additionalProperties": false
1149
1233
  },
1234
+ "web": {
1235
+ "type": "object",
1236
+ "properties": {
1237
+ "enabled": {
1238
+ "type": "boolean",
1239
+ "description": "(Beta) Allow the web UI: your sandbox sessions in a browser on this PC. Off by default, and nothing starts it by itself yet: sandbox web start works either way and runs it until sandbox web stop (or a restart of the PC)."
1240
+ },
1241
+ "port": {
1242
+ "type": "integer",
1243
+ "minimum": 1024,
1244
+ "maximum": 65535,
1245
+ "description": "Port of the web UI on 127.0.0.1 (this PC only). Pick another when it is taken."
1246
+ }
1247
+ },
1248
+ "additionalProperties": false
1249
+ },
1150
1250
  "agentCommands": {
1151
1251
  "type": "object",
1152
1252
  "properties": {
@@ -1236,6 +1336,7 @@
1236
1336
  "sourcegit",
1237
1337
  "githubdesktop",
1238
1338
  "lazygit",
1339
+ "jj",
1239
1340
  "7zip",
1240
1341
  "winmerge",
1241
1342
  "everything",
@@ -1288,7 +1389,9 @@
1288
1389
  "ffmpeg",
1289
1390
  "sqlite",
1290
1391
  "shellcheck",
1291
- "gitleaks"
1392
+ "gitleaks",
1393
+ "ast-grep",
1394
+ "rust-analyzer"
1292
1395
  ]
1293
1396
  },
1294
1397
  "description": "Apps from the catalogue to install in every sandbox (the Apps screen in the menu lists them by category). Each is downloaded once and kept."
@@ -1388,6 +1491,10 @@
1388
1491
  "type": "boolean",
1389
1492
  "description": "Refresh these settings from this PC on every launch."
1390
1493
  },
1494
+ "sharePluginsAcrossAccounts": {
1495
+ "type": "boolean",
1496
+ "description": "When you switch Claude accounts, copy your Claude plugins (and which ones are enabled) into a data set that has none yet. Off by default: plugins are code that runs in your sessions."
1497
+ },
1391
1498
  "syncHistory": {
1392
1499
  "type": "boolean",
1393
1500
  "description": "Bring conversation history in, and sync new history back (path-translated)."
@@ -1457,9 +1564,10 @@
1457
1564
  "type": "string"
1458
1565
  },
1459
1566
  "additionalProperties": {
1460
- "type": "string"
1567
+ "type": "string",
1568
+ "secret": true
1461
1569
  },
1462
- "description": "Environment variables for the agent."
1570
+ "description": "Environment variables for the agent (API keys go here). Their values are shown as *** and are handed to the sandbox in a one-shot file, never kept in the launch folder. The agent can read its own environment."
1463
1571
  },
1464
1572
  "home": {
1465
1573
  "description": "Where its login lives inside the sandbox; leave out when the agent cannot be pointed at a folder (then its login is not kept between sandboxes).",
@@ -1501,6 +1609,27 @@
1501
1609
  },
1502
1610
  "additionalProperties": false
1503
1611
  },
1612
+ "localState": {
1613
+ "description": "Environment variable -> folder below the agent's own state folder (state\\<agent>) for SQLite databases. SQLite cannot run in a mapped folder, so the agent runs from a copy on the sandbox's disk (the variable points to it) that is copied from and back to that folder.",
1614
+ "type": "object",
1615
+ "propertyNames": {
1616
+ "type": "string",
1617
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
1618
+ },
1619
+ "additionalProperties": {
1620
+ "type": "string",
1621
+ "pattern": "^(?!.*(^|[\\\\/])\\.\\.([\\\\/]|$))[A-Za-z0-9._ -]+([\\\\/][A-Za-z0-9._ -]+)*$"
1622
+ }
1623
+ },
1624
+ "bootReset": {
1625
+ "description": "Files and folders below the agent's own state folder (state\\<agent>) that only work on the machine that wrote them (keys sealed with Windows DPAPI, local accounts it created). Every sandbox is a new machine, so they are deleted at each boot and the agent sets them up again.",
1626
+ "maxItems": 32,
1627
+ "type": "array",
1628
+ "items": {
1629
+ "type": "string",
1630
+ "pattern": "^(?!.*(^|[\\\\/])\\.\\.([\\\\/]|$))[A-Za-z0-9._ -]+([\\\\/][A-Za-z0-9._ -]+)*$"
1631
+ }
1632
+ },
1504
1633
  "resumeArguments": {
1505
1634
  "description": "Arguments used when the agent is restarted in place (e.g. after an account switch) so it resumes the conversation.",
1506
1635
  "type": "array",
@@ -123,11 +123,11 @@
123
123
  "type": "integer",
124
124
  "minimum": 0,
125
125
  "maximum": 9007199254740991,
126
- "description": "RAM always left for this PC when memoryMb is \"auto\"."
126
+ "description": "Memory always left for this PC when memoryMb is \"auto\": the sandbox gets at most (free RAM, and RAM plus paging file still unused) minus this."
127
127
  },
128
128
  "vGpu": {
129
129
  "type": "boolean",
130
- "description": "Virtual GPU. Off by default: Microsoft notes it widens the sandbox attack surface."
130
+ "description": "Virtual GPU. Off by default: Microsoft notes it widens the sandbox attack surface. The sandbox then uses this PC's graphics card, and with some graphics drivers heavy use can freeze the whole PC: turn it on only when a program in the sandbox needs the GPU (the mesa toolchain gives software OpenGL without it)."
131
131
  },
132
132
  "networking": {
133
133
  "type": "boolean",
@@ -135,7 +135,7 @@
135
135
  },
136
136
  "clipboard": {
137
137
  "type": "boolean",
138
- "description": "Shared clipboard between this PC and the sandbox."
138
+ "description": "Shared clipboard between this PC and the sandbox. Also lets an agent's copy (in sandbox attach) reach this PC's clipboard."
139
139
  },
140
140
  "audioInput": {
141
141
  "type": "boolean",
@@ -183,6 +183,16 @@
183
183
  },
184
184
  "additionalProperties": false
185
185
  },
186
+ "vpn": {
187
+ "type": "object",
188
+ "properties": {
189
+ "killSwitch": {
190
+ "type": "boolean",
191
+ "description": "Block all traffic that does not go through the tunnel: when the tunnel cannot start, the sandbox stays offline instead of using your normal connection. A project can only turn this on, never off."
192
+ }
193
+ },
194
+ "additionalProperties": false
195
+ },
186
196
  "provisioning": {
187
197
  "type": "object",
188
198
  "properties": {
@@ -1040,6 +1050,7 @@
1040
1050
  "sourcegit",
1041
1051
  "githubdesktop",
1042
1052
  "lazygit",
1053
+ "jj",
1043
1054
  "7zip",
1044
1055
  "winmerge",
1045
1056
  "everything",
@@ -1092,7 +1103,9 @@
1092
1103
  "ffmpeg",
1093
1104
  "sqlite",
1094
1105
  "shellcheck",
1095
- "gitleaks"
1106
+ "gitleaks",
1107
+ "ast-grep",
1108
+ "rust-analyzer"
1096
1109
  ]
1097
1110
  },
1098
1111
  "description": "Apps from the catalogue to install in every sandbox (the Apps screen in the menu lists them by category). Each is downloaded once and kept."
@@ -1,2 +0,0 @@
1
- import { type RepairCheck } from './types.js';
2
- export declare const CHECKS: RepairCheck[];