windows-development-sandbox 1.4.0 → 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 (877) hide show
  1. package/.sandbox-config.example.json +2 -1
  2. package/config.example.json +4 -1
  3. package/dist/api.js +27 -16
  4. package/dist/cli/args.d.ts +4 -6
  5. package/dist/cli/args.js +67 -34
  6. package/dist/cli/argv.d.ts +9 -0
  7. package/dist/cli/argv.js +22 -0
  8. package/dist/cli/commands/accounts.d.ts +1 -1
  9. package/dist/cli/commands/accounts.js +42 -27
  10. package/dist/cli/commands/agent-commands.d.ts +3 -3
  11. package/dist/cli/commands/agent-commands.js +27 -18
  12. package/dist/cli/commands/context.d.ts +9 -11
  13. package/dist/cli/commands/context.js +35 -32
  14. package/dist/cli/commands/data/clean.d.ts +2 -2
  15. package/dist/cli/commands/data/clean.js +27 -11
  16. package/dist/cli/commands/data/collect.d.ts +6 -3
  17. package/dist/cli/commands/data/collect.js +46 -15
  18. package/dist/cli/commands/data/index.d.ts +2 -2
  19. package/dist/cli/commands/data/index.js +30 -12
  20. package/dist/cli/commands/data/remove.d.ts +1 -1
  21. package/dist/cli/commands/data/remove.js +4 -4
  22. package/dist/cli/commands/index.d.ts +5 -4
  23. package/dist/cli/commands/index.js +5 -4
  24. package/dist/cli/commands/launch/add-root.d.ts +7 -0
  25. package/dist/cli/commands/launch/add-root.js +64 -0
  26. package/dist/cli/commands/launch/boot-progress.d.ts +7 -0
  27. package/dist/cli/commands/launch/boot-progress.js +48 -0
  28. package/dist/cli/commands/launch/boot-wants.d.ts +11 -0
  29. package/dist/cli/commands/launch/boot-wants.js +48 -0
  30. package/dist/cli/commands/launch/first-start.d.ts +10 -0
  31. package/dist/cli/commands/launch/first-start.js +53 -0
  32. package/dist/cli/commands/launch/index.d.ts +6 -0
  33. package/dist/cli/commands/launch/index.js +6 -0
  34. package/dist/cli/commands/launch/launch.d.ts +8 -0
  35. package/dist/cli/commands/launch/launch.js +211 -0
  36. package/dist/cli/commands/launch/prepare.d.ts +23 -0
  37. package/dist/cli/commands/launch/prepare.js +109 -0
  38. package/dist/cli/commands/launch/running.d.ts +45 -0
  39. package/dist/cli/commands/launch/running.js +218 -0
  40. package/dist/cli/commands/launch/summary.d.ts +8 -0
  41. package/dist/cli/commands/launch/summary.js +98 -0
  42. package/dist/cli/commands/maintenance/audit.d.ts +3 -0
  43. package/dist/cli/commands/maintenance/audit.js +58 -0
  44. package/dist/cli/commands/maintenance/clean.d.ts +2 -0
  45. package/dist/cli/commands/maintenance/clean.js +10 -0
  46. package/dist/cli/commands/maintenance/config.d.ts +2 -0
  47. package/dist/cli/commands/maintenance/config.js +145 -0
  48. package/dist/cli/commands/maintenance/doctor.d.ts +2 -0
  49. package/dist/cli/commands/maintenance/doctor.js +52 -0
  50. package/dist/cli/commands/maintenance/host-claude.d.ts +2 -0
  51. package/dist/cli/commands/maintenance/host-claude.js +4 -0
  52. package/dist/cli/commands/maintenance/index.d.ts +8 -0
  53. package/dist/cli/commands/maintenance/index.js +9 -0
  54. package/dist/cli/commands/maintenance/logs.d.ts +2 -0
  55. package/dist/cli/commands/maintenance/logs.js +44 -0
  56. package/dist/cli/commands/maintenance/sync.d.ts +2 -0
  57. package/dist/cli/commands/maintenance/sync.js +12 -0
  58. package/dist/cli/commands/maintenance/watch.d.ts +3 -0
  59. package/dist/cli/commands/maintenance/watch.js +6 -0
  60. package/dist/cli/commands/projects/describe-sessions.d.ts +3 -0
  61. package/dist/cli/commands/projects/describe-sessions.js +15 -0
  62. package/dist/cli/commands/projects/here.d.ts +38 -0
  63. package/dist/cli/commands/projects/here.js +145 -0
  64. package/dist/cli/commands/projects/index.d.ts +4 -0
  65. package/dist/cli/commands/projects/index.js +4 -0
  66. package/dist/cli/commands/projects/projects.d.ts +14 -0
  67. package/dist/cli/commands/projects/projects.js +213 -0
  68. package/dist/cli/commands/projects/restart.d.ts +15 -0
  69. package/dist/cli/commands/projects/restart.js +149 -0
  70. package/dist/cli/commands/registry.d.ts +3 -0
  71. package/dist/cli/commands/registry.js +34 -0
  72. package/dist/cli/commands/repair/checks.js +105 -29
  73. package/dist/cli/commands/repair/finders.d.ts +13 -10
  74. package/dist/cli/commands/repair/finders.js +63 -43
  75. package/dist/cli/commands/repair/index.d.ts +4 -4
  76. package/dist/cli/commands/repair/index.js +47 -21
  77. package/dist/cli/commands/repair/types.d.ts +2 -2
  78. package/dist/cli/commands/repair/types.js +7 -2
  79. package/dist/cli/commands/sessions/attach.d.ts +2 -0
  80. package/dist/cli/commands/sessions/attach.js +45 -0
  81. package/dist/cli/commands/sessions/control.d.ts +4 -0
  82. package/dist/cli/commands/sessions/control.js +62 -0
  83. package/dist/cli/commands/sessions/exec.d.ts +6 -0
  84. package/dist/cli/commands/sessions/exec.js +72 -0
  85. package/dist/cli/commands/sessions/index.d.ts +6 -0
  86. package/dist/cli/commands/sessions/index.js +9 -0
  87. package/dist/cli/commands/sessions/list.d.ts +15 -0
  88. package/dist/cli/commands/sessions/list.js +65 -0
  89. package/dist/cli/commands/sessions/status.d.ts +2 -0
  90. package/dist/cli/commands/sessions/status.js +153 -0
  91. package/dist/cli/commands/sessions/window.d.ts +3 -0
  92. package/dist/cli/commands/sessions/window.js +18 -0
  93. package/dist/cli/commands/setup/checks.d.ts +4 -4
  94. package/dist/cli/commands/setup/checks.js +36 -19
  95. package/dist/cli/commands/setup/facts.d.ts +6 -6
  96. package/dist/cli/commands/setup/facts.js +23 -11
  97. package/dist/cli/commands/setup/index.d.ts +1 -1
  98. package/dist/cli/commands/setup/index.js +25 -12
  99. package/dist/cli/commands/user-config.d.ts +5 -5
  100. package/dist/cli/commands/user-config.js +14 -12
  101. package/dist/cli/history.d.ts +5 -4
  102. package/dist/cli/history.js +23 -11
  103. package/dist/cli/index.d.ts +4 -14
  104. package/dist/cli/index.js +27 -77
  105. package/dist/cli/manifest.d.ts +464 -10
  106. package/dist/cli/manifest.js +328 -54
  107. package/dist/cli/menu/apps.d.ts +7 -5
  108. package/dist/cli/menu/apps.js +64 -16
  109. package/dist/cli/menu/command-fields.d.ts +15 -0
  110. package/dist/cli/menu/command-fields.js +23 -0
  111. package/dist/cli/menu/command-form.d.ts +3 -5
  112. package/dist/cli/menu/command-form.js +116 -48
  113. package/dist/cli/menu/home.d.ts +22 -0
  114. package/dist/cli/menu/home.js +72 -0
  115. package/dist/cli/menu/index.d.ts +2 -24
  116. package/dist/cli/menu/index.js +4 -178
  117. package/dist/cli/menu/menu.d.ts +23 -0
  118. package/dist/cli/menu/menu.js +185 -0
  119. package/dist/cli/menu/settings/categories.d.ts +2 -2
  120. package/dist/cli/menu/settings/categories.js +123 -20
  121. package/dist/cli/menu/settings/collections/collection-editor.d.ts +23 -0
  122. package/dist/cli/menu/settings/collections/collection-editor.js +89 -0
  123. package/dist/cli/menu/settings/collections/map-editor.d.ts +10 -0
  124. package/dist/cli/menu/settings/collections/map-editor.js +34 -0
  125. package/dist/cli/menu/settings/collections/object-list-editor.d.ts +10 -0
  126. package/dist/cli/menu/settings/collections/object-list-editor.js +23 -0
  127. package/dist/cli/menu/settings/collections/object-map-editor.d.ts +10 -0
  128. package/dist/cli/menu/settings/collections/object-map-editor.js +35 -0
  129. package/dist/cli/menu/settings/collections/string-list-editor.d.ts +12 -0
  130. package/dist/cli/menu/settings/collections/string-list-editor.js +39 -0
  131. package/dist/cli/menu/settings/config-file.d.ts +2 -2
  132. package/dist/cli/menu/settings/config-file.js +42 -19
  133. package/dist/cli/menu/settings/editor-actions.d.ts +2 -0
  134. package/dist/cli/menu/settings/editor-actions.js +2 -0
  135. package/dist/cli/menu/settings/format.d.ts +5 -0
  136. package/dist/cli/menu/settings/format.js +39 -0
  137. package/dist/cli/menu/settings/index.d.ts +1 -29
  138. package/dist/cli/menu/settings/index.js +1 -133
  139. package/dist/cli/menu/settings/object-editor.d.ts +12 -0
  140. package/dist/cli/menu/settings/object-editor.js +86 -0
  141. package/dist/cli/menu/settings/schema-node.d.ts +3 -1
  142. package/dist/cli/menu/settings/schema-node.js +71 -24
  143. package/dist/cli/menu/settings/settings-editor.d.ts +30 -0
  144. package/dist/cli/menu/settings/settings-editor.js +176 -0
  145. package/dist/cli/menu/settings/{editors.d.ts → value-editor.d.ts} +2 -13
  146. package/dist/cli/menu/settings/value-editor.js +137 -0
  147. package/dist/cli/menu/several.d.ts +4 -4
  148. package/dist/cli/menu/several.js +61 -20
  149. package/dist/cli/{colors.d.ts → output/colors.d.ts} +8 -8
  150. package/dist/cli/{colors.js → output/colors.js} +32 -14
  151. package/dist/cli/output/index.d.ts +3 -0
  152. package/dist/cli/output/index.js +3 -0
  153. package/dist/cli/output/print.d.ts +5 -0
  154. package/dist/cli/output/print.js +14 -0
  155. package/dist/cli/output/progress.d.ts +24 -0
  156. package/dist/cli/output/progress.js +124 -0
  157. package/dist/cli/report.d.ts +2 -0
  158. package/dist/cli/report.js +20 -0
  159. package/dist/cli/tui/app.d.ts +6 -16
  160. package/dist/cli/tui/app.js +28 -8
  161. package/dist/cli/tui/dialogs/confirm-screen.d.ts +20 -0
  162. package/dist/cli/tui/dialogs/confirm-screen.js +50 -0
  163. package/dist/cli/tui/dialogs/message-screen.d.ts +17 -0
  164. package/dist/cli/tui/dialogs/message-screen.js +55 -0
  165. package/dist/cli/tui/dialogs/paragraphs.d.ts +2 -0
  166. package/dist/cli/tui/dialogs/paragraphs.js +5 -0
  167. package/dist/cli/tui/dialogs/text-screen.d.ts +26 -0
  168. package/dist/cli/tui/dialogs/text-screen.js +107 -0
  169. package/dist/cli/tui/frame.js +3 -1
  170. package/dist/cli/tui/index.d.ts +7 -3
  171. package/dist/cli/tui/index.js +4 -2
  172. package/dist/cli/tui/list/list-screen.d.ts +29 -0
  173. package/dist/cli/tui/{list-screen.js → list/list-screen.js} +86 -23
  174. package/dist/cli/tui/{list-screen.d.ts → list/list-types.d.ts} +0 -28
  175. package/dist/cli/tui/screen.d.ts +14 -0
  176. package/dist/cli/tui/terminal.js +34 -10
  177. package/dist/cli/tui/text.d.ts +2 -1
  178. package/dist/cli/tui/text.js +37 -7
  179. package/dist/cli/tui/theme.js +27 -9
  180. package/dist/cli/validate.d.ts +8 -8
  181. package/dist/cli/validate.js +32 -21
  182. package/dist/core/config/defaults.d.ts +2 -0
  183. package/dist/core/config/defaults.js +203 -0
  184. package/dist/core/config/index.d.ts +2 -0
  185. package/dist/core/config/index.js +3 -0
  186. package/dist/core/{config.d.ts → config/loader.d.ts} +1 -2
  187. package/dist/core/config/loader.js +47 -0
  188. package/dist/core/{detect-databases.js → detect/databases.js} +111 -23
  189. package/dist/core/detect/index.d.ts +4 -0
  190. package/dist/core/detect/index.js +4 -0
  191. package/dist/core/{detect-pwsh.d.ts → detect/pwsh.d.ts} +1 -1
  192. package/dist/core/{detect-pwsh.js → detect/pwsh.js} +25 -11
  193. package/dist/core/{detect-toolchains.d.ts → detect/toolchains.d.ts} +1 -1
  194. package/dist/core/{detect-toolchains.js → detect/toolchains.js} +42 -5
  195. package/dist/{guest/toolchains → core/detect}/versions.js +28 -12
  196. package/dist/core/disk.d.ts +2 -0
  197. package/dist/core/disk.js +46 -3
  198. package/dist/core/local-config/boot-wants.d.ts +45 -0
  199. package/dist/core/local-config/boot-wants.js +120 -0
  200. package/dist/core/local-config/file.d.ts +3 -0
  201. package/dist/core/local-config/file.js +16 -0
  202. package/dist/core/local-config/index.d.ts +5 -0
  203. package/dist/core/local-config/index.js +7 -0
  204. package/dist/core/{local-config.d.ts → local-config/overrides.d.ts} +11 -11
  205. package/dist/core/{local-config.js → local-config/overrides.js} +53 -54
  206. package/dist/core/{project-policy.d.ts → local-config/policy.d.ts} +7 -3
  207. package/dist/core/{project-policy.js → local-config/policy.js} +16 -6
  208. package/dist/core/local-config/trust.d.ts +13 -0
  209. package/dist/core/local-config/trust.js +43 -0
  210. package/dist/core/package-info.d.ts +4 -0
  211. package/dist/core/package-info.js +13 -0
  212. package/dist/core/run/guest-workspace.d.ts +23 -0
  213. package/dist/core/run/guest-workspace.js +47 -0
  214. package/dist/core/run/index.d.ts +3 -0
  215. package/dist/core/run/index.js +3 -0
  216. package/dist/core/run/resolve-run.d.ts +3 -0
  217. package/dist/core/run/resolve-run.js +202 -0
  218. package/dist/core/run/versions.d.ts +13 -0
  219. package/dist/core/run/versions.js +65 -0
  220. package/dist/core/safe-paths.js +17 -5
  221. package/dist/core/schema/apps.d.ts +4 -4
  222. package/dist/core/schema/apps.js +55 -21
  223. package/dist/core/schema/common.d.ts +13 -10
  224. package/dist/core/schema/common.js +16 -10
  225. package/dist/core/schema/config.d.ts +18 -12
  226. package/dist/core/schema/config.js +78 -53
  227. package/dist/core/schema/databases.d.ts +4 -3
  228. package/dist/core/schema/databases.js +16 -12
  229. package/dist/core/schema/harness.d.ts +1 -1
  230. package/dist/core/schema/harness.js +17 -7
  231. package/dist/core/schema/index.d.ts +6 -0
  232. package/dist/core/schema/index.js +8 -0
  233. package/dist/core/schema/json-schema.js +10 -5
  234. package/dist/core/schema/profile.d.ts +4 -4
  235. package/dist/core/schema/profile.js +37 -17
  236. package/dist/core/schema/projects.d.ts +2 -1
  237. package/dist/core/schema/projects.js +16 -5
  238. package/dist/core/schema/sandbox.d.ts +12 -12
  239. package/dist/core/schema/sandbox.js +101 -37
  240. package/dist/core/schema/toolchains.d.ts +6 -1
  241. package/dist/core/schema/toolchains.js +84 -34
  242. package/dist/core/types.d.ts +36 -9
  243. package/dist/core/util/errors.d.ts +8 -0
  244. package/dist/core/util/errors.js +14 -0
  245. package/dist/core/util/fs.d.ts +8 -0
  246. package/dist/core/util/fs.js +40 -0
  247. package/dist/core/util/index.d.ts +7 -0
  248. package/dist/core/util/index.js +7 -0
  249. package/dist/core/util/jsonc.d.ts +6 -0
  250. package/dist/core/util/jsonc.js +25 -0
  251. package/dist/core/util/links.d.ts +10 -0
  252. package/dist/core/util/links.js +39 -0
  253. package/dist/core/util/paths.d.ts +7 -0
  254. package/dist/core/util/paths.js +33 -0
  255. package/dist/core/util/process.d.ts +15 -0
  256. package/dist/core/util/process.js +54 -0
  257. package/dist/core/util/text.d.ts +8 -0
  258. package/dist/core/util/text.js +8 -0
  259. package/dist/guest/{setup/agents.js → agents/agent-installer.js} +24 -4
  260. package/dist/guest/apps/after-install.d.ts +3 -0
  261. package/dist/guest/apps/after-install.js +47 -0
  262. package/dist/guest/apps/app-installer.d.ts +22 -0
  263. package/dist/guest/apps/app-installer.js +116 -0
  264. package/dist/guest/apps/find-exe.d.ts +5 -0
  265. package/dist/guest/apps/find-exe.js +41 -0
  266. package/dist/guest/apps/index.d.ts +3 -10
  267. package/dist/guest/apps/index.js +6 -206
  268. package/dist/guest/apps/resolvers.js +37 -9
  269. package/dist/guest/apps/shortcuts.d.ts +6 -0
  270. package/dist/guest/apps/shortcuts.js +28 -0
  271. package/dist/guest/apps/sources.d.ts +4 -0
  272. package/dist/guest/apps/sources.js +17 -0
  273. package/dist/guest/apps/unpack.d.ts +3 -0
  274. package/dist/guest/apps/unpack.js +47 -0
  275. package/dist/guest/{audit-parse.js → audit/parse.js} +39 -3
  276. package/dist/guest/{audit.d.ts → audit/process-audit.d.ts} +3 -1
  277. package/dist/guest/{audit.js → audit/process-audit.js} +33 -8
  278. package/dist/guest/boot/boot-env.d.ts +4 -0
  279. package/dist/guest/{boot-env.js → boot/boot-env.js} +7 -5
  280. package/dist/guest/boot/boot.d.ts +1 -0
  281. package/dist/guest/{main.js → boot/boot.js} +100 -50
  282. package/dist/guest/{guide.js → boot/guide.js} +32 -7
  283. package/dist/guest/{project-env.d.ts → boot/project-env.d.ts} +3 -3
  284. package/dist/guest/{project-env.js → boot/project-env.js} +12 -4
  285. package/dist/guest/boot/project-status.d.ts +5 -0
  286. package/dist/guest/boot/project-status.js +28 -0
  287. package/dist/guest/daemon/daemon.d.ts +1 -0
  288. package/dist/guest/daemon/daemon.js +51 -0
  289. package/dist/guest/daemon/exec.js +18 -6
  290. package/dist/guest/daemon/{shutdown.js → idle-shutdown.js} +5 -4
  291. package/dist/guest/daemon/{project.d.ts → project-provisioner.d.ts} +3 -3
  292. package/dist/guest/daemon/{project.js → project-provisioner.js} +60 -22
  293. package/dist/guest/daemon/relays.js +5 -3
  294. package/dist/guest/daemon/{session.js → sessions.js} +84 -24
  295. package/dist/guest/daemon/state.d.ts +4 -1
  296. package/dist/guest/daemon/state.js +34 -20
  297. package/dist/guest/databases/database-server.d.ts +13 -0
  298. package/dist/guest/databases/database-server.js +35 -0
  299. package/dist/guest/databases/dynamodb.d.ts +12 -0
  300. package/dist/guest/databases/dynamodb.js +81 -0
  301. package/dist/guest/databases/index.d.ts +2 -0
  302. package/dist/guest/databases/index.js +2 -0
  303. package/dist/guest/databases/mongodb.d.ts +7 -0
  304. package/dist/guest/databases/mongodb.js +46 -0
  305. package/dist/guest/databases/mysql.d.ts +7 -0
  306. package/dist/guest/databases/mysql.js +59 -0
  307. package/dist/guest/databases/names.d.ts +5 -0
  308. package/dist/guest/databases/names.js +8 -0
  309. package/dist/guest/databases/postgres.d.ts +9 -0
  310. package/dist/guest/databases/postgres.js +85 -0
  311. package/dist/guest/databases/redis.d.ts +7 -0
  312. package/dist/guest/databases/redis.js +25 -0
  313. package/dist/guest/databases/registry.d.ts +5 -0
  314. package/dist/guest/databases/registry.js +51 -0
  315. package/dist/guest/databases/sbx-db.d.ts +1 -0
  316. package/dist/guest/{db.js → databases/sbx-db.js} +13 -13
  317. package/dist/guest/{toolchains/databases → databases}/server.d.ts +5 -5
  318. package/dist/guest/{toolchains/databases → databases}/server.js +18 -13
  319. package/dist/guest/entries/daemon.js +16 -0
  320. package/dist/guest/entries/db.js +10 -0
  321. package/dist/guest/entries/gitguard.js +20 -0
  322. package/dist/guest/entries/main.d.ts +1 -0
  323. package/dist/guest/entries/main.js +24 -0
  324. package/dist/guest/entries/netproxy.d.ts +1 -0
  325. package/dist/guest/entries/netproxy.js +7 -0
  326. package/dist/guest/entries/view.d.ts +1 -0
  327. package/dist/guest/entries/view.js +11 -0
  328. package/dist/guest/{gitguard.js → git/decision.js} +49 -26
  329. package/dist/guest/network/addresses.d.ts +2 -0
  330. package/dist/guest/network/addresses.js +6 -0
  331. package/dist/guest/{setup/network.d.ts → network/allow-only.d.ts} +0 -10
  332. package/dist/guest/network/allow-only.js +84 -0
  333. package/dist/guest/network/firewall.d.ts +9 -0
  334. package/dist/guest/{setup/network.js → network/firewall.js} +58 -63
  335. package/dist/guest/network/proxy-server.d.ts +2 -0
  336. package/dist/guest/{netproxy.js → network/proxy-server.js} +37 -18
  337. package/dist/guest/{helpers.d.ts → runtime/csc.d.ts} +1 -1
  338. package/dist/guest/{helpers.js → runtime/csc.js} +7 -2
  339. package/dist/guest/runtime/fs.d.ts +2 -0
  340. package/dist/guest/runtime/fs.js +6 -0
  341. package/dist/guest/runtime/log.d.ts +3 -0
  342. package/dist/guest/runtime/log.js +22 -0
  343. package/dist/guest/runtime/paths.d.ts +13 -0
  344. package/dist/guest/runtime/paths.js +14 -0
  345. package/dist/guest/{ports.js → runtime/ports.js} +8 -2
  346. package/dist/guest/runtime/process.d.ts +15 -0
  347. package/dist/guest/runtime/process.js +59 -0
  348. package/dist/guest/{project-context.js → runtime/project-context.js} +1 -1
  349. package/dist/guest/runtime/session.d.ts +5 -0
  350. package/dist/guest/runtime/session.js +10 -0
  351. package/dist/guest/runtime/status.d.ts +7 -0
  352. package/dist/guest/runtime/status.js +57 -0
  353. package/dist/guest/{cmdline.js → sessions/cmdline.js} +10 -4
  354. package/dist/guest/{ptyhost.js → sessions/pty-host.js} +12 -5
  355. package/dist/guest/{view.js → sessions/viewer.js} +8 -11
  356. package/dist/guest/setup/claude-mem.d.ts +10 -0
  357. package/dist/guest/setup/{claude.js → claude-mem.js} +18 -78
  358. package/dist/guest/setup/{claude.d.ts → claude-profile.d.ts} +0 -10
  359. package/dist/guest/setup/claude-profile.js +89 -0
  360. package/dist/guest/setup/desktop.d.ts +2 -0
  361. package/dist/guest/setup/desktop.js +32 -0
  362. package/dist/guest/setup/environment.js +28 -5
  363. package/dist/guest/setup/{user.d.ts → git-identity.d.ts} +0 -2
  364. package/dist/guest/setup/git-identity.js +34 -0
  365. package/dist/guest/{gitrules.d.ts → setup/git-rules.d.ts} +1 -1
  366. package/dist/guest/setup/git-rules.js +50 -0
  367. package/dist/guest/setup/hooks.js +22 -5
  368. package/dist/guest/setup/{policy.js → managed-policy.js} +2 -2
  369. package/dist/guest/toolchains/catalogue.d.ts +4 -4
  370. package/dist/guest/toolchains/catalogue.js +30 -7
  371. package/dist/guest/toolchains/detect.d.ts +12 -0
  372. package/dist/guest/toolchains/detect.js +54 -0
  373. package/dist/guest/toolchains/index.d.ts +3 -17
  374. package/dist/guest/toolchains/index.js +1 -80
  375. package/dist/guest/toolchains/install.d.ts +20 -0
  376. package/dist/guest/toolchains/install.js +29 -0
  377. package/dist/guest/toolchains/languages/go.d.ts +3 -0
  378. package/dist/guest/toolchains/{go.js → languages/go.js} +27 -9
  379. package/dist/guest/toolchains/languages/java.d.ts +8 -0
  380. package/dist/guest/toolchains/{java.js → languages/java.js} +57 -18
  381. package/dist/guest/toolchains/languages/node.d.ts +3 -0
  382. package/dist/guest/toolchains/{node.js → languages/node.js} +51 -18
  383. package/dist/guest/toolchains/languages/php.d.ts +3 -0
  384. package/dist/guest/toolchains/{scripting → languages}/php.js +36 -11
  385. package/dist/guest/toolchains/languages/python-tools.d.ts +3 -0
  386. package/dist/guest/toolchains/languages/python-tools.js +12 -0
  387. package/dist/guest/toolchains/languages/python.d.ts +3 -0
  388. package/dist/guest/toolchains/{python.js → languages/python.js} +29 -16
  389. package/dist/guest/toolchains/languages/ruby.d.ts +3 -0
  390. package/dist/guest/toolchains/{scripting → languages}/ruby.js +28 -10
  391. package/dist/guest/toolchains/leftovers.d.ts +1 -1
  392. package/dist/guest/toolchains/leftovers.js +13 -11
  393. package/dist/guest/toolchains/managers.d.ts +6 -6
  394. package/dist/guest/toolchains/managers.js +38 -17
  395. package/dist/guest/toolchains/native/binstall.d.ts +3 -2
  396. package/dist/guest/toolchains/native/binstall.js +20 -8
  397. package/dist/guest/toolchains/native/cpp.d.ts +2 -2
  398. package/dist/guest/toolchains/native/cpp.js +23 -8
  399. package/dist/guest/toolchains/native/dotnet.d.ts +5 -3
  400. package/dist/guest/toolchains/native/dotnet.js +72 -24
  401. package/dist/guest/toolchains/native/mesa.d.ts +2 -2
  402. package/dist/guest/toolchains/native/mesa.js +27 -10
  403. package/dist/guest/toolchains/native/msvc/environment.d.ts +4 -4
  404. package/dist/guest/toolchains/native/msvc/environment.js +30 -16
  405. package/dist/guest/toolchains/native/msvc/index.d.ts +3 -3
  406. package/dist/guest/toolchains/native/msvc/index.js +10 -8
  407. package/dist/guest/toolchains/native/msvc/packages.d.ts +1 -1
  408. package/dist/guest/toolchains/native/msvc/packages.js +69 -23
  409. package/dist/guest/toolchains/native/msvc/tree.d.ts +6 -6
  410. package/dist/guest/toolchains/native/msvc/tree.js +15 -9
  411. package/dist/guest/toolchains/native/rust-extras.d.ts +23 -0
  412. package/dist/guest/toolchains/native/rust-extras.js +100 -0
  413. package/dist/guest/toolchains/native/rust.d.ts +2 -2
  414. package/dist/guest/toolchains/native/rust.js +41 -10
  415. package/dist/guest/toolchains/{scripting → native}/vcruntime.d.ts +2 -2
  416. package/dist/guest/toolchains/{scripting → native}/vcruntime.js +17 -7
  417. package/dist/guest/toolchains/package-ledger.d.ts +17 -0
  418. package/dist/guest/toolchains/package-ledger.js +54 -0
  419. package/dist/guest/toolchains/plan.d.ts +3 -24
  420. package/dist/guest/toolchains/plan.js +99 -111
  421. package/dist/guest/toolchains/runtimes.d.ts +6 -6
  422. package/dist/guest/toolchains/runtimes.js +31 -13
  423. package/dist/guest/toolchains/scheduler.d.ts +22 -0
  424. package/dist/guest/toolchains/scheduler.js +123 -0
  425. package/dist/guest/toolchains/setup.d.ts +10 -0
  426. package/dist/guest/toolchains/setup.js +22 -0
  427. package/dist/guest/toolchains/state-file.d.ts +3 -0
  428. package/dist/guest/toolchains/state-file.js +10 -0
  429. package/dist/guest/toolchains/step.d.ts +24 -0
  430. package/dist/guest/toolchains/step.js +1 -0
  431. package/dist/guest/toolchains/tool-env.d.ts +12 -0
  432. package/dist/guest/toolchains/tool-env.js +16 -0
  433. package/dist/guest/toolchains/tools/cli.d.ts +10 -0
  434. package/dist/guest/toolchains/{cli.js → tools/cli.js} +35 -15
  435. package/dist/guest/toolchains/tools/git.d.ts +3 -0
  436. package/dist/guest/toolchains/{git.js → tools/git.js} +38 -15
  437. package/dist/guest/toolchains/tools/pwsh.d.ts +4 -0
  438. package/dist/guest/toolchains/{pwsh.js → tools/pwsh.js} +14 -7
  439. package/dist/guest/toolchains/{vscode-profile.d.ts → tools/vscode-profile.d.ts} +6 -6
  440. package/dist/guest/toolchains/{vscode-profile.js → tools/vscode-profile.js} +28 -12
  441. package/dist/guest/toolchains/{vscode.d.ts → tools/vscode.d.ts} +6 -6
  442. package/dist/guest/toolchains/{vscode.js → tools/vscode.js} +67 -21
  443. package/dist/guest/toolchains/version-cache.d.ts +16 -0
  444. package/dist/guest/toolchains/version-cache.js +67 -0
  445. package/dist/host/agent-commands/commands.d.ts +13 -0
  446. package/dist/host/agent-commands/commands.js +33 -0
  447. package/dist/host/agent-commands/forwarders.d.ts +7 -0
  448. package/dist/host/agent-commands/forwarders.js +31 -0
  449. package/dist/host/agent-commands/index.d.ts +4 -0
  450. package/dist/host/agent-commands/index.js +4 -0
  451. package/dist/host/agent-commands/reconcile.d.ts +12 -0
  452. package/dist/host/agent-commands/reconcile.js +69 -0
  453. package/dist/host/agent-commands/user-path.d.ts +2 -0
  454. package/dist/host/agent-commands/user-path.js +33 -0
  455. package/dist/host/audit/collect.d.ts +2 -2
  456. package/dist/host/audit/collect.js +59 -22
  457. package/dist/host/audit/log.d.ts +2 -2
  458. package/dist/host/audit/log.js +24 -8
  459. package/dist/host/{attach.d.ts → channel/attach.d.ts} +2 -2
  460. package/dist/host/{attach.js → channel/attach.js} +33 -15
  461. package/dist/host/channel/channel.d.ts +51 -0
  462. package/dist/host/channel/channel.js +196 -0
  463. package/dist/host/channel/index.d.ts +2 -0
  464. package/dist/host/channel/index.js +2 -0
  465. package/dist/host/guard/agent-files.d.ts +7 -0
  466. package/dist/host/guard/agent-files.js +103 -0
  467. package/dist/host/guard/commands.d.ts +10 -0
  468. package/dist/host/guard/commands.js +123 -0
  469. package/dist/host/guard/file-hash.d.ts +4 -0
  470. package/dist/host/guard/file-hash.js +37 -0
  471. package/dist/host/guard/git-config.d.ts +5 -0
  472. package/dist/host/guard/git-config.js +62 -0
  473. package/dist/host/guard/git-dirs.d.ts +12 -0
  474. package/dist/host/guard/git-dirs.js +53 -0
  475. package/dist/host/guard/index.d.ts +5 -0
  476. package/dist/host/guard/index.js +4 -0
  477. package/dist/host/guard/mark-of-the-web.d.ts +8 -0
  478. package/dist/host/guard/mark-of-the-web.js +74 -0
  479. package/dist/host/guard/nested-repos.d.ts +14 -0
  480. package/dist/host/guard/nested-repos.js +88 -0
  481. package/dist/host/guard/quarantine.d.ts +3 -0
  482. package/dist/host/guard/quarantine.js +24 -0
  483. package/dist/host/guard/repo-guard.d.ts +10 -0
  484. package/dist/host/guard/repo-guard.js +36 -0
  485. package/dist/host/guard/store.d.ts +40 -0
  486. package/dist/host/guard/store.js +145 -0
  487. package/dist/host/guard/types.d.ts +27 -0
  488. package/dist/host/guard/types.js +3 -0
  489. package/dist/host/guard/watch-state.d.ts +9 -0
  490. package/dist/host/guard/watch-state.js +26 -0
  491. package/dist/host/launch/boot-projects.d.ts +17 -0
  492. package/dist/host/launch/{projects.js → boot-projects.js} +27 -12
  493. package/dist/host/{database-plan.d.ts → launch/database-plan.d.ts} +5 -5
  494. package/dist/host/{database-plan.js → launch/database-plan.js} +24 -13
  495. package/dist/host/launch/generate.d.ts +4 -0
  496. package/dist/host/launch/generate.js +77 -0
  497. package/dist/host/launch/index.d.ts +10 -0
  498. package/dist/host/launch/index.js +10 -0
  499. package/dist/host/launch/mappings.d.ts +7 -2
  500. package/dist/host/launch/mappings.js +83 -24
  501. package/dist/host/launch/pc-scan.d.ts +5 -0
  502. package/dist/host/{pc-scan.js → launch/pc-scan.js} +20 -13
  503. package/dist/host/launch/project-scan.d.ts +7 -0
  504. package/dist/host/{project-scan.js → launch/project-scan.js} +29 -21
  505. package/dist/host/launch/session-file.d.ts +23 -0
  506. package/dist/host/launch/session-file.js +73 -0
  507. package/dist/host/launch/stage.d.ts +5 -5
  508. package/dist/host/launch/stage.js +14 -13
  509. package/dist/host/launch/toolchains.d.ts +4 -0
  510. package/dist/host/launch/toolchains.js +11 -0
  511. package/dist/host/launch/{wsb.d.ts → wsb-file.d.ts} +4 -2
  512. package/dist/host/launch/wsb-file.js +56 -0
  513. package/dist/host/life/crash-report.d.ts +8 -0
  514. package/dist/host/life/crash-report.js +87 -0
  515. package/dist/host/life/index.d.ts +6 -0
  516. package/dist/host/life/index.js +6 -0
  517. package/dist/host/life/keep-awake.d.ts +10 -0
  518. package/dist/host/life/keep-awake.js +29 -0
  519. package/dist/host/life/life-record.d.ts +48 -0
  520. package/dist/host/life/life-record.js +76 -0
  521. package/dist/host/life/stop-events.d.ts +27 -0
  522. package/dist/host/life/stop-events.js +96 -0
  523. package/dist/host/life/stop-warning.d.ts +4 -0
  524. package/dist/host/life/stop-warning.js +25 -0
  525. package/dist/host/life/windows-update.d.ts +3 -0
  526. package/dist/host/life/windows-update.js +11 -0
  527. package/dist/host/native.d.ts +4 -0
  528. package/dist/host/native.js +11 -0
  529. package/dist/host/network/index.d.ts +1 -0
  530. package/dist/host/network/index.js +1 -0
  531. package/dist/host/{port-forward.d.ts → network/port-forward.d.ts} +1 -1
  532. package/dist/host/{port-forward.js → network/port-forward.js} +16 -10
  533. package/dist/host/profile/accounts.d.ts +37 -0
  534. package/dist/host/profile/accounts.js +146 -0
  535. package/dist/host/profile/claude-login.d.ts +22 -0
  536. package/dist/host/profile/claude-login.js +57 -0
  537. package/dist/host/{claude-profile.d.ts → profile/claude-profile.d.ts} +9 -9
  538. package/dist/host/{claude-profile.js → profile/claude-profile.js} +32 -22
  539. package/dist/host/profile/index.d.ts +7 -0
  540. package/dist/host/profile/index.js +7 -0
  541. package/dist/host/profile/personalize.d.ts +2 -0
  542. package/dist/host/profile/personalize.js +127 -0
  543. package/dist/host/profile/reg-file.d.ts +8 -0
  544. package/dist/host/profile/reg-file.js +45 -0
  545. package/dist/host/profile/secret-files.d.ts +2 -0
  546. package/dist/host/profile/secret-files.js +25 -0
  547. package/dist/host/profile/secret-patterns.d.ts +6 -0
  548. package/dist/host/profile/secret-patterns.js +128 -0
  549. package/dist/host/profile/secrets.d.ts +12 -0
  550. package/dist/host/profile/secrets.js +100 -0
  551. package/dist/host/projects/index.d.ts +4 -0
  552. package/dist/host/projects/index.js +4 -0
  553. package/dist/host/projects/join.d.ts +38 -0
  554. package/dist/host/projects/join.js +119 -0
  555. package/dist/host/projects/known.d.ts +28 -0
  556. package/dist/host/projects/known.js +55 -0
  557. package/dist/host/projects/mapper.d.ts +29 -0
  558. package/dist/host/projects/mapper.js +88 -0
  559. package/dist/host/projects/registry.d.ts +83 -0
  560. package/dist/host/projects/registry.js +136 -0
  561. package/dist/host/sandbox/doctor.d.ts +2 -0
  562. package/dist/host/sandbox/doctor.js +42 -0
  563. package/dist/host/sandbox/host-claude.d.ts +1 -0
  564. package/dist/host/sandbox/host-claude.js +26 -0
  565. package/dist/host/sandbox/index.d.ts +6 -0
  566. package/dist/host/sandbox/index.js +6 -0
  567. package/dist/host/{platform.d.ts → sandbox/platform.d.ts} +0 -5
  568. package/dist/host/sandbox/platform.js +60 -0
  569. package/dist/host/sandbox/probe.d.ts +3 -0
  570. package/dist/host/sandbox/probe.js +47 -0
  571. package/dist/host/{window.js → sandbox/window.js} +7 -5
  572. package/dist/host/{wsb.js → sandbox/wsb-cli.js} +31 -8
  573. package/dist/host/{cleanup.js → storage/cleanup.js} +27 -12
  574. package/dist/host/storage/index.d.ts +2 -0
  575. package/dist/host/storage/index.js +2 -0
  576. package/dist/host/storage/state-files.d.ts +4 -0
  577. package/dist/host/storage/state-files.js +10 -0
  578. package/dist/host/test-guard.js +1 -1
  579. package/dist/host/tools/conpty.d.ts +8 -0
  580. package/dist/host/tools/conpty.js +58 -0
  581. package/dist/host/tools/index.d.ts +2 -0
  582. package/dist/host/tools/index.js +2 -0
  583. package/dist/host/{terminal.d.ts → tools/windows-terminal.d.ts} +2 -10
  584. package/dist/host/{terminal.js → tools/windows-terminal.js} +33 -57
  585. package/dist/host/workspace-view/active-views.d.ts +3 -0
  586. package/dist/host/workspace-view/active-views.js +22 -0
  587. package/dist/host/workspace-view/index.d.ts +2 -18
  588. package/dist/host/workspace-view/index.js +2 -49
  589. package/dist/host/workspace-view/plan.d.ts +16 -0
  590. package/dist/host/workspace-view/plan.js +50 -0
  591. package/dist/host/workspace-view/rules.js +10 -3
  592. package/dist/host/workspace-view/view-state.d.ts +10 -0
  593. package/dist/host/workspace-view/view-state.js +31 -0
  594. package/dist/host/workspace-view/view.d.ts +1 -0
  595. package/dist/host/workspace-view/view.js +51 -55
  596. package/dist/runtime/daemon.js +4232 -1918
  597. package/dist/runtime/db.js +2145 -830
  598. package/dist/runtime/gitguard.js +29 -11
  599. package/dist/runtime/main.js +4760 -2155
  600. package/dist/runtime/netproxy.js +1654 -418
  601. package/dist/runtime/view.js +1515 -453
  602. package/dist/selftest/accounts.test.d.ts +1 -1
  603. package/dist/selftest/accounts.test.js +20 -17
  604. package/dist/selftest/agent-commands.test.d.ts +1 -1
  605. package/dist/selftest/agent-commands.test.js +9 -5
  606. package/dist/selftest/audit.test.d.ts +1 -1
  607. package/dist/selftest/audit.test.js +46 -13
  608. package/dist/selftest/channel.test.d.ts +1 -1
  609. package/dist/selftest/channel.test.js +91 -8
  610. package/dist/selftest/cli.test.d.ts +1 -1
  611. package/dist/selftest/cli.test.js +68 -16
  612. package/dist/selftest/cmdline.test.d.ts +1 -1
  613. package/dist/selftest/cmdline.test.js +36 -7
  614. package/dist/selftest/config.test.d.ts +1 -1
  615. package/dist/selftest/config.test.js +12 -5
  616. package/dist/selftest/data.test.d.ts +1 -1
  617. package/dist/selftest/data.test.js +35 -6
  618. package/dist/selftest/detect.test.d.ts +1 -1
  619. package/dist/selftest/detect.test.js +22 -9
  620. package/dist/selftest/generate.test.d.ts +1 -1
  621. package/dist/selftest/generate.test.js +33 -9
  622. package/dist/selftest/git-access.test.d.ts +1 -1
  623. package/dist/selftest/git-access.test.js +42 -4
  624. package/dist/selftest/guest-boot.test.d.ts +1 -1
  625. package/dist/selftest/guest-boot.test.js +25 -7
  626. package/dist/selftest/host-sim.test.d.ts +1 -1
  627. package/dist/selftest/host-sim.test.js +27 -3
  628. package/dist/selftest/hostile-input.test.d.ts +1 -1
  629. package/dist/selftest/hostile-input.test.js +5 -5
  630. package/dist/selftest/index.d.ts +1 -1
  631. package/dist/selftest/index.js +73 -16
  632. package/dist/selftest/layout.test.d.ts +2 -0
  633. package/dist/selftest/layout.test.js +131 -0
  634. package/dist/selftest/links.test.d.ts +1 -1
  635. package/dist/selftest/links.test.js +16 -11
  636. package/dist/selftest/live-daemon.test.d.ts +1 -1
  637. package/dist/selftest/live-daemon.test.js +20 -8
  638. package/dist/selftest/live-git.test.d.ts +1 -1
  639. package/dist/selftest/live-git.test.js +13 -4
  640. package/dist/selftest/live-network.test.d.ts +1 -1
  641. package/dist/selftest/live-network.test.js +24 -9
  642. package/dist/selftest/live-projects.test.d.ts +1 -1
  643. package/dist/selftest/live-projects.test.js +47 -20
  644. package/dist/selftest/live-terminal.test.d.ts +2 -0
  645. package/dist/selftest/live-terminal.test.js +195 -0
  646. package/dist/selftest/local-config.test.d.ts +1 -1
  647. package/dist/selftest/local-config.test.js +88 -15
  648. package/dist/selftest/mirror.test.d.ts +1 -1
  649. package/dist/selftest/mirror.test.js +118 -19
  650. package/dist/selftest/network.test.d.ts +1 -1
  651. package/dist/selftest/network.test.js +17 -8
  652. package/dist/selftest/personalization.test.d.ts +1 -1
  653. package/dist/selftest/personalization.test.js +12 -5
  654. package/dist/selftest/projects.test.d.ts +1 -1
  655. package/dist/selftest/projects.test.js +336 -72
  656. package/dist/selftest/repair.test.d.ts +1 -1
  657. package/dist/selftest/repair.test.js +17 -5
  658. package/dist/selftest/repo-guard.test.d.ts +1 -1
  659. package/dist/selftest/repo-guard.test.js +21 -20
  660. package/dist/selftest/secrets.test.d.ts +1 -1
  661. package/dist/selftest/secrets.test.js +57 -13
  662. package/dist/selftest/setup.test.d.ts +1 -1
  663. package/dist/selftest/setup.test.js +25 -5
  664. package/dist/selftest/{fixtures.d.ts → support/fixtures.d.ts} +7 -4
  665. package/dist/selftest/{fixtures.js → support/fixtures.js} +95 -17
  666. package/dist/selftest/{harness.js → support/harness.js} +24 -7
  667. package/dist/selftest/{live.d.ts → support/live.d.ts} +2 -2
  668. package/dist/selftest/{live.js → support/live.js} +34 -10
  669. package/dist/selftest/support/suite.js +1 -0
  670. package/dist/selftest/sync.test.d.ts +1 -1
  671. package/dist/selftest/sync.test.js +64 -26
  672. package/dist/selftest/test-guard.test.d.ts +1 -1
  673. package/dist/selftest/test-guard.test.js +43 -15
  674. package/dist/selftest/toolchains.test.d.ts +1 -1
  675. package/dist/selftest/toolchains.test.js +135 -36
  676. package/dist/selftest/workspace-view.test.d.ts +1 -1
  677. package/dist/selftest/workspace-view.test.js +48 -11
  678. package/dist/selftest/workspace.test.d.ts +1 -1
  679. package/dist/selftest/workspace.test.js +13 -4
  680. package/dist/shared/{apps.d.ts → apps/catalogue.d.ts} +1 -11
  681. package/dist/shared/apps/catalogue.js +768 -0
  682. package/dist/shared/apps/index.d.ts +2 -0
  683. package/dist/shared/apps/index.js +2 -0
  684. package/dist/shared/apps/selection.d.ts +11 -0
  685. package/dist/shared/apps/selection.js +40 -0
  686. package/dist/shared/channel/index.d.ts +2 -0
  687. package/dist/shared/channel/index.js +2 -0
  688. package/dist/shared/channel/run-dir.d.ts +30 -0
  689. package/dist/shared/channel/run-dir.js +84 -0
  690. package/dist/shared/{schema.d.ts → channel/schema.d.ts} +60 -19
  691. package/dist/shared/channel/schema.js +131 -0
  692. package/dist/shared/download/archive.d.ts +13 -0
  693. package/dist/shared/download/archive.js +57 -0
  694. package/dist/shared/download/downloader.d.ts +35 -0
  695. package/dist/shared/download/downloader.js +110 -0
  696. package/dist/shared/download/github.d.ts +16 -0
  697. package/dist/shared/download/github.js +74 -0
  698. package/dist/shared/download/http.d.ts +5 -0
  699. package/dist/shared/download/http.js +30 -0
  700. package/dist/shared/download/index.d.ts +5 -0
  701. package/dist/shared/download/index.js +5 -0
  702. package/dist/shared/download/spawn.d.ts +2 -0
  703. package/dist/shared/download/spawn.js +7 -0
  704. package/dist/shared/io/index.d.ts +3 -0
  705. package/dist/shared/io/index.js +3 -0
  706. package/dist/shared/io/json-file.d.ts +10 -0
  707. package/dist/shared/io/json-file.js +21 -0
  708. package/dist/shared/io/json.d.ts +13 -0
  709. package/dist/shared/io/json.js +49 -0
  710. package/dist/shared/{safe-remove.js → io/safe-remove.js} +32 -7
  711. package/dist/shared/{netrules.js → network/firewall-rules.js} +36 -5
  712. package/dist/shared/network/index.d.ts +2 -0
  713. package/dist/shared/network/index.js +2 -0
  714. package/dist/shared/{netpolicy.js → network/policy.js} +66 -11
  715. package/dist/shared/{paths.js → paths/claude-paths.js} +12 -2
  716. package/dist/shared/{guest-paths.d.ts → paths/guest-paths.d.ts} +21 -0
  717. package/dist/shared/paths/guest-paths.js +146 -0
  718. package/dist/shared/paths/index.d.ts +3 -0
  719. package/dist/shared/paths/index.js +3 -0
  720. package/dist/shared/{projects.d.ts → paths/projects.d.ts} +27 -4
  721. package/dist/shared/paths/projects.js +136 -0
  722. package/dist/shared/pty/client.d.ts +21 -0
  723. package/dist/shared/pty/client.js +79 -0
  724. package/dist/shared/pty/console-input.d.ts +11 -0
  725. package/dist/shared/pty/console-input.js +81 -0
  726. package/dist/shared/pty/index.d.ts +6 -0
  727. package/dist/shared/pty/index.js +6 -0
  728. package/dist/shared/pty/input-joiner.d.ts +15 -0
  729. package/dist/shared/pty/input-joiner.js +44 -0
  730. package/dist/shared/pty/output-filter.d.ts +13 -0
  731. package/dist/shared/pty/output-filter.js +140 -0
  732. package/dist/shared/pty/protocol.d.ts +36 -0
  733. package/dist/shared/pty/protocol.js +60 -0
  734. package/dist/shared/pty/terminal.d.ts +24 -0
  735. package/dist/shared/pty/terminal.js +147 -0
  736. package/dist/shared/test-guard.js +3 -1
  737. package/dist/sync/claude-mem.d.ts +1 -1
  738. package/dist/sync/claude-mem.js +9 -4
  739. package/dist/sync/history.d.ts +1 -29
  740. package/dist/sync/history.js +57 -45
  741. package/dist/sync/index.d.ts +5 -0
  742. package/dist/sync/index.js +5 -0
  743. package/dist/sync/sync-cycle.d.ts +18 -0
  744. package/dist/sync/sync-cycle.js +85 -0
  745. package/dist/sync/sync-state.d.ts +32 -0
  746. package/dist/sync/sync-state.js +37 -0
  747. package/dist/sync/watcher.d.ts +0 -18
  748. package/dist/sync/watcher.js +66 -100
  749. package/native/keep-awake.ps1 +8 -0
  750. package/native/power.cs +23 -0
  751. package/native/stop-events.ps1 +38 -0
  752. package/package.json +11 -3
  753. package/sandbox/linkgate.cs +98 -0
  754. package/sandbox/memlog.ps1 +15 -6
  755. package/sandbox/ptyhost.cs +60 -3
  756. package/schemas/config.schema.json +48 -1
  757. package/schemas/sandbox-config.schema.json +37 -3
  758. package/dist/cli/commands/launch.d.ts +0 -29
  759. package/dist/cli/commands/launch.js +0 -366
  760. package/dist/cli/commands/maintenance.d.ts +0 -10
  761. package/dist/cli/commands/maintenance.js +0 -187
  762. package/dist/cli/commands/project.d.ts +0 -29
  763. package/dist/cli/commands/project.js +0 -63
  764. package/dist/cli/commands/projects.d.ts +0 -14
  765. package/dist/cli/commands/projects.js +0 -146
  766. package/dist/cli/commands/restart.d.ts +0 -6
  767. package/dist/cli/commands/restart.js +0 -85
  768. package/dist/cli/commands/sessions.d.ts +0 -12
  769. package/dist/cli/commands/sessions.js +0 -257
  770. package/dist/cli/menu/settings/editors.js +0 -305
  771. package/dist/cli/progress.d.ts +0 -9
  772. package/dist/cli/progress.js +0 -49
  773. package/dist/cli/tui/dialogs.d.ts +0 -57
  774. package/dist/cli/tui/dialogs.js +0 -162
  775. package/dist/core/config.js +0 -109
  776. package/dist/core/schema.d.ts +0 -6
  777. package/dist/core/schema.js +0 -8
  778. package/dist/core/util.d.ts +0 -62
  779. package/dist/core/util.js +0 -156
  780. package/dist/core/workspace.d.ts +0 -18
  781. package/dist/core/workspace.js +0 -145
  782. package/dist/guest/boot-env.d.ts +0 -4
  783. package/dist/guest/daemon.js +0 -57
  784. package/dist/guest/env.d.ts +0 -52
  785. package/dist/guest/env.js +0 -103
  786. package/dist/guest/gitrules.js +0 -11
  787. package/dist/guest/project-status.d.ts +0 -5
  788. package/dist/guest/project-status.js +0 -17
  789. package/dist/guest/setup/user.js +0 -51
  790. package/dist/guest/toolchains/cli.d.ts +0 -10
  791. package/dist/guest/toolchains/common.d.ts +0 -54
  792. package/dist/guest/toolchains/common.js +0 -147
  793. package/dist/guest/toolchains/databases/dynamodb.d.ts +0 -8
  794. package/dist/guest/toolchains/databases/dynamodb.js +0 -52
  795. package/dist/guest/toolchains/databases/index.d.ts +0 -6
  796. package/dist/guest/toolchains/databases/index.js +0 -62
  797. package/dist/guest/toolchains/databases/mongodb.d.ts +0 -3
  798. package/dist/guest/toolchains/databases/mongodb.js +0 -31
  799. package/dist/guest/toolchains/databases/mysql.d.ts +0 -3
  800. package/dist/guest/toolchains/databases/mysql.js +0 -38
  801. package/dist/guest/toolchains/databases/postgres.d.ts +0 -5
  802. package/dist/guest/toolchains/databases/postgres.js +0 -38
  803. package/dist/guest/toolchains/databases/redis.d.ts +0 -3
  804. package/dist/guest/toolchains/databases/redis.js +0 -16
  805. package/dist/guest/toolchains/git.d.ts +0 -3
  806. package/dist/guest/toolchains/go.d.ts +0 -3
  807. package/dist/guest/toolchains/java.d.ts +0 -8
  808. package/dist/guest/toolchains/node.d.ts +0 -3
  809. package/dist/guest/toolchains/pwsh.d.ts +0 -4
  810. package/dist/guest/toolchains/python.d.ts +0 -3
  811. package/dist/guest/toolchains/scripting/php.d.ts +0 -3
  812. package/dist/guest/toolchains/scripting/ruby.d.ts +0 -3
  813. package/dist/host/accounts.d.ts +0 -32
  814. package/dist/host/accounts.js +0 -128
  815. package/dist/host/agent-commands.d.ts +0 -25
  816. package/dist/host/agent-commands.js +0 -145
  817. package/dist/host/channel.d.ts +0 -38
  818. package/dist/host/channel.js +0 -162
  819. package/dist/host/generate.d.ts +0 -13
  820. package/dist/host/generate.js +0 -108
  821. package/dist/host/join.d.ts +0 -28
  822. package/dist/host/join.js +0 -76
  823. package/dist/host/launch/projects.d.ts +0 -15
  824. package/dist/host/launch/wsb.js +0 -34
  825. package/dist/host/motw.d.ts +0 -17
  826. package/dist/host/motw.js +0 -74
  827. package/dist/host/pc-scan.d.ts +0 -6
  828. package/dist/host/personalize.d.ts +0 -10
  829. package/dist/host/personalize.js +0 -97
  830. package/dist/host/platform.js +0 -129
  831. package/dist/host/project-scan.d.ts +0 -7
  832. package/dist/host/projects.d.ts +0 -100
  833. package/dist/host/projects.js +0 -147
  834. package/dist/host/repo-guard.d.ts +0 -43
  835. package/dist/host/repo-guard.js +0 -347
  836. package/dist/host/secrets.d.ts +0 -14
  837. package/dist/host/secrets.js +0 -133
  838. package/dist/host/stops.d.ts +0 -67
  839. package/dist/host/stops.js +0 -126
  840. package/dist/shared/apps.js +0 -114
  841. package/dist/shared/download.d.ts +0 -60
  842. package/dist/shared/download.js +0 -215
  843. package/dist/shared/guest-paths.js +0 -61
  844. package/dist/shared/projects.js +0 -67
  845. package/dist/shared/pty-client.d.ts +0 -91
  846. package/dist/shared/pty-client.js +0 -349
  847. package/dist/shared/rundir.d.ts +0 -41
  848. package/dist/shared/rundir.js +0 -96
  849. package/dist/shared/schema.js +0 -92
  850. /package/dist/{guest/daemon.d.ts → cli/tui/list/list-types.js} +0 -0
  851. /package/dist/{guest/db.d.ts → cli/tui/screen.js} +0 -0
  852. /package/dist/core/{detect-databases.d.ts → detect/databases.d.ts} +0 -0
  853. /package/dist/{guest/toolchains → core/detect}/versions.d.ts +0 -0
  854. /package/dist/guest/{setup/agents.d.ts → agents/agent-installer.d.ts} +0 -0
  855. /package/dist/guest/{audit-parse.d.ts → audit/parse.d.ts} +0 -0
  856. /package/dist/guest/{guide.d.ts → boot/guide.d.ts} +0 -0
  857. /package/dist/guest/daemon/{shutdown.d.ts → idle-shutdown.d.ts} +0 -0
  858. /package/dist/guest/daemon/{session.d.ts → sessions.d.ts} +0 -0
  859. /package/dist/guest/{main.d.ts → entries/daemon.d.ts} +0 -0
  860. /package/dist/guest/{netproxy.d.ts → entries/db.d.ts} +0 -0
  861. /package/dist/{selftest/suite.js → guest/entries/gitguard.d.ts} +0 -0
  862. /package/dist/guest/{gitguard.d.ts → git/decision.d.ts} +0 -0
  863. /package/dist/guest/{ports.d.ts → runtime/ports.d.ts} +0 -0
  864. /package/dist/guest/{project-context.d.ts → runtime/project-context.d.ts} +0 -0
  865. /package/dist/guest/{cmdline.d.ts → sessions/cmdline.d.ts} +0 -0
  866. /package/dist/guest/{ptyhost.d.ts → sessions/pty-host.d.ts} +0 -0
  867. /package/dist/guest/{view.d.ts → sessions/viewer.d.ts} +0 -0
  868. /package/dist/guest/setup/{policy.d.ts → managed-policy.d.ts} +0 -0
  869. /package/dist/host/{window.d.ts → sandbox/window.d.ts} +0 -0
  870. /package/dist/host/{wsb.d.ts → sandbox/wsb-cli.d.ts} +0 -0
  871. /package/dist/host/{cleanup.d.ts → storage/cleanup.d.ts} +0 -0
  872. /package/dist/selftest/{harness.d.ts → support/harness.d.ts} +0 -0
  873. /package/dist/selftest/{suite.d.ts → support/suite.d.ts} +0 -0
  874. /package/dist/shared/{safe-remove.d.ts → io/safe-remove.d.ts} +0 -0
  875. /package/dist/shared/{netrules.d.ts → network/firewall-rules.d.ts} +0 -0
  876. /package/dist/shared/{netpolicy.d.ts → network/policy.d.ts} +0 -0
  877. /package/dist/shared/{paths.d.ts → paths/claude-paths.d.ts} +0 -0
