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
@@ -0,0 +1,66 @@
1
+ #Requires -Version 5.1
2
+ # Detaches the contained-storage disk image of one data set (the image file stays, with everything in it). Run elevated
3
+ # (one Windows permission prompt). The request is a JSON file: { set, storageRoot, image, mount, userSid }. The same
4
+ # checks as mount-contained.ps1 apply (exact paths, no links, yours). It refuses while Windows Sandbox is running (the
5
+ # sandbox may be using the folders in the image). Only `detach vdisk` for this one image is run; nothing is deleted.
6
+ # -DryRun prints the diskpart lines and does nothing else; the result goes to result.json next to the request file.
7
+ param(
8
+ [Parameter(Mandatory = $true)][string]$Json,
9
+ [string]$Sha256 = '',
10
+ [switch]$DryRun
11
+ )
12
+ $ErrorActionPreference = 'Stop'
13
+ . (Join-Path $PSScriptRoot 'contained-common.ps1')
14
+
15
+ $result = @{ ok = $false; message = ''; action = 'dismount'; created = $false; alreadyMounted = $false }
16
+
17
+ function Invoke-Dismount($Req, [bool]$Dry, [string]$TempDir) {
18
+ Assert-NoLinksOnTheWay $Req $true
19
+ $root = $Req.storageRoot.TrimEnd('\')
20
+ Assert-OwnedByUser $Req @($root, (Join-Path $root 'images'), (Join-Path $root 'mounts'))
21
+ if (-not (Test-Path -LiteralPath $Req.image -PathType Leaf)) { throw "The image is missing: $($Req.image)" }
22
+ Assert-OwnedByUser $Req @($Req.image)
23
+ $image = $Req.image
24
+ $mount = $Req.mount.TrimEnd('\')
25
+ if (-not $Dry) {
26
+ if (Get-Process -Name 'WindowsSandbox*' -ErrorAction SilentlyContinue) {
27
+ throw 'A Windows Sandbox is running and may be using the image. Close it first.'
28
+ }
29
+ }
30
+ $state = Get-ImageState $image $Dry
31
+ if ((-not $Dry) -and (-not $state.Attached)) {
32
+ if (Test-ReparsePoint $mount) { throw "The mount folder is a mount point of something else; not touching it: $mount" }
33
+ $script:result.ok = $true
34
+ $script:result.message = 'The image is not mounted.'
35
+ Add-Note 'not attached: nothing to do'
36
+ return
37
+ }
38
+ [void](Invoke-DiskPart @("select vdisk file=""$image""", 'detach vdisk') $TempDir $Dry)
39
+ if (-not $Dry) {
40
+ $after = Get-ImageState $image $false
41
+ if ($after.Attached) { throw 'The image is still attached (something is using it). Close programs that use files in it and try again.' }
42
+ if (Test-ReparsePoint $mount) { throw "The mount folder is still a mount point: $mount" }
43
+ }
44
+ $script:result.ok = $true
45
+ $script:result.message = 'The image was detached.'
46
+ }
47
+
48
+ $mutex = $null
49
+ try {
50
+ $request = Read-ContainedRequest -JsonPath $Json -Sha256 $Sha256 -Dry $DryRun.IsPresent
51
+ Assert-ContainedRequest $request
52
+ if (-not $DryRun) {
53
+ if (-not (Test-IsAdministrator)) { throw 'Detaching a disk image needs administrator rights.' }
54
+ $mutex = Enter-ContainedLock
55
+ }
56
+ Invoke-Dismount $request $DryRun.IsPresent (Split-Path -Parent $Json)
57
+ } catch {
58
+ $result.ok = $false
59
+ $result.message = $_.Exception.Message
60
+ } finally {
61
+ if ($mutex) { $mutex.ReleaseMutex(); $mutex.Dispose() }
62
+ }
63
+ Write-ContainedResult $result $Json $DryRun.IsPresent
64
+ if ($result.ok) { exit 0 }
65
+ if ($DryRun) { [Console]::Error.WriteLine($result.message) }
66
+ exit 1
@@ -0,0 +1,34 @@
1
+ #Requires -Version 5.1
2
+ # Prints this PC's memory as JSON: { totalMb, availableMb, commitLimitMb, commitAvailableMb }. Read-only. The fallback
3
+ # for HostTools.exe memory-status (host/life/host-memory.ts).
4
+ param()
5
+ $ErrorActionPreference = 'Stop'
6
+
7
+ $os = Get-CimInstance -ClassName Win32_OperatingSystem
8
+ # The paging file setup from the registry: auto (Windows manages it), fixed (with its maximum sizes) or none.
9
+ $pageFile = 'auto'
10
+ $pageFileMax = 0
11
+ try {
12
+ $entries = @((Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management' -ErrorAction Stop).PagingFiles | Where-Object { $_ -and $_.Trim() })
13
+ $pageFile = 'none'
14
+ foreach ($entry in $entries) {
15
+ $parts = $entry.Trim() -split ' '
16
+ $initial = 0; $max = 0
17
+ if ($parts.Count -ge 3) { $initial = [int64]$parts[-2]; $max = [int64]$parts[-1] }
18
+ if ($entry.StartsWith('?:') -or ($initial -eq 0 -and $max -eq 0)) { $pageFile = 'auto'; $pageFileMax = 0; break }
19
+ $pageFile = 'fixed'
20
+ $pageFileMax += $max
21
+ }
22
+ } catch {
23
+ # Not readable: treated as automatic (no warning).
24
+ }
25
+
26
+ # Win32_OperatingSystem counts in KB.
27
+ ConvertTo-Json -Compress -InputObject ([ordered]@{
28
+ totalMb = [int64][math]::Floor($os.TotalVisibleMemorySize / 1024)
29
+ availableMb = [int64][math]::Floor($os.FreePhysicalMemory / 1024)
30
+ commitLimitMb = [int64][math]::Floor($os.TotalVirtualMemorySize / 1024)
31
+ commitAvailableMb = [int64][math]::Floor($os.FreeVirtualMemory / 1024)
32
+ pageFile = $pageFile
33
+ pageFileMaxMb = [int64]$pageFileMax
34
+ })
@@ -0,0 +1,139 @@
1
+ #Requires -Version 5.1
2
+ # Mounts the contained-storage disk image of one data set at its mount folder (no drive letter), creating and
3
+ # formatting the image the very first time. Run elevated (host/storage/contained starts it through run-elevated.ps1,
4
+ # one Windows permission prompt). The request is a JSON file: { set, storageRoot, image, mount, userSid, maxGb, create }.
5
+ # Safety, all checked again here: the image is <storage>\images\<set>.vhdx and the mount folder <storage>\mounts\<set>;
6
+ # no folder on the way is a link; both are yours; the image has no parent file and is not bigger than the limit; an
7
+ # existing image is only attached (never formatted, never deleted), and a new one is only made where no file is.
8
+ # Every diskpart command names this one image. -DryRun checks everything and prints the diskpart lines it would run
9
+ # (and does nothing else); the result of a real run goes to result.json next to the request file.
10
+ param(
11
+ [Parameter(Mandatory = $true)][string]$Json,
12
+ [string]$Sha256 = '',
13
+ [switch]$DryRun
14
+ )
15
+ $ErrorActionPreference = 'Stop'
16
+ . (Join-Path $PSScriptRoot 'contained-common.ps1')
17
+
18
+ $result = @{ ok = $false; message = ''; action = 'mount'; created = $false; alreadyMounted = $false }
19
+
20
+ function Invoke-Mount($Req, [bool]$Dry, [string]$TempDir) {
21
+ foreach ($name in @('maxGb', 'create')) {
22
+ if (-not ($Req.PSObject.Properties.Name -contains $name)) { throw "The request has no $name." }
23
+ }
24
+ if ($Req.maxGb -lt 8 -or $Req.maxGb -gt 4096) { throw 'The size limit must be between 8 and 4096 GB.' }
25
+ $create = [bool]$Req.create
26
+ Assert-NoLinksOnTheWay $Req $true
27
+ $root = $Req.storageRoot.TrimEnd('\')
28
+ $mountIsLink = Test-ReparsePoint $Req.mount
29
+ Assert-OwnedByUser $Req @($root, (Join-Path $root 'images'), (Join-Path $root 'mounts'))
30
+ # A mounted folder shows the image's own root, whose owner is not ours to judge; a plain folder is.
31
+ if (-not $mountIsLink) { Assert-OwnedByUser $Req @($Req.mount) }
32
+ $exists = Test-Path -LiteralPath $Req.image -PathType Leaf
33
+ if ($create -and $exists) { throw "An image exists already; refusing to create over it: $($Req.image)" }
34
+ if ((-not $create) -and (-not $exists)) { throw "The image is missing: $($Req.image)" }
35
+ $image = $Req.image
36
+ $mount = $Req.mount.TrimEnd('\')
37
+
38
+ if ($exists) {
39
+ Assert-OwnedByUser $Req @($image)
40
+ $state = Get-ImageState $image $Dry
41
+ if ($state.Attached) {
42
+ if ((Test-MountedAt $state $mount) -and $mountIsLink) {
43
+ $script:result.ok = $true
44
+ $script:result.alreadyMounted = $true
45
+ $script:result.message = 'The image is mounted already.'
46
+ Add-Note 'already mounted at the mount folder'
47
+ return
48
+ }
49
+ throw 'The image is attached somewhere else (Disk Management or another tool). Detach it there first.'
50
+ }
51
+ # Not attached, so its header can be read.
52
+ [void](Assert-PlainImage $Req $Dry)
53
+ }
54
+ if ($mountIsLink) { throw "The mount folder is a mount point already: $mount" }
55
+ if (@(Get-ChildItem -LiteralPath $mount -Force).Count -ne 0) { throw "The mount folder is not empty: $mount" }
56
+ $format = (New-Object IO.DriveInfo ([IO.Path]::GetPathRoot($mount))).DriveFormat
57
+ if ($format -ne 'NTFS') { throw "The mount folder must be on an NTFS drive (this one is $format): $mount" }
58
+
59
+ if ($exists) {
60
+ # Attach and mount the first partition of this image; nothing is created and nothing is formatted.
61
+ $lines = @(
62
+ "select vdisk file=""$image""",
63
+ 'attach vdisk',
64
+ 'select partition 1',
65
+ "assign mount=""$mount"""
66
+ )
67
+ } else {
68
+ if (-not $Dry) {
69
+ $drive = New-Object IO.DriveInfo ([IO.Path]::GetPathRoot($image))
70
+ if ($drive.AvailableFreeSpace -lt 1GB) { throw 'There is less than 1 GB free where the image would be made.' }
71
+ }
72
+ $megabytes = [int]$Req.maxGb * 1024
73
+ $lines = @(
74
+ "create vdisk file=""$image"" maximum=$megabytes type=expandable",
75
+ "select vdisk file=""$image""",
76
+ 'attach vdisk',
77
+ 'create partition primary',
78
+ 'format fs=ntfs quick label=AgentData',
79
+ "assign mount=""$mount"""
80
+ )
81
+ }
82
+ try {
83
+ [void](Invoke-DiskPart $lines $TempDir $Dry)
84
+ if (-not $Dry) {
85
+ $after = Get-ImageState $image $false
86
+ if (-not $after.Attached -or -not (Test-MountedAt $after $mount)) { throw 'The image is attached but not mounted at the mount folder.' }
87
+ if (-not (Test-ReparsePoint $mount)) { throw 'The mount folder is not a mount point after mounting.' }
88
+ if (-not $exists) {
89
+ # The new volume's root is open to Users by default: only you and the system may use it.
90
+ $acl = New-Object Security.AccessControl.DirectorySecurity
91
+ $acl.SetAccessRuleProtection($true, $false)
92
+ $inherit = [Security.AccessControl.InheritanceFlags]'ContainerInherit, ObjectInherit'
93
+ foreach ($sid in @($Req.userSid, 'S-1-5-18')) {
94
+ $who = New-Object Security.Principal.SecurityIdentifier($sid)
95
+ $acl.AddAccessRule((New-Object Security.AccessControl.FileSystemAccessRule($who, 'FullControl', $inherit, 'None', 'Allow')))
96
+ }
97
+ Set-Acl -LiteralPath $mount -AclObject $acl
98
+ }
99
+ }
100
+ $script:result.ok = $true
101
+ $script:result.created = (-not $exists)
102
+ $script:result.message = if ($exists) { 'The image was mounted.' } else { 'The image was created and mounted.' }
103
+ } catch {
104
+ $problem = $_.Exception.Message
105
+ if (-not $Dry) {
106
+ # Leave the PC as it was: detach this image (only this one); a half-made new image is renamed, never deleted.
107
+ $now = $null
108
+ try { $now = Get-ImageState $image $false } catch { $now = $null }
109
+ if ((Test-Path -LiteralPath $image) -and ((-not $now) -or $now.Attached)) {
110
+ try { [void](Invoke-DiskPart @("select vdisk file=""$image""", 'detach vdisk') $TempDir $false) } catch { $problem += ' (it could not be detached again: ' + $_.Exception.Message + ')' }
111
+ }
112
+ if ((-not $exists) -and (Test-Path -LiteralPath $image)) {
113
+ $kept = $image + '.failed-' + (Get-Date -Format 'yyyyMMddHHmmss')
114
+ try { Rename-Item -LiteralPath $image -NewName (Split-Path -Leaf $kept); $problem += " (the unfinished image was kept as $kept)" } catch { $problem += ' (the unfinished image is still at ' + $image + ')' }
115
+ }
116
+ }
117
+ throw $problem
118
+ }
119
+ }
120
+
121
+ $mutex = $null
122
+ try {
123
+ $request = Read-ContainedRequest -JsonPath $Json -Sha256 $Sha256 -Dry $DryRun.IsPresent
124
+ Assert-ContainedRequest $request
125
+ if (-not $DryRun) {
126
+ if (-not (Test-IsAdministrator)) { throw 'Mounting a disk image needs administrator rights.' }
127
+ $mutex = Enter-ContainedLock
128
+ }
129
+ Invoke-Mount $request $DryRun.IsPresent (Split-Path -Parent $Json)
130
+ } catch {
131
+ $result.ok = $false
132
+ $result.message = $_.Exception.Message
133
+ } finally {
134
+ if ($mutex) { $mutex.ReleaseMutex(); $mutex.Dispose() }
135
+ }
136
+ Write-ContainedResult $result $Json $DryRun.IsPresent
137
+ if ($result.ok) { exit 0 }
138
+ if ($DryRun) { [Console]::Error.WriteLine($result.message) }
139
+ exit 1
@@ -0,0 +1,29 @@
1
+ #Requires -Version 5.1
2
+ # Encrypts or decrypts data with Windows DPAPI for the current user (host/secrets/secret-store.ts runs it). Standard
3
+ # input: base64 of the bytes; standard output: base64 of the result. Nothing goes on the command line, so nothing shows
4
+ # in a process list, and nothing is written to disk. Only this Windows user, on this PC, can decrypt what it made.
5
+ # Exit 0 on success; exit 1 with the reason on stderr.
6
+ param(
7
+ [Parameter(Mandatory = $true)][ValidateSet('protect', 'unprotect')][string]$Mode
8
+ )
9
+ $ErrorActionPreference = 'Stop'
10
+ try {
11
+ Add-Type -AssemblyName System.Security
12
+ $buffer = New-Object System.IO.MemoryStream
13
+ [Console]::OpenStandardInput().CopyTo($buffer)
14
+ $text = [System.Text.Encoding]::ASCII.GetString($buffer.ToArray()).Trim()
15
+ $data = [Convert]::FromBase64String($text)
16
+ # A fixed extra secret: another program of yours that calls DPAPI without it cannot open these.
17
+ $entropy = [System.Text.Encoding]::UTF8.GetBytes('agent-sandbox/secret-store/v1')
18
+ $scope = [System.Security.Cryptography.DataProtectionScope]::CurrentUser
19
+ if ($Mode -eq 'protect') {
20
+ $result = [System.Security.Cryptography.ProtectedData]::Protect($data, $entropy, $scope)
21
+ } else {
22
+ $result = [System.Security.Cryptography.ProtectedData]::Unprotect($data, $entropy, $scope)
23
+ }
24
+ [Console]::Out.Write([Convert]::ToBase64String($result))
25
+ exit 0
26
+ } catch {
27
+ [Console]::Error.WriteLine($_.Exception.Message)
28
+ exit 1
29
+ }
@@ -0,0 +1,10 @@
1
+ #Requires -Version 5.1
2
+ # Prints the permissions of a folder (and of a second path when given) as SDDL, one line each, read only. Used by the
3
+ # self-test to compare a folder and a child before and after a change ("D:AI" = auto-inherited).
4
+ param(
5
+ [Parameter(Mandatory = $true)][string]$Path,
6
+ [string]$Also
7
+ )
8
+ $ErrorActionPreference = 'Stop'
9
+ (Get-Acl -LiteralPath $Path).Sddl
10
+ if ($Also) { (Get-Acl -LiteralPath $Also).Sddl }
@@ -1,11 +1,24 @@
1
1
  #Requires -Version 5.1
2
- # Runs one fixed PowerShell command in an elevated PowerShell (Windows asks for permission) and waits for it. Used by
3
- # `sandbox setup` to turn on the Windows Sandbox feature. Exits with the command's exit code, or 1 when declined.
4
- param([Parameter(Mandatory = $true)][string]$Command)
2
+ # Runs one fixed PowerShell command, or one script of this package, in an elevated PowerShell (Windows asks for
3
+ # permission) and waits for it. -Command is used by `sandbox setup` to turn on the Windows Sandbox feature. -Script is
4
+ # used for contained storage: the script (a file of this package) gets -Json <request file> -Sha256 <its checksum>.
5
+ # Exits with the exit code of what it ran, or 1 when the permission was declined.
6
+ [CmdletBinding(DefaultParameterSetName = 'Command')]
7
+ param(
8
+ [Parameter(Mandatory = $true, ParameterSetName = 'Command')][string]$Command,
9
+ [Parameter(Mandatory = $true, ParameterSetName = 'Script')][string]$Script,
10
+ [Parameter(Mandatory = $true, ParameterSetName = 'Script')][string]$Json,
11
+ [Parameter(Mandatory = $true, ParameterSetName = 'Script')][string]$Sha256
12
+ )
5
13
  $ErrorActionPreference = 'Stop'
6
14
  try {
7
15
  $exe = Join-Path $PSHOME 'powershell.exe'
8
- $p = Start-Process -FilePath $exe -Verb RunAs -Wait -PassThru -WindowStyle Hidden -ArgumentList '-NoProfile', '-Command', $Command
16
+ if ($PSCmdlet.ParameterSetName -eq 'Script') {
17
+ $arguments = @('-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Bypass', '-File', ('"' + $Script + '"'), '-Json', ('"' + $Json + '"'), '-Sha256', $Sha256)
18
+ } else {
19
+ $arguments = @('-NoProfile', '-Command', $Command)
20
+ }
21
+ $p = Start-Process -FilePath $exe -Verb RunAs -Wait -PassThru -WindowStyle Hidden -ArgumentList $arguments
9
22
  exit $p.ExitCode
10
23
  } catch {
11
24
  exit 1
@@ -1,23 +1,62 @@
1
1
  #Requires -Version 5.1
2
2
  # Adds or removes folder access entries listed in a JSON file (host/sharing/acl.ts writes it): { "changes": [ { path,
3
- # sid, rights (Read | Traverse | Modify), scope (this-folder | inherit), add } ] }. Entries are applied in order.
4
- # A link (junction or symbolic link) is refused, so an entry can never land on another folder. Exit 0 when all are
5
- # applied; exit 1 with the reason on stderr otherwise.
3
+ # sid, rights (Read | Traverse | Modify), scope (this-folder | inherit), add } or { op: "private", path } ] }. Entries
4
+ # are applied in order. A link (junction or symbolic link) is refused, so an entry can never land on another folder.
5
+ # Nothing is written when the permissions would not change. A this-folder entry (and "private" on an empty folder) is
6
+ # written to that folder only, never over its children (FolderSecurity.cs); an inherit entry reaches the children.
7
+ # Exit 0 when all are applied; exit 1 with the reason on stderr otherwise.
6
8
  param(
7
9
  [Parameter(Mandatory = $true)][string]$Json
8
10
  )
9
11
  $ErrorActionPreference = 'Stop'
10
12
 
13
+ $loaded = $false
14
+ function Set-OwnDacl([string]$Path, $Acl) {
15
+ if (-not $script:loaded) {
16
+ Add-Type -Path (Join-Path $PSScriptRoot '..\csharp\FolderSecurity.cs')
17
+ $script:loaded = $true
18
+ }
19
+ # Keep "auto-inherited" (D:AI) as Set-Acl does: without it Windows treats the inherited entries as the folder's own
20
+ # the next time the parent changes. SetFileSecurity keeps that flag only when the descriptor also requests it.
21
+ $raw = New-Object System.Security.AccessControl.RawSecurityDescriptor -ArgumentList $Acl.GetSecurityDescriptorBinaryForm(), 0
22
+ if (-not $Acl.AreAccessRulesProtected) {
23
+ $auto = [System.Security.AccessControl.ControlFlags]'DiscretionaryAclAutoInherited, DiscretionaryAclAutoInheritRequired'
24
+ $raw.SetFlags($raw.ControlFlags -bor $auto)
25
+ }
26
+ $bytes = New-Object byte[] $raw.BinaryLength
27
+ $raw.GetBinaryForm($bytes, 0)
28
+ [AgentSandbox.FolderSecurity]::SetDacl($Path, $bytes)
29
+ }
30
+
31
+ function Get-Folder([string]$Path) {
32
+ $item = Get-Item -LiteralPath $Path -Force
33
+ if (-not $item.PSIsContainer) { throw "Not a folder: $Path" }
34
+ if ($item.Attributes -band [System.IO.FileAttributes]::ReparsePoint) { throw "Refusing a link: $Path" }
35
+ }
36
+
11
37
  try {
12
38
  # The entries sit in a property: piping a bare JSON array into ConvertFrom-Json gives one array object on 5.1.
13
39
  $doc = Get-Content -LiteralPath $Json -Raw -Encoding UTF8 | ConvertFrom-Json
14
40
  $entries = @($doc.changes)
15
41
  foreach ($e in $entries) {
42
+ Get-Folder $e.path
43
+ if ($e.op -eq 'private') {
44
+ # Only you, SYSTEM and Administrators; inheritance from the parent off; children inherit this.
45
+ $me = [System.Security.Principal.WindowsIdentity]::GetCurrent().User
46
+ $want = New-Object System.Security.AccessControl.DirectorySecurity
47
+ $want.SetAccessRuleProtection($true, $false)
48
+ foreach ($who in @($me, (New-Object System.Security.Principal.SecurityIdentifier('S-1-5-18')), (New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544')))) {
49
+ $want.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule(
50
+ $who, 'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow')))
51
+ }
52
+ $have = Get-Acl -LiteralPath $e.path
53
+ if ($have.GetSecurityDescriptorSddlForm('Access') -eq $want.GetSecurityDescriptorSddlForm('Access')) { continue }
54
+ $children = @(Get-ChildItem -LiteralPath $e.path -Force | Select-Object -First 1)
55
+ if ($children.Count -eq 0) { Set-OwnDacl $e.path $want } else { Set-Acl -LiteralPath $e.path -AclObject $want }
56
+ continue
57
+ }
16
58
  if ($e.rights -notin @('Read', 'Traverse', 'Modify')) { throw "Unknown rights: $($e.rights)" }
17
59
  if ($e.scope -notin @('this-folder', 'inherit')) { throw "Unknown scope: $($e.scope)" }
18
- $item = Get-Item -LiteralPath $e.path -Force
19
- if (-not $item.PSIsContainer) { throw "Not a folder: $($e.path)" }
20
- if ($item.Attributes -band [System.IO.FileAttributes]::ReparsePoint) { throw "Refusing a link: $($e.path)" }
21
60
 
22
61
  $sid = New-Object System.Security.Principal.SecurityIdentifier($e.sid)
23
62
  $rights = [System.Security.AccessControl.FileSystemRights]$e.rights
@@ -30,12 +69,15 @@ try {
30
69
  $sid, $rights, $inherit, [System.Security.AccessControl.PropagationFlags]'None', [System.Security.AccessControl.AccessControlType]'Allow')
31
70
 
32
71
  $acl = Get-Acl -LiteralPath $e.path
72
+ $before = $acl.GetSecurityDescriptorSddlForm('Access')
33
73
  if ($e.add) {
34
74
  $acl.AddAccessRule($rule)
35
75
  } else {
36
76
  [void]$acl.RemoveAccessRuleSpecific($rule)
37
77
  }
38
- Set-Acl -LiteralPath $e.path -AclObject $acl
78
+ # Nothing changed (removing an absent entry, adding a present one): do not write, a write walks the subtree.
79
+ if ($acl.GetSecurityDescriptorSddlForm('Access') -eq $before) { continue }
80
+ if ($e.scope -eq 'inherit') { Set-Acl -LiteralPath $e.path -AclObject $acl } else { Set-OwnDacl $e.path $acl }
39
81
  }
40
82
  exit 0
41
83
  } catch {
@@ -7,28 +7,43 @@ $ErrorActionPreference = 'Stop'
7
7
  $filters = @(
8
8
  @{ LogName = 'System'; Id = 1074, 6008, 41, 42, 2004; StartTime = $Since },
9
9
  @{ LogName = 'System'; Id = 1001; ProviderName = 'Microsoft-Windows-WER-SystemErrorReporting'; StartTime = $Since },
10
- @{ LogName = 'Microsoft-Windows-Hyper-V-Worker-Admin'; Id = 18590, 40001; StartTime = $Since }
10
+ @{ LogName = 'Microsoft-Windows-Hyper-V-Worker-Admin'; Id = 18590, 40001; StartTime = $Since },
11
+ # Hardware errors Windows reported (WHEA: CPU, memory, bus, disk).
12
+ @{ LogName = 'System'; ProviderName = 'Microsoft-Windows-WHEA-Logger'; Id = 17, 18, 19, 47; StartTime = $Since },
13
+ # Any error or critical event of the Hyper-V worker and compute services (the VM's memory, start and stop).
14
+ @{ LogName = 'Microsoft-Windows-Hyper-V-Worker-Admin'; Level = 1, 2; StartTime = $Since },
15
+ @{ LogName = 'Microsoft-Windows-Hyper-V-Compute-Admin'; Level = 1, 2; StartTime = $Since },
16
+ # A crash report of the programs that hold the VM (kept only when it names one of them).
17
+ @{ LogName = 'Application'; Id = 1000, 1001; StartTime = $Since; OnlyVmPrograms = $true }
11
18
  )
12
19
  $maxMessage = 390
20
+ $maxResourceMessage = 1500
13
21
 
14
22
  # What each event says beyond its id: the program that asked for a restart (1074), else the start of the message.
15
23
  function Get-EventDetail($record) {
16
24
  if ($record.Id -eq 1074) { return [string]$record.Properties[0].Value }
17
- if ($record.Id -in 18590, 40001, 1001) {
18
- $message = [string]$record.Message
19
- return $message.Substring(0, [math]::Min($maxMessage, $message.Length))
20
- }
21
- return ''
25
+ # The plain power events say nothing more; the resource-exhaustion event (2004) lists the biggest memory users.
26
+ # Kernel-Power 41 carries the stop code of a blue screen (0 when there was none: a freeze or power loss).
27
+ if ($record.Id -eq 41) { return 'BugcheckCode ' + [string]$record.Properties[0].Value }
28
+ if ($record.Id -in 42, 6008) { return '' }
29
+ $message = [string]$record.Message
30
+ $max = if ($record.Id -eq 2004) { $maxResourceMessage } else { $maxMessage }
31
+ return $message.Substring(0, [math]::Min($max, $message.Length))
22
32
  }
23
33
 
24
34
  $events = foreach ($filter in $filters) {
25
35
  try {
26
- Get-WinEvent -FilterHashtable $filter -MaxEvents 100 | ForEach-Object {
36
+ $onlyVm = $filter.ContainsKey('OnlyVmPrograms')
37
+ $query = @{} + $filter
38
+ $query.Remove('OnlyVmPrograms')
39
+ Get-WinEvent -FilterHashtable $query -MaxEvents 100 | ForEach-Object {
40
+ $detail = Get-EventDetail $_
41
+ if ($onlyVm -and $detail -notmatch 'vmwp\.exe|vmmem|vmcompute|windowssandbox') { return }
27
42
  [pscustomobject]@{
28
43
  at = $_.TimeCreated.ToUniversalTime().ToString('o')
29
44
  id = $_.Id
30
45
  provider = $_.ProviderName
31
- process = Get-EventDetail $_
46
+ process = $detail
32
47
  }
33
48
  }
34
49
  } catch {
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>
2
+ Copyright (c) 2013 Arnout Kazemier and contributors
3
+ Copyright (c) 2016 Luigi Pinca and contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the "Software"), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software is furnished to do so,
10
+ subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.