windows-development-sandbox 1.4.1 → 1.4.3

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 (872) hide show
  1. package/config.example.json +3 -1
  2. package/dist/api.js +27 -16
  3. package/dist/cli/args.d.ts +4 -6
  4. package/dist/cli/args.js +67 -34
  5. package/dist/cli/argv.d.ts +9 -0
  6. package/dist/cli/argv.js +22 -0
  7. package/dist/cli/commands/accounts.d.ts +1 -1
  8. package/dist/cli/commands/accounts.js +42 -27
  9. package/dist/cli/commands/agent-commands.d.ts +3 -3
  10. package/dist/cli/commands/agent-commands.js +27 -18
  11. package/dist/cli/commands/context.d.ts +9 -11
  12. package/dist/cli/commands/context.js +35 -32
  13. package/dist/cli/commands/data/clean.d.ts +2 -2
  14. package/dist/cli/commands/data/clean.js +27 -11
  15. package/dist/cli/commands/data/collect.d.ts +6 -3
  16. package/dist/cli/commands/data/collect.js +46 -15
  17. package/dist/cli/commands/data/index.d.ts +2 -2
  18. package/dist/cli/commands/data/index.js +30 -12
  19. package/dist/cli/commands/data/remove.d.ts +1 -1
  20. package/dist/cli/commands/data/remove.js +4 -4
  21. package/dist/cli/commands/index.d.ts +5 -4
  22. package/dist/cli/commands/index.js +5 -4
  23. package/dist/cli/commands/launch/add-root.d.ts +7 -0
  24. package/dist/cli/commands/launch/add-root.js +64 -0
  25. package/dist/cli/commands/launch/boot-progress.d.ts +7 -0
  26. package/dist/cli/commands/launch/boot-progress.js +48 -0
  27. package/dist/cli/commands/launch/boot-wants.d.ts +11 -0
  28. package/dist/cli/commands/launch/boot-wants.js +48 -0
  29. package/dist/cli/commands/launch/first-start.d.ts +10 -0
  30. package/dist/cli/commands/launch/first-start.js +53 -0
  31. package/dist/cli/commands/launch/index.d.ts +6 -0
  32. package/dist/cli/commands/launch/index.js +6 -0
  33. package/dist/cli/commands/launch/launch.d.ts +8 -0
  34. package/dist/cli/commands/launch/launch.js +211 -0
  35. package/dist/cli/commands/launch/prepare.d.ts +23 -0
  36. package/dist/cli/commands/launch/prepare.js +109 -0
  37. package/dist/cli/commands/launch/running.d.ts +45 -0
  38. package/dist/cli/commands/launch/running.js +218 -0
  39. package/dist/cli/commands/launch/summary.d.ts +8 -0
  40. package/dist/cli/commands/launch/summary.js +98 -0
  41. package/dist/cli/commands/maintenance/audit.d.ts +3 -0
  42. package/dist/cli/commands/maintenance/audit.js +58 -0
  43. package/dist/cli/commands/maintenance/clean.d.ts +2 -0
  44. package/dist/cli/commands/maintenance/clean.js +10 -0
  45. package/dist/cli/commands/maintenance/config.d.ts +2 -0
  46. package/dist/cli/commands/maintenance/config.js +145 -0
  47. package/dist/cli/commands/maintenance/doctor.d.ts +2 -0
  48. package/dist/cli/commands/maintenance/doctor.js +52 -0
  49. package/dist/cli/commands/maintenance/host-claude.d.ts +2 -0
  50. package/dist/cli/commands/maintenance/host-claude.js +4 -0
  51. package/dist/cli/commands/maintenance/index.d.ts +8 -0
  52. package/dist/cli/commands/maintenance/index.js +9 -0
  53. package/dist/cli/commands/maintenance/logs.d.ts +2 -0
  54. package/dist/cli/commands/maintenance/logs.js +44 -0
  55. package/dist/cli/commands/maintenance/sync.d.ts +2 -0
  56. package/dist/cli/commands/maintenance/sync.js +12 -0
  57. package/dist/cli/commands/maintenance/watch.d.ts +3 -0
  58. package/dist/cli/commands/maintenance/watch.js +6 -0
  59. package/dist/cli/commands/projects/describe-sessions.d.ts +3 -0
  60. package/dist/cli/commands/projects/describe-sessions.js +15 -0
  61. package/dist/cli/commands/projects/here.d.ts +38 -0
  62. package/dist/cli/commands/projects/here.js +145 -0
  63. package/dist/cli/commands/projects/index.d.ts +4 -0
  64. package/dist/cli/commands/projects/index.js +4 -0
  65. package/dist/cli/commands/projects/projects.d.ts +14 -0
  66. package/dist/cli/commands/projects/projects.js +213 -0
  67. package/dist/cli/commands/projects/restart.d.ts +15 -0
  68. package/dist/cli/commands/projects/restart.js +149 -0
  69. package/dist/cli/commands/registry.d.ts +3 -0
  70. package/dist/cli/commands/registry.js +34 -0
  71. package/dist/cli/commands/repair/checks.js +105 -29
  72. package/dist/cli/commands/repair/finders.d.ts +13 -10
  73. package/dist/cli/commands/repair/finders.js +63 -43
  74. package/dist/cli/commands/repair/index.d.ts +4 -4
  75. package/dist/cli/commands/repair/index.js +47 -21
  76. package/dist/cli/commands/repair/types.d.ts +2 -2
  77. package/dist/cli/commands/repair/types.js +7 -2
  78. package/dist/cli/commands/sessions/attach.d.ts +2 -0
  79. package/dist/cli/commands/sessions/attach.js +45 -0
  80. package/dist/cli/commands/sessions/control.d.ts +4 -0
  81. package/dist/cli/commands/sessions/control.js +62 -0
  82. package/dist/cli/commands/sessions/exec.d.ts +6 -0
  83. package/dist/cli/commands/sessions/exec.js +72 -0
  84. package/dist/cli/commands/sessions/index.d.ts +6 -0
  85. package/dist/cli/commands/sessions/index.js +9 -0
  86. package/dist/cli/commands/sessions/list.d.ts +15 -0
  87. package/dist/cli/commands/sessions/list.js +65 -0
  88. package/dist/cli/commands/sessions/status.d.ts +2 -0
  89. package/dist/cli/commands/sessions/status.js +153 -0
  90. package/dist/cli/commands/sessions/window.d.ts +3 -0
  91. package/dist/cli/commands/sessions/window.js +18 -0
  92. package/dist/cli/commands/setup/checks.d.ts +4 -4
  93. package/dist/cli/commands/setup/checks.js +36 -19
  94. package/dist/cli/commands/setup/facts.d.ts +6 -6
  95. package/dist/cli/commands/setup/facts.js +23 -11
  96. package/dist/cli/commands/setup/index.d.ts +1 -1
  97. package/dist/cli/commands/setup/index.js +25 -12
  98. package/dist/cli/commands/user-config.d.ts +5 -5
  99. package/dist/cli/commands/user-config.js +14 -12
  100. package/dist/cli/history.d.ts +5 -4
  101. package/dist/cli/history.js +23 -11
  102. package/dist/cli/index.d.ts +4 -14
  103. package/dist/cli/index.js +27 -77
  104. package/dist/cli/manifest.d.ts +464 -10
  105. package/dist/cli/manifest.js +327 -53
  106. package/dist/cli/menu/apps.d.ts +7 -5
  107. package/dist/cli/menu/apps.js +64 -16
  108. package/dist/cli/menu/command-fields.d.ts +15 -0
  109. package/dist/cli/menu/command-fields.js +23 -0
  110. package/dist/cli/menu/command-form.d.ts +3 -5
  111. package/dist/cli/menu/command-form.js +116 -48
  112. package/dist/cli/menu/home.d.ts +22 -0
  113. package/dist/cli/menu/home.js +72 -0
  114. package/dist/cli/menu/index.d.ts +2 -24
  115. package/dist/cli/menu/index.js +4 -178
  116. package/dist/cli/menu/menu.d.ts +23 -0
  117. package/dist/cli/menu/menu.js +185 -0
  118. package/dist/cli/menu/settings/categories.d.ts +2 -2
  119. package/dist/cli/menu/settings/categories.js +123 -20
  120. package/dist/cli/menu/settings/collections/collection-editor.d.ts +23 -0
  121. package/dist/cli/menu/settings/collections/collection-editor.js +89 -0
  122. package/dist/cli/menu/settings/collections/map-editor.d.ts +10 -0
  123. package/dist/cli/menu/settings/collections/map-editor.js +34 -0
  124. package/dist/cli/menu/settings/collections/object-list-editor.d.ts +10 -0
  125. package/dist/cli/menu/settings/collections/object-list-editor.js +23 -0
  126. package/dist/cli/menu/settings/collections/object-map-editor.d.ts +10 -0
  127. package/dist/cli/menu/settings/collections/object-map-editor.js +35 -0
  128. package/dist/cli/menu/settings/collections/string-list-editor.d.ts +12 -0
  129. package/dist/cli/menu/settings/collections/string-list-editor.js +39 -0
  130. package/dist/cli/menu/settings/config-file.d.ts +2 -2
  131. package/dist/cli/menu/settings/config-file.js +42 -19
  132. package/dist/cli/menu/settings/editor-actions.d.ts +2 -0
  133. package/dist/cli/menu/settings/editor-actions.js +2 -0
  134. package/dist/cli/menu/settings/format.d.ts +5 -0
  135. package/dist/cli/menu/settings/format.js +39 -0
  136. package/dist/cli/menu/settings/index.d.ts +1 -29
  137. package/dist/cli/menu/settings/index.js +1 -133
  138. package/dist/cli/menu/settings/object-editor.d.ts +12 -0
  139. package/dist/cli/menu/settings/object-editor.js +86 -0
  140. package/dist/cli/menu/settings/schema-node.d.ts +3 -1
  141. package/dist/cli/menu/settings/schema-node.js +71 -24
  142. package/dist/cli/menu/settings/settings-editor.d.ts +30 -0
  143. package/dist/cli/menu/settings/settings-editor.js +176 -0
  144. package/dist/cli/menu/settings/{editors.d.ts → value-editor.d.ts} +2 -13
  145. package/dist/cli/menu/settings/value-editor.js +137 -0
  146. package/dist/cli/menu/several.d.ts +4 -4
  147. package/dist/cli/menu/several.js +61 -20
  148. package/dist/cli/{colors.d.ts → output/colors.d.ts} +8 -8
  149. package/dist/cli/{colors.js → output/colors.js} +32 -14
  150. package/dist/cli/output/index.d.ts +3 -0
  151. package/dist/cli/output/index.js +3 -0
  152. package/dist/cli/output/print.d.ts +5 -0
  153. package/dist/cli/output/print.js +14 -0
  154. package/dist/cli/{progress.d.ts → output/progress.d.ts} +5 -5
  155. package/dist/cli/{progress.js → output/progress.js} +42 -19
  156. package/dist/cli/report.d.ts +2 -0
  157. package/dist/cli/report.js +20 -0
  158. package/dist/cli/tui/app.d.ts +6 -16
  159. package/dist/cli/tui/app.js +28 -8
  160. package/dist/cli/tui/dialogs/confirm-screen.d.ts +20 -0
  161. package/dist/cli/tui/dialogs/confirm-screen.js +50 -0
  162. package/dist/cli/tui/dialogs/message-screen.d.ts +17 -0
  163. package/dist/cli/tui/dialogs/message-screen.js +55 -0
  164. package/dist/cli/tui/dialogs/paragraphs.d.ts +2 -0
  165. package/dist/cli/tui/dialogs/paragraphs.js +5 -0
  166. package/dist/cli/tui/dialogs/text-screen.d.ts +26 -0
  167. package/dist/cli/tui/dialogs/text-screen.js +107 -0
  168. package/dist/cli/tui/frame.js +3 -1
  169. package/dist/cli/tui/index.d.ts +7 -3
  170. package/dist/cli/tui/index.js +4 -2
  171. package/dist/cli/tui/list/list-screen.d.ts +29 -0
  172. package/dist/cli/tui/{list-screen.js → list/list-screen.js} +86 -23
  173. package/dist/cli/tui/{list-screen.d.ts → list/list-types.d.ts} +0 -28
  174. package/dist/cli/tui/screen.d.ts +14 -0
  175. package/dist/cli/tui/terminal.js +34 -10
  176. package/dist/cli/tui/text.d.ts +2 -1
  177. package/dist/cli/tui/text.js +37 -7
  178. package/dist/cli/tui/theme.js +27 -9
  179. package/dist/cli/validate.d.ts +8 -8
  180. package/dist/cli/validate.js +32 -21
  181. package/dist/core/config/defaults.d.ts +2 -0
  182. package/dist/core/config/defaults.js +203 -0
  183. package/dist/core/config/index.d.ts +2 -0
  184. package/dist/core/config/index.js +3 -0
  185. package/dist/core/{config.d.ts → config/loader.d.ts} +1 -2
  186. package/dist/core/config/loader.js +47 -0
  187. package/dist/core/{detect-databases.js → detect/databases.js} +111 -23
  188. package/dist/core/detect/index.d.ts +4 -0
  189. package/dist/core/detect/index.js +4 -0
  190. package/dist/core/{detect-pwsh.d.ts → detect/pwsh.d.ts} +1 -1
  191. package/dist/core/{detect-pwsh.js → detect/pwsh.js} +25 -11
  192. package/dist/core/{detect-toolchains.d.ts → detect/toolchains.d.ts} +1 -1
  193. package/dist/core/{detect-toolchains.js → detect/toolchains.js} +42 -5
  194. package/dist/{guest/toolchains → core/detect}/versions.js +28 -12
  195. package/dist/core/disk.d.ts +2 -0
  196. package/dist/core/disk.js +46 -3
  197. package/dist/core/local-config/boot-wants.d.ts +45 -0
  198. package/dist/core/local-config/boot-wants.js +120 -0
  199. package/dist/core/local-config/file.d.ts +3 -0
  200. package/dist/core/local-config/file.js +16 -0
  201. package/dist/core/local-config/index.d.ts +5 -0
  202. package/dist/core/local-config/index.js +7 -0
  203. package/dist/core/{local-config.d.ts → local-config/overrides.d.ts} +3 -18
  204. package/dist/core/{local-config.js → local-config/overrides.js} +45 -52
  205. package/dist/core/local-config/policy.d.ts +19 -0
  206. package/dist/core/local-config/policy.js +45 -0
  207. package/dist/core/local-config/trust.d.ts +13 -0
  208. package/dist/core/local-config/trust.js +43 -0
  209. package/dist/core/package-info.d.ts +4 -0
  210. package/dist/core/package-info.js +13 -0
  211. package/dist/core/run/guest-workspace.d.ts +23 -0
  212. package/dist/core/run/guest-workspace.js +47 -0
  213. package/dist/core/run/index.d.ts +3 -0
  214. package/dist/core/run/index.js +3 -0
  215. package/dist/core/run/resolve-run.d.ts +3 -0
  216. package/dist/core/run/resolve-run.js +202 -0
  217. package/dist/core/run/versions.d.ts +13 -0
  218. package/dist/core/run/versions.js +65 -0
  219. package/dist/core/safe-paths.js +17 -5
  220. package/dist/core/schema/apps.d.ts +4 -4
  221. package/dist/core/schema/apps.js +55 -21
  222. package/dist/core/schema/common.d.ts +13 -10
  223. package/dist/core/schema/common.js +16 -10
  224. package/dist/core/schema/config.d.ts +15 -10
  225. package/dist/core/schema/config.js +78 -53
  226. package/dist/core/schema/databases.d.ts +4 -3
  227. package/dist/core/schema/databases.js +16 -12
  228. package/dist/core/schema/harness.d.ts +1 -1
  229. package/dist/core/schema/harness.js +17 -7
  230. package/dist/core/schema/index.d.ts +6 -0
  231. package/dist/core/schema/index.js +8 -0
  232. package/dist/core/schema/json-schema.js +10 -5
  233. package/dist/core/schema/profile.d.ts +4 -4
  234. package/dist/core/schema/profile.js +37 -17
  235. package/dist/core/schema/projects.d.ts +1 -1
  236. package/dist/core/schema/projects.js +16 -6
  237. package/dist/core/schema/sandbox.d.ts +11 -11
  238. package/dist/core/schema/sandbox.js +101 -37
  239. package/dist/core/schema/toolchains.d.ts +6 -1
  240. package/dist/core/schema/toolchains.js +84 -34
  241. package/dist/core/types.d.ts +19 -9
  242. package/dist/core/util/errors.d.ts +8 -0
  243. package/dist/core/util/errors.js +14 -0
  244. package/dist/core/util/fs.d.ts +8 -0
  245. package/dist/core/util/fs.js +40 -0
  246. package/dist/core/util/index.d.ts +7 -0
  247. package/dist/core/util/index.js +7 -0
  248. package/dist/core/util/jsonc.d.ts +6 -0
  249. package/dist/core/util/jsonc.js +25 -0
  250. package/dist/core/util/links.d.ts +10 -0
  251. package/dist/core/util/links.js +39 -0
  252. package/dist/core/util/paths.d.ts +7 -0
  253. package/dist/core/util/paths.js +33 -0
  254. package/dist/core/util/process.d.ts +15 -0
  255. package/dist/core/util/process.js +54 -0
  256. package/dist/core/util/text.d.ts +8 -0
  257. package/dist/core/util/text.js +8 -0
  258. package/dist/guest/{setup/agents.js → agents/agent-installer.js} +24 -4
  259. package/dist/guest/apps/after-install.d.ts +3 -0
  260. package/dist/guest/apps/after-install.js +47 -0
  261. package/dist/guest/apps/app-installer.d.ts +22 -0
  262. package/dist/guest/apps/app-installer.js +116 -0
  263. package/dist/guest/apps/find-exe.d.ts +5 -0
  264. package/dist/guest/apps/find-exe.js +41 -0
  265. package/dist/guest/apps/index.d.ts +3 -10
  266. package/dist/guest/apps/index.js +6 -206
  267. package/dist/guest/apps/resolvers.js +37 -9
  268. package/dist/guest/apps/shortcuts.d.ts +6 -0
  269. package/dist/guest/apps/shortcuts.js +28 -0
  270. package/dist/guest/apps/sources.d.ts +4 -0
  271. package/dist/guest/apps/sources.js +17 -0
  272. package/dist/guest/apps/unpack.d.ts +3 -0
  273. package/dist/guest/apps/unpack.js +47 -0
  274. package/dist/guest/{audit-parse.js → audit/parse.js} +39 -3
  275. package/dist/guest/{audit.d.ts → audit/process-audit.d.ts} +3 -1
  276. package/dist/guest/{audit.js → audit/process-audit.js} +33 -8
  277. package/dist/guest/boot/boot-env.d.ts +4 -0
  278. package/dist/guest/{boot-env.js → boot/boot-env.js} +7 -5
  279. package/dist/guest/boot/boot.d.ts +1 -0
  280. package/dist/guest/{main.js → boot/boot.js} +96 -50
  281. package/dist/guest/{guide.js → boot/guide.js} +32 -7
  282. package/dist/guest/{project-env.d.ts → boot/project-env.d.ts} +3 -3
  283. package/dist/guest/{project-env.js → boot/project-env.js} +12 -4
  284. package/dist/guest/boot/project-status.d.ts +5 -0
  285. package/dist/guest/boot/project-status.js +28 -0
  286. package/dist/guest/daemon/daemon.d.ts +1 -0
  287. package/dist/guest/daemon/daemon.js +51 -0
  288. package/dist/guest/daemon/exec.js +18 -6
  289. package/dist/guest/daemon/{shutdown.js → idle-shutdown.js} +5 -4
  290. package/dist/guest/daemon/{project.d.ts → project-provisioner.d.ts} +3 -3
  291. package/dist/guest/daemon/{project.js → project-provisioner.js} +60 -22
  292. package/dist/guest/daemon/relays.js +5 -3
  293. package/dist/guest/daemon/{session.js → sessions.js} +84 -24
  294. package/dist/guest/daemon/state.d.ts +4 -1
  295. package/dist/guest/daemon/state.js +34 -20
  296. package/dist/guest/databases/database-server.d.ts +13 -0
  297. package/dist/guest/databases/database-server.js +35 -0
  298. package/dist/guest/databases/dynamodb.d.ts +12 -0
  299. package/dist/guest/databases/dynamodb.js +81 -0
  300. package/dist/guest/databases/index.d.ts +2 -0
  301. package/dist/guest/databases/index.js +2 -0
  302. package/dist/guest/databases/mongodb.d.ts +7 -0
  303. package/dist/guest/databases/mongodb.js +46 -0
  304. package/dist/guest/databases/mysql.d.ts +7 -0
  305. package/dist/guest/databases/mysql.js +59 -0
  306. package/dist/guest/databases/names.d.ts +5 -0
  307. package/dist/guest/databases/names.js +8 -0
  308. package/dist/guest/databases/postgres.d.ts +9 -0
  309. package/dist/guest/databases/postgres.js +85 -0
  310. package/dist/guest/databases/redis.d.ts +7 -0
  311. package/dist/guest/databases/redis.js +25 -0
  312. package/dist/guest/databases/registry.d.ts +5 -0
  313. package/dist/guest/databases/registry.js +51 -0
  314. package/dist/guest/databases/sbx-db.d.ts +1 -0
  315. package/dist/guest/{db.js → databases/sbx-db.js} +13 -13
  316. package/dist/guest/{toolchains/databases → databases}/server.d.ts +5 -5
  317. package/dist/guest/{toolchains/databases → databases}/server.js +18 -13
  318. package/dist/guest/entries/daemon.js +16 -0
  319. package/dist/guest/entries/db.js +10 -0
  320. package/dist/guest/entries/gitguard.js +20 -0
  321. package/dist/guest/entries/main.d.ts +1 -0
  322. package/dist/guest/entries/main.js +24 -0
  323. package/dist/guest/entries/netproxy.d.ts +1 -0
  324. package/dist/guest/entries/netproxy.js +7 -0
  325. package/dist/guest/entries/view.d.ts +1 -0
  326. package/dist/guest/entries/view.js +11 -0
  327. package/dist/guest/{gitguard.js → git/decision.js} +49 -26
  328. package/dist/guest/network/addresses.d.ts +2 -0
  329. package/dist/guest/network/addresses.js +6 -0
  330. package/dist/guest/{setup/network.d.ts → network/allow-only.d.ts} +0 -10
  331. package/dist/guest/network/allow-only.js +84 -0
  332. package/dist/guest/network/firewall.d.ts +9 -0
  333. package/dist/guest/{setup/network.js → network/firewall.js} +58 -63
  334. package/dist/guest/network/proxy-server.d.ts +2 -0
  335. package/dist/guest/{netproxy.js → network/proxy-server.js} +37 -18
  336. package/dist/guest/{helpers.d.ts → runtime/csc.d.ts} +1 -1
  337. package/dist/guest/{helpers.js → runtime/csc.js} +7 -2
  338. package/dist/guest/runtime/fs.d.ts +2 -0
  339. package/dist/guest/runtime/fs.js +6 -0
  340. package/dist/guest/runtime/log.d.ts +3 -0
  341. package/dist/guest/runtime/log.js +22 -0
  342. package/dist/guest/runtime/paths.d.ts +13 -0
  343. package/dist/guest/runtime/paths.js +14 -0
  344. package/dist/guest/{ports.js → runtime/ports.js} +8 -2
  345. package/dist/guest/runtime/process.d.ts +15 -0
  346. package/dist/guest/runtime/process.js +59 -0
  347. package/dist/guest/{project-context.js → runtime/project-context.js} +1 -1
  348. package/dist/guest/runtime/session.d.ts +5 -0
  349. package/dist/guest/runtime/session.js +10 -0
  350. package/dist/guest/runtime/status.d.ts +7 -0
  351. package/dist/guest/runtime/status.js +57 -0
  352. package/dist/guest/{cmdline.js → sessions/cmdline.js} +10 -4
  353. package/dist/guest/{ptyhost.js → sessions/pty-host.js} +12 -5
  354. package/dist/guest/{view.js → sessions/viewer.js} +8 -11
  355. package/dist/guest/setup/claude-mem.d.ts +10 -0
  356. package/dist/guest/setup/{claude.js → claude-mem.js} +18 -78
  357. package/dist/guest/setup/{claude.d.ts → claude-profile.d.ts} +0 -10
  358. package/dist/guest/setup/claude-profile.js +89 -0
  359. package/dist/guest/setup/desktop.d.ts +2 -0
  360. package/dist/guest/setup/desktop.js +32 -0
  361. package/dist/guest/setup/environment.js +28 -5
  362. package/dist/guest/setup/{user.d.ts → git-identity.d.ts} +0 -2
  363. package/dist/guest/setup/git-identity.js +34 -0
  364. package/dist/guest/{gitrules.d.ts → setup/git-rules.d.ts} +1 -1
  365. package/dist/guest/setup/git-rules.js +50 -0
  366. package/dist/guest/setup/hooks.js +22 -5
  367. package/dist/guest/setup/{policy.js → managed-policy.js} +2 -2
  368. package/dist/guest/toolchains/catalogue.d.ts +4 -4
  369. package/dist/guest/toolchains/catalogue.js +30 -7
  370. package/dist/guest/toolchains/detect.d.ts +12 -0
  371. package/dist/guest/toolchains/detect.js +54 -0
  372. package/dist/guest/toolchains/index.d.ts +3 -17
  373. package/dist/guest/toolchains/index.js +1 -106
  374. package/dist/guest/toolchains/install.d.ts +20 -0
  375. package/dist/guest/toolchains/install.js +29 -0
  376. package/dist/guest/toolchains/languages/go.d.ts +3 -0
  377. package/dist/guest/toolchains/{go.js → languages/go.js} +27 -9
  378. package/dist/guest/toolchains/languages/java.d.ts +8 -0
  379. package/dist/guest/toolchains/{java.js → languages/java.js} +57 -18
  380. package/dist/guest/toolchains/languages/node.d.ts +3 -0
  381. package/dist/guest/toolchains/{node.js → languages/node.js} +51 -18
  382. package/dist/guest/toolchains/languages/php.d.ts +3 -0
  383. package/dist/guest/toolchains/{scripting → languages}/php.js +36 -11
  384. package/dist/guest/toolchains/languages/python-tools.d.ts +3 -0
  385. package/dist/guest/toolchains/languages/python-tools.js +12 -0
  386. package/dist/guest/toolchains/languages/python.d.ts +3 -0
  387. package/dist/guest/toolchains/{python.js → languages/python.js} +29 -16
  388. package/dist/guest/toolchains/languages/ruby.d.ts +3 -0
  389. package/dist/guest/toolchains/{scripting → languages}/ruby.js +28 -10
  390. package/dist/guest/toolchains/leftovers.d.ts +1 -1
  391. package/dist/guest/toolchains/leftovers.js +13 -11
  392. package/dist/guest/toolchains/managers.d.ts +6 -6
  393. package/dist/guest/toolchains/managers.js +38 -17
  394. package/dist/guest/toolchains/native/binstall.d.ts +3 -2
  395. package/dist/guest/toolchains/native/binstall.js +20 -8
  396. package/dist/guest/toolchains/native/cpp.d.ts +2 -2
  397. package/dist/guest/toolchains/native/cpp.js +23 -8
  398. package/dist/guest/toolchains/native/dotnet.d.ts +5 -3
  399. package/dist/guest/toolchains/native/dotnet.js +72 -24
  400. package/dist/guest/toolchains/native/mesa.d.ts +2 -2
  401. package/dist/guest/toolchains/native/mesa.js +27 -10
  402. package/dist/guest/toolchains/native/msvc/environment.d.ts +4 -4
  403. package/dist/guest/toolchains/native/msvc/environment.js +30 -16
  404. package/dist/guest/toolchains/native/msvc/index.d.ts +3 -3
  405. package/dist/guest/toolchains/native/msvc/index.js +10 -8
  406. package/dist/guest/toolchains/native/msvc/packages.d.ts +1 -1
  407. package/dist/guest/toolchains/native/msvc/packages.js +69 -23
  408. package/dist/guest/toolchains/native/msvc/tree.d.ts +6 -6
  409. package/dist/guest/toolchains/native/msvc/tree.js +15 -9
  410. package/dist/guest/toolchains/native/rust-extras.d.ts +23 -0
  411. package/dist/guest/toolchains/native/rust-extras.js +100 -0
  412. package/dist/guest/toolchains/native/rust.d.ts +2 -2
  413. package/dist/guest/toolchains/native/rust.js +41 -10
  414. package/dist/guest/toolchains/{scripting → native}/vcruntime.d.ts +2 -2
  415. package/dist/guest/toolchains/{scripting → native}/vcruntime.js +17 -7
  416. package/dist/guest/toolchains/package-ledger.d.ts +17 -0
  417. package/dist/guest/toolchains/package-ledger.js +54 -0
  418. package/dist/guest/toolchains/plan.d.ts +3 -24
  419. package/dist/guest/toolchains/plan.js +99 -111
  420. package/dist/guest/toolchains/runtimes.d.ts +6 -6
  421. package/dist/guest/toolchains/runtimes.js +31 -13
  422. package/dist/guest/toolchains/scheduler.d.ts +22 -0
  423. package/dist/guest/toolchains/scheduler.js +123 -0
  424. package/dist/guest/toolchains/setup.d.ts +10 -0
  425. package/dist/guest/toolchains/setup.js +22 -0
  426. package/dist/guest/toolchains/state-file.d.ts +3 -0
  427. package/dist/guest/toolchains/state-file.js +10 -0
  428. package/dist/guest/toolchains/step.d.ts +24 -0
  429. package/dist/guest/toolchains/step.js +1 -0
  430. package/dist/guest/toolchains/tool-env.d.ts +12 -0
  431. package/dist/guest/toolchains/tool-env.js +16 -0
  432. package/dist/guest/toolchains/tools/cli.d.ts +10 -0
  433. package/dist/guest/toolchains/{cli.js → tools/cli.js} +35 -15
  434. package/dist/guest/toolchains/tools/git.d.ts +3 -0
  435. package/dist/guest/toolchains/{git.js → tools/git.js} +38 -15
  436. package/dist/guest/toolchains/tools/pwsh.d.ts +4 -0
  437. package/dist/guest/toolchains/{pwsh.js → tools/pwsh.js} +14 -7
  438. package/dist/guest/toolchains/{vscode-profile.d.ts → tools/vscode-profile.d.ts} +6 -6
  439. package/dist/guest/toolchains/{vscode-profile.js → tools/vscode-profile.js} +28 -12
  440. package/dist/guest/toolchains/{vscode.d.ts → tools/vscode.d.ts} +6 -6
  441. package/dist/guest/toolchains/{vscode.js → tools/vscode.js} +67 -21
  442. package/dist/guest/toolchains/version-cache.d.ts +16 -0
  443. package/dist/guest/toolchains/version-cache.js +67 -0
  444. package/dist/host/agent-commands/commands.d.ts +13 -0
  445. package/dist/host/agent-commands/commands.js +33 -0
  446. package/dist/host/agent-commands/forwarders.d.ts +7 -0
  447. package/dist/host/agent-commands/forwarders.js +31 -0
  448. package/dist/host/agent-commands/index.d.ts +4 -0
  449. package/dist/host/agent-commands/index.js +4 -0
  450. package/dist/host/agent-commands/reconcile.d.ts +12 -0
  451. package/dist/host/agent-commands/reconcile.js +69 -0
  452. package/dist/host/agent-commands/user-path.d.ts +2 -0
  453. package/dist/host/agent-commands/user-path.js +33 -0
  454. package/dist/host/audit/collect.d.ts +2 -2
  455. package/dist/host/audit/collect.js +59 -22
  456. package/dist/host/audit/log.d.ts +2 -2
  457. package/dist/host/audit/log.js +24 -8
  458. package/dist/host/{attach.d.ts → channel/attach.d.ts} +2 -2
  459. package/dist/host/{attach.js → channel/attach.js} +33 -15
  460. package/dist/host/channel/channel.d.ts +51 -0
  461. package/dist/host/channel/channel.js +196 -0
  462. package/dist/host/channel/index.d.ts +2 -0
  463. package/dist/host/channel/index.js +2 -0
  464. package/dist/host/guard/agent-files.d.ts +7 -0
  465. package/dist/host/guard/agent-files.js +103 -0
  466. package/dist/host/guard/commands.d.ts +10 -0
  467. package/dist/host/guard/commands.js +123 -0
  468. package/dist/host/guard/file-hash.d.ts +4 -0
  469. package/dist/host/guard/file-hash.js +37 -0
  470. package/dist/host/guard/git-config.d.ts +5 -0
  471. package/dist/host/guard/git-config.js +62 -0
  472. package/dist/host/guard/git-dirs.d.ts +12 -0
  473. package/dist/host/guard/git-dirs.js +53 -0
  474. package/dist/host/guard/index.d.ts +5 -0
  475. package/dist/host/guard/index.js +4 -0
  476. package/dist/host/guard/mark-of-the-web.d.ts +8 -0
  477. package/dist/host/guard/mark-of-the-web.js +74 -0
  478. package/dist/host/guard/nested-repos.d.ts +14 -0
  479. package/dist/host/guard/nested-repos.js +88 -0
  480. package/dist/host/guard/quarantine.d.ts +3 -0
  481. package/dist/host/guard/quarantine.js +24 -0
  482. package/dist/host/guard/repo-guard.d.ts +10 -0
  483. package/dist/host/guard/repo-guard.js +36 -0
  484. package/dist/host/guard/store.d.ts +40 -0
  485. package/dist/host/guard/store.js +145 -0
  486. package/dist/host/guard/types.d.ts +27 -0
  487. package/dist/host/guard/types.js +3 -0
  488. package/dist/host/guard/watch-state.d.ts +9 -0
  489. package/dist/host/guard/watch-state.js +26 -0
  490. package/dist/host/launch/boot-projects.d.ts +17 -0
  491. package/dist/host/launch/{projects.js → boot-projects.js} +22 -13
  492. package/dist/host/{database-plan.d.ts → launch/database-plan.d.ts} +5 -5
  493. package/dist/host/{database-plan.js → launch/database-plan.js} +24 -13
  494. package/dist/host/launch/generate.d.ts +4 -0
  495. package/dist/host/launch/generate.js +77 -0
  496. package/dist/host/launch/index.d.ts +10 -0
  497. package/dist/host/launch/index.js +10 -0
  498. package/dist/host/launch/mappings.d.ts +5 -5
  499. package/dist/host/launch/mappings.js +37 -24
  500. package/dist/host/launch/pc-scan.d.ts +5 -0
  501. package/dist/host/{pc-scan.js → launch/pc-scan.js} +20 -13
  502. package/dist/host/launch/project-scan.d.ts +7 -0
  503. package/dist/host/{project-scan.js → launch/project-scan.js} +29 -21
  504. package/dist/host/launch/session-file.d.ts +23 -0
  505. package/dist/host/launch/session-file.js +73 -0
  506. package/dist/host/launch/stage.d.ts +5 -5
  507. package/dist/host/launch/stage.js +14 -13
  508. package/dist/host/launch/toolchains.d.ts +4 -0
  509. package/dist/host/launch/toolchains.js +11 -0
  510. package/dist/host/launch/{wsb.d.ts → wsb-file.d.ts} +4 -2
  511. package/dist/host/launch/wsb-file.js +56 -0
  512. package/dist/host/life/crash-report.d.ts +8 -0
  513. package/dist/host/life/crash-report.js +87 -0
  514. package/dist/host/life/index.d.ts +6 -0
  515. package/dist/host/life/index.js +6 -0
  516. package/dist/host/life/keep-awake.d.ts +10 -0
  517. package/dist/host/life/keep-awake.js +29 -0
  518. package/dist/host/life/life-record.d.ts +48 -0
  519. package/dist/host/life/life-record.js +76 -0
  520. package/dist/host/life/stop-events.d.ts +27 -0
  521. package/dist/host/life/stop-events.js +96 -0
  522. package/dist/host/life/stop-warning.d.ts +4 -0
  523. package/dist/host/life/stop-warning.js +25 -0
  524. package/dist/host/life/windows-update.d.ts +3 -0
  525. package/dist/host/life/windows-update.js +11 -0
  526. package/dist/host/native.d.ts +4 -0
  527. package/dist/host/native.js +11 -0
  528. package/dist/host/network/index.d.ts +1 -0
  529. package/dist/host/network/index.js +1 -0
  530. package/dist/host/{port-forward.d.ts → network/port-forward.d.ts} +1 -1
  531. package/dist/host/{port-forward.js → network/port-forward.js} +16 -10
  532. package/dist/host/profile/accounts.d.ts +37 -0
  533. package/dist/host/profile/accounts.js +146 -0
  534. package/dist/host/profile/claude-login.d.ts +22 -0
  535. package/dist/host/profile/claude-login.js +57 -0
  536. package/dist/host/{claude-profile.d.ts → profile/claude-profile.d.ts} +9 -9
  537. package/dist/host/{claude-profile.js → profile/claude-profile.js} +32 -22
  538. package/dist/host/profile/index.d.ts +7 -0
  539. package/dist/host/profile/index.js +7 -0
  540. package/dist/host/profile/personalize.d.ts +2 -0
  541. package/dist/host/profile/personalize.js +127 -0
  542. package/dist/host/profile/reg-file.d.ts +8 -0
  543. package/dist/host/profile/reg-file.js +45 -0
  544. package/dist/host/profile/secret-files.d.ts +2 -0
  545. package/dist/host/profile/secret-files.js +25 -0
  546. package/dist/host/profile/secret-patterns.d.ts +6 -0
  547. package/dist/host/profile/secret-patterns.js +128 -0
  548. package/dist/host/profile/secrets.d.ts +12 -0
  549. package/dist/host/profile/secrets.js +100 -0
  550. package/dist/host/projects/index.d.ts +4 -0
  551. package/dist/host/projects/index.js +4 -0
  552. package/dist/host/{join.d.ts → projects/join.d.ts} +12 -9
  553. package/dist/host/{join.js → projects/join.js} +62 -33
  554. package/dist/host/projects/known.d.ts +28 -0
  555. package/dist/host/projects/known.js +55 -0
  556. package/dist/host/projects/mapper.d.ts +29 -0
  557. package/dist/host/projects/mapper.js +88 -0
  558. package/dist/host/projects/registry.d.ts +83 -0
  559. package/dist/host/projects/registry.js +136 -0
  560. package/dist/host/sandbox/doctor.d.ts +2 -0
  561. package/dist/host/sandbox/doctor.js +42 -0
  562. package/dist/host/sandbox/host-claude.d.ts +1 -0
  563. package/dist/host/sandbox/host-claude.js +26 -0
  564. package/dist/host/sandbox/index.d.ts +6 -0
  565. package/dist/host/sandbox/index.js +6 -0
  566. package/dist/host/{platform.d.ts → sandbox/platform.d.ts} +0 -5
  567. package/dist/host/sandbox/platform.js +60 -0
  568. package/dist/host/sandbox/probe.d.ts +3 -0
  569. package/dist/host/sandbox/probe.js +47 -0
  570. package/dist/host/{window.js → sandbox/window.js} +7 -5
  571. package/dist/host/{wsb.js → sandbox/wsb-cli.js} +31 -8
  572. package/dist/host/{cleanup.js → storage/cleanup.js} +27 -12
  573. package/dist/host/storage/index.d.ts +2 -0
  574. package/dist/host/storage/index.js +2 -0
  575. package/dist/host/storage/state-files.d.ts +4 -0
  576. package/dist/host/storage/state-files.js +10 -0
  577. package/dist/host/test-guard.js +1 -1
  578. package/dist/host/tools/conpty.d.ts +8 -0
  579. package/dist/host/tools/conpty.js +58 -0
  580. package/dist/host/tools/index.d.ts +2 -0
  581. package/dist/host/tools/index.js +2 -0
  582. package/dist/host/{terminal.d.ts → tools/windows-terminal.d.ts} +2 -10
  583. package/dist/host/{terminal.js → tools/windows-terminal.js} +33 -57
  584. package/dist/host/workspace-view/active-views.d.ts +3 -0
  585. package/dist/host/workspace-view/active-views.js +22 -0
  586. package/dist/host/workspace-view/index.d.ts +2 -18
  587. package/dist/host/workspace-view/index.js +2 -49
  588. package/dist/host/workspace-view/plan.d.ts +16 -0
  589. package/dist/host/workspace-view/plan.js +50 -0
  590. package/dist/host/workspace-view/rules.js +10 -3
  591. package/dist/host/workspace-view/view-state.d.ts +10 -0
  592. package/dist/host/workspace-view/view-state.js +31 -0
  593. package/dist/host/workspace-view/view.d.ts +1 -0
  594. package/dist/host/workspace-view/view.js +51 -55
  595. package/dist/runtime/daemon.js +4220 -1968
  596. package/dist/runtime/db.js +2134 -849
  597. package/dist/runtime/gitguard.js +29 -11
  598. package/dist/runtime/main.js +4687 -2243
  599. package/dist/runtime/netproxy.js +1644 -420
  600. package/dist/runtime/view.js +1356 -428
  601. package/dist/selftest/accounts.test.d.ts +1 -1
  602. package/dist/selftest/accounts.test.js +20 -17
  603. package/dist/selftest/agent-commands.test.d.ts +1 -1
  604. package/dist/selftest/agent-commands.test.js +9 -5
  605. package/dist/selftest/audit.test.d.ts +1 -1
  606. package/dist/selftest/audit.test.js +46 -13
  607. package/dist/selftest/channel.test.d.ts +1 -1
  608. package/dist/selftest/channel.test.js +63 -16
  609. package/dist/selftest/cli.test.d.ts +1 -1
  610. package/dist/selftest/cli.test.js +68 -16
  611. package/dist/selftest/cmdline.test.d.ts +1 -1
  612. package/dist/selftest/cmdline.test.js +36 -7
  613. package/dist/selftest/config.test.d.ts +1 -1
  614. package/dist/selftest/config.test.js +12 -5
  615. package/dist/selftest/data.test.d.ts +1 -1
  616. package/dist/selftest/data.test.js +35 -6
  617. package/dist/selftest/detect.test.d.ts +1 -1
  618. package/dist/selftest/detect.test.js +22 -9
  619. package/dist/selftest/generate.test.d.ts +1 -1
  620. package/dist/selftest/generate.test.js +33 -9
  621. package/dist/selftest/git-access.test.d.ts +1 -1
  622. package/dist/selftest/git-access.test.js +42 -4
  623. package/dist/selftest/guest-boot.test.d.ts +1 -1
  624. package/dist/selftest/guest-boot.test.js +25 -7
  625. package/dist/selftest/host-sim.test.d.ts +1 -1
  626. package/dist/selftest/host-sim.test.js +27 -3
  627. package/dist/selftest/hostile-input.test.d.ts +1 -1
  628. package/dist/selftest/hostile-input.test.js +5 -5
  629. package/dist/selftest/index.d.ts +1 -1
  630. package/dist/selftest/index.js +72 -16
  631. package/dist/selftest/layout.test.d.ts +2 -0
  632. package/dist/selftest/layout.test.js +131 -0
  633. package/dist/selftest/links.test.d.ts +1 -1
  634. package/dist/selftest/links.test.js +16 -11
  635. package/dist/selftest/live-daemon.test.d.ts +1 -1
  636. package/dist/selftest/live-daemon.test.js +20 -8
  637. package/dist/selftest/live-git.test.d.ts +1 -1
  638. package/dist/selftest/live-git.test.js +13 -4
  639. package/dist/selftest/live-network.test.d.ts +1 -1
  640. package/dist/selftest/live-network.test.js +24 -9
  641. package/dist/selftest/live-projects.test.d.ts +1 -1
  642. package/dist/selftest/live-projects.test.js +47 -20
  643. package/dist/selftest/live-terminal.test.d.ts +1 -1
  644. package/dist/selftest/live-terminal.test.js +41 -15
  645. package/dist/selftest/local-config.test.d.ts +1 -1
  646. package/dist/selftest/local-config.test.js +64 -16
  647. package/dist/selftest/mirror.test.d.ts +1 -1
  648. package/dist/selftest/mirror.test.js +102 -32
  649. package/dist/selftest/network.test.d.ts +1 -1
  650. package/dist/selftest/network.test.js +17 -8
  651. package/dist/selftest/personalization.test.d.ts +1 -1
  652. package/dist/selftest/personalization.test.js +12 -5
  653. package/dist/selftest/projects.test.d.ts +1 -1
  654. package/dist/selftest/projects.test.js +280 -85
  655. package/dist/selftest/repair.test.d.ts +1 -1
  656. package/dist/selftest/repair.test.js +17 -5
  657. package/dist/selftest/repo-guard.test.d.ts +1 -1
  658. package/dist/selftest/repo-guard.test.js +21 -20
  659. package/dist/selftest/secrets.test.d.ts +1 -1
  660. package/dist/selftest/secrets.test.js +57 -13
  661. package/dist/selftest/setup.test.d.ts +1 -1
  662. package/dist/selftest/setup.test.js +25 -5
  663. package/dist/selftest/{fixtures.d.ts → support/fixtures.d.ts} +5 -3
  664. package/dist/selftest/{fixtures.js → support/fixtures.js} +95 -17
  665. package/dist/selftest/{harness.js → support/harness.js} +24 -7
  666. package/dist/selftest/{live.d.ts → support/live.d.ts} +2 -2
  667. package/dist/selftest/{live.js → support/live.js} +34 -10
  668. package/dist/selftest/support/suite.js +1 -0
  669. package/dist/selftest/sync.test.d.ts +1 -1
  670. package/dist/selftest/sync.test.js +64 -26
  671. package/dist/selftest/test-guard.test.d.ts +1 -1
  672. package/dist/selftest/test-guard.test.js +43 -15
  673. package/dist/selftest/toolchains.test.d.ts +1 -1
  674. package/dist/selftest/toolchains.test.js +135 -36
  675. package/dist/selftest/workspace-view.test.d.ts +1 -1
  676. package/dist/selftest/workspace-view.test.js +48 -11
  677. package/dist/selftest/workspace.test.d.ts +1 -1
  678. package/dist/selftest/workspace.test.js +13 -4
  679. package/dist/shared/{apps.d.ts → apps/catalogue.d.ts} +1 -11
  680. package/dist/shared/apps/catalogue.js +768 -0
  681. package/dist/shared/apps/index.d.ts +2 -0
  682. package/dist/shared/apps/index.js +2 -0
  683. package/dist/shared/apps/selection.d.ts +11 -0
  684. package/dist/shared/apps/selection.js +40 -0
  685. package/dist/shared/channel/index.d.ts +2 -0
  686. package/dist/shared/channel/index.js +2 -0
  687. package/dist/shared/channel/run-dir.d.ts +30 -0
  688. package/dist/shared/channel/run-dir.js +84 -0
  689. package/dist/shared/{schema.d.ts → channel/schema.d.ts} +38 -21
  690. package/dist/shared/{schema.js → channel/schema.js} +62 -35
  691. package/dist/shared/download/archive.d.ts +13 -0
  692. package/dist/shared/download/archive.js +57 -0
  693. package/dist/shared/download/downloader.d.ts +35 -0
  694. package/dist/shared/download/downloader.js +110 -0
  695. package/dist/shared/download/github.d.ts +16 -0
  696. package/dist/shared/download/github.js +74 -0
  697. package/dist/shared/download/http.d.ts +5 -0
  698. package/dist/shared/download/http.js +30 -0
  699. package/dist/shared/download/index.d.ts +5 -0
  700. package/dist/shared/download/index.js +5 -0
  701. package/dist/shared/download/spawn.d.ts +2 -0
  702. package/dist/shared/download/spawn.js +7 -0
  703. package/dist/shared/io/index.d.ts +3 -0
  704. package/dist/shared/io/index.js +3 -0
  705. package/dist/shared/io/json-file.d.ts +10 -0
  706. package/dist/shared/io/json-file.js +21 -0
  707. package/dist/shared/io/json.d.ts +13 -0
  708. package/dist/shared/io/json.js +49 -0
  709. package/dist/shared/{safe-remove.js → io/safe-remove.js} +32 -7
  710. package/dist/shared/{netrules.js → network/firewall-rules.js} +36 -5
  711. package/dist/shared/network/index.d.ts +2 -0
  712. package/dist/shared/network/index.js +2 -0
  713. package/dist/shared/{netpolicy.js → network/policy.js} +66 -11
  714. package/dist/shared/{paths.js → paths/claude-paths.js} +12 -2
  715. package/dist/shared/{guest-paths.d.ts → paths/guest-paths.d.ts} +6 -12
  716. package/dist/shared/{guest-paths.js → paths/guest-paths.js} +53 -36
  717. package/dist/shared/paths/index.d.ts +3 -0
  718. package/dist/shared/paths/index.js +3 -0
  719. package/dist/shared/{projects.js → paths/projects.js} +13 -3
  720. package/dist/shared/pty/client.d.ts +21 -0
  721. package/dist/shared/pty/client.js +79 -0
  722. package/dist/shared/{console-input.js → pty/console-input.js} +26 -6
  723. package/dist/shared/pty/index.d.ts +6 -0
  724. package/dist/shared/pty/index.js +6 -0
  725. package/dist/shared/pty/input-joiner.d.ts +15 -0
  726. package/dist/shared/pty/input-joiner.js +44 -0
  727. package/dist/shared/pty/output-filter.d.ts +13 -0
  728. package/dist/shared/pty/output-filter.js +140 -0
  729. package/dist/shared/pty/protocol.d.ts +36 -0
  730. package/dist/shared/pty/protocol.js +60 -0
  731. package/dist/shared/pty/terminal.d.ts +24 -0
  732. package/dist/shared/pty/terminal.js +147 -0
  733. package/dist/shared/test-guard.js +3 -1
  734. package/dist/sync/claude-mem.d.ts +1 -1
  735. package/dist/sync/claude-mem.js +9 -4
  736. package/dist/sync/history.d.ts +1 -29
  737. package/dist/sync/history.js +57 -45
  738. package/dist/sync/index.d.ts +5 -0
  739. package/dist/sync/index.js +5 -0
  740. package/dist/sync/sync-cycle.d.ts +18 -0
  741. package/dist/sync/sync-cycle.js +85 -0
  742. package/dist/sync/sync-state.d.ts +32 -0
  743. package/dist/sync/sync-state.js +37 -0
  744. package/dist/sync/watcher.d.ts +0 -18
  745. package/dist/sync/watcher.js +66 -100
  746. package/native/keep-awake.ps1 +8 -0
  747. package/native/power.cs +23 -0
  748. package/native/stop-events.ps1 +38 -0
  749. package/package.json +11 -3
  750. package/sandbox/linkgate.cs +98 -0
  751. package/sandbox/memlog.ps1 +15 -6
  752. package/schemas/config.schema.json +34 -1
  753. package/schemas/sandbox-config.schema.json +34 -1
  754. package/dist/cli/boot-progress.d.ts +0 -22
  755. package/dist/cli/boot-progress.js +0 -59
  756. package/dist/cli/commands/launch.d.ts +0 -32
  757. package/dist/cli/commands/launch.js +0 -421
  758. package/dist/cli/commands/maintenance.d.ts +0 -10
  759. package/dist/cli/commands/maintenance.js +0 -220
  760. package/dist/cli/commands/project.d.ts +0 -33
  761. package/dist/cli/commands/project.js +0 -102
  762. package/dist/cli/commands/projects.d.ts +0 -14
  763. package/dist/cli/commands/projects.js +0 -146
  764. package/dist/cli/commands/restart.d.ts +0 -6
  765. package/dist/cli/commands/restart.js +0 -95
  766. package/dist/cli/commands/sessions.d.ts +0 -12
  767. package/dist/cli/commands/sessions.js +0 -258
  768. package/dist/cli/menu/settings/editors.js +0 -305
  769. package/dist/cli/tui/dialogs.d.ts +0 -57
  770. package/dist/cli/tui/dialogs.js +0 -162
  771. package/dist/core/config.js +0 -109
  772. package/dist/core/project-policy.d.ts +0 -62
  773. package/dist/core/project-policy.js +0 -121
  774. package/dist/core/schema.d.ts +0 -6
  775. package/dist/core/schema.js +0 -8
  776. package/dist/core/util.d.ts +0 -62
  777. package/dist/core/util.js +0 -156
  778. package/dist/core/workspace.d.ts +0 -35
  779. package/dist/core/workspace.js +0 -206
  780. package/dist/guest/boot-env.d.ts +0 -4
  781. package/dist/guest/daemon.js +0 -57
  782. package/dist/guest/env.d.ts +0 -56
  783. package/dist/guest/env.js +0 -115
  784. package/dist/guest/gitrules.js +0 -11
  785. package/dist/guest/project-status.d.ts +0 -5
  786. package/dist/guest/project-status.js +0 -17
  787. package/dist/guest/setup/user.js +0 -51
  788. package/dist/guest/toolchains/cli.d.ts +0 -10
  789. package/dist/guest/toolchains/common.d.ts +0 -54
  790. package/dist/guest/toolchains/common.js +0 -147
  791. package/dist/guest/toolchains/databases/dynamodb.d.ts +0 -8
  792. package/dist/guest/toolchains/databases/dynamodb.js +0 -52
  793. package/dist/guest/toolchains/databases/index.d.ts +0 -6
  794. package/dist/guest/toolchains/databases/index.js +0 -62
  795. package/dist/guest/toolchains/databases/mongodb.d.ts +0 -3
  796. package/dist/guest/toolchains/databases/mongodb.js +0 -31
  797. package/dist/guest/toolchains/databases/mysql.d.ts +0 -3
  798. package/dist/guest/toolchains/databases/mysql.js +0 -38
  799. package/dist/guest/toolchains/databases/postgres.d.ts +0 -5
  800. package/dist/guest/toolchains/databases/postgres.js +0 -38
  801. package/dist/guest/toolchains/databases/redis.d.ts +0 -3
  802. package/dist/guest/toolchains/databases/redis.js +0 -16
  803. package/dist/guest/toolchains/git.d.ts +0 -3
  804. package/dist/guest/toolchains/go.d.ts +0 -3
  805. package/dist/guest/toolchains/java.d.ts +0 -8
  806. package/dist/guest/toolchains/node.d.ts +0 -3
  807. package/dist/guest/toolchains/pwsh.d.ts +0 -4
  808. package/dist/guest/toolchains/python.d.ts +0 -3
  809. package/dist/guest/toolchains/scripting/php.d.ts +0 -3
  810. package/dist/guest/toolchains/scripting/ruby.d.ts +0 -3
  811. package/dist/host/accounts.d.ts +0 -32
  812. package/dist/host/accounts.js +0 -128
  813. package/dist/host/agent-commands.d.ts +0 -25
  814. package/dist/host/agent-commands.js +0 -145
  815. package/dist/host/channel.d.ts +0 -38
  816. package/dist/host/channel.js +0 -163
  817. package/dist/host/generate.d.ts +0 -13
  818. package/dist/host/generate.js +0 -115
  819. package/dist/host/launch/projects.d.ts +0 -17
  820. package/dist/host/launch/wsb.js +0 -34
  821. package/dist/host/motw.d.ts +0 -17
  822. package/dist/host/motw.js +0 -74
  823. package/dist/host/pc-scan.d.ts +0 -6
  824. package/dist/host/personalize.d.ts +0 -10
  825. package/dist/host/personalize.js +0 -97
  826. package/dist/host/platform.js +0 -129
  827. package/dist/host/project-scan.d.ts +0 -7
  828. package/dist/host/projects.d.ts +0 -123
  829. package/dist/host/projects.js +0 -196
  830. package/dist/host/repo-guard.d.ts +0 -43
  831. package/dist/host/repo-guard.js +0 -347
  832. package/dist/host/secrets.d.ts +0 -14
  833. package/dist/host/secrets.js +0 -133
  834. package/dist/host/stops.d.ts +0 -67
  835. package/dist/host/stops.js +0 -126
  836. package/dist/shared/apps.js +0 -114
  837. package/dist/shared/download.d.ts +0 -63
  838. package/dist/shared/download.js +0 -238
  839. package/dist/shared/pty-client.d.ts +0 -108
  840. package/dist/shared/pty-client.js +0 -406
  841. package/dist/shared/rundir.d.ts +0 -41
  842. package/dist/shared/rundir.js +0 -96
  843. /package/dist/{guest/daemon.d.ts → cli/tui/list/list-types.js} +0 -0
  844. /package/dist/{guest/db.d.ts → cli/tui/screen.js} +0 -0
  845. /package/dist/core/{detect-databases.d.ts → detect/databases.d.ts} +0 -0
  846. /package/dist/{guest/toolchains → core/detect}/versions.d.ts +0 -0
  847. /package/dist/guest/{setup/agents.d.ts → agents/agent-installer.d.ts} +0 -0
  848. /package/dist/guest/{audit-parse.d.ts → audit/parse.d.ts} +0 -0
  849. /package/dist/guest/{guide.d.ts → boot/guide.d.ts} +0 -0
  850. /package/dist/guest/daemon/{shutdown.d.ts → idle-shutdown.d.ts} +0 -0
  851. /package/dist/guest/daemon/{session.d.ts → sessions.d.ts} +0 -0
  852. /package/dist/guest/{main.d.ts → entries/daemon.d.ts} +0 -0
  853. /package/dist/guest/{netproxy.d.ts → entries/db.d.ts} +0 -0
  854. /package/dist/{selftest/suite.js → guest/entries/gitguard.d.ts} +0 -0
  855. /package/dist/guest/{gitguard.d.ts → git/decision.d.ts} +0 -0
  856. /package/dist/guest/{ports.d.ts → runtime/ports.d.ts} +0 -0
  857. /package/dist/guest/{project-context.d.ts → runtime/project-context.d.ts} +0 -0
  858. /package/dist/guest/{cmdline.d.ts → sessions/cmdline.d.ts} +0 -0
  859. /package/dist/guest/{ptyhost.d.ts → sessions/pty-host.d.ts} +0 -0
  860. /package/dist/guest/{view.d.ts → sessions/viewer.d.ts} +0 -0
  861. /package/dist/guest/setup/{policy.d.ts → managed-policy.d.ts} +0 -0
  862. /package/dist/host/{window.d.ts → sandbox/window.d.ts} +0 -0
  863. /package/dist/host/{wsb.d.ts → sandbox/wsb-cli.d.ts} +0 -0
  864. /package/dist/host/{cleanup.d.ts → storage/cleanup.d.ts} +0 -0
  865. /package/dist/selftest/{harness.d.ts → support/harness.d.ts} +0 -0
  866. /package/dist/selftest/{suite.d.ts → support/suite.d.ts} +0 -0
  867. /package/dist/shared/{safe-remove.d.ts → io/safe-remove.d.ts} +0 -0
  868. /package/dist/shared/{netrules.d.ts → network/firewall-rules.d.ts} +0 -0
  869. /package/dist/shared/{netpolicy.d.ts → network/policy.d.ts} +0 -0
  870. /package/dist/shared/{paths.d.ts → paths/claude-paths.d.ts} +0 -0
  871. /package/dist/shared/{projects.d.ts → paths/projects.d.ts} +0 -0
  872. /package/dist/shared/{console-input.d.ts → pty/console-input.d.ts} +0 -0
