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
@@ -4,9 +4,9 @@ import path from 'node:path';
4
4
  import _ from 'lodash';
5
5
  import { humanBytes, sizeOf } from '../../../core/disk.js';
6
6
  import { askTyped, askYesNo } from '../../../core/prompt.js';
7
- import { assertNoLinks, fail, isInsideOrEqual, isLink } from '../../../core/util.js';
8
- import { isSandboxRunning } from '../../../host/platform.js';
9
- import { table } from '../context.js';
7
+ import { assertNoLinks, fail, isInsideOrEqual, isLink } from '../../../core/util/index.js';
8
+ import { isSandboxRunning } from '../../../host/sandbox/index.js';
9
+ import { table } from '../../output/index.js';
10
10
  import { removeTree } from './remove.js';
11
11
  const DATA_AREAS = ['tools', 'databases', 'state', 'logs'];
12
12
  const SEGMENT = /^[A-Za-z0-9][A-Za-z0-9._ +@-]*$/;
@@ -16,7 +16,7 @@ const ALL_WARNING = 'removes EVERYTHING the sandbox keeps: toolchains, databases
16
16
  * Turns `sandbox data clean` arguments into folders. Pure (no disk access); throws a UserError for anything that is
17
17
  * not a plain relative target inside the data folder: absolute paths, drive letters, `..`, wildcards, unknown areas.
18
18
  */
19
- export const resolveCleanTargets = (inputs, dataPath, storageRoot) => {
19
+ export function resolveCleanTargets(inputs, dataPath, storageRoot) {
20
20
  const usage = 'Targets: all | tools | tools/<name> | tools/agents/<name> | databases | databases/<name> | state | state/<agent> | logs | launches | views. See them with: sandbox data';
21
21
  if (!inputs.length)
22
22
  fail('Say what to remove.', usage);
@@ -42,7 +42,12 @@ export const resolveCleanTargets = (inputs, dataPath, storageRoot) => {
42
42
  if (area === 'views') {
43
43
  if (rest.length)
44
44
  fail('Remove all views ("views"), not single ones.', usage);
45
- return { target, path: path.join(storageRoot, 'views'), root: storageRoot, warning: 'Views are the copies of your projects without their git-ignored files (workspaceFilter). Your projects are not touched; what the sandbox built or installed in them (node_modules, build output) goes, and the next start copies the projects again.' };
45
+ return {
46
+ target,
47
+ path: path.join(storageRoot, 'views'),
48
+ root: storageRoot,
49
+ warning: 'Views are the copies of your projects without their git-ignored files (workspaceFilter). Your projects are not touched; what the sandbox built or installed in them (node_modules, build output) goes, and the next start copies the projects again.',
50
+ };
46
51
  }
47
52
  if (area === 'accounts' || area === 'sync')
48
53
  fail('"' + area + '" is kept on this PC on purpose and is not removed here.', area === 'accounts' ? 'Remove a saved login with: sandbox account remove <name>' : usage);
@@ -52,7 +57,12 @@ export const resolveCleanTargets = (inputs, dataPath, storageRoot) => {
52
57
  fail('Remove all logs ("logs"), not single files.', usage);
53
58
  if (rest.length > (area === 'tools' && rest[0]?.toLowerCase() === 'agents' ? 2 : 1))
54
59
  fail('Refusing "' + raw + '": too deep.', usage);
55
- return { target, path: path.join(dataPath, area, ...rest), root: dataPath, ...(area === 'state' ? { warning: LOGIN_WARNING } : {}) };
60
+ return {
61
+ target,
62
+ path: path.join(dataPath, area, ...rest),
63
+ root: dataPath,
64
+ ...(area === 'state' ? { warning: LOGIN_WARNING } : {}),
65
+ };
56
66
  });
57
67
  // "all" covers everything; otherwise drop targets inside another target (tools + tools/go = tools).
58
68
  const all = resolved.find((t) => t.target === 'all');
@@ -60,12 +70,13 @@ export const resolveCleanTargets = (inputs, dataPath, storageRoot) => {
60
70
  return [all, { target: 'launches', path: path.join(storageRoot, 'launches'), root: storageRoot }];
61
71
  const unique = _.uniqBy(resolved, (t) => t.path.toLowerCase());
62
72
  return unique.filter((t) => !unique.some((o) => o !== t && isInsideOrEqual(o.path, t.path)));
63
- };
64
- export const dataClean = async (ctx) => {
73
+ }
74
+ export async function dataClean(ctx) {
65
75
  const targets = resolveCleanTargets(ctx.options.positionals.slice(1), ctx.dataPath, ctx.storageRoot);
66
76
  if (isSandboxRunning())
67
77
  fail('A Windows Sandbox is running, and it uses these folders.', 'Close it first (sandbox stop), then run this again.');
68
- // Every folder from the root down to the target's parent must be real; a link in place of the target is removed itself.
78
+ // Every folder from the root down to the target's parent must be real; a link in place of the target is removed
79
+ // itself.
69
80
  for (const t of targets)
70
81
  assertNoLinks(t.root, path.dirname(t.path));
71
82
  const present = targets.filter((t) => fs.existsSync(t.path) || isLink(t.path));
@@ -99,8 +110,13 @@ export const dataClean = async (ctx) => {
99
110
  }
100
111
  }
101
112
  const freed = total - _.sumBy(sized, (t) => sizeOf(t.path));
102
- console.log('Freed ' + humanBytes(freed) + '. ' + (sized.some((t) => t.root === ctx.dataPath || t.target === 'all') ? 'The next sandbox reinstalls what it needs.' : ''));
113
+ console.log('Freed ' +
114
+ humanBytes(freed) +
115
+ '. ' +
116
+ (sized.some((t) => t.root === ctx.dataPath || t.target === 'all')
117
+ ? 'The next sandbox reinstalls what it needs.'
118
+ : ''));
103
119
  if (failed.length)
104
120
  fail('Could not remove everything: ' + failed.join('; '), 'Close programs using those folders and run the same command again.');
105
121
  return 0;
106
- };
122
+ }
@@ -6,6 +6,9 @@ export interface DataEntry {
6
6
  bytes: number;
7
7
  }
