windows-development-sandbox 1.4.1 → 1.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (872) hide show
  1. package/config.example.json +3 -1
  2. package/dist/api.js +27 -16
  3. package/dist/cli/args.d.ts +4 -6
  4. package/dist/cli/args.js +67 -34
  5. package/dist/cli/argv.d.ts +9 -0
  6. package/dist/cli/argv.js +22 -0
  7. package/dist/cli/commands/accounts.d.ts +1 -1
  8. package/dist/cli/commands/accounts.js +42 -27
  9. package/dist/cli/commands/agent-commands.d.ts +3 -3
  10. package/dist/cli/commands/agent-commands.js +27 -18
  11. package/dist/cli/commands/context.d.ts +9 -11
  12. package/dist/cli/commands/context.js +35 -32
  13. package/dist/cli/commands/data/clean.d.ts +2 -2
  14. package/dist/cli/commands/data/clean.js +27 -11
  15. package/dist/cli/commands/data/collect.d.ts +6 -3
  16. package/dist/cli/commands/data/collect.js +46 -15
  17. package/dist/cli/commands/data/index.d.ts +2 -2
  18. package/dist/cli/commands/data/index.js +30 -12
  19. package/dist/cli/commands/data/remove.d.ts +1 -1
  20. package/dist/cli/commands/data/remove.js +4 -4
  21. package/dist/cli/commands/index.d.ts +5 -4
  22. package/dist/cli/commands/index.js +5 -4
  23. package/dist/cli/commands/launch/add-root.d.ts +7 -0
  24. package/dist/cli/commands/launch/add-root.js +64 -0
  25. package/dist/cli/commands/launch/boot-progress.d.ts +7 -0
  26. package/dist/cli/commands/launch/boot-progress.js +48 -0
  27. package/dist/cli/commands/launch/boot-wants.d.ts +11 -0
  28. package/dist/cli/commands/launch/boot-wants.js +48 -0
  29. package/dist/cli/commands/launch/first-start.d.ts +10 -0
  30. package/dist/cli/commands/launch/first-start.js +53 -0
  31. package/dist/cli/commands/launch/index.d.ts +6 -0
  32. package/dist/cli/commands/launch/index.js +6 -0
  33. package/dist/cli/commands/launch/launch.d.ts +8 -0
  34. package/dist/cli/commands/launch/launch.js +211 -0
  35. package/dist/cli/commands/launch/prepare.d.ts +23 -0
  36. package/dist/cli/commands/launch/prepare.js +109 -0
  37. package/dist/cli/commands/launch/running.d.ts +45 -0
  38. package/dist/cli/commands/launch/running.js +218 -0
  39. package/dist/cli/commands/launch/summary.d.ts +8 -0
  40. package/dist/cli/commands/launch/summary.js +98 -0
  41. package/dist/cli/commands/maintenance/audit.d.ts +3 -0
  42. package/dist/cli/commands/maintenance/audit.js +58 -0
  43. package/dist/cli/commands/maintenance/clean.d.ts +2 -0
  44. package/dist/cli/commands/maintenance/clean.js +10 -0
  45. package/dist/cli/commands/maintenance/config.d.ts +2 -0
  46. package/dist/cli/commands/maintenance/config.js +145 -0
  47. package/dist/cli/commands/maintenance/doctor.d.ts +2 -0
  48. package/dist/cli/commands/maintenance/doctor.js +52 -0
  49. package/dist/cli/commands/maintenance/host-claude.d.ts +2 -0
  50. package/dist/cli/commands/maintenance/host-claude.js +4 -0
  51. package/dist/cli/commands/maintenance/index.d.ts +8 -0
  52. package/dist/cli/commands/maintenance/index.js +9 -0
  53. package/dist/cli/commands/maintenance/logs.d.ts +2 -0
  54. package/dist/cli/commands/maintenance/logs.js +44 -0
  55. package/dist/cli/commands/maintenance/sync.d.ts +2 -0
  56. package/dist/cli/commands/maintenance/sync.js +12 -0
  57. package/dist/cli/commands/maintenance/watch.d.ts +3 -0
  58. package/dist/cli/commands/maintenance/watch.js +6 -0
  59. package/dist/cli/commands/projects/describe-sessions.d.ts +3 -0
  60. package/dist/cli/commands/projects/describe-sessions.js +15 -0
  61. package/dist/cli/commands/projects/here.d.ts +38 -0
  62. package/dist/cli/commands/projects/here.js +145 -0
  63. package/dist/cli/commands/projects/index.d.ts +4 -0
  64. package/dist/cli/commands/projects/index.js +4 -0
  65. package/dist/cli/commands/projects/projects.d.ts +14 -0
  66. package/dist/cli/commands/projects/projects.js +213 -0
  67. package/dist/cli/commands/projects/restart.d.ts +15 -0
  68. package/dist/cli/commands/projects/restart.js +149 -0
  69. package/dist/cli/commands/registry.d.ts +3 -0
  70. package/dist/cli/commands/registry.js +34 -0
  71. package/dist/cli/commands/repair/checks.js +105 -29
  72. package/dist/cli/commands/repair/finders.d.ts +13 -10
  73. package/dist/cli/commands/repair/finders.js +63 -43
  74. package/dist/cli/commands/repair/index.d.ts +4 -4
  75. package/dist/cli/commands/repair/index.js +47 -21
  76. package/dist/cli/commands/repair/types.d.ts +2 -2
  77. package/dist/cli/commands/repair/types.js +7 -2
  78. package/dist/cli/commands/sessions/attach.d.ts +2 -0
  79. package/dist/cli/commands/sessions/attach.js +45 -0
  80. package/dist/cli/commands/sessions/control.d.ts +4 -0
  81. package/dist/cli/commands/sessions/control.js +62 -0
  82. package/dist/cli/commands/sessions/exec.d.ts +6 -0
  83. package/dist/cli/commands/sessions/exec.js +72 -0
  84. package/dist/cli/commands/sessions/index.d.ts +6 -0
  85. package/dist/cli/commands/sessions/index.js +9 -0
  86. package/dist/cli/commands/sessions/list.d.ts +15 -0
  87. package/dist/cli/commands/sessions/list.js +65 -0
  88. package/dist/cli/commands/sessions/status.d.ts +2 -0
  89. package/dist/cli/commands/sessions/status.js +153 -0
  90. package/dist/cli/commands/sessions/window.d.ts +3 -0
  91. package/dist/cli/commands/sessions/window.js +18 -0
  92. package/dist/cli/commands/setup/checks.d.ts +4 -4
  93. package/dist/cli/commands/setup/checks.js +36 -19
  94. package/dist/cli/commands/setup/facts.d.ts +6 -6
  95. package/dist/cli/commands/setup/facts.js +23 -11
  96. package/dist/cli/commands/setup/index.d.ts +1 -1
  97. package/dist/cli/commands/setup/index.js +25 -12
  98. package/dist/cli/commands/user-config.d.ts +5 -5
  99. package/dist/cli/commands/user-config.js +14 -12
  100. package/dist/cli/history.d.ts +5 -4
  101. package/dist/cli/history.js +23 -11
  102. package/dist/cli/index.d.ts +4 -14
  103. package/dist/cli/index.js +27 -77
  104. package/dist/cli/manifest.d.ts +464 -10
  105. package/dist/cli/manifest.js +327 -53
  106. package/dist/cli/menu/apps.d.ts +7 -5
  107. package/dist/cli/menu/apps.js +64 -16
  108. package/dist/cli/menu/command-fields.d.ts +15 -0
  109. package/dist/cli/menu/command-fields.js +23 -0
  110. package/dist/cli/menu/command-form.d.ts +3 -5
  111. package/dist/cli/menu/command-form.js +116 -48
  112. package/dist/cli/menu/home.d.ts +22 -0
  113. package/dist/cli/menu/home.js +72 -0
  114. package/dist/cli/menu/index.d.ts +2 -24
  115. package/dist/cli/menu/index.js +4 -178
  116. package/dist/cli/menu/menu.d.ts +23 -0
  117. package/dist/cli/menu/menu.js +185 -0
  118. package/dist/cli/menu/settings/categories.d.ts +2 -2
  119. package/dist/cli/menu/settings/categories.js +123 -20
  120. package/dist/cli/menu/settings/collections/collection-editor.d.ts +23 -0
  121. package/dist/cli/menu/settings/collections/collection-editor.js +89 -0
  122. package/dist/cli/menu/settings/collections/map-editor.d.ts +10 -0
  123. package/dist/cli/menu/settings/collections/map-editor.js +34 -0
  124. package/dist/cli/menu/settings/collections/object-list-editor.d.ts +10 -0
  125. package/dist/cli/menu/settings/collections/object-list-editor.js +23 -0
  126. package/dist/cli/menu/settings/collections/object-map-editor.d.ts +10 -0
  127. package/dist/cli/menu/settings/collections/object-map-editor.js +35 -0
  128. package/dist/cli/menu/settings/collections/string-list-editor.d.ts +12 -0
  129. package/dist/cli/menu/settings/collections/string-list-editor.js +39 -0
  130. package/dist/cli/menu/settings/config-file.d.ts +2 -2
  131. package/dist/cli/menu/settings/config-file.js +42 -19
  132. package/dist/cli/menu/settings/editor-actions.d.ts +2 -0
  133. package/dist/cli/menu/settings/editor-actions.js +2 -0
  134. package/dist/cli/menu/settings/format.d.ts +5 -0
  135. package/dist/cli/menu/settings/format.js +39 -0
  136. package/dist/cli/menu/settings/index.d.ts +1 -29
  137. package/dist/cli/menu/settings/index.js +1 -133
  138. package/dist/cli/menu/settings/object-editor.d.ts +12 -0
  139. package/dist/cli/menu/settings/object-editor.js +86 -0
  140. package/dist/cli/menu/settings/schema-node.d.ts +3 -1
  141. package/dist/cli/menu/settings/schema-node.js +71 -24
  142. package/dist/cli/menu/settings/settings-editor.d.ts +30 -0
  143. package/dist/cli/menu/settings/settings-editor.js +176 -0
  144. package/dist/cli/menu/settings/{editors.d.ts → value-editor.d.ts} +2 -13
  145. package/dist/cli/menu/settings/value-editor.js +137 -0
  146. package/dist/cli/menu/several.d.ts +4 -4
  147. package/dist/cli/menu/several.js +61 -20
  148. package/dist/cli/{colors.d.ts → output/colors.d.ts} +8 -8
  149. package/dist/cli/{colors.js → output/colors.js} +32 -14
  150. package/dist/cli/output/index.d.ts +3 -0
  151. package/dist/cli/output/index.js +3 -0
  152. package/dist/cli/output/print.d.ts +5 -0
  153. package/dist/cli/output/print.js +14 -0
  154. package/dist/cli/{progress.d.ts → output/progress.d.ts} +5 -5
  155. package/dist/cli/{progress.js → output/progress.js} +42 -19
  156. package/dist/cli/report.d.ts +2 -0
  157. package/dist/cli/report.js +20 -0
  158. package/dist/cli/tui/app.d.ts +6 -16
  159. package/dist/cli/tui/app.js +28 -8
  160. package/dist/cli/tui/dialogs/confirm-screen.d.ts +20 -0
  161. package/dist/cli/tui/dialogs/confirm-screen.js +50 -0
  162. package/dist/cli/tui/dialogs/message-screen.d.ts +17 -0
  163. package/dist/cli/tui/dialogs/message-screen.js +55 -0
  164. package/dist/cli/tui/dialogs/paragraphs.d.ts +2 -0
  165. package/dist/cli/tui/dialogs/paragraphs.js +5 -0
  166. package/dist/cli/tui/dialogs/text-screen.d.ts +26 -0
  167. package/dist/cli/tui/dialogs/text-screen.js +107 -0
  168. package/dist/cli/tui/frame.js +3 -1
  169. package/dist/cli/tui/index.d.ts +7 -3
  170. package/dist/cli/tui/index.js +4 -2
  171. package/dist/cli/tui/list/list-screen.d.ts +29 -0
  172. package/dist/cli/tui/{list-screen.js → list/list-screen.js} +86 -23
  173. package/dist/cli/tui/{list-screen.d.ts → list/list-types.d.ts} +0 -28
  174. package/dist/cli/tui/screen.d.ts +14 -0
  175. package/dist/cli/tui/terminal.js +34 -10
  176. package/dist/cli/tui/text.d.ts +2 -1
  177. package/dist/cli/tui/text.js +37 -7
  178. package/dist/cli/tui/theme.js +27 -9
  179. package/dist/cli/validate.d.ts +8 -8
  180. package/dist/cli/validate.js +32 -21
  181. package/dist/core/config/defaults.d.ts +2 -0
  182. package/dist/core/config/defaults.js +203 -0
  183. package/dist/core/config/index.d.ts +2 -0
  184. package/dist/core/config/index.js +3 -0
  185. package/dist/core/{config.d.ts → config/loader.d.ts} +1 -2
  186. package/dist/core/config/loader.js +47 -0
  187. package/dist/core/{detect-databases.js → detect/databases.js} +111 -23
  188. package/dist/core/detect/index.d.ts +4 -0
  189. package/dist/core/detect/index.js +4 -0
  190. package/dist/core/{detect-pwsh.d.ts → detect/pwsh.d.ts} +1 -1
  191. package/dist/core/{detect-pwsh.js → detect/pwsh.js} +25 -11
  192. package/dist/core/{detect-toolchains.d.ts → detect/toolchains.d.ts} +1 -1
  193. package/dist/core/{detect-toolchains.js → detect/toolchains.js} +42 -5
  194. package/dist/{guest/toolchains → core/detect}/versions.js +28 -12
  195. package/dist/core/disk.d.ts +2 -0
  196. package/dist/core/disk.js +46 -3
  197. package/dist/core/local-config/boot-wants.d.ts +45 -0
  198. package/dist/core/local-config/boot-wants.js +120 -0
  199. package/dist/core/local-config/file.d.ts +3 -0
  200. package/dist/core/local-config/file.js +16 -0
  201. package/dist/core/local-config/index.d.ts +5 -0
  202. package/dist/core/local-config/index.js +7 -0
  203. package/dist/core/{local-config.d.ts → local-config/overrides.d.ts} +3 -18
  204. package/dist/core/{local-config.js → local-config/overrides.js} +45 -52
  205. package/dist/core/local-config/policy.d.ts +19 -0
  206. package/dist/core/local-config/policy.js +45 -0
  207. package/dist/core/local-config/trust.d.ts +13 -0
  208. package/dist/core/local-config/trust.js +43 -0
  209. package/dist/core/package-info.d.ts +4 -0
  210. package/dist/core/package-info.js +13 -0
  211. package/dist/core/run/guest-workspace.d.ts +23 -0
  212. package/dist/core/run/guest-workspace.js +47 -0
  213. package/dist/core/run/index.d.ts +3 -0
  214. package/dist/core/run/index.js +3 -0
  215. package/dist/core/run/resolve-run.d.ts +3 -0
  216. package/dist/core/run/resolve-run.js +202 -0
  217. package/dist/core/run/versions.d.ts +13 -0
  218. package/dist/core/run/versions.js +65 -0
  219. package/dist/core/safe-paths.js +17 -5
  220. package/dist/core/schema/apps.d.ts +4 -4
  221. package/dist/core/schema/apps.js +55 -21
  222. package/dist/core/schema/common.d.ts +13 -10
  223. package/dist/core/schema/common.js +16 -10
  224. package/dist/core/schema/config.d.ts +15 -10
  225. package/dist/core/schema/config.js +78 -53
  226. package/dist/core/schema/databases.d.ts +4 -3
  227. package/dist/core/schema/databases.js +16 -12
  228. package/dist/core/schema/harness.d.ts +1 -1
  229. package/dist/core/schema/harness.js +17 -7
  230. package/dist/core/schema/index.d.ts +6 -0
  231. package/dist/core/schema/index.js +8 -0
  232. package/dist/core/schema/json-schema.js +10 -5
  233. package/dist/core/schema/profile.d.ts +4 -4
  234. package/dist/core/schema/profile.js +37 -17
  235. package/dist/core/schema/projects.d.ts +1 -1
  236. package/dist/core/schema/projects.js +16 -6
  237. package/dist/core/schema/sandbox.d.ts +11 -11
  238. package/dist/core/schema/sandbox.js +101 -37
  239. package/dist/core/schema/toolchains.d.ts +6 -1
  240. package/dist/core/schema/toolchains.js +84 -34
  241. package/dist/core/types.d.ts +19 -9
  242. package/dist/core/util/errors.d.ts +8 -0
  243. package/dist/core/util/errors.js +14 -0
  244. package/dist/core/util/fs.d.ts +8 -0
  245. package/dist/core/util/fs.js +40 -0
  246. package/dist/core/util/index.d.ts +7 -0
  247. package/dist/core/util/index.js +7 -0
  248. package/dist/core/util/jsonc.d.ts +6 -0
  249. package/dist/core/util/jsonc.js +25 -0
  250. package/dist/core/util/links.d.ts +10 -0
  251. package/dist/core/util/links.js +39 -0
  252. package/dist/core/util/paths.d.ts +7 -0
  253. package/dist/core/util/paths.js +33 -0
  254. package/dist/core/util/process.d.ts +15 -0
  255. package/dist/core/util/process.js +54 -0
  256. package/dist/core/util/text.d.ts +8 -0
  257. package/dist/core/util/text.js +8 -0
  258. package/dist/guest/{setup/agents.js → agents/agent-installer.js} +24 -4
  259. package/dist/guest/apps/after-install.d.ts +3 -0
  260. package/dist/guest/apps/after-install.js +47 -0
  261. package/dist/guest/apps/app-installer.d.ts +22 -0
  262. package/dist/guest/apps/app-installer.js +116 -0
  263. package/dist/guest/apps/find-exe.d.ts +5 -0
  264. package/dist/guest/apps/find-exe.js +41 -0
  265. package/dist/guest/apps/index.d.ts +3 -10
  266. package/dist/guest/apps/index.js +6 -206
  267. package/dist/guest/apps/resolvers.js +37 -9
  268. package/dist/guest/apps/shortcuts.d.ts +6 -0
  269. package/dist/guest/apps/shortcuts.js +28 -0
  270. package/dist/guest/apps/sources.d.ts +4 -0
  271. package/dist/guest/apps/sources.js +17 -0
  272. package/dist/guest/apps/unpack.d.ts +3 -0
  273. package/dist/guest/apps/unpack.js +47 -0
  274. package/dist/guest/{audit-parse.js → audit/parse.js} +39 -3
  275. package/dist/guest/{audit.d.ts → audit/process-audit.d.ts} +3 -1
  276. package/dist/guest/{audit.js → audit/process-audit.js} +33 -8
  277. package/dist/guest/boot/boot-env.d.ts +4 -0
  278. package/dist/guest/{boot-env.js → boot/boot-env.js} +7 -5
  279. package/dist/guest/boot/boot.d.ts +1 -0
  280. package/dist/guest/{main.js → boot/boot.js} +96 -50
  281. package/dist/guest/{guide.js → boot/guide.js} +32 -7
  282. package/dist/guest/{project-env.d.ts → boot/project-env.d.ts} +3 -3
  283. package/dist/guest/{project-env.js → boot/project-env.js} +12 -4
  284. package/dist/guest/boot/project-status.d.ts +5 -0
  285. package/dist/guest/boot/project-status.js +28 -0
  286. package/dist/guest/daemon/daemon.d.ts +1 -0
  287. package/dist/guest/daemon/daemon.js +51 -0
  288. package/dist/guest/daemon/exec.js +18 -6
  289. package/dist/guest/daemon/{shutdown.js → idle-shutdown.js} +5 -4
  290. package/dist/guest/daemon/{project.d.ts → project-provisioner.d.ts} +3 -3
  291. package/dist/guest/daemon/{project.js → project-provisioner.js} +60 -22
  292. package/dist/guest/daemon/relays.js +5 -3
  293. package/dist/guest/daemon/{session.js → sessions.js} +84 -24
  294. package/dist/guest/daemon/state.d.ts +4 -1
  295. package/dist/guest/daemon/state.js +34 -20
  296. package/dist/guest/databases/database-server.d.ts +13 -0
  297. package/dist/guest/databases/database-server.js +35 -0
  298. package/dist/guest/databases/dynamodb.d.ts +12 -0
  299. package/dist/guest/databases/dynamodb.js +81 -0
  300. package/dist/guest/databases/index.d.ts +2 -0
  301. package/dist/guest/databases/index.js +2 -0
  302. package/dist/guest/databases/mongodb.d.ts +7 -0
  303. package/dist/guest/databases/mongodb.js +46 -0
  304. package/dist/guest/databases/mysql.d.ts +7 -0
  305. package/dist/guest/databases/mysql.js +59 -0
  306. package/dist/guest/databases/names.d.ts +5 -0
  307. package/dist/guest/databases/names.js +8 -0
  308. package/dist/guest/databases/postgres.d.ts +9 -0
  309. package/dist/guest/databases/postgres.js +85 -0
  310. package/dist/guest/databases/redis.d.ts +7 -0
  311. package/dist/guest/databases/redis.js +25 -0
  312. package/dist/guest/databases/registry.d.ts +5 -0
  313. package/dist/guest/databases/registry.js +51 -0
  314. package/dist/guest/databases/sbx-db.d.ts +1 -0
  315. package/dist/guest/{db.js → databases/sbx-db.js} +13 -13
  316. package/dist/guest/{toolchains/databases → databases}/server.d.ts +5 -5
  317. package/dist/guest/{toolchains/databases → databases}/server.js +18 -13
  318. package/dist/guest/entries/daemon.js +16 -0
  319. package/dist/guest/entries/db.js +10 -0
  320. package/dist/guest/entries/gitguard.js +20 -0
  321. package/dist/guest/entries/main.d.ts +1 -0
  322. package/dist/guest/entries/main.js +24 -0
  323. package/dist/guest/entries/netproxy.d.ts +1 -0
  324. package/dist/guest/entries/netproxy.js +7 -0
  325. package/dist/guest/entries/view.d.ts +1 -0
  326. package/dist/guest/entries/view.js +11 -0
  327. package/dist/guest/{gitguard.js → git/decision.js} +49 -26
  328. package/dist/guest/network/addresses.d.ts +2 -0
  329. package/dist/guest/network/addresses.js +6 -0
  330. package/dist/guest/{setup/network.d.ts → network/allow-only.d.ts} +0 -10
  331. package/dist/guest/network/allow-only.js +84 -0
  332. package/dist/guest/network/firewall.d.ts +9 -0
  333. package/dist/guest/{setup/network.js → network/firewall.js} +58 -63
  334. package/dist/guest/network/proxy-server.d.ts +2 -0
  335. package/dist/guest/{netproxy.js → network/proxy-server.js} +37 -18
  336. package/dist/guest/{helpers.d.ts → runtime/csc.d.ts} +1 -1
  337. package/dist/guest/{helpers.js → runtime/csc.js} +7 -2
  338. package/dist/guest/runtime/fs.d.ts +2 -0
  339. package/dist/guest/runtime/fs.js +6 -0
  340. package/dist/guest/runtime/log.d.ts +3 -0
  341. package/dist/guest/runtime/log.js +22 -0
  342. package/dist/guest/runtime/paths.d.ts +13 -0
  343. package/dist/guest/runtime/paths.js +14 -0
  344. package/dist/guest/{ports.js → runtime/ports.js} +8 -2
  345. package/dist/guest/runtime/process.d.ts +15 -0
  346. package/dist/guest/runtime/process.js +59 -0
  347. package/dist/guest/{project-context.js → runtime/project-context.js} +1 -1
  348. package/dist/guest/runtime/session.d.ts +5 -0
  349. package/dist/guest/runtime/session.js +10 -0
  350. package/dist/guest/runtime/status.d.ts +7 -0
  351. package/dist/guest/runtime/status.js +57 -0
  352. package/dist/guest/{cmdline.js → sessions/cmdline.js} +10 -4
  353. package/dist/guest/{ptyhost.js → sessions/pty-host.js} +12 -5
  354. package/dist/guest/{view.js → sessions/viewer.js} +8 -11
  355. package/dist/guest/setup/claude-mem.d.ts +10 -0
  356. package/dist/guest/setup/{claude.js → claude-mem.js} +18 -78
  357. package/dist/guest/setup/{claude.d.ts → claude-profile.d.ts} +0 -10
  358. package/dist/guest/setup/claude-profile.js +89 -0
  359. package/dist/guest/setup/desktop.d.ts +2 -0
  360. package/dist/guest/setup/desktop.js +32 -0
  361. package/dist/guest/setup/environment.js +28 -5
  362. package/dist/guest/setup/{user.d.ts → git-identity.d.ts} +0 -2
  363. package/dist/guest/setup/git-identity.js +34 -0
  364. package/dist/guest/{gitrules.d.ts → setup/git-rules.d.ts} +1 -1
  365. package/dist/guest/setup/git-rules.js +50 -0
  366. package/dist/guest/setup/hooks.js +22 -5
  367. package/dist/guest/setup/{policy.js → managed-policy.js} +2 -2
  368. package/dist/guest/toolchains/catalogue.d.ts +4 -4
  369. package/dist/guest/toolchains/catalogue.js +30 -7
  370. package/dist/guest/toolchains/detect.d.ts +12 -0
  371. package/dist/guest/toolchains/detect.js +54 -0
  372. package/dist/guest/toolchains/index.d.ts +3 -17
  373. package/dist/guest/toolchains/index.js +1 -106
  374. package/dist/guest/toolchains/install.d.ts +20 -0
  375. package/dist/guest/toolchains/install.js +29 -0
  376. package/dist/guest/toolchains/languages/go.d.ts +3 -0
  377. package/dist/guest/toolchains/{go.js → languages/go.js} +27 -9
  378. package/dist/guest/toolchains/languages/java.d.ts +8 -0
  379. package/dist/guest/toolchains/{java.js → languages/java.js} +57 -18
  380. package/dist/guest/toolchains/languages/node.d.ts +3 -0
  381. package/dist/guest/toolchains/{node.js → languages/node.js} +51 -18
  382. package/dist/guest/toolchains/languages/php.d.ts +3 -0
  383. package/dist/guest/toolchains/{scripting → languages}/php.js +36 -11
  384. package/dist/guest/toolchains/languages/python-tools.d.ts +3 -0
  385. package/dist/guest/toolchains/languages/python-tools.js +12 -0
  386. package/dist/guest/toolchains/languages/python.d.ts +3 -0
  387. package/dist/guest/toolchains/{python.js → languages/python.js} +29 -16
  388. package/dist/guest/toolchains/languages/ruby.d.ts +3 -0
  389. package/dist/guest/toolchains/{scripting → languages}/ruby.js +28 -10
  390. package/dist/guest/toolchains/leftovers.d.ts +1 -1
  391. package/dist/guest/toolchains/leftovers.js +13 -11
  392. package/dist/guest/toolchains/managers.d.ts +6 -6
  393. package/dist/guest/toolchains/managers.js +38 -17
  394. package/dist/guest/toolchains/native/binstall.d.ts +3 -2
  395. package/dist/guest/toolchains/native/binstall.js +20 -8
  396. package/dist/guest/toolchains/native/cpp.d.ts +2 -2
  397. package/dist/guest/toolchains/native/cpp.js +23 -8
  398. package/dist/guest/toolchains/native/dotnet.d.ts +5 -3
  399. package/dist/guest/toolchains/native/dotnet.js +72 -24
  400. package/dist/guest/toolchains/native/mesa.d.ts +2 -2
  401. package/dist/guest/toolchains/native/mesa.js +27 -10
  402. package/dist/guest/toolchains/native/msvc/environment.d.ts +4 -4
  403. package/dist/guest/toolchains/native/msvc/environment.js +30 -16
  404. package/dist/guest/toolchains/native/msvc/index.d.ts +3 -3
  405. package/dist/guest/toolchains/native/msvc/index.js +10 -8
  406. package/dist/guest/toolchains/native/msvc/packages.d.ts +1 -1
  407. package/dist/guest/toolchains/native/msvc/packages.js +69 -23
  408. package/dist/guest/toolchains/native/msvc/tree.d.ts +6 -6
  409. package/dist/guest/toolchains/native/msvc/tree.js +15 -9
  410. package/dist/guest/toolchains/native/rust-extras.d.ts +23 -0
  411. package/dist/guest/toolchains/native/rust-extras.js +100 -0
  412. package/dist/guest/toolchains/native/rust.d.ts +2 -2
  413. package/dist/guest/toolchains/native/rust.js +41 -10
  414. package/dist/guest/toolchains/{scripting → native}/vcruntime.d.ts +2 -2
  415. package/dist/guest/toolchains/{scripting → native}/vcruntime.js +17 -7
  416. package/dist/guest/toolchains/package-ledger.d.ts +17 -0
  417. package/dist/guest/toolchains/package-ledger.js +54 -0
  418. package/dist/guest/toolchains/plan.d.ts +3 -24
  419. package/dist/guest/toolchains/plan.js +99 -111
  420. package/dist/guest/toolchains/runtimes.d.ts +6 -6
  421. package/dist/guest/toolchains/runtimes.js +31 -13
  422. package/dist/guest/toolchains/scheduler.d.ts +22 -0
  423. package/dist/guest/toolchains/scheduler.js +123 -0
  424. package/dist/guest/toolchains/setup.d.ts +10 -0
  425. package/dist/guest/toolchains/setup.js +22 -0
  426. package/dist/guest/toolchains/state-file.d.ts +3 -0
  427. package/dist/guest/toolchains/state-file.js +10 -0
  428. package/dist/guest/toolchains/step.d.ts +24 -0
  429. package/dist/guest/toolchains/step.js +1 -0
  430. package/dist/guest/toolchains/tool-env.d.ts +12 -0
  431. package/dist/guest/toolchains/tool-env.js +16 -0
  432. package/dist/guest/toolchains/tools/cli.d.ts +10 -0
  433. package/dist/guest/toolchains/{cli.js → tools/cli.js} +35 -15
  434. package/dist/guest/toolchains/tools/git.d.ts +3 -0
  435. package/dist/guest/toolchains/{git.js → tools/git.js} +38 -15
  436. package/dist/guest/toolchains/tools/pwsh.d.ts +4 -0
  437. package/dist/guest/toolchains/{pwsh.js → tools/pwsh.js} +14 -7
  438. package/dist/guest/toolchains/{vscode-profile.d.ts → tools/vscode-profile.d.ts} +6 -6
  439. package/dist/guest/toolchains/{vscode-profile.js → tools/vscode-profile.js} +28 -12
  440. package/dist/guest/toolchains/{vscode.d.ts → tools/vscode.d.ts} +6 -6
  441. package/dist/guest/toolchains/{vscode.js → tools/vscode.js} +67 -21
  442. package/dist/guest/toolchains/version-cache.d.ts +16 -0
  443. package/dist/guest/toolchains/version-cache.js +67 -0
  444. package/dist/host/agent-commands/commands.d.ts +13 -0
  445. package/dist/host/agent-commands/commands.js +33 -0
  446. package/dist/host/agent-commands/forwarders.d.ts +7 -0
  447. package/dist/host/agent-commands/forwarders.js +31 -0
  448. package/dist/host/agent-commands/index.d.ts +4 -0
  449. package/dist/host/agent-commands/index.js +4 -0
  450. package/dist/host/agent-commands/reconcile.d.ts +12 -0
  451. package/dist/host/agent-commands/reconcile.js +69 -0
  452. package/dist/host/agent-commands/user-path.d.ts +2 -0
  453. package/dist/host/agent-commands/user-path.js +33 -0
  454. package/dist/host/audit/collect.d.ts +2 -2
  455. package/dist/host/audit/collect.js +59 -22
  456. package/dist/host/audit/log.d.ts +2 -2
  457. package/dist/host/audit/log.js +24 -8
  458. package/dist/host/{attach.d.ts → channel/attach.d.ts} +2 -2
  459. package/dist/host/{attach.js → channel/attach.js} +33 -15
  460. package/dist/host/channel/channel.d.ts +51 -0
  461. package/dist/host/channel/channel.js +196 -0
  462. package/dist/host/channel/index.d.ts +2 -0
  463. package/dist/host/channel/index.js +2 -0
  464. package/dist/host/guard/agent-files.d.ts +7 -0
  465. package/dist/host/guard/agent-files.js +103 -0
  466. package/dist/host/guard/commands.d.ts +10 -0
  467. package/dist/host/guard/commands.js +123 -0
  468. package/dist/host/guard/file-hash.d.ts +4 -0
  469. package/dist/host/guard/file-hash.js +37 -0
  470. package/dist/host/guard/git-config.d.ts +5 -0
  471. package/dist/host/guard/git-config.js +62 -0
  472. package/dist/host/guard/git-dirs.d.ts +12 -0
  473. package/dist/host/guard/git-dirs.js +53 -0
  474. package/dist/host/guard/index.d.ts +5 -0
  475. package/dist/host/guard/index.js +4 -0
  476. package/dist/host/guard/mark-of-the-web.d.ts +8 -0
  477. package/dist/host/guard/mark-of-the-web.js +74 -0
  478. package/dist/host/guard/nested-repos.d.ts +14 -0
  479. package/dist/host/guard/nested-repos.js +88 -0
  480. package/dist/host/guard/quarantine.d.ts +3 -0
  481. package/dist/host/guard/quarantine.js +24 -0
  482. package/dist/host/guard/repo-guard.d.ts +10 -0
  483. package/dist/host/guard/repo-guard.js +36 -0
  484. package/dist/host/guard/store.d.ts +40 -0
  485. package/dist/host/guard/store.js +145 -0
  486. package/dist/host/guard/types.d.ts +27 -0
  487. package/dist/host/guard/types.js +3 -0
  488. package/dist/host/guard/watch-state.d.ts +9 -0
  489. package/dist/host/guard/watch-state.js +26 -0
  490. package/dist/host/launch/boot-projects.d.ts +17 -0
  491. package/dist/host/launch/{projects.js → boot-projects.js} +22 -13
  492. package/dist/host/{database-plan.d.ts → launch/database-plan.d.ts} +5 -5
  493. package/dist/host/{database-plan.js → launch/database-plan.js} +24 -13
  494. package/dist/host/launch/generate.d.ts +4 -0
  495. package/dist/host/launch/generate.js +77 -0
  496. package/dist/host/launch/index.d.ts +10 -0
  497. package/dist/host/launch/index.js +10 -0
  498. package/dist/host/launch/mappings.d.ts +5 -5
  499. package/dist/host/launch/mappings.js +37 -24
  500. package/dist/host/launch/pc-scan.d.ts +5 -0
  501. package/dist/host/{pc-scan.js → launch/pc-scan.js} +20 -13
  502. package/dist/host/launch/project-scan.d.ts +7 -0
  503. package/dist/host/{project-scan.js → launch/project-scan.js} +29 -21
  504. package/dist/host/launch/session-file.d.ts +23 -0
  505. package/dist/host/launch/session-file.js +73 -0
  506. package/dist/host/launch/stage.d.ts +5 -5
  507. package/dist/host/launch/stage.js +14 -13
  508. package/dist/host/launch/toolchains.d.ts +4 -0
  509. package/dist/host/launch/toolchains.js +11 -0
  510. package/dist/host/launch/{wsb.d.ts → wsb-file.d.ts} +4 -2
  511. package/dist/host/launch/wsb-file.js +56 -0
  512. package/dist/host/life/crash-report.d.ts +8 -0
  513. package/dist/host/life/crash-report.js +87 -0
  514. package/dist/host/life/index.d.ts +6 -0
  515. package/dist/host/life/index.js +6 -0
  516. package/dist/host/life/keep-awake.d.ts +10 -0
  517. package/dist/host/life/keep-awake.js +29 -0
  518. package/dist/host/life/life-record.d.ts +48 -0
  519. package/dist/host/life/life-record.js +76 -0
  520. package/dist/host/life/stop-events.d.ts +27 -0
  521. package/dist/host/life/stop-events.js +96 -0
  522. package/dist/host/life/stop-warning.d.ts +4 -0
  523. package/dist/host/life/stop-warning.js +25 -0
  524. package/dist/host/life/windows-update.d.ts +3 -0
  525. package/dist/host/life/windows-update.js +11 -0
  526. package/dist/host/native.d.ts +4 -0
  527. package/dist/host/native.js +11 -0
  528. package/dist/host/network/index.d.ts +1 -0
  529. package/dist/host/network/index.js +1 -0
  530. package/dist/host/{port-forward.d.ts → network/port-forward.d.ts} +1 -1
  531. package/dist/host/{port-forward.js → network/port-forward.js} +16 -10
  532. package/dist/host/profile/accounts.d.ts +37 -0
  533. package/dist/host/profile/accounts.js +146 -0
  534. package/dist/host/profile/claude-login.d.ts +22 -0
  535. package/dist/host/profile/claude-login.js +57 -0
  536. package/dist/host/{claude-profile.d.ts → profile/claude-profile.d.ts} +9 -9
  537. package/dist/host/{claude-profile.js → profile/claude-profile.js} +32 -22
  538. package/dist/host/profile/index.d.ts +7 -0
  539. package/dist/host/profile/index.js +7 -0
  540. package/dist/host/profile/personalize.d.ts +2 -0
  541. package/dist/host/profile/personalize.js +127 -0
  542. package/dist/host/profile/reg-file.d.ts +8 -0
  543. package/dist/host/profile/reg-file.js +45 -0
  544. package/dist/host/profile/secret-files.d.ts +2 -0
  545. package/dist/host/profile/secret-files.js +25 -0
  546. package/dist/host/profile/secret-patterns.d.ts +6 -0
  547. package/dist/host/profile/secret-patterns.js +128 -0
  548. package/dist/host/profile/secrets.d.ts +12 -0
  549. package/dist/host/profile/secrets.js +100 -0
  550. package/dist/host/projects/index.d.ts +4 -0
  551. package/dist/host/projects/index.js +4 -0
  552. package/dist/host/{join.d.ts → projects/join.d.ts} +12 -9
  553. package/dist/host/{join.js → projects/join.js} +62 -33
  554. package/dist/host/projects/known.d.ts +28 -0
  555. package/dist/host/projects/known.js +55 -0
  556. package/dist/host/projects/mapper.d.ts +29 -0
  557. package/dist/host/projects/mapper.js +88 -0
  558. package/dist/host/projects/registry.d.ts +83 -0
  559. package/dist/host/projects/registry.js +136 -0
  560. package/dist/host/sandbox/doctor.d.ts +2 -0
  561. package/dist/host/sandbox/doctor.js +42 -0
  562. package/dist/host/sandbox/host-claude.d.ts +1 -0
  563. package/dist/host/sandbox/host-claude.js +26 -0
  564. package/dist/host/sandbox/index.d.ts +6 -0
  565. package/dist/host/sandbox/index.js +6 -0
  566. package/dist/host/{platform.d.ts → sandbox/platform.d.ts} +0 -5
  567. package/dist/host/sandbox/platform.js +60 -0
  568. package/dist/host/sandbox/probe.d.ts +3 -0
  569. package/dist/host/sandbox/probe.js +47 -0
  570. package/dist/host/{window.js → sandbox/window.js} +7 -5
  571. package/dist/host/{wsb.js → sandbox/wsb-cli.js} +31 -8
  572. package/dist/host/{cleanup.js → storage/cleanup.js} +27 -12
  573. package/dist/host/storage/index.d.ts +2 -0
  574. package/dist/host/storage/index.js +2 -0
  575. package/dist/host/storage/state-files.d.ts +4 -0
  576. package/dist/host/storage/state-files.js +10 -0
  577. package/dist/host/test-guard.js +1 -1
  578. package/dist/host/tools/conpty.d.ts +8 -0
  579. package/dist/host/tools/conpty.js +58 -0
  580. package/dist/host/tools/index.d.ts +2 -0
  581. package/dist/host/tools/index.js +2 -0
  582. package/dist/host/{terminal.d.ts → tools/windows-terminal.d.ts} +2 -10
  583. package/dist/host/{terminal.js → tools/windows-terminal.js} +33 -57
  584. package/dist/host/workspace-view/active-views.d.ts +3 -0
  585. package/dist/host/workspace-view/active-views.js +22 -0
  586. package/dist/host/workspace-view/index.d.ts +2 -18
  587. package/dist/host/workspace-view/index.js +2 -49
  588. package/dist/host/workspace-view/plan.d.ts +16 -0
  589. package/dist/host/workspace-view/plan.js +50 -0
  590. package/dist/host/workspace-view/rules.js +10 -3
  591. package/dist/host/workspace-view/view-state.d.ts +10 -0
  592. package/dist/host/workspace-view/view-state.js +31 -0
  593. package/dist/host/workspace-view/view.d.ts +1 -0
  594. package/dist/host/workspace-view/view.js +51 -55
  595. package/dist/runtime/daemon.js +4220 -1968
  596. package/dist/runtime/db.js +2134 -849
  597. package/dist/runtime/gitguard.js +29 -11
  598. package/dist/runtime/main.js +4687 -2243
  599. package/dist/runtime/netproxy.js +1644 -420
  600. package/dist/runtime/view.js +1356 -428
  601. package/dist/selftest/accounts.test.d.ts +1 -1
  602. package/dist/selftest/accounts.test.js +20 -17
  603. package/dist/selftest/agent-commands.test.d.ts +1 -1
  604. package/dist/selftest/agent-commands.test.js +9 -5
  605. package/dist/selftest/audit.test.d.ts +1 -1
  606. package/dist/selftest/audit.test.js +46 -13
  607. package/dist/selftest/channel.test.d.ts +1 -1
  608. package/dist/selftest/channel.test.js +63 -16
  609. package/dist/selftest/cli.test.d.ts +1 -1
  610. package/dist/selftest/cli.test.js +68 -16
  611. package/dist/selftest/cmdline.test.d.ts +1 -1
  612. package/dist/selftest/cmdline.test.js +36 -7
  613. package/dist/selftest/config.test.d.ts +1 -1
  614. package/dist/selftest/config.test.js +12 -5
  615. package/dist/selftest/data.test.d.ts +1 -1
  616. package/dist/selftest/data.test.js +35 -6
  617. package/dist/selftest/detect.test.d.ts +1 -1
  618. package/dist/selftest/detect.test.js +22 -9
  619. package/dist/selftest/generate.test.d.ts +1 -1
  620. package/dist/selftest/generate.test.js +33 -9
  621. package/dist/selftest/git-access.test.d.ts +1 -1
  622. package/dist/selftest/git-access.test.js +42 -4
  623. package/dist/selftest/guest-boot.test.d.ts +1 -1
  624. package/dist/selftest/guest-boot.test.js +25 -7
  625. package/dist/selftest/host-sim.test.d.ts +1 -1
  626. package/dist/selftest/host-sim.test.js +27 -3
  627. package/dist/selftest/hostile-input.test.d.ts +1 -1
  628. package/dist/selftest/hostile-input.test.js +5 -5
  629. package/dist/selftest/index.d.ts +1 -1
  630. package/dist/selftest/index.js +72 -16
  631. package/dist/selftest/layout.test.d.ts +2 -0
  632. package/dist/selftest/layout.test.js +131 -0
  633. package/dist/selftest/links.test.d.ts +1 -1
  634. package/dist/selftest/links.test.js +16 -11
  635. package/dist/selftest/live-daemon.test.d.ts +1 -1
  636. package/dist/selftest/live-daemon.test.js +20 -8
  637. package/dist/selftest/live-git.test.d.ts +1 -1
  638. package/dist/selftest/live-git.test.js +13 -4
  639. package/dist/selftest/live-network.test.d.ts +1 -1
  640. package/dist/selftest/live-network.test.js +24 -9
  641. package/dist/selftest/live-projects.test.d.ts +1 -1
  642. package/dist/selftest/live-projects.test.js +47 -20
  643. package/dist/selftest/live-terminal.test.d.ts +1 -1
  644. package/dist/selftest/live-terminal.test.js +41 -15
  645. package/dist/selftest/local-config.test.d.ts +1 -1
  646. package/dist/selftest/local-config.test.js +64 -16
  647. package/dist/selftest/mirror.test.d.ts +1 -1
  648. package/dist/selftest/mirror.test.js +102 -32
  649. package/dist/selftest/network.test.d.ts +1 -1
  650. package/dist/selftest/network.test.js +17 -8
  651. package/dist/selftest/personalization.test.d.ts +1 -1
  652. package/dist/selftest/personalization.test.js +12 -5
  653. package/dist/selftest/projects.test.d.ts +1 -1
  654. package/dist/selftest/projects.test.js +280 -85
  655. package/dist/selftest/repair.test.d.ts +1 -1
  656. package/dist/selftest/repair.test.js +17 -5
  657. package/dist/selftest/repo-guard.test.d.ts +1 -1
  658. package/dist/selftest/repo-guard.test.js +21 -20
  659. package/dist/selftest/secrets.test.d.ts +1 -1
  660. package/dist/selftest/secrets.test.js +57 -13
  661. package/dist/selftest/setup.test.d.ts +1 -1
  662. package/dist/selftest/setup.test.js +25 -5
  663. package/dist/selftest/{fixtures.d.ts → support/fixtures.d.ts} +5 -3
  664. package/dist/selftest/{fixtures.js → support/fixtures.js} +95 -17
  665. package/dist/selftest/{harness.js → support/harness.js} +24 -7
  666. package/dist/selftest/{live.d.ts → support/live.d.ts} +2 -2
  667. package/dist/selftest/{live.js → support/live.js} +34 -10
  668. package/dist/selftest/support/suite.js +1 -0
  669. package/dist/selftest/sync.test.d.ts +1 -1
  670. package/dist/selftest/sync.test.js +64 -26
  671. package/dist/selftest/test-guard.test.d.ts +1 -1
  672. package/dist/selftest/test-guard.test.js +43 -15
  673. package/dist/selftest/toolchains.test.d.ts +1 -1
  674. package/dist/selftest/toolchains.test.js +135 -36
  675. package/dist/selftest/workspace-view.test.d.ts +1 -1
  676. package/dist/selftest/workspace-view.test.js +48 -11
  677. package/dist/selftest/workspace.test.d.ts +1 -1
  678. package/dist/selftest/workspace.test.js +13 -4
  679. package/dist/shared/{apps.d.ts → apps/catalogue.d.ts} +1 -11
  680. package/dist/shared/apps/catalogue.js +768 -0
  681. package/dist/shared/apps/index.d.ts +2 -0
  682. package/dist/shared/apps/index.js +2 -0
  683. package/dist/shared/apps/selection.d.ts +11 -0
  684. package/dist/shared/apps/selection.js +40 -0
  685. package/dist/shared/channel/index.d.ts +2 -0
  686. package/dist/shared/channel/index.js +2 -0
  687. package/dist/shared/channel/run-dir.d.ts +30 -0
  688. package/dist/shared/channel/run-dir.js +84 -0
  689. package/dist/shared/{schema.d.ts → channel/schema.d.ts} +38 -21
  690. package/dist/shared/{schema.js → channel/schema.js} +62 -35
  691. package/dist/shared/download/archive.d.ts +13 -0
  692. package/dist/shared/download/archive.js +57 -0
  693. package/dist/shared/download/downloader.d.ts +35 -0
  694. package/dist/shared/download/downloader.js +110 -0
  695. package/dist/shared/download/github.d.ts +16 -0
  696. package/dist/shared/download/github.js +74 -0
  697. package/dist/shared/download/http.d.ts +5 -0
  698. package/dist/shared/download/http.js +30 -0
  699. package/dist/shared/download/index.d.ts +5 -0
  700. package/dist/shared/download/index.js +5 -0
  701. package/dist/shared/download/spawn.d.ts +2 -0
  702. package/dist/shared/download/spawn.js +7 -0
  703. package/dist/shared/io/index.d.ts +3 -0
  704. package/dist/shared/io/index.js +3 -0
  705. package/dist/shared/io/json-file.d.ts +10 -0
  706. package/dist/shared/io/json-file.js +21 -0
  707. package/dist/shared/io/json.d.ts +13 -0
  708. package/dist/shared/io/json.js +49 -0
  709. package/dist/shared/{safe-remove.js → io/safe-remove.js} +32 -7
  710. package/dist/shared/{netrules.js → network/firewall-rules.js} +36 -5
  711. package/dist/shared/network/index.d.ts +2 -0
  712. package/dist/shared/network/index.js +2 -0
  713. package/dist/shared/{netpolicy.js → network/policy.js} +66 -11
  714. package/dist/shared/{paths.js → paths/claude-paths.js} +12 -2
  715. package/dist/shared/{guest-paths.d.ts → paths/guest-paths.d.ts} +6 -12
  716. package/dist/shared/{guest-paths.js → paths/guest-paths.js} +53 -36
  717. package/dist/shared/paths/index.d.ts +3 -0
  718. package/dist/shared/paths/index.js +3 -0
  719. package/dist/shared/{projects.js → paths/projects.js} +13 -3
  720. package/dist/shared/pty/client.d.ts +21 -0
  721. package/dist/shared/pty/client.js +79 -0
  722. package/dist/shared/{console-input.js → pty/console-input.js} +26 -6
  723. package/dist/shared/pty/index.d.ts +6 -0
  724. package/dist/shared/pty/index.js +6 -0
  725. package/dist/shared/pty/input-joiner.d.ts +15 -0
  726. package/dist/shared/pty/input-joiner.js +44 -0
  727. package/dist/shared/pty/output-filter.d.ts +13 -0
  728. package/dist/shared/pty/output-filter.js +140 -0
  729. package/dist/shared/pty/protocol.d.ts +36 -0
  730. package/dist/shared/pty/protocol.js +60 -0
  731. package/dist/shared/pty/terminal.d.ts +24 -0
  732. package/dist/shared/pty/terminal.js +147 -0
  733. package/dist/shared/test-guard.js +3 -1
  734. package/dist/sync/claude-mem.d.ts +1 -1
  735. package/dist/sync/claude-mem.js +9 -4
  736. package/dist/sync/history.d.ts +1 -29
  737. package/dist/sync/history.js +57 -45
  738. package/dist/sync/index.d.ts +5 -0
  739. package/dist/sync/index.js +5 -0
  740. package/dist/sync/sync-cycle.d.ts +18 -0
  741. package/dist/sync/sync-cycle.js +85 -0
  742. package/dist/sync/sync-state.d.ts +32 -0
  743. package/dist/sync/sync-state.js +37 -0
  744. package/dist/sync/watcher.d.ts +0 -18
  745. package/dist/sync/watcher.js +66 -100
  746. package/native/keep-awake.ps1 +8 -0
  747. package/native/power.cs +23 -0
  748. package/native/stop-events.ps1 +38 -0
  749. package/package.json +11 -3
  750. package/sandbox/linkgate.cs +98 -0
  751. package/sandbox/memlog.ps1 +15 -6
  752. package/schemas/config.schema.json +34 -1
  753. package/schemas/sandbox-config.schema.json +34 -1
  754. package/dist/cli/boot-progress.d.ts +0 -22
  755. package/dist/cli/boot-progress.js +0 -59
  756. package/dist/cli/commands/launch.d.ts +0 -32
  757. package/dist/cli/commands/launch.js +0 -421
  758. package/dist/cli/commands/maintenance.d.ts +0 -10
  759. package/dist/cli/commands/maintenance.js +0 -220
  760. package/dist/cli/commands/project.d.ts +0 -33
  761. package/dist/cli/commands/project.js +0 -102
  762. package/dist/cli/commands/projects.d.ts +0 -14
  763. package/dist/cli/commands/projects.js +0 -146
  764. package/dist/cli/commands/restart.d.ts +0 -6
  765. package/dist/cli/commands/restart.js +0 -95
  766. package/dist/cli/commands/sessions.d.ts +0 -12
  767. package/dist/cli/commands/sessions.js +0 -258
  768. package/dist/cli/menu/settings/editors.js +0 -305
  769. package/dist/cli/tui/dialogs.d.ts +0 -57
  770. package/dist/cli/tui/dialogs.js +0 -162
  771. package/dist/core/config.js +0 -109
  772. package/dist/core/project-policy.d.ts +0 -62
  773. package/dist/core/project-policy.js +0 -121
  774. package/dist/core/schema.d.ts +0 -6
  775. package/dist/core/schema.js +0 -8
  776. package/dist/core/util.d.ts +0 -62
  777. package/dist/core/util.js +0 -156
  778. package/dist/core/workspace.d.ts +0 -35
  779. package/dist/core/workspace.js +0 -206
  780. package/dist/guest/boot-env.d.ts +0 -4
  781. package/dist/guest/daemon.js +0 -57
  782. package/dist/guest/env.d.ts +0 -56
  783. package/dist/guest/env.js +0 -115
  784. package/dist/guest/gitrules.js +0 -11
  785. package/dist/guest/project-status.d.ts +0 -5
  786. package/dist/guest/project-status.js +0 -17
  787. package/dist/guest/setup/user.js +0 -51
  788. package/dist/guest/toolchains/cli.d.ts +0 -10
  789. package/dist/guest/toolchains/common.d.ts +0 -54
  790. package/dist/guest/toolchains/common.js +0 -147
  791. package/dist/guest/toolchains/databases/dynamodb.d.ts +0 -8
  792. package/dist/guest/toolchains/databases/dynamodb.js +0 -52
  793. package/dist/guest/toolchains/databases/index.d.ts +0 -6
  794. package/dist/guest/toolchains/databases/index.js +0 -62
  795. package/dist/guest/toolchains/databases/mongodb.d.ts +0 -3
  796. package/dist/guest/toolchains/databases/mongodb.js +0 -31
  797. package/dist/guest/toolchains/databases/mysql.d.ts +0 -3
  798. package/dist/guest/toolchains/databases/mysql.js +0 -38
  799. package/dist/guest/toolchains/databases/postgres.d.ts +0 -5
  800. package/dist/guest/toolchains/databases/postgres.js +0 -38
  801. package/dist/guest/toolchains/databases/redis.d.ts +0 -3
  802. package/dist/guest/toolchains/databases/redis.js +0 -16
  803. package/dist/guest/toolchains/git.d.ts +0 -3
  804. package/dist/guest/toolchains/go.d.ts +0 -3
  805. package/dist/guest/toolchains/java.d.ts +0 -8
  806. package/dist/guest/toolchains/node.d.ts +0 -3
  807. package/dist/guest/toolchains/pwsh.d.ts +0 -4
  808. package/dist/guest/toolchains/python.d.ts +0 -3
  809. package/dist/guest/toolchains/scripting/php.d.ts +0 -3
  810. package/dist/guest/toolchains/scripting/ruby.d.ts +0 -3
  811. package/dist/host/accounts.d.ts +0 -32
  812. package/dist/host/accounts.js +0 -128
  813. package/dist/host/agent-commands.d.ts +0 -25
  814. package/dist/host/agent-commands.js +0 -145
  815. package/dist/host/channel.d.ts +0 -38
  816. package/dist/host/channel.js +0 -163
  817. package/dist/host/generate.d.ts +0 -13
  818. package/dist/host/generate.js +0 -115
  819. package/dist/host/launch/projects.d.ts +0 -17
  820. package/dist/host/launch/wsb.js +0 -34
  821. package/dist/host/motw.d.ts +0 -17
  822. package/dist/host/motw.js +0 -74
  823. package/dist/host/pc-scan.d.ts +0 -6
  824. package/dist/host/personalize.d.ts +0 -10
  825. package/dist/host/personalize.js +0 -97
  826. package/dist/host/platform.js +0 -129
  827. package/dist/host/project-scan.d.ts +0 -7
  828. package/dist/host/projects.d.ts +0 -123
  829. package/dist/host/projects.js +0 -196
  830. package/dist/host/repo-guard.d.ts +0 -43
  831. package/dist/host/repo-guard.js +0 -347
  832. package/dist/host/secrets.d.ts +0 -14
  833. package/dist/host/secrets.js +0 -133
  834. package/dist/host/stops.d.ts +0 -67
  835. package/dist/host/stops.js +0 -126
  836. package/dist/shared/apps.js +0 -114
  837. package/dist/shared/download.d.ts +0 -63
  838. package/dist/shared/download.js +0 -238
  839. package/dist/shared/pty-client.d.ts +0 -108
  840. package/dist/shared/pty-client.js +0 -406
  841. package/dist/shared/rundir.d.ts +0 -41
  842. package/dist/shared/rundir.js +0 -96
  843. /package/dist/{guest/daemon.d.ts → cli/tui/list/list-types.js} +0 -0
  844. /package/dist/{guest/db.d.ts → cli/tui/screen.js} +0 -0
  845. /package/dist/core/{detect-databases.d.ts → detect/databases.d.ts} +0 -0
  846. /package/dist/{guest/toolchains → core/detect}/versions.d.ts +0 -0
  847. /package/dist/guest/{setup/agents.d.ts → agents/agent-installer.d.ts} +0 -0
  848. /package/dist/guest/{audit-parse.d.ts → audit/parse.d.ts} +0 -0
  849. /package/dist/guest/{guide.d.ts → boot/guide.d.ts} +0 -0
  850. /package/dist/guest/daemon/{shutdown.d.ts → idle-shutdown.d.ts} +0 -0
  851. /package/dist/guest/daemon/{session.d.ts → sessions.d.ts} +0 -0
  852. /package/dist/guest/{main.d.ts → entries/daemon.d.ts} +0 -0
  853. /package/dist/guest/{netproxy.d.ts → entries/db.d.ts} +0 -0
  854. /package/dist/{selftest/suite.js → guest/entries/gitguard.d.ts} +0 -0
  855. /package/dist/guest/{gitguard.d.ts → git/decision.d.ts} +0 -0
  856. /package/dist/guest/{ports.d.ts → runtime/ports.d.ts} +0 -0
  857. /package/dist/guest/{project-context.d.ts → runtime/project-context.d.ts} +0 -0
  858. /package/dist/guest/{cmdline.d.ts → sessions/cmdline.d.ts} +0 -0
  859. /package/dist/guest/{ptyhost.d.ts → sessions/pty-host.d.ts} +0 -0
  860. /package/dist/guest/{view.d.ts → sessions/viewer.d.ts} +0 -0
  861. /package/dist/guest/setup/{policy.d.ts → managed-policy.d.ts} +0 -0
  862. /package/dist/host/{window.d.ts → sandbox/window.d.ts} +0 -0
  863. /package/dist/host/{wsb.d.ts → sandbox/wsb-cli.d.ts} +0 -0
  864. /package/dist/host/{cleanup.d.ts → storage/cleanup.d.ts} +0 -0
  865. /package/dist/selftest/{harness.d.ts → support/harness.d.ts} +0 -0
  866. /package/dist/selftest/{suite.d.ts → support/suite.d.ts} +0 -0
  867. /package/dist/shared/{safe-remove.d.ts → io/safe-remove.d.ts} +0 -0
  868. /package/dist/shared/{netrules.d.ts → network/firewall-rules.d.ts} +0 -0
  869. /package/dist/shared/{netpolicy.d.ts → network/policy.d.ts} +0 -0
  870. /package/dist/shared/{paths.d.ts → paths/claude-paths.d.ts} +0 -0
  871. /package/dist/shared/{projects.d.ts → paths/projects.d.ts} +0 -0
  872. /package/dist/shared/{console-input.d.ts → pty/console-input.d.ts} +0 -0
