windows-development-sandbox 1.18.4 → 1.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (438) hide show
  1. package/README.md +1 -1
  2. package/config.example.json +17 -1
  3. package/dist/app/features/access/access.def.js +5 -2
  4. package/dist/app/features/access/access.run.js +7 -3
  5. package/dist/app/features/accounts/accounts.def.d.ts +33 -1
  6. package/dist/app/features/accounts/accounts.def.js +10 -4
  7. package/dist/app/features/accounts/accounts.run.d.ts +2 -0
  8. package/dist/app/features/accounts/accounts.run.js +7 -2
  9. package/dist/app/features/accounts/services.def.d.ts +7 -1
  10. package/dist/app/features/accounts/services.def.js +19 -16
  11. package/dist/app/features/accounts/services.run.d.ts +2 -0
  12. package/dist/app/features/accounts/services.run.js +44 -16
  13. package/dist/app/features/agent-commands/agent-commands.def.d.ts +37 -0
  14. package/dist/app/features/agent-commands/agent-commands.def.js +91 -0
  15. package/dist/app/features/agent-commands/agent-commands.run.d.ts +28 -0
  16. package/dist/app/features/agent-commands/agent-commands.run.js +35 -0
  17. package/dist/app/features/agent-commands/index.d.ts +2 -0
  18. package/dist/app/features/agent-commands/index.js +3 -0
  19. package/dist/app/features/agents/agents.def.d.ts +14 -1
  20. package/dist/app/features/agents/agents.def.js +61 -6
  21. package/dist/app/features/agents/agents.run.d.ts +1 -0
  22. package/dist/app/features/agents/agents.run.js +8 -1
  23. package/dist/app/features/agents/claude-env.def.d.ts +36 -0
  24. package/dist/app/features/agents/claude-env.def.js +305 -0
  25. package/dist/app/features/agents/env.def.d.ts +163 -0
  26. package/dist/app/features/agents/env.def.js +184 -0
  27. package/dist/app/features/agents/env.run.d.ts +43 -0
  28. package/dist/app/features/agents/env.run.js +86 -0
  29. package/dist/app/features/agents/index.d.ts +2 -0
  30. package/dist/app/features/agents/index.js +2 -0
  31. package/dist/app/features/defs.d.ts +171 -3
  32. package/dist/app/features/defs.js +9 -0
  33. package/dist/app/features/engine/engine.run.js +1 -1
  34. package/dist/app/features/github/github.def.d.ts +44 -3
  35. package/dist/app/features/github/github.def.js +145 -63
  36. package/dist/app/features/github/github.run.d.ts +9 -2
  37. package/dist/app/features/github/github.run.js +43 -5
  38. package/dist/app/features/health/health.def.js +8 -2
  39. package/dist/app/features/logs/logs.def.js +0 -8
  40. package/dist/app/features/projects/projects.def.js +2 -2
  41. package/dist/app/features/projects/projects.run.js +5 -5
  42. package/dist/app/features/sandbox/sandbox.def.js +7 -3
  43. package/dist/app/features/sessions/sessions.def.d.ts +4 -4
  44. package/dist/app/features/sessions/sessions.def.js +0 -5
  45. package/dist/app/features/sessions/sessions.run.d.ts +1 -1
  46. package/dist/app/features/sessions/sessions.run.js +2 -2
  47. package/dist/app/features/settings/categories.def.js +7 -2
  48. package/dist/app/features/settings/settings-rows.js +6 -2
  49. package/dist/app/features/settings/settings.def.js +1 -1
  50. package/dist/app/features/settings/settings.run.d.ts +8 -0
  51. package/dist/app/features/settings/settings.run.js +12 -3
  52. package/dist/app/features/storage/storage.run.js +18 -9
  53. package/dist/app/features/updates/update-lines.js +2 -2
  54. package/dist/app/features/updates/updates.def.js +1 -1
  55. package/dist/app/features/updates/updates.run.js +13 -3
  56. package/dist/app/features/vpn/vpn.def.d.ts +33 -0
  57. package/dist/app/features/vpn/vpn.def.js +30 -6
  58. package/dist/app/features/vpn/vpn.run.d.ts +11 -0
  59. package/dist/app/features/vpn/vpn.run.js +4 -1
  60. package/dist/app/features/web/web.def.js +2 -2
  61. package/dist/app/features/web/web.run.js +12 -4
  62. package/dist/app/kernel/errors.d.ts +7 -0
  63. package/dist/app/kernel/errors.js +18 -3
  64. package/dist/app/kernel/rpc.d.ts +6 -1
  65. package/dist/app/kernel/view.d.ts +11 -1
  66. package/dist/app/registry.js +7 -1
  67. package/dist/bin/agent-sandbox.js +2 -2
  68. package/dist/bin/{chunk-N4GXYTLV.js → chunk-JETGP2C3.js} +239 -72
  69. package/dist/bin/{chunk-MY7NLQQY.js → chunk-XZKOPGNH.js} +1 -1
  70. package/dist/bin/{chunk-FRPLQLSY.js → chunk-ZTTOF5V3.js} +6566 -4964
  71. package/dist/bin/claude-host.js +2 -2
  72. package/dist/bin/claude-sbx.js +2 -2
  73. package/dist/bin/codex-sbx.js +2 -2
  74. package/dist/bin/gemini-sbx.js +2 -2
  75. package/dist/bin/sandbox.js +2 -2
  76. package/dist/bin/sbx-hide.js +2 -2
  77. package/dist/bin/sbx-show.js +2 -2
  78. package/dist/cli/commands/agent-commands.d.ts +0 -1
  79. package/dist/cli/commands/agent-commands.js +2 -32
  80. package/dist/cli/commands/index.d.ts +1 -1
  81. package/dist/cli/commands/index.js +1 -1
  82. package/dist/cli/commands/launch/launch.js +2 -2
  83. package/dist/cli/commands/registry.js +3 -2
  84. package/dist/cli/manifest.d.ts +3 -3
  85. package/dist/cli/manifest.js +3 -2
  86. package/dist/cli/menu/coverage-exempt.d.ts +17 -0
  87. package/dist/cli/menu/coverage-exempt.js +61 -0
  88. package/dist/cli/menu/io-menu.d.ts +2 -0
  89. package/dist/cli/menu/io-menu.js +50 -5
  90. package/dist/cli/menu/menu.d.ts +1 -1
  91. package/dist/cli/menu/menu.js +3 -3
  92. package/dist/cli/menu/pages/accounts-page.js +1 -1
  93. package/dist/cli/menu/pages/agents-page.d.ts +7 -2
  94. package/dist/cli/menu/pages/agents-page.js +75 -13
  95. package/dist/cli/menu/pages/maintenance-page.d.ts +6 -0
  96. package/dist/cli/menu/pages/maintenance-page.js +10 -4
  97. package/dist/cli/menu/pages/sessions-page.d.ts +2 -0
  98. package/dist/cli/menu/pages/sessions-page.js +12 -4
  99. package/dist/cli/menu/pages/settings-page.js +13 -1
  100. package/dist/cli/menu/remote-menu.js +1 -1
  101. package/dist/cli/menu/shell.d.ts +5 -0
  102. package/dist/cli/menu/shell.js +13 -0
  103. package/dist/cli/menu/views.js +2 -1
  104. package/dist/cli/report.js +2 -0
  105. package/dist/cli/services/agent-commands-service.d.ts +2 -0
  106. package/dist/cli/services/agent-commands-service.js +13 -7
  107. package/dist/cli/services/vpn-service.d.ts +5 -1
  108. package/dist/cli/services/vpn-service.js +6 -1
  109. package/dist/cli/tui/app.d.ts +5 -0
  110. package/dist/cli/tui/app.js +2 -0
  111. package/dist/cli/tui/dialogs/text-screen.js +2 -1
  112. package/dist/cli/tui/terminal.js +3 -1
  113. package/dist/core/config/defaults.js +12 -1
  114. package/dist/core/detect/toolchains.js +9 -0
  115. package/dist/core/disk.d.ts +1 -5
  116. package/dist/core/disk.js +1 -16
  117. package/dist/core/schema/accounts.d.ts +6 -0
  118. package/dist/core/schema/accounts.js +13 -11
  119. package/dist/core/schema/codex.d.ts +29 -0
  120. package/dist/core/schema/codex.js +24 -0
  121. package/dist/core/schema/config.d.ts +58 -14
  122. package/dist/core/schema/config.js +6 -4
  123. package/dist/core/schema/github.js +1 -1
  124. package/dist/core/schema/index.d.ts +1 -0
  125. package/dist/core/schema/index.js +1 -0
  126. package/dist/core/schema/profile.js +8 -4
  127. package/dist/core/schema/resume.js +1 -1
  128. package/dist/core/schema/sandbox.js +3 -3
  129. package/dist/core/schema/toolchains.d.ts +4 -0
  130. package/dist/core/schema/toolchains.js +3 -0
  131. package/dist/core/schema/vpn.js +1 -1
  132. package/dist/core/schema/web.js +3 -3
  133. package/dist/core/types.d.ts +8 -0
  134. package/dist/core/util/errors.d.ts +11 -1
  135. package/dist/core/util/errors.js +7 -1
  136. package/dist/core/util/index.d.ts +1 -1
  137. package/dist/core/util/index.js +1 -1
  138. package/dist/guest/accounts/adapter.d.ts +2 -0
  139. package/dist/guest/accounts/adapters.js +4 -0
  140. package/dist/guest/accounts/apply.d.ts +10 -6
  141. package/dist/guest/accounts/kinds/cfx.d.ts +7 -0
  142. package/dist/guest/accounts/kinds/cfx.js +33 -3
  143. package/dist/guest/accounts/kinds/comet.d.ts +7 -0
  144. package/dist/guest/accounts/kinds/comet.js +50 -0
  145. package/dist/guest/accounts/kinds/perplexity.d.ts +2 -0
  146. package/dist/guest/accounts/kinds/perplexity.js +12 -0
  147. package/dist/guest/accounts/watch.d.ts +2 -0
  148. package/dist/guest/accounts/watch.js +12 -2
  149. package/dist/guest/agents/agent-files.d.ts +26 -6
  150. package/dist/guest/agents/agent-files.js +84 -14
  151. package/dist/guest/agents/agent-installer.js +1 -1
  152. package/dist/guest/agents/local-state.d.ts +5 -2
  153. package/dist/guest/agents/local-state.js +24 -10
  154. package/dist/guest/agents/profile-links.d.ts +2 -0
  155. package/dist/guest/agents/profile-links.js +18 -4
  156. package/dist/guest/apps/after-install.js +19 -0
  157. package/dist/guest/apps/app-installer.d.ts +11 -0
  158. package/dist/guest/apps/app-installer.js +69 -6
  159. package/dist/guest/apps/comet-unpack.d.ts +20 -0
  160. package/dist/guest/apps/comet-unpack.js +127 -0
  161. package/dist/guest/apps/index.d.ts +1 -1
  162. package/dist/guest/apps/index.js +1 -1
  163. package/dist/guest/apps/resolvers-agents-web.d.ts +2 -0
  164. package/dist/guest/apps/resolvers-agents-web.js +7 -0
  165. package/dist/guest/apps/resolvers.js +2 -0
  166. package/dist/guest/apps/shortcuts.d.ts +2 -0
  167. package/dist/guest/apps/shortcuts.js +1 -0
  168. package/dist/guest/apps/unpack.js +14 -4
  169. package/dist/guest/boot/boot.d.ts +45 -16
  170. package/dist/guest/boot/boot.js +325 -149
  171. package/dist/guest/boot/graph.d.ts +252 -0
  172. package/dist/guest/boot/graph.js +257 -0
  173. package/dist/guest/boot/guide-lines.d.ts +25 -0
  174. package/dist/guest/boot/guide-lines.js +41 -0
  175. package/dist/guest/boot/guide.d.ts +1 -4
  176. package/dist/guest/boot/guide.js +6 -8
  177. package/dist/guest/boot/runner.d.ts +77 -0
  178. package/dist/guest/boot/runner.js +215 -0
  179. package/dist/guest/browser/cdp.d.ts +71 -0
  180. package/dist/guest/browser/cdp.js +306 -0
  181. package/dist/guest/browser/comet.d.ts +28 -0
  182. package/dist/guest/browser/comet.js +155 -0
  183. package/dist/guest/daemon/project-provisioner.js +6 -1
  184. package/dist/guest/daemon/sessions.js +2 -1
  185. package/dist/guest/devtools/fivem.d.ts +1 -1
  186. package/dist/guest/devtools/fivem.js +243 -3
  187. package/dist/guest/entries/daemon.js +2 -0
  188. package/dist/guest/runtime/log.d.ts +12 -0
  189. package/dist/guest/runtime/log.js +29 -5
  190. package/dist/guest/runtime/pools.d.ts +24 -0
  191. package/dist/guest/runtime/pools.js +60 -0
  192. package/dist/guest/runtime/process.d.ts +4 -0
  193. package/dist/guest/runtime/process.js +38 -1
  194. package/dist/guest/runtime/status.d.ts +5 -1
  195. package/dist/guest/runtime/status.js +19 -0
  196. package/dist/guest/setup/addon-mcp.d.ts +1 -1
  197. package/dist/guest/setup/addon-mcp.js +52 -12
  198. package/dist/guest/setup/agent-addons.d.ts +3 -2
  199. package/dist/guest/setup/agent-addons.js +12 -3
  200. package/dist/guest/setup/environment.d.ts +1 -1
  201. package/dist/guest/setup/environment.js +25 -12
  202. package/dist/guest/setup/headroom.d.ts +8 -3
  203. package/dist/guest/setup/headroom.js +44 -15
  204. package/dist/guest/setup/path-plan.d.ts +28 -0
  205. package/dist/guest/setup/path-plan.js +69 -2
  206. package/dist/guest/setup/shell-path.d.ts +1 -1
  207. package/dist/guest/setup/shell-path.js +3 -3
  208. package/dist/guest/toolchains/fivem/artifacts.d.ts +48 -1
  209. package/dist/guest/toolchains/fivem/artifacts.js +97 -4
  210. package/dist/guest/toolchains/fivem/fivem.d.ts +32 -1
  211. package/dist/guest/toolchains/fivem/fivem.js +168 -3
  212. package/dist/guest/toolchains/fivem/scaffold.d.ts +35 -0
  213. package/dist/guest/toolchains/fivem/scaffold.js +105 -0
  214. package/dist/guest/toolchains/fivem/serve-plan.d.ts +34 -0
  215. package/dist/guest/toolchains/fivem/serve-plan.js +61 -0
  216. package/dist/guest/toolchains/installers.d.ts +6 -10
  217. package/dist/guest/toolchains/installers.js +4 -12
  218. package/dist/guest/toolchains/languages/go.js +1 -1
  219. package/dist/guest/toolchains/languages/node.js +2 -1
  220. package/dist/guest/toolchains/languages/php.d.ts +2 -0
  221. package/dist/guest/toolchains/languages/php.js +13 -1
  222. package/dist/guest/toolchains/languages/python-tools.js +1 -1
  223. package/dist/guest/toolchains/languages/ruby.js +1 -1
  224. package/dist/guest/toolchains/native/autosdk.d.ts +3 -0
  225. package/dist/guest/toolchains/native/autosdk.js +50 -0
  226. package/dist/guest/toolchains/native/binstall.js +1 -1
  227. package/dist/guest/toolchains/native/msvc/packages.js +10 -4
  228. package/dist/guest/toolchains/native/rust.d.ts +2 -0
  229. package/dist/guest/toolchains/native/rust.js +11 -4
  230. package/dist/guest/toolchains/native/unreal.d.ts +2 -0
  231. package/dist/guest/toolchains/native/unreal.js +19 -6
  232. package/dist/guest/toolchains/native/vcruntime.d.ts +2 -3
  233. package/dist/guest/toolchains/native/vcruntime.js +12 -7
  234. package/dist/guest/toolchains/native/visual-studio.d.ts +5 -2
  235. package/dist/guest/toolchains/native/visual-studio.js +127 -25
  236. package/dist/guest/toolchains/native/vs-request.d.ts +23 -0
  237. package/dist/guest/toolchains/native/vs-request.js +62 -1
  238. package/dist/guest/toolchains/not-yet.d.ts +1 -1
  239. package/dist/guest/toolchains/not-yet.js +3 -3
  240. package/dist/guest/toolchains/persisted.js +2 -7
  241. package/dist/guest/toolchains/plan.js +27 -11
  242. package/dist/guest/toolchains/scheduler.d.ts +2 -21
  243. package/dist/guest/toolchains/scheduler.js +7 -121
  244. package/dist/guest/toolchains/setup.d.ts +15 -2
  245. package/dist/guest/toolchains/setup.js +39 -20
  246. package/dist/guest/toolchains/signature.d.ts +5 -0
  247. package/dist/guest/toolchains/signature.js +22 -0
  248. package/dist/guest/toolchains/split.d.ts +28 -0
  249. package/dist/guest/toolchains/split.js +60 -0
  250. package/dist/guest/toolchains/steam/client.js +2 -1
  251. package/dist/guest/toolchains/step-scheduler.d.ts +51 -0
  252. package/dist/guest/toolchains/step-scheduler.js +147 -0
  253. package/dist/guest/toolchains/step.d.ts +13 -0
  254. package/dist/guest/toolchains/tools/git.js +18 -0
  255. package/dist/guest/vpn/openvpn.js +3 -4
  256. package/dist/guest/vpn/tunnel.d.ts +3 -0
  257. package/dist/guest/vpn/tunnel.js +10 -12
  258. package/dist/guest/vpn/vpn.js +6 -1
  259. package/dist/guest/vpn/wireguard.js +11 -4
  260. package/dist/host/accounts/deliver.js +7 -0
  261. package/dist/host/accounts/handoff.js +2 -6
  262. package/dist/host/accounts/index.d.ts +1 -1
  263. package/dist/host/accounts/index.js +1 -1
  264. package/dist/host/accounts/kinds/cfx.d.ts +1 -1
  265. package/dist/host/accounts/kinds/cfx.js +47 -4
  266. package/dist/host/accounts/kinds/comet.d.ts +2 -0
  267. package/dist/host/accounts/kinds/comet.js +6 -0
  268. package/dist/host/accounts/kinds/perplexity.d.ts +2 -0
  269. package/dist/host/accounts/kinds/perplexity.js +30 -0
  270. package/dist/host/accounts/leases.d.ts +9 -3
  271. package/dist/host/accounts/leases.js +13 -2
  272. package/dist/host/accounts/source.d.ts +7 -1
  273. package/dist/host/accounts/source.js +28 -1
  274. package/dist/host/accounts/sources.js +4 -0
  275. package/dist/host/agent-commands/commands.js +1 -1
  276. package/dist/host/agent-commands/forwarders.d.ts +14 -2
  277. package/dist/host/agent-commands/forwarders.js +31 -13
  278. package/dist/host/agent-commands/reconcile.d.ts +2 -1
  279. package/dist/host/agent-commands/reconcile.js +7 -8
  280. package/dist/host/agent-commands/user-path.d.ts +5 -0
  281. package/dist/host/agent-commands/user-path.js +13 -0
  282. package/dist/host/github/deliver.d.ts +1 -1
  283. package/dist/host/github/deliver.js +20 -1
  284. package/dist/host/github/index.d.ts +2 -1
  285. package/dist/host/github/index.js +1 -0
  286. package/dist/host/github/token.d.ts +13 -1
  287. package/dist/host/github/token.js +19 -2
  288. package/dist/host/github/verify.d.ts +27 -0
  289. package/dist/host/github/verify.js +61 -0
  290. package/dist/host/launch/hints/fivem.d.ts +3 -1
  291. package/dist/host/launch/hints/fivem.js +68 -2
  292. package/dist/host/launch/session-file.js +5 -0
  293. package/dist/host/launch/toolchains.d.ts +2 -1
  294. package/dist/host/launch/toolchains.js +5 -3
  295. package/dist/host/profile/accounts.js +2 -4
  296. package/dist/host/profile/claude-login.d.ts +3 -2
  297. package/dist/host/profile/claude-login.js +3 -13
  298. package/dist/host/vpn/index.d.ts +2 -1
  299. package/dist/host/vpn/index.js +2 -1
  300. package/dist/host/vpn/last.d.ts +28 -0
  301. package/dist/host/vpn/last.js +43 -0
  302. package/dist/host/vpn/login.d.ts +3 -1
  303. package/dist/host/vpn/login.js +17 -3
  304. package/dist/host/vpn/nordvpn.d.ts +2 -4
  305. package/dist/host/vpn/nordvpn.js +2 -24
  306. package/dist/runtime/agent.js +433 -90
  307. package/dist/runtime/daemon.js +3378 -1546
  308. package/dist/runtime/db.js +363 -90
  309. package/dist/runtime/main.js +5134 -2096
  310. package/dist/runtime/netproxy.js +308 -69
  311. package/dist/runtime/tool.js +2867 -1765
  312. package/dist/runtime/view.js +308 -69
  313. package/dist/selftest/agent-commands.test.js +45 -7
  314. package/dist/selftest/agent-paths.test.js +40 -13
  315. package/dist/selftest/agent-settings.test.d.ts +2 -0
  316. package/dist/selftest/agent-settings.test.js +94 -0
  317. package/dist/selftest/agents-web.test.d.ts +2 -0
  318. package/dist/selftest/agents-web.test.js +647 -0
  319. package/dist/selftest/app.test.js +7 -3
  320. package/dist/selftest/boot-runner.test.d.ts +2 -0
  321. package/dist/selftest/boot-runner.test.js +456 -0
  322. package/dist/selftest/channel.test.js +15 -0
  323. package/dist/selftest/cli.test.js +4 -0
  324. package/dist/selftest/fivem.test.js +249 -3
  325. package/dist/selftest/github.test.js +94 -9
  326. package/dist/selftest/guest-boot.test.js +3 -0
  327. package/dist/selftest/health.test.js +1 -1
  328. package/dist/selftest/index.js +10 -0
  329. package/dist/selftest/layout.test.js +5 -0
  330. package/dist/selftest/menu-coverage.test.d.ts +2 -0
  331. package/dist/selftest/menu-coverage.test.js +46 -0
  332. package/dist/selftest/menu-screens.js +37 -1
  333. package/dist/selftest/menu.test.js +5 -3
  334. package/dist/selftest/pc-installs.test.js +5 -0
  335. package/dist/selftest/persisted-installs.test.js +72 -0
  336. package/dist/selftest/service-accounts.test.js +3 -2
  337. package/dist/selftest/support/engine-golden.js +28 -1
  338. package/dist/selftest/support/fixtures.d.ts +15 -0
  339. package/dist/selftest/support/web-preview.d.ts +34 -1
  340. package/dist/selftest/support/web-preview.js +21 -18
  341. package/dist/selftest/toolchains.test.js +23 -1
  342. package/dist/selftest/ui-text.test.d.ts +7 -0
  343. package/dist/selftest/ui-text.test.js +300 -0
  344. package/dist/selftest/vpn.test.js +51 -3
  345. package/dist/shared/accounts/anthropic.d.ts +5 -0
  346. package/dist/shared/accounts/anthropic.js +15 -0
  347. package/dist/shared/accounts/index.d.ts +3 -0
  348. package/dist/shared/accounts/index.js +3 -0
  349. package/dist/shared/accounts/kinds/comet.d.ts +12 -0
  350. package/dist/shared/accounts/kinds/comet.js +64 -0
  351. package/dist/shared/accounts/kinds/perplexity.d.ts +8 -0
  352. package/dist/shared/accounts/kinds/perplexity.js +37 -0
  353. package/dist/shared/accounts/kinds.d.ts +24 -5
  354. package/dist/shared/accounts/kinds.js +86 -4
  355. package/dist/shared/accounts/payloads.d.ts +81 -0
  356. package/dist/shared/accounts/payloads.js +39 -1
  357. package/dist/shared/apps/agent-addons.d.ts +33 -5
  358. package/dist/shared/apps/agent-addons.js +95 -3
  359. package/dist/shared/apps/catalogue-agents-web.d.ts +14 -0
  360. package/dist/shared/apps/catalogue-agents-web.js +112 -0
  361. package/dist/shared/apps/catalogue-modding.js +32 -1
  362. package/dist/shared/apps/catalogue.d.ts +27 -3
  363. package/dist/shared/apps/catalogue.js +2 -1
  364. package/dist/shared/apps/index.d.ts +3 -1
  365. package/dist/shared/apps/index.js +3 -1
  366. package/dist/shared/channel/schema.d.ts +40 -3
  367. package/dist/shared/channel/schema.js +9 -0
  368. package/dist/shared/channel/secrets.d.ts +19 -0
  369. package/dist/shared/concurrency/index.d.ts +3 -0
  370. package/dist/shared/concurrency/index.js +3 -0
  371. package/dist/shared/concurrency/installer-retry.d.ts +6 -0
  372. package/dist/shared/concurrency/installer-retry.js +10 -0
  373. package/dist/shared/concurrency/limiter.d.ts +19 -0
  374. package/dist/shared/concurrency/limiter.js +67 -0
  375. package/dist/shared/concurrency/pools.d.ts +7 -0
  376. package/dist/shared/concurrency/pools.js +9 -0
  377. package/dist/shared/download/archive.d.ts +2 -0
  378. package/dist/shared/download/archive.js +11 -1
  379. package/dist/shared/download/bounded-fetch.d.ts +13 -0
  380. package/dist/shared/download/bounded-fetch.js +40 -0
  381. package/dist/shared/download/downloader.d.ts +5 -0
  382. package/dist/shared/download/downloader.js +50 -38
  383. package/dist/shared/download/index.d.ts +2 -1
  384. package/dist/shared/download/index.js +2 -1
  385. package/dist/shared/io/disk.d.ts +9 -0
  386. package/dist/shared/io/disk.js +19 -0
  387. package/dist/shared/io/index.d.ts +1 -0
  388. package/dist/shared/io/index.js +1 -0
  389. package/dist/shared/readiness.d.ts +9 -0
  390. package/dist/shared/readiness.js +11 -0
  391. package/dist/shared/signer.d.ts +24 -0
  392. package/dist/shared/signer.js +15 -0
  393. package/dist/shared/vpn/failure.d.ts +10 -0
  394. package/dist/shared/vpn/failure.js +28 -0
  395. package/dist/sync/watcher.js +2 -0
  396. package/dist/web/index.html +1 -1
  397. package/dist/web/{main-GVZWWP4I.js → main-CCILLX2M.js} +75 -74
  398. package/native/csharp/HcsHost/AssemblyInfo.cs +3 -3
  399. package/native/csharp/HostTools/AssemblyInfo.cs +3 -3
  400. package/native/csharp/HostTools/Program.cs +14 -1
  401. package/native/csharp/HostTools/UserPath.cs +17 -0
  402. package/native/csharp/StorageHelper/AssemblyInfo.cs +3 -3
  403. package/native/scripts/edit-user-path.ps1 +6 -2
  404. package/package.json +1 -1
  405. package/sandbox/addons/browser-use-mcp/requirements.in +1 -0
  406. package/sandbox/addons/browser-use-mcp/requirements.txt +2350 -0
  407. package/sandbox/addons/chrome-devtools-mcp/package-lock.json +38 -0
  408. package/sandbox/addons/chrome-devtools-mcp/package.json +7 -0
  409. package/sandbox/addons/comet-mcp/package-lock.json +1277 -0
  410. package/sandbox/addons/comet-mcp/package.json +7 -0
  411. package/sandbox/addons/perplexity-mcp/package-lock.json +1655 -0
  412. package/sandbox/addons/perplexity-mcp/package.json +7 -0
  413. package/sandbox/scripts/add-firewall-port.ps1 +18 -4
  414. package/sandbox/scripts/get-signature.ps1 +13 -0
  415. package/sandbox/scripts/set-machine-environment.ps1 +30 -15
  416. package/sandbox/templates/fivem/README.txt +6 -2
  417. package/sandbox/templates/fivem/cs/Client/Client.csproj +15 -0
  418. package/sandbox/templates/fivem/cs/Client/ClientMain.cs +20 -0
  419. package/sandbox/templates/fivem/cs/Server/Server.csproj +14 -0
  420. package/sandbox/templates/fivem/cs/Server/ServerMain.cs +20 -0
  421. package/sandbox/templates/fivem/cs/fxmanifest.lua +11 -0
  422. package/sandbox/templates/fivem/js/client.js +12 -0
  423. package/sandbox/templates/fivem/js/fxmanifest.lua +9 -0
  424. package/sandbox/templates/fivem/js/server.js +6 -0
  425. package/sandbox/templates/fivem/lua/client.lua +8 -0
  426. package/sandbox/templates/fivem/lua/fxmanifest.lua +10 -0
  427. package/sandbox/templates/fivem/lua/server.lua +6 -0
  428. package/sandbox/templates/fivem/server.cfg +37 -0
  429. package/sandbox/templates/fivem/ts/build.js +17 -0
  430. package/sandbox/templates/fivem/ts/fxmanifest.lua +9 -0
  431. package/sandbox/templates/fivem/ts/package.json +16 -0
  432. package/sandbox/templates/fivem/ts/src/client/client.ts +12 -0
  433. package/sandbox/templates/fivem/ts/src/client/tsconfig.json +13 -0
  434. package/sandbox/templates/fivem/ts/src/server/server.ts +6 -0
  435. package/sandbox/templates/fivem/ts/src/server/tsconfig.json +13 -0
  436. package/schemas/config.schema.json +120 -27
  437. package/schemas/sandbox-config.schema.json +45 -14
  438. package/sandbox/scripts/get-signer.ps1 +0 -8
