windows-development-sandbox 1.5.0 → 1.7.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 (448) hide show
  1. package/README.md +1 -0
  2. package/config.example.json +17 -1
  3. package/dist/cli/args.d.ts +13 -2
  4. package/dist/cli/args.js +95 -24
  5. package/dist/cli/commands/accounts.js +45 -17
  6. package/dist/cli/commands/context.d.ts +2 -0
  7. package/dist/cli/commands/context.js +9 -2
  8. package/dist/cli/commands/data/clean.js +32 -9
  9. package/dist/cli/commands/index.d.ts +1 -0
  10. package/dist/cli/commands/index.js +1 -0
  11. package/dist/cli/commands/launch/add-root.d.ts +3 -2
  12. package/dist/cli/commands/launch/add-root.js +11 -10
  13. package/dist/cli/commands/launch/launch.js +57 -4
  14. package/dist/cli/commands/launch/prepare.js +3 -1
  15. package/dist/cli/commands/maintenance/audit.js +1 -1
  16. package/dist/cli/commands/maintenance/clean.d.ts +1 -1
  17. package/dist/cli/commands/maintenance/clean.js +17 -3
  18. package/dist/cli/commands/maintenance/config.d.ts +1 -1
  19. package/dist/cli/commands/maintenance/config.js +112 -10
  20. package/dist/cli/commands/maintenance/doctor.d.ts +1 -1
  21. package/dist/cli/commands/maintenance/doctor.js +2 -4
  22. package/dist/cli/commands/maintenance/migrate.d.ts +2 -1
  23. package/dist/cli/commands/maintenance/migrate.js +19 -4
  24. package/dist/cli/commands/maintenance/sync.js +2 -0
  25. package/dist/cli/commands/maintenance/update.d.ts +2 -0
  26. package/dist/cli/commands/maintenance/update.js +27 -4
  27. package/dist/cli/commands/projects/here.js +12 -7
  28. package/dist/cli/commands/projects/projects.js +26 -17
  29. package/dist/cli/commands/registry.js +7 -0
  30. package/dist/cli/commands/repair/checks/agents.d.ts +2 -0
  31. package/dist/cli/commands/repair/checks/agents.js +70 -0
  32. package/dist/cli/commands/repair/checks/common.d.ts +8 -0
  33. package/dist/cli/commands/repair/checks/common.js +22 -0
  34. package/dist/cli/commands/repair/checks/data.d.ts +2 -0
  35. package/dist/cli/commands/repair/checks/data.js +241 -0
  36. package/dist/cli/commands/repair/checks/index.d.ts +2 -0
  37. package/dist/cli/commands/repair/checks/index.js +20 -0
  38. package/dist/cli/commands/repair/checks/install.d.ts +5 -0
  39. package/dist/cli/commands/repair/checks/install.js +318 -0
  40. package/dist/cli/commands/repair/checks/machine.d.ts +2 -0
  41. package/dist/cli/commands/repair/checks/machine.js +232 -0
  42. package/dist/cli/commands/repair/checks/network.d.ts +6 -0
  43. package/dist/cli/commands/repair/checks/network.js +60 -0
  44. package/dist/cli/commands/repair/checks/pc.d.ts +4 -0
  45. package/dist/cli/commands/repair/checks/pc.js +55 -0
  46. package/dist/cli/commands/repair/checks/sandbox.d.ts +2 -0
  47. package/dist/cli/commands/repair/checks/sandbox.js +267 -0
  48. package/dist/cli/commands/repair/checks/settings.d.ts +2 -0
  49. package/dist/cli/commands/repair/checks/settings.js +169 -0
  50. package/dist/cli/commands/repair/checks/vpn.d.ts +2 -0
  51. package/dist/cli/commands/repair/checks/vpn.js +53 -0
  52. package/dist/cli/commands/repair/engine.d.ts +32 -0
  53. package/dist/cli/commands/repair/engine.js +127 -0
  54. package/dist/cli/commands/repair/env.d.ts +7 -0
  55. package/dist/cli/commands/repair/env.js +49 -0
  56. package/dist/cli/commands/repair/index.d.ts +1 -9
  57. package/dist/cli/commands/repair/index.js +2 -54
  58. package/dist/cli/commands/repair/log.d.ts +17 -0
  59. package/dist/cli/commands/repair/log.js +82 -0
  60. package/dist/cli/commands/repair/printer.d.ts +32 -0
  61. package/dist/cli/commands/repair/printer.js +132 -0
  62. package/dist/cli/commands/repair/run.d.ts +33 -0
  63. package/dist/cli/commands/repair/run.js +133 -0
  64. package/dist/cli/commands/repair/types.d.ts +97 -9
  65. package/dist/cli/commands/repair/types.js +11 -7
  66. package/dist/cli/commands/resume.js +2 -2
  67. package/dist/cli/commands/sessions/list.js +5 -2
  68. package/dist/cli/commands/sessions/status.d.ts +2 -0
  69. package/dist/cli/commands/sessions/status.js +27 -6
  70. package/dist/cli/commands/setup/index.d.ts +5 -0
  71. package/dist/cli/commands/setup/index.js +25 -1
  72. package/dist/cli/commands/storage/index.d.ts +2 -0
  73. package/dist/cli/commands/storage/index.js +2 -0
  74. package/dist/cli/commands/storage/offer.d.ts +3 -0
  75. package/dist/cli/commands/storage/offer.js +85 -0
  76. package/dist/cli/commands/storage/storage.d.ts +8 -0
  77. package/dist/cli/commands/storage/storage.js +171 -0
  78. package/dist/cli/commands/user-config.js +1 -1
  79. package/dist/cli/commands/vpn.d.ts +4 -0
  80. package/dist/cli/commands/vpn.js +75 -0
  81. package/dist/cli/commands/web.d.ts +4 -0
  82. package/dist/cli/commands/web.js +95 -0
  83. package/dist/cli/history.js +1 -1
  84. package/dist/cli/index.js +46 -3
  85. package/dist/cli/manifest.d.ts +303 -29
  86. package/dist/cli/manifest.js +173 -43
  87. package/dist/cli/menu/add-agent.d.ts +47 -0
  88. package/dist/cli/menu/add-agent.js +168 -0
  89. package/dist/cli/menu/apps.d.ts +31 -2
  90. package/dist/cli/menu/apps.js +44 -5
  91. package/dist/cli/menu/command-fields.d.ts +18 -0
  92. package/dist/cli/menu/command-fields.js +61 -0
  93. package/dist/cli/menu/command-form.d.ts +22 -0
  94. package/dist/cli/menu/command-form.js +169 -46
  95. package/dist/cli/menu/data-folder.d.ts +18 -0
  96. package/dist/cli/menu/data-folder.js +99 -0
  97. package/dist/cli/menu/menu.d.ts +1 -1
  98. package/dist/cli/menu/menu.js +11 -8
  99. package/dist/cli/menu/pages/accounts-page.js +55 -24
  100. package/dist/cli/menu/pages/agents-page.d.ts +66 -0
  101. package/dist/cli/menu/pages/agents-page.js +338 -0
  102. package/dist/cli/menu/pages/apps-page.js +1 -2
  103. package/dist/cli/menu/pages/list-page.d.ts +16 -3
  104. package/dist/cli/menu/pages/list-page.js +40 -8
  105. package/dist/cli/menu/pages/maintenance-page.d.ts +9 -0
  106. package/dist/cli/menu/pages/maintenance-page.js +161 -72
  107. package/dist/cli/menu/pages/sandbox-page.d.ts +3 -0
  108. package/dist/cli/menu/pages/sandbox-page.js +132 -43
  109. package/dist/cli/menu/pages/sessions-page.d.ts +4 -0
  110. package/dist/cli/menu/pages/sessions-page.js +41 -25
  111. package/dist/cli/menu/pages/settings-page.d.ts +8 -4
  112. package/dist/cli/menu/pages/settings-page.js +36 -13
  113. package/dist/cli/menu/settings/categories.d.ts +2 -0
  114. package/dist/cli/menu/settings/categories.js +19 -44
  115. package/dist/cli/menu/settings/collections/collection-editor.d.ts +7 -1
  116. package/dist/cli/menu/settings/collections/collection-editor.js +12 -8
  117. package/dist/cli/menu/settings/collections/map-editor.js +5 -1
  118. package/dist/cli/menu/settings/collections/object-list-editor.js +2 -2
  119. package/dist/cli/menu/settings/collections/object-map-editor.js +2 -2
  120. package/dist/cli/menu/settings/collections/string-list-editor.d.ts +11 -1
  121. package/dist/cli/menu/settings/collections/string-list-editor.js +23 -0
  122. package/dist/cli/menu/settings/index.d.ts +1 -1
  123. package/dist/cli/menu/settings/index.js +1 -1
  124. package/dist/cli/menu/settings/object-editor.d.ts +5 -1
  125. package/dist/cli/menu/settings/object-editor.js +15 -4
  126. package/dist/cli/menu/settings/path-kind.d.ts +20 -0
  127. package/dist/cli/menu/settings/path-kind.js +44 -0
  128. package/dist/cli/menu/settings/schema-node.d.ts +9 -0
  129. package/dist/cli/menu/settings/schema-node.js +26 -0
  130. package/dist/cli/menu/settings/value-editor.d.ts +5 -0
  131. package/dist/cli/menu/settings/value-editor.js +51 -18
  132. package/dist/cli/menu/several.js +7 -5
  133. package/dist/cli/menu/shell.d.ts +37 -10
  134. package/dist/cli/menu/shell.js +90 -10
  135. package/dist/cli/menu/vpn-login.d.ts +16 -0
  136. package/dist/cli/menu/vpn-login.js +66 -0
  137. package/dist/cli/output/print.d.ts +2 -0
  138. package/dist/cli/output/print.js +8 -1
  139. package/dist/cli/services/accounts-service.d.ts +2 -0
  140. package/dist/cli/services/accounts-service.js +2 -2
  141. package/dist/cli/services/health-service.d.ts +0 -6
  142. package/dist/cli/services/health-service.js +5 -42
  143. package/dist/cli/services/index.d.ts +3 -1
  144. package/dist/cli/services/index.js +3 -1
  145. package/dist/cli/services/migrate-service.js +1 -1
  146. package/dist/cli/services/update-service.d.ts +2 -0
  147. package/dist/cli/services/update-service.js +13 -6
  148. package/dist/cli/services/vpn-service.d.ts +28 -0
  149. package/dist/cli/services/vpn-service.js +46 -0
  150. package/dist/cli/services/web-service.d.ts +22 -0
  151. package/dist/cli/services/web-service.js +111 -0
  152. package/dist/cli/tui/app.d.ts +6 -3
  153. package/dist/cli/tui/app.js +12 -5
  154. package/dist/cli/tui/dialogs/path-listing.d.ts +43 -0
  155. package/dist/cli/tui/dialogs/path-listing.js +127 -0
  156. package/dist/cli/tui/dialogs/path-picker.d.ts +67 -0
  157. package/dist/cli/tui/dialogs/path-picker.js +423 -0
  158. package/dist/cli/tui/dialogs/text-screen.d.ts +6 -0
  159. package/dist/cli/tui/dialogs/text-screen.js +10 -3
  160. package/dist/cli/tui/frame.d.ts +7 -10
  161. package/dist/cli/tui/frame.js +19 -10
  162. package/dist/cli/tui/index.d.ts +4 -3
  163. package/dist/cli/tui/index.js +2 -1
  164. package/dist/cli/tui/list/list-screen.d.ts +14 -2
  165. package/dist/cli/tui/list/list-screen.js +68 -32
  166. package/dist/cli/tui/list/list-types.d.ts +8 -4
  167. package/dist/cli/tui/nav.d.ts +29 -0
  168. package/dist/cli/tui/nav.js +67 -0
  169. package/dist/cli/validate.d.ts +1 -1
  170. package/dist/cli/validate.js +3 -3
  171. package/dist/cli/version.d.ts +2 -0
  172. package/dist/cli/version.js +11 -0
  173. package/dist/core/config/defaults.js +5 -1
  174. package/dist/core/config/loader.js +12 -2
  175. package/dist/core/local-config/overrides.js +1 -0
  176. package/dist/core/prompt.d.ts +19 -0
  177. package/dist/core/prompt.js +43 -3
  178. package/dist/core/schema/common.d.ts +6 -0
  179. package/dist/core/schema/common.js +8 -0
  180. package/dist/core/schema/config.d.ts +23 -0
  181. package/dist/core/schema/config.js +10 -1
  182. package/dist/core/schema/harness.d.ts +1 -0
  183. package/dist/core/schema/harness.js +8 -2
  184. package/dist/core/schema/index.d.ts +3 -1
  185. package/dist/core/schema/index.js +3 -1
  186. package/dist/core/schema/profile.d.ts +1 -0
  187. package/dist/core/schema/profile.js +3 -0
  188. package/dist/core/schema/redact.d.ts +13 -0
  189. package/dist/core/schema/redact.js +75 -0
  190. package/dist/core/schema/sandbox.js +1 -0
  191. package/dist/core/schema/vpn.d.ts +17 -0
  192. package/dist/core/schema/vpn.js +22 -0
  193. package/dist/core/schema/web.d.ts +6 -0
  194. package/dist/core/schema/web.js +14 -0
  195. package/dist/core/types.d.ts +26 -0
  196. package/dist/guest/agents/agent-files.d.ts +49 -0
  197. package/dist/guest/agents/agent-files.js +63 -0
  198. package/dist/guest/agents/agent-installer.js +2 -9
  199. package/dist/guest/agents/local-state.d.ts +12 -0
  200. package/dist/guest/agents/local-state.js +198 -0
  201. package/dist/guest/agents/sbx-agent.d.ts +2 -0
  202. package/dist/guest/agents/sbx-agent.js +35 -0
  203. package/dist/guest/boot/boot.d.ts +4 -0
  204. package/dist/guest/boot/boot.js +50 -11
  205. package/dist/guest/daemon/daemon.js +4 -1
  206. package/dist/guest/daemon/exec.js +2 -1
  207. package/dist/guest/daemon/idle-shutdown.js +2 -0
  208. package/dist/guest/daemon/sessions.js +4 -1
  209. package/dist/guest/entries/agent.d.ts +1 -0
  210. package/dist/guest/entries/agent.js +10 -0
  211. package/dist/guest/entries/daemon.js +2 -0
  212. package/dist/guest/runtime/csc.d.ts +1 -0
  213. package/dist/guest/runtime/csc.js +1 -0
  214. package/dist/guest/runtime/secrets.d.ts +12 -0
  215. package/dist/guest/runtime/secrets.js +63 -0
  216. package/dist/guest/setup/claude-profile.d.ts +2 -1
  217. package/dist/guest/setup/claude-profile.js +12 -1
  218. package/dist/guest/setup/environment.d.ts +6 -0
  219. package/dist/guest/setup/environment.js +56 -6
  220. package/dist/guest/setup/path-plan.d.ts +32 -0
  221. package/dist/guest/setup/path-plan.js +67 -0
  222. package/dist/guest/setup/shell-path.d.ts +1 -0
  223. package/dist/guest/setup/shell-path.js +22 -0
  224. package/dist/guest/toolchains/languages/python.js +1 -1
  225. package/dist/guest/toolchains/runtimes.js +2 -2
  226. package/dist/guest/vpn/index.d.ts +1 -0
  227. package/dist/guest/vpn/index.js +1 -0
  228. package/dist/guest/vpn/openvpn.d.ts +9 -0
  229. package/dist/guest/vpn/openvpn.js +47 -0
  230. package/dist/guest/vpn/tunnel.d.ts +17 -0
  231. package/dist/guest/vpn/tunnel.js +78 -0
  232. package/dist/guest/vpn/vpn.d.ts +6 -0
  233. package/dist/guest/vpn/vpn.js +126 -0
  234. package/dist/host/channel/attach.d.ts +3 -1
  235. package/dist/host/channel/attach.js +1 -1
  236. package/dist/host/channel/channel.d.ts +7 -0
  237. package/dist/host/channel/channel.js +26 -2
  238. package/dist/host/health/acl-read.d.ts +17 -0
  239. package/dist/host/health/acl-read.js +45 -0
  240. package/dist/host/health/config-backup.d.ts +11 -0
  241. package/dist/host/health/config-backup.js +73 -0
  242. package/dist/host/health/index.d.ts +6 -0
  243. package/dist/host/health/index.js +7 -0
  244. package/dist/host/health/install-state.d.ts +33 -0
  245. package/dist/host/health/install-state.js +110 -0
  246. package/dist/host/health/path-copies.d.ts +32 -0
  247. package/dist/host/health/path-copies.js +82 -0
  248. package/dist/host/health/stale.d.ts +45 -0
  249. package/dist/host/health/stale.js +120 -0
  250. package/dist/host/health/system.d.ts +37 -0
  251. package/dist/host/health/system.js +87 -0
  252. package/dist/host/install/copies.d.ts +13 -0
  253. package/dist/host/install/copies.js +63 -0
  254. package/dist/host/install/index.d.ts +1 -0
  255. package/dist/host/install/index.js +1 -0
  256. package/dist/host/launch/generate.js +25 -1
  257. package/dist/host/launch/session-file.js +4 -1
  258. package/dist/host/launch/stage.js +1 -1
  259. package/dist/host/migrate/backup.js +3 -0
  260. package/dist/host/migrate/migrations/config-file.d.ts +2 -0
  261. package/dist/host/migrate/migrations/config-file.js +7 -0
  262. package/dist/host/migrate/migrations/follow-machine-storage.js +9 -1
  263. package/dist/host/migrate/migrations/pin-storage-root.d.ts +4 -0
  264. package/dist/host/migrate/migrations/pin-storage-root.js +46 -0
  265. package/dist/host/migrate/migrations/unpin-config-defaults.js +4 -1
  266. package/dist/host/migrate/registry.js +2 -1
  267. package/dist/host/profile/accounts.d.ts +25 -1
  268. package/dist/host/profile/accounts.js +96 -13
  269. package/dist/host/profile/agent-accounts.d.ts +5 -1
  270. package/dist/host/profile/agent-accounts.js +35 -5
  271. package/dist/host/profile/index.d.ts +2 -1
  272. package/dist/host/profile/index.js +1 -0
  273. package/dist/host/profile/plugin-share.d.ts +26 -0
  274. package/dist/host/profile/plugin-share.js +146 -0
  275. package/dist/host/projects/join.d.ts +7 -1
  276. package/dist/host/projects/join.js +21 -4
  277. package/dist/host/projects/registry.d.ts +16 -10
  278. package/dist/host/projects/registry.js +74 -6
  279. package/dist/host/sandbox/platform.d.ts +2 -0
  280. package/dist/host/sandbox/platform.js +21 -2
  281. package/dist/host/secrets/index.d.ts +2 -0
  282. package/dist/host/secrets/index.js +2 -0
  283. package/dist/host/secrets/launch-secrets.d.ts +17 -0
  284. package/dist/host/secrets/launch-secrets.js +93 -0
  285. package/dist/host/secrets/secret-store.d.ts +25 -0
  286. package/dist/host/secrets/secret-store.js +89 -0
  287. package/dist/host/sharing/acl.d.ts +16 -2
  288. package/dist/host/sharing/acl.js +35 -10
  289. package/dist/host/sharing/current.js +11 -2
  290. package/dist/host/sharing/doctor.d.ts +2 -0
  291. package/dist/host/sharing/doctor.js +44 -0
  292. package/dist/host/sharing/group-access.d.ts +6 -0
  293. package/dist/host/sharing/group-access.js +24 -0
  294. package/dist/host/sharing/index.d.ts +2 -1
  295. package/dist/host/sharing/index.js +2 -1
  296. package/dist/host/sharing/lifecycle.d.ts +8 -2
  297. package/dist/host/sharing/lifecycle.js +16 -7
  298. package/dist/host/storage/cleanup.d.ts +2 -0
  299. package/dist/host/storage/cleanup.js +2 -1
  300. package/dist/host/storage/history.d.ts +21 -0
  301. package/dist/host/storage/history.js +49 -0
  302. package/dist/host/storage/index.d.ts +4 -0
  303. package/dist/host/storage/index.js +4 -0
  304. package/dist/host/storage/move.d.ts +95 -0
  305. package/dist/host/storage/move.js +384 -0
  306. package/dist/host/storage/offer.d.ts +11 -0
  307. package/dist/host/storage/offer.js +36 -0
  308. package/dist/host/storage/root.d.ts +18 -0
  309. package/dist/host/storage/root.js +77 -0
  310. package/dist/host/tools/windows-terminal.d.ts +2 -0
  311. package/dist/host/tools/windows-terminal.js +23 -5
  312. package/dist/host/update/index.d.ts +1 -1
  313. package/dist/host/update/index.js +1 -1
  314. package/dist/host/update/notice.d.ts +2 -0
  315. package/dist/host/update/notice.js +13 -1
  316. package/dist/host/update/update-state.d.ts +6 -0
  317. package/dist/host/update/update-state.js +2 -0
  318. package/dist/host/update/updater.d.ts +19 -0
  319. package/dist/host/update/updater.js +88 -12
  320. package/dist/host/vpn/index.d.ts +4 -0
  321. package/dist/host/vpn/index.js +4 -0
  322. package/dist/host/vpn/login.d.ts +24 -0
  323. package/dist/host/vpn/login.js +79 -0
  324. package/dist/host/vpn/nordvpn.d.ts +21 -0
  325. package/dist/host/vpn/nordvpn.js +77 -0
  326. package/dist/host/vpn/prepare.d.ts +17 -0
  327. package/dist/host/vpn/prepare.js +77 -0
  328. package/dist/host/vpn/status.d.ts +12 -0
  329. package/dist/host/vpn/status.js +53 -0
  330. package/dist/host/web/auth.d.ts +38 -0
  331. package/dist/host/web/auth.js +96 -0
  332. package/dist/host/web/backend.d.ts +14 -0
  333. package/dist/host/web/backend.js +1 -0
  334. package/dist/host/web/bridge.d.ts +27 -0
  335. package/dist/host/web/bridge.js +144 -0
  336. package/dist/host/web/browser.d.ts +1 -0
  337. package/dist/host/web/browser.js +10 -0
  338. package/dist/host/web/control.d.ts +17 -0
  339. package/dist/host/web/control.js +67 -0
  340. package/dist/host/web/index.d.ts +9 -0
  341. package/dist/host/web/index.js +8 -0
  342. package/dist/host/web/runner.d.ts +14 -0
  343. package/dist/host/web/runner.js +45 -0
  344. package/dist/host/web/server.d.ts +40 -0
  345. package/dist/host/web/server.js +218 -0
  346. package/dist/host/web/state.d.ts +20 -0
  347. package/dist/host/web/state.js +41 -0
  348. package/dist/host/web/static-files.d.ts +13 -0
  349. package/dist/host/web/static-files.js +57 -0
  350. package/dist/runtime/agent.js +27614 -0
  351. package/dist/runtime/daemon.js +1012 -618
  352. package/dist/runtime/db.js +236 -106
  353. package/dist/runtime/main.js +1093 -250
  354. package/dist/runtime/netproxy.js +102 -3
  355. package/dist/runtime/view.js +102 -3
  356. package/dist/selftest/accounts.test.js +40 -0
  357. package/dist/selftest/agent-paths.test.d.ts +2 -0
  358. package/dist/selftest/agent-paths.test.js +115 -0
  359. package/dist/selftest/channel.test.js +5 -0
  360. package/dist/selftest/cli.test.js +34 -4
  361. package/dist/selftest/credentials.test.d.ts +2 -0
  362. package/dist/selftest/credentials.test.js +198 -0
  363. package/dist/selftest/generate.test.js +1 -1
  364. package/dist/selftest/health.test.d.ts +2 -0
  365. package/dist/selftest/health.test.js +470 -0
  366. package/dist/selftest/host-sim.test.js +2 -0
  367. package/dist/selftest/index.js +19 -0
  368. package/dist/selftest/layout.test.js +2 -0
  369. package/dist/selftest/menu-screens.d.ts +7 -0
  370. package/dist/selftest/menu-screens.js +65 -16
  371. package/dist/selftest/menu.test.js +574 -21
  372. package/dist/selftest/migrate.test.js +1 -1
  373. package/dist/selftest/personalization.test.js +3 -1
  374. package/dist/selftest/projects.test.js +39 -1
  375. package/dist/selftest/shared-use.test.js +64 -2
  376. package/dist/selftest/sharing.test.js +50 -1
  377. package/dist/selftest/storage.test.d.ts +2 -0
  378. package/dist/selftest/storage.test.js +363 -0
  379. package/dist/selftest/support/fixtures.d.ts +14 -0
  380. package/dist/selftest/support/releases.js +1 -1
  381. package/dist/selftest/toolchains.test.js +21 -0
  382. package/dist/selftest/update-service.test.js +87 -3
  383. package/dist/selftest/vpn.test.d.ts +2 -0
  384. package/dist/selftest/vpn.test.js +279 -0
  385. package/dist/selftest/web.test.d.ts +2 -0
  386. package/dist/selftest/web.test.js +304 -0
  387. package/dist/shared/apps/catalogue.js +31 -0
  388. package/dist/shared/channel/index.d.ts +1 -0
  389. package/dist/shared/channel/index.js +1 -0
  390. package/dist/shared/channel/run-dir.d.ts +6 -1
  391. package/dist/shared/channel/run-dir.js +12 -1
  392. package/dist/shared/channel/schema.d.ts +19 -0
  393. package/dist/shared/channel/schema.js +11 -0
  394. package/dist/shared/channel/secrets.d.ts +28 -0
  395. package/dist/shared/channel/secrets.js +44 -0
  396. package/dist/shared/vpn/download.d.ts +13 -0
  397. package/dist/shared/vpn/download.js +14 -0
  398. package/dist/shared/vpn/kill-switch.d.ts +18 -0
  399. package/dist/shared/vpn/kill-switch.js +81 -0
  400. package/dist/shared/vpn/ovpn.d.ts +23 -0
  401. package/dist/shared/vpn/ovpn.js +244 -0
  402. package/dist/shared/web/index.d.ts +1 -0
  403. package/dist/shared/web/index.js +1 -0
  404. package/dist/shared/web/protocol.d.ts +61 -0
  405. package/dist/shared/web/protocol.js +35 -0
  406. package/dist/sync/sync-cycle.js +5 -1
  407. package/dist/sync/sync-state.d.ts +1 -0
  408. package/dist/sync/sync-state.js +1 -0
  409. package/dist/sync/watcher.js +10 -0
  410. package/dist/web/index.html +13 -0
  411. package/dist/web/main-CXESL347.js +45 -0
  412. package/dist/web/main-VLR7DVQ4.css +1 -0
  413. package/native/csharp/FolderSecurity.cs +29 -0
  414. package/native/scripts/protect-data.ps1 +29 -0
  415. package/native/scripts/read-folder-sddl.ps1 +10 -0
  416. package/native/scripts/set-folder-access.ps1 +49 -7
  417. package/node_modules/ws/LICENSE +20 -0
  418. package/node_modules/ws/README.md +548 -0
  419. package/node_modules/ws/browser.js +8 -0
  420. package/node_modules/ws/index.js +22 -0
  421. package/node_modules/ws/lib/buffer-util.js +131 -0
  422. package/node_modules/ws/lib/constants.js +19 -0
  423. package/node_modules/ws/lib/event-target.js +292 -0
  424. package/node_modules/ws/lib/extension.js +203 -0
  425. package/node_modules/ws/lib/limiter.js +55 -0
  426. package/node_modules/ws/lib/permessage-deflate.js +530 -0
  427. package/node_modules/ws/lib/receiver.js +743 -0
  428. package/node_modules/ws/lib/sender.js +607 -0
  429. package/node_modules/ws/lib/stream.js +161 -0
  430. package/node_modules/ws/lib/subprotocol.js +62 -0
  431. package/node_modules/ws/lib/validation.js +152 -0
  432. package/node_modules/ws/lib/websocket-server.js +562 -0
  433. package/node_modules/ws/lib/websocket.js +1421 -0
  434. package/node_modules/ws/package.json +74 -0
  435. package/node_modules/ws/wrapper.mjs +21 -0
  436. package/package.json +15 -5
  437. package/sandbox/csharp/EnvBroadcast.cs +33 -0
  438. package/sandbox/csharp/PathSync.cs +90 -0
  439. package/sandbox/scripts/install-shell-path.ps1 +73 -0
  440. package/sandbox/scripts/set-machine-environment.ps1 +37 -4
  441. package/schemas/config.schema.json +79 -4
  442. package/schemas/sandbox-config.schema.json +14 -1
  443. package/dist/cli/commands/repair/checks.d.ts +0 -2
  444. package/dist/cli/commands/repair/checks.js +0 -246
  445. package/dist/cli/menu/pages/start-page.d.ts +0 -43
  446. package/dist/cli/menu/pages/start-page.js +0 -192
  447. package/dist/cli/tui/tab-bar.d.ts +0 -9
  448. package/dist/cli/tui/tab-bar.js +0 -33
