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
@@ -4,10 +4,14 @@ import { type DataEntry } from '../../commands/data/collect.js';
4
4
  import type { RepairResult } from '../../commands/repair/types.js';
5
5
  import { type LogFile, type SetupReport, type UpdateStatus } from '../../services/index.js';
6
6
  import { type App, type ListOptions, type ListResult } from '../../tui/index.js';
7
- import type { Step } from '../../tui/index.js';
8
- import type { ShellExit } from '../shell.js';
9
7
  import { ListPage, type Outcome } from './list-page.js';
10
8
  export interface MaintenanceModel {
9
+ /** The data folder row (where the sandbox keeps its data). */
10
+ readonly dataFolder: {
11
+ label: string;
12
+ hint: string;
13
+ description: string;
14
+ };
11
15
  /** Null until measured (measuring a big data folder takes a while). */
12
16
  readonly data: {
13
17
  entries: DataEntry[];
@@ -48,7 +52,6 @@ export declare class MaintenancePage extends ListPage<string> {
48
52
  private doctorRows;
49
53
  private repairRows;
50
54
  private setupReport;
51
- private seen;
52
55
  private settings;
53
56
  private readonly migrate;
54
57
  private readonly health;
@@ -59,8 +62,6 @@ export declare class MaintenancePage extends ListPage<string> {
59
62
  private model;
60
63
  protected load(): Promise<void>;
61
64
  protected options(): ListOptions<string>;
62
- /** Opening a category loads what it shows (the cheap ones; data is measured on request). */
63
- protected afterKey(): Promise<Step<ShellExit>>;
64
65
  private readSettings;
65
66
  private updateStatus;
66
67
  /** The Updates category: look, install, go back, switch automatic updates. */
@@ -69,8 +70,11 @@ export declare class MaintenancePage extends ListPage<string> {
69
70
  private loadDoctor;
70
71
  private loadSetup;
71
72
  protected act(result: ListResult<string>): Promise<Outcome<string>>;
73
+ /** The key an Enter on an Updates row stands for. */
74
+ private updateKey;
72
75
  private measure;
73
76
  private remove;
77
+ /** Repair shows what it does as it goes and asks before it changes anything, so it runs on the normal screen. */
74
78
  private repair;
75
79
  private enable;
76
80
  }
@@ -1,5 +1,6 @@
1
- // Tab 7: keeping things in shape. What is stored (with clean-up), the logs, the doctor, repair, this PC's setup, and
2
- // the less common commands. Each is a category on the left and loads when you open it.
1
+ // Section 7: keeping things in shape. Updates (the program and your saved settings), Data & storage (the data folder,
2
+ // what is stored, clean-up), Health (doctor, repair and this PC's setup together), the logs, and the less common
3
+ // commands. Each is a category on the left and loads when you open it.
3
4
  import _ from 'lodash';
4
5
  import { humanBytes } from '../../../core/disk.js';
5
6
  import { userDir } from '../../../core/config/index.js';
@@ -11,18 +12,37 @@ import { DataService, HealthService, LogsService, MigrateService, NPM_UPDATE_COM
11
12
  import { describeResult } from '../../commands/maintenance/update.js';
12
13
  import { Text, Theme, } from '../../tui/index.js';
13
14
  import { CommandForm } from '../command-form.js';
15
+ import { DataFolderFlow, dataFolderRow } from '../data-folder.js';
14
16
  import { ListPage } from './list-page.js';
15
17
  const CATEGORIES = [
16
- { id: 'data', label: 'Stored data', description: 'What is kept between sandboxes, and deleting parts of it.' },
18
+ {
19
+ id: 'updates',
20
+ label: 'Updates',
21
+ description: 'Which version is installed, installing a newer one, and bringing your saved settings up to date.',
22
+ },
23
+ {
24
+ id: 'data',
25
+ label: 'Data & storage',
26
+ description: 'Where the sandbox keeps its data, what is stored, and deleting parts of it.',
27
+ },
28
+ {
29
+ id: 'health',
30
+ label: 'Health',
31
+ description: 'Checks this PC and your settings, repairs problems, and sets up Windows Sandbox.',
32
+ },
17
33
  { id: 'logs', label: 'Logs', description: "The sandbox's own logs." },
18
- { id: 'doctor', label: 'Doctor', description: 'Checks this PC and your settings.' },
19
- { id: 'repair', label: 'Repair', description: 'Finds common problems and fixes what it can.' },
20
- { id: 'settings', label: 'Saved settings', description: 'Brings your saved settings up to date with this version.' },
21
- { id: 'updates', label: 'Updates', description: 'Which version is installed, and installing a newer one.' },
22
- { id: 'setup', label: 'Set up this PC', description: 'Can this PC run Windows Sandbox?' },
23
34
  { id: 'more', label: 'More commands', description: 'Less common commands.' },
24
35
  ];
25
36
  const MORE_COMMANDS = ['sync', 'audit', 'config', 'generate', 'exec', 'agent-commands'];
37
+ /** Plain names for the commands under More commands. */
38
+ const MORE_LABELS = {
39
+ sync: 'Copy history back now',
40
+ audit: 'What happened in the sandbox',
41
+ config: 'Your settings file',
42
+ generate: 'Preview a start',
43
+ exec: 'Run a command in the sandbox',
44
+ 'agent-commands': 'Agent commands (Beta)',
45
+ };
26
46
  const REPAIR_LABEL = {
27
47
  ok: ['OK', Theme.ok],
28
48
  fixed: ['FIXED', Theme.accent],
@@ -39,17 +59,28 @@ const AREA_LABEL = {
39
59
  host: 'On this PC',
40
60
  };
41
61
  function dataItems(m) {
62
+ const folder = { value: 'data:folder', category: 'data', section: 'Data folder', ...m.dataFolder };
63
+ const clean = {
64
+ value: 'data:clean',
65
+ label: 'Clean up…',
66
+ category: 'data',
67
+ section: 'Clean up',
68
+ description: 'Delete caches, old sandboxes and other leftovers (the clean command, with its options).',
69
+ };
42
70
  if (!m.data)
43
71
  return [
72
+ folder,
44
73
  {
45
74
  value: 'data:measure',
46
75
  label: 'Measure what is stored',
47
76
  category: 'data',
48
- hint: Theme.muted('press m'),
77
+ section: 'Stored data',
49
78
  description: 'Adds up the size of every folder. A big data folder takes a minute or more.',
50
79
  },
80
+ clean,
51
81
  ];
52
82
  return [
83
+ folder,
53
84
  ...m.data.disks.map((d) => ({
54
85
  value: 'disk:' + d.drive,
55
86
  label: d.drive,
@@ -67,6 +98,7 @@ function dataItems(m) {
67
98
  description: cleanTargetOf(e) ? 'x deletes it.' : 'Kept on this PC on purpose; it is not deleted here.',
68
99
  details: [Theme.muted('Folder ') + e.path],
69
100
  })),
101
+ clean,
70
102
  ];
71
103
  }
72
104
  function updateItems(m) {
@@ -74,6 +106,7 @@ function updateItems(m) {
74
106
  value: 'updates:' + id,
75
107
  label,
76
108
  category: 'updates',
109
+ section: 'This program',
77
110
  hint,
78
111
  description,
79
112
  details,
@@ -89,14 +122,16 @@ function updateItems(m) {
89
122
  const scope = u.scope === 'machine' ? 'for everyone on this PC' : 'for you';
90
123
  const rows = [
91
124
  row('version', 'Version', u.version, 'Installed ' + scope + '.'),
92
- row('latest', 'Newest version', m.latest ? Theme.warn(m.latest) : Theme.muted('press c to look'), m.latest ? 'Enter or u installs it.' : 'c looks on GitHub for a newer version.'),
93
- row('auto', 'Automatic updates', u.autoUpdate ? Theme.ok('on') : Theme.muted('off'), 'a switches them. ' +
125
+ row('latest', 'Newest version', m.latest ? Theme.warn(m.latest) : Theme.muted('not looked yet'), m.latest ? 'Enter installs it.' : 'Enter looks on GitHub for a newer version.'),
126
+ row('auto', 'Automatic updates', u.autoUpdate ? Theme.ok('on') : Theme.muted('off'), 'Enter switches them. ' +
94
127
  (u.scope === 'machine'
95
128
  ? 'For everyone: needs an admin terminal.'
96
129
  : 'A new version installs when no sandbox runs.')),
97
130
  ];
131
+ if (u.autoOffText)
132
+ rows.push(row('autooff', 'Automatic updates turned off', Theme.warn('off'), u.autoOffText, [u.autoOffText]));
98
133
  if (u.state.previous)
99
- rows.push(row('previous', 'Previous version', u.state.previous, 'r goes back to it.'));
134
+ rows.push(row('previous', 'Previous version', u.state.previous, 'Enter goes back to it.'));
100
135
  if (u.state.failed)
101
136
  rows.push(row('failed', 'Last failed update', Theme.error(u.state.failed.version), u.state.failed.reason, [
102
137
  u.state.failed.reason,
@@ -113,10 +148,23 @@ export function maintenanceOptions(m) {
113
148
  hint: humanBytes(f.bytes) + ' ' + ago(f.modified),
114
149
  description: 'Enter shows the end of this log in the terminal.',
115
150
  }));
151
+ // The checks take seconds (programs are run), so they are not made while you move through the categories.
152
+ const check = m.doctor === null && m.setup === null
153
+ ? [
154
+ {
155
+ value: 'health:check',
156
+ label: 'Check this PC',
157
+ category: 'health',
158
+ section: 'Doctor',
159
+ description: 'Looks at this PC: Windows features, the install, the folders and the sandbox. It takes a few seconds, so it only runs when you ask.',
160
+ },
161
+ ]
162
+ : [];
116
163
  const doctor = (m.doctor ?? []).map(([name, detail], i) => ({
117
164
  value: 'doctor:' + i,
118
165
  label: name,
119
- category: 'doctor',
166
+ category: 'health',
167
+ section: 'Doctor',
120
168
  hint: Text.truncate(detail, 50),
121
169
  details: [detail],
122
170
  }));
@@ -126,7 +174,8 @@ export function maintenanceOptions(m) {
126
174
  return {
127
175
  value: 'repair:' + i,
128
176
  label: r.name,
129
- category: 'repair',
177
+ category: 'health',
178
+ section: 'Repair',
130
179
  hint: paint(text),
131
180
  description: r.detail,
132
181
  };
@@ -135,19 +184,20 @@ export function maintenanceOptions(m) {
135
184
  {
136
185
  value: 'repair:run',
137
186
  label: 'Run the checks and fix what can be fixed',
138
- category: 'repair',
139
- hint: Theme.muted('press f'),
140
- description: 'Each check confirms all is well, fixes the problem itself, or says what you need to do.',
187
+ category: 'health',
188
+ section: 'Repair',
189
+ description: 'Checks the install, data folder, settings and sandbox, lists what it would change, and asks before it fixes anything.',
141
190
  },
142
191
  ];
143
192
  const setup = m.setup === null
144
193
  ? []
145
194
  : 'error' in m.setup
146
- ? [{ value: 'setup:error', label: m.setup.error, category: 'setup' }]
195
+ ? [{ value: 'setup:error', label: m.setup.error, category: 'health', section: 'Set up this PC' }]
147
196
  : m.setup.checks.map((c, i) => ({
148
197
  value: 'setup:' + i,
149
198
  label: c.name,
150
- category: 'setup',
199
+ category: 'health',
200
+ section: 'Set up this PC',
151
201
  hint: c.status === 'ok'
152
202
  ? Theme.ok('OK')
153
203
  : c.status === 'warn'
@@ -156,12 +206,13 @@ export function maintenanceOptions(m) {
156
206
  description: c.detail,
157
207
  }));
158
208
  const settings = 'error' in m.settings
159
- ? [{ value: 'settings:error', label: m.settings.error, category: 'settings' }]
209
+ ? [{ value: 'settings:error', label: m.settings.error, category: 'updates', section: 'Saved settings' }]
160
210
  : m.settings.pending.length
161
211
  ? m.settings.pending.map((line, i) => ({
162
212
  value: 'settings:' + i,
163
213
  label: line.split(':')[0],
164
- category: 'settings',
214
+ category: 'updates',
215
+ section: 'Saved settings',
165
216
  hint: Theme.warn('to update'),
166
217
  description: 'Enter updates your saved settings (a backup is kept first).',
167
218
  details: [line],
@@ -170,7 +221,8 @@ export function maintenanceOptions(m) {
170
221
  {
171
222
  value: 'settings:none',
172
223
  label: 'Up to date',
173
- category: 'settings',
224
+ category: 'updates',
225
+ section: 'Saved settings',
174
226
  hint: Theme.ok('OK'),
175
227
  description: 'Nothing to update.',
176
228
  },
@@ -178,49 +230,90 @@ export function maintenanceOptions(m) {
178
230
  const updates = updateItems(m);
179
231
  const more = m.more.map((c) => ({
180
232
  value: 'more:' + c.name,
181
- label: Text.humanize(c.name),
233
+ label: MORE_LABELS[c.name] ?? Text.humanize(c.name),
182
234
  category: 'more',
183
- hint: Theme.muted('sandbox ' + c.name),
184
235
  description: c.summary.replace(/^./, (x) => x.toUpperCase()) + '.',
185
236
  }));
186
237
  return {
187
238
  path: [],
188
239
  categories: CATEGORIES,
189
- items: [...dataItems(m), ...logs, ...doctor, ...repair, ...settings, ...updates, ...setup, ...more],
240
+ items: [...updates, ...settings, ...dataItems(m), ...check, ...doctor, ...repair, ...setup, ...logs, ...more],
190
241
  empty: 'Nothing here yet.',
191
242
  actions: maintenanceActions(m),
192
- escapeLabel: 'quit',
243
+ enterLabel: (_category, id) => enterLabel(id ?? '', m),
193
244
  };
194
245
  }
246
+ /** What Enter does on a row ("" = the row only shows information). */
247
+ function enterLabel(id, m) {
248
+ if (id === 'data:folder')
249
+ return 'change';
250
+ if (id === 'data:measure')
251
+ return 'measure';
252
+ if (id === 'data:clean')
253
+ return 'choose what';
254
+ if (id === 'repair:run')
255
+ return 'check and fix';
256
+ if (id === 'health:check')
257
+ return 'check';
258
+ if (id === 'updates:latest')
259
+ return m.latest ? 'install' : 'look';
260
+ if (id === 'updates:auto')
261
+ return 'switch';
262
+ if (id === 'updates:previous')
263
+ return 'go back';
264
+ if (id.startsWith('settings:') && id !== 'settings:none' && id !== 'settings:error')
265
+ return 'update';
266
+ if (id.startsWith('log:'))
267
+ return 'show';
268
+ if (id.startsWith('more:'))
269
+ return 'open';
270
+ return '';
271
+ }
195
272
  function maintenanceActions(m) {
196
273
  return (category) => {
197
274
  switch (category) {
198
- case 'data':
199
- return [{ key: 'm', label: 'measure' }, ...(m.data ? [{ key: 'x', label: 'delete' }] : [])];
275
+ case 'data': {
276
+ const deletable = new Set((m.data?.entries ?? []).flatMap((e, i) => (cleanTargetOf(e) ? ['entry:' + i] : [])));
277
+ return [
278
+ { key: 'm', label: 'measure again' },
279
+ { key: 'x', label: 'delete', applies: (id) => deletable.has(id) },
280
+ ];
281
+ }
200
282
  case 'logs':
201
283
  return [{ key: 'f', label: 'follow in the terminal' }];
202
- case 'doctor':
203
- return [{ key: 'l', label: 'check again' }];
204
- case 'repair':
205
- return [{ key: 'f', label: 'check and fix' }];
206
- case 'settings':
207
- return [{ key: 'u', label: 'update now' }];
208
- case 'updates':
209
- return 'error' in m.updates || !m.updates.managed
210
- ? []
211
- : [
212
- { key: 'c', label: 'check now' },
213
- { key: 'u', label: 'update now' },
214
- { key: 'r', label: 'roll back' },
215
- { key: 'a', label: 'automatic on/off' },
216
- ];
217
- case 'setup': {
284
+ case 'health': {
218
285
  const canEnable = m.setup !== null && !('error' in m.setup) && m.setup.canEnable;
219
286
  return [
220
- { key: 'l', label: 'check again' },
287
+ { key: 'f', label: 'check and fix' },
288
+ { key: 'l', label: m.doctor ? 'check again' : 'check' },
221
289
  ...(canEnable ? [{ key: 'e', label: 'turn on Windows Sandbox' }] : []),
222
290
  ];
223
291
  }
292
+ case 'updates': {
293
+ const managed = !('error' in m.updates) && m.updates.managed;
294
+ const previous = !('error' in m.updates) && Boolean(m.updates.state.previous);
295
+ return [
296
+ ...(managed
297
+ ? [
298
+ { key: 'c', label: 'check now' },
299
+ { key: 'u', label: 'update now' },
300
+ { key: 'a', label: 'automatic on/off', applies: (id) => id === 'updates:auto' },
301
+ ...(previous
302
+ ? [{ key: 'r', label: 'roll back', applies: (id) => id === 'updates:previous' }]
303
+ : []),
304
+ ]
305
+ : []),
306
+ ...('pending' in m.settings && m.settings.pending.length
307
+ ? [
308
+ {
309
+ key: 's',
310
+ label: 'update saved settings',
311
+ applies: (id) => id.startsWith('settings:') && id !== 'settings:none',
312
+ },
313
+ ]
314
+ : []),
315
+ ];
316
+ }
224
317
  default:
225
318
  return [];
226
319
  }
@@ -234,7 +327,6 @@ export class MaintenancePage extends ListPage {
234
327
  doctorRows = null;
235
328
  repairRows = null;
236
329
  setupReport = null;
237
- seen;
238
330
  settings = { pending: [] };
239
331
  migrate;
240
332
  health;
@@ -255,6 +347,7 @@ export class MaintenancePage extends ListPage {
255
347
  }
256
348
  model() {
257
349
  return {
350
+ dataFolder: dataFolderRow(this.ctx),
258
351
  data: this.data,
259
352
  logs: this.logs,
260
353
  doctor: this.doctorRows,
@@ -282,21 +375,6 @@ export class MaintenancePage extends ListPage {
282
375
  options() {
283
376
  return maintenanceOptions(this.model());
284
377
  }
285
- /** Opening a category loads what it shows (the cheap ones; data is measured on request). */
286
- async afterKey() {
287
- const category = this.category;
288
- if (category === this.seen)
289
- return;
290
- this.seen = category;
291
- if (category === 'doctor' && !this.doctorRows)
292
- await this.loadDoctor();
293
- else if (category === 'setup' && !this.setupReport)
294
- await this.loadSetup();
295
- else
296
- return;
297
- this.rebuild(undefined);
298
- return;
299
- }
300
378
  readSettings() {
301
379
  try {
302
380
  this.settings = { pending: this.migrate.plan() };
@@ -390,6 +468,14 @@ export class MaintenancePage extends ListPage {
390
468
  try {
391
469
  if (key === 'm' || id === 'data:measure')
392
470
  return this.measure();
471
+ if (id === 'data:folder' && result.kind === 'pick') {
472
+ const exit = await new DataFolderFlow(this.app, this.ctx).run();
473
+ return exit ? { exit } : { reload: true };
474
+ }
475
+ if (id === 'data:clean' && result.kind === 'pick') {
476
+ const argv = await new CommandForm(this.app, this.ctx, commandSpec('clean')).run();
477
+ return argv ? { exit: { kind: 'run', argv } } : {};
478
+ }
393
479
  if (key === 'x')
394
480
  return await this.remove(id);
395
481
  if (key === 'f' && this.category === 'logs')
@@ -398,22 +484,21 @@ export class MaintenancePage extends ListPage {
398
484
  const file = this.logs.find((l) => l.name === id.slice(4));
399
485
  return file ? { exit: { kind: 'view', file: file.path } } : {};
400
486
  }
401
- if (this.category === 'updates')
402
- return await this.updates(key ?? (id === 'updates:latest' ? 'u' : undefined));
403
- if (key === 'u' || (result.kind === 'pick' && id?.startsWith('settings:')))
487
+ if ((result.kind === 'pick' && id?.startsWith('settings:')) || (key === 's' && this.category === 'updates'))
404
488
  return await this.updateSettings();
405
- if (key === 'f' || id === 'repair:run')
406
- return this.repair();
407
- if (key === 'l' && this.category === 'doctor') {
408
- await this.loadDoctor();
409
- return {};
410
- }
411
- if (key === 'l') {
412
- await this.loadSetup();
413
- return {};
489
+ if (this.category === 'updates')
490
+ return await this.updates(key ?? this.updateKey(id));
491
+ if (this.category === 'health') {
492
+ if (key === 'f' || id === 'repair:run')
493
+ return this.repair();
494
+ if (key === 'l' || id === 'health:check') {
495
+ await this.loadDoctor();
496
+ await this.loadSetup();
497
+ return {};
498
+ }
499
+ if (key === 'e')
500
+ return await this.enable();
414
501
  }
415
- if (key === 'e')
416
- return await this.enable();
417
502
  if (id?.startsWith('more:') && result.kind === 'pick') {
418
503
  const spec = commandSpec(id.slice(5));
419
504
  const argv = await new CommandForm(this.app, this.ctx, spec).run();
@@ -425,6 +510,16 @@ export class MaintenancePage extends ListPage {
425
510
  }
426
511
  return {};
427
512
  }
513
+ /** The key an Enter on an Updates row stands for. */
514
+ updateKey(id) {
515
+ if (id === 'updates:latest')
516
+ return this.latest ? 'u' : 'c';
517
+ if (id === 'updates:auto')
518
+ return 'a';
519
+ if (id === 'updates:previous')
520
+ return 'r';
521
+ return undefined;
522
+ }
428
523
  measure() {
429
524
  this.busy('Measuring what is stored… this can take a minute or more');
430
525
  const report = this.dataService.report();
@@ -453,17 +548,9 @@ export class MaintenancePage extends ListPage {
453
548
  this.data = { ...this.data, entries: gone, total: _.sumBy(gone, 'bytes') };
454
549
  return { notice: Theme.ok(Theme.glyph.ok + ' Freed ' + humanBytes(outcome.freedBytes) + '.') };
455
550
  }
551
+ /** Repair shows what it does as it goes and asks before it changes anything, so it runs on the normal screen. */
456
552
  repair() {
457
- this.busy('Checking and fixing…');
458
- this.repairRows = this.health.repair();
459
- const needs = this.repairRows.filter((r) => r.status === 'needs-you').length;
460
- return {
461
- notice: needs
462
- ? Theme.warn(needs + ' thing(s) need you (see NEEDS YOU).')
463
- : Theme.ok(Theme.glyph.ok +
464
- ' All good' +
465
- (this.repairRows.some((r) => r.status === 'fixed') ? ': problems were fixed.' : '.')),
466
- };
553
+ return { exit: { kind: 'run', argv: ['repair'] } };
467
554
  }
468
555
  async enable() {
469
556
  const ok = await this.app.ask('Turn on Windows Sandbox?', ['Windows asks for admin permission, then you restart Windows to finish.'], 'Turn on');
@@ -1,12 +1,15 @@
1
+ import { type SandboxStatus } from '../../../app/features/sandbox/index.js';
1
2
  import type { Context } from '../../commands/context.js';
2
- import { type DatabaseRow, type ProjectsListing, type SandboxReport } from '../../services/index.js';
3
+ import { type DatabaseRow, type ProjectsListing } from '../../services/index.js';
3
4
  import { type App, type ListOptions, type ListResult } from '../../tui/index.js';
4
5
  import { ListPage, type Outcome } from './list-page.js';
5
6
  export interface SandboxModel {
6
- readonly report: SandboxReport;
7
+ readonly report: SandboxStatus;
7
8
  readonly projects: ProjectsListing;
8
9
  /** Null: the sandbox is not running or did not answer. */
9
10
  readonly databases: DatabaseRow[] | null;
11
+ /** The agent "Start the sandbox" offers while nothing runs. */
12
+ readonly defaultAgent: string;
10
13
  }
11
14
  /** The list for the sandbox tab. Pure. */
12
15
  export declare function sandboxOptions(m: SandboxModel): ListOptions<string>;
@@ -14,18 +17,16 @@ export declare class SandboxPage extends ListPage<string> {
14
17
  private readonly ctx;
15
18
  readonly label = "Sandbox";
16
19
  private model;
17
- private readonly sandbox;
18
20
  private readonly projects;
21
+ private readonly operations;
19
22
  constructor(app: App, ctx: Context);
20
23
  protected load(): Promise<void>;
21
24
  /** The folder `sbx-db` runs in: the sandbox's own workspace. */
22
25
  private guestWorkspace;
23
26
  protected options(): ListOptions<string>;
24
27
  protected act(result: ListResult<string>): Promise<Outcome<string>>;
28
+ private defaultAgent;
25
29
  private noSandbox;
26
- private show;
27
- private hide;
28
- private stop;
29
30
  private addRoot;
30
31
  private forget;
31
32
  private toggleDatabase;