@@ -0,0 +1,252 @@
1
+ import type { BootTaskDef } from './runner.js';
2
+ export declare const STAGES = 9;
3
+ /** The titles of the nine stages (the host shows the short form without the brackets). */
4
+ export declare function stageTitle(stage: number, who?: {
5
+ vpnServer?: string;
6
+ agent?: string;
7
+ }): string;
8
+ /** The boot state the tasks share. */
9
+ export type BootStateKey = 'ptyHost' | 'lan' | 'tools' | 'dbBin' | 'allowSummary' | 'vscodeSummary' | 'env' | 'toolVars' | 'summary' | 'headroom' | 'later';
10
+ export interface BootTaskInfo {
11
+ readonly writes: readonly BootStateKey[];
12
+ readonly reads: readonly BootStateKey[];
13
+ }
14
+ export declare const BOOT_TASKS: readonly [{
15
+ readonly id: "ptyhost";
16
+ readonly stage: 1;
17
+ readonly title: "Session host";
18
+ readonly after: readonly [];
19
+ readonly critical: false;
20
+ readonly writes: readonly ["ptyHost"];
21
+ readonly reads: readonly [];
22
+ }, {
23
+ readonly id: "network";
24
+ readonly stage: 1;
25
+ readonly title: "Private-network blocking";
26
+ readonly after: readonly ["ptyhost"];
27
+ readonly critical: false;
28
+ readonly writes: readonly ["lan"];
29
+ readonly reads: readonly ["ptyHost"];
30
+ }, {
31
+ readonly id: "audit";
32
+ readonly stage: 1;
33
+ readonly title: "Process audit";
34
+ readonly after: readonly [];
35
+ readonly critical: false;
36
+ readonly writes: readonly [];
37
+ readonly reads: readonly [];
38
+ }, {
39
+ readonly id: "hooksPreProvision";
40
+ readonly stage: 2;
41
+ readonly title: "Pre-provision hooks";
42
+ readonly after: readonly ["network"];
43
+ readonly critical: true;
44
+ readonly writes: readonly [];
45
+ readonly reads: readonly [];
46
+ }, {
47
+ readonly id: "desktop";
48
+ readonly stage: 2;
49
+ readonly title: "Personalisation";
50
+ readonly after: readonly [];
51
+ readonly critical: false;
52
+ readonly writes: readonly [];
53
+ readonly reads: readonly [];
54
+ }, {
55
+ readonly id: "browserGpu";
56
+ readonly stage: 2;
57
+ readonly title: "Browsers without the GPU";
58
+ readonly after: readonly [];
59
+ readonly critical: false;
60
+ readonly writes: readonly [];
61
+ readonly reads: readonly [];
62
+ }, {
63
+ readonly id: "toolchains";
64
+ readonly stage: 3;
65
+ readonly title: "Developer tools";
66
+ readonly after: readonly ["network", "hooksPreProvision"];
67
+ readonly critical: true;
68
+ readonly writes: readonly ["tools"];
69
+ readonly reads: readonly [];
70
+ }, {
71
+ readonly id: "dbCommands";
72
+ readonly stage: 3;
73
+ readonly title: "Tool commands";
74
+ readonly after: readonly [];
75
+ readonly critical: true;
76
+ readonly writes: readonly ["dbBin"];
77
+ readonly reads: readonly [];
78
+ }, {
79
+ readonly id: "allowOnly";
80
+ readonly stage: 3;
81
+ readonly title: "Network: allow only some hosts";
82
+ readonly after: readonly ["toolchains"];
83
+ readonly critical: false;
84
+ readonly writes: readonly ["allowSummary"];
85
+ readonly reads: readonly [];
86
+ }, {
87
+ readonly id: "vscode";
88
+ readonly stage: 3;
89
+ readonly title: "VS Code setup";
90
+ readonly after: readonly ["toolchains", "allowOnly"];
91
+ readonly critical: false;
92
+ readonly writes: readonly ["vscodeSummary"];
93
+ readonly reads: readonly ["tools"];
94
+ }, {
95
+ readonly id: "env";
96
+ readonly stage: 3;
97
+ readonly title: "Environment";
98
+ readonly after: readonly ["toolchains", "dbCommands", "allowOnly"];
99
+ readonly critical: true;
100
+ readonly writes: readonly ["env", "toolVars"];
101
+ readonly reads: readonly ["tools", "dbBin"];
102
+ }, {
103
+ readonly id: "bootEnv";
104
+ readonly stage: 3;
105
+ readonly title: "Boot summary files";
106
+ readonly after: readonly ["env", "vscode"];
107
+ readonly critical: false;
108
+ readonly writes: readonly ["summary"];
109
+ readonly reads: readonly ["tools", "toolVars", "lan", "allowSummary", "vscodeSummary"];
110
+ }, {
111
+ readonly id: "vpn";
112
+ readonly stage: 4;
113
+ readonly title: "VPN";
114
+ readonly after: readonly ["toolchains", "allowOnly", "ptyhost"];
115
+ readonly critical: false;
116
+ readonly writes: readonly [];
117
+ readonly reads: readonly ["ptyHost"];
118
+ }, {
119
+ readonly id: "gitConfig";
120
+ readonly stage: 5;
121
+ readonly title: "Git config";
122
+ readonly after: readonly ["env"];
123
+ readonly critical: false;
124
+ readonly writes: readonly [];
125
+ readonly reads: readonly ["env"];
126
+ }, {
127
+ readonly id: "githubLogin";
128
+ readonly stage: 5;
129
+ readonly title: "GitHub token";
130
+ readonly after: readonly ["vpn", "gitConfig"];
131
+ readonly critical: false;
132
+ readonly writes: readonly [];
133
+ readonly reads: readonly ["env"];
134
+ }, {
135
+ readonly id: "claudeProfile";
136
+ readonly stage: 6;
137
+ readonly title: "Claude settings";
138
+ readonly after: readonly [];
139
+ readonly critical: false;
140
+ readonly writes: readonly [];
141
+ readonly reads: readonly [];
142
+ }, {
143
+ readonly id: "claudeMem";
144
+ readonly stage: 6;
145
+ readonly title: "claude-mem restore";
146
+ readonly after: readonly [];
147
+ readonly critical: false;
148
+ readonly writes: readonly [];
149
+ readonly reads: readonly [];
150
+ }, {
151
+ readonly id: "agentState";
152
+ readonly stage: 6;
153
+ readonly title: "Agent state";
154
+ readonly after: readonly [];
155
+ readonly critical: false;
156
+ readonly writes: readonly [];
157
+ readonly reads: readonly [];
158
+ }, {
159
+ readonly id: "headroomSpawn";
160
+ readonly stage: 6;
161
+ readonly title: "Headroom start";
162
+ readonly after: readonly ["network"];
163
+ readonly critical: false;
164
+ readonly writes: readonly [];
165
+ readonly reads: readonly [];
166
+ }, {
167
+ readonly id: "mcpServers";
168
+ readonly stage: 6;
169
+ readonly title: "MCP servers from Apps";
170
+ readonly after: readonly ["toolchains", "claudeProfile"];
171
+ readonly critical: false;
172
+ readonly writes: readonly [];
173
+ readonly reads: readonly [];
174
+ }, {
175
+ readonly id: "headroomReady";
176
+ readonly stage: 6;
177
+ readonly title: "Headroom proxy";
178
+ readonly after: readonly ["headroomSpawn", "toolchains"];
179
+ readonly critical: false;
180
+ readonly writes: readonly ["headroom"];
181
+ readonly reads: readonly [];
182
+ }, {
183
+ readonly id: "managedSettings";
184
+ readonly stage: 6;
185
+ readonly title: "Claude managed settings";
186
+ readonly after: readonly ["headroomReady", "toolchains"];
187
+ readonly critical: false;
188
+ readonly writes: readonly [];
189
+ readonly reads: readonly ["headroom"];
190
+ }, {
191
+ readonly id: "guide";
192
+ readonly stage: 6;
193
+ readonly title: "Sandbox guide for the agent";
194
+ readonly after: readonly ["bootEnv", "managedSettings", "mcpServers", "network", "vscode"];
195
+ readonly critical: false;
196
+ readonly writes: readonly [];
197
+ readonly reads: readonly ["summary", "lan"];
198
+ }, {
199
+ readonly id: "profileLinks";
200
+ readonly stage: 7;
201
+ readonly title: "Agent logins";
202
+ readonly after: readonly ["agentState"];
203
+ readonly critical: true;
204
+ readonly writes: readonly [];
205
+ readonly reads: readonly [];
206
+ }, {
207
+ readonly id: "agentProvision";
208
+ readonly stage: 7;
209
+ readonly title: "Agent install";
210
+ readonly after: readonly ["env", "vpn", "profileLinks"];
211
+ readonly critical: true;
212
+ readonly writes: readonly [];
213
+ readonly reads: readonly ["env"];
214
+ }, {
215
+ readonly id: "hooksPreAgent";
216
+ readonly stage: 8;
217
+ readonly title: "Pre-agent hooks";
218
+ readonly after: readonly ["ptyhost", "network", "audit", "hooksPreProvision", "desktop", "browserGpu", "toolchains", "dbCommands", "allowOnly", "vscode", "env", "bootEnv", "vpn", "gitConfig", "githubLogin", "claudeProfile", "claudeMem", "agentState", "headroomSpawn", "mcpServers", "headroomReady", "managedSettings", "guide", "profileLinks", "agentProvision"];
219
+ readonly critical: true;
220
+ readonly exclusive: true;
221
+ readonly writes: readonly [];
222
+ readonly reads: readonly ["env"];
223
+ }, {
224
+ readonly id: "session";
225
+ readonly stage: 9;
226
+ readonly title: "Session";
227
+ readonly after: readonly ["hooksPreAgent"];
228
+ readonly critical: true;
229
+ readonly writes: readonly [];
230
+ readonly reads: readonly ["env"];
231
+ }, {
232
+ readonly id: "toolchainsLater";
233
+ readonly stage: 3;
234
+ readonly title: "Visual Studio and what needs it";
235
+ readonly after: readonly ["session"];
236
+ readonly critical: false;
237
+ readonly background: true;
238
+ readonly writes: readonly ["later"];
239
+ readonly reads: readonly ["tools", "env", "toolVars", "lan"];
240
+ }, {
241
+ readonly id: "prune";
242
+ readonly stage: 3;
243
+ readonly title: "Cleaning old tool builds";
244
+ readonly after: readonly ["session"];
245
+ readonly critical: false;
246
+ readonly background: true;
247
+ readonly writes: readonly [];
248
+ readonly reads: readonly [];
249
+ }];
250
+ export type BootTaskId = (typeof BOOT_TASKS)[number]['id'];
251
+ /** The graph as the runner takes it (mutable arrays, ids widened). */
252
+ export declare const BOOT_DEFS: readonly BootTaskDef<BootTaskId>[];
@@ -0,0 +1,257 @@
1
+ export const STAGES = 9;
2
+ /** The titles of the nine stages (the host shows the short form without the brackets). */
3
+ export function stageTitle(stage, who = {}) {
4
+ switch (stage) {
5
+ case 1:
6
+ return 'Network and session host';
7
+ case 2:
8
+ return 'Pre-provision hooks and desktop';
9
+ case 3:
10
+ return 'Developer tools (the first start downloads them once; later starts are quick)';
11
+ case 4:
12
+ return who.vpnServer ? 'VPN (' + who.vpnServer + ')' : 'VPN (off)';
13
+ case 5:
14
+ return 'Git identity';
15
+ case 6:
16
+ return 'Claude settings, history and claude-mem';
17
+ case 7:
18
+ return 'Agent: ' + (who.agent ?? 'none');
19
+ case 8:
20
+ return 'Pre-agent hooks';
21
+ default:
22
+ return 'Starting ' + (who.agent ?? 'the agent');
23
+ }
24
+ }
25
+ export const BOOT_TASKS = [
26
+ // Stage 1 - network and session host
27
+ { id: 'ptyhost', stage: 1, title: 'Session host', after: [], critical: false, writes: ['ptyHost'], reads: [] },
28
+ {
29
+ id: 'network',
30
+ stage: 1,
31
+ title: 'Private-network blocking',
32
+ after: ['ptyhost'],
33
+ critical: false,
34
+ writes: ['lan'],
35
+ reads: ['ptyHost'],
36
+ },
37
+ { id: 'audit', stage: 1, title: 'Process audit', after: [], critical: false, writes: [], reads: [] },
38
+ // Stage 2 - pre-provision hooks and desktop
39
+ {
40
+ id: 'hooksPreProvision',
41
+ stage: 2,
42
+ title: 'Pre-provision hooks',
43
+ after: ['network'],
44
+ critical: true,
45
+ writes: [],
46
+ reads: [],
47
+ },
48
+ { id: 'desktop', stage: 2, title: 'Personalisation', after: [], critical: false, writes: [], reads: [] },
49
+ { id: 'browserGpu', stage: 2, title: 'Browsers without the GPU', after: [], critical: false, writes: [], reads: [] },
50
+ // Stage 3 - developer tools
51
+ {
52
+ id: 'toolchains',
53
+ stage: 3,
54
+ title: 'Developer tools',
55
+ after: ['network', 'hooksPreProvision'],
56
+ critical: true,
57
+ writes: ['tools'],
58
+ reads: [],
59
+ },
60
+ { id: 'dbCommands', stage: 3, title: 'Tool commands', after: [], critical: true, writes: ['dbBin'], reads: [] },
61
+ {
62
+ id: 'allowOnly',
63
+ stage: 3,
64
+ title: 'Network: allow only some hosts',
65
+ after: ['toolchains'],
66
+ critical: false,
67
+ writes: ['allowSummary'],
68
+ reads: [],
69
+ },
70
+ {
71
+ id: 'vscode',
72
+ stage: 3,
73
+ title: 'VS Code setup',
74
+ after: ['toolchains', 'allowOnly'],
75
+ critical: false,
76
+ writes: ['vscodeSummary'],
77
+ reads: ['tools'],
78
+ },
79
+ {
80
+ id: 'env',
81
+ stage: 3,
82
+ title: 'Environment',
83
+ after: ['toolchains', 'dbCommands', 'allowOnly'],
84
+ critical: true,
85
+ writes: ['env', 'toolVars'],
86
+ reads: ['tools', 'dbBin'],
87
+ },
88
+ {
89
+ id: 'bootEnv',
90
+ stage: 3,
91
+ title: 'Boot summary files',
92
+ after: ['env', 'vscode'],
93
+ critical: false,
94
+ writes: ['summary'],
95
+ reads: ['tools', 'toolVars', 'lan', 'allowSummary', 'vscodeSummary'],
96
+ },
97
+ // Stage 4 - VPN
98
+ {
99
+ id: 'vpn',
100
+ stage: 4,
101
+ title: 'VPN',
102
+ after: ['toolchains', 'allowOnly', 'ptyhost'],
103
+ critical: false,
104
+ writes: [],
105
+ reads: ['ptyHost'],
106
+ },
107
+ // Stage 5 - git
108
+ {
109
+ id: 'gitConfig',
110
+ stage: 5,
111
+ title: 'Git config',
112
+ after: ['env'],
113
+ critical: false,
114
+ writes: [],
115
+ reads: ['env'],
116
+ },
117
+ {
118
+ id: 'githubLogin',
119
+ stage: 5,
120
+ title: 'GitHub token',
121
+ after: ['vpn', 'gitConfig'],
122
+ critical: false,
123
+ writes: [],
124
+ reads: ['env'],
125
+ },
126
+ // Stage 6 - Claude settings
127
+ { id: 'claudeProfile', stage: 6, title: 'Claude settings', after: [], critical: false, writes: [], reads: [] },
128
+ { id: 'claudeMem', stage: 6, title: 'claude-mem restore', after: [], critical: false, writes: [], reads: [] },
129
+ { id: 'agentState', stage: 6, title: 'Agent state', after: [], critical: false, writes: [], reads: [] },
130
+ {
131
+ id: 'headroomSpawn',
132
+ stage: 6,
133
+ title: 'Headroom start',
134
+ after: ['network'],
135
+ critical: false,
136
+ writes: [],
137
+ reads: [],
138
+ },
139
+ {
140
+ id: 'mcpServers',
141
+ stage: 6,
142
+ title: 'MCP servers from Apps',
143
+ after: ['toolchains', 'claudeProfile'],
144
+ critical: false,
145
+ writes: [],
146
+ reads: [],
147
+ },
148
+ {
149
+ id: 'headroomReady',
150
+ stage: 6,
151
+ title: 'Headroom proxy',
152
+ after: ['headroomSpawn', 'toolchains'],
153
+ critical: false,
154
+ writes: ['headroom'],
155
+ reads: [],
156
+ },
157
+ {
158
+ id: 'managedSettings',
159
+ stage: 6,
160
+ title: 'Claude managed settings',
161
+ after: ['headroomReady', 'toolchains'],
162
+ critical: false,
163
+ writes: [],
164
+ reads: ['headroom'],
165
+ },
166
+ {
167
+ id: 'guide',
168
+ stage: 6,
169
+ title: 'Sandbox guide for the agent',
170
+ after: ['bootEnv', 'managedSettings', 'mcpServers', 'network', 'vscode'],
171
+ critical: false,
172
+ writes: [],
173
+ reads: ['summary', 'lan'],
174
+ },
175
+ // Stage 7 - agent
176
+ // After the agent state is restored (both work in the persistent state folders).
177
+ { id: 'profileLinks', stage: 7, title: 'Agent logins', after: ['agentState'], critical: true, writes: [], reads: [] },
178
+ {
179
+ id: 'agentProvision',
180
+ stage: 7,
181
+ title: 'Agent install',
182
+ after: ['env', 'vpn', 'profileLinks'],
183
+ critical: true,
184
+ writes: [],
185
+ reads: ['env'],
186
+ },
187
+ // Stage 8 - pre-agent hooks: after every foreground task (the hooks inherit the terminal)
188
+ {
189
+ id: 'hooksPreAgent',
190
+ stage: 8,
191
+ title: 'Pre-agent hooks',
192
+ after: [
193
+ 'ptyhost',
194
+ 'network',
195
+ 'audit',
196
+ 'hooksPreProvision',
197
+ 'desktop',
198
+ 'browserGpu',
199
+ 'toolchains',
200
+ 'dbCommands',
201
+ 'allowOnly',
202
+ 'vscode',
203
+ 'env',
204
+ 'bootEnv',
205
+ 'vpn',
206
+ 'gitConfig',
207
+ 'githubLogin',
208
+ 'claudeProfile',
209
+ 'claudeMem',
210
+ 'agentState',
211
+ 'headroomSpawn',
212
+ 'mcpServers',
213
+ 'headroomReady',
214
+ 'managedSettings',
215
+ 'guide',
216
+ 'profileLinks',
217
+ 'agentProvision',
218
+ ],
219
+ critical: true,
220
+ exclusive: true,
221
+ writes: [],
222
+ reads: ['env'],
223
+ },
224
+ // Stage 9 - start
225
+ {
226
+ id: 'session',
227
+ stage: 9,
228
+ title: 'Session',
229
+ after: ['hooksPreAgent'],
230
+ critical: true,
231
+ writes: [],
232
+ reads: ['env'],
233
+ },
234
+ // Background: after the first session runs
235
+ {
236
+ id: 'toolchainsLater',
237
+ stage: 3,
238
+ title: 'Visual Studio and what needs it',
239
+ after: ['session'],
240
+ critical: false,
241
+ background: true,
242
+ writes: ['later'],
243
+ reads: ['tools', 'env', 'toolVars', 'lan'],
244
+ },
245
+ {
246
+ id: 'prune',
247
+ stage: 3,
248
+ title: 'Cleaning old tool builds',
249
+ after: ['session'],
250
+ critical: false,
251
+ background: true,
252
+ writes: [],
253
+ reads: [],
254
+ },
255
+ ];
256
+ /** The graph as the runner takes it (mutable arrays, ids widened). */
257
+ export const BOOT_DEFS = BOOT_TASKS;
@@ -0,0 +1,25 @@
1
+ /** A folder mapped from the PC at boot for other projects (a project root, or a single project). */
2
+ export interface MappedFolder {
3
+ readonly host: string;
4
+ readonly guest: string;
5
+ /** A project root: every folder in it is a project of this sandbox. */
6
+ readonly root?: boolean;
7
+ }
8
+ /** A project registered after boot, with the tools it got. */
9
+ export interface GuideProject {
10
+ guest: string;
11
+ host: string;
12
+ name?: string;
13
+ tools?: readonly string[];
14
+ }
15
+ /**
16
+ * Where the agent can write and what persists: the launch folder, then every mapped project root as `<guest>\*` = host
17
+ * `<host>\*` (any folder in it is a project, yours or another agent's) and every project mapped at boot, then the
18
+ * projects registered since.
19
+ */
20
+ export declare function projectFolderLines(workspace: string, workspaceHost: string, mapped: readonly MappedFolder[], projects: readonly GuideProject[]): string[];
21
+ /**
22
+ * The tools: one line for the launch folder's project; with other projects in the sandbox each line names its project
23
+ * (a project that has not been set up yet is not listed: its tools are decided from its own files).
24
+ */
25
+ export declare function toolLines(primaryName: string, toolSummary: readonly string[], projects: readonly GuideProject[]): string[];
@@ -0,0 +1,41 @@
1
+ // The folder and tool lines of the sandbox guide. Pure (no guest state), so the self-test can import it.
2
+ import path from 'node:path';
3
+ const within = (parent, child) => {
4
+ const rel = path.win32.relative(parent.toLowerCase(), child.toLowerCase());
5
+ return rel === '' || (!rel.startsWith('..') && !path.win32.isAbsolute(rel));
6
+ };
7
+ /**
8
+ * Where the agent can write and what persists: the launch folder, then every mapped project root as `<guest>\*` = host
9
+ * `<host>\*` (any folder in it is a project, yours or another agent's) and every project mapped at boot, then the
10
+ * projects registered since.
11
+ */
12
+ export function projectFolderLines(workspace, workspaceHost, mapped, projects) {
13
+ const roots = mapped.filter((m) => m.root);
14
+ const insideRoot = roots.some((r) => within(r.guest, workspace));
15
+ const line = (guest, host, note = '') => '- RW, persists: `' + guest + '` = host folder ' + host + note;
16
+ return [
17
+ ...(insideRoot ? [] : [line(workspace, workspaceHost)]),
18
+ ...roots.map((r) => line(path.win32.join(r.guest, '*'), path.win32.join(r.host, '*'), ' (project root: every project in it persists, your own is `%AGENT_WORKSPACE%`)')),
19
+ ...mapped
20
+ .filter((m) => !m.root && !within(workspace, m.guest) && !roots.some((r) => within(r.guest, m.guest)))
21
+ .map((m) => line(m.guest, m.host, ' (another project in this sandbox)')),
22
+ // Projects started from other folders while this sandbox runs: every agent here can see them.
23
+ ...projects
24
+ .filter((p) => !roots.some((r) => within(r.guest, p.guest)) && !within(workspace, p.guest))
25
+ .map((p) => line(p.guest, p.host, ' (another project in this sandbox; your own is `%AGENT_WORKSPACE%`)')),
26
+ ];
27
+ }
28
+ /**
29
+ * The tools: one line for the launch folder's project; with other projects in the sandbox each line names its project
30
+ * (a project that has not been set up yet is not listed: its tools are decided from its own files).
31
+ */
32
+ export function toolLines(primaryName, toolSummary, projects) {
33
+ const others = projects.filter((p) => p.tools?.length && p.name && p.name !== primaryName);
34
+ if (!others.length)
35
+ return ['- Tools: ' + toolSummary.join(' · ')];
36
+ return [
37
+ '- Tools (' + primaryName + '): ' + toolSummary.join(' · '),
38
+ ...others.map((p) => '- Tools (' + p.name + '): ' + p.tools.join(' · ')),
39
+ "- Tools by project: each project gets the tools its own files ask for; python and rust already installed here are on every project's PATH.",
40
+ ];
41
+ }
@@ -1,8 +1,5 @@
1
+ import { type GuideProject } from './guide-lines.js';
1
2
  /** Deliberately tiny: it is loaded into every conversation. */