@@ -0,0 +1,25 @@
1
+ // Secret-looking files in a workspace, for a warning at launch (the agent can read them: the folder is mapped).
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ /** Files that usually hold secrets. The agent CAN read them (the whole folder is mapped); we only warn. */
5
+ const SECRET_FILES = /^(\.env(\..+)?|\.envrc|.*\.(pem|key|p12|pfx|jks|keystore|kdbx|tfvars|ovpn)|credentials(\.json)?|secrets?\.(json|ya?ml|toml)|service[-_]?account.*\.json|id_(rsa|ed25519|ecdsa)|\.npmrc|\.pypirc|\.netrc|\.git-credentials)$/i;
6
+ const TEMPLATE = /\.(example|sample|template|dist|defaults?)$/i;
7
+ /** Secret-looking files in the workspace root and one folder down (skipping dependency folders). */
8
+ export function findSecretFiles(workspace) {
9
+ const list = (dir) => {
10
+ try {
11
+ return fs.readdirSync(dir, { withFileTypes: true });
12
+ }
13
+ catch {
14
+ return [];
15
+ }
16
+ };
17
+ const hit = (name) => SECRET_FILES.test(name) && !TEMPLATE.test(name);
18
+ const top = list(workspace);
19
+ const below = top
20
+ .filter((d) => d.isDirectory() && !/^(node_modules|\.git|vendor|target|dist|build|\.venv|venv)$/i.test(d.name))
21
+ .flatMap((d) => list(path.join(workspace, d.name))
22
+ .filter((f) => f.isFile() && hit(f.name))
23
+ .map((f) => d.name + '\\' + f.name));
24
+ return [...top.filter((d) => d.isFile() && hit(d.name)).map((d) => d.name), ...below];
25
+ }
@@ -0,0 +1,6 @@
1
+ /** Variable names that are credentials by definition: cloud, hosting, CI, registries, payment, AI APIs, ... */
2
+ export declare const SECRET_NAMES: readonly RegExp[];
3
+ /** Any name that says what it holds: ..._TOKEN, ..._SECRET, PASSWORD, API_KEY, PRIVATE_KEY, connection strings. */
4
+ export declare const SECRET_WORDS: RegExp;
5
+ /** Values that are credentials whatever they are called. */
6
+ export declare const SECRET_VALUES: readonly RegExp[];
@@ -0,0 +1,128 @@
1
+ // What counts as a credential: variable names, words in names, and values that are credentials whatever their name.
2
+ /** Variable names that are credentials by definition: cloud, hosting, CI, registries, payment, AI APIs, ... */
3
+ export const SECRET_NAMES = [
4
+ /^AWS_/,
5
+ /^AMAZON_/,
6
+ /^AZURE_/,
7
+ /^ARM_(CLIENT|TENANT|SUBSCRIPTION|ACCESS)_/,
8
+ /^MSAL_/,
9
+ /^CLOUDFLARE_/,
10
+ /^CF_(API|ACCOUNT|ZONE|ACCESS)/,
11
+ /^GOOGLE_(APPLICATION_CREDENTIALS|API_KEY|CLOUD_|CLIENT_SECRET)/,
12
+ /^GCP_/,
13
+ /^GCLOUD_/,
14
+ /^GOOGLE_GHA_/,
15
+ /^FIREBASE_/,
16
+ /^DIGITALOCEAN_/,
17
+ /^DO_(API|AUTH)_/,
18
+ /^LINODE_/,
19
+ /^HCLOUD_/,
20
+ /^OCI_/,
21
+ /^ALIBABA_CLOUD_/,
22
+ /^ALICLOUD_/,
23
+ /^IBMCLOUD_/,
24
+ /^HEROKU_/,
25
+ /^VERCEL_/,
26
+ /^NETLIFY_/,
27
+ /^RENDER_API/,
28
+ /^FLY_(API|ACCESS)_/,
29
+ /^RAILWAY_/,
30
+ /^SUPABASE_/,
31
+ /^NEON_/,
32
+ /^PLANETSCALE_/,
33
+ /^GITHUB_TOKEN$/,
34
+ /^GH_TOKEN$/,
35
+ /^GH_ENTERPRISE_TOKEN$/,
36
+ /^GITHUB_PAT/,
37
+ /^GITLAB_/,
38
+ /^BITBUCKET_/,
39
+ /^CIRCLE_TOKEN$/,
40
+ /^TRAVIS_/,
41
+ /^BUILDKITE_/,
42
+ /^NPM_TOKEN$/,
43
+ /^NODE_AUTH_TOKEN$/,
44
+ /^YARN_NPM_AUTH/,
45
+ /^NUGET_(API_KEY|AUTH)/,
46
+ /^PYPI_/,
47
+ /^TWINE_/,
48
+ /^CARGO_REGISTRY_TOKEN$/,
49
+ /^GEM_HOST_API_KEY$/,
50
+ /^DOCKER_(PASSWORD|TOKEN|AUTH)/,
51
+ /^REGISTRY_(PASSWORD|TOKEN)/,
52
+ /^KUBECONFIG$/,
53
+ /^KUBE_TOKEN$/,
54
+ /^HELM_/,
55
+ /^VAULT_/,
56
+ /^CONSUL_HTTP_TOKEN$/,
57
+ /^NOMAD_TOKEN$/,
58
+ /^TF_VAR_/,
59
+ /^TF_TOKEN_/,
60
+ /^TFE_TOKEN$/,
61
+ /^PULUMI_ACCESS_TOKEN$/,
62
+ /^SPACELIFT_/,
63
+ /^ANSIBLE_VAULT/,
64
+ /^STRIPE_/,
65
+ /^PAYPAL_/,
66
+ /^BRAINTREE_/,
67
+ /^SQUARE_/,
68
+ /^ADYEN_/,
69
+ /^TWILIO_/,
70
+ /^SENDGRID_/,
71
+ /^MAILGUN_/,
72
+ /^POSTMARK_/,
73
+ /^MAILCHIMP_/,
74
+ /^RESEND_/,
75
+ /^SLACK_/,
76
+ /^DISCORD_(TOKEN|BOT|WEBHOOK)/,
77
+ /^TELEGRAM_BOT/,
78
+ /^SENTRY_(AUTH|DSN)/,
79
+ /^DATADOG_/,
80
+ /^DD_(API|APP)_KEY$/,
81
+ /^NEW_RELIC_/,
82
+ /^HONEYCOMB_/,
83
+ /^OPENAI_/,
84
+ /^ANTHROPIC_(API_KEY|AUTH_TOKEN)$/,
85
+ /^CLAUDE_CODE_OAUTH_TOKEN$/,
86
+ /^GEMINI_API_KEY$/,
87
+ /^MISTRAL_API_KEY$/,
88
+ /^COHERE_API_KEY$/,
89
+ /^GROQ_API_KEY$/,
90
+ /^HF_TOKEN$/,
91
+ /^HUGGING_?FACE_/,
92
+ /^REPLICATE_API/,
93
+ /^PINECONE_/,
94
+ /^ELEVENLABS_/,
95
+ /^DATABASE_URL$/,
96
+ /^.*_DATABASE_URL$/,
97
+ /^(PG|POSTGRES|MYSQL|MARIADB|MSSQL|MONGO(DB)?|REDIS|ELASTIC(SEARCH)?|RABBITMQ|SNOWFLAKE|DATABRICKS)_/,
98
+ /^SSH_AUTH_SOCK$/,
99
+ /^GPG_/,
100
+ /^OP_(SERVICE_ACCOUNT|CONNECT)_/,
101
+ /^BWS_ACCESS_TOKEN$/,
102
+ /^DOPPLER_/,
103
+ /^INFISICAL_/,
104
+ ];
105
+ /** Any name that says what it holds: ..._TOKEN, ..._SECRET, PASSWORD, API_KEY, PRIVATE_KEY, connection strings. */
106
+ export const SECRET_WORDS = /(^|_)(PROD|PRODUCTION|LIVE|SECRETS?|TOKENS?|PASSWORDS?|PASSWD|PWD|PASS|API_?KEYS?|ACCESS_?KEYS?|PRIVATE_?KEYS?|SIGNING_?KEYS?|CREDENTIALS?|CREDS|AUTH|AUTHORIZATION|BEARER|COOKIES?|SESSION_?KEYS?|CONN(ECTION)?_?STR(ING)?|DSN|WEBHOOK(_URL)?|CLIENT_?SECRET|SAS|SALT|PAT)(_|$)/;
107
+ /** Values that are credentials whatever they are called. */
108
+ export const SECRET_VALUES = [
109
+ /\b(AKIA|ASIA|AGPA|AIDA|AROA)[0-9A-Z]{16}\b/, // AWS access key ids
110
+ /\bgh[pousr]_[A-Za-z0-9]{30,}/,
111
+ /\bgithub_pat_[A-Za-z0-9_]{40,}/,
112
+ /\bglpat-[A-Za-z0-9_-]{20,}/,
113
+ /\bxox[abposr]-[A-Za-z0-9-]{10,}/,
114
+ /\bsk-(ant-|proj-|live_|test_)?[A-Za-z0-9_-]{20,}/,
115
+ /\b[rs]k_live_[A-Za-z0-9]{20,}/,
116
+ /\bAIza[0-9A-Za-z_-]{35}\b/,
117
+ /\bya29\.[0-9A-Za-z_-]{20,}/,
118
+ /\bnpm_[A-Za-z0-9]{36}\b/,
119
+ /\bhf_[A-Za-z0-9]{30,}/,
120
+ /-----BEGIN [A-Z ]*PRIVATE KEY-----/,
121
+ /AccountKey=[A-Za-z0-9+/=]{20,}/i,
122
+ /SharedAccessSignature=|[?&]sig=[A-Za-z0-9%+/=]{20,}/i,
123
+ /\b[a-z][a-z0-9+.-]*:\/\/[^\s:/@]+:[^\s@/]+@/i, // user:password@host in any URL (database URLs, registries)
124
+ /\bBearer\s+\S{16,}/i,
125
+ /\bBasic\s+[A-Za-z0-9+/=]{12,}/i,
126
+ /[?&](api[_-]?key|apikey|access[_-]?token|token|key|secret|password|sig|signature|auth)=[^&\s]{8,}/i, // credentials in a URL
127
+ /\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/, // JWTs
128
+ ];
@@ -0,0 +1,12 @@
1
+ import type { Config } from '../../core/types.js';
2
+ export type SecretsConfig = Config['secrets'];
3
+ export declare function isSecretName(name: string, secrets: SecretsConfig): boolean;
4
+ export declare function isSecretValue(value: string): boolean;
5
+ /** Whether a variable (name and value) may go into the sandbox. secrets.allow always wins. */
6
+ export declare function mayPass(name: string, value: unknown, secrets: SecretsConfig): boolean;
7
+ /** A copy of an env/headers map without the secrets; the names removed are added to `removed` (with `where`). */
8
+ export declare function stripVariables(vars: unknown, secrets: SecretsConfig, where: string, removed: string[]): unknown;
9
+ /** settings.json for the sandbox: secrets out of "env", credential helper commands removed. */
10
+ export declare function stripSettings(settings: Record<string, unknown>, secrets: SecretsConfig, removed: string[]): Record<string, unknown>;
11
+ /** Every MCP server in a .claude.json-shaped object (top level and per project). */
12
+ export declare function stripMcpServers(state: Record<string, unknown>, secrets: SecretsConfig, removed: string[]): Record<string, unknown>;
@@ -0,0 +1,100 @@
1
+ import { SECRET_NAMES, SECRET_VALUES, SECRET_WORDS } from './secret-patterns.js';
2
+ /** "AWS_REGION", "MY_*", "*_URL": * matches anything. Case-insensitive, like Windows variable names. */
3
+ function globMatch(pattern, name) {
4
+ return new RegExp('^' +
5
+ pattern
6
+ .split('*')
7
+ .map((p) => p.replace(/[.+?^${}()|[\]\\]/g, '\\$&'))
8
+ .join('.*') +
9
+ '$', 'i').test(name);
10
+ }
11
+ export function isSecretName(name, secrets) {
12
+ // X-API-Key, x-auth-token, api.key: compared as X_API_KEY, X_AUTH_TOKEN, API_KEY.
13
+ const upper = name.toUpperCase().replace(/[-\s.]/g, '_');
14
+ return (SECRET_NAMES.some((r) => r.test(upper)) ||
15
+ SECRET_WORDS.test(upper) ||
16
+ secrets.patterns.some((p) => globMatch(p, name)));
17
+ }
18
+ export function isSecretValue(value) {
19
+ return SECRET_VALUES.some((r) => r.test(value));
20
+ }
21
+ /** Whether a variable (name and value) may go into the sandbox. secrets.allow always wins. */
22
+ export function mayPass(name, value, secrets) {
23
+ if (!secrets.strip || secrets.allow.some((p) => globMatch(p, name)))
24
+ return true;
25
+ return !isSecretName(name, secrets) && !(typeof value === 'string' && isSecretValue(value));
26
+ }
27
+ /** A copy of an env/headers map without the secrets; the names removed are added to `removed` (with `where`). */
28
+ export function stripVariables(vars, secrets, where, removed) {
29
+ if (typeof vars !== 'object' || vars === null || Array.isArray(vars))
30
+ return vars;
31
+ return Object.fromEntries(Object.entries(vars).filter(([name, value]) => {
32
+ const ok = mayPass(name, value, secrets);
33
+ if (!ok)
34
+ removed.push(where + name);
35
+ return ok;
36
+ }));
37
+ }
38
+ /** Claude settings keys that run commands to fetch credentials on this PC (they cannot work in the sandbox anyway). */
39
+ const CREDENTIAL_HELPERS = ['apiKeyHelper', 'awsAuthRefresh', 'awsCredentialExport', 'otelHeadersHelper'];
40
+ /** settings.json for the sandbox: secrets out of "env", credential helper commands removed. */
41
+ export function stripSettings(settings, secrets, removed) {
42
+ if (!secrets.strip)
43
+ return settings;
44
+ const out = { ...settings };
45
+ for (const key of CREDENTIAL_HELPERS.filter((k) => k in out)) {
46
+ delete out[key];
47
+ removed.push('settings.json ' + key);
48
+ }
49
+ if ('env' in out)
50
+ out.env = stripVariables(out.env, secrets, 'settings.json env.', removed);
51
+ return out;
52
+ }
53
+ /** One MCP server: secret env vars and headers removed, and secret-looking command-line arguments blanked. */
54
+ function stripServer(server, secrets, where, removed) {
55
+ if (typeof server !== 'object' || server === null)
56
+ return server;
57
+ const out = { ...server };
58
+ if ('env' in out)
59
+ out.env = stripVariables(out.env, secrets, where + ' env.', removed);
60
+ if ('headers' in out)
61
+ out.headers = stripVariables(out.headers, secrets, where + ' header ', removed);
62
+ if (typeof out.url === 'string' && secrets.strip && isSecretValue(out.url)) {
63
+ removed.push(where + ' url (it carried a credential)');
64
+ out.url = out.url.replace(/([?&])[^=&#]+=[^&#]*/g, (m, sep) => isSecretValue('?' + m.slice(1)) ? sep + m.slice(1).split('=')[0] + '=REMOVED' : m);
65
+ }
66
+ if (Array.isArray(out.args) && secrets.strip) {
67
+ out.args = out.args.map((arg, i) => {
68
+ const previous = i > 0 ? String(out.args[i - 1]) : '';
69
+ const [flag, inline] = typeof arg === 'string' && /^--?[\w-]+=/.test(arg)
70
+ ? [arg.slice(0, arg.indexOf('=')), arg.slice(arg.indexOf('=') + 1)]
71
+ : [null, null];
72
+ const secretFlag = (f) => /^--?[\w-]+$/.test(f) && isSecretName(f.replace(/^-+/, ''), secrets);
73
+ const flagged = typeof arg === 'string' &&
74
+ (isSecretValue(arg) || (flag !== null && (secretFlag(flag) || isSecretValue(inline))) || secretFlag(previous));
75
+ if (flagged)
76
+ removed.push(where + ' argument ' + (i + 1));
77
+ return flagged ? '[removed by agent-sandbox]' : arg;
78
+ });
79
+ }
80
+ return out;
81
+ }
82
+ /** Every MCP server in a .claude.json-shaped object (top level and per project). */
83
+ export function stripMcpServers(state, secrets, removed) {
84
+ if (!secrets.strip)
85
+ return state;
86
+ const servers = (owner, where) => {
87
+ const list = owner.mcpServers;
88
+ if (typeof list !== 'object' || list === null)
89
+ return owner;
90
+ return {
91
+ ...owner,
92
+ mcpServers: Object.fromEntries(Object.entries(list).map(([name, s]) => [name, stripServer(s, secrets, where + 'MCP ' + name, removed)])),
93
+ };
94
+ };
95
+ const top = servers(state, '');
96
+ const projects = top.projects;
97
+ return projects
98
+ ? { ...top, projects: Object.fromEntries(Object.entries(projects).map(([key, p]) => [key, servers(p, '')])) }
99
+ : top;
100
+ }
@@ -0,0 +1,4 @@
1
+ export * from './registry.js';
2
+ export * from './mapper.js';
3
+ export * from './known.js';
4
+ export * from './join.js';
@@ -0,0 +1,4 @@
1
+ export * from './registry.js';
2
+ export * from './mapper.js';
3
+ export * from './known.js';
4
+ export * from './join.js';
@@ -1,14 +1,15 @@
1
- import type { ResolvedRun } from '../core/types.js';
2
- import { type Missing } from '../core/project-policy.js';
3
- import { type ProjectSpecT } from '../shared/schema.js';
4
- import { type ProjectMapper, type RegistryEntry } from './projects.js';
1
+ import type { ResolvedRun } from '../../core/types.js';
2
+ import { type Missing } from '../../core/local-config/index.js';
3
+ import { type ProjectSpec } from '../../shared/channel/index.js';
4
+ import { type RegistryEntry } from './registry.js';
5
+ import { type ProjectMapper } from './mapper.js';
5
6
  /** The launch folder of the running sandbox (host-only storage; its id comes from the guest, so it is checked). */
6
- export declare const runningLaunchPath: (storageRoot: string, dataPath: string) => string | null;
7
+ export declare function runningLaunchPath(storageRoot: string, dataPath: string): string | null;
7
8
  /** What a session or command from this folder needs: where it is inside, and (for another project) its spec. */
8
9
  export interface Joined {
9
10
  project: RegistryEntry;
10
11
  guestDir: string;
11
- spec: ProjectSpecT | null;
12
+ spec: ProjectSpec | null;
12
13
  run: ResolvedRun | null;
13
14
  notes: string[];
14
15
  /** What it wants at boot that the running sandbox started without (it joined without them). */
@@ -17,12 +18,12 @@ export interface Joined {
17
18
  /** What to do when a joining project wants something the running sandbox started without. */
18
19
  export type MissingChoice = 'continue' | 'restart' | 'cancel';
19
20
  /** The project spec the guest provisions from (scans the project folder like a launch does). */
20
- export declare const projectSpec: (run: ResolvedRun, entry: RegistryEntry, hooks: boolean) => ProjectSpecT;
21
+ export declare function projectSpec(run: ResolvedRun, entry: RegistryEntry, hooks: boolean): ProjectSpec;
21
22
  /**
22
23
  * Makes `hostDir` usable in the running sandbox. The launch folder (or a folder below it) needs nothing; any other
23
24
  * folder is resolved with `resolve` (the caller's resolveRun, with the approval prompt), checked, and registered.
24
25
  */
25
- export declare const joinRunning: (o: {
26
+ export declare function joinRunning(o: {
26
27
  storageRoot: string;
27
28
  dataPath: string;
28
29
  packageRoot: string;
@@ -32,4 +33,6 @@ export declare const joinRunning: (o: {
32
33
  mapper?: ProjectMapper;
33
34
  /** Asked before anything is registered when something is missing (default: continue without it). */
34
35
  decide?: (name: string, missing: Missing) => Promise<MissingChoice>;
35
- }) => Promise<Joined>;
36
+ /** Asked when the project's own settings are stricter than the running sandbox's (default: refuse). */
37
+ acceptStricter?: (name: string, stricter: string[]) => Promise<boolean>;
38
+ }): Promise<Joined>;
@@ -1,67 +1,81 @@
1
1
  // Joining the running sandbox from another folder. The folder's run is resolved exactly as a fresh launch would
2
2
  // resolve it (its approved .sandbox-config.json, versions, toolchain detection, database plan), checked against the
3
- // running sandbox's machine-wide protections, made visible inside (host/projects.ts: a project root, a project
3
+ // running sandbox's machine-wide protections, made visible inside (host/projects: a project root, a project
4
4
  // mapped at boot, or wsb share) and described to the guest, which provisions what is missing before its session.
5
5
  // When none of those can make it visible, NeedsRestart reaches the caller, which offers a restart. So does a project
6
6
  // that wants what the sandbox only gets at its start (a .wsb device, more memory, its mappings) when you choose to
7
7
  // restart for it; otherwise it joins without them and they are named.
8
8
  import fs from 'node:fs';
9
9
  import path from 'node:path';
10
- import { checkJoin, missingAtBoot, nothingMissing, protectionsOf } from '../core/project-policy.js';
11
- import { resolveToolchains } from '../core/detect-toolchains.js';
12
- import { assertNoLinks, dirExists, fail } from '../core/util.js';
13
- import { Id } from '../shared/schema.js';
14
- import { readSandboxStatus } from '../shared/rundir.js';
15
- import { syncProjectIn } from '../sync/watcher.js';
16
- import { planDatabases } from './database-plan.js';
17
- import { decideProjectToolchains } from './generate.js';
18
- import { bootRecordOf, NeedsRestart, projectHere, projectMapper, readRegistry, rememberProject, rootHere } from './projects.js';
19
- import { stageScripts } from './launch/stage.js';
20
- import { addRepoSnapshot } from './repo-guard.js';
10
+ import { checkJoin, missingAtBoot, nothingMissing, protectionsOf, } from '../../core/local-config/index.js';
11
+ import { resolveToolchains } from '../../core/detect/index.js';
12
+ import { assertNoLinks, dirExists, fail } from '../../core/util/index.js';
13
+ import { IdSchema, RunDir } from '../../shared/channel/index.js';
14
+ import { syncProjectIn } from '../../sync/index.js';
15
+ import { decideProjectToolchains, planDatabases, stageScripts } from '../launch/index.js';
16
+ import { RepoGuardStore } from '../guard/index.js';
17
+ import { ProjectRegistry } from './registry.js';
18
+ import { NeedsRestart, projectMapper } from './mapper.js';
19
+ import { KnownProjects } from './known.js';
21
20
  /** The launch folder of the running sandbox (host-only storage; its id comes from the guest, so it is checked). */
22
- export const runningLaunchPath = (storageRoot, dataPath) => {
23
- const launchId = readSandboxStatus(dataPath)?.launchId;
24
- if (!launchId || !/^\d+-[0-9a-f]{6}$/.test(launchId) || readRegistry(storageRoot)?.launchId !== launchId)
21
+ export function runningLaunchPath(storageRoot, dataPath) {
22
+ const launchId = new RunDir(dataPath).readSandboxStatus()?.launchId;
23
+ if (!launchId ||
24
+ !/^\d+-[0-9a-f]{6}$/.test(launchId) ||
25
+ new ProjectRegistry(storageRoot).read()?.launchId !== launchId)
25
26
  return null;
26
27
  const launchPath = path.join(storageRoot, 'launches', launchId);
27
28
  assertNoLinks(storageRoot, launchPath);
28
29
  return fs.existsSync(path.join(launchPath, 'session.json')) ? launchPath : null;
29
- };
30
+ }
30
31
  /** The project spec the guest provisions from (scans the project folder like a launch does). */
31
- export const projectSpec = (run, entry, hooks) => {
32
+ export function projectSpec(run, entry, hooks) {
32
33
  const { config } = run;
33
34
  const toolchains = resolveToolchains(config.toolchains, decideProjectToolchains({ run }));
34
35
  const harness = run.harnessName === 'none' ? null : config.harnesses[run.harnessName];
35
36
  return {
36
- name: Id.parse(entry.name), workspace: entry.guest, workspaceHost: entry.host, toolchains, versions: run.versions,
37
+ name: IdSchema.parse(entry.name),
38
+ workspace: entry.guest,
39
+ workspaceHost: entry.host,
40
+ toolchains,
41
+ versions: run.versions,
37
42
  databases: planDatabases(config.databases, run.workspaceHost).slice(0, 8),
38
43
  harnesses: harness ? { [run.harnessName]: harness } : {},
39
44
  hooks,
40
45
  };
41
- };
46
+ }
42
47
  /**
43
48
  * Makes `hostDir` usable in the running sandbox. The launch folder (or a folder below it) needs nothing; any other
44
49
  * folder is resolved with `resolve` (the caller's resolveRun, with the approval prompt), checked, and registered.
45
50
  */
46
- export const joinRunning = async (o) => {
47
- const here = projectHere(o.storageRoot, o.hostDir);
51
+ export async function joinRunning(o) {
52
+ const registryFile = new ProjectRegistry(o.storageRoot);
53
+ const here = registryFile.here(o.hostDir);
48
54
  if (here?.project.primary)
49
55
  return { ...here, spec: null, run: null, notes: [], missing: null };
50
- const registry = readRegistry(o.storageRoot) ?? fail('The running sandbox was started by an older version, so it cannot take another folder.', 'Stop it (sandbox stop) and start it again.');
56
+ const registry = registryFile.read() ??
57
+ fail('The running sandbox was started by an older version, so it cannot take another folder.', 'Stop it (sandbox stop) and start it again.');
51
58
  // A folder below a project already in the sandbox uses that project; anything else becomes a project of its own.
52
59
  const root = here?.project.host ?? path.resolve(o.hostDir);
53
60
  const run = await o.resolve(root);
54
61
  const check = checkJoin(registry.protections, protectionsOf(run.config), Object.keys(registry.atBoot?.widened ?? {}));
55
- if (check.stricter.length) {
56
- fail('This project needs stricter protection than the running sandbox has, and those settings are machine-wide:\n ' + check.stricter.join('\n '), 'Its sessions cannot get them without changing them for the sessions already running. Stop the sandbox (sandbox stop) and start it from ' + root + '.');
62
+ // Machine-wide settings cannot change for one project, so it either runs with the sandbox's (your consent) or not
63
+ // at all.
64
+ const name = here?.project.name ?? path.basename(root);
65
+ const accepted = check.stricter.length > 0 && (await o.acceptStricter?.(name, check.stricter)) === true;
66
+ if (check.stricter.length && !accepted) {
67
+ fail("This project's settings are stricter than the running sandbox's, and those settings are machine-wide:\n " +
68
+ check.stricter.join('\n '), "Join with the sandbox's settings: answer yes in a terminal, or add --yes. Or stop the sandbox (sandbox stop) and start it from " +
69
+ root +
70
+ '.');
57
71
  }
58
72
  // Boot-only wishes (a .wsb device you allowed for it, more memory, its mappings) the running sandbox lacks.
59
73
  const launchPath = runningLaunchPath(o.storageRoot, o.dataPath);
60
- const boot = bootRecordOf(o.storageRoot, launchPath);
74
+ const boot = registryFile.bootRecord(launchPath);
61
75
  const found = boot ? missingAtBoot(registry.protections, boot, run.config, dirExists) : null;
62
76
  const missing = found && !nothingMissing(found) ? found : null;
63
77
  if (missing) {
64
- const choice = o.decide ? await o.decide(here?.project.name ?? path.basename(root), missing) : 'continue';
78
+ const choice = o.decide ? await o.decide(name, missing) : 'continue';
65
79
  if (choice === 'cancel')
66
80
  fail('Cancelled: nothing changed.');
67
81
  if (choice === 'restart')
@@ -71,9 +85,11 @@ export const joinRunning = async (o) => {
71
85
  // Guarded from now on. A folder the sandbox could already write (inside a root, or mapped at boot) and that has no
72
86
  // snapshot from the launch gets an empty one: what is there now may have been planted, so it counts as new.
73
87
  // Anything else is snapshotted before it becomes visible.
74
- addRepoSnapshot(o.dataPath, root, { empty: Boolean(here) || Boolean(rootHere(o.storageRoot, root)) });
88
+ new RepoGuardStore(o.dataPath).add(root, {
89
+ empty: Boolean(here) || Boolean(registryFile.rootHere(root)),
90
+ });
75
91
  const entry = mapper.register(root);
76
- rememberProject(o.storageRoot, entry.host);
92
+ new KnownProjects(o.storageRoot).remember(entry.host);
77
93
  // Your hooks in ~/.agent-sandbox/hooks ran at boot (once per sandbox); the project's own scripts ("scripts" in its
78
94
  // .sandbox-config.json, --script) run before its first agent. The launch folder is read-only for the sandbox, but
79
95
  // this side can still add them to it.
@@ -83,8 +99,21 @@ export const joinRunning = async (o) => {
83
99
  try {
84
100
  syncProjectIn(o.dataPath, { hostWorkspace: entry.host, guestWorkspace: entry.guest });
85
101
  }
86
- catch { /* history is a convenience; never block the session */ }
87
- const notes = [...run.notes, ...check.looser.map((l) => 'The running sandbox is stricter: ' + l + '.'),
88
- ...check.shared.map((s) => s + ' is on in this sandbox for another of its projects (you allowed it there); this project shares it.')];
89
- return { project: entry, guestDir: here ? here.guestDir : entry.guest, spec: projectSpec(run, entry, hooks), run, notes, missing };
90
- };
102
+ catch {
103
+ /* history is a convenience; never block the session */
104
+ }
105
+ const notes = [
106
+ ...run.notes,
107
+ ...check.looser.map((l) => 'The running sandbox is stricter: ' + l + '.'),
108
+ ...(accepted ? ["Runs with the sandbox's settings (you agreed): " + check.stricter.join('; ') + '.'] : []),
109
+ ...check.shared.map((s) => s + ' is on in this sandbox for another of its projects (you allowed it there); this project shares it.'),
110
+ ];
111
+ return {
112
+ project: entry,
113
+ guestDir: here ? here.guestDir : entry.guest,
114
+ spec: projectSpec(run, entry, hooks),
115
+ run,
116
+ notes,
117
+ missing,
118
+ };
119
+ }
@@ -0,0 +1,28 @@
1
+ import { z } from 'zod';
2
+ declare const KnownSchema: z.ZodObject<{
3
+ projects: z.ZodArray<z.ZodObject<{
4
+ host: z.ZodString;
5
+ lastUsed: z.ZodString;
6
+ }, z.core.$strict>>;
7
+ }, z.core.$strict>;
8
+ type Known = z.output<typeof KnownSchema>;
9
+ export type KnownProject = Known['projects'][number];
10
+ /** known-projects.json under the storage folder: every folder a project was started in. */
11
+ export declare class KnownProjects {
12
+ private readonly file;
13
+ constructor(storageRoot: string);
14
+ list(): KnownProject[];
15
+ remember(hostDir: string): void;
16
+ forget(hostDir: string): boolean;
17
+ }
18
+ /**
19
+ * projects.all: the known projects mapped at boot on their own (existing folders, not excluded, not the launch folder,
20
+ * not inside it or a root, which already show them). Pure apart from checking that the folders exist.
21
+ */
22
+ export declare function allProjectsToMap(known: readonly string[], o: {
23
+ readonly primary: string;
24
+ readonly roots: readonly string[];
25
+ readonly exclude: readonly string[];
26
+ readonly exists?: (p: string) => boolean;
27
+ }): string[];
28
+ export {};
@@ -0,0 +1,55 @@
1
+ import path from 'node:path';
2
+ import { z } from 'zod';
3
+ import { dirExists } from '../../core/util/index.js';
4
+ import { JsonFile } from '../../shared/io/index.js';
5
+ import { isWithin } from '../../shared/paths/index.js';
6
+ import { AbsolutePathSchema } from './registry.js';
7
+ const KnownSchema = z.strictObject({
8
+ projects: z.array(z.strictObject({ host: AbsolutePathSchema, lastUsed: z.string().max(64) })).max(2000),
9
+ });
10
+ /** known-projects.json under the storage folder: every folder a project was started in. */
11
+ export class KnownProjects {
12
+ file;
13
+ constructor(storageRoot) {
14
+ this.file = new JsonFile(KnownSchema, path.join(storageRoot, 'known-projects.json'));
15
+ }
16
+ list() {
17
+ return this.file.read()?.projects ?? [];
18
+ }
19
+ remember(hostDir) {
20
+ const host = path.resolve(hostDir);
21
+ const rest = this.list().filter((p) => p.host.toLowerCase() !== host.toLowerCase());
22
+ try {
23
+ this.file.write({ projects: [{ host, lastUsed: new Date().toISOString() }, ...rest].slice(0, 2000) });
24
+ }
25
+ catch {
26
+ /* a convenience list */
27
+ }
28
+ }
29
+ forget(hostDir) {
30
+ const host = path.resolve(hostDir);
31
+ const all = this.list();
32
+ const rest = all.filter((p) => p.host.toLowerCase() !== host.toLowerCase());
33
+ if (rest.length !== all.length)
34
+ this.file.write({ projects: rest });
35
+ return rest.length !== all.length;
36
+ }
37
+ }
38
+ /**
39
+ * projects.all: the known projects mapped at boot on their own (existing folders, not excluded, not the launch folder,
40
+ * not inside it or a root, which already show them). Pure apart from checking that the folders exist.
41
+ */
42
+ export function allProjectsToMap(known, o) {
43
+ const exists = o.exists ?? dirExists;
44
+ const out = [];
45
+ for (const host of known.map((k) => path.resolve(k))) {
46
+ if (o.exclude.some((e) => isWithin(path.resolve(e), host)))
47
+ continue;
48
+ if (isWithin(o.primary, host) || o.roots.some((r) => isWithin(r, host)))
49
+ continue;
50
+ if (out.some((x) => isWithin(x, host) || isWithin(host, x)) || !exists(host))
51
+ continue;
52
+ out.push(host);
53
+ }
54
+ return out;
55
+ }
@@ -0,0 +1,29 @@
1
+ import type { Missing } from '../../core/local-config/index.js';
2
+ import { type Wsb } from '../sandbox/index.js';
3
+ import { type RegistryEntry } from './registry.js';
4
+ /**
5
+ * Why a folder cannot join the running sandbox without a restart (the caller offers one). With `missing`: it could
6
+ * join, but you chose to restart for what it wants at boot (core/local-config/boot-wants.ts).
7
+ */
8
+ export declare class NeedsRestart extends Error {
9
+ readonly hostDir: string;
10
+ readonly reason: string;
11
+ readonly missing?: Missing | undefined;
12
+ constructor(hostDir: string, reason: string, missing?: Missing | undefined);
13
+ }
14
+ export interface ProjectMapper {
15
+ /** The projects of the running sandbox (the launch folder first). */
16
+ list(): RegistryEntry[];
17
+ /** Makes a folder of this PC a project of the running sandbox; throws NeedsRestart when that needs a restart. */
18
+ register(hostDir: string): RegistryEntry;
19
+ /** Forgets a project (never the launch folder). Its folder stays visible until the next start if it is mapped. */
20
+ unregister(name: string): void;
21
+ }
22
+ export interface MapperOptions {
23
+ storageRoot: string;
24
+ packageRoot: string;
25
+ wsbShare: boolean;
26
+ detect?: () => Wsb | null;
27
+ }
28
+ /** Roots first (instant), then `wsb share` where the Windows Sandbox CLI exists, else NeedsRestart. */
29
+ export declare const projectMapper: (o: MapperOptions) => ProjectMapper;