8
8
  /** Every row of `sandbox data`: the sandbox's data folder by area, then what this PC keeps for it. */
9
- export declare const collectDataEntries: (dataPath: string, storageRoot: string) => DataEntry[];
10
- /** The `sandbox data clean` target for a listed row, or null when that row is not removable (kept on this PC on purpose). */
11
- export declare const cleanTargetOf: (entry: DataEntry) => string | null;
9
+ export declare function collectDataEntries(dataPath: string, storageRoot: string): DataEntry[];
10
+ /**
11
+ * The `sandbox data clean` target for a listed row, or null when that row is not removable (kept on this PC on
12
+ * purpose).
13
+ */
14
+ export declare function cleanTargetOf(entry: DataEntry): string | null;
@@ -3,26 +3,39 @@ import fs from 'node:fs';
3
3
  import path from 'node:path';
4
4
  import _ from 'lodash';
5
5
  import { sizeOf } from '../../../core/disk.js';
6
- import { dirExists, isLink } from '../../../core/util.js';
6
+ import { dirExists, isLink } from '../../../core/util/index.js';
7
7
  const AREA_ORDER = ['tools', 'databases', 'state', 'logs', 'data', 'host'];
8
8
  /** Folders of the data folder that get one row per child; anything else at the top level is listed as itself. */
9
9
  const PER_CHILD = ['tools', 'databases', 'state'];
10
10
  /** Real (non-link) children of a real folder; a link in place of the folder yields nothing. */
11
- const entriesOf = (dir) => (dirExists(dir) && !isLink(dir) ? fs.readdirSync(dir, { withFileTypes: true }).filter((d) => !d.isSymbolicLink()) : []);
12
- const toolRows = (toolsDir) => {
11
+ function entriesOf(dir) {
12
+ return dirExists(dir) && !isLink(dir)
13
+ ? fs.readdirSync(dir, { withFileTypes: true }).filter((d) => !d.isSymbolicLink())
14
+ : [];
15
+ }
16
+ function toolRows(toolsDir) {
13
17
  const entries = entriesOf(toolsDir);
14
18
  const folders = entries.filter((d) => d.isDirectory());
15
19
  const files = entries.filter((d) => !d.isDirectory());
16
20
  const row = (name, p) => ({ area: 'tools', name, path: p, bytes: sizeOf(p) });
17
21
  return [
18
- ...folders.flatMap((d) => (d.name.toLowerCase() === 'agents'
22
+ ...folders.flatMap((d) => d.name.toLowerCase() === 'agents'
19
23
  ? entriesOf(path.join(toolsDir, d.name)).map((a) => row('agents/' + a.name, path.join(toolsDir, d.name, a.name)))
20
- : [row(d.name, path.join(toolsDir, d.name))])),
21
- ...(files.length ? [{ area: 'tools', name: '(files in tools)', path: toolsDir, bytes: _.sumBy(files, (f) => sizeOf(path.join(toolsDir, f.name))) }] : []),
24
+ : [row(d.name, path.join(toolsDir, d.name))]),
25
+ ...(files.length
26
+ ? [
27
+ {
28
+ area: 'tools',
29
+ name: '(files in tools)',
30
+ path: toolsDir,
31
+ bytes: _.sumBy(files, (f) => sizeOf(path.join(toolsDir, f.name))),
32
+ },
33
+ ]
34
+ : []),
22
35
  ];
23
- };
36
+ }
24
37
  /** Every row of `sandbox data`: the sandbox's data folder by area, then what this PC keeps for it. */