@@ -1,22 +1,22 @@
1
- import { DATABASES, detectDatabases } from '../core/detect-databases.js';
1
+ import { DATABASES, detectDatabases } from '../../core/detect/index.js';
2
2
  import { hostDatabases } from './pc-scan.js';
3
3
  import { readProjectFiles } from './project-scan.js';
4
4
  /** The version a compose file pins (postgres:16-alpine -> 16, mongo:7.0 -> 7.0), if any. */
5
- const pinnedVersion = (files, image) => {
5
+ function pinnedVersion(files, image) {
6
6
  for (const file of files) {
7
7
  const match = image.exec(file.text);
8
8
  if (match?.[1] && /^\d+(\.\d+)?/.test(match[1]))
9
9
  return /^\d+(\.\d+)?/.exec(match[1])[0];
10
10
  }
11
11
  return null;
12
- };
12
+ }
13
13
  /**
14
14
  * What to run in this sandbox: databases set to true, plus "auto" ones the project needs. SQL Server is reported (so
15
15
  * the user hears about it) but cannot run inside Windows Sandbox.
16
16
  */
17
- export const planDatabases = (config, workspace, probe = {}) => {
17
+ export function planDatabases(config, workspace, probe = {}) {
18
18
  const autos = DATABASES.filter((db) => config[db].enabled === 'auto');
19
- const files = autos.length ? probe.files ?? readProjectFiles(workspace) : [];
19
+ const files = autos.length ? (probe.files ?? readProjectFiles(workspace)) : [];
20
20
  const detected = autos.length ? detectDatabases(files, probe.host ?? hostDatabases) : [];
21
21
  const plan = databasePlanner(config, files.filter((f) => /compose/i.test(f.path)));
22
22
  return DATABASES.flatMap((database) => {
@@ -28,25 +28,36 @@ export const planDatabases = (config, workspace, probe = {}) => {
28
28
  return [plan(database, found.reasons)];
29
29
  return [];
30
30
  });
31
- };
31
+ }
32
32
  /** Every database the sandbox can run, so `sbx-db start <name>` works for ones that did not start at boot. */
33
- export const databaseCatalog = (config) => {
33
+ export function databaseCatalog(config) {
34
34
  const plan = databasePlanner(config, []);
35
35
  return DATABASES.filter((db) => db !== 'sqlserver').map((db) => plan(db, ['started with sbx-db']));
36
- };
36
+ }
37
37
  /** Version (a compose file's image tag wins), port and admin UI for one database. */
38
- const databasePlanner = (config, compose) => {
38
+ function databasePlanner(config, compose) {
39
39
  const versions = {
40
- postgres: pinnedVersion(compose, /image:\s*["']?(?:[\w.-]+\/)*postgres:([\w.-]+)/i) ?? (config.postgres.version === 'latest' ? 'latest' : config.postgres.version),
40
+ postgres: pinnedVersion(compose, /image:\s*["']?(?:[\w.-]+\/)*postgres:([\w.-]+)/i) ??
41
+ (config.postgres.version === 'latest' ? 'latest' : config.postgres.version),
41
42
  mysql: config.mysql.version,
42
43
  mongodb: pinnedVersion(compose, /image:\s*["']?(?:[\w.-]+\/)*mongo:([\w.-]+)/i) ?? config.mongodb.version,
43
44
  redis: 'latest',
44
45
  dynamodb: 'latest',
45
46
  sqlserver: '',
46
47
  };
47
- const ports = { postgres: config.postgres.port, mysql: config.mysql.port, mongodb: config.mongodb.port, redis: config.redis.port, dynamodb: config.dynamodb.port, sqlserver: 1433 };
48
+ const ports = {
49
+ postgres: config.postgres.port,
50
+ mysql: config.mysql.port,
51
+ mongodb: config.mongodb.port,
52
+ redis: config.redis.port,
53
+ dynamodb: config.dynamodb.port,
54
+ sqlserver: 1433,
55
+ };
48
56
  return (database, reasons) => ({
49
- database, reasons, version: versions[database], port: ports[database],
57
+ database,
58
+ reasons,
59
+ version: versions[database],
60
+ port: ports[database],
50
61
  ...(database === 'dynamodb' && config.dynamodb.admin ? { adminPort: config.dynamodb.adminPort } : {}),
51
62
  });
52
- };
63
+ }
@@ -0,0 +1,4 @@
1
+ import type { GenerateOptions, Generated } from '../../core/types.js';
2
+ export declare function generateSandbox(given: GenerateOptions): Generated & {
3
+ personalization: string;
4
+ };
@@ -0,0 +1,77 @@
1
+ // Writes a launch folder for one sandbox: session.json (what the guest needs to know), the bundled runtime, hooks, the
2
+ // staged Claude settings and the .wsb file that starts Windows Sandbox. The pieces live in the sibling files.
3
+ import fs from 'node:fs';
4
+ import path from 'node:path';
5
+ import crypto from 'node:crypto';
6
+ import { widenForProjects } from '../../core/local-config/index.js';
7
+ import { dirExists, ensureDir, fail, writeJson } from '../../core/util/index.js';
8
+ import { capturePersonalization, stageClaudeProfile } from '../profile/index.js';
9
+ import { assertTestWritable } from '../test-guard.js';
10
+ import { planBootProjects } from './boot-projects.js';
11
+ import { planDatabases } from './database-plan.js';
12
+ import { collectMappings } from './mappings.js';
13
+ import { guestSession, logonEnv } from './session-file.js';
14
+ import { copyRuntime, stageGitIdentity, stageHooks } from './stage.js';
15
+ import { decideProjectToolchains } from './toolchains.js';
16
+ import { buildWsb, resolveMemoryMb } from './wsb-file.js';
17
+ const NO_PROFILE = { hostDir: null, staged: [], skipped: [], credentials: false, secretsRemoved: [] };
18
+ export function generateSandbox(given) {
19
+ // Several projects at boot: the sandbox also gets what the others want and you allowed (core/local-config).
20
+ const others = given.bootWants?.projects ?? [];
21
+ const boot = planBootProjects({
22
+ run: given.run,
23
+ packageRoot: given.packageRoot,
24
+ extraProjects: given.extraProjects,
25
+ knownProjects: given.knownProjects,
26
+ });
27
+ const wide = widenForProjects(given.run.config, others, { keepOff: given.bootWants?.keepOff, exists: dirExists });
28
+ const o = { ...given, run: { ...given.run, config: wide.config } };
29
+ const { config, dataPath, workspaceHost, harnessName, storageRoot } = o.run;
30
+ const harness = harnessName === 'none'
31
+ ? null
32
+ : (config.harnesses[harnessName] ??
33
+ fail('Unknown agent: ' + harnessName, 'Configured agents: ' + Object.keys(config.harnesses).join(', ')));
34
+ if (!dirExists(workspaceHost))
35
+ fail('The workspace folder does not exist: ' + workspaceHost, 'cd into the project first.');
36
+ assertTestWritable(storageRoot);
37
+ assertTestWritable(dataPath);
38
+ // Checked before anything is written, so a refusal leaves nothing behind.
39
+ const memoryMb = Math.max(resolveMemoryMb(config.sandbox, o.freeMemoryBytes), ...others.map((p) => (typeof p.config.sandbox.memoryMb === 'number' ? p.config.sandbox.memoryMb : 0)));
40
+ const launchId = Date.now() + '-' + crypto.randomBytes(3).toString('hex');
41
+ const launchPath = path.join(storageRoot, 'launches', launchId);
42
+ ensureDir(launchPath);
43
+ ensureDir(dataPath);
44
+ const mappingNotes = [];
45
+ const mappings = collectMappings(o, launchPath, boot, mappingNotes);
46
+ const profile = harnessName === 'claude'
47
+ ? stageClaudeProfile(config.claudeProfile, launchPath, workspaceHost, config.secrets)
48
+ : NO_PROFILE;
49
+ stageGitIdentity(launchPath);
50
+ const personalization = config.personalization.enabled ? capturePersonalization(launchPath) : 'disabled';
51
+ const databases = o.databases ?? planDatabases(config.databases, workspaceHost);
52
+ const toolchains = decideProjectToolchains(o);
53
+ const session = guestSession(o, { launchId, launchPath, harness, boot, mappings, profile, databases, toolchains });
54
+ const sessionPath = path.join(launchPath, 'session.json');
55
+ writeJson(sessionPath, session);
56
+ fs.writeFileSync(path.join(launchPath, 'env.cmd'), logonEnv(session.workspace), 'utf8');
57
+ copyRuntime(o.packageRoot, launchPath);
58
+ stageHooks(o.packageRoot, launchPath, o.run.scripts);
59
+ const wsbPath = path.join(launchPath, 'agent.wsb');
60
+ fs.writeFileSync(wsbPath, buildWsb(config, memoryMb, mappings), 'utf8');
61
+ return {
62
+ wsbPath,
63
+ launchPath,
64
+ launchId,
65
+ sessionPath,
66
+ memoryMb,
67
+ bootConfig: config,
68
+ widened: wide.widened,
69
+ mappings,
70
+ profile,
71
+ personalization,
72
+ databases,
73
+ toolchains,
74
+ projects: { ...boot, notes: [...boot.notes, ...wide.notes] },
75
+ mappingNotes,
76
+ };
77
+ }
@@ -0,0 +1,10 @@
1
+ export { generateSandbox } from './generate.js';
2
+ export { decideProjectToolchains } from './toolchains.js';
3
+ export { hostToolsOf, logonEnv } from './session-file.js';
4
+ export { GUEST, buildWsb, resolveMemoryMb } from './wsb-file.js';
5
+ export { MAX_BOOT_PROJECTS, planBootProjects, shownByRoot, type BootProjects } from './boot-projects.js';
6
+ export { databaseCatalog, planDatabases } from './database-plan.js';
7
+ export { msvcHint, projectEntries, readProjectFiles } from './project-scan.js';
8
+ export { hostDatabases, pcLanguages } from './pc-scan.js';
9
+ export { collectMappings } from './mappings.js';
10
+ export { RUNTIME_FILES, copyRuntime, gitIdentity, stageGitIdentity, stageHooks, stageScripts } from './stage.js';
@@ -0,0 +1,10 @@
1
+ export { generateSandbox } from './generate.js';
2
+ export { decideProjectToolchains } from './toolchains.js';
3
+ export { hostToolsOf, logonEnv } from './session-file.js';
4
+ export { GUEST, buildWsb, resolveMemoryMb } from './wsb-file.js';
5
+ export { MAX_BOOT_PROJECTS, planBootProjects, shownByRoot } from './boot-projects.js';
6
+ export { databaseCatalog, planDatabases } from './database-plan.js';
7
+ export { msvcHint, projectEntries, readProjectFiles } from './project-scan.js';
8
+ export { hostDatabases, pcLanguages } from './pc-scan.js';
9
+ export { collectMappings } from './mappings.js';
10
+ export { RUNTIME_FILES, copyRuntime, gitIdentity, stageGitIdentity, stageHooks, stageScripts } from './stage.js';
@@ -1,3 +1,8 @@
1
1
  import type { GenerateOptions, ResolvedMapping } from '../../core/types.js';
2
- import type { BootProjects } from './projects.js';
3
- export declare const collectMappings: (o: GenerateOptions, launchPath: string, boot?: BootProjects) => ResolvedMapping[];
2
+ import { type BootProjects } from './boot-projects.js';
3
+ /**
4
+ * Every mapping, placed. An extra folder appears at its `guest` path, or at the same path as on this PC when it has
5
+ * none. A folder that cannot appear there (a reserved or relative path, one already in use, a folder that is not
6
+ * there, a whole drive, this tool's own folders) stops the launch; every such folder is listed in one message.
7
+ */
8
+ export declare function collectMappings(o: GenerateOptions, launchPath: string, boot?: BootProjects, notes?: string[]): ResolvedMapping[];
@@ -1,38 +1,97 @@
1
- import { assertNoGuestOverlap } from '../../core/config.js';
1
+ // Which folders are mapped into the sandbox: the launch folder, the data folder, the workspace, your extra folders and
2
+ // the tools copied from this PC. Everything is checked before it can reach the .wsb.
3
+ import path from 'node:path';
4
+ import { assertNoGuestOverlap } from '../../core/config/index.js';
2
5
  import { assertSafeMapping } from '../../core/safe-paths.js';
3
- import { dirExists, fail } from '../../core/util.js';
4
- import { isValidGuestPath, sandboxFolder } from '../../shared/guest-paths.js';
5
- import { GUEST } from './wsb.js';
6
+ import { dirExists, errMsg, fail, isInsideOrEqual, UserError } from '../../core/util/index.js';
7
+ import { shownByRoot } from './boot-projects.js';
8
+ import { deriveGuest, isValidGuestPath, guestConflict, guestFix, PROJECTS_GUEST, sandboxFolder, tidyGuestPath, } from '../../shared/paths/index.js';
9
+ import { GUEST } from './wsb-file.js';
6
10
  import { guestGitDir, planView } from '../workspace-view/index.js';
7
- export const collectMappings = (o, launchPath, boot = { roots: [], projects: [], notes: [] }) => {
11
+ /**
12
+ * Every mapping, placed. An extra folder appears at its `guest` path, or at the same path as on this PC when it has
13
+ * none. A folder that cannot appear there (a reserved or relative path, one already in use, a folder that is not
14
+ * there, a whole drive, this tool's own folders) stops the launch; every such folder is listed in one message.
15
+ */
16
+ export function collectMappings(o, launchPath, boot = { roots: [], projects: [], notes: [] }, notes = []) {
8
17
  const { config, dataPath, workspaceHost, harnessName } = o.run;
9
18
  assertGuestPath(config.guestWorkspace, 'guestWorkspace');
10
19
  // workspaceFilter: the sandbox gets the project's filtered view (no git-ignored files) and its real .git beside it.
11
20
  const view = planView(config, o.run.storageRoot, workspaceHost);
21
+ // A launch folder inside a project root is shown by the root, at the place it has whichever project starts the sandbox.
22
+ const inRoot = !view && shownByRoot(boot.roots, workspaceHost, config.guestWorkspace);
12
23
  const mappings = [
13
24
  { host: launchPath, guest: GUEST.launch, readOnly: true },
14
25
  { host: dataPath, guest: GUEST.data, readOnly: false },
15
- { host: view ? view.options.view : workspaceHost, guest: config.guestWorkspace, readOnly: config.readOnly },
16
- ...(view?.hostGit ? [{ host: view.hostGit, guest: guestGitDir(config.guestWorkspace), readOnly: config.readOnly }] : []),
26
+ ...(inRoot
27
+ ? []
28
+ : [{ host: view ? view.options.view : workspaceHost, guest: config.guestWorkspace, readOnly: config.readOnly }]),
29
+ ...(view?.hostGit
30
+ ? [{ host: view.hostGit, guest: guestGitDir(config.guestWorkspace), readOnly: config.readOnly }]
31
+ : []),
17
32
  ];
33
+ // Project roots and other projects, so they can join the running sandbox without a restart (launch/boot-projects.ts).
34
+ const projects = [];
35
+ for (const m of [...boot.roots, ...boot.projects]) {
36
+ assertGuestPath(m.guest, 'project folder for ' + m.host);
37
+ projects.push({ host: m.host, guest: m.guest, readOnly: false });
38
+ }
39
+ const taken = [
40
+ { guest: config.guestWorkspace, what: 'the project' },
41
+ ...(view?.hostGit ? [{ guest: guestGitDir(config.guestWorkspace), what: "the project's .git" }] : []),
42
+ { guest: PROJECTS_GUEST, what: 'the other projects' },
43
+ ...projects.map((p) => ({ guest: p.guest, what: p.host })),
44
+ ];
45
+ const outside = new Set((o.run.outsideMappings ?? []).map((h) => path.resolve(h).toLowerCase()));
46
+ const problems = [];
47
+ const missing = [];
48
+ const extra = [];
18
49
  for (const m of config.mappings) {
19
50
  const host = m.host;
20
- assertGuestPath(m.guest, 'mappings[].guest for ' + host);
21
51
  if (!dirExists(host)) {
22
- if (m.optional) {
23
- console.warn('Skipping optional mapping (folder not found): ' + host);
24
- continue;
25
- }
26
- fail('A mapped folder does not exist: ' + host, 'Create it, fix the path in your config, or mark the mapping "optional": true.');
52
+ if (m.optional)
53
+ missing.push(host);
54
+ else
55
+ problems.push(host + ': the folder does not exist. Fix: create it, correct the path, or mark the mapping "optional": true.');
56
+ continue;
27
57
  }
28
- assertSafeMapping(host, o.packageRoot, o.run.storageRoot);
29
- mappings.push({ host, guest: m.guest, readOnly: m.readOnly });
30
- }
31
- // Project roots and other projects, so they can join the running sandbox without a restart (launch/projects.ts).
32
- for (const m of [...boot.roots, ...boot.projects]) {
33
- assertGuestPath(m.guest, 'project folder for ' + m.host);
34
- mappings.push({ host: m.host, guest: m.guest, readOnly: false });
58
+ try {
59
+ assertSafeMapping(host, o.packageRoot, o.run.storageRoot);
60
+ }
61
+ catch (e) {
62
+ problems.push(errMsg(e) + (e instanceof UserError && e.fix ? ' Fix: ' + e.fix : ''));
63
+ continue;
64
+ }
65
+ // A folder inside the project with no guest path of its own is already there (unless the filtered view hides it).
66
+ if (!m.guest && !view && isInsideOrEqual(workspaceHost, host)) {
67
+ notes.push(host +
68
+ ' is inside the project, so it is already in the sandbox at ' +
69
+ deriveGuest(host, workspaceHost, config.guestWorkspace) +
70
+ '.');
71
+ continue;
72
+ }
73
+ const wanted = tidyGuestPath(m.guest ?? deriveGuest(host, workspaceHost, config.guestWorkspace));
74
+ // The same folder at the same place twice (your settings and the project file): once is enough.
75
+ if (extra.some((x) => x.host.toLowerCase() === host.toLowerCase() && x.guest.toLowerCase() === wanted.toLowerCase()))
76
+ continue;
77
+ const conflict = guestConflict(wanted, [...taken, ...extra.map((x) => ({ guest: x.guest, what: x.host }))]);
78
+ if (conflict) {
79
+ problems.push(host + ': ' + conflict + '. Fix: ' + guestFix(m.guest));
80
+ continue;
81
+ }
82
+ const label = outside.has(path.resolve(host).toLowerCase()) ? 'outside the project, allowed' : undefined;
83
+ extra.push({ host, guest: wanted, readOnly: m.readOnly, ...(label ? { label } : {}) });
35
84
  }
85
+ if (problems.length)
86
+ fail((problems.length === 1
87
+ ? 'A mapped folder cannot be used:\n '
88
+ : problems.length + ' mapped folders cannot be used:\n ') + problems.join('\n '));
89
+ if (missing.length)
90
+ notes.push('Skipped ' +
91
+ (missing.length === 1 ? 'an optional folder' : missing.length + ' optional folders') +
92
+ ' not on this PC: ' +
93
+ missing.join(', '));
94
+ mappings.push(...extra, ...projects);
36
95
  const { probe } = o;
37
96
  if (probe.nodeDir)
38
97
  mappings.push({ host: probe.nodeDir, guest: GUEST.hostTools + '\\node', readOnly: true });
@@ -42,13 +101,13 @@ export const collectMappings = (o, launchPath, boot = { roots: [], projects: [],
42
101
  mappings.push({ host: probe.gitDir, guest: GUEST.hostTools + '\\git', readOnly: true });
43
102
  if (probe.nvmDir)
44
103
  mappings.push({ host: probe.nvmDir, guest: GUEST.hostTools + '\\nvm', readOnly: true });
104
+ // Placement keeps extra folders apart; this guards the rest (and where the folders really are: F:\x is C:\Mirror\F\x).
45
105
  assertNoGuestOverlap(mappings);
46
- // Same check on where the folders really are (F:\x and C:\Mirror\F\x are one place).
47
106
  assertNoGuestOverlap(mappings.map((m) => ({ guest: sandboxFolder(m.guest) })));
48
107
  return mappings;
49
- };
108
+ }
50
109
  /** The schema checks this already; the host re-checks what goes into the .wsb and the subst list anyway. */
51
- const assertGuestPath = (guest, what) => {
110
+ function assertGuestPath(guest, what) {
52
111
  if (!isValidGuestPath(guest))
53
112
  fail(what + ' is not a usable sandbox folder: ' + guest, 'Use a folder under C:\\ (not Windows, Program Files, Users, AgentData, Mirror, ...) or on drive D: to Z:, e.g. C:\\Assets or F:\\SteamLibrary\\steamapps\\common\\Game.');
54
- };
113
+ }
@@ -0,0 +1,5 @@
1
+ import { type AutoToolchain, type Database } from '../../core/detect/index.js';
2
+ /** Languages this PC has (their commands on PATH; Windows' Store stubs for python do not count). */
3
+ export declare function pcLanguages(): AutoToolchain[];
4
+ /** Database services installed on this PC (names from the service control manager; nothing is started or changed). */
5
+ export declare function hostDatabases(): Database[];
@@ -2,13 +2,11 @@
2
2
  import fs from 'node:fs';
3
3
  import os from 'node:os';
4
4
  import path from 'node:path';
5
- import { pcHasPwsh } from '../core/detect-pwsh.js';
6
- import { databasesFromServices } from '../core/detect-databases.js';
7
- import { AUTO_TOOLCHAINS } from '../core/detect-toolchains.js';
8
- import { captureOutput, isWin } from '../core/util.js';
9
- import { system32 } from '../shared/system.js';
5
+ import { AUTO_TOOLCHAINS, databasesFromServices, pcHasPwsh, } from '../../core/detect/index.js';
6
+ import { captureOutput, isWin } from '../../core/util/index.js';
7
+ import { system32 } from '../../shared/system.js';
10
8
  /** This PC builds Rust with MSVC: rustup's default host is *-msvc (read from rustup's settings; nothing is run). */
11
- const msvcRust = () => {
9
+ function msvcRust() {
12
10
  const settings = path.join(process.env.RUSTUP_HOME ?? path.join(os.homedir(), '.rustup'), 'settings.toml');
13
11
  try {
14
12
  return /default_host_triple\s*=\s*"[^"]*-msvc"/.test(fs.readFileSync(settings, 'utf8').slice(0, 64 * 1024));
@@ -16,22 +14,31 @@ const msvcRust = () => {
16
14
  catch {
17
15
  return false;
18
16
  }
19
- };
17
+ }
20
18
  /** Languages this PC has (their commands on PATH; Windows' Store stubs for python do not count). */
21
- export const pcLanguages = () => {
19
+ export function pcLanguages() {
22
20
  const dirs = (process.env.PATH ?? '').split(path.delimiter).filter((d) => d && !/WindowsApps/i.test(d));
23
21
  const has = (...names) => dirs.some((d) => names.some((n) => fs.existsSync(path.join(d, n))));
24
22
  const found = {
25
- python: has('python.exe', 'py.exe'), rust: has('cargo.exe', 'rustc.exe'), cpp: has('gcc.exe', 'g++.exe', 'cl.exe', 'clang.exe'),
26
- msvc: msvcRust(), pwsh: pcHasPwsh(), dotnet: has('dotnet.exe'), go: has('go.exe'), java: has('java.exe', 'javac.exe'), ruby: has('ruby.exe'), php: has('php.exe'), deno: has('deno.exe'),
23
+ python: has('python.exe', 'py.exe'),
24
+ rust: has('cargo.exe', 'rustc.exe'),
25
+ cpp: has('gcc.exe', 'g++.exe', 'cl.exe', 'clang.exe'),
26
+ msvc: msvcRust(),
27
+ pwsh: pcHasPwsh(),
28
+ dotnet: has('dotnet.exe'),
29
+ go: has('go.exe'),
30
+ java: has('java.exe', 'javac.exe'),
31
+ ruby: has('ruby.exe'),
32
+ php: has('php.exe'),
33
+ deno: has('deno.exe'),
27
34
  };
28
35
  return AUTO_TOOLCHAINS.filter((t) => found[t]);
29
- };
36
+ }
30
37
  /** Database services installed on this PC (names from the service control manager; nothing is started or changed). */
31
- export const hostDatabases = () => {
38
+ export function hostDatabases() {
32
39
  if (!isWin)
33
40
  return [];
34
41
  const output = captureOutput(system32('sc.exe'), ['query', 'type=', 'service', 'state=', 'all'], { timeout: 10000 });
35
42
  const names = [...output.matchAll(/^SERVICE_NAME:\s*(.+)$/gm)].map((m) => m[1].trim());
36
43
  return databasesFromServices(names);
37
- };
44
+ }
@@ -0,0 +1,7 @@
1
+ import { type ProjectFile } from '../../core/detect/index.js';
2
+ /** Manifest-type files in the project, up to 3 folders deep. Links are not followed (the guest may have written it). */
3
+ export declare function readProjectFiles(root: string, depth?: number): ProjectFile[];
4
+ /** File names in the project and its direct sub-folders ("api/go.mod"), for toolchain detection. No links followed. */
5
+ export declare function projectEntries(root: string): string[];
6
+ /** Scripts in the project root or one folder down that set up MSVC (vcvars*.bat, vswhere): read with bounded effort. */
7
+ export declare function msvcHint(root: string): string | undefined;
@@ -1,13 +1,13 @@
1
- // Reads a project the way detect-databases.ts and detect-toolchains.ts need it (only manifest/config files, bounded).
1
+ // Reads a project the way core/detect needs it for databases and toolchains (only manifest/config files, bounded).
2
2
  import fs from 'node:fs';
3
3
  import path from 'node:path';
4
- import { INTERESTING_FILE } from '../core/detect-databases.js';
4
+ import { INTERESTING_FILE } from '../../core/detect/index.js';
5
5
  const SKIP = /^(node_modules|\.git|\.hg|\.svn|vendor|target|bin|obj|dist|build|out|\.next|\.nuxt|\.venv|venv|env|__pycache__|\.gradle|\.idea|\.vs|coverage|packages)$/i;
6
6
  const MAX_FILES = 400;
7
7
  const MAX_BYTES = 256 * 1024;
8
8
  const MAX_FOLDERS = 2000;
9
9
  /** Reads a file through one handle, only if that handle is a regular file of at most MAX_BYTES. */
10
- const readSmallFile = (file) => {
10
+ function readSmallFile(file) {
11
11
  let fd = null;
12
12
  try {
13
13
  fd = fs.openSync(file, 'r');
@@ -25,9 +25,9 @@ const readSmallFile = (file) => {
25
25
  if (fd !== null)
26
26
  fs.closeSync(fd);
27
27
  }
28
- };
29
- /** Manifest-type files in the project, up to 3 folders deep. Links are not followed (the workspace may be guest-written). */
30
- export const readProjectFiles = (root, depth = 3) => {
28
+ }
29
+ /** Manifest-type files in the project, up to 3 folders deep. Links are not followed (the guest may have written it). */
30
+ export function readProjectFiles(root, depth = 3) {
31
31
  const files = [];
32
32
  let folders = 0;
33
33
  const walk = (dir, level) => {
@@ -55,28 +55,36 @@ export const readProjectFiles = (root, depth = 3) => {
55
55
  };
56
56
  walk(root, 0);
57
57
  return files;
58
- };
58
+ }
59
59
  /** File names in the project and its direct sub-folders ("api/go.mod"), for toolchain detection. No links followed. */
60
- export const projectEntries = (root) => {
61
- const list = (dir) => { try {
62
- return fs.readdirSync(dir, { withFileTypes: true }).slice(0, 2000);
63
- }
64
- catch {
65
- return [];
66
- } };
60
+ export function projectEntries(root) {
61
+ const list = (dir) => {
62
+ try {
63
+ return fs.readdirSync(dir, { withFileTypes: true }).slice(0, 2000);
64
+ }
65
+ catch {
66
+ return [];
67
+ }
68
+ };
67
69
  const top = list(root);
68
- const below = top.filter((d) => d.isDirectory() && !d.name.startsWith('.') && !SKIP.test(d.name)).slice(0, 200)
69
- .flatMap((d) => list(path.join(root, d.name)).filter((f) => f.isFile()).map((f) => d.name + '/' + f.name));
70
+ const below = top
71
+ .filter((d) => d.isDirectory() && !d.name.startsWith('.') && !SKIP.test(d.name))
72
+ .slice(0, 200)
73
+ .flatMap((d) => list(path.join(root, d.name))
74
+ .filter((f) => f.isFile())
75
+ .map((f) => d.name + '/' + f.name));
70
76
  return [...top.filter((d) => d.isFile()).map((d) => d.name), ...below];
71
- };
77
+ }
72
78
  /** Scripts in the project root or one folder down that set up MSVC (vcvars*.bat, vswhere): read with bounded effort. */
73
- export const msvcHint = (root) => {
74
- const scripts = projectEntries(root).filter((e) => /\.(ps1|cmd|bat|psm1)$/i.test(e)).slice(0, 60);
79
+ export function msvcHint(root) {
80
+ const scripts = projectEntries(root)
81
+ .filter((e) => /\.(ps1|cmd|bat|psm1)$/i.test(e))
82
+ .slice(0, 60);
75
83
  for (const rel of scripts) {
76
84
  let text = '';
77
85
  try {
78
86
  const file = path.join(root, rel);
79
- if (fs.statSync(file).size <= 256 * 1024)
87
+ if (fs.statSync(file).size <= MAX_BYTES)
80
88
  text = fs.readFileSync(file, 'utf8');
81
89
  }
82
90
  catch {
@@ -86,4 +94,4 @@ export const msvcHint = (root) => {
86
94
  return rel + ' sets up MSVC';
87
95
  }
88
96
  return undefined;
89
- };
97
+ }
@@ -0,0 +1,23 @@
1
+ import type { DatabasePlan, GenerateOptions, Generated, GuestSession, HostProbe, ProfileResult, ResolvedMapping } from '../../core/types.js';
2
+ import type { BootProjects } from './boot-projects.js';
3
+ /** What generateSandbox has decided or staged before it writes session.json. */
4
+ export interface SessionParts {
5
+ readonly launchId: string;
6
+ readonly launchPath: string;
7
+ readonly harness: GuestSession['harness'];
8
+ readonly boot: BootProjects;
9
+ readonly mappings: readonly ResolvedMapping[];
10
+ readonly profile: ProfileResult;
11
+ readonly databases: DatabasePlan[];
12
+ readonly toolchains: Generated['toolchains'];
13
+ }
14
+ /** What was found on this PC to copy instead of download. */
15
+ export declare function hostToolsOf(probe: HostProbe): GuestSession['hostTools'];
16
+ /** session.json. The key order is the file's byte order: keep it. */
17
+ export declare function guestSession(o: GenerateOptions, parts: SessionParts): GuestSession;
18
+ /**
19
+ * env.cmd, which logon.cmd calls before it opens Windows Terminal: Terminal expands "%AGENT_WORKSPACE%" (the starting
20
+ * folder of new tabs) from its own environment, and the runtime only sets the variable machine-wide after Terminal
21
+ * started. `%` is doubled for cmd; a Windows path holds no quotes.
22
+ */
23
+ export declare function logonEnv(workspace: string): string;
@@ -0,0 +1,73 @@
1
+ // What the guest reads at boot: session.json (the whole launch, decided on this side) and env.cmd for logon.cmd.
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { resolveToolchains } from '../../core/detect/index.js';
5
+ import { hubName, PROJECTS_GUEST, substDrives } from '../../shared/paths/index.js';
6
+ import { hostClaudeDir } from '../profile/index.js';
7
+ import { databaseCatalog } from './database-plan.js';
8
+ /** What was found on this PC to copy instead of download. */
9
+ export function hostToolsOf(probe) {
10
+ return {
11
+ node: Boolean(probe.nodeDir),
12
+ nodeVersion: probe.nodeDir || probe.nvmNode ? probe.hostNodeVersion.replace(/^v/, '') : null,
13
+ harnessExecutable: probe.harnessExe?.file ?? null,
14
+ git: Boolean(probe.gitDir),
15
+ nvm: Boolean(probe.nvmDir),
16
+ volta: Boolean(probe.volta),
17
+ pyenv: Boolean(probe.pyenv),
18
+ };
19
+ }
20
+ /** session.json. The key order is the file's byte order: keep it. */
21
+ export function guestSession(o, parts) {
22
+ const { config, workspaceHost, harnessName } = o.run;
23
+ const { profile } = parts;
24
+ return {
25
+ launchId: parts.launchId,
26
+ project: path.basename(workspaceHost),
27
+ projectId: hubName(workspaceHost, []),
28
+ workspace: config.guestWorkspace,
29
+ workspaceHost,
30
+ projectsDir: PROJECTS_GUEST,
31
+ // Every folder mapped for other projects (roots and projects mapped at boot): the guest accepts projects in them.
32
+ roots: [...parts.boot.roots, ...parts.boot.projects].map((r) => r.guest),
33
+ ...(o.autoSession === false ? { autoSession: false } : {}),
34
+ harnessName,
35
+ harness: parts.harness,
36
+ harnessArguments: o.harnessArgs,
37
+ persistAgentState: config.storage.persistAgentState,
38
+ networking: config.sandbox.networking,
39
+ headless: config.sandbox.headless,
40
+ network: config.network,
41
+ provisioning: config.provisioning,
42
+ // "auto" is decided here, so the guest and the launch table agree.
43
+ toolchains: resolveToolchains(config.toolchains, parts.toolchains),
44
+ databases: parts.databases,
45
+ databaseCatalog: databaseCatalog(config.databases),
46
+ versions: o.run.versions,
47
+ attach: config.attach,
48
+ hooks: config.hooks,
49
+ downloads: config.downloads,
50
+ hostTools: hostToolsOf(o.probe),
51
+ claudeProfile: {
52
+ overwrite: config.claudeProfile.overwrite,
53
+ items: profile.staged,
54
+ credentials: profile.credentials,
55
+ hostConfigDir: profile.hostDir ?? hostClaudeDir(config.claudeProfile),
56
+ syncClaudeMem: config.claudeProfile.syncClaudeMem,
57
+ },
58
+ personalization: fs.existsSync(path.join(parts.launchPath, 'personalize', 'personalize.reg')),
59
+ substDrives: substDrives(parts.mappings.map((m) => m.guest)),
60
+ cpuLimitPercent: config.sandbox.cpuLimit === 'none' ? null : config.sandbox.cpuLimit,
61
+ pageFileMb: config.sandbox.pageFileMb,
62
+ apps: config.apps,
63
+ auditProcesses: config.audit.enabled && config.audit.processes,
64
+ };
65
+ }
66
+ /**
67
+ * env.cmd, which logon.cmd calls before it opens Windows Terminal: Terminal expands "%AGENT_WORKSPACE%" (the starting
68
+ * folder of new tabs) from its own environment, and the runtime only sets the variable machine-wide after Terminal
69
+ * started. `%` is doubled for cmd; a Windows path holds no quotes.
70
+ */
71
+ export function logonEnv(workspace) {
72
+ return '@set "AGENT_WORKSPACE=' + workspace.replace(/[\r\n"]/g, '').replace(/%/g, '%%') + '"\r\n';
73
+ }
@@ -1,11 +1,11 @@
1
1
  /** Package hooks first, then ~/.agent-sandbox/hooks (same file name = user's wins), then --script / "scripts". */
2
- export declare const stageHooks: (packageRoot: string, launchPath: string, scripts: string[]) => void;
2
+ export declare function stageHooks(packageRoot: string, launchPath: string, scripts: readonly string[]): void;
3
3
  /** --script / "scripts" files, run before the agent in this order. */
4
- export declare const stageScripts: (target: string, scripts: string[]) => void;
4
+ export declare function stageScripts(target: string, scripts: readonly string[]): void;
5
5
  export declare const RUNTIME_FILES: string[];
6
6
  /** The bundled sandbox runtime (dist/runtime: one self-contained file per entry point) and the sandbox/ scripts. */
7
- export declare const copyRuntime: (packageRoot: string, launchPath: string) => void;
7
+ export declare function copyRuntime(packageRoot: string, launchPath: string): void;
8
8
  /** Only the identity from ~/.gitconfig: the rest can hold credentials (helpers, tokens in insteadOf URLs). */
9
- export declare const gitIdentity: (gitconfig: string) => string;
9
+ export declare function gitIdentity(gitconfig: string): string;
10
10
  /** Writes this PC's git name and email to home\.gitconfig in the launch folder (nothing when there are none). */
11
- export declare const stageGitIdentity: (launchPath: string) => void;
11
+ export declare function stageGitIdentity(launchPath: string): void;