2
- export interface GuideProject {
3
- guest: string;
4
- host: string;
5
- }
6
3
  export declare function sandboxGuide(toolSummary: string[], lan?: 'blocked' | 'open' | 'offline', projects?: GuideProject[], addons?: string[]): string;
7
4
  /** Inserts or replaces the generated section, keeping whatever else the file contains (the host's CLAUDE.md). */
8
5
  export declare function upsertGuide(file: string, guide: string): void;
@@ -6,6 +6,7 @@ import { claudeDir, session, stateDir, workspace } from '../runtime/session.js';
6
6
  import { dataDir, launchDir, logsDir, toolsDir } from '../runtime/paths.js';
7
7
  import { addonGuideLine, APPS, headroomGuideLine, RTK_GUIDE_LINE } from '../../shared/apps/index.js';
8
8
  import { installedAddon, installedRtk } from '../setup/agent-addons.js';
9
+ import { projectFolderLines, toolLines } from './guide-lines.js';
9
10
  const BEGIN = '<!-- agent-sandbox:begin (generated every boot, do not edit) -->';
10
11
  const END = '<!-- agent-sandbox:end -->';
11
12
  /** Drives other than C: are subst drives onto C:\Mirror\<letter> (mapped folders shown at their PC paths). */
@@ -22,18 +23,15 @@ const mirrorLine = () => {
22
23
  '`; real-path tools may print that form).',
23
24
  ];