@@ -1363,11 +1363,11 @@ var require_lodash = __commonJS({
1363
1363
  return isFunction(object2[key]);
1364
1364
  });
1365
1365
  }
1366
- function baseGet(object2, path22) {
1367
- path22 = castPath(path22, object2);
1368
- var index = 0, length = path22.length;
1366
+ function baseGet(object2, path24) {
1367
+ path24 = castPath(path24, object2);
1368
+ var index = 0, length = path24.length;
1369
1369
  while (object2 != null && index < length) {
1370
- object2 = object2[toKey(path22[index++])];
1370
+ object2 = object2[toKey(path24[index++])];
1371
1371
  }
1372
1372
  return index && index == length ? object2 : undefined2;
1373
1373
  }
@@ -1431,10 +1431,10 @@ var require_lodash = __commonJS({
1431
1431
  });
1432
1432
  return accumulator;
1433
1433
  }
1434
- function baseInvoke(object2, path22, args) {
1435
- path22 = castPath(path22, object2);
1436
- object2 = parent(object2, path22);
1437
- var func = object2 == null ? object2 : object2[toKey(last(path22))];
1434
+ function baseInvoke(object2, path24, args) {
1435
+ path24 = castPath(path24, object2);
1436
+ object2 = parent(object2, path24);
1437
+ var func = object2 == null ? object2 : object2[toKey(last(path24))];
1438
1438
  return func == null ? undefined2 : apply(func, object2, args);
1439
1439
  }
1440
1440
  function baseIsArguments(value) {
@@ -1590,13 +1590,13 @@ var require_lodash = __commonJS({
1590
1590
  return object2 === source || baseIsMatch(object2, source, matchData);
1591
1591
  };
1592
1592
  }
1593
- function baseMatchesProperty(path22, srcValue) {
1594
- if (isKey(path22) && isStrictComparable(srcValue)) {
1595
- return matchesStrictComparable(toKey(path22), srcValue);
1593
+ function baseMatchesProperty(path24, srcValue) {
1594
+ if (isKey(path24) && isStrictComparable(srcValue)) {
1595
+ return matchesStrictComparable(toKey(path24), srcValue);
1596
1596
  }
1597
1597
  return function(object2) {
1598
- var objValue = get(object2, path22);
1599
- return objValue === undefined2 && objValue === srcValue ? hasIn(object2, path22) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
1598
+ var objValue = get(object2, path24);
1599
+ return objValue === undefined2 && objValue === srcValue ? hasIn(object2, path24) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
1600
1600
  };
1601
1601
  }
1602
1602
  function baseMerge(object2, source, srcIndex, customizer, stack) {
@@ -1693,23 +1693,23 @@ var require_lodash = __commonJS({
1693
1693
  });
1694
1694
  }
1695
1695
  function basePick(object2, paths) {
1696
- return basePickBy(object2, paths, function(value, path22) {
1697
- return hasIn(object2, path22);
1696
+ return basePickBy(object2, paths, function(value, path24) {
1697
+ return hasIn(object2, path24);
1698
1698
  });
1699
1699
  }
1700
1700
  function basePickBy(object2, paths, predicate) {
1701
1701
  var index = -1, length = paths.length, result2 = {};
1702
1702
  while (++index < length) {
1703
- var path22 = paths[index], value = baseGet(object2, path22);
1704
- if (predicate(value, path22)) {
1705
- baseSet(result2, castPath(path22, object2), value);
1703
+ var path24 = paths[index], value = baseGet(object2, path24);
1704
+ if (predicate(value, path24)) {
1705
+ baseSet(result2, castPath(path24, object2), value);
1706
1706
  }
1707
1707
  }
1708
1708
  return result2;
1709
1709
  }
1710
- function basePropertyDeep(path22) {
1710
+ function basePropertyDeep(path24) {
1711
1711
  return function(object2) {
1712
- return baseGet(object2, path22);
1712
+ return baseGet(object2, path24);
1713
1713
  };
1714
1714
  }
1715
1715
  function basePullAll(array2, values2, iteratee2, comparator) {
@@ -1783,14 +1783,14 @@ var require_lodash = __commonJS({
1783
1783
  var array2 = values(collection);
1784
1784
  return shuffleSelf(array2, baseClamp(n, 0, array2.length));
1785
1785
  }
1786
- function baseSet(object2, path22, value, customizer) {
1786
+ function baseSet(object2, path24, value, customizer) {
1787
1787
  if (!isObject2(object2)) {
1788
1788
  return object2;
1789
1789
  }
1790
- path22 = castPath(path22, object2);
1791
- var index = -1, length = path22.length, lastIndex = length - 1, nested = object2;
1790
+ path24 = castPath(path24, object2);
1791
+ var index = -1, length = path24.length, lastIndex = length - 1, nested = object2;
1792
1792
  while (nested != null && ++index < length) {
1793
- var key = toKey(path22[index]), newValue = value;
1793
+ var key = toKey(path24[index]), newValue = value;
1794
1794
  if (key === "__proto__" || key === "constructor" || key === "prototype") {
1795
1795
  return object2;
1796
1796
  }
@@ -1798,7 +1798,7 @@ var require_lodash = __commonJS({
1798
1798
  var objValue = nested[key];
1799
1799
  newValue = customizer ? customizer(objValue, key, nested) : undefined2;
1800
1800
  if (newValue === undefined2) {
1801
- newValue = isObject2(objValue) ? objValue : isIndex(path22[index + 1]) ? [] : {};
1801
+ newValue = isObject2(objValue) ? objValue : isIndex(path24[index + 1]) ? [] : {};
1802
1802
  }
1803
1803
  }
1804
1804
  assignValue(nested, key, newValue);
@@ -1964,14 +1964,14 @@ var require_lodash = __commonJS({
1964
1964
  }
1965
1965
  return result2;
1966
1966
  }
1967
- function baseUnset(object2, path22) {
1968
- path22 = castPath(path22, object2);
1969
- var index = -1, length = path22.length;
1967
+ function baseUnset(object2, path24) {
1968
+ path24 = castPath(path24, object2);
1969
+ var index = -1, length = path24.length;
1970
1970
  if (!length) {
1971
1971
  return true;
1972
1972
  }
1973
1973
  while (++index < length) {
1974
- var key = toKey(path22[index]);
1974
+ var key = toKey(path24[index]);
1975
1975
  if (key === "__proto__" && !hasOwnProperty.call(object2, "__proto__")) {
1976
1976
  return false;
1977
1977
  }
@@ -1979,11 +1979,11 @@ var require_lodash = __commonJS({
1979
1979
  return false;
1980
1980
  }
1981
1981
  }
1982
- var obj = parent(object2, path22);
1983
- return obj == null || delete obj[toKey(last(path22))];
1982
+ var obj = parent(object2, path24);
1983
+ return obj == null || delete obj[toKey(last(path24))];
1984
1984
  }
1985
- function baseUpdate(object2, path22, updater, customizer) {
1986
- return baseSet(object2, path22, updater(baseGet(object2, path22)), customizer);
1985
+ function baseUpdate(object2, path24, updater, customizer) {
1986
+ return baseSet(object2, path24, updater(baseGet(object2, path24)), customizer);
1987
1987
  }
1988
1988
  function baseWhile(array2, predicate, isDrop, fromRight) {
1989
1989
  var length = array2.length, index = fromRight ? length : -1;
@@ -2866,11 +2866,11 @@ var require_lodash = __commonJS({
2866
2866
  var match = source.match(reWrapDetails);
2867
2867
  return match ? match[1].split(reSplitDetails) : [];
2868
2868
  }
2869
- function hasPath(object2, path22, hasFunc) {
2870
- path22 = castPath(path22, object2);
2871
- var index = -1, length = path22.length, result2 = false;
2869
+ function hasPath(object2, path24, hasFunc) {
2870
+ path24 = castPath(path24, object2);
2871
+ var index = -1, length = path24.length, result2 = false;
2872
2872
  while (++index < length) {
2873
- var key = toKey(path22[index]);
2873
+ var key = toKey(path24[index]);
2874
2874
  if (!(result2 = object2 != null && hasFunc(object2, key))) {
2875
2875
  break;
2876
2876
  }
@@ -3072,8 +3072,8 @@ var require_lodash = __commonJS({
3072
3072
  return apply(func, this, otherArgs);
3073
3073
  };
3074
3074
  }
3075
- function parent(object2, path22) {
3076
- return path22.length < 2 ? object2 : baseGet(object2, baseSlice(path22, 0, -1));
3075
+ function parent(object2, path24) {
3076
+ return path24.length < 2 ? object2 : baseGet(object2, baseSlice(path24, 0, -1));
3077
3077
  }
3078
3078
  function reorder(array2, indexes) {
3079
3079
  var arrLength = array2.length, length = nativeMin(indexes.length, arrLength), oldArray = copyArray(array2);
@@ -3708,10 +3708,10 @@ var require_lodash = __commonJS({
3708
3708
  }
3709
3709
  return isString(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1;
3710
3710
  }
3711
- var invokeMap = baseRest(function(collection, path22, args) {
3712
- var index = -1, isFunc = typeof path22 == "function", result2 = isArrayLike(collection) ? Array2(collection.length) : [];
3711
+ var invokeMap = baseRest(function(collection, path24, args) {
3712
+ var index = -1, isFunc = typeof path24 == "function", result2 = isArrayLike(collection) ? Array2(collection.length) : [];
3713
3713
  baseEach(collection, function(value) {
3714
- result2[++index] = isFunc ? apply(path22, value, args) : baseInvoke(value, path22, args);
3714
+ result2[++index] = isFunc ? apply(path24, value, args) : baseInvoke(value, path24, args);
3715
3715
  });
3716
3716
  return result2;
3717
3717
  });
@@ -4363,15 +4363,15 @@ var require_lodash = __commonJS({
4363
4363
  function functionsIn(object2) {
4364
4364
  return object2 == null ? [] : baseFunctions(object2, keysIn(object2));
4365
4365
  }
4366
- function get(object2, path22, defaultValue) {
4367
- var result2 = object2 == null ? undefined2 : baseGet(object2, path22);
4366
+ function get(object2, path24, defaultValue) {
4367
+ var result2 = object2 == null ? undefined2 : baseGet(object2, path24);
4368
4368
  return result2 === undefined2 ? defaultValue : result2;
4369
4369
  }
4370
- function has(object2, path22) {
4371
- return object2 != null && hasPath(object2, path22, baseHas);
4370
+ function has(object2, path24) {
4371
+ return object2 != null && hasPath(object2, path24, baseHas);
4372
4372
  }
4373
- function hasIn(object2, path22) {
4374
- return object2 != null && hasPath(object2, path22, baseHasIn);
4373
+ function hasIn(object2, path24) {
4374
+ return object2 != null && hasPath(object2, path24, baseHasIn);
4375
4375
  }
4376
4376
  var invert = createInverter(function(result2, value, key) {
4377
4377
  if (value != null && typeof value.toString != "function") {
@@ -4424,10 +4424,10 @@ var require_lodash = __commonJS({
4424
4424
  return result2;
4425
4425
  }
4426
4426
  var isDeep = false;
4427
- paths = arrayMap(paths, function(path22) {
4428
- path22 = castPath(path22, object2);
4429
- isDeep || (isDeep = path22.length > 1);
4430
- return path22;
4427
+ paths = arrayMap(paths, function(path24) {
4428
+ path24 = castPath(path24, object2);
4429
+ isDeep || (isDeep = path24.length > 1);
4430
+ return path24;
4431
4431
  });
4432
4432
  copyObject(object2, getAllKeysIn(object2), result2);
4433
4433
  if (isDeep) {
@@ -4453,19 +4453,19 @@ var require_lodash = __commonJS({
4453
4453
  return [prop];
4454
4454
  });
4455
4455
  predicate = getIteratee(predicate);
4456
- return basePickBy(object2, props, function(value, path22) {
4457
- return predicate(value, path22[0]);
4456
+ return basePickBy(object2, props, function(value, path24) {
4457
+ return predicate(value, path24[0]);
4458
4458
  });
4459
4459
  }
4460
- function result(object2, path22, defaultValue) {
4461
- path22 = castPath(path22, object2);
4462
- var index = -1, length = path22.length;
4460
+ function result(object2, path24, defaultValue) {
4461
+ path24 = castPath(path24, object2);
4462
+ var index = -1, length = path24.length;
4463
4463
  if (!length) {
4464
4464
  length = 1;
4465
4465
  object2 = undefined2;
4466
4466
  }
4467
4467
  while (++index < length) {
4468
- var value = object2 == null ? undefined2 : object2[toKey(path22[index])];
4468
+ var value = object2 == null ? undefined2 : object2[toKey(path24[index])];
4469
4469
  if (value === undefined2) {
4470
4470
  index = length;
4471
4471
  value = defaultValue;
@@ -4474,12 +4474,12 @@ var require_lodash = __commonJS({
4474
4474
  }
4475
4475
  return object2;
4476
4476
  }
4477
- function set2(object2, path22, value) {
4478
- return object2 == null ? object2 : baseSet(object2, path22, value);
4477
+ function set2(object2, path24, value) {
4478
+ return object2 == null ? object2 : baseSet(object2, path24, value);
4479
4479
  }
4480
- function setWith(object2, path22, value, customizer) {
4480
+ function setWith(object2, path24, value, customizer) {
4481
4481
  customizer = typeof customizer == "function" ? customizer : undefined2;
4482
- return object2 == null ? object2 : baseSet(object2, path22, value, customizer);
4482
+ return object2 == null ? object2 : baseSet(object2, path24, value, customizer);
4483
4483
  }
4484
4484
  var toPairs = createToPairs(keys);
4485
4485
  var toPairsIn = createToPairs(keysIn);
@@ -4501,15 +4501,15 @@ var require_lodash = __commonJS({
4501
4501
  });
4502
4502
  return accumulator;
4503
4503
  }
4504
- function unset(object2, path22) {
4505
- return object2 == null ? true : baseUnset(object2, path22);
4504
+ function unset(object2, path24) {
4505
+ return object2 == null ? true : baseUnset(object2, path24);
4506
4506
  }
4507
- function update(object2, path22, updater) {
4508
- return object2 == null ? object2 : baseUpdate(object2, path22, castFunction(updater));
4507
+ function update(object2, path24, updater) {
4508
+ return object2 == null ? object2 : baseUpdate(object2, path24, castFunction(updater));
4509
4509
  }
4510
- function updateWith(object2, path22, updater, customizer) {
4510
+ function updateWith(object2, path24, updater, customizer) {
4511
4511
  customizer = typeof customizer == "function" ? customizer : undefined2;
4512
- return object2 == null ? object2 : baseUpdate(object2, path22, castFunction(updater), customizer);
4512
+ return object2 == null ? object2 : baseUpdate(object2, path24, castFunction(updater), customizer);
4513
4513
  }
4514
4514
  function values(object2) {
4515
4515
  return object2 == null ? [] : baseValues(object2, keys(object2));
@@ -4895,17 +4895,17 @@ var require_lodash = __commonJS({
4895
4895
  function matches(source) {
4896
4896
  return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
4897
4897
  }
4898
- function matchesProperty(path22, srcValue) {
4899
- return baseMatchesProperty(path22, baseClone(srcValue, CLONE_DEEP_FLAG));
4898
+ function matchesProperty(path24, srcValue) {
4899
+ return baseMatchesProperty(path24, baseClone(srcValue, CLONE_DEEP_FLAG));
4900
4900
  }
4901
- var method = baseRest(function(path22, args) {
4901
+ var method = baseRest(function(path24, args) {
4902
4902
  return function(object2) {
4903
- return baseInvoke(object2, path22, args);
4903
+ return baseInvoke(object2, path24, args);
4904
4904
  };
4905
4905
  });
4906
4906
  var methodOf = baseRest(function(object2, args) {
4907
- return function(path22) {
4908
- return baseInvoke(object2, path22, args);
4907
+ return function(path24) {
4908
+ return baseInvoke(object2, path24, args);
4909
4909
  };
4910
4910
  });
4911
4911
  function mixin(object2, source, options) {
@@ -4952,12 +4952,12 @@ var require_lodash = __commonJS({
4952
4952
  var over = createOver(arrayMap);
4953
4953
  var overEvery = createOver(arrayEvery);
4954
4954
  var overSome = createOver(arraySome);
4955
- function property(path22) {
4956
- return isKey(path22) ? baseProperty(toKey(path22)) : basePropertyDeep(path22);
4955
+ function property(path24) {
4956
+ return isKey(path24) ? baseProperty(toKey(path24)) : basePropertyDeep(path24);
4957
4957
  }
4958
4958
  function propertyOf(object2) {
4959
- return function(path22) {
4960
- return object2 == null ? undefined2 : baseGet(object2, path22);
4959
+ return function(path24) {
4960
+ return object2 == null ? undefined2 : baseGet(object2, path24);
4961
4961
  };
4962
4962
  }
4963
4963
  var range = createRange();
@@ -5410,12 +5410,12 @@ var require_lodash = __commonJS({
5410
5410
  LazyWrapper.prototype.findLast = function(predicate) {
5411
5411
  return this.reverse().find(predicate);
5412
5412
  };
5413
- LazyWrapper.prototype.invokeMap = baseRest(function(path22, args) {
5414
- if (typeof path22 == "function") {
5413
+ LazyWrapper.prototype.invokeMap = baseRest(function(path24, args) {
5414
+ if (typeof path24 == "function") {
5415
5415
  return new LazyWrapper(this);
5416
5416
  }
5417
5417
  return this.map(function(value) {
5418
- return baseInvoke(value, path22, args);
5418
+ return baseInvoke(value, path24, args);
5419
5419
  });
5420
5420
  });
5421
5421
  LazyWrapper.prototype.reject = function(predicate) {
@@ -6384,10 +6384,10 @@ function mergeDefs(...defs) {
6384
6384
  function cloneDef(schema) {
6385
6385
  return mergeDefs(schema._zod.def);
6386
6386
  }
6387
- function getElementAtPath(obj, path22) {
6388
- if (!path22)
6387
+ function getElementAtPath(obj, path24) {
6388
+ if (!path24)
6389
6389
  return obj;
6390
- return path22.reduce((acc, key) => acc?.[key], obj);
6390
+ return path24.reduce((acc, key) => acc?.[key], obj);
6391
6391
  }
6392
6392
  function promiseAllObject(promisesObj) {
6393
6393
  const keys = Object.keys(promisesObj);
@@ -6727,11 +6727,11 @@ function explicitlyAborted(x, startIndex = 0) {
6727
6727
  }
6728
6728
  return false;
6729
6729
  }
6730
- function prefixIssues(path22, issues) {
6730
+ function prefixIssues(path24, issues) {
6731
6731
  return issues.map((iss) => {
6732
6732
  var _a3;
6733
6733
  (_a3 = iss).path ?? (_a3.path = []);
6734
- iss.path.unshift(path22);
6734
+ iss.path.unshift(path24);
6735
6735
  return iss;
6736
6736
  });
6737
6737
  }
@@ -7181,16 +7181,16 @@ function flattenError(error62, mapper = (issue2) => issue2.message) {
7181
7181
  }
7182
7182
  function formatError(error62, mapper = (issue2) => issue2.message) {
7183
7183
  const fieldErrors = { _errors: [] };
7184
- const processError = (error63, path22 = []) => {
7184
+ const processError = (error63, path24 = []) => {
7185
7185
  for (const issue2 of error63.issues) {
7186
7186
  if (issue2.code === "invalid_union" && issue2.errors.length) {
7187
- issue2.errors.map((issues) => processError({ issues }, [...path22, ...issue2.path]));
7187
+ issue2.errors.map((issues) => processError({ issues }, [...path24, ...issue2.path]));
7188
7188
  } else if (issue2.code === "invalid_key") {
7189
- processError({ issues: issue2.issues }, [...path22, ...issue2.path]);
7189
+ processError({ issues: issue2.issues }, [...path24, ...issue2.path]);
7190
7190
  } else if (issue2.code === "invalid_element") {
7191
- processError({ issues: issue2.issues }, [...path22, ...issue2.path]);
7191
+ processError({ issues: issue2.issues }, [...path24, ...issue2.path]);
7192
7192
  } else {
7193
- const fullpath = [...path22, ...issue2.path];
7193
+ const fullpath = [...path24, ...issue2.path];
7194
7194
  if (fullpath.length === 0) {
7195
7195
  fieldErrors._errors.push(mapper(issue2));
7196
7196
  } else {
@@ -7229,17 +7229,17 @@ function formatError(error62, mapper = (issue2) => issue2.message) {
7229
7229
  }
7230
7230
  function treeifyError(error62, mapper = (issue2) => issue2.message) {
7231
7231
  const result = { errors: [] };
7232
- const processError = (error63, path22 = []) => {
7232
+ const processError = (error63, path24 = []) => {
7233
7233
  var _a3;
7234
7234
  for (const issue2 of error63.issues) {
7235
7235
  if (issue2.code === "invalid_union" && issue2.errors.length) {
7236
- issue2.errors.map((issues) => processError({ issues }, [...path22, ...issue2.path]));
7236
+ issue2.errors.map((issues) => processError({ issues }, [...path24, ...issue2.path]));
7237
7237
  } else if (issue2.code === "invalid_key") {
7238
- processError({ issues: issue2.issues }, [...path22, ...issue2.path]);
7238
+ processError({ issues: issue2.issues }, [...path24, ...issue2.path]);
7239
7239
  } else if (issue2.code === "invalid_element") {
7240
- processError({ issues: issue2.issues }, [...path22, ...issue2.path]);
7240
+ processError({ issues: issue2.issues }, [...path24, ...issue2.path]);
7241
7241
  } else {
7242
- const fullpath = [...path22, ...issue2.path];
7242
+ const fullpath = [...path24, ...issue2.path];
7243
7243
  if (fullpath.length === 0) {
7244
7244
  result.errors.push(mapper(issue2));
7245
7245
  continue;
@@ -7278,8 +7278,8 @@ function treeifyError(error62, mapper = (issue2) => issue2.message) {
7278
7278
  }
7279
7279
  function toDotPath(_path) {
7280
7280
  const segs = [];
7281
- const path22 = _path.map((seg) => typeof seg === "object" ? seg.key : seg);
7282
- for (const seg of path22) {
7281
+ const path24 = _path.map((seg) => typeof seg === "object" ? seg.key : seg);
7282
+ for (const seg of path24) {
7283
7283
  if (typeof seg === "number")
7284
7284
  segs.push(`[${seg}]`);
7285
7285
  else if (typeof seg === "symbol")
@@ -24381,13 +24381,13 @@ function resolveRef(ref, ctx) {
24381
24381
  if (!ref.startsWith("#")) {
24382
24382
  throw new Error("External $ref is not supported, only local refs (#/...) are allowed");
24383
24383
  }
24384
- const path22 = ref.slice(1).split("/").filter(Boolean);
24385
- if (path22.length === 0) {
24384
+ const path24 = ref.slice(1).split("/").filter(Boolean);
24385
+ if (path24.length === 0) {
24386
24386
  return ctx.rootSchema;
24387
24387
  }
24388
24388
  const defsKey = ctx.version === "draft-2020-12" ? "$defs" : "definitions";
24389
- if (path22[0] === defsKey) {
24390
- const key = path22[1] === void 0 ? void 0 : decodeJSONPointerSegment(path22[1]);
24389
+ if (path24[0] === defsKey) {
24390
+ const key = path24[1] === void 0 ? void 0 : decodeJSONPointerSegment(path24[1]);
24391
24391
  if (!key || !ctx.defs[key]) {
24392
24392
  throw new Error(`Reference not found: ${ref}`);
24393
24393
  }
@@ -25274,6 +25274,9 @@ function enabled(what, markers) {
25274
25274
  function Packages(what, example) {
25275
25275
  return StringsSchema.describe(what + ", installed once and kept (e.g. " + example + ").");
25276
25276
  }
25277
+ function secret(schema) {
25278
+ return schema.meta({ secret: true });
25279
+ }
25277
25280
 
25278
25281
  // src/core/schema/config.ts
25279
25282
  var import_lodash = __toESM(require_lodash(), 1);
@@ -25342,10 +25345,15 @@ var HarnessSchema = external_exports.strictObject({
25342
25345
  uvPackage: external_exports.string().optional().describe("Python package installed with `uv tool install` inside the sandbox (e.g. aider-chat)."),
25343
25346
  uvBin: external_exports.string().optional().describe("Command the uv package provides."),
25344
25347
  arguments: StringsSchema.describe("Arguments always passed to the agent."),
25345
- environment: external_exports.record(external_exports.string(), external_exports.string()).describe("Environment variables for the agent."),
25348
+ environment: external_exports.record(external_exports.string(), secret(external_exports.string())).describe(
25349
+ "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."
25350
+ ),
25346
25351
  home: HarnessHomeSchema.optional().describe(
25347
25352
  "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)."
25348
25353
  ),
25354
+ localState: external_exports.record(external_exports.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/), SubfolderSchema).optional().describe(
25355
+ "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."
25356
+ ),
25349
25357
  resumeArguments: StringsSchema.optional().describe(
25350
25358
  "Arguments used when the agent is restarted in place (e.g. after an account switch) so it resumes the conversation."
25351
25359
  ),
@@ -25397,6 +25405,9 @@ var ClaudeProfileSchema = external_exports.strictObject({
25397
25405
  globalStateFile: external_exports.string().describe('Your .claude.json, or "auto". Empty string = do not copy.'),
25398
25406
  copyCredentials: external_exports.boolean().describe("Copy your Claude LOGIN into the sandbox. Prefer sandbox account instead."),
25399
25407
  overwrite: external_exports.boolean().describe("Refresh these settings from this PC on every launch."),
25408
+ sharePluginsAcrossAccounts: external_exports.boolean().describe(
25409
+ "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."
25410
+ ),
25400
25411
  syncHistory: external_exports.boolean().describe("Bring conversation history in, and sync new history back (path-translated)."),
25401
25412
  historyScope: external_exports.enum(["project", "all"]).describe(
25402
25413
  `Which history comes in: "project" = only the projects in this sandbox (other projects' conversations, file backups and prompts stay on this PC), "all" = everything. Only this sandbox's projects ever sync back.`
@@ -25473,7 +25484,10 @@ var NetworkSchema = external_exports.strictObject({
25473
25484
  "Reach servers in the sandbox from this PC: http://localhost:<pc> here goes to <sandbox> inside, while it runs. Nothing else on your network can use them."
25474
25485
  ),
25475
25486
  dns: external_exports.array(external_exports.string().regex(/^\d{1,3}(\.\d{1,3}){3}$/, "an IPv4 address like 1.1.1.1")).describe("DNS servers for the sandbox instead of your network's, e.g. 1.1.1.1 and 9.9.9.9."),
25476
- proxy: external_exports.string().regex(/^(https?:\/\/[^\s]+)?$/, "http://host:port").describe(
25487
+ proxy: external_exports.string().regex(/^(https?:\/\/[^\s]+)?$/, "http://host:port").refine(
25488
+ (v) => !/^https?:\/\/[^/?#]*@/i.test(v),
25489
+ "no user name or password in the address (it would be stored in plain text and visible to the agent): use a proxy that needs no login"
25490
+ ).describe(
25477
25491
  "An HTTP proxy the sandbox uses to reach the internet (HTTP_PROXY / HTTPS_PROXY for everything in it), e.g. http://proxy.corp:8080. Empty = none."
25478
25492
  )
25479
25493
  });
@@ -25875,6 +25889,17 @@ var APPS = [
25875
25889
  exe: "lazygit.exe",
25876
25890
  cli: true
25877
25891
  },
25892
+ {
25893
+ id: "jj",
25894
+ name: "Jujutsu (jj)",
25895
+ category: "git",
25896
+ about: "Git-compatible version control; conflicts do not block a rebase. Pilot, untested with worktrees.",
25897
+ size: "10 MB",
25898
+ source: gh("jj-vcs/jj", "^jj-v[\\d.]+-x86_64-pc-windows-msvc\\.zip$"),
25899
+ exe: "jj.exe",
25900
+ cli: true,
25901
+ fullGitOnly: true
25902
+ },
25878
25903
  // ---- utilities
25879
25904
  {
25880
25905
  id: "7zip",
@@ -26403,6 +26428,26 @@ var APPS = [
26403
26428
  source: gh("gitleaks/gitleaks", "^gitleaks_[\\d.]+_windows_x64\\.zip$"),
26404
26429
  exe: "gitleaks.exe",
26405
26430
  cli: true
26431
+ },
26432
+ {
26433
+ id: "ast-grep",
26434
+ name: "ast-grep",
26435
+ category: "cli",
26436
+ about: "Search and rewrite code by its syntax tree (ast-grep, sg); prints only the matches.",
26437
+ size: "15 MB",
26438
+ source: gh("ast-grep/ast-grep", "^app-x86_64-pc-windows-msvc\\.zip$"),
26439
+ exe: "ast-grep.exe",
26440
+ cli: true
26441
+ },
26442
+ {
26443
+ id: "rust-analyzer",
26444
+ name: "rust-analyzer",
26445
+ category: "cli",
26446
+ about: "Rust language server: type errors and go-to-definition without cargo (for editors and the Claude LSP plugin).",
26447
+ size: "18 MB",
26448
+ source: gh("rust-lang/rust-analyzer", "^rust-analyzer-x86_64-pc-windows-msvc\\.zip$"),
26449
+ exe: "rust-analyzer.exe",
26450
+ cli: true
26406
26451
  }
26407
26452
  ];
26408
26453
 
@@ -26471,6 +26516,33 @@ var ResumeSchema = external_exports.strictObject({
26471
26516
  )
26472
26517
  });
26473
26518
 
26519
+ // src/core/schema/web.ts
26520
+ var WebSchema = external_exports.strictObject({
26521
+ enabled: external_exports.boolean().describe(
26522
+ "(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)."
26523
+ ),
26524
+ port: external_exports.number().int().min(1024).max(65535).describe("Port of the web UI on 127.0.0.1 (this PC only). Pick another when it is taken.")
26525
+ });
26526
+
26527
+ // src/core/schema/vpn.ts
26528
+ var VPN_PROVIDERS = ["nordvpn", "openvpn-file"];
26529
+ var VpnSchema = external_exports.strictObject({
26530
+ enabled: external_exports.boolean().describe(
26531
+ "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)."
26532
+ ),
26533
+ provider: external_exports.enum(VPN_PROVIDERS).describe(
26534
+ "nordvpn: a recommended NordVPN server is picked at every launch. openvpn-file: your own .ovpn file (configFile)."
26535
+ ),
26536
+ protocol: external_exports.enum(["udp", "tcp"]).describe("udp is faster; tcp gets through networks that block udp."),
26537
+ country: external_exports.string().regex(/^([A-Za-z][A-Za-z .'-]{0,39})?$/, "a country name or code like uk or Germany").describe("nordvpn: the country of the server, e.g. uk, us or Germany. Empty = the best server anywhere."),
26538
+ configFile: external_exports.string().describe(
26539
+ "openvpn-file: the .ovpn file on this PC (its certificates inside it). Files that run programs (script-security, up, down, plugin ...) are refused. A project's file can never set this."
26540
+ ),
26541
+ killSwitch: external_exports.boolean().describe(
26542
+ "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."
26543
+ )
26544
+ });
26545
+
26474
26546
  // src/core/schema/config.ts
26475
26547
  var ConfigSchema = external_exports.strictObject({
26476
26548
  $schema: SchemaRefSchema.optional(),
@@ -26483,7 +26555,9 @@ var ConfigSchema = external_exports.strictObject({
26483
26555
  sandbox: SandboxSchema,
26484
26556
  sharing: SharingSchema,
26485
26557
  storage: external_exports.strictObject({
26486
- root: external_exports.string().min(1).describe("Where everything is kept on this PC (tools, databases, logins, launches)."),
26558
+ root: external_exports.string().min(1).describe(
26559
+ "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."
26560
+ ),
26487
26561
  persistAgentState: external_exports.boolean().describe("Keep agent logins and history between sandboxes."),
26488
26562
  dataName: NameSchema.describe("Name of the persistent data set (C:\\AgentData) shared by all workspaces."),
26489
26563
  markSandboxFiles: external_exports.boolean().describe(
@@ -26494,6 +26568,7 @@ var ConfigSchema = external_exports.strictObject({
26494
26568
  )
26495
26569
  }),
26496
26570
  network: NetworkSchema,
26571
+ vpn: VpnSchema,
26497
26572
  provisioning: ProvisioningSchema,
26498
26573
  downloads: DownloadsSchema,
26499
26574
  toolchains: ToolchainsSchema,
@@ -26501,6 +26576,7 @@ var ConfigSchema = external_exports.strictObject({
26501
26576
  "Databases running inside the sandbox. Data persists in C:\\AgentData\\databases; each one starts at boot."
26502
26577
  ),
26503
26578
  attach: AttachSchema,
26579
+ web: WebSchema,
26504
26580
  agentCommands: AgentCommandsSchema,
26505
26581
  secrets: SecretsSchema,
26506
26582
  personalization: toggle("Copy your desktop look (theme, accent, taskbar, wallpaper, ...) into the sandbox."),
@@ -26533,6 +26609,8 @@ var LocalOverridesSchema = external_exports.strictObject({
26533
26609
  sandbox: SandboxSchema.omit({ cpuLimit: true, pageFileMb: true }).partial(),
26534
26610
  // A project may block more (the LAN, hosts); it never opens hosts, ports, DNS or a proxy.
26535
26611
  network: NetworkSchema.pick({ blockPrivateRanges: true, blockHosts: true }).partial(),
26612
+ // A project may turn the kill switch on, never off, and never choose a VPN, a server, a file or a login.
26613
+ vpn: VpnSchema.pick({ killSwitch: true }).partial(),
26536
26614
  provisioning: ProvisioningSchema.pick({ copyFromHost: true, fallbackToInstall: true, refresh: true }).extend({ git: GitSchema.partial(), terminal: toggle("Windows Terminal as the sandbox window.").partial() }).partial(),
26537
26615
  downloads: DownloadsSchema.partial(),
26538
26616
  // Every toolchain setting, each one optional (a project usually only switches languages on or pins a version).
@@ -26673,6 +26751,16 @@ var ProjectStatusSchema = external_exports.object({
26673
26751
  databases: external_exports.array(external_exports.object({ database: Text(32), port: external_exports.number().int() })).max(16),
26674
26752
  summary: external_exports.array(Text(512)).max(64)
26675
26753
  });
26754
+ var VpnStatusSchema = external_exports.object({
26755
+ state: external_exports.enum(["off", "starting", "up", "failed"]),
26756
+ message: Text(2e3),
26757
+ killSwitch: external_exports.boolean(),
26758
+ /** The server's name, e.g. uk2201.nordvpn.com. */
26759
+ server: Text(128).optional(),
26760
+ /** What the sandbox's traffic looks like from outside, once the tunnel is up. */
26761
+ publicIp: Text(64).optional(),
26762
+ updatedAt: TimeSchema
26763
+ });
26676
26764
 
26677
26765
  // src/guest/runtime/ports.ts
26678
26766
  import net from "node:net";
@@ -26869,20 +26957,25 @@ var scan = (schema, dir) => {
26869
26957
  var RunDir = class {
26870
26958
  root;
26871
26959
  sandboxFile;
26960
+ vpnFile;
26872
26961
  requestsDir;
26873
26962
  responsesDir;
26874
26963
  sessionsDir;
26875
26964
  projectsDir;
26876
26965
  /** audit.processes: programs the sandbox started, in small .jsonl files the host takes in and deletes. */
26877
26966
  auditDir;
26967
+ /** One-shot secrets the host hands over (see secrets.ts). Next to run, not in it: shared-use users can change run. */
26968
+ secretsDir;
26878
26969
  constructor(dataDir2) {
26879
26970
  this.root = path5.join(dataDir2, "run");
26880
26971
  this.sandboxFile = path5.join(this.root, "sandbox.json");
26972
+ this.vpnFile = path5.join(this.root, "vpn.json");
26881
26973
  this.requestsDir = path5.join(this.root, "requests");
26882
26974
  this.responsesDir = path5.join(this.root, "responses");
26883
26975
  this.sessionsDir = path5.join(this.root, "sessions");
26884
26976
  this.projectsDir = path5.join(this.root, "projects");
26885
26977
  this.auditDir = path5.join(this.root, "audit");
26978
+ this.secretsDir = path5.join(dataDir2, "secrets");
26886
26979
  }
26887
26980
  requestFile(id) {
26888
26981
  return path5.join(this.requestsDir, safeId(id) + ".json");
@@ -26896,9 +26989,15 @@ var RunDir = class {
26896
26989
  projectFile(name) {
26897
26990
  return path5.join(this.projectsDir, safeId(name) + ".json");
26898
26991
  }
26992
+ secretFile(id) {
26993
+ return path5.join(this.secretsDir, safeId(id) + ".json");
26994
+ }
26899
26995
  readSandboxStatus() {
26900
26996
  return readValid(SandboxStatusSchema, this.sandboxFile);
26901
26997
  }
26998
+ readVpnStatus() {
26999
+ return readValid(VpnStatusSchema, this.vpnFile);
27000
+ }
26902
27001
  readSession(id) {
26903
27002
  return readValid(SessionStatusSchema, this.sessionFile(id));
26904
27003
  }
@@ -27894,15 +27993,46 @@ async function setupDatabase(env, plan) {
27894
27993
  await SERVERS[plan.database].start(env, plan);
27895
27994
  }
27896
27995
 
27996
+ // src/guest/setup/environment.ts
27997
+ import path23 from "node:path";
27998
+
27999
+ // src/guest/setup/path-plan.ts
28000
+ import path22 from "node:path";
28001
+ function pathKey(folder) {
28002
+ const slashes = folder.trim().replace(/^"|"$/g, "").replace(/\//g, "\\");
28003
+ return (slashes.length > 3 ? slashes.replace(/\\+$/, "") : slashes).toLowerCase();
28004
+ }
28005
+ function splitPath(value) {
28006
+ return value.split(";").map((part) => part.trim().replace(/^"|"$/g, "")).filter(Boolean);
28007
+ }
28008
+ function planPath(input2) {
28009
+ const seen = /* @__PURE__ */ new Set();
28010
+ const result = [];
28011
+ for (const entry of input2.entries.flatMap(splitPath)) {
28012
+ const key = pathKey(entry);
28013
+ if (seen.has(key) || input2.drop?.(entry) || !input2.exists(entry)) continue;
28014
+ seen.add(key);
28015
+ result.push(entry);
28016
+ }
28017
+ return result;
28018
+ }
28019
+ function isPinnedNodeDir(folder, nvmHome2) {
28020
+ const key = pathKey(folder);
28021
+ const home = pathKey(nvmHome2);
28022
+ return key.startsWith(home + "\\") && /^v\d/.test(path22.win32.basename(key));
28023
+ }
28024
+
27897
28025
  // src/guest/setup/environment.ts
27898
28026
  function addMachineEnvironment(vars, dirs, additive = false) {
27899
28027
  if (!isWin || dryRun || testMode) return;
28028
+ const planned = planPath({ entries: dirs, exists, drop: (dir) => isPinnedNodeDir(dir, nvmHome()) });
27900
28029
  try {
27901
- runScriptWithJson("set-machine-environment.ps1", "SettingsFile", { vars, path: null, add: dirs, additive });
28030
+ runScriptWithJson("set-machine-environment.ps1", "SettingsFile", { vars, path: null, add: planned, additive });
27902
28031
  } catch (e) {
27903
28032
  warn("Could not add to the environment: " + errMsg(e));
27904
28033
  }
27905
28034
  }
28035
+ var nvmHome = () => path23.join(toolsDir, "nvm");
27906
28036
 
27907
28037
  // src/guest/databases/sbx-db.ts
27908
28038
  var USAGE = "Usage: sbx-db [list] | sbx-db start <name> | sbx-db stop <name>";