25
- export const collectDataEntries = (dataPath, storageRoot) => {
38
+ export function collectDataEntries(dataPath, storageRoot) {
26
39
  const inData = entriesOf(dataPath);
27
40
  const rows = inData.flatMap((d) => {
28
41
  const p = path.join(dataPath, d.name);
@@ -30,18 +43,36 @@ export const collectDataEntries = (dataPath, storageRoot) => {
30
43
  if (area === 'tools')
31
44
  return toolRows(p);
32
45
  if (PER_CHILD.includes(area))
33
- return entriesOf(p).map((c) => ({ area, name: area + '/' + c.name, path: path.join(p, c.name), bytes: sizeOf(path.join(p, c.name)) }));
46
+ return entriesOf(p).map((c) => ({
47
+ area,
48
+ name: area + '/' + c.name,
49
+ path: path.join(p, c.name),
50
+ bytes: sizeOf(path.join(p, c.name)),
51
+ }));
34
52
  return [{ area: area === 'logs' ? 'logs' : 'data', name: d.name, path: p, bytes: sizeOf(p) }];
35
53
  });
36
54
  const otherData = entriesOf(path.join(storageRoot, 'data')).filter((d) => d.isDirectory() && path.join(storageRoot, 'data', d.name).toLowerCase() !== path.resolve(dataPath).toLowerCase());
37
55
  const host = [
38
- ...['launches', 'views', 'accounts', 'sync', 'logs', 'run', 'host'].map((name) => ({ area: 'host', name, path: path.join(storageRoot, name), bytes: sizeOf(path.join(storageRoot, name)) })),
39
- ...otherData.map((d) => ({ area: 'host', name: 'other data folder: ' + d.name, path: path.join(storageRoot, 'data', d.name), bytes: sizeOf(path.join(storageRoot, 'data', d.name)) })),
56
+ ...['launches', 'views', 'accounts', 'sync', 'logs', 'run', 'host'].map((name) => ({
57
+ area: 'host',
58
+ name,
59
+ path: path.join(storageRoot, name),
60
+ bytes: sizeOf(path.join(storageRoot, name)),
61
+ })),
62
+ ...otherData.map((d) => ({
63
+ area: 'host',
64
+ name: 'other data folder: ' + d.name,
65
+ path: path.join(storageRoot, 'data', d.name),
66
+ bytes: sizeOf(path.join(storageRoot, 'data', d.name)),
67
+ })),
40
68
  ].filter((r) => fs.existsSync(r.path));
41
69
  return _.sortBy([...rows, ...host], (r) => AREA_ORDER.indexOf(r.area), (r) => -r.bytes, (r) => r.name.toLowerCase());
42
- };
43
- /** The `sandbox data clean` target for a listed row, or null when that row is not removable (kept on this PC on purpose). */
44
- export const cleanTargetOf = (entry) => {
70
+ }
71
+ /**
72
+ * The `sandbox data clean` target for a listed row, or null when that row is not removable (kept on this PC on
73
+ * purpose).
74
+ */
75
+ export function cleanTargetOf(entry) {
45
76
  if (entry.area === 'tools')
46
77
  return entry.name.startsWith('(') ? null : 'tools/' + entry.name;
47
78
  if (entry.area === 'databases' || entry.area === 'state')
@@ -51,4 +82,4 @@ export const cleanTargetOf = (entry) => {
51
82
  if (entry.area === 'host' && (entry.name === 'launches' || entry.name === 'views'))
52
83
  return entry.name;
53
84
  return null;
54
- };
85
+ }
@@ -1,4 +1,4 @@
1
1
  import { type Context } from '../context.js';
2
- export declare const dataInfo: (ctx: Context) => Promise<number>;
2
+ export declare function dataInfo(ctx: Context): Promise<number>;
3
3
  /** `sandbox data [info|clean] [targets...]`. */
4
- export declare const data: (ctx: Context) => number | Promise<number>;
4
+ export declare function data(ctx: Context): number | Promise<number>;
@@ -3,20 +3,35 @@
3
3
  // links, and targets resolve strictly inside the data folder.
4
4
  import _ from 'lodash';
5
5
  import { diskUsage, humanBytes } from '../../../core/disk.js';
6
- import { fail } from '../../../core/util.js';
7
- import { printJson, table } from '../context.js';
8
- import { working } from '../../progress.js';
6
+ import { fail } from '../../../core/util/index.js';
7
+ import { printJson, table, working } from '../../output/index.js';
9
8
  import { dataClean } from './clean.js';
10
9
  import { collectDataEntries } from './collect.js';
11
- const AREA_LABEL = { tools: 'Toolchains', databases: 'Databases', state: 'Agent state', logs: 'Logs', data: 'Other', host: 'On this PC' };
12
- export const dataInfo = async (ctx) => {
10
+ const AREA_LABEL = {
11
+ tools: 'Toolchains',
12
+ databases: 'Databases',
13
+ state: 'Agent state',
14
+ logs: 'Logs',
15
+ data: 'Other',
16
+ host: 'On this PC',
17
+ };
18
+ export async function dataInfo(ctx) {
13
19
  const entries = await working('Measuring the saved data (big folders take a moment)', () => collectDataEntries(ctx.dataPath, ctx.storageRoot), !ctx.options.json);
14
20
  const total = _.sumBy(entries, 'bytes');
15
21
  const disks = diskUsage(ctx.storageRoot);
16
22
  if (printJson(ctx, { dataPath: ctx.dataPath, storageRoot: ctx.storageRoot, totalBytes: total, entries, disks }))
17
23
  return 0;
18
24
  console.log('Disks\n');
19
- table([['DRIVE', 'USED', 'FREE', 'SIZE', ''], ...disks.map((d) => [d.drive, humanBytes(d.usedBytes) + ' (' + Math.round((d.usedBytes / d.totalBytes) * 100) + '%)', humanBytes(d.freeBytes), humanBytes(d.totalBytes), d.holdsStorage ? '<- sandbox storage (' + humanBytes(total) + ' of it)' : ''])]);
25
+ table([
26
+ ['DRIVE', 'USED', 'FREE', 'SIZE', ''],
27
+ ...disks.map((d) => [
28
+ d.drive,
29
+ humanBytes(d.usedBytes) + ' (' + Math.round((d.usedBytes / d.totalBytes) * 100) + '%)',
30
+ humanBytes(d.freeBytes),
31
+ humanBytes(d.totalBytes),
32
+ d.holdsStorage ? '<- sandbox storage (' + humanBytes(total) + ' of it)' : '',
33
+ ]),
34
+ ]);
20
35
  console.log('');
21
36
  console.log('Persistent data for the sandbox: ' + ctx.dataPath + ' (C:\\AgentData inside)\n');
22
37
  if (!entries.length) {
@@ -30,16 +45,19 @@ export const dataInfo = async (ctx) => {
30
45
  table([...rows, ['', '', ''], ['Total', humanBytes(total), '']]);
31
46
  console.log('\nFree space with: sandbox data clean <target...> (e.g. tools/go, databases/postgres-18, logs, launches)');
32
47
  return 0;
33
- };
48
+ }
34
49
  /** `sandbox data [info|clean] [targets...]`. */
35
- export const data = (ctx) => {
50
+ export function data(ctx) {
36
51
  const [action = 'info'] = ctx.options.positionals;
37
52
  switch (action) {
38
53
  case 'info':
39
54
  case 'show':
40
- case 'list': return dataInfo(ctx);
55
+ case 'list':
56
+ return dataInfo(ctx);
41
57
  case 'clean':
42
- case 'remove': return dataClean(ctx);
43
- default: return fail('Unknown data action "' + action + '".', 'Use: sandbox data (what is stored) or sandbox data clean <target...>');
58
+ case 'remove':
59
+ return dataClean(ctx);
60
+ default:
61
+ return fail('Unknown data action "' + action + '".', 'Use: sandbox data (what is stored) or sandbox data clean <target...>');
44
62
  }
45
- };
63
+ }
@@ -1,2 +1,2 @@
1
1
  /** Deletes p (strictly inside root): links inside are removed first and never followed; see shared/safe-remove.ts. */
2
- export declare const removeTree: (p: string, root: string) => void;
2
+ export declare function removeTree(p: string, root: string): void;
@@ -1,10 +1,10 @@
1
1
  // Deleting inside the data folder. The sandbox can write there, so links are removed themselves and never followed.
2
2
  import fs from 'node:fs';
3
3
  import path from 'node:path';
4
- import { dirExists, isLink, removeLink } from '../../../core/util.js';
5
- import { removeRefusal, safeRemove } from '../../../shared/safe-remove.js';
4
+ import { dirExists, isLink, removeLink } from '../../../core/util/index.js';
5
+ import { removeRefusal, safeRemove } from '../../../shared/io/index.js';
6
6
  /** Deletes p (strictly inside root): links inside are removed first and never followed; see shared/safe-remove.ts. */
7
- export const removeTree = (p, root) => {
7
+ export function removeTree(p, root) {
8
8
  const unlinkInside = (dir) => {
9
9
  for (const d of fs.readdirSync(dir, { withFileTypes: true })) {
10
10
  const child = path.join(dir, d.name);
@@ -27,4 +27,4 @@ export const removeTree = (p, root) => {
27
27
  if (dirExists(p))
28
28
  unlinkInside(p);
29
29
  safeRemove(p, root);
30
- };
30
+ }
@@ -1,10 +1,11 @@
1
1
  export { createContext, type Context } from './context.js';
2
- export { launch } from './launch.js';
2
+ export { launch } from './launch/index.js';
3
3
  export { setup } from './setup/index.js';
4
4
  export { data } from './data/index.js';
5
5
  export { repairCommand } from './repair/index.js';
6
- export { attach, db, exec, hide, restart, sessions, show, status, stop } from './sessions.js';
6
+ export { attach, db, exec, hide, show, restart, stop, sessions, status } from './sessions/index.js';
7
7
  export { account } from './accounts.js';
8
- export { projects } from './projects.js';
9
- export { audit, claudeHost, clean, config, doctor, logs, sync, watcher } from './maintenance.js';
8
+ export { projects } from './projects/index.js';
9
+ export { audit, claudeHost, clean, config, doctor, logs, sync, watcher } from './maintenance/index.js';
10
10
  export { agentCommandsCommand, syncAgentCommands } from './agent-commands.js';
11
+ export { HANDLERS, type Handler } from './registry.js';
@@ -1,10 +1,11 @@
1
1
  export { createContext } from './context.js';
2
- export { launch } from './launch.js';
2
+ export { launch } from './launch/index.js';
3
3
  export { setup } from './setup/index.js';
4
4
  export { data } from './data/index.js';
5
5
  export { repairCommand } from './repair/index.js';
6
- export { attach, db, exec, hide, restart, sessions, show, status, stop } from './sessions.js';
6
+ export { attach, db, exec, hide, show, restart, stop, sessions, status } from './sessions/index.js';
7
7
  export { account } from './accounts.js';
8
- export { projects } from './projects.js';
9
- export { audit, claudeHost, clean, config, doctor, logs, sync, watcher } from './maintenance.js';
8
+ export { projects } from './projects/index.js';
9
+ export { audit, claudeHost, clean, config, doctor, logs, sync, watcher } from './maintenance/index.js';
10
10
  export { agentCommandsCommand, syncAgentCommands } from './agent-commands.js';
11
+ export { HANDLERS } from './registry.js';
@@ -0,0 +1,7 @@
1
+ import type { ResolvedRun } from '../../../core/types.js';
2
+ import { type Context } from '../context.js';
3
+ /**
4
+ * Asked once per parent folder: map it at every start (a project root), so the projects next to this one open in the
5
+ * running sandbox without a restart. The answer is saved to your config.
6
+ */
7
+ export declare function maybeAddRoot(ctx: Context, run: ResolvedRun): Promise<void>;
@@ -0,0 +1,64 @@
1
+ import path from 'node:path';
2
+ import { select } from '@inquirer/prompts';
3
+ import { isWithin, planMirrorWorkspace } from '../../../shared/paths/index.js';
4
+ import { assertSafeMapping, assertSafeWorkspace } from '../../../core/safe-paths.js';
5
+ import { isRootPath } from '../../../core/util/index.js';
6
+ import { autoGuestWorkspace, placeInRoot } from '../../../core/run/index.js';
7
+ import { addToList, setSetting } from '../user-config.js';
8
+ /**
9
+ * Asked once per parent folder: map it at every start (a project root), so the projects next to this one open in the
10
+ * running sandbox without a restart. The answer is saved to your config.
11
+ */
12
+ export async function maybeAddRoot(ctx, run) {
13
+ const { projects } = run.config;
14
+ const parent = path.dirname(run.workspaceHost);
15
+ if (!projects.askToAddRoot || ctx.options.yes || !process.stdin.isTTY || !process.stdout.isTTY)
16
+ return;
17
+ if (projects.roots.some((r) => isWithin(r, run.workspaceHost)) ||
18
+ projects.declinedRoots.some((d) => isWithin(d, parent) && isWithin(parent, d)))
19
+ return;
20
+ if (isRootPath(parent))
21
+ return;
22
+ try {
23
+ assertSafeWorkspace(parent, ctx.packageRoot, run.storageRoot);
24
+ assertSafeMapping(parent, ctx.packageRoot, run.storageRoot);
25
+ }
26
+ catch {
27
+ return;
28
+ }
29
+ const answer = await select({
30
+ message: 'Map ' +
31
+ parent +
32
+ ' at every start, so other projects there (also new ones) open in the running sandbox without a restart? Agents in the sandbox can then see every project in it.',
33
+ choices: [
34
+ { name: 'Yes, from now on', value: 'yes' },
35
+ { name: 'No (and do not ask again for this folder)', value: 'no' },
36
+ { name: 'Never ask this again', value: 'never' },
37
+ ],
38
+ });
39
+ if (answer === 'yes') {
40
+ addToList(ctx, ['projects', 'roots'], parent);
41
+ run.config.projects.roots.push(parent);
42
+ console.log('Added ' + parent + ' to projects.roots (sandbox projects roots remove ' + parent + ' undoes it).');
43
+ moveUnderRoot(run);
44
+ }
45
+ if (answer === 'no')
46
+ addToList(ctx, ['projects', 'declinedRoots'], parent);
47
+ if (answer === 'never')
48
+ setSetting(ctx, ['projects', 'askToAddRoot'], false);
49
+ }
50
+ /** From now on this project is under the root's folder inside the sandbox, from this start on (one move, not two). */
51
+ function moveUnderRoot(run) {
52
+ const before = run.config.guestWorkspace;
53
+ const auto = autoGuestWorkspace(run.workspaceHost);
54
+ const derived = [auto, planMirrorWorkspace(run.workspaceHost, auto).guest];
55
+ // In place: the caller holds run.config already.
56
+ if (derived.some((g) => g.toLowerCase() === before.toLowerCase()))
57
+ run.config.guestWorkspace = placeInRoot(run.config, run.workspaceHost, Boolean(run.mirror), run.notes).guestWorkspace;
58
+ if (run.config.guestWorkspace !== before)
59
+ console.log('Inside the sandbox this project is now at ' +
60
+ run.config.guestWorkspace +
61
+ ' (was ' +
62
+ before +
63
+ '): git worktrees made at the old place need `git worktree repair` once.');
64
+ }
@@ -0,0 +1,7 @@
1
+ import type { SandboxStatus } from '../../../core/types.js';
2
+ import { type Progressing } from '../../output/index.js';
3
+ /** "[3/8] Developer tools: downloading rust 40%, setting up go (2 of 6 done)". */
4
+ export declare function bootLine(status: SandboxStatus | null, fallback?: string): Progressing;
5
+ /** Nothing new for a while: say so, and where the details are. */
6
+ export declare function stillWorking(what: string, ms: number): string;
7
+ export declare function readyIn(ms: number): string;
@@ -0,0 +1,48 @@
1
+ // One line of progress from the guest's status while a sandbox starts. Pure: the status is guest-written, so every
2
+ // bit of it is made safe and short here.
3
+ import { plainText } from '../../../core/util/index.js';
4
+ import { elapsed } from '../../output/index.js';
5
+ function clean(text, max) {
6
+ return plainText(text).replace(/\s+/g, ' ').trim().slice(0, max);
7
+ }
8
+ /** "[3/8] Developer tools: downloading rust 40%, setting up go (2 of 6 done)". */
9
+ export function bootLine(status, fallback = 'Starting Windows Sandbox') {
10
+ if (!status)
11
+ return { line: fallback, key: fallback, what: fallback.toLowerCase() };
12
+ const p = status.progress;
13
+ if (!p) {
14
+ const line = clean(status.message, 200) || fallback;
15
+ return { line, key: line, what: line };
16
+ }
17
+ const title = clean(p.title, 60);
18
+ const items = p.active.slice(0, 8).map((a) => ({ name: clean(a.name, 40), percent: a.percent }));
19
+ const loading = items.filter((a) => a.percent !== undefined && a.percent < 100);
20
+ const others = items.filter((a) => !loading.includes(a));
21
+ const parts = [
22
+ ...(loading.length ? ['downloading ' + loading.map((a) => a.name + ' ' + a.percent + '%').join(', ')] : []),
23
+ ...(others.length ? ['setting up ' + others.map((a) => a.name).join(', ')] : []),
24
+ ];
25
+ const count = p.total > 0 && items.length ? ' (' + Math.min(p.done, p.total) + ' of ' + p.total + ' done)' : '';
26
+ const head = '[' + p.step + '/' + p.steps + '] ' + title;
27
+ return {
28
+ line: (head + (parts.length ? ': ' + parts.join('; ') : '') + count).slice(0, 240),
29
+ key: head +
30
+ '|' +
31
+ items
32
+ .map((a) => a.name)
33
+ .sort()
34
+ .join(','),
35
+ what: items.length ? items.map((a) => a.name).join(', ') : title,
36
+ };
37
+ }
38
+ /** Nothing new for a while: say so, and where the details are. */
39
+ export function stillWorking(what, ms) {
40
+ return ('Still working on ' +
41
+ clean(what, 80) +
42
+ ' (' +
43
+ Math.max(1, Math.round(ms / 60000)) +
44
+ ' min). Full log: sandbox logs -f');
45
+ }
46
+ export function readyIn(ms) {
47
+ return 'Ready in ' + elapsed(ms) + '.';
48
+ }
@@ -0,0 +1,11 @@
1
+ import type { GenerateOptions, ResolvedRun } from '../../../core/types.js';
2
+ import type { Context } from '../context.js';
3
+ /**
4
+ * The other projects mapped at boot (a restart's, --session's, projects.all's, and the known projects in your roots),
5
+ * with their effective configs: only approved .sandbox-config.json files and the looser values you allowed for each
6
+ * (nothing is asked here). The sandbox boots with what they want too (host/launch/generate.ts).
7
+ */
8
+ export declare function bootWantsFor(ctx: Context, run: ResolvedRun, extraProjects: string[] | undefined): Promise<{
9
+ wants: NonNullable<GenerateOptions['bootWants']>;
10
+ notes: string[];
11
+ }>;
@@ -0,0 +1,48 @@
1
+ // What the other projects mapped at boot want from the sandbox (a .wsb device, memory, their mappings).
2
+ import path from 'node:path';
3
+ import _ from 'lodash';
4
+ import { planBootProjects } from '../../../host/launch/index.js';
5
+ import { KnownProjects } from '../../../host/projects/index.js';
6
+ import { isWithin } from '../../../shared/paths/index.js';
7
+ import { BOOT_SETTINGS, LOCAL_CONFIG_NAME } from '../../../core/local-config/index.js';
8
+ import { resolveRun } from '../../../core/run/index.js';
9
+ import { dirExists, errMsg, fileExists } from '../../../core/util/index.js';
10
+ /**
11
+ * The other projects mapped at boot (a restart's, --session's, projects.all's, and the known projects in your roots),
12
+ * with their effective configs: only approved .sandbox-config.json files and the looser values you allowed for each
13
+ * (nothing is asked here). The sandbox boots with what they want too (host/launch/generate.ts).
14
+ */
15
+ export async function bootWantsFor(ctx, run, extraProjects) {
16
+ const { roots } = run.config.projects;
17
+ const planned = planBootProjects({ run, packageRoot: ctx.packageRoot, extraProjects }).projects.map((p) => p.host);
18
+ const inRoots = new KnownProjects(run.storageRoot)
19
+ .list()
20
+ .map((k) => k.host)
21
+ .filter((h) => roots.some((r) => isWithin(path.resolve(r), h)));
22
+ const folders = _.uniqBy([...(extraProjects ?? []).map((p) => path.resolve(p)), ...planned, ...inRoots], (f) => f.toLowerCase())
23
+ .filter((f) => !isWithin(run.workspaceHost, f) && dirExists(f))
24
+ .slice(0, 200);
25
+ const projects = [];
26
+ const notes = [];
27
+ for (const folder of folders) {
28
+ try {
29
+ const other = await resolveRun({
30
+ packageRoot: ctx.packageRoot,
31
+ loaded: ctx.loaded,
32
+ cwd: folder,
33
+ workspace: folder,
34
+ noAgent: true,
35
+ noLocalConfig: false,
36
+ trustConfig: false,
37
+ scripts: [],
38
+ });
39
+ projects.push({ name: path.basename(folder), config: other.config });
40
+ }
41
+ catch (e) {
42
+ if (fileExists(path.join(folder, LOCAL_CONFIG_NAME)))
43
+ notes.push('What ' + path.basename(folder) + ' asks for at boot is not included: ' + errMsg(e).split('\n')[0]);
44
+ }
45
+ }
46
+ const keepOff = BOOT_SETTINGS.filter((s) => _.get(ctx.loaded.config, s) === true && _.get(run.config, s) === false);
47
+ return { wants: { projects, keepOff }, notes };
48
+ }
@@ -0,0 +1,10 @@
1
+ /** The wanted tools that are not downloaded yet (`has` says whether a folder in <data>\tools exists), with their rough size. */
2
+ export declare function pendingDownloads(wanted: readonly string[], has: (dir: string) => boolean): {
3
+ names: string[];
4
+ mb: number;
5
+ };
6
+ /** The heads-up before the wait, or null when everything is already downloaded. first: nothing was ever installed. */
7
+ export declare function firstStartNotice(first: boolean, pending: {
8
+ names: string[];
9
+ mb: number;
10
+ }): string | null;
@@ -0,0 +1,53 @@
1
+ // The first-start heads-up: what a start downloads once (the tools this project needs) and roughly how much.
2
+ /** What a first start downloads, by setting name: its folder in <data>\tools, rough size and a readable name. */
3
+ const DOWNLOADS = {
4
+ node: { dir: 'nvm', mb: 30 },
5
+ python: { dir: 'python', mb: 30 },
6
+ rust: { dir: 'rust', mb: 300 },
7
+ msvc: { dir: 'msvc', mb: 1500, label: 'MSVC' },
8
+ cpp: { dir: 'mingw', mb: 270, label: 'C/C++' },
9
+ dotnet: { dir: 'dotnet', mb: 250, label: '.NET' },
10
+ go: { dir: 'go', mb: 80 },
11
+ java: { dir: 'java', mb: 200 },
12
+ ruby: { dir: 'ruby', mb: 100 },
13
+ php: { dir: 'php', mb: 30 },
14
+ deno: { dir: 'deno', mb: 40 },
15
+ pwsh: { dir: 'pwsh', mb: 100, label: 'PowerShell 7' },
16
+ vscode: { dir: 'vscode', mb: 150, label: 'VS Code' },
17
+ postgres: { dir: 'postgres', mb: 330, label: 'PostgreSQL' },
18
+ mysql: { dir: 'mariadb', mb: 90, label: 'MariaDB' },
19
+ mongodb: { dir: 'mongodb', mb: 450, label: 'MongoDB' },
20
+ redis: { dir: 'redis', mb: 10 },
21
+ dynamodb: { dir: 'dynamodb-local', mb: 80, label: 'DynamoDB Local' },
22
+ };
23
+ /** The wanted tools that are not downloaded yet (`has` says whether a folder in <data>\tools exists), with their rough size. */
24
+ export function pendingDownloads(wanted, has) {
25
+ const missing = [...new Set(wanted)].filter((w) => Object.hasOwn(DOWNLOADS, w) && !has(DOWNLOADS[w].dir));
26
+ return {
27
+ names: missing.map((w) => DOWNLOADS[w].label ?? w),
28
+ mb: missing.reduce((sum, w) => sum + DOWNLOADS[w].mb, 0),
29
+ };
30
+ }
31
+ function roughSize(mb) {
32
+ return mb >= 950 ? Math.round(mb / 100) / 10 + ' GB' : Math.max(10, Math.round(mb / 10) * 10) + ' MB';
33
+ }
34
+ /** The heads-up before the wait, or null when everything is already downloaded. first: nothing was ever installed. */
35
+ export function firstStartNotice(first, pending) {
36
+ if (!first && !pending.names.length)
37
+ return null;
38
+ const what = pending.names.length
39
+ ? ' (about ' +
40
+ roughSize(pending.mb) +
41
+ ': ' +
42
+ pending.names.slice(0, 8).join(', ') +
43
+ (pending.names.length > 8 ? ', ...' : '') +
44
+ ')'
45
+ : '';
46
+ return first
47
+ ? 'First start: the sandbox downloads the tools this project needs once' +
48
+ what +
49
+ '. This can take 5-20 minutes depending on your connection; later starts take about a minute.'
50
+ : 'New tools for this project: the sandbox downloads them once' +
51
+ what +
52
+ '. This can take a few minutes; later starts skip it.';
53
+ }
@@ -0,0 +1,6 @@
1
+ export * from './launch.js';
2
+ export * from './running.js';
3
+ export * from './prepare.js';
4
+ export * from './add-root.js';
5
+ export { bootLine, readyIn, stillWorking } from './boot-progress.js';
6
+ export { firstStartNotice, pendingDownloads } from './first-start.js';
@@ -0,0 +1,6 @@
1
+ export * from './launch.js';
2
+ export * from './running.js';
3
+ export * from './prepare.js';
4
+ export * from './add-root.js';
5
+ export { bootLine, readyIn, stillWorking } from './boot-progress.js';
6
+ export { firstStartNotice, pendingDownloads } from './first-start.js';
@@ -0,0 +1,8 @@
1
+ import { type Context } from '../context.js';
2
+ /** A restart that adds a project: map these too, start no session at boot (restart.ts opens them), wait until ready. */
3
+ export interface LaunchExtras {
4
+ readonly extraProjects?: string[];
5
+ readonly autoSession?: boolean;
6
+ readonly waitUntilReady?: boolean;
7
+ }
8
+ export declare function launch(ctx: Context, generateOnly?: boolean, extras?: LaunchExtras): Promise<number>;