24
25
  };
26
+ /** Folders mapped for other projects at boot; launch folders from before mappedProjects only list the guest side. */
27
+ const mappedFolders = () => session.mappedProjects ?? (session.roots ?? []).map((guest) => ({ host: 'a folder on the PC', guest }));
28
+ /** Deliberately tiny: it is loaded into every conversation. */
25
29
  export function sandboxGuide(toolSummary, lan = 'blocked', projects = [], addons = []) {
26
30
  return [
27
31
  BEGIN,
28
32
  '## Sandbox manifest — you are in a DISPOSABLE Windows Sandbox',
29
33
  'Wiped on close: everything except the paths below (installers, winget/choco, C:\\Users, Program Files, registry).',
30
- '- RW, persists: `' + workspace + '` = host folder ' + session.workspaceHost,
31
- // Projects started from other folders while this sandbox runs: every agent here can see them.
32
- ...projects.map((p) => '- RW, persists: `' +
33
- p.guest +
34
- '` = host folder ' +
35
- p.host +
36
- ' (another project in this sandbox; your own is `%AGENT_WORKSPACE%`)'),
34
+ ...projectFolderLines(workspace, session.workspaceHost, mappedFolders(), projects),
37
35
  '- RW, persists: `' +
38
36
  toolsDir +
39
37
  '` (toolchains) — put portable exes in `' +
@@ -46,7 +44,7 @@ export function sandboxGuide(toolSummary, lan = 'blocked', projects = [], addons
46
44
  '`',
47
45
  '- RO: `' + launchDir + "` (this boot's scripts) · lost on close: everything else, incl. `C:\\nvm` (Node symlink)",
48
46
  ...mirrorLine(),
49
- '- Tools: ' + toolSummary.join(' · '),
47
+ ...toolLines(session.project, toolSummary, projects),
50
48
  // Agent add-ons that change how the agent works (rtk, Headroom, MCP servers, ccusage).
51
49
  ...addons,
52
50
  '- Persistent installs: `npm i -g` (per nvm version), `pip`, `cargo install`, `dotnet tool -g`, `uv tool`, `bun add -g`. Real installers must re-run each boot via a hook (ask the user).',