@@ -0,0 +1,62 @@
1
+ import path from 'node:path';
2
+ import { askYesNo } from '../../../core/prompt.js';
3
+ import { SandboxChannel } from '../../../host/channel/index.js';
4
+ import { isSandboxRunning } from '../../../host/sandbox/index.js';
5
+ import { isWithin } from '../../../shared/paths/index.js';
6
+ import { RunDir } from '../../../shared/channel/index.js';
7
+ import { fail, safeText } from '../../../core/util/index.js';
8
+ import { requireOnPc, requireRunning } from '../context.js';
9
+ import { hereDir, locateHere } from '../projects/index.js';
10
+ import { working, c } from '../../output/index.js';
11
+ /** Restarts this folder's project's sessions (--all: every session). */
12
+ export async function restart(ctx) {
13
+ requireOnPc('restart');
14
+ requireRunning();
15
+ const here = locateHere(ctx, new RunDir(ctx.dataPath).readSandboxStatus());
16
+ const scope = ctx.options.all || !here.project ? undefined : here.project.guest;
17
+ if (!scope && !ctx.options.all)
18
+ console.log(c.dim(hereDir(ctx) + ' is not a project of the running sandbox: restarting every session.'));
19
+ console.log(safeText((await working('Restarting the agents' + (scope ? ' of ' + here.project?.name : ''), () => new SandboxChannel(ctx.dataPath).restart(ctx.options.harness ?? null, scope))).message));
20
+ return 0;
21
+ }
22
+ /**
23
+ * Stopping ends every project's sessions: other projects' sessions need a yes (or --yes). A script must never end them
24
+ * by accident, so without a terminal to ask in it fails.
25
+ */
26
+ async function othersMayEnd(ctx, others) {
27
+ if (!others.length || ctx.options.yes)
28
+ return true;
29
+ const interactive = process.stdin.isTTY && process.stdout.isTTY;
30
+ if (!interactive)
31
+ fail(others.length + ' of these sessions belong to other projects, so the sandbox was not stopped.', 'Stop it anyway with: sandbox stop --yes');
32
+ return askYesNo(others.length + ' of them belong to other projects. Stop the whole sandbox?');
33
+ }
34
+ export async function stop(ctx) {
35
+ requireOnPc('stop');
36
+ if (!isSandboxRunning()) {
37
+ console.log('No Windows Sandbox is running.');
38
+ return 0;
39
+ }
40
+ const sandbox = new RunDir(ctx.dataPath).readSandboxStatus() ??
41
+ fail('This sandbox was not started by this tool.', 'Close its window instead.');
42
+ // Stopping ends every project's sessions, not just this folder's: say which, and ask when others would end too.
43
+ const here = locateHere(ctx, sandbox);
44
+ const channel = new SandboxChannel(ctx.dataPath);
45
+ const running = channel.currentSessions();
46
+ const others = running.filter((s) => !(here.guestDir && isWithin(here.project?.guest ?? here.guestDir, s.cwd)));
47
+ if (running.length)
48
+ console.log('Stopping ends ' +
49
+ running.length +
50
+ ' session(s): ' +
51
+ running
52
+ .map((s) => safeText(s.harness) + ' in ' + safeText(s.project ?? path.win32.basename(s.cwd)))
53
+ .join(', ') +
54
+ '.');
55
+ if (!(await othersMayEnd(ctx, others))) {
56
+ console.log('Nothing changed.');
57
+ return 1;
58
+ }
59
+ await working('Asking the sandbox to shut down', () => channel.exec(['C:\\Windows\\System32\\shutdown.exe', '/s', '/t', '2'], sandbox.guestWorkspace, 30));
60
+ console.log('Sandbox is shutting down; history and claude-mem sync back when it closes.');
61
+ return 0;
62
+ }
@@ -0,0 +1,6 @@
1
+ import { type Context } from '../context.js';
2
+ export declare function exec(ctx: Context): Promise<number>;
3
+ /**
4
+ * `sandbox db`: runs the sandbox's own `sbx-db` in this folder's project, which knows its database versions and ports.
5
+ */
6
+ export declare function db(ctx: Context): Promise<number>;
@@ -0,0 +1,72 @@
1
+ import path from 'node:path';
2
+ import { spawnSync } from 'node:child_process';
3
+ import { SandboxChannel } from '../../../host/channel/index.js';
4
+ import { insideSandbox } from '../../../host/sandbox/index.js';
5
+ import { NeedsRestart } from '../../../host/projects/index.js';
6
+ import { fail, safeText } from '../../../core/util/index.js';
7
+ import { printJson, working } from '../../output/index.js';
8
+ import { requireOnPc, requireRunning } from '../context.js';
9
+ import { readySandbox } from '../launch/index.js';
10
+ import { hereDir, joinHere, provisionJoined } from '../projects/index.js';
11
+ /** What a command run in the sandbox printed (text from the sandbox: through safeText), or why it failed. */
12
+ function printExecResult(result) {
13
+ if (result.stdout)
14
+ process.stdout.write(safeText(result.stdout));
15
+ if (result.stderr)
16
+ process.stderr.write(safeText(result.stderr));
17
+ if (!result.ok && !result.stdout && !result.stderr)
18
+ console.error(safeText(result.message));
19
+ }
20
+ /** The guest folder for this folder, joining the running sandbox (and setting the project up) when needed. */
21
+ async function guestFolderHere(ctx, what) {
22
+ const ready = await readySandbox(ctx.dataPath);
23
+ try {
24
+ // A command needs no restart for what the project wants at boot: it runs without them (and says so).
25
+ const joined = await joinHere(ctx, ready, { noRestart: true });
26
+ for (const note of joined.notes)
27
+ console.error(note);
28
+ await provisionJoined(ctx, joined);
29
+ return joined.guestDir;
30
+ }
31
+ catch (e) {
32
+ if (!(e instanceof NeedsRestart))
33
+ throw e;
34
+ return fail(hereDir(ctx) + ' is not in the running sandbox (' + e.reason + '), so "sandbox ' + what + '" cannot run there.', 'sandbox claude (or sandbox start) from that folder offers a restart that adds it; or add its parent folder as a root: sandbox projects roots add "' +
35
+ path.dirname(e.hostDir) +
36
+ '"');
37
+ }
38
+ }
39
+ export async function exec(ctx) {
40
+ const command = [...ctx.options.positionals, ...ctx.options.passthrough];
41
+ if (command.length === 0)
42
+ fail('No command given.', 'Usage: sandbox exec [--timeout <s>] -- <command> [args...]');
43
+ requireOnPc('exec');
44
+ requireRunning();
45
+ const cwd = await guestFolderHere(ctx, 'exec');
46
+ const result = await new SandboxChannel(ctx.dataPath).exec(command, cwd, ctx.options.timeout);
47
+ if (!printJson(ctx, result))
48
+ printExecResult(result);
49
+ return result.exitCode ?? 1;
50
+ }
51
+ /**
52
+ * `sandbox db`: runs the sandbox's own `sbx-db` in this folder's project, which knows its database versions and ports.
53
+ */
54
+ export async function db(ctx) {
55
+ const [action = 'list', name] = ctx.options.positionals;
56
+ if (!['list', 'start', 'stop'].includes(action))
57
+ fail('Unknown db action "' + action + '".', 'Use: sandbox db (list) or sandbox db start|stop <postgres|mysql|mongodb|redis|dynamodb>');
58
+ if (action !== 'list' && !name)
59
+ fail('Which database?', 'Usage: sandbox db ' + action + ' <postgres|mysql|mongodb|redis|dynamodb>');
60
+ // Already inside the sandbox: run the database tool here instead of asking the sandbox from outside.
61
+ if (insideSandbox())
62
+ return (spawnSync(process.execPath, [path.join(ctx.packageRoot, 'dist', 'runtime', 'db.js'), action, ...(name ? [name] : [])], { stdio: 'inherit', windowsHide: true }).status ?? 1);
63
+ requireRunning('Start one with: sandbox start --database <name>');
64
+ const cwd = await guestFolderHere(ctx, 'db');
65
+ // Starting can download the database the first time.
66
+ const result = await working((action === 'list' ? 'Asking' : action === 'start' ? 'Starting' : 'Stopping') +
67
+ ' the database' +
68
+ (name ? ' ' + name : 's') +
69
+ ' in the sandbox', () => new SandboxChannel(ctx.dataPath).exec(['sbx-db', action, ...(name ? [name] : [])], cwd, 1800));
70
+ printExecResult(result);
71
+ return result.exitCode ?? 1;
72
+ }
@@ -0,0 +1,6 @@
1
+ export * from './attach.js';
2
+ export * from './list.js';
3
+ export * from './status.js';
4
+ export * from './exec.js';
5
+ export * from './control.js';
6
+ export * from './window.js';
@@ -0,0 +1,9 @@
1
+ // Working with a running sandbox: attach, sessions, status, exec, restart, stop, show/hide. Each knows which project
2
+ // you run it from (project.ts): attach and sessions put that project's sessions first, exec and db run in it, restart
3
+ // restarts its sessions, stop warns about the other projects' sessions.
4
+ export * from './attach.js';
5
+ export * from './list.js';
6
+ export * from './status.js';
7
+ export * from './exec.js';
8
+ export * from './control.js';
9
+ export * from './window.js';
@@ -0,0 +1,15 @@
1
+ import type { SessionStatus } from '../../../core/types.js';
2
+ import type { Viewers } from '../../../shared/pty/index.js';
3
+ import { type RegistryEntry } from '../../../host/projects/index.js';
4
+ import { type Context } from '../context.js';
5
+ export declare function viewerText(v: Viewers | null | undefined): string;
6
+ export declare function projectOf(projects: RegistryEntry[], s: SessionStatus): string;
7
+ /** A session with who is watching it and whether it is in the project of the current folder. */
8
+ export type ListedSession = SessionStatus & {
9
+ readonly viewers?: Viewers | null;
10
+ readonly here?: boolean;
11
+ readonly projectName?: string;
12
+ };
13
+ /** Sessions with who is watching them; `here` marks the ones in the project of the current folder. */
14
+ export declare function listedSessions(ctx: Context): Promise<ListedSession[]>;
15
+ export declare function sessions(ctx: Context): Promise<number>;
@@ -0,0 +1,65 @@
1
+ import _ from 'lodash';
2
+ import { SandboxChannel, sessionViewers } from '../../../host/channel/index.js';
3
+ import { isSandboxRunning } from '../../../host/sandbox/index.js';
4
+ import { ProjectRegistry } from '../../../host/projects/index.js';
5
+ import { isWithin, projectForGuestDir } from '../../../shared/paths/index.js';
6
+ import { RunDir } from '../../../shared/channel/index.js';
7
+ import { safeText } from '../../../core/util/index.js';
8
+ import { printJson, table, ago, c, shortenMiddle, termWidth } from '../../output/index.js';
9
+ import { locateHere } from '../projects/index.js';
10
+ export function viewerText(v) {
11
+ return v === undefined
12
+ ? '-'
13
+ : v === null
14
+ ? 'unknown (older session)'
15
+ : v.remote + ' here, ' + (v.viewers - v.remote) + ' in sandbox';
16
+ }
17
+ export function projectOf(projects, s) {
18
+ return s.project ?? projectForGuestDir(projects, s.cwd)?.name ?? '-';
19
+ }
20
+ /** Sessions with who is watching them; `here` marks the ones in the project of the current folder. */
21
+ export async function listedSessions(ctx) {
22
+ // Who is attached comes from each session itself, so a terminal that was closed is never counted.
23
+ const live = isSandboxRunning();
24
+ // Only this sandbox's sessions are asked (and at most MAX_QUERIED_SESSIONS): the sandbox writes these files.
25
+ const ask = new Set(live ? new SandboxChannel(ctx.dataPath).currentSessions().map((s) => s.id) : []);
26
+ const here = live ? locateHere(ctx, new RunDir(ctx.dataPath).readSandboxStatus()) : { guestDir: null };
27
+ const projects = new ProjectRegistry(ctx.storageRoot).read()?.projects ?? [];
28
+ return Promise.all(new RunDir(ctx.dataPath).listSessions().map(async (s) => ({
29
+ ...s,
30
+ projectName: projectOf(projects, s),
31
+ here: Boolean(here.guestDir && isWithin(here.guestDir, s.cwd)),
32
+ ...(ask.has(s.id) ? { viewers: await sessionViewers(s) } : {}),
33
+ })));
34
+ }
35
+ export async function sessions(ctx) {
36
+ const list = await listedSessions(ctx);
37
+ if (printJson(ctx, list.map((s) => _.omit(s, 'attach'))))
38
+ return 0;
39
+ if (list.length === 0) {
40
+ console.log('No sessions. Start one with: sandbox claude');
41
+ return 0;
42
+ }
43
+ // This folder's project first, newest first within each group; harness, cwd and times are written by the sandbox.
44
+ const ordered = [
45
+ ..._.sortBy(list.filter((s) => s.here), (s) => s.startedAt).reverse(),
46
+ ..._.sortBy(list.filter((s) => !s.here), (s) => s.startedAt).reverse(),
47
+ ];
48
+ const folderWidth = Math.max(16, termWidth() - 80);
49
+ table([
50
+ ['', 'ID', 'AGENT', 'PROJECT', 'STATE', 'ATTACHED', 'FOLDER', 'STARTED'],
51
+ ...ordered.map((s) => [
52
+ s.here ? '*' : '',
53
+ s.id,
54
+ safeText(s.harness),
55
+ safeText(s.projectName ?? '-'),
56
+ s.phase + (s.exitCode !== undefined ? ' (' + s.exitCode + ')' : ''),
57
+ viewerText(s.viewers),
58
+ shortenMiddle(safeText(s.cwd), folderWidth),
59
+ ago(s.startedAt),
60
+ ]),
61
+ ]);
62
+ if (list.some((s) => s.here))
63
+ console.log(c.dim('* = the project of this folder'));
64
+ return 0;
65
+ }
@@ -0,0 +1,2 @@
1
+ import type { Context } from '../context.js';
2
+ export declare function status(ctx: Context): Promise<number>;
@@ -0,0 +1,153 @@
1
+ import _ from 'lodash';
2
+ import { AccountStore } from '../../../host/profile/index.js';
3
+ import { SandboxChannel } from '../../../host/channel/index.js';
4
+ import { isSandboxRunning } from '../../../host/sandbox/index.js';
5
+ import { ProjectRegistry } from '../../../host/projects/index.js';
6
+ import { RepoGuardStore } from '../../../host/guard/index.js';
7
+ import { projectForGuestDir } from '../../../shared/paths/index.js';
8
+ import { RunDir } from '../../../shared/channel/index.js';
9
+ import { watcherRunning } from '../../../sync/index.js';
10
+ import { errMsg, safeText } from '../../../core/util/index.js';
11
+ import { printJson, table, ago, c, shortenMiddle, termWidth } from '../../output/index.js';
12
+ import { hereDir, locateHere } from '../projects/index.js';
13
+ import { listedSessions, viewerText } from './list.js';
14
+ /** Running databases by port, from the sandbox's own `sbx-db list` (best effort: unknown when it does not answer). */
15
+ async function runningPorts(channel, cwd) {
16
+ try {
17
+ const r = await channel.exec(['sbx-db', 'list'], cwd, 30);
18
+ return new Set((r.stdout ?? '')
19
+ .split(/\r?\n/)
20
+ .filter((l) => /\brunning\b/.test(l))
21
+ .map((l) => Number(/port (\d+)/.exec(l)?.[1]))
22
+ .filter((n) => n > 0));
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ }
28
+ /** One project: its setup, databases, running sessions and repo guard findings (sandbox text through safeText). */
29
+ function projectInfo(p, all, facts) {
30
+ const prov = facts.provisioning.find((s) => s.name.toLowerCase() === p.name.toLowerCase());
31
+ const own = facts.sessions.filter((s) => s.phase === 'running' && projectForGuestDir(all, s.cwd)?.name === p.name);
32
+ const { ports } = facts;
33
+ return {
34
+ name: p.name,
35
+ host: p.host,
36
+ guest: p.guest,
37
+ mechanism: p.mechanism,
38
+ here: facts.here === p.name,
39
+ setup: prov
40
+ ? { phase: prov.phase, message: safeText(prov.message) }
41
+ : { phase: 'not set up yet', message: 'set up when you first start a session or command there' },
42
+ databases: (prov?.databases ?? []).map((d) => ({
43
+ database: safeText(d.database),
44
+ port: d.port,
45
+ state: ports ? (ports.has(d.port) ? 'running' : 'stopped') : 'unknown',
46
+ })),
47
+ sessions: own.map((s) => ({
48
+ id: s.id,
49
+ harness: safeText(s.harness),
50
+ viewers: viewerText(s.viewers),
51
+ started: s.startedAt,
52
+ })),
53
+ // With several guarded folders each finding starts with its folder.
54
+ repoGuard: facts.findings
55
+ .filter((f) => f.detail.toLowerCase().startsWith(p.host.toLowerCase() + ':'))
56
+ .map((f) => f.kind + ': ' + safeText(f.detail)),
57
+ };
58
+ }
59
+ const MECHANISM_TEXT = {
60
+ launch: 'started from here',
61
+ root: 'in a project root',
62
+ boot: 'mapped at start',
63
+ };
64
+ function mechanismText(mechanism) {
65
+ return mechanism in MECHANISM_TEXT ? MECHANISM_TEXT[mechanism] : 'wsb share';
66
+ }
67
+ function printProject(p) {
68
+ console.log((p.here ? '* ' : ' ') +
69
+ c.bold(p.name) +
70
+ ' ' +
71
+ p.host +
72
+ ' -> ' +
73
+ p.guest +
74
+ c.dim(' (' + mechanismText(p.mechanism) + ')'));
75
+ console.log(' setup: ' +
76
+ p.setup.phase +
77
+ (p.setup.phase === 'ready' ? '' : ' - ' + shortenMiddle(p.setup.message, termWidth() - 20)));
78
+ if (p.databases.length)
79
+ console.log(' databases: ' + p.databases.map((d) => d.database + ' :' + d.port + ' ' + d.state).join(', '));
80
+ for (const s of p.sessions)
81
+ console.log(' session ' + s.id + ' ' + s.harness + ' ' + s.viewers + ' ' + ago(s.started));
82
+ for (const f of p.repoGuard)
83
+ console.log(' ' + c.yellow('guard: ' + f));
84
+ }
85
+ export async function status(ctx) {
86
+ const running = isSandboxRunning();
87
+ const run = new RunDir(ctx.dataPath);
88
+ const channel = new SandboxChannel(ctx.dataPath);
89
+ const guard = new RepoGuardStore(ctx.dataPath);
90
+ const sandbox = run.readSandboxStatus();
91
+ const registry = running ? new ProjectRegistry(ctx.storageRoot).read() : null;
92
+ const ready = running && sandbox?.phase === 'ready';
93
+ const daemon = ready
94
+ ? await channel.ping().then((r) => r.message, (e) => 'no answer (' + errMsg(e) + ')')
95
+ : '-';
96
+ const here = running ? locateHere(ctx, sandbox) : { project: null, guestDir: null };
97
+ const sessionList = running ? await listedSessions(ctx) : [];
98
+ const provisioning = running ? run.listProjectStatus() : [];
99
+ const ports = ready && sandbox ? await runningPorts(channel, sandbox.guestWorkspace) : null;
100
+ const findings = guard.findings();
101
+ const startedAt = Number(/^(\d+)-/.exec(registry?.launchId ?? sandbox?.launchId ?? '')?.[1]) || null;
102
+ const all = registry?.projects ?? [];
103
+ const facts = { here: here.project?.name ?? null, provisioning, sessions: sessionList, ports, findings };
104
+ const projects = all.map((p) => projectInfo(p, all, facts));
105
+ const info = {
106
+ sandbox: {
107
+ running,
108
+ phase: running ? (sandbox?.phase ?? 'unknown') : 'stopped',
109
+ message: sandbox?.message,
110
+ headless: sandbox?.headless,
111
+ uptime: running && startedAt ? ago(startedAt).replace(' ago', '') : null,
112
+ daemon,
113
+ account: new AccountStore(ctx.storageRoot).activeFor(ctx.dataPath),
114
+ syncWatcher: watcherRunning(ctx.dataPath),
115
+ },
116
+ here: { folder: hereDir(ctx), project: here.project?.name ?? null, guest: here.guestDir },
117
+ roots: registry?.roots ?? [],
118
+ projects,
119
+ otherSessions: sessionList
120
+ .filter((s) => s.phase === 'running' && !projects.some((p) => p.sessions.some((x) => x.id === s.id)))
121
+ .map((s) => ({ id: s.id, harness: safeText(s.harness), cwd: safeText(s.cwd) })),
122
+ repoGuard: {
123
+ guarded: guard.guarded().length,
124
+ findings: findings.map((f) => f.kind + ': ' + f.detail),
125
+ },
126
+ };
127
+ if (printJson(ctx, info))
128
+ return 0;
129
+ const yesNo = (v) => (typeof v === 'boolean' ? (v ? 'yes' : 'no') : String(v ?? '-'));
130
+ table(Object.entries(info.sandbox).map(([k, v]) => [_.startCase(k), safeText(yesNo(v))]));
131
+ if (!running)
132
+ return 0;
133
+ console.log('\n' +
134
+ c.bold('Projects') +
135
+ c.dim(' (* = this folder: ' + info.here.folder + (info.here.project ? '' : ', not in this sandbox') + ')'));
136
+ for (const p of projects)
137
+ printProject(p);
138
+ for (const r of info.roots)
139
+ console.log(' root ' + r.host + ' -> ' + r.guest + c.dim(' (every project in it opens without a restart)'));
140
+ for (const s of info.otherSessions)
141
+ console.log(' session ' + s.id + ' ' + s.harness + ' ' + s.cwd);
142
+ console.log('\n' +
143
+ c.bold('Repo guard') +
144
+ ' ' +
145
+ info.repoGuard.guarded +
146
+ ' folder(s) guarded; ' +
147
+ (findings.length
148
+ ? c.yellow(findings.length + ' change(s) neutralised:')
149
+ : 'nothing from the sandbox needed neutralising'));
150
+ for (const f of info.repoGuard.findings.slice(-10))
151
+ console.log(' ' + c.yellow(safeText(f)));
152
+ return 0;
153
+ }
@@ -0,0 +1,3 @@
1
+ import { type Context } from '../context.js';
2
+ export declare function show(ctx: Context): number;
3
+ export declare function hide(ctx: Context): Promise<number>;
@@ -0,0 +1,18 @@
1
+ import { hideSandboxWindow, showSandboxWindow } from '../../../host/sandbox/index.js';
2
+ import { fail } from '../../../core/util/index.js';
3
+ import { requireOnPc, requireRunning } from '../context.js';
4
+ export function show(ctx) {
5
+ requireOnPc('show');
6
+ requireRunning();
7
+ if (!showSandboxWindow(ctx.storageRoot))
8
+ fail('Could not find the Windows Sandbox window.', 'It may still be starting; try again in a few seconds.');
9
+ return 0;
10
+ }
11
+ export async function hide(ctx) {
12
+ requireOnPc('hide');
13
+ requireRunning();
14
+ if (!(await hideSandboxWindow(ctx.storageRoot, 5)))
15
+ fail('Could not find a visible Windows Sandbox window.', 'It may already be hidden (sbx-show brings it back).');
16
+ console.log('Sandbox window hidden. Bring it back with: sbx-show');
17
+ return 0;
18
+ }
@@ -6,8 +6,8 @@ export interface Check {
6
6
  detail: string;
7
7
  }
8
8
  /** Windows Sandbox needs Pro, Enterprise or Education (build 18305+); Home ("Core*") and Server cannot run it. */
9
- export declare const editionSupport: (edition: string | null) => EditionSupport;
10
- export declare const nodeMajor: (version: string) => number;
9
+ export declare function editionSupport(edition: string | null): EditionSupport;
10
+ export declare function nodeMajor(version: string): number;
11
11
  /** Offer to enable the feature only when it is off and this edition can have it. */
12
- export declare const canEnableFeature: (f: MachineFacts) => boolean;
13
- export declare const buildChecks: (f: MachineFacts) => Check[];
12
+ export declare function canEnableFeature(f: MachineFacts): boolean;
13
+ export declare function buildChecks(f: MachineFacts): Check[];
@@ -2,7 +2,7 @@
2
2
  import { GB } from '../../../core/disk.js';
3
3
  import { ENABLE_COMMAND } from './facts.js';
4
4
  /** Windows Sandbox needs Pro, Enterprise or Education (build 18305+); Home ("Core*") and Server cannot run it. */
5
- export const editionSupport = (edition) => {
5
+ export function editionSupport(edition) {
6
6
  if (!edition)
7
7
  return 'unknown';
8
8
  if (/^Core/i.test(edition))
@@ -10,13 +10,24 @@ export const editionSupport = (edition) => {
10
10
  if (/^Server/i.test(edition))
11
11
  return 'unsupported';
12
12
  return /^(Professional|Enterprise|Education|IoTEnterprise)/i.test(edition) ? 'supported' : 'unknown';
13
- };
14
- export const nodeMajor = (version) => Number(/^v?(\d+)/.exec(version.trim())?.[1] ?? 0);
13
+ }
14
+ export function nodeMajor(version) {
15
+ return Number(/^v?(\d+)/.exec(version.trim())?.[1] ?? 0);
16
+ }
15
17
  /** Offer to enable the feature only when it is off and this edition can have it. */
16
- export const canEnableFeature = (f) => f.feature !== 'enabled' && f.feature !== 'pending' && !f.sandboxExe && ['supported', 'unknown'].includes(editionSupport(f.edition));
17
- const formatGb = (bytes) => (bytes / GB).toFixed(1) + ' GB';
18
- const check = (name, status, detail) => ({ name, status, detail });
19
- const editionCheck = (f) => {
18
+ export function canEnableFeature(f) {
19
+ return (f.feature !== 'enabled' &&
20
+ f.feature !== 'pending' &&
21
+ !f.sandboxExe &&
22
+ ['supported', 'unknown'].includes(editionSupport(f.edition)));
23
+ }
24
+ function formatGb(bytes) {
25
+ return (bytes / GB).toFixed(1) + ' GB';
26
+ }
27
+ function check(name, status, detail) {
28
+ return { name, status, detail };
29
+ }
30
+ function editionCheck(f) {
20
31
  const support = editionSupport(f.edition);
21
32
  const edition = (f.edition ?? 'unknown edition') + (f.build ? ', build ' + f.build : '');
22
33
  const name = 'Windows edition';
@@ -29,17 +40,17 @@ const editionCheck = (f) => {
29
40
  if (support === 'supported')
30
41
  return check(name, 'action', edition + ': too old; Windows Sandbox needs Windows 10 version 1903 or newer.');
31
42
  return check(name, 'warn', edition + ': not sure this edition has Windows Sandbox (it needs Pro, Enterprise or Education).');
32
- };
33
- const virtualizationCheck = (f) => {
43
+ }
44
+ function virtualizationCheck(f) {
34
45
  const name = 'CPU virtualization';
35
46
  const virt = f.hypervisorPresent || f.virtualizationFirmware;
36
47
  if (virt)
37
48
  return check(name, 'ok', f.hypervisorPresent ? 'on (hypervisor running)' : 'on');
38
49
  if (virt === false)
39
- return check(name, 'action', 'off. Turn on Intel VT-x / AMD-V (SVM) in your PC\'s BIOS/UEFI settings, then run this again.');
50
+ return check(name, 'action', "off. Turn on Intel VT-x / AMD-V (SVM) in your PC's BIOS/UEFI settings, then run this again.");
40
51
  return check(name, 'warn', 'could not tell; if Windows Sandbox will not start, turn on VT-x / AMD-V in the BIOS/UEFI.');
41
- };
42
- const featureCheck = (f) => {
52
+ }
53
+ function featureCheck(f) {
43
54
  const name = 'Windows Sandbox feature';
44
55
  if (f.feature === 'enabled' && f.sandboxExe)
45
56
  return check(name, 'ok', 'enabled');
@@ -48,16 +59,16 @@ const featureCheck = (f) => {
48
59
  if (f.sandboxExe)
49
60
  return check(name, 'ok', 'installed');
50
61
  return check(name, 'action', 'not enabled. In an admin PowerShell: ' + ENABLE_COMMAND + ', then restart.');
51
- };
52
- const memoryCheck = (f) => {
62
+ }
63
+ function memoryCheck(f) {
53
64
  const gb = formatGb(f.totalRamBytes);
54
65
  if (f.totalRamBytes < 4 * GB)
55
66
  return check('Memory', 'action', gb + ': Windows Sandbox needs at least 4 GB.');
56
67
  if (f.totalRamBytes < 8 * GB)
57
68
  return check('Memory', 'warn', gb + ': works, but 8 GB or more is recommended.');
58
69
  return check('Memory', 'ok', gb);
59
- };
60
- const diskCheck = (f) => {
70
+ }
71
+ function diskCheck(f) {
61
72
  if (f.freeDiskBytes === null)
62
73
  return check('Free disk', 'warn', 'could not check the drive of ' + f.storageRoot);
63
74
  const free = formatGb(f.freeDiskBytes) + ' free for ' + f.storageRoot;
@@ -66,6 +77,12 @@ const diskCheck = (f) => {
66
77
  if (f.freeDiskBytes < 20 * GB)
67
78
  return check('Free disk', 'warn', free + ': getting low; toolchains and caches can use several GB.');
68
79
  return check('Free disk', 'ok', free);
69
- };
70
- const nodeCheck = (f) => nodeMajor(f.nodeVersion) >= 20 ? check('Node.js', 'ok', f.nodeVersion) : check('Node.js', 'action', f.nodeVersion + ': needs 20 or newer (winget install OpenJS.NodeJS.LTS).');
71
- export const buildChecks = (f) => [editionCheck(f), virtualizationCheck(f), featureCheck(f), memoryCheck(f), diskCheck(f), nodeCheck(f)];
80
+ }
81
+ function nodeCheck(f) {
82
+ return nodeMajor(f.nodeVersion) >= 20
83
+ ? check('Node.js', 'ok', f.nodeVersion)
84
+ : check('Node.js', 'action', f.nodeVersion + ': needs 20 or newer (winget install OpenJS.NodeJS.LTS).');
85
+ }
86
+ export function buildChecks(f) {
87
+ return [editionCheck(f), virtualizationCheck(f), featureCheck(f), memoryCheck(f), diskCheck(f), nodeCheck(f)];
88
+ }
@@ -16,16 +16,16 @@ export interface MachineFacts {
16
16
  }
17
17
  export declare const ENABLE_COMMAND: string;
18
18
  /** `reg query <key>` output to { valueName: data }. */
19
- export declare const parseRegQuery: (text: string) => Record<string, string>;
19
+ export declare function parseRegQuery(text: string): Record<string, string>;
20
20
  /** The "State : ..." line of `Dism /Get-FeatureInfo` (English output only; anything else is unknown). */
21
- export declare const parseDismState: (text: string) => FeatureState;
21
+ export declare function parseDismState(text: string): FeatureState;
22
22
  /** Win32_OptionalFeature.InstallState: 1 enabled, 2 disabled, 3 absent. */
23
- export declare const featureFromInstallState: (state: number | null | undefined) => FeatureState;
24
- declare const Probe: z.ZodObject<{
23
+ export declare function featureFromInstallState(state: number | null | undefined): FeatureState;
24
+ declare const ProbeSchema: z.ZodObject<{
25
25
  virtualizationFirmware: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
26
26
  hypervisorPresent: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
27
27
  installState: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
28
28
  }, z.core.$strip>;
29
- export declare const parseProbe: (text: string) => z.infer<typeof Probe>;
30
- export declare const gatherFacts: (storageRoot: string) => MachineFacts;
29
+ export declare function parseProbe(text: string): z.infer<typeof ProbeSchema>;
30
+ export declare function gatherFacts(storageRoot: string): MachineFacts;
31
31
  export {};
@@ -3,23 +3,29 @@ import os from 'node:os';
3
3
  import _ from 'lodash';
4
4
  import { z } from 'zod';
5
5
  import { freeBytesAt } from '../../../core/disk.js';
6
- import { captureOutput, fileExists } from '../../../core/util.js';
6
+ import { captureOutput, fileExists } from '../../../core/util/index.js';
7
7
  import { SYSTEM, system32 } from '../../../shared/system.js';
8
8
  const FEATURE = 'Containers-DisposableClientVM';
9
9
  export const ENABLE_COMMAND = 'Enable-WindowsOptionalFeature -Online -FeatureName ' + FEATURE + ' -All -NoRestart';
10
10
  /** `reg query <key>` output to { valueName: data }. */
11
- export const parseRegQuery = (text) => Object.fromEntries(_.compact(text.split(/\r?\n/).map((line) => /^\s+(\S+)\s+REG_\w+\s+(.*)$/.exec(line)?.slice(1, 3))));
11
+ export function parseRegQuery(text) {
12
+ return Object.fromEntries(_.compact(text
13
+ .split(/\r?\n/)
14
+ .map((line) => /^\s+(\S+)\s+REG_\w+\s+(.*)$/.exec(line)?.slice(1, 3))));
15
+ }
12
16
  /** The "State : ..." line of `Dism /Get-FeatureInfo` (English output only; anything else is unknown). */
13
- export const parseDismState = (text) => {
17
+ export function parseDismState(text) {
14
18
  const state = /^State\s*:\s*(.+?)\s*$/im.exec(text)?.[1].toLowerCase() ?? '';
15
19
  if (state === 'enabled')
16
20
  return 'enabled';
17
21
  if (state.includes('pending'))
18
22
  return 'pending';
19
23
  return state.startsWith('disabled') ? 'disabled' : 'unknown';
20
- };
24
+ }
21
25
  /** Win32_OptionalFeature.InstallState: 1 enabled, 2 disabled, 3 absent. */
22
- export const featureFromInstallState = (state) => state === 1 ? 'enabled' : state === 2 || state === 3 ? 'disabled' : 'unknown';
26
+ export function featureFromInstallState(state) {
27
+ return state === 1 ? 'enabled' : state === 2 || state === 3 ? 'disabled' : 'unknown';
28
+ }
23
29
  // Fixed script (no outside data): CPU/hypervisor facts and the feature state, readable without admin rights.
24
30
  const PROBE = [
25
31
  '$ErrorActionPreference = "SilentlyContinue"',
@@ -31,16 +37,22 @@ const PROBE = [
31
37
  '$s = $null; if ($f) { $s = [int]$f.InstallState }',
32
38
  '@{ virtualizationFirmware = $v; hypervisorPresent = $h; installState = $s } | ConvertTo-Json -Compress',
33
39
  ].join('; ');
34
- const Probe = z.object({ virtualizationFirmware: z.boolean().nullable(), hypervisorPresent: z.boolean().nullable(), installState: z.number().nullable() }).partial();
35
- export const parseProbe = (text) => {
40
+ const ProbeSchema = z
41
+ .object({
42
+ virtualizationFirmware: z.boolean().nullable(),
43
+ hypervisorPresent: z.boolean().nullable(),
44
+ installState: z.number().nullable(),
45
+ })
46
+ .partial();
47
+ export function parseProbe(text) {
36
48
  try {
37
- return Probe.parse(JSON.parse(_.last(text.trim().split(/\r?\n/)) ?? ''));
49
+ return ProbeSchema.parse(JSON.parse(_.last(text.trim().split(/\r?\n/)) ?? ''));
38
50
  }
39
51
  catch {
40
52
  return {};
41
53
  }
42
- };
43
- export const gatherFacts = (storageRoot) => {
54
+ }
55
+ export function gatherFacts(storageRoot) {
44
56
  const reg = parseRegQuery(captureOutput(SYSTEM.reg(), ['query', 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion']));
45
57
  const probe = parseProbe(captureOutput(SYSTEM.powershell(), ['-NoProfile', '-NonInteractive', '-Command', PROBE]));
46
58
  // DISM knows about a pending restart but needs admin rights; the CIM state works for everyone.
@@ -57,4 +69,4 @@ export const gatherFacts = (storageRoot) => {
57
69
  storageRoot,
58
70
  nodeVersion: process.version,
59
71
  };
60
- };
72
+ }
@@ -1,2 +1,2 @@
1
1
  import { type Context } from '../context.js';
2
- export declare const setup: (ctx: Context) => Promise<number>;
2
+ export declare function setup(ctx: Context): Promise<number>;