windows-development-sandbox 1.4.1 → 1.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (872) hide show
  1. package/config.example.json +3 -1
  2. package/dist/api.js +27 -16
  3. package/dist/cli/args.d.ts +4 -6
  4. package/dist/cli/args.js +67 -34
  5. package/dist/cli/argv.d.ts +9 -0
  6. package/dist/cli/argv.js +22 -0
  7. package/dist/cli/commands/accounts.d.ts +1 -1
  8. package/dist/cli/commands/accounts.js +42 -27
  9. package/dist/cli/commands/agent-commands.d.ts +3 -3
  10. package/dist/cli/commands/agent-commands.js +27 -18
  11. package/dist/cli/commands/context.d.ts +9 -11
  12. package/dist/cli/commands/context.js +35 -32
  13. package/dist/cli/commands/data/clean.d.ts +2 -2
  14. package/dist/cli/commands/data/clean.js +27 -11
  15. package/dist/cli/commands/data/collect.d.ts +6 -3
  16. package/dist/cli/commands/data/collect.js +46 -15
  17. package/dist/cli/commands/data/index.d.ts +2 -2
  18. package/dist/cli/commands/data/index.js +30 -12
  19. package/dist/cli/commands/data/remove.d.ts +1 -1
  20. package/dist/cli/commands/data/remove.js +4 -4
  21. package/dist/cli/commands/index.d.ts +5 -4
  22. package/dist/cli/commands/index.js +5 -4
  23. package/dist/cli/commands/launch/add-root.d.ts +7 -0
  24. package/dist/cli/commands/launch/add-root.js +64 -0
  25. package/dist/cli/commands/launch/boot-progress.d.ts +7 -0
  26. package/dist/cli/commands/launch/boot-progress.js +48 -0
  27. package/dist/cli/commands/launch/boot-wants.d.ts +11 -0
  28. package/dist/cli/commands/launch/boot-wants.js +48 -0
  29. package/dist/cli/commands/launch/first-start.d.ts +10 -0
  30. package/dist/cli/commands/launch/first-start.js +53 -0
  31. package/dist/cli/commands/launch/index.d.ts +6 -0
  32. package/dist/cli/commands/launch/index.js +6 -0
  33. package/dist/cli/commands/launch/launch.d.ts +8 -0
  34. package/dist/cli/commands/launch/launch.js +211 -0
  35. package/dist/cli/commands/launch/prepare.d.ts +23 -0
  36. package/dist/cli/commands/launch/prepare.js +109 -0
  37. package/dist/cli/commands/launch/running.d.ts +45 -0
  38. package/dist/cli/commands/launch/running.js +218 -0
  39. package/dist/cli/commands/launch/summary.d.ts +8 -0
  40. package/dist/cli/commands/launch/summary.js +98 -0
  41. package/dist/cli/commands/maintenance/audit.d.ts +3 -0
  42. package/dist/cli/commands/maintenance/audit.js +58 -0
  43. package/dist/cli/commands/maintenance/clean.d.ts +2 -0
  44. package/dist/cli/commands/maintenance/clean.js +10 -0
  45. package/dist/cli/commands/maintenance/config.d.ts +2 -0
  46. package/dist/cli/commands/maintenance/config.js +145 -0
  47. package/dist/cli/commands/maintenance/doctor.d.ts +2 -0
  48. package/dist/cli/commands/maintenance/doctor.js +52 -0
  49. package/dist/cli/commands/maintenance/host-claude.d.ts +2 -0
  50. package/dist/cli/commands/maintenance/host-claude.js +4 -0
  51. package/dist/cli/commands/maintenance/index.d.ts +8 -0
  52. package/dist/cli/commands/maintenance/index.js +9 -0
  53. package/dist/cli/commands/maintenance/logs.d.ts +2 -0
  54. package/dist/cli/commands/maintenance/logs.js +44 -0
  55. package/dist/cli/commands/maintenance/sync.d.ts +2 -0
  56. package/dist/cli/commands/maintenance/sync.js +12 -0
  57. package/dist/cli/commands/maintenance/watch.d.ts +3 -0
  58. package/dist/cli/commands/maintenance/watch.js +6 -0
  59. package/dist/cli/commands/projects/describe-sessions.d.ts +3 -0
  60. package/dist/cli/commands/projects/describe-sessions.js +15 -0
  61. package/dist/cli/commands/projects/here.d.ts +38 -0
  62. package/dist/cli/commands/projects/here.js +145 -0
  63. package/dist/cli/commands/projects/index.d.ts +4 -0
  64. package/dist/cli/commands/projects/index.js +4 -0
  65. package/dist/cli/commands/projects/projects.d.ts +14 -0
  66. package/dist/cli/commands/projects/projects.js +213 -0
  67. package/dist/cli/commands/projects/restart.d.ts +15 -0
  68. package/dist/cli/commands/projects/restart.js +149 -0
  69. package/dist/cli/commands/registry.d.ts +3 -0
  70. package/dist/cli/commands/registry.js +34 -0
  71. package/dist/cli/commands/repair/checks.js +105 -29
  72. package/dist/cli/commands/repair/finders.d.ts +13 -10
  73. package/dist/cli/commands/repair/finders.js +63 -43
  74. package/dist/cli/commands/repair/index.d.ts +4 -4
  75. package/dist/cli/commands/repair/index.js +47 -21
  76. package/dist/cli/commands/repair/types.d.ts +2 -2
  77. package/dist/cli/commands/repair/types.js +7 -2
  78. package/dist/cli/commands/sessions/attach.d.ts +2 -0
  79. package/dist/cli/commands/sessions/attach.js +45 -0
  80. package/dist/cli/commands/sessions/control.d.ts +4 -0
  81. package/dist/cli/commands/sessions/control.js +62 -0
  82. package/dist/cli/commands/sessions/exec.d.ts +6 -0
  83. package/dist/cli/commands/sessions/exec.js +72 -0
  84. package/dist/cli/commands/sessions/index.d.ts +6 -0
  85. package/dist/cli/commands/sessions/index.js +9 -0
  86. package/dist/cli/commands/sessions/list.d.ts +15 -0
  87. package/dist/cli/commands/sessions/list.js +65 -0
  88. package/dist/cli/commands/sessions/status.d.ts +2 -0
  89. package/dist/cli/commands/sessions/status.js +153 -0
  90. package/dist/cli/commands/sessions/window.d.ts +3 -0
  91. package/dist/cli/commands/sessions/window.js +18 -0
  92. package/dist/cli/commands/setup/checks.d.ts +4 -4
  93. package/dist/cli/commands/setup/checks.js +36 -19
  94. package/dist/cli/commands/setup/facts.d.ts +6 -6
  95. package/dist/cli/commands/setup/facts.js +23 -11
  96. package/dist/cli/commands/setup/index.d.ts +1 -1
  97. package/dist/cli/commands/setup/index.js +25 -12
  98. package/dist/cli/commands/user-config.d.ts +5 -5
  99. package/dist/cli/commands/user-config.js +14 -12
  100. package/dist/cli/history.d.ts +5 -4
  101. package/dist/cli/history.js +23 -11
  102. package/dist/cli/index.d.ts +4 -14
  103. package/dist/cli/index.js +27 -77
  104. package/dist/cli/manifest.d.ts +464 -10
  105. package/dist/cli/manifest.js +327 -53
  106. package/dist/cli/menu/apps.d.ts +7 -5
  107. package/dist/cli/menu/apps.js +64 -16
  108. package/dist/cli/menu/command-fields.d.ts +15 -0
  109. package/dist/cli/menu/command-fields.js +23 -0
  110. package/dist/cli/menu/command-form.d.ts +3 -5
  111. package/dist/cli/menu/command-form.js +116 -48
  112. package/dist/cli/menu/home.d.ts +22 -0
  113. package/dist/cli/menu/home.js +72 -0
  114. package/dist/cli/menu/index.d.ts +2 -24
  115. package/dist/cli/menu/index.js +4 -178
  116. package/dist/cli/menu/menu.d.ts +23 -0
  117. package/dist/cli/menu/menu.js +185 -0
  118. package/dist/cli/menu/settings/categories.d.ts +2 -2
  119. package/dist/cli/menu/settings/categories.js +123 -20
  120. package/dist/cli/menu/settings/collections/collection-editor.d.ts +23 -0
  121. package/dist/cli/menu/settings/collections/collection-editor.js +89 -0
  122. package/dist/cli/menu/settings/collections/map-editor.d.ts +10 -0
  123. package/dist/cli/menu/settings/collections/map-editor.js +34 -0
  124. package/dist/cli/menu/settings/collections/object-list-editor.d.ts +10 -0
  125. package/dist/cli/menu/settings/collections/object-list-editor.js +23 -0
  126. package/dist/cli/menu/settings/collections/object-map-editor.d.ts +10 -0
  127. package/dist/cli/menu/settings/collections/object-map-editor.js +35 -0
  128. package/dist/cli/menu/settings/collections/string-list-editor.d.ts +12 -0
  129. package/dist/cli/menu/settings/collections/string-list-editor.js +39 -0
  130. package/dist/cli/menu/settings/config-file.d.ts +2 -2
  131. package/dist/cli/menu/settings/config-file.js +42 -19
  132. package/dist/cli/menu/settings/editor-actions.d.ts +2 -0
  133. package/dist/cli/menu/settings/editor-actions.js +2 -0
  134. package/dist/cli/menu/settings/format.d.ts +5 -0
  135. package/dist/cli/menu/settings/format.js +39 -0
  136. package/dist/cli/menu/settings/index.d.ts +1 -29
  137. package/dist/cli/menu/settings/index.js +1 -133
  138. package/dist/cli/menu/settings/object-editor.d.ts +12 -0
  139. package/dist/cli/menu/settings/object-editor.js +86 -0
  140. package/dist/cli/menu/settings/schema-node.d.ts +3 -1
  141. package/dist/cli/menu/settings/schema-node.js +71 -24
  142. package/dist/cli/menu/settings/settings-editor.d.ts +30 -0
  143. package/dist/cli/menu/settings/settings-editor.js +176 -0
  144. package/dist/cli/menu/settings/{editors.d.ts → value-editor.d.ts} +2 -13
  145. package/dist/cli/menu/settings/value-editor.js +137 -0
  146. package/dist/cli/menu/several.d.ts +4 -4
  147. package/dist/cli/menu/several.js +61 -20
  148. package/dist/cli/{colors.d.ts → output/colors.d.ts} +8 -8
  149. package/dist/cli/{colors.js → output/colors.js} +32 -14
  150. package/dist/cli/output/index.d.ts +3 -0
  151. package/dist/cli/output/index.js +3 -0
  152. package/dist/cli/output/print.d.ts +5 -0
  153. package/dist/cli/output/print.js +14 -0
  154. package/dist/cli/{progress.d.ts → output/progress.d.ts} +5 -5
  155. package/dist/cli/{progress.js → output/progress.js} +42 -19
  156. package/dist/cli/report.d.ts +2 -0
  157. package/dist/cli/report.js +20 -0
  158. package/dist/cli/tui/app.d.ts +6 -16
  159. package/dist/cli/tui/app.js +28 -8
  160. package/dist/cli/tui/dialogs/confirm-screen.d.ts +20 -0
  161. package/dist/cli/tui/dialogs/confirm-screen.js +50 -0
  162. package/dist/cli/tui/dialogs/message-screen.d.ts +17 -0
  163. package/dist/cli/tui/dialogs/message-screen.js +55 -0
  164. package/dist/cli/tui/dialogs/paragraphs.d.ts +2 -0
  165. package/dist/cli/tui/dialogs/paragraphs.js +5 -0
  166. package/dist/cli/tui/dialogs/text-screen.d.ts +26 -0
  167. package/dist/cli/tui/dialogs/text-screen.js +107 -0
  168. package/dist/cli/tui/frame.js +3 -1
  169. package/dist/cli/tui/index.d.ts +7 -3
  170. package/dist/cli/tui/index.js +4 -2
  171. package/dist/cli/tui/list/list-screen.d.ts +29 -0
  172. package/dist/cli/tui/{list-screen.js → list/list-screen.js} +86 -23
  173. package/dist/cli/tui/{list-screen.d.ts → list/list-types.d.ts} +0 -28
  174. package/dist/cli/tui/screen.d.ts +14 -0
  175. package/dist/cli/tui/terminal.js +34 -10
  176. package/dist/cli/tui/text.d.ts +2 -1
  177. package/dist/cli/tui/text.js +37 -7
  178. package/dist/cli/tui/theme.js +27 -9
  179. package/dist/cli/validate.d.ts +8 -8
  180. package/dist/cli/validate.js +32 -21
  181. package/dist/core/config/defaults.d.ts +2 -0
  182. package/dist/core/config/defaults.js +203 -0
  183. package/dist/core/config/index.d.ts +2 -0
  184. package/dist/core/config/index.js +3 -0
  185. package/dist/core/{config.d.ts → config/loader.d.ts} +1 -2
  186. package/dist/core/config/loader.js +47 -0
  187. package/dist/core/{detect-databases.js → detect/databases.js} +111 -23
  188. package/dist/core/detect/index.d.ts +4 -0
  189. package/dist/core/detect/index.js +4 -0
  190. package/dist/core/{detect-pwsh.d.ts → detect/pwsh.d.ts} +1 -1
  191. package/dist/core/{detect-pwsh.js → detect/pwsh.js} +25 -11
  192. package/dist/core/{detect-toolchains.d.ts → detect/toolchains.d.ts} +1 -1
  193. package/dist/core/{detect-toolchains.js → detect/toolchains.js} +42 -5
  194. package/dist/{guest/toolchains → core/detect}/versions.js +28 -12
  195. package/dist/core/disk.d.ts +2 -0
  196. package/dist/core/disk.js +46 -3
  197. package/dist/core/local-config/boot-wants.d.ts +45 -0
  198. package/dist/core/local-config/boot-wants.js +120 -0
  199. package/dist/core/local-config/file.d.ts +3 -0
  200. package/dist/core/local-config/file.js +16 -0
  201. package/dist/core/local-config/index.d.ts +5 -0
  202. package/dist/core/local-config/index.js +7 -0
  203. package/dist/core/{local-config.d.ts → local-config/overrides.d.ts} +3 -18
  204. package/dist/core/{local-config.js → local-config/overrides.js} +45 -52
  205. package/dist/core/local-config/policy.d.ts +19 -0
  206. package/dist/core/local-config/policy.js +45 -0
  207. package/dist/core/local-config/trust.d.ts +13 -0
  208. package/dist/core/local-config/trust.js +43 -0
  209. package/dist/core/package-info.d.ts +4 -0
  210. package/dist/core/package-info.js +13 -0
  211. package/dist/core/run/guest-workspace.d.ts +23 -0
  212. package/dist/core/run/guest-workspace.js +47 -0
  213. package/dist/core/run/index.d.ts +3 -0
  214. package/dist/core/run/index.js +3 -0
  215. package/dist/core/run/resolve-run.d.ts +3 -0
  216. package/dist/core/run/resolve-run.js +202 -0
  217. package/dist/core/run/versions.d.ts +13 -0
  218. package/dist/core/run/versions.js +65 -0
  219. package/dist/core/safe-paths.js +17 -5
  220. package/dist/core/schema/apps.d.ts +4 -4
  221. package/dist/core/schema/apps.js +55 -21
  222. package/dist/core/schema/common.d.ts +13 -10
  223. package/dist/core/schema/common.js +16 -10
  224. package/dist/core/schema/config.d.ts +15 -10
  225. package/dist/core/schema/config.js +78 -53
  226. package/dist/core/schema/databases.d.ts +4 -3
  227. package/dist/core/schema/databases.js +16 -12
  228. package/dist/core/schema/harness.d.ts +1 -1
  229. package/dist/core/schema/harness.js +17 -7
  230. package/dist/core/schema/index.d.ts +6 -0
  231. package/dist/core/schema/index.js +8 -0
  232. package/dist/core/schema/json-schema.js +10 -5
  233. package/dist/core/schema/profile.d.ts +4 -4
  234. package/dist/core/schema/profile.js +37 -17
  235. package/dist/core/schema/projects.d.ts +1 -1
  236. package/dist/core/schema/projects.js +16 -6
  237. package/dist/core/schema/sandbox.d.ts +11 -11
  238. package/dist/core/schema/sandbox.js +101 -37
  239. package/dist/core/schema/toolchains.d.ts +6 -1
  240. package/dist/core/schema/toolchains.js +84 -34
  241. package/dist/core/types.d.ts +19 -9
  242. package/dist/core/util/errors.d.ts +8 -0
  243. package/dist/core/util/errors.js +14 -0
  244. package/dist/core/util/fs.d.ts +8 -0
  245. package/dist/core/util/fs.js +40 -0
  246. package/dist/core/util/index.d.ts +7 -0
  247. package/dist/core/util/index.js +7 -0
  248. package/dist/core/util/jsonc.d.ts +6 -0
  249. package/dist/core/util/jsonc.js +25 -0
  250. package/dist/core/util/links.d.ts +10 -0
  251. package/dist/core/util/links.js +39 -0
  252. package/dist/core/util/paths.d.ts +7 -0
  253. package/dist/core/util/paths.js +33 -0
  254. package/dist/core/util/process.d.ts +15 -0
  255. package/dist/core/util/process.js +54 -0
  256. package/dist/core/util/text.d.ts +8 -0
  257. package/dist/core/util/text.js +8 -0
  258. package/dist/guest/{setup/agents.js → agents/agent-installer.js} +24 -4
  259. package/dist/guest/apps/after-install.d.ts +3 -0
  260. package/dist/guest/apps/after-install.js +47 -0
  261. package/dist/guest/apps/app-installer.d.ts +22 -0
  262. package/dist/guest/apps/app-installer.js +116 -0
  263. package/dist/guest/apps/find-exe.d.ts +5 -0
  264. package/dist/guest/apps/find-exe.js +41 -0
  265. package/dist/guest/apps/index.d.ts +3 -10
  266. package/dist/guest/apps/index.js +6 -206
  267. package/dist/guest/apps/resolvers.js +37 -9
  268. package/dist/guest/apps/shortcuts.d.ts +6 -0
  269. package/dist/guest/apps/shortcuts.js +28 -0
  270. package/dist/guest/apps/sources.d.ts +4 -0
  271. package/dist/guest/apps/sources.js +17 -0
  272. package/dist/guest/apps/unpack.d.ts +3 -0
  273. package/dist/guest/apps/unpack.js +47 -0
  274. package/dist/guest/{audit-parse.js → audit/parse.js} +39 -3
  275. package/dist/guest/{audit.d.ts → audit/process-audit.d.ts} +3 -1
  276. package/dist/guest/{audit.js → audit/process-audit.js} +33 -8
  277. package/dist/guest/boot/boot-env.d.ts +4 -0
  278. package/dist/guest/{boot-env.js → boot/boot-env.js} +7 -5
  279. package/dist/guest/boot/boot.d.ts +1 -0
  280. package/dist/guest/{main.js → boot/boot.js} +96 -50
  281. package/dist/guest/{guide.js → boot/guide.js} +32 -7
  282. package/dist/guest/{project-env.d.ts → boot/project-env.d.ts} +3 -3
  283. package/dist/guest/{project-env.js → boot/project-env.js} +12 -4
  284. package/dist/guest/boot/project-status.d.ts +5 -0
  285. package/dist/guest/boot/project-status.js +28 -0
  286. package/dist/guest/daemon/daemon.d.ts +1 -0
  287. package/dist/guest/daemon/daemon.js +51 -0
  288. package/dist/guest/daemon/exec.js +18 -6
  289. package/dist/guest/daemon/{shutdown.js → idle-shutdown.js} +5 -4
  290. package/dist/guest/daemon/{project.d.ts → project-provisioner.d.ts} +3 -3
  291. package/dist/guest/daemon/{project.js → project-provisioner.js} +60 -22
  292. package/dist/guest/daemon/relays.js +5 -3
  293. package/dist/guest/daemon/{session.js → sessions.js} +84 -24
  294. package/dist/guest/daemon/state.d.ts +4 -1
  295. package/dist/guest/daemon/state.js +34 -20
  296. package/dist/guest/databases/database-server.d.ts +13 -0
  297. package/dist/guest/databases/database-server.js +35 -0
  298. package/dist/guest/databases/dynamodb.d.ts +12 -0
  299. package/dist/guest/databases/dynamodb.js +81 -0
  300. package/dist/guest/databases/index.d.ts +2 -0
  301. package/dist/guest/databases/index.js +2 -0
  302. package/dist/guest/databases/mongodb.d.ts +7 -0
  303. package/dist/guest/databases/mongodb.js +46 -0
  304. package/dist/guest/databases/mysql.d.ts +7 -0
  305. package/dist/guest/databases/mysql.js +59 -0
  306. package/dist/guest/databases/names.d.ts +5 -0
  307. package/dist/guest/databases/names.js +8 -0
  308. package/dist/guest/databases/postgres.d.ts +9 -0
  309. package/dist/guest/databases/postgres.js +85 -0
  310. package/dist/guest/databases/redis.d.ts +7 -0
  311. package/dist/guest/databases/redis.js +25 -0
  312. package/dist/guest/databases/registry.d.ts +5 -0
  313. package/dist/guest/databases/registry.js +51 -0
  314. package/dist/guest/databases/sbx-db.d.ts +1 -0
  315. package/dist/guest/{db.js → databases/sbx-db.js} +13 -13
  316. package/dist/guest/{toolchains/databases → databases}/server.d.ts +5 -5
  317. package/dist/guest/{toolchains/databases → databases}/server.js +18 -13
  318. package/dist/guest/entries/daemon.js +16 -0
  319. package/dist/guest/entries/db.js +10 -0
  320. package/dist/guest/entries/gitguard.js +20 -0
  321. package/dist/guest/entries/main.d.ts +1 -0
  322. package/dist/guest/entries/main.js +24 -0
  323. package/dist/guest/entries/netproxy.d.ts +1 -0
  324. package/dist/guest/entries/netproxy.js +7 -0
  325. package/dist/guest/entries/view.d.ts +1 -0
  326. package/dist/guest/entries/view.js +11 -0
  327. package/dist/guest/{gitguard.js → git/decision.js} +49 -26
  328. package/dist/guest/network/addresses.d.ts +2 -0
  329. package/dist/guest/network/addresses.js +6 -0
  330. package/dist/guest/{setup/network.d.ts → network/allow-only.d.ts} +0 -10
  331. package/dist/guest/network/allow-only.js +84 -0
  332. package/dist/guest/network/firewall.d.ts +9 -0
  333. package/dist/guest/{setup/network.js → network/firewall.js} +58 -63
  334. package/dist/guest/network/proxy-server.d.ts +2 -0
  335. package/dist/guest/{netproxy.js → network/proxy-server.js} +37 -18
  336. package/dist/guest/{helpers.d.ts → runtime/csc.d.ts} +1 -1
  337. package/dist/guest/{helpers.js → runtime/csc.js} +7 -2
  338. package/dist/guest/runtime/fs.d.ts +2 -0
  339. package/dist/guest/runtime/fs.js +6 -0
  340. package/dist/guest/runtime/log.d.ts +3 -0
  341. package/dist/guest/runtime/log.js +22 -0
  342. package/dist/guest/runtime/paths.d.ts +13 -0
  343. package/dist/guest/runtime/paths.js +14 -0
  344. package/dist/guest/{ports.js → runtime/ports.js} +8 -2
  345. package/dist/guest/runtime/process.d.ts +15 -0
  346. package/dist/guest/runtime/process.js +59 -0
  347. package/dist/guest/{project-context.js → runtime/project-context.js} +1 -1
  348. package/dist/guest/runtime/session.d.ts +5 -0
  349. package/dist/guest/runtime/session.js +10 -0
  350. package/dist/guest/runtime/status.d.ts +7 -0
  351. package/dist/guest/runtime/status.js +57 -0
  352. package/dist/guest/{cmdline.js → sessions/cmdline.js} +10 -4
  353. package/dist/guest/{ptyhost.js → sessions/pty-host.js} +12 -5
  354. package/dist/guest/{view.js → sessions/viewer.js} +8 -11
  355. package/dist/guest/setup/claude-mem.d.ts +10 -0
  356. package/dist/guest/setup/{claude.js → claude-mem.js} +18 -78
  357. package/dist/guest/setup/{claude.d.ts → claude-profile.d.ts} +0 -10
  358. package/dist/guest/setup/claude-profile.js +89 -0
  359. package/dist/guest/setup/desktop.d.ts +2 -0
  360. package/dist/guest/setup/desktop.js +32 -0
  361. package/dist/guest/setup/environment.js +28 -5
  362. package/dist/guest/setup/{user.d.ts → git-identity.d.ts} +0 -2
  363. package/dist/guest/setup/git-identity.js +34 -0
  364. package/dist/guest/{gitrules.d.ts → setup/git-rules.d.ts} +1 -1
  365. package/dist/guest/setup/git-rules.js +50 -0
  366. package/dist/guest/setup/hooks.js +22 -5
  367. package/dist/guest/setup/{policy.js → managed-policy.js} +2 -2
  368. package/dist/guest/toolchains/catalogue.d.ts +4 -4
  369. package/dist/guest/toolchains/catalogue.js +30 -7
  370. package/dist/guest/toolchains/detect.d.ts +12 -0
  371. package/dist/guest/toolchains/detect.js +54 -0
  372. package/dist/guest/toolchains/index.d.ts +3 -17
  373. package/dist/guest/toolchains/index.js +1 -106
  374. package/dist/guest/toolchains/install.d.ts +20 -0
  375. package/dist/guest/toolchains/install.js +29 -0
  376. package/dist/guest/toolchains/languages/go.d.ts +3 -0
  377. package/dist/guest/toolchains/{go.js → languages/go.js} +27 -9
  378. package/dist/guest/toolchains/languages/java.d.ts +8 -0
  379. package/dist/guest/toolchains/{java.js → languages/java.js} +57 -18
  380. package/dist/guest/toolchains/languages/node.d.ts +3 -0
  381. package/dist/guest/toolchains/{node.js → languages/node.js} +51 -18
  382. package/dist/guest/toolchains/languages/php.d.ts +3 -0
  383. package/dist/guest/toolchains/{scripting → languages}/php.js +36 -11
  384. package/dist/guest/toolchains/languages/python-tools.d.ts +3 -0
  385. package/dist/guest/toolchains/languages/python-tools.js +12 -0
  386. package/dist/guest/toolchains/languages/python.d.ts +3 -0
  387. package/dist/guest/toolchains/{python.js → languages/python.js} +29 -16
  388. package/dist/guest/toolchains/languages/ruby.d.ts +3 -0
  389. package/dist/guest/toolchains/{scripting → languages}/ruby.js +28 -10
  390. package/dist/guest/toolchains/leftovers.d.ts +1 -1
  391. package/dist/guest/toolchains/leftovers.js +13 -11
  392. package/dist/guest/toolchains/managers.d.ts +6 -6
  393. package/dist/guest/toolchains/managers.js +38 -17
  394. package/dist/guest/toolchains/native/binstall.d.ts +3 -2
  395. package/dist/guest/toolchains/native/binstall.js +20 -8
  396. package/dist/guest/toolchains/native/cpp.d.ts +2 -2
  397. package/dist/guest/toolchains/native/cpp.js +23 -8
  398. package/dist/guest/toolchains/native/dotnet.d.ts +5 -3
  399. package/dist/guest/toolchains/native/dotnet.js +72 -24
  400. package/dist/guest/toolchains/native/mesa.d.ts +2 -2
  401. package/dist/guest/toolchains/native/mesa.js +27 -10
  402. package/dist/guest/toolchains/native/msvc/environment.d.ts +4 -4
  403. package/dist/guest/toolchains/native/msvc/environment.js +30 -16
  404. package/dist/guest/toolchains/native/msvc/index.d.ts +3 -3
  405. package/dist/guest/toolchains/native/msvc/index.js +10 -8
  406. package/dist/guest/toolchains/native/msvc/packages.d.ts +1 -1
  407. package/dist/guest/toolchains/native/msvc/packages.js +69 -23
  408. package/dist/guest/toolchains/native/msvc/tree.d.ts +6 -6
  409. package/dist/guest/toolchains/native/msvc/tree.js +15 -9
  410. package/dist/guest/toolchains/native/rust-extras.d.ts +23 -0
  411. package/dist/guest/toolchains/native/rust-extras.js +100 -0
  412. package/dist/guest/toolchains/native/rust.d.ts +2 -2
  413. package/dist/guest/toolchains/native/rust.js +41 -10
  414. package/dist/guest/toolchains/{scripting → native}/vcruntime.d.ts +2 -2
  415. package/dist/guest/toolchains/{scripting → native}/vcruntime.js +17 -7
  416. package/dist/guest/toolchains/package-ledger.d.ts +17 -0
  417. package/dist/guest/toolchains/package-ledger.js +54 -0
  418. package/dist/guest/toolchains/plan.d.ts +3 -24
  419. package/dist/guest/toolchains/plan.js +99 -111
  420. package/dist/guest/toolchains/runtimes.d.ts +6 -6
  421. package/dist/guest/toolchains/runtimes.js +31 -13
  422. package/dist/guest/toolchains/scheduler.d.ts +22 -0
  423. package/dist/guest/toolchains/scheduler.js +123 -0
  424. package/dist/guest/toolchains/setup.d.ts +10 -0
  425. package/dist/guest/toolchains/setup.js +22 -0
  426. package/dist/guest/toolchains/state-file.d.ts +3 -0
  427. package/dist/guest/toolchains/state-file.js +10 -0
  428. package/dist/guest/toolchains/step.d.ts +24 -0
  429. package/dist/guest/toolchains/step.js +1 -0
  430. package/dist/guest/toolchains/tool-env.d.ts +12 -0
  431. package/dist/guest/toolchains/tool-env.js +16 -0
  432. package/dist/guest/toolchains/tools/cli.d.ts +10 -0
  433. package/dist/guest/toolchains/{cli.js → tools/cli.js} +35 -15
  434. package/dist/guest/toolchains/tools/git.d.ts +3 -0
  435. package/dist/guest/toolchains/{git.js → tools/git.js} +38 -15
  436. package/dist/guest/toolchains/tools/pwsh.d.ts +4 -0
  437. package/dist/guest/toolchains/{pwsh.js → tools/pwsh.js} +14 -7
  438. package/dist/guest/toolchains/{vscode-profile.d.ts → tools/vscode-profile.d.ts} +6 -6
  439. package/dist/guest/toolchains/{vscode-profile.js → tools/vscode-profile.js} +28 -12
  440. package/dist/guest/toolchains/{vscode.d.ts → tools/vscode.d.ts} +6 -6
  441. package/dist/guest/toolchains/{vscode.js → tools/vscode.js} +67 -21
  442. package/dist/guest/toolchains/version-cache.d.ts +16 -0
  443. package/dist/guest/toolchains/version-cache.js +67 -0
  444. package/dist/host/agent-commands/commands.d.ts +13 -0
  445. package/dist/host/agent-commands/commands.js +33 -0
  446. package/dist/host/agent-commands/forwarders.d.ts +7 -0
  447. package/dist/host/agent-commands/forwarders.js +31 -0
  448. package/dist/host/agent-commands/index.d.ts +4 -0
  449. package/dist/host/agent-commands/index.js +4 -0
  450. package/dist/host/agent-commands/reconcile.d.ts +12 -0
  451. package/dist/host/agent-commands/reconcile.js +69 -0
  452. package/dist/host/agent-commands/user-path.d.ts +2 -0
  453. package/dist/host/agent-commands/user-path.js +33 -0
  454. package/dist/host/audit/collect.d.ts +2 -2
  455. package/dist/host/audit/collect.js +59 -22
  456. package/dist/host/audit/log.d.ts +2 -2
  457. package/dist/host/audit/log.js +24 -8
  458. package/dist/host/{attach.d.ts → channel/attach.d.ts} +2 -2
  459. package/dist/host/{attach.js → channel/attach.js} +33 -15
  460. package/dist/host/channel/channel.d.ts +51 -0
  461. package/dist/host/channel/channel.js +196 -0
  462. package/dist/host/channel/index.d.ts +2 -0
  463. package/dist/host/channel/index.js +2 -0
  464. package/dist/host/guard/agent-files.d.ts +7 -0
  465. package/dist/host/guard/agent-files.js +103 -0
  466. package/dist/host/guard/commands.d.ts +10 -0
  467. package/dist/host/guard/commands.js +123 -0
  468. package/dist/host/guard/file-hash.d.ts +4 -0
  469. package/dist/host/guard/file-hash.js +37 -0
  470. package/dist/host/guard/git-config.d.ts +5 -0
  471. package/dist/host/guard/git-config.js +62 -0
  472. package/dist/host/guard/git-dirs.d.ts +12 -0
  473. package/dist/host/guard/git-dirs.js +53 -0
  474. package/dist/host/guard/index.d.ts +5 -0
  475. package/dist/host/guard/index.js +4 -0
  476. package/dist/host/guard/mark-of-the-web.d.ts +8 -0
  477. package/dist/host/guard/mark-of-the-web.js +74 -0
  478. package/dist/host/guard/nested-repos.d.ts +14 -0
  479. package/dist/host/guard/nested-repos.js +88 -0
  480. package/dist/host/guard/quarantine.d.ts +3 -0
  481. package/dist/host/guard/quarantine.js +24 -0
  482. package/dist/host/guard/repo-guard.d.ts +10 -0
  483. package/dist/host/guard/repo-guard.js +36 -0
  484. package/dist/host/guard/store.d.ts +40 -0
  485. package/dist/host/guard/store.js +145 -0
  486. package/dist/host/guard/types.d.ts +27 -0
  487. package/dist/host/guard/types.js +3 -0
  488. package/dist/host/guard/watch-state.d.ts +9 -0
  489. package/dist/host/guard/watch-state.js +26 -0
  490. package/dist/host/launch/boot-projects.d.ts +17 -0
  491. package/dist/host/launch/{projects.js → boot-projects.js} +22 -13
  492. package/dist/host/{database-plan.d.ts → launch/database-plan.d.ts} +5 -5
  493. package/dist/host/{database-plan.js → launch/database-plan.js} +24 -13
  494. package/dist/host/launch/generate.d.ts +4 -0
  495. package/dist/host/launch/generate.js +77 -0
  496. package/dist/host/launch/index.d.ts +10 -0
  497. package/dist/host/launch/index.js +10 -0
  498. package/dist/host/launch/mappings.d.ts +5 -5
  499. package/dist/host/launch/mappings.js +37 -24
  500. package/dist/host/launch/pc-scan.d.ts +5 -0
  501. package/dist/host/{pc-scan.js → launch/pc-scan.js} +20 -13
  502. package/dist/host/launch/project-scan.d.ts +7 -0
  503. package/dist/host/{project-scan.js → launch/project-scan.js} +29 -21
  504. package/dist/host/launch/session-file.d.ts +23 -0
  505. package/dist/host/launch/session-file.js +73 -0
  506. package/dist/host/launch/stage.d.ts +5 -5
  507. package/dist/host/launch/stage.js +14 -13
  508. package/dist/host/launch/toolchains.d.ts +4 -0
  509. package/dist/host/launch/toolchains.js +11 -0
  510. package/dist/host/launch/{wsb.d.ts → wsb-file.d.ts} +4 -2
  511. package/dist/host/launch/wsb-file.js +56 -0
  512. package/dist/host/life/crash-report.d.ts +8 -0
  513. package/dist/host/life/crash-report.js +87 -0
  514. package/dist/host/life/index.d.ts +6 -0
  515. package/dist/host/life/index.js +6 -0
  516. package/dist/host/life/keep-awake.d.ts +10 -0
  517. package/dist/host/life/keep-awake.js +29 -0
  518. package/dist/host/life/life-record.d.ts +48 -0
  519. package/dist/host/life/life-record.js +76 -0
  520. package/dist/host/life/stop-events.d.ts +27 -0
  521. package/dist/host/life/stop-events.js +96 -0
  522. package/dist/host/life/stop-warning.d.ts +4 -0
  523. package/dist/host/life/stop-warning.js +25 -0
  524. package/dist/host/life/windows-update.d.ts +3 -0
  525. package/dist/host/life/windows-update.js +11 -0
  526. package/dist/host/native.d.ts +4 -0
  527. package/dist/host/native.js +11 -0
  528. package/dist/host/network/index.d.ts +1 -0
  529. package/dist/host/network/index.js +1 -0
  530. package/dist/host/{port-forward.d.ts → network/port-forward.d.ts} +1 -1
  531. package/dist/host/{port-forward.js → network/port-forward.js} +16 -10
  532. package/dist/host/profile/accounts.d.ts +37 -0
  533. package/dist/host/profile/accounts.js +146 -0
  534. package/dist/host/profile/claude-login.d.ts +22 -0
  535. package/dist/host/profile/claude-login.js +57 -0
  536. package/dist/host/{claude-profile.d.ts → profile/claude-profile.d.ts} +9 -9
  537. package/dist/host/{claude-profile.js → profile/claude-profile.js} +32 -22
  538. package/dist/host/profile/index.d.ts +7 -0
  539. package/dist/host/profile/index.js +7 -0
  540. package/dist/host/profile/personalize.d.ts +2 -0
  541. package/dist/host/profile/personalize.js +127 -0
  542. package/dist/host/profile/reg-file.d.ts +8 -0
  543. package/dist/host/profile/reg-file.js +45 -0
  544. package/dist/host/profile/secret-files.d.ts +2 -0
  545. package/dist/host/profile/secret-files.js +25 -0
  546. package/dist/host/profile/secret-patterns.d.ts +6 -0
  547. package/dist/host/profile/secret-patterns.js +128 -0
  548. package/dist/host/profile/secrets.d.ts +12 -0
  549. package/dist/host/profile/secrets.js +100 -0
  550. package/dist/host/projects/index.d.ts +4 -0
  551. package/dist/host/projects/index.js +4 -0
  552. package/dist/host/{join.d.ts → projects/join.d.ts} +12 -9
  553. package/dist/host/{join.js → projects/join.js} +62 -33
  554. package/dist/host/projects/known.d.ts +28 -0
  555. package/dist/host/projects/known.js +55 -0
  556. package/dist/host/projects/mapper.d.ts +29 -0
  557. package/dist/host/projects/mapper.js +88 -0
  558. package/dist/host/projects/registry.d.ts +83 -0
  559. package/dist/host/projects/registry.js +136 -0
  560. package/dist/host/sandbox/doctor.d.ts +2 -0
  561. package/dist/host/sandbox/doctor.js +42 -0
  562. package/dist/host/sandbox/host-claude.d.ts +1 -0
  563. package/dist/host/sandbox/host-claude.js +26 -0
  564. package/dist/host/sandbox/index.d.ts +6 -0
  565. package/dist/host/sandbox/index.js +6 -0
  566. package/dist/host/{platform.d.ts → sandbox/platform.d.ts} +0 -5
  567. package/dist/host/sandbox/platform.js +60 -0
  568. package/dist/host/sandbox/probe.d.ts +3 -0
  569. package/dist/host/sandbox/probe.js +47 -0
  570. package/dist/host/{window.js → sandbox/window.js} +7 -5
  571. package/dist/host/{wsb.js → sandbox/wsb-cli.js} +31 -8
  572. package/dist/host/{cleanup.js → storage/cleanup.js} +27 -12
  573. package/dist/host/storage/index.d.ts +2 -0
  574. package/dist/host/storage/index.js +2 -0
  575. package/dist/host/storage/state-files.d.ts +4 -0
  576. package/dist/host/storage/state-files.js +10 -0
  577. package/dist/host/test-guard.js +1 -1
  578. package/dist/host/tools/conpty.d.ts +8 -0
  579. package/dist/host/tools/conpty.js +58 -0
  580. package/dist/host/tools/index.d.ts +2 -0
  581. package/dist/host/tools/index.js +2 -0
  582. package/dist/host/{terminal.d.ts → tools/windows-terminal.d.ts} +2 -10
  583. package/dist/host/{terminal.js → tools/windows-terminal.js} +33 -57
  584. package/dist/host/workspace-view/active-views.d.ts +3 -0
  585. package/dist/host/workspace-view/active-views.js +22 -0
  586. package/dist/host/workspace-view/index.d.ts +2 -18
  587. package/dist/host/workspace-view/index.js +2 -49
  588. package/dist/host/workspace-view/plan.d.ts +16 -0
  589. package/dist/host/workspace-view/plan.js +50 -0
  590. package/dist/host/workspace-view/rules.js +10 -3
  591. package/dist/host/workspace-view/view-state.d.ts +10 -0
  592. package/dist/host/workspace-view/view-state.js +31 -0
  593. package/dist/host/workspace-view/view.d.ts +1 -0
  594. package/dist/host/workspace-view/view.js +51 -55
  595. package/dist/runtime/daemon.js +4220 -1968
  596. package/dist/runtime/db.js +2134 -849
  597. package/dist/runtime/gitguard.js +29 -11
  598. package/dist/runtime/main.js +4687 -2243
  599. package/dist/runtime/netproxy.js +1644 -420
  600. package/dist/runtime/view.js +1356 -428
  601. package/dist/selftest/accounts.test.d.ts +1 -1
  602. package/dist/selftest/accounts.test.js +20 -17
  603. package/dist/selftest/agent-commands.test.d.ts +1 -1
  604. package/dist/selftest/agent-commands.test.js +9 -5
  605. package/dist/selftest/audit.test.d.ts +1 -1
  606. package/dist/selftest/audit.test.js +46 -13
  607. package/dist/selftest/channel.test.d.ts +1 -1
  608. package/dist/selftest/channel.test.js +63 -16
  609. package/dist/selftest/cli.test.d.ts +1 -1
  610. package/dist/selftest/cli.test.js +68 -16
  611. package/dist/selftest/cmdline.test.d.ts +1 -1
  612. package/dist/selftest/cmdline.test.js +36 -7
  613. package/dist/selftest/config.test.d.ts +1 -1
  614. package/dist/selftest/config.test.js +12 -5
  615. package/dist/selftest/data.test.d.ts +1 -1
  616. package/dist/selftest/data.test.js +35 -6
  617. package/dist/selftest/detect.test.d.ts +1 -1
  618. package/dist/selftest/detect.test.js +22 -9
  619. package/dist/selftest/generate.test.d.ts +1 -1
  620. package/dist/selftest/generate.test.js +33 -9
  621. package/dist/selftest/git-access.test.d.ts +1 -1
  622. package/dist/selftest/git-access.test.js +42 -4
  623. package/dist/selftest/guest-boot.test.d.ts +1 -1
  624. package/dist/selftest/guest-boot.test.js +25 -7
  625. package/dist/selftest/host-sim.test.d.ts +1 -1
  626. package/dist/selftest/host-sim.test.js +27 -3
  627. package/dist/selftest/hostile-input.test.d.ts +1 -1
  628. package/dist/selftest/hostile-input.test.js +5 -5
  629. package/dist/selftest/index.d.ts +1 -1
  630. package/dist/selftest/index.js +72 -16
  631. package/dist/selftest/layout.test.d.ts +2 -0
  632. package/dist/selftest/layout.test.js +131 -0
  633. package/dist/selftest/links.test.d.ts +1 -1
  634. package/dist/selftest/links.test.js +16 -11
  635. package/dist/selftest/live-daemon.test.d.ts +1 -1
  636. package/dist/selftest/live-daemon.test.js +20 -8
  637. package/dist/selftest/live-git.test.d.ts +1 -1
  638. package/dist/selftest/live-git.test.js +13 -4
  639. package/dist/selftest/live-network.test.d.ts +1 -1
  640. package/dist/selftest/live-network.test.js +24 -9
  641. package/dist/selftest/live-projects.test.d.ts +1 -1
  642. package/dist/selftest/live-projects.test.js +47 -20
  643. package/dist/selftest/live-terminal.test.d.ts +1 -1
  644. package/dist/selftest/live-terminal.test.js +41 -15
  645. package/dist/selftest/local-config.test.d.ts +1 -1
  646. package/dist/selftest/local-config.test.js +64 -16
  647. package/dist/selftest/mirror.test.d.ts +1 -1
  648. package/dist/selftest/mirror.test.js +102 -32
  649. package/dist/selftest/network.test.d.ts +1 -1
  650. package/dist/selftest/network.test.js +17 -8
  651. package/dist/selftest/personalization.test.d.ts +1 -1
  652. package/dist/selftest/personalization.test.js +12 -5
  653. package/dist/selftest/projects.test.d.ts +1 -1
  654. package/dist/selftest/projects.test.js +280 -85
  655. package/dist/selftest/repair.test.d.ts +1 -1
  656. package/dist/selftest/repair.test.js +17 -5
  657. package/dist/selftest/repo-guard.test.d.ts +1 -1
  658. package/dist/selftest/repo-guard.test.js +21 -20
  659. package/dist/selftest/secrets.test.d.ts +1 -1
  660. package/dist/selftest/secrets.test.js +57 -13
  661. package/dist/selftest/setup.test.d.ts +1 -1
  662. package/dist/selftest/setup.test.js +25 -5
  663. package/dist/selftest/{fixtures.d.ts → support/fixtures.d.ts} +5 -3
  664. package/dist/selftest/{fixtures.js → support/fixtures.js} +95 -17
  665. package/dist/selftest/{harness.js → support/harness.js} +24 -7
  666. package/dist/selftest/{live.d.ts → support/live.d.ts} +2 -2
  667. package/dist/selftest/{live.js → support/live.js} +34 -10
  668. package/dist/selftest/support/suite.js +1 -0
  669. package/dist/selftest/sync.test.d.ts +1 -1
  670. package/dist/selftest/sync.test.js +64 -26
  671. package/dist/selftest/test-guard.test.d.ts +1 -1
  672. package/dist/selftest/test-guard.test.js +43 -15
  673. package/dist/selftest/toolchains.test.d.ts +1 -1
  674. package/dist/selftest/toolchains.test.js +135 -36
  675. package/dist/selftest/workspace-view.test.d.ts +1 -1
  676. package/dist/selftest/workspace-view.test.js +48 -11
  677. package/dist/selftest/workspace.test.d.ts +1 -1
  678. package/dist/selftest/workspace.test.js +13 -4
  679. package/dist/shared/{apps.d.ts → apps/catalogue.d.ts} +1 -11
  680. package/dist/shared/apps/catalogue.js +768 -0
  681. package/dist/shared/apps/index.d.ts +2 -0
  682. package/dist/shared/apps/index.js +2 -0
  683. package/dist/shared/apps/selection.d.ts +11 -0
  684. package/dist/shared/apps/selection.js +40 -0
  685. package/dist/shared/channel/index.d.ts +2 -0
  686. package/dist/shared/channel/index.js +2 -0
  687. package/dist/shared/channel/run-dir.d.ts +30 -0
  688. package/dist/shared/channel/run-dir.js +84 -0
  689. package/dist/shared/{schema.d.ts → channel/schema.d.ts} +38 -21
  690. package/dist/shared/{schema.js → channel/schema.js} +62 -35
  691. package/dist/shared/download/archive.d.ts +13 -0
  692. package/dist/shared/download/archive.js +57 -0
  693. package/dist/shared/download/downloader.d.ts +35 -0
  694. package/dist/shared/download/downloader.js +110 -0
  695. package/dist/shared/download/github.d.ts +16 -0
  696. package/dist/shared/download/github.js +74 -0
  697. package/dist/shared/download/http.d.ts +5 -0
  698. package/dist/shared/download/http.js +30 -0
  699. package/dist/shared/download/index.d.ts +5 -0
  700. package/dist/shared/download/index.js +5 -0
  701. package/dist/shared/download/spawn.d.ts +2 -0
  702. package/dist/shared/download/spawn.js +7 -0
  703. package/dist/shared/io/index.d.ts +3 -0
  704. package/dist/shared/io/index.js +3 -0
  705. package/dist/shared/io/json-file.d.ts +10 -0
  706. package/dist/shared/io/json-file.js +21 -0
  707. package/dist/shared/io/json.d.ts +13 -0
  708. package/dist/shared/io/json.js +49 -0
  709. package/dist/shared/{safe-remove.js → io/safe-remove.js} +32 -7
  710. package/dist/shared/{netrules.js → network/firewall-rules.js} +36 -5
  711. package/dist/shared/network/index.d.ts +2 -0
  712. package/dist/shared/network/index.js +2 -0
  713. package/dist/shared/{netpolicy.js → network/policy.js} +66 -11
  714. package/dist/shared/{paths.js → paths/claude-paths.js} +12 -2
  715. package/dist/shared/{guest-paths.d.ts → paths/guest-paths.d.ts} +6 -12
  716. package/dist/shared/{guest-paths.js → paths/guest-paths.js} +53 -36
  717. package/dist/shared/paths/index.d.ts +3 -0
  718. package/dist/shared/paths/index.js +3 -0
  719. package/dist/shared/{projects.js → paths/projects.js} +13 -3
  720. package/dist/shared/pty/client.d.ts +21 -0
  721. package/dist/shared/pty/client.js +79 -0
  722. package/dist/shared/{console-input.js → pty/console-input.js} +26 -6
  723. package/dist/shared/pty/index.d.ts +6 -0
  724. package/dist/shared/pty/index.js +6 -0
  725. package/dist/shared/pty/input-joiner.d.ts +15 -0
  726. package/dist/shared/pty/input-joiner.js +44 -0
  727. package/dist/shared/pty/output-filter.d.ts +13 -0
  728. package/dist/shared/pty/output-filter.js +140 -0
  729. package/dist/shared/pty/protocol.d.ts +36 -0
  730. package/dist/shared/pty/protocol.js +60 -0
  731. package/dist/shared/pty/terminal.d.ts +24 -0
  732. package/dist/shared/pty/terminal.js +147 -0
  733. package/dist/shared/test-guard.js +3 -1
  734. package/dist/sync/claude-mem.d.ts +1 -1
  735. package/dist/sync/claude-mem.js +9 -4
  736. package/dist/sync/history.d.ts +1 -29
  737. package/dist/sync/history.js +57 -45
  738. package/dist/sync/index.d.ts +5 -0
  739. package/dist/sync/index.js +5 -0
  740. package/dist/sync/sync-cycle.d.ts +18 -0
  741. package/dist/sync/sync-cycle.js +85 -0
  742. package/dist/sync/sync-state.d.ts +32 -0
  743. package/dist/sync/sync-state.js +37 -0
  744. package/dist/sync/watcher.d.ts +0 -18
  745. package/dist/sync/watcher.js +66 -100
  746. package/native/keep-awake.ps1 +8 -0
  747. package/native/power.cs +23 -0
  748. package/native/stop-events.ps1 +38 -0
  749. package/package.json +11 -3
  750. package/sandbox/linkgate.cs +98 -0
  751. package/sandbox/memlog.ps1 +15 -6
  752. package/schemas/config.schema.json +34 -1
  753. package/schemas/sandbox-config.schema.json +34 -1
  754. package/dist/cli/boot-progress.d.ts +0 -22
  755. package/dist/cli/boot-progress.js +0 -59
  756. package/dist/cli/commands/launch.d.ts +0 -32
  757. package/dist/cli/commands/launch.js +0 -421
  758. package/dist/cli/commands/maintenance.d.ts +0 -10
  759. package/dist/cli/commands/maintenance.js +0 -220
  760. package/dist/cli/commands/project.d.ts +0 -33
  761. package/dist/cli/commands/project.js +0 -102
  762. package/dist/cli/commands/projects.d.ts +0 -14
  763. package/dist/cli/commands/projects.js +0 -146
  764. package/dist/cli/commands/restart.d.ts +0 -6
  765. package/dist/cli/commands/restart.js +0 -95
  766. package/dist/cli/commands/sessions.d.ts +0 -12
  767. package/dist/cli/commands/sessions.js +0 -258
  768. package/dist/cli/menu/settings/editors.js +0 -305
  769. package/dist/cli/tui/dialogs.d.ts +0 -57
  770. package/dist/cli/tui/dialogs.js +0 -162
  771. package/dist/core/config.js +0 -109
  772. package/dist/core/project-policy.d.ts +0 -62
  773. package/dist/core/project-policy.js +0 -121
  774. package/dist/core/schema.d.ts +0 -6
  775. package/dist/core/schema.js +0 -8
  776. package/dist/core/util.d.ts +0 -62
  777. package/dist/core/util.js +0 -156
  778. package/dist/core/workspace.d.ts +0 -35
  779. package/dist/core/workspace.js +0 -206
  780. package/dist/guest/boot-env.d.ts +0 -4
  781. package/dist/guest/daemon.js +0 -57
  782. package/dist/guest/env.d.ts +0 -56
  783. package/dist/guest/env.js +0 -115
  784. package/dist/guest/gitrules.js +0 -11
  785. package/dist/guest/project-status.d.ts +0 -5
  786. package/dist/guest/project-status.js +0 -17
  787. package/dist/guest/setup/user.js +0 -51
  788. package/dist/guest/toolchains/cli.d.ts +0 -10
  789. package/dist/guest/toolchains/common.d.ts +0 -54
  790. package/dist/guest/toolchains/common.js +0 -147
  791. package/dist/guest/toolchains/databases/dynamodb.d.ts +0 -8
  792. package/dist/guest/toolchains/databases/dynamodb.js +0 -52
  793. package/dist/guest/toolchains/databases/index.d.ts +0 -6
  794. package/dist/guest/toolchains/databases/index.js +0 -62
  795. package/dist/guest/toolchains/databases/mongodb.d.ts +0 -3
  796. package/dist/guest/toolchains/databases/mongodb.js +0 -31
  797. package/dist/guest/toolchains/databases/mysql.d.ts +0 -3
  798. package/dist/guest/toolchains/databases/mysql.js +0 -38
  799. package/dist/guest/toolchains/databases/postgres.d.ts +0 -5
  800. package/dist/guest/toolchains/databases/postgres.js +0 -38
  801. package/dist/guest/toolchains/databases/redis.d.ts +0 -3
  802. package/dist/guest/toolchains/databases/redis.js +0 -16
  803. package/dist/guest/toolchains/git.d.ts +0 -3
  804. package/dist/guest/toolchains/go.d.ts +0 -3
  805. package/dist/guest/toolchains/java.d.ts +0 -8
  806. package/dist/guest/toolchains/node.d.ts +0 -3
  807. package/dist/guest/toolchains/pwsh.d.ts +0 -4
  808. package/dist/guest/toolchains/python.d.ts +0 -3
  809. package/dist/guest/toolchains/scripting/php.d.ts +0 -3
  810. package/dist/guest/toolchains/scripting/ruby.d.ts +0 -3
  811. package/dist/host/accounts.d.ts +0 -32
  812. package/dist/host/accounts.js +0 -128
  813. package/dist/host/agent-commands.d.ts +0 -25
  814. package/dist/host/agent-commands.js +0 -145
  815. package/dist/host/channel.d.ts +0 -38
  816. package/dist/host/channel.js +0 -163
  817. package/dist/host/generate.d.ts +0 -13
  818. package/dist/host/generate.js +0 -115
  819. package/dist/host/launch/projects.d.ts +0 -17
  820. package/dist/host/launch/wsb.js +0 -34
  821. package/dist/host/motw.d.ts +0 -17
  822. package/dist/host/motw.js +0 -74
  823. package/dist/host/pc-scan.d.ts +0 -6
  824. package/dist/host/personalize.d.ts +0 -10
  825. package/dist/host/personalize.js +0 -97
  826. package/dist/host/platform.js +0 -129
  827. package/dist/host/project-scan.d.ts +0 -7
  828. package/dist/host/projects.d.ts +0 -123
  829. package/dist/host/projects.js +0 -196
  830. package/dist/host/repo-guard.d.ts +0 -43
  831. package/dist/host/repo-guard.js +0 -347
  832. package/dist/host/secrets.d.ts +0 -14
  833. package/dist/host/secrets.js +0 -133
  834. package/dist/host/stops.d.ts +0 -67
  835. package/dist/host/stops.js +0 -126
  836. package/dist/shared/apps.js +0 -114
  837. package/dist/shared/download.d.ts +0 -63
  838. package/dist/shared/download.js +0 -238
  839. package/dist/shared/pty-client.d.ts +0 -108
  840. package/dist/shared/pty-client.js +0 -406
  841. package/dist/shared/rundir.d.ts +0 -41
  842. package/dist/shared/rundir.js +0 -96
  843. /package/dist/{guest/daemon.d.ts → cli/tui/list/list-types.js} +0 -0
  844. /package/dist/{guest/db.d.ts → cli/tui/screen.js} +0 -0
  845. /package/dist/core/{detect-databases.d.ts → detect/databases.d.ts} +0 -0
  846. /package/dist/{guest/toolchains → core/detect}/versions.d.ts +0 -0
  847. /package/dist/guest/{setup/agents.d.ts → agents/agent-installer.d.ts} +0 -0
  848. /package/dist/guest/{audit-parse.d.ts → audit/parse.d.ts} +0 -0
  849. /package/dist/guest/{guide.d.ts → boot/guide.d.ts} +0 -0
  850. /package/dist/guest/daemon/{shutdown.d.ts → idle-shutdown.d.ts} +0 -0
  851. /package/dist/guest/daemon/{session.d.ts → sessions.d.ts} +0 -0
  852. /package/dist/guest/{main.d.ts → entries/daemon.d.ts} +0 -0
  853. /package/dist/guest/{netproxy.d.ts → entries/db.d.ts} +0 -0
  854. /package/dist/{selftest/suite.js → guest/entries/gitguard.d.ts} +0 -0
  855. /package/dist/guest/{gitguard.d.ts → git/decision.d.ts} +0 -0
  856. /package/dist/guest/{ports.d.ts → runtime/ports.d.ts} +0 -0
  857. /package/dist/guest/{project-context.d.ts → runtime/project-context.d.ts} +0 -0
  858. /package/dist/guest/{cmdline.d.ts → sessions/cmdline.d.ts} +0 -0
  859. /package/dist/guest/{ptyhost.d.ts → sessions/pty-host.d.ts} +0 -0
  860. /package/dist/guest/{view.d.ts → sessions/viewer.d.ts} +0 -0
  861. /package/dist/guest/setup/{policy.d.ts → managed-policy.d.ts} +0 -0
  862. /package/dist/host/{window.d.ts → sandbox/window.d.ts} +0 -0
  863. /package/dist/host/{wsb.d.ts → sandbox/wsb-cli.d.ts} +0 -0
  864. /package/dist/host/{cleanup.d.ts → storage/cleanup.d.ts} +0 -0
  865. /package/dist/selftest/{harness.d.ts → support/harness.d.ts} +0 -0
  866. /package/dist/selftest/{suite.d.ts → support/suite.d.ts} +0 -0
  867. /package/dist/shared/{safe-remove.d.ts → io/safe-remove.d.ts} +0 -0
  868. /package/dist/shared/{netrules.d.ts → network/firewall-rules.d.ts} +0 -0
  869. /package/dist/shared/{netpolicy.d.ts → network/policy.d.ts} +0 -0
  870. /package/dist/shared/{paths.d.ts → paths/claude-paths.d.ts} +0 -0
  871. /package/dist/shared/{projects.d.ts → paths/projects.d.ts} +0 -0
  872. /package/dist/shared/{console-input.d.ts → pty/console-input.d.ts} +0 -0
@@ -1,43 +1,67 @@
1
- // Guest entry point, started by bootstrap.ps1 in the sandbox window. Provisions everything, starts the session
2
- // daemon, asks it for the first agent session and then shows that session in this window.
3
1
  import fs from 'node:fs';
4
2
  import path from 'node:path';
5
3
  import { spawn } from 'node:child_process';
6
4
  import { writeGuides } from './guide.js';
7
- import { setupToolchains } from './toolchains/index.js';
8
- import { provisionHarness, resolveLaunch } from './setup/agents.js';
9
- import { restoreClaudeMem, syncClaudeProfile } from './setup/claude.js';
10
- import { agentEnv, persistEnvironment } from './setup/environment.js';
11
- import { runHooks } from './setup/hooks.js';
12
- import { applyAllowOnly, applyNetworkPolicy, proxyEnv } from './setup/network.js';
13
- import { writeManagedSettings } from './setup/policy.js';
14
- import { applyPersonalization, setupGitConfig } from './setup/user.js';
15
- import { ensurePtyHost } from './ptyhost.js';
16
- import { pruneToolLeftovers } from './toolchains/leftovers.js';
17
- import { wanted } from './toolchains/common.js';
18
- import { configureVscode } from './toolchains/vscode.js';
19
- import { enableProcessAudit } from './audit.js';
20
- import { now, readSession, writeJsonAtomic } from '../shared/rundir.js';
21
- import { viewSession } from './view.js';
5
+ import { setupToolchains } from '../toolchains/index.js';
6
+ import { provisionHarness, resolveLaunch } from '../agents/agent-installer.js';
7
+ import { restoreClaudeMem } from '../setup/claude-mem.js';
8
+ import { syncClaudeProfile } from '../setup/claude-profile.js';
9
+ import { agentEnv, persistEnvironment } from '../setup/environment.js';
10
+ import { runHooks } from '../setup/hooks.js';
11
+ import { applyAllowOnly, proxyEnv } from '../network/allow-only.js';
12
+ import { applyNetworkPolicy } from '../network/firewall.js';
13
+ import { writeManagedSettings } from '../setup/managed-policy.js';
14
+ import { applyPersonalization } from '../setup/desktop.js';
15
+ import { setupGitConfig } from '../setup/git-identity.js';
16
+ import { ensurePtyHost } from '../sessions/pty-host.js';
17
+ import { pruneToolLeftovers } from '../toolchains/leftovers.js';
18
+ import { wanted } from '../toolchains/detect.js';
19
+ import { configureVscode } from '../toolchains/tools/vscode.js';
20
+ import { enableProcessAudit } from '../audit/process-audit.js';
21
+ import { now } from '../../shared/channel/run-dir.js';
22
+ import { writeJsonAtomic } from '../../shared/io/json.js';
23
+ import { viewSession } from '../sessions/viewer.js';
22
24
  import { saveBootEnv } from './boot-env.js';
23
25
  import { primaryProject, saveProjectStatus } from './project-status.js';
24
- import { dataDir, dryRun, errMsg, isWin, localDir, log, logPath, logsDir, mkdirp, run, session, setSandboxStatus, toolsDir, warn, workspace } from './env.js';
26
+ import { dryRun, isWin, localDir, logsDir, run, toolsDir } from '../runtime/paths.js';
27
+ import { log, logPath, warn } from '../runtime/log.js';
28
+ import { mkdirp } from '../runtime/fs.js';
29
+ import { session, workspace } from '../runtime/session.js';
30
+ import { setSandboxStatus } from '../runtime/status.js';
31
+ import { errMsg } from '../../core/util/errors.js';
25
32
  const STEPS = 8;
26
33
  const step = (n, title) => {
27
34
  log('\n\x1b[36m[' + n + '/' + STEPS + '] ' + title + '\x1b[0m');
28
35
  // The host shows the short title ("Developer tools") with what is being set up in it.
29
- setSandboxStatus(n === 1 ? 'booting' : 'provisioning', '[' + n + '/' + STEPS + '] ' + title, { step: n, steps: STEPS, title: title.replace(/ \(.*\)$/, ''), active: [], done: 0, total: 0 });
36
+ setSandboxStatus(n === 1 ? 'booting' : 'provisioning', '[' + n + '/' + STEPS + '] ' + title, {
37
+ step: n,
38
+ steps: STEPS,
39
+ title: title.replace(/ \(.*\)$/, ''),
40
+ active: [],
41
+ done: 0,
42
+ total: 0,
43
+ });
44
+ };
45
+ const soft = async (what, work) => {
46
+ try {
47
+ await work();
48
+ }
49
+ catch (e) {
50
+ warn(what + ' failed (continuing): ' + errMsg(e));
51
+ }
30
52
  };
31
- const soft = async (what, work) => { try {
32
- await work();
33
- }
34
- catch (e) {
35
- warn(what + ' failed (continuing): ' + errMsg(e));
36
- } };
37
53
  const startDaemon = (env) => {
38
- spawn(process.execPath, [path.join(path.dirname(process.argv[1]), 'daemon.js')], { detached: true, stdio: 'ignore', windowsHide: true, env: { ...env, AGENT_LOG_PREFIX: 'daemon' } }).unref();
54
+ spawn(process.execPath, [path.join(path.dirname(process.argv[1]), 'daemon.js')], {
55
+ detached: true,
56
+ stdio: 'ignore',
57
+ windowsHide: true,
58
+ env: { ...env, AGENT_LOG_PREFIX: 'daemon' },
59
+ }).unref();
39
60
  };
40
- /** `sbx-db` for terminals and `sandbox db`: this boot's Node running runtime\db.js (on the sandbox's disk, rewritten each boot). */
61
+ /**
62
+ * `sbx-db` for terminals and `sandbox db`: this boot's Node running runtime\db.js (on the sandbox's disk, rewritten
63
+ * each boot).
64
+ */
41
65
  const writeDbCommand = () => {
42
66
  const dir = mkdirp(path.join(localDir, 'bin'));
43
67
  const db = path.join(path.dirname(process.argv[1]), 'db.js');
@@ -46,7 +70,7 @@ const writeDbCommand = () => {
46
70
  };
47
71
  const waitForPrimary = async () => {
48
72
  for (let i = 0; i < 600; i++) {
49
- const s = readSession(dataDir, session.launchId);
73
+ const s = run.readSession(session.launchId);
50
74
  if (s?.phase === 'running')
51
75
  return true;
52
76
  if (s?.phase === 'failed' || s?.phase === 'exited') {
@@ -57,18 +81,29 @@ const waitForPrimary = async () => {
57
81
  }
58
82
  return false;
59
83
  };
60
- const main = async () => {
61
- log('Agent sandbox: ' + session.project + ' | workspace ' + workspace + ' | agent ' + session.harnessName + ' | log ' + logPath);
84
+ export const runBoot = async () => {
85
+ log('Agent sandbox: ' +
86
+ session.project +
87
+ ' | workspace ' +
88
+ workspace +
89
+ ' | agent ' +
90
+ session.harnessName +
91
+ ' | log ' +
92
+ logPath);
62
93
  if (!fs.statSync(workspace, { throwIfNoEntry: false })?.isDirectory())
63
94
  throw new Error('Workspace folder is missing in the sandbox: ' + workspace);
64
95
  mkdirp(toolsDir);
65
- mkdirp(run.run);
96
+ mkdirp(run.root);
66
97
  step(1, 'Network and session host');
67
98
  let ptyHost = null;
68
99
  if (isWin && !dryRun && session.attach.enabled)
69
- await soft('Building the session host', () => { ptyHost = ensurePtyHost(); });
100
+ await soft('Building the session host', () => {
101
+ ptyHost = ensurePtyHost();
102
+ });
70
103
  let lan = session.networking ? 'open' : 'offline';
71
- await soft('Private-network blocking', async () => { lan = await applyNetworkPolicy(ptyHost); });
104
+ await soft('Private-network blocking', async () => {
105
+ lan = await applyNetworkPolicy(ptyHost);
106
+ });
72
107
  await soft('Audit', enableProcessAudit);
73
108
  step(2, 'Pre-provision hooks and desktop');
74
109
  runHooks('pre-provision', process.env);
@@ -77,18 +112,30 @@ const main = async () => {
77
112
  step(3, 'Developer tools (the first start downloads them once; later starts are quick)');
78
113
  const basePath = process.env.PATH ?? '';
79
114
  const tools = await setupToolchains(session.toolchains, session.versions, {
80
- gitEnabled: session.provisioning.git.enabled, gitAccess, hostGit: session.hostTools.git, refresh: session.provisioning.refresh, databases: session.databases ?? [], apps: session.apps,
115
+ gitEnabled: session.provisioning.git.enabled,
116
+ gitAccess,
117
+ hostGit: session.hostTools.git,
118
+ refresh: session.provisioning.refresh,
119
+ databases: session.databases ?? [],
120
+ apps: session.apps,
81
121
  });
82
122
  if (!dryRun)
83
123
  tools.prepend.push(writeDbCommand());
84
124
  // network.allowOnly / network.proxy: everything started from now on uses the proxy.
85
125
  Object.assign(tools.vars, proxyEnv());
86
- await soft('Network: allow only some hosts', async () => { if (await applyAllowOnly())
87
- tools.summary.push('network: only network.allowOnly hosts (refused: logs\\netproxy.log)'); });
126
+ await soft('Network: allow only some hosts', async () => {
127
+ if (await applyAllowOnly())
128
+ tools.summary.push('network: only network.allowOnly hosts (refused: logs\\netproxy.log)');
129
+ });
88
130
  const vscode = session.toolchains.vscode;
89
131
  if (vscode.enabled && vscode.setup !== false) {
90
132
  const languages = ['python', 'java', 'go', 'rust', 'cpp', 'msvc', 'dotnet', 'ruby', 'php', 'deno', 'pwsh'].filter((t) => wanted(session.toolchains[t]?.enabled ?? false, t));
91
- await soft('VS Code setup', () => configureVscode(tools, { toolchains: ['node', ...languages], databases: (session.databases ?? []).map((d) => d.database), config: vscode, workspace }));
133
+ await soft('VS Code setup', () => configureVscode(tools, {
134
+ toolchains: ['node', ...languages],
135
+ databases: (session.databases ?? []).map((d) => d.database),
136
+ config: vscode,
137
+ workspace,
138
+ }));
92
139
  }
93
140
  const env = agentEnv(tools);
94
141
  persistEnvironment(env, Object.keys(tools.vars));
@@ -121,12 +168,22 @@ const main = async () => {
121
168
  }
122
169
  if (dryRun) {
123
170
  const launch = resolveLaunch(session.harnessName, session.harness);
124
- log('(dry run) would run: ' + [launch.file, ...launch.args, ...session.harness.arguments, ...session.harnessArguments].join(' ') + ' | cwd=' + workspace);
171
+ log('(dry run) would run: ' +
172
+ [launch.file, ...launch.args, ...session.harness.arguments, ...session.harnessArguments].join(' ') +
173
+ ' | cwd=' +
174
+ workspace);
125
175
  runHooks('post-agent', env);
126
176
  return;
127
177
  }
128
178
  startDaemon(env);
129
- writeJsonAtomic(run.request(session.launchId), { kind: 'session', id: session.launchId, harness: session.harnessName, args: session.harnessArguments, cwd: workspace, createdAt: now() });
179
+ writeJsonAtomic(run.requestFile(session.launchId), {
180
+ kind: 'session',
181
+ id: session.launchId,
182
+ harness: session.harnessName,
183
+ args: session.harnessArguments,
184
+ cwd: workspace,
185
+ createdAt: now(),
186
+ });
130
187
  if (!(await waitForPrimary()))
131
188
  throw new Error('The agent session did not start. Logs: ' + logsDir);
132
189
  log('If Claude asks you to sign in, do it once; the login is saved in persistent storage.');
@@ -134,14 +191,3 @@ const main = async () => {
134
191
  await viewSession(session.launchId);
135
192
  log('\nThis window stays open in ' + workspace + '. Other sessions keep running in their own tabs.');
136
193
  };
137
- main().catch((e) => {
138
- const message = errMsg(e) + (e instanceof Error && e.stack ? '\n' + e.stack : '');
139
- try {
140
- setSandboxStatus('failed', errMsg(e));
141
- fs.writeFileSync(path.join(logsDir, 'guest-error.txt'), message);
142
- }
143
- catch { /* ignore */ }
144
- // The window gets the plain message; the stack trace is in guest-error.txt.
145
- console.error('\n\x1b[31mThe sandbox could not start: ' + errMsg(e) + '\x1b[0m\nDetails: ' + path.join(logsDir, 'guest-error.txt'));
146
- process.exitCode = 1;
147
- });
@@ -2,7 +2,8 @@
2
2
  // global instructions: Claude's CLAUDE.md and Codex's AGENTS.md inside the sandbox. It never travels back to this PC.
3
3
  import fs from 'node:fs';
4
4
  import path from 'node:path';
5
- import { claudeDir, dataDir, launchDir, session, stateDir, toolsDir, workspace } from './env.js';
5
+ import { claudeDir, session, stateDir, workspace } from '../runtime/session.js';
6
+ import { dataDir, launchDir, toolsDir } from '../runtime/paths.js';
6
7
  const BEGIN = '<!-- agent-sandbox:begin (generated every boot, do not edit) -->';
7
8
  const END = '<!-- agent-sandbox:end -->';
8
9
  /** Drives other than C: are subst drives onto C:\Mirror\<letter> (mapped folders shown at their PC paths). */
@@ -11,7 +12,13 @@ const mirrorLine = () => {
11
12
  const drives = (session.substDrives ?? []).filter((d) => fs.existsSync(d.letter + ':\\'));
12
13
  if (!drives.length)
13
14
  return [];
14
- return ['- ' + drives.map((d) => d.letter + ':').join(', ') + ' = mapped folders at their PC paths (subst onto `' + drives.map((d) => d.target).join('`, `') + '`; real-path tools may print that form).'];
15
+ return [
16
+ '- ' +
17
+ drives.map((d) => d.letter + ':').join(', ') +
18
+ ' = mapped folders at their PC paths (subst onto `' +
19
+ drives.map((d) => d.target).join('`, `') +
20
+ '`; real-path tools may print that form).',
21
+ ];
15
22
  };
16
23
  export const sandboxGuide = (toolSummary, lan = 'blocked', projects = []) => [
17
24
  BEGIN,
@@ -19,15 +26,33 @@ export const sandboxGuide = (toolSummary, lan = 'blocked', projects = []) => [
19
26
  'Wiped on close: everything except the paths below (installers, winget/choco, C:\\Users, Program Files, registry).',
20
27
  '- RW, persists: `' + workspace + '` = host folder ' + session.workspaceHost,
21
28
  // Projects started from other folders while this sandbox runs: every agent here can see them.
22
- ...projects.map((p) => '- RW, persists: `' + p.guest + '` = host folder ' + p.host + ' (another project in this sandbox; your own is `%AGENT_WORKSPACE%`)'),
23
- '- RW, persists: `' + toolsDir + '` (toolchains) — put portable exes in `' + path.join(toolsDir, 'bin') + '` (on PATH)',
24
- '- RW, persists: `' + stateDir + '` (agent config/history; do not edit logins) · logs: `' + path.join(dataDir, 'logs') + '`',
25
- '- RO: `' + launchDir + '` (this boot\'s scripts) · lost on close: everything else, incl. `C:\\nvm` (Node symlink)',
29
+ ...projects.map((p) => '- RW, persists: `' +
30
+ p.guest +
31
+ '` = host folder ' +
32
+ p.host +
33
+ ' (another project in this sandbox; your own is `%AGENT_WORKSPACE%`)'),
34
+ '- RW, persists: `' +
35
+ toolsDir +
36
+ '` (toolchains) — put portable exes in `' +
37
+ path.join(toolsDir, 'bin') +
38
+ '` (on PATH)',
39
+ '- RW, persists: `' +
40
+ stateDir +
41
+ '` (agent config/history; do not edit logins) · logs: `' +
42
+ path.join(dataDir, 'logs') +
43
+ '`',
44
+ '- RO: `' + launchDir + "` (this boot's scripts) · lost on close: everything else, incl. `C:\\nvm` (Node symlink)",
26
45
  ...mirrorLine(),
27
46
  '- Tools: ' + toolSummary.join(' · '),
28
47
  '- 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).',
29
48
  '- Mapped folders (workspace, C:\\AgentData) allow NO symlinks or junctions: pnpm runs hoisted (set), npm workspaces / `file:` deps and deno node_modules dirs fail there (use a folder on C:\\ outside them), bun cannot save its lockfile there (`bun install --no-save`).',
30
- '- Network: ' + (lan === 'offline' ? 'OFF' : lan === 'blocked' ? 'internet yes, host LAN blocked' : 'internet yes, host LAN NOT blocked this time') + '. Other sessions may share this workspace; the user may be typing from the host.',
49
+ '- Network: ' +
50
+ (lan === 'offline'
51
+ ? 'OFF'
52
+ : lan === 'blocked'
53
+ ? 'internet yes, host LAN blocked'
54
+ : 'internet yes, host LAN NOT blocked this time') +
55
+ '. Other sessions may share this workspace; the user may be typing from the host.',
31
56
  END,
32
57
  ].join('\n');
33
58
  /** Inserts or replaces the generated section, keeping whatever else the file contains (the host's CLAUDE.md). */
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- export declare const BootEnv: z.ZodObject<{
2
+ export declare const BootEnvSchema: z.ZodObject<{
3
3
  basePath: z.ZodString;
4
4
  toolVars: z.ZodArray<z.ZodString>;
5
5
  steps: z.ZodRecord<z.ZodString, z.ZodObject<{
@@ -15,6 +15,6 @@ export declare const BootEnv: z.ZodObject<{
15
15
  offline: "offline";
16
16
  }>;
17
17
  }, z.core.$strip>;
18
- export type BootEnvT = z.output<typeof BootEnv>;
18
+ export type BootEnv = z.output<typeof BootEnvSchema>;
19
19
  /** The environment a later project starts from: the daemon's own, without the boot project's toolchains. */
20
- export declare const baseEnvFor: (boot: BootEnvT | null, current?: NodeJS.ProcessEnv) => NodeJS.ProcessEnv;
20
+ export declare const baseEnvFor: (boot: BootEnv | null, current?: NodeJS.ProcessEnv) => NodeJS.ProcessEnv;
@@ -1,11 +1,19 @@
1
1
  // Pure (no guest state): the environment a project that joined after boot starts from. Kept apart from boot-env.ts,
2
2
  // which reads the guest's session, so the host-side tests can import it.
3
3
  import { z } from 'zod';
4
- const Env = z.object({ vars: z.record(z.string(), z.string()), prepend: z.array(z.string()), append: z.array(z.string()), summary: z.array(z.string()) });
5
- export const BootEnv = z.object({
6
- basePath: z.string(), toolVars: z.array(z.string()), steps: z.record(z.string(), Env),
4
+ const EnvSchema = z.object({
5
+ vars: z.record(z.string(), z.string()),
6
+ prepend: z.array(z.string()),
7
+ append: z.array(z.string()),
8
+ summary: z.array(z.string()),
9
+ });
10
+ export const BootEnvSchema = z.object({
11
+ basePath: z.string(),
12
+ toolVars: z.array(z.string()),
13
+ steps: z.record(z.string(), EnvSchema),
7
14
  /** The boot's tool summary and LAN state, for the agent guide that lists every project. */
8
- summary: z.array(z.string()), lan: z.enum(['blocked', 'open', 'offline']),
15
+ summary: z.array(z.string()),
16
+ lan: z.enum(['blocked', 'open', 'offline']),
9
17
  });
10
18
  /** Variables the boot set for its own project (its workspace, its toolchains): never inherited by another project. */
11
19
  const PROJECT_VARS = /^(AGENT_WORKSPACE|AGENT_PROJECT|AGENT_SANDBOX_WORKSPACE|AGENT_PROJECT_FILE|CARGO_TARGET_DIR|VIRTUAL_ENV)$/i;
@@ -0,0 +1,5 @@
1
+ import type { DatabasePlan } from '../../core/types.js';
2
+ import type { ProjectStatus } from '../../shared/channel/schema.js';
3
+ /** The launch folder's project id (older launch folders: derived from its name). */
4
+ export declare const primaryProject: () => string;
5
+ export declare const saveProjectStatus: (name: string, workspace: string, phase: ProjectStatus["phase"], message: string, databases: DatabasePlan[], summary: string[]) => void;
@@ -0,0 +1,28 @@
1
+ import { now } from '../../shared/channel/run-dir.js';
2
+ import { writeJsonAtomic } from '../../shared/io/json.js';
3
+ import { hubName } from '../../shared/paths/projects.js';
4
+ import { run } from '../runtime/paths.js';
5
+ import { session } from '../runtime/session.js';
6
+ import { warn } from '../runtime/log.js';
7
+ import { errMsg } from '../../core/util/errors.js';
8
+ /** The launch folder's project id (older launch folders: derived from its name). */
9
+ export const primaryProject = () => session.projectId ?? hubName(session.workspaceHost || session.project, []);
10
+ export const saveProjectStatus = (name, workspace, phase, message, databases, summary) => {
11
+ try {
12
+ writeJsonAtomic(run.projectFile(name), {
13
+ name,
14
+ workspace,
15
+ phase,
16
+ message: message.slice(0, 3500),
17
+ updatedAt: now(),
18
+ databases: databases
19
+ .filter((d) => d.database !== 'sqlserver')
20
+ .slice(0, 16)
21
+ .map((d) => ({ database: d.database, port: d.port })),
22
+ summary: summary.slice(0, 64).map((s) => s.slice(0, 500)),
23
+ });
24
+ }
25
+ catch (e) {
26
+ warn('Could not write the status of project ' + name + ': ' + errMsg(e));
27
+ }
28
+ };
@@ -0,0 +1 @@
1
+ export declare const loop: () => void;
@@ -0,0 +1,51 @@
1
+ import fs from 'node:fs';
2
+ import { saveClaudeMem } from '../setup/claude-mem.js';
3
+ import { execCommand } from './exec.js';
4
+ import { prepareProject, restartSessions, startSession } from './sessions.js';
5
+ import { live, respond, safely } from './state.js';
6
+ import { run } from '../runtime/paths.js';
7
+ import { warn } from '../runtime/log.js';
8
+ import { errMsg } from '../../core/util/errors.js';
9
+ let lastMemSave = Date.now();
10
+ const handle = (req) => {
11
+ switch (req.kind) {
12
+ case 'session':
13
+ return startSession(req);
14
+ case 'project':
15
+ return prepareProject(req);
16
+ case 'exec':
17
+ return execCommand(req);
18
+ case 'restart':
19
+ return restartSessions(req);
20
+ case 'ping':
21
+ return respond(req.id, { ok: true, message: 'pong (' + live.size + ' session(s) running)' });
22
+ }
23
+ };
24
+ const tick = () => {
25
+ const { valid, invalid } = run.scanRequests();
26
+ // Anything in requests/ that is not a valid request (wrong kind, bad id, junk) is deleted unread.
27
+ for (const file of invalid)
28
+ safely('removing an invalid request', () => fs.rmSync(file, { recursive: true, force: true }));
29
+ for (const req of valid) {
30
+ safely('claiming a request', () => fs.rmSync(run.requestFile(req.id), { force: true }));
31
+ if (run.readSession(req.id))
32
+ continue;
33
+ // Not awaited: starting a session or running a command must not hold up other requests.
34
+ void Promise.resolve(handle(req)).catch((e) => respond(req.id, { ok: false, message: errMsg(e) }));
35
+ }
36
+ if (Date.now() - lastMemSave > 120000) {
37
+ lastMemSave = Date.now();
38
+ safely('claude-mem save', saveClaudeMem);
39
+ }
40
+ };
41
+ export const loop = () => {
42
+ try {
43
+ tick();
44
+ }
45
+ catch (e) {
46
+ warn('daemon loop: ' + errMsg(e));
47
+ }
48
+ finally {
49
+ setTimeout(loop, 400);
50
+ }
51
+ };
@@ -1,8 +1,9 @@
1
1
  // `exec` requests: a command run for the host in the workspace.
2
2
  import { spawn } from 'node:child_process';
3
3
  import { SYSTEM } from '../../shared/system.js';
4
- import { errMsg, exists } from '../env.js';
5
- import { provisionedFor } from './project.js';
4
+ import { exists } from '../runtime/fs.js';
5
+ import { errMsg } from '../../core/util/errors.js';
6
+ import { provisionedFor } from './project-provisioner.js';
6
7
  import { insideWorkspace, respond } from './state.js';
7
8
  const MAX_OUTPUT = 1024 * 1024;
8
9
  const quoteForCmd = (a) => (/[\s"&|<>^]/.test(a) ? '"' + a.replace(/"/g, '""') + '"' : a);
@@ -19,14 +20,25 @@ export const execCommand = (req) => {
19
20
  const child = spawn(SYSTEM.cmd(), ['/d', '/s', '/c', '"chcp 65001>nul & ' + req.command.map(quoteForCmd).join(' ') + '"'], { cwd: req.cwd, env, windowsHide: true, windowsVerbatimArguments: true });
20
21
  const output = { stdout: '', stderr: '' };
21
22
  // setEncoding decodes across chunks: a multi-byte character split between two reads is not mangled.
22
- const collect = (key) => (d) => { if (output[key].length < MAX_OUTPUT)
23
- output[key] += d; };
23
+ const collect = (key) => (d) => {
24
+ if (output[key].length < MAX_OUTPUT)
25
+ output[key] += d;
26
+ };
24
27
  child.stdout.setEncoding('utf8').on('data', collect('stdout'));
25
28
  child.stderr.setEncoding('utf8').on('data', collect('stderr'));
26
29
  const timer = setTimeout(() => child.kill(), Math.min(req.timeoutSeconds, 3600) * 1000);
27
- child.on('error', (e) => { clearTimeout(timer); respond(req.id, { ok: false, message: 'Could not run the command: ' + errMsg(e) }); });
30
+ child.on('error', (e) => {
31
+ clearTimeout(timer);
32
+ respond(req.id, { ok: false, message: 'Could not run the command: ' + errMsg(e) });
33
+ });
28
34
  child.on('close', (code) => {
29
35
  clearTimeout(timer);
30
- respond(req.id, { ok: code === 0, message: code === null ? 'stopped after ' + req.timeoutSeconds + ' s' : 'exit ' + code, exitCode: code ?? -1, stdout: cap(output.stdout), stderr: cap(output.stderr) });
36
+ respond(req.id, {
37
+ ok: code === 0,
38
+ message: code === null ? 'stopped after ' + req.timeoutSeconds + ' s' : 'exit ' + code,
39
+ exitCode: code ?? -1,
40
+ stdout: cap(output.stdout),
41
+ stderr: cap(output.stderr),
42
+ });
31
43
  });
32
44
  };
@@ -1,14 +1,15 @@
1
1
  // A headless sandbox with nothing running (or starting) only wastes RAM, so it shuts itself down.
2
2
  import { spawnSync } from 'node:child_process';
3
3
  import { SYSTEM } from '../../shared/system.js';
4
- import { scanRequests } from '../../shared/rundir.js';
5
- import { saveClaudeMem } from '../setup/claude.js';
6
- import { dataDir, isWin, log, session } from '../env.js';
4
+ import { saveClaudeMem } from '../setup/claude-mem.js';
5
+ import { isWin, run } from '../runtime/paths.js';
6
+ import { log } from '../runtime/log.js';
7
+ import { session } from '../runtime/session.js';
7
8
  import { live, pending, safely } from './state.js';
8
9
  export const maybeShutdown = () => {
9
10
  if (!session.headless || !isWin)
10
11
  return;
11
- const idle = () => live.size === 0 && pending.starting === 0 && scanRequests(dataDir).valid.length === 0;
12
+ const idle = () => live.size === 0 && pending.starting === 0 && run.scanRequests().valid.length === 0;
12
13
  if (!idle())
13
14
  return;
14
15
  setTimeout(() => {
@@ -1,6 +1,6 @@
1
- import type { ProjectSpecT } from '../../shared/schema.js';
1
+ import type { ProjectSpec } from '../../shared/channel/schema.js';
2
2
  export interface Provisioned {
3
- spec: ProjectSpecT;
3
+ spec: ProjectSpec;
4
4
  env: NodeJS.ProcessEnv;
5
5
  summary: string[];
6
6
  }
@@ -11,4 +11,4 @@ export declare const provisionedProjects: () => Provisioned[];
11
11
  * Provisions a project (or joins the run already doing it: two sessions requested at once wait for the same one).
12
12
  * `say` gets the progress lines.
13
13
  */
14
- export declare const provisionProject: (spec: ProjectSpecT, say: (message: string) => void) => Promise<Provisioned>;
14
+ export declare const provisionProject: (spec: ProjectSpec, say: (message: string) => void) => Promise<Provisioned>;
@@ -6,28 +6,38 @@
6
6
  // variables only added, never replaced). A failure is that project's alone.
7
7
  import fs from 'node:fs';
8
8
  import path from 'node:path';
9
- import { isWithin } from '../../shared/projects.js';
9
+ import { isWithin } from '../../shared/paths/projects.js';
10
10
  import { insideWorkspace } from './state.js';
11
- import { baseEnvFor, readBootEnv } from '../boot-env.js';
12
- import { dryRun, errMsg, exists, localDir, log, mkdirp, session, warn } from '../env.js';
13
- import { writeGuides } from '../guide.js';
14
- import { withProject } from '../project-context.js';
15
- import { saveProjectStatus } from '../project-status.js';
11
+ import { baseEnvFor, readBootEnv } from '../boot/boot-env.js';
12
+ import { dryRun, localDir } from '../runtime/paths.js';
13
+ import { exists, mkdirp } from '../runtime/fs.js';
14
+ import { log, warn } from '../runtime/log.js';
15
+ import { session } from '../runtime/session.js';
16
+ import { errMsg } from '../../core/util/errors.js';
17
+ import { writeGuides } from '../boot/guide.js';
18
+ import { withProject } from '../runtime/project-context.js';
19
+ import { saveProjectStatus } from '../boot/project-status.js';
16
20
  import { addMachineEnvironment, agentEnv } from '../setup/environment.js';
17
21
  import { projectHooks, runHooksAsync } from '../setup/hooks.js';
18
22
  import { setupToolchains } from '../toolchains/index.js';
19
- /** By project name (lower case). The same spec again is free; a changed one (its config was edited) provisions again. */
23
+ /**
24
+ * By project name (lower case). The same spec again is free; a changed one (its config was edited) provisions again.
25
+ */
20
26
  const projects = new Map();
21
27
  /** The last finished provisioning of each project (kept while a changed spec provisions again). */
22
28
  const ready = new Map();
23
29
  /** The provisioned project containing this folder, if any (exec in its folders uses its environment). */
24
- export const provisionedFor = (cwd) => [...ready.values()].filter((p) => isWithin(p.spec.workspace, cwd)).sort((a, b) => b.spec.workspace.length - a.spec.workspace.length)[0] ?? null;
30
+ export const provisionedFor = (cwd) => [...ready.values()]
31
+ .filter((p) => isWithin(p.spec.workspace, cwd))
32
+ .sort((a, b) => b.spec.workspace.length - a.spec.workspace.length)[0] ?? null;
25
33
  export const provisionedProjects = () => [...ready.values()];
26
34
  /** `set` lines for a .cmd file. Values are quoted; a value with a line break cannot be set this way and is left out. */
27
- const cmdSet = (env, names) => names.filter((n) => env[n] !== undefined && !/[\r\n]/.test(String(env[n]))).map((n) => '@set "' + n + '=' + String(env[n]).replace(/%/g, '%%') + '"');
35
+ const cmdSet = (env, names) => names
36
+ .filter((n) => env[n] !== undefined && !/[\r\n]/.test(String(env[n])))
37
+ .map((n) => '@set "' + n + '=' + String(env[n]).replace(/%/g, '%%') + '"');
28
38
  /**
29
- * A terminal for the project inside the sandbox: `sbx-shell <name>` (from any terminal tab) opens cmd in its folder with
30
- * its environment. Written to the sandbox's own disk.
39
+ * A terminal for the project inside the sandbox: `sbx-shell <name>` (from any terminal tab) opens cmd in its folder
40
+ * with its environment. Written to the sandbox's own disk.
31
41
  */
32
42
  const writeShell = (spec, env, names) => {
33
43
  const dir = mkdirp(path.join(localDir, 'projects', spec.name));
@@ -35,8 +45,12 @@ const writeShell = (spec, env, names) => {
35
45
  fs.writeFileSync(path.join(dir, 'shell.cmd'), ['@call "' + path.join(dir, 'env.cmd') + '"', '@cd /d "' + spec.workspace + '"', '@title ' + spec.name, ''].join('\r\n'));
36
46
  const bin = mkdirp(path.join(localDir, 'bin'));
37
47
  fs.writeFileSync(path.join(bin, 'sbx-shell.cmd'), [
38
- '@if "%~1"=="" (echo Usage: sbx-shell ^<project^> ^(a terminal in that project with its tools^) & dir /b "' + path.join(localDir, 'projects') + '" & exit /b 2)',
39
- '@if not exist "' + path.join(localDir, 'projects') + '\\%~1\\shell.cmd" (echo No project %~1 in this sandbox. & exit /b 2)',
48
+ '@if "%~1"=="" (echo Usage: sbx-shell ^<project^> ^(a terminal in that project with its tools^) & dir /b "' +
49
+ path.join(localDir, 'projects') +
50
+ '" & exit /b 2)',
51
+ '@if not exist "' +
52
+ path.join(localDir, 'projects') +
53
+ '\\%~1\\shell.cmd" (echo No project %~1 in this sandbox. & exit /b 2)',
40
54
  '@cmd /k ""' + path.join(localDir, 'projects') + '\\%~1\\shell.cmd""',
41
55
  '',
42
56
  ].join('\r\n'));
@@ -59,7 +73,11 @@ const refreshGuide = async () => {
59
73
  };
60
74
  const provision = async (spec, say) => {
61
75
  if (!insideWorkspace(spec.workspace) || !exists(spec.workspace)) {
62
- throw new Error('Project folder ' + spec.workspace + ' (' + spec.workspaceHost + ') is not visible inside the sandbox. Stop the sandbox (sandbox stop) and start it from that folder, or add its parent folder to projects.roots.');
76
+ throw new Error('Project folder ' +
77
+ spec.workspace +
78
+ ' (' +
79
+ spec.workspaceHost +
80
+ ') is not visible inside the sandbox. Stop the sandbox (sandbox stop) and start it from that folder, or add its parent folder to projects.roots.');
63
81
  }
64
82
  saveProjectStatus(spec.name, spec.workspace, 'provisioning', 'Setting up ' + spec.name, spec.databases, []);
65
83
  log('Project ' + spec.name + ': setting up ' + spec.workspace + ' (' + spec.workspaceHost + ')');
@@ -77,7 +95,13 @@ const provision = async (spec, say) => {
77
95
  hostGit: session.hostTools.git,
78
96
  refresh: false,
79
97
  databases: spec.databases,
80
- }, { report: (m) => { saveProjectStatus(spec.name, spec.workspace, 'provisioning', m, spec.databases, []); say(m); }, reuse: boot?.steps }));
98
+ }, {
99
+ report: (m) => {
100
+ saveProjectStatus(spec.name, spec.workspace, 'provisioning', m, spec.databases, []);
101
+ say(m);
102
+ },
103
+ reuse: boot?.steps,
104
+ }));
81
105
  tools.prepend.push(path.join(localDir, 'bin'));
82
106
  const env = agentEnv(tools, { workspace: spec.workspace, project: spec.name, base });
83
107
  const specFile = path.join(mkdirp(path.join(localDir, 'projects', spec.name)), 'project.json');
@@ -86,7 +110,13 @@ const provision = async (spec, say) => {
86
110
  // New terminal tabs see the new tools too, after everything the boot project has (never in place of it).
87
111
  addMachineEnvironment(tools.vars, [...tools.prepend, ...tools.append], true);
88
112
  try {
89
- writeShell(spec, env, [...Object.keys(tools.vars), 'AGENT_WORKSPACE', 'AGENT_PROJECT', 'AGENT_SANDBOX_WORKSPACE', 'AGENT_PROJECT_FILE']);
113
+ writeShell(spec, env, [
114
+ ...Object.keys(tools.vars),
115
+ 'AGENT_WORKSPACE',
116
+ 'AGENT_PROJECT',
117
+ 'AGENT_SANDBOX_WORKSPACE',
118
+ 'AGENT_PROJECT_FILE',
119
+ ]);
90
120
  }
91
121
  catch (e) {
92
122
  warn('sbx-shell for ' + spec.name + ': ' + errMsg(e));
@@ -113,15 +143,23 @@ export const provisionProject = (spec, say) => {
113
143
  return known.work.finally(() => known.listeners.delete(say));
114
144
  }
115
145
  const listeners = new Set([say]);
116
- const broadcast = (message) => { for (const l of listeners)
117
- try {
118
- l(message);
119
- }
120
- catch { /* a listener's write failing never stops provisioning */ } };
146
+ const broadcast = (message) => {
147
+ for (const l of listeners)
148
+ try {
149
+ l(message);
150
+ }
151
+ catch {
152
+ /* a listener's write failing never stops provisioning */
153
+ }
154
+ };
121
155
  const work = provision(spec, broadcast);
122
156
  const entry = { key, work, listeners };
123
157
  projects.set(id, entry);
124
- work.then((done) => { entry.done = done; ready.set(id, done); return refreshGuide(); }, (e) => {
158
+ work.then((done) => {
159
+ entry.done = done;
160
+ ready.set(id, done);
161
+ return refreshGuide();
162
+ }, (e) => {
125
163
  warn('Project ' + spec.name + ' could not be set up: ' + errMsg(e));
126
164
  saveProjectStatus(spec.name, spec.workspace, 'failed', errMsg(e), spec.databases, []);
127
165
  // The next session for it tries again.