windows-development-sandbox 1.4.0 → 1.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (877) hide show
  1. package/.sandbox-config.example.json +2 -1
  2. package/config.example.json +4 -1
  3. package/dist/api.js +27 -16
  4. package/dist/cli/args.d.ts +4 -6
  5. package/dist/cli/args.js +67 -34
  6. package/dist/cli/argv.d.ts +9 -0
  7. package/dist/cli/argv.js +22 -0
  8. package/dist/cli/commands/accounts.d.ts +1 -1
  9. package/dist/cli/commands/accounts.js +42 -27
  10. package/dist/cli/commands/agent-commands.d.ts +3 -3
  11. package/dist/cli/commands/agent-commands.js +27 -18
  12. package/dist/cli/commands/context.d.ts +9 -11
  13. package/dist/cli/commands/context.js +35 -32
  14. package/dist/cli/commands/data/clean.d.ts +2 -2
  15. package/dist/cli/commands/data/clean.js +27 -11
  16. package/dist/cli/commands/data/collect.d.ts +6 -3
  17. package/dist/cli/commands/data/collect.js +46 -15
  18. package/dist/cli/commands/data/index.d.ts +2 -2
  19. package/dist/cli/commands/data/index.js +30 -12
  20. package/dist/cli/commands/data/remove.d.ts +1 -1
  21. package/dist/cli/commands/data/remove.js +4 -4
  22. package/dist/cli/commands/index.d.ts +5 -4
  23. package/dist/cli/commands/index.js +5 -4
  24. package/dist/cli/commands/launch/add-root.d.ts +7 -0
  25. package/dist/cli/commands/launch/add-root.js +64 -0
  26. package/dist/cli/commands/launch/boot-progress.d.ts +7 -0
  27. package/dist/cli/commands/launch/boot-progress.js +48 -0
  28. package/dist/cli/commands/launch/boot-wants.d.ts +11 -0
  29. package/dist/cli/commands/launch/boot-wants.js +48 -0
  30. package/dist/cli/commands/launch/first-start.d.ts +10 -0
  31. package/dist/cli/commands/launch/first-start.js +53 -0
  32. package/dist/cli/commands/launch/index.d.ts +6 -0
  33. package/dist/cli/commands/launch/index.js +6 -0
  34. package/dist/cli/commands/launch/launch.d.ts +8 -0
  35. package/dist/cli/commands/launch/launch.js +211 -0
  36. package/dist/cli/commands/launch/prepare.d.ts +23 -0
  37. package/dist/cli/commands/launch/prepare.js +109 -0
  38. package/dist/cli/commands/launch/running.d.ts +45 -0
  39. package/dist/cli/commands/launch/running.js +218 -0
  40. package/dist/cli/commands/launch/summary.d.ts +8 -0
  41. package/dist/cli/commands/launch/summary.js +98 -0
  42. package/dist/cli/commands/maintenance/audit.d.ts +3 -0
  43. package/dist/cli/commands/maintenance/audit.js +58 -0
  44. package/dist/cli/commands/maintenance/clean.d.ts +2 -0
  45. package/dist/cli/commands/maintenance/clean.js +10 -0
  46. package/dist/cli/commands/maintenance/config.d.ts +2 -0
  47. package/dist/cli/commands/maintenance/config.js +145 -0
  48. package/dist/cli/commands/maintenance/doctor.d.ts +2 -0
  49. package/dist/cli/commands/maintenance/doctor.js +52 -0
  50. package/dist/cli/commands/maintenance/host-claude.d.ts +2 -0
  51. package/dist/cli/commands/maintenance/host-claude.js +4 -0
  52. package/dist/cli/commands/maintenance/index.d.ts +8 -0
  53. package/dist/cli/commands/maintenance/index.js +9 -0
  54. package/dist/cli/commands/maintenance/logs.d.ts +2 -0
  55. package/dist/cli/commands/maintenance/logs.js +44 -0
  56. package/dist/cli/commands/maintenance/sync.d.ts +2 -0
  57. package/dist/cli/commands/maintenance/sync.js +12 -0
  58. package/dist/cli/commands/maintenance/watch.d.ts +3 -0
  59. package/dist/cli/commands/maintenance/watch.js +6 -0
  60. package/dist/cli/commands/projects/describe-sessions.d.ts +3 -0
  61. package/dist/cli/commands/projects/describe-sessions.js +15 -0
  62. package/dist/cli/commands/projects/here.d.ts +38 -0
  63. package/dist/cli/commands/projects/here.js +145 -0
  64. package/dist/cli/commands/projects/index.d.ts +4 -0
  65. package/dist/cli/commands/projects/index.js +4 -0
  66. package/dist/cli/commands/projects/projects.d.ts +14 -0
  67. package/dist/cli/commands/projects/projects.js +213 -0
  68. package/dist/cli/commands/projects/restart.d.ts +15 -0
  69. package/dist/cli/commands/projects/restart.js +149 -0
  70. package/dist/cli/commands/registry.d.ts +3 -0
  71. package/dist/cli/commands/registry.js +34 -0
  72. package/dist/cli/commands/repair/checks.js +105 -29
  73. package/dist/cli/commands/repair/finders.d.ts +13 -10
  74. package/dist/cli/commands/repair/finders.js +63 -43
  75. package/dist/cli/commands/repair/index.d.ts +4 -4
  76. package/dist/cli/commands/repair/index.js +47 -21
  77. package/dist/cli/commands/repair/types.d.ts +2 -2
  78. package/dist/cli/commands/repair/types.js +7 -2
  79. package/dist/cli/commands/sessions/attach.d.ts +2 -0
  80. package/dist/cli/commands/sessions/attach.js +45 -0
  81. package/dist/cli/commands/sessions/control.d.ts +4 -0
  82. package/dist/cli/commands/sessions/control.js +62 -0
  83. package/dist/cli/commands/sessions/exec.d.ts +6 -0
  84. package/dist/cli/commands/sessions/exec.js +72 -0
  85. package/dist/cli/commands/sessions/index.d.ts +6 -0
  86. package/dist/cli/commands/sessions/index.js +9 -0
  87. package/dist/cli/commands/sessions/list.d.ts +15 -0
  88. package/dist/cli/commands/sessions/list.js +65 -0
  89. package/dist/cli/commands/sessions/status.d.ts +2 -0
  90. package/dist/cli/commands/sessions/status.js +153 -0
  91. package/dist/cli/commands/sessions/window.d.ts +3 -0
  92. package/dist/cli/commands/sessions/window.js +18 -0
  93. package/dist/cli/commands/setup/checks.d.ts +4 -4
  94. package/dist/cli/commands/setup/checks.js +36 -19
  95. package/dist/cli/commands/setup/facts.d.ts +6 -6
  96. package/dist/cli/commands/setup/facts.js +23 -11
  97. package/dist/cli/commands/setup/index.d.ts +1 -1
  98. package/dist/cli/commands/setup/index.js +25 -12
  99. package/dist/cli/commands/user-config.d.ts +5 -5
  100. package/dist/cli/commands/user-config.js +14 -12
  101. package/dist/cli/history.d.ts +5 -4
  102. package/dist/cli/history.js +23 -11
  103. package/dist/cli/index.d.ts +4 -14
  104. package/dist/cli/index.js +27 -77
  105. package/dist/cli/manifest.d.ts +464 -10
  106. package/dist/cli/manifest.js +328 -54
  107. package/dist/cli/menu/apps.d.ts +7 -5
  108. package/dist/cli/menu/apps.js +64 -16
  109. package/dist/cli/menu/command-fields.d.ts +15 -0
  110. package/dist/cli/menu/command-fields.js +23 -0
  111. package/dist/cli/menu/command-form.d.ts +3 -5
  112. package/dist/cli/menu/command-form.js +116 -48
  113. package/dist/cli/menu/home.d.ts +22 -0
  114. package/dist/cli/menu/home.js +72 -0
  115. package/dist/cli/menu/index.d.ts +2 -24
  116. package/dist/cli/menu/index.js +4 -178
  117. package/dist/cli/menu/menu.d.ts +23 -0
  118. package/dist/cli/menu/menu.js +185 -0
  119. package/dist/cli/menu/settings/categories.d.ts +2 -2
  120. package/dist/cli/menu/settings/categories.js +123 -20
  121. package/dist/cli/menu/settings/collections/collection-editor.d.ts +23 -0
  122. package/dist/cli/menu/settings/collections/collection-editor.js +89 -0
  123. package/dist/cli/menu/settings/collections/map-editor.d.ts +10 -0
  124. package/dist/cli/menu/settings/collections/map-editor.js +34 -0
  125. package/dist/cli/menu/settings/collections/object-list-editor.d.ts +10 -0
  126. package/dist/cli/menu/settings/collections/object-list-editor.js +23 -0
  127. package/dist/cli/menu/settings/collections/object-map-editor.d.ts +10 -0
  128. package/dist/cli/menu/settings/collections/object-map-editor.js +35 -0
  129. package/dist/cli/menu/settings/collections/string-list-editor.d.ts +12 -0
  130. package/dist/cli/menu/settings/collections/string-list-editor.js +39 -0
  131. package/dist/cli/menu/settings/config-file.d.ts +2 -2
  132. package/dist/cli/menu/settings/config-file.js +42 -19
  133. package/dist/cli/menu/settings/editor-actions.d.ts +2 -0
  134. package/dist/cli/menu/settings/editor-actions.js +2 -0
  135. package/dist/cli/menu/settings/format.d.ts +5 -0
  136. package/dist/cli/menu/settings/format.js +39 -0
  137. package/dist/cli/menu/settings/index.d.ts +1 -29
  138. package/dist/cli/menu/settings/index.js +1 -133
  139. package/dist/cli/menu/settings/object-editor.d.ts +12 -0
  140. package/dist/cli/menu/settings/object-editor.js +86 -0
  141. package/dist/cli/menu/settings/schema-node.d.ts +3 -1
  142. package/dist/cli/menu/settings/schema-node.js +71 -24
  143. package/dist/cli/menu/settings/settings-editor.d.ts +30 -0
  144. package/dist/cli/menu/settings/settings-editor.js +176 -0
  145. package/dist/cli/menu/settings/{editors.d.ts → value-editor.d.ts} +2 -13
  146. package/dist/cli/menu/settings/value-editor.js +137 -0
  147. package/dist/cli/menu/several.d.ts +4 -4
  148. package/dist/cli/menu/several.js +61 -20
  149. package/dist/cli/{colors.d.ts → output/colors.d.ts} +8 -8
  150. package/dist/cli/{colors.js → output/colors.js} +32 -14
  151. package/dist/cli/output/index.d.ts +3 -0
  152. package/dist/cli/output/index.js +3 -0
  153. package/dist/cli/output/print.d.ts +5 -0
  154. package/dist/cli/output/print.js +14 -0
  155. package/dist/cli/output/progress.d.ts +24 -0
  156. package/dist/cli/output/progress.js +124 -0
  157. package/dist/cli/report.d.ts +2 -0
  158. package/dist/cli/report.js +20 -0
  159. package/dist/cli/tui/app.d.ts +6 -16
  160. package/dist/cli/tui/app.js +28 -8
  161. package/dist/cli/tui/dialogs/confirm-screen.d.ts +20 -0
  162. package/dist/cli/tui/dialogs/confirm-screen.js +50 -0
  163. package/dist/cli/tui/dialogs/message-screen.d.ts +17 -0
  164. package/dist/cli/tui/dialogs/message-screen.js +55 -0
  165. package/dist/cli/tui/dialogs/paragraphs.d.ts +2 -0
  166. package/dist/cli/tui/dialogs/paragraphs.js +5 -0
  167. package/dist/cli/tui/dialogs/text-screen.d.ts +26 -0
  168. package/dist/cli/tui/dialogs/text-screen.js +107 -0
  169. package/dist/cli/tui/frame.js +3 -1
  170. package/dist/cli/tui/index.d.ts +7 -3
  171. package/dist/cli/tui/index.js +4 -2
  172. package/dist/cli/tui/list/list-screen.d.ts +29 -0
  173. package/dist/cli/tui/{list-screen.js → list/list-screen.js} +86 -23
  174. package/dist/cli/tui/{list-screen.d.ts → list/list-types.d.ts} +0 -28
  175. package/dist/cli/tui/screen.d.ts +14 -0
  176. package/dist/cli/tui/terminal.js +34 -10
  177. package/dist/cli/tui/text.d.ts +2 -1
  178. package/dist/cli/tui/text.js +37 -7
  179. package/dist/cli/tui/theme.js +27 -9
  180. package/dist/cli/validate.d.ts +8 -8
  181. package/dist/cli/validate.js +32 -21
  182. package/dist/core/config/defaults.d.ts +2 -0
  183. package/dist/core/config/defaults.js +203 -0
  184. package/dist/core/config/index.d.ts +2 -0
  185. package/dist/core/config/index.js +3 -0
  186. package/dist/core/{config.d.ts → config/loader.d.ts} +1 -2
  187. package/dist/core/config/loader.js +47 -0
  188. package/dist/core/{detect-databases.js → detect/databases.js} +111 -23
  189. package/dist/core/detect/index.d.ts +4 -0
  190. package/dist/core/detect/index.js +4 -0
  191. package/dist/core/{detect-pwsh.d.ts → detect/pwsh.d.ts} +1 -1
  192. package/dist/core/{detect-pwsh.js → detect/pwsh.js} +25 -11
  193. package/dist/core/{detect-toolchains.d.ts → detect/toolchains.d.ts} +1 -1
  194. package/dist/core/{detect-toolchains.js → detect/toolchains.js} +42 -5
  195. package/dist/{guest/toolchains → core/detect}/versions.js +28 -12
  196. package/dist/core/disk.d.ts +2 -0
  197. package/dist/core/disk.js +46 -3
  198. package/dist/core/local-config/boot-wants.d.ts +45 -0
  199. package/dist/core/local-config/boot-wants.js +120 -0
  200. package/dist/core/local-config/file.d.ts +3 -0
  201. package/dist/core/local-config/file.js +16 -0
  202. package/dist/core/local-config/index.d.ts +5 -0
  203. package/dist/core/local-config/index.js +7 -0
  204. package/dist/core/{local-config.d.ts → local-config/overrides.d.ts} +11 -11
  205. package/dist/core/{local-config.js → local-config/overrides.js} +53 -54
  206. package/dist/core/{project-policy.d.ts → local-config/policy.d.ts} +7 -3
  207. package/dist/core/{project-policy.js → local-config/policy.js} +16 -6
  208. package/dist/core/local-config/trust.d.ts +13 -0
  209. package/dist/core/local-config/trust.js +43 -0
  210. package/dist/core/package-info.d.ts +4 -0
  211. package/dist/core/package-info.js +13 -0
  212. package/dist/core/run/guest-workspace.d.ts +23 -0
  213. package/dist/core/run/guest-workspace.js +47 -0
  214. package/dist/core/run/index.d.ts +3 -0
  215. package/dist/core/run/index.js +3 -0
  216. package/dist/core/run/resolve-run.d.ts +3 -0
  217. package/dist/core/run/resolve-run.js +202 -0
  218. package/dist/core/run/versions.d.ts +13 -0
  219. package/dist/core/run/versions.js +65 -0
  220. package/dist/core/safe-paths.js +17 -5
  221. package/dist/core/schema/apps.d.ts +4 -4
  222. package/dist/core/schema/apps.js +55 -21
  223. package/dist/core/schema/common.d.ts +13 -10
  224. package/dist/core/schema/common.js +16 -10
  225. package/dist/core/schema/config.d.ts +18 -12
  226. package/dist/core/schema/config.js +78 -53
  227. package/dist/core/schema/databases.d.ts +4 -3
  228. package/dist/core/schema/databases.js +16 -12
  229. package/dist/core/schema/harness.d.ts +1 -1
  230. package/dist/core/schema/harness.js +17 -7
  231. package/dist/core/schema/index.d.ts +6 -0
  232. package/dist/core/schema/index.js +8 -0
  233. package/dist/core/schema/json-schema.js +10 -5
  234. package/dist/core/schema/profile.d.ts +4 -4
  235. package/dist/core/schema/profile.js +37 -17
  236. package/dist/core/schema/projects.d.ts +2 -1
  237. package/dist/core/schema/projects.js +16 -5
  238. package/dist/core/schema/sandbox.d.ts +12 -12
  239. package/dist/core/schema/sandbox.js +101 -37
  240. package/dist/core/schema/toolchains.d.ts +6 -1
  241. package/dist/core/schema/toolchains.js +84 -34
  242. package/dist/core/types.d.ts +36 -9
  243. package/dist/core/util/errors.d.ts +8 -0
  244. package/dist/core/util/errors.js +14 -0
  245. package/dist/core/util/fs.d.ts +8 -0
  246. package/dist/core/util/fs.js +40 -0
  247. package/dist/core/util/index.d.ts +7 -0
  248. package/dist/core/util/index.js +7 -0
  249. package/dist/core/util/jsonc.d.ts +6 -0
  250. package/dist/core/util/jsonc.js +25 -0
  251. package/dist/core/util/links.d.ts +10 -0
  252. package/dist/core/util/links.js +39 -0
  253. package/dist/core/util/paths.d.ts +7 -0
  254. package/dist/core/util/paths.js +33 -0
  255. package/dist/core/util/process.d.ts +15 -0
  256. package/dist/core/util/process.js +54 -0
  257. package/dist/core/util/text.d.ts +8 -0
  258. package/dist/core/util/text.js +8 -0
  259. package/dist/guest/{setup/agents.js → agents/agent-installer.js} +24 -4
  260. package/dist/guest/apps/after-install.d.ts +3 -0
  261. package/dist/guest/apps/after-install.js +47 -0
  262. package/dist/guest/apps/app-installer.d.ts +22 -0
  263. package/dist/guest/apps/app-installer.js +116 -0
  264. package/dist/guest/apps/find-exe.d.ts +5 -0
  265. package/dist/guest/apps/find-exe.js +41 -0
  266. package/dist/guest/apps/index.d.ts +3 -10
  267. package/dist/guest/apps/index.js +6 -206
  268. package/dist/guest/apps/resolvers.js +37 -9
  269. package/dist/guest/apps/shortcuts.d.ts +6 -0
  270. package/dist/guest/apps/shortcuts.js +28 -0
  271. package/dist/guest/apps/sources.d.ts +4 -0
  272. package/dist/guest/apps/sources.js +17 -0
  273. package/dist/guest/apps/unpack.d.ts +3 -0
  274. package/dist/guest/apps/unpack.js +47 -0
  275. package/dist/guest/{audit-parse.js → audit/parse.js} +39 -3
  276. package/dist/guest/{audit.d.ts → audit/process-audit.d.ts} +3 -1
  277. package/dist/guest/{audit.js → audit/process-audit.js} +33 -8
  278. package/dist/guest/boot/boot-env.d.ts +4 -0
  279. package/dist/guest/{boot-env.js → boot/boot-env.js} +7 -5
  280. package/dist/guest/boot/boot.d.ts +1 -0
  281. package/dist/guest/{main.js → boot/boot.js} +100 -50
  282. package/dist/guest/{guide.js → boot/guide.js} +32 -7
  283. package/dist/guest/{project-env.d.ts → boot/project-env.d.ts} +3 -3
  284. package/dist/guest/{project-env.js → boot/project-env.js} +12 -4
  285. package/dist/guest/boot/project-status.d.ts +5 -0
  286. package/dist/guest/boot/project-status.js +28 -0
  287. package/dist/guest/daemon/daemon.d.ts +1 -0
  288. package/dist/guest/daemon/daemon.js +51 -0
  289. package/dist/guest/daemon/exec.js +18 -6
  290. package/dist/guest/daemon/{shutdown.js → idle-shutdown.js} +5 -4
  291. package/dist/guest/daemon/{project.d.ts → project-provisioner.d.ts} +3 -3
  292. package/dist/guest/daemon/{project.js → project-provisioner.js} +60 -22
  293. package/dist/guest/daemon/relays.js +5 -3
  294. package/dist/guest/daemon/{session.js → sessions.js} +84 -24
  295. package/dist/guest/daemon/state.d.ts +4 -1
  296. package/dist/guest/daemon/state.js +34 -20
  297. package/dist/guest/databases/database-server.d.ts +13 -0
  298. package/dist/guest/databases/database-server.js +35 -0
  299. package/dist/guest/databases/dynamodb.d.ts +12 -0
  300. package/dist/guest/databases/dynamodb.js +81 -0
  301. package/dist/guest/databases/index.d.ts +2 -0
  302. package/dist/guest/databases/index.js +2 -0
  303. package/dist/guest/databases/mongodb.d.ts +7 -0
  304. package/dist/guest/databases/mongodb.js +46 -0
  305. package/dist/guest/databases/mysql.d.ts +7 -0
  306. package/dist/guest/databases/mysql.js +59 -0
  307. package/dist/guest/databases/names.d.ts +5 -0
  308. package/dist/guest/databases/names.js +8 -0
  309. package/dist/guest/databases/postgres.d.ts +9 -0
  310. package/dist/guest/databases/postgres.js +85 -0
  311. package/dist/guest/databases/redis.d.ts +7 -0
  312. package/dist/guest/databases/redis.js +25 -0
  313. package/dist/guest/databases/registry.d.ts +5 -0
  314. package/dist/guest/databases/registry.js +51 -0
  315. package/dist/guest/databases/sbx-db.d.ts +1 -0
  316. package/dist/guest/{db.js → databases/sbx-db.js} +13 -13
  317. package/dist/guest/{toolchains/databases → databases}/server.d.ts +5 -5
  318. package/dist/guest/{toolchains/databases → databases}/server.js +18 -13
  319. package/dist/guest/entries/daemon.js +16 -0
  320. package/dist/guest/entries/db.js +10 -0
  321. package/dist/guest/entries/gitguard.js +20 -0
  322. package/dist/guest/entries/main.d.ts +1 -0
  323. package/dist/guest/entries/main.js +24 -0
  324. package/dist/guest/entries/netproxy.d.ts +1 -0
  325. package/dist/guest/entries/netproxy.js +7 -0
  326. package/dist/guest/entries/view.d.ts +1 -0
  327. package/dist/guest/entries/view.js +11 -0
  328. package/dist/guest/{gitguard.js → git/decision.js} +49 -26
  329. package/dist/guest/network/addresses.d.ts +2 -0
  330. package/dist/guest/network/addresses.js +6 -0
  331. package/dist/guest/{setup/network.d.ts → network/allow-only.d.ts} +0 -10
  332. package/dist/guest/network/allow-only.js +84 -0
  333. package/dist/guest/network/firewall.d.ts +9 -0
  334. package/dist/guest/{setup/network.js → network/firewall.js} +58 -63
  335. package/dist/guest/network/proxy-server.d.ts +2 -0
  336. package/dist/guest/{netproxy.js → network/proxy-server.js} +37 -18
  337. package/dist/guest/{helpers.d.ts → runtime/csc.d.ts} +1 -1
  338. package/dist/guest/{helpers.js → runtime/csc.js} +7 -2
  339. package/dist/guest/runtime/fs.d.ts +2 -0
  340. package/dist/guest/runtime/fs.js +6 -0
  341. package/dist/guest/runtime/log.d.ts +3 -0
  342. package/dist/guest/runtime/log.js +22 -0
  343. package/dist/guest/runtime/paths.d.ts +13 -0
  344. package/dist/guest/runtime/paths.js +14 -0
  345. package/dist/guest/{ports.js → runtime/ports.js} +8 -2
  346. package/dist/guest/runtime/process.d.ts +15 -0
  347. package/dist/guest/runtime/process.js +59 -0
  348. package/dist/guest/{project-context.js → runtime/project-context.js} +1 -1
  349. package/dist/guest/runtime/session.d.ts +5 -0
  350. package/dist/guest/runtime/session.js +10 -0
  351. package/dist/guest/runtime/status.d.ts +7 -0
  352. package/dist/guest/runtime/status.js +57 -0
  353. package/dist/guest/{cmdline.js → sessions/cmdline.js} +10 -4
  354. package/dist/guest/{ptyhost.js → sessions/pty-host.js} +12 -5
  355. package/dist/guest/{view.js → sessions/viewer.js} +8 -11
  356. package/dist/guest/setup/claude-mem.d.ts +10 -0
  357. package/dist/guest/setup/{claude.js → claude-mem.js} +18 -78
  358. package/dist/guest/setup/{claude.d.ts → claude-profile.d.ts} +0 -10
  359. package/dist/guest/setup/claude-profile.js +89 -0
  360. package/dist/guest/setup/desktop.d.ts +2 -0
  361. package/dist/guest/setup/desktop.js +32 -0
  362. package/dist/guest/setup/environment.js +28 -5
  363. package/dist/guest/setup/{user.d.ts → git-identity.d.ts} +0 -2
  364. package/dist/guest/setup/git-identity.js +34 -0
  365. package/dist/guest/{gitrules.d.ts → setup/git-rules.d.ts} +1 -1
  366. package/dist/guest/setup/git-rules.js +50 -0
  367. package/dist/guest/setup/hooks.js +22 -5
  368. package/dist/guest/setup/{policy.js → managed-policy.js} +2 -2
  369. package/dist/guest/toolchains/catalogue.d.ts +4 -4
  370. package/dist/guest/toolchains/catalogue.js +30 -7
  371. package/dist/guest/toolchains/detect.d.ts +12 -0
  372. package/dist/guest/toolchains/detect.js +54 -0
  373. package/dist/guest/toolchains/index.d.ts +3 -17
  374. package/dist/guest/toolchains/index.js +1 -80
  375. package/dist/guest/toolchains/install.d.ts +20 -0
  376. package/dist/guest/toolchains/install.js +29 -0
  377. package/dist/guest/toolchains/languages/go.d.ts +3 -0
  378. package/dist/guest/toolchains/{go.js → languages/go.js} +27 -9
  379. package/dist/guest/toolchains/languages/java.d.ts +8 -0
  380. package/dist/guest/toolchains/{java.js → languages/java.js} +57 -18
  381. package/dist/guest/toolchains/languages/node.d.ts +3 -0
  382. package/dist/guest/toolchains/{node.js → languages/node.js} +51 -18
  383. package/dist/guest/toolchains/languages/php.d.ts +3 -0
  384. package/dist/guest/toolchains/{scripting → languages}/php.js +36 -11
  385. package/dist/guest/toolchains/languages/python-tools.d.ts +3 -0
  386. package/dist/guest/toolchains/languages/python-tools.js +12 -0
  387. package/dist/guest/toolchains/languages/python.d.ts +3 -0
  388. package/dist/guest/toolchains/{python.js → languages/python.js} +29 -16
  389. package/dist/guest/toolchains/languages/ruby.d.ts +3 -0
  390. package/dist/guest/toolchains/{scripting → languages}/ruby.js +28 -10
  391. package/dist/guest/toolchains/leftovers.d.ts +1 -1
  392. package/dist/guest/toolchains/leftovers.js +13 -11
  393. package/dist/guest/toolchains/managers.d.ts +6 -6
  394. package/dist/guest/toolchains/managers.js +38 -17
  395. package/dist/guest/toolchains/native/binstall.d.ts +3 -2
  396. package/dist/guest/toolchains/native/binstall.js +20 -8
  397. package/dist/guest/toolchains/native/cpp.d.ts +2 -2
  398. package/dist/guest/toolchains/native/cpp.js +23 -8
  399. package/dist/guest/toolchains/native/dotnet.d.ts +5 -3
  400. package/dist/guest/toolchains/native/dotnet.js +72 -24
  401. package/dist/guest/toolchains/native/mesa.d.ts +2 -2
  402. package/dist/guest/toolchains/native/mesa.js +27 -10
  403. package/dist/guest/toolchains/native/msvc/environment.d.ts +4 -4
  404. package/dist/guest/toolchains/native/msvc/environment.js +30 -16
  405. package/dist/guest/toolchains/native/msvc/index.d.ts +3 -3
  406. package/dist/guest/toolchains/native/msvc/index.js +10 -8
  407. package/dist/guest/toolchains/native/msvc/packages.d.ts +1 -1
  408. package/dist/guest/toolchains/native/msvc/packages.js +69 -23
  409. package/dist/guest/toolchains/native/msvc/tree.d.ts +6 -6
  410. package/dist/guest/toolchains/native/msvc/tree.js +15 -9
  411. package/dist/guest/toolchains/native/rust-extras.d.ts +23 -0
  412. package/dist/guest/toolchains/native/rust-extras.js +100 -0
  413. package/dist/guest/toolchains/native/rust.d.ts +2 -2
  414. package/dist/guest/toolchains/native/rust.js +41 -10
  415. package/dist/guest/toolchains/{scripting → native}/vcruntime.d.ts +2 -2
  416. package/dist/guest/toolchains/{scripting → native}/vcruntime.js +17 -7
  417. package/dist/guest/toolchains/package-ledger.d.ts +17 -0
  418. package/dist/guest/toolchains/package-ledger.js +54 -0
  419. package/dist/guest/toolchains/plan.d.ts +3 -24
  420. package/dist/guest/toolchains/plan.js +99 -111
  421. package/dist/guest/toolchains/runtimes.d.ts +6 -6
  422. package/dist/guest/toolchains/runtimes.js +31 -13
  423. package/dist/guest/toolchains/scheduler.d.ts +22 -0
  424. package/dist/guest/toolchains/scheduler.js +123 -0
  425. package/dist/guest/toolchains/setup.d.ts +10 -0
  426. package/dist/guest/toolchains/setup.js +22 -0
  427. package/dist/guest/toolchains/state-file.d.ts +3 -0
  428. package/dist/guest/toolchains/state-file.js +10 -0
  429. package/dist/guest/toolchains/step.d.ts +24 -0
  430. package/dist/guest/toolchains/step.js +1 -0
  431. package/dist/guest/toolchains/tool-env.d.ts +12 -0
  432. package/dist/guest/toolchains/tool-env.js +16 -0
  433. package/dist/guest/toolchains/tools/cli.d.ts +10 -0
  434. package/dist/guest/toolchains/{cli.js → tools/cli.js} +35 -15
  435. package/dist/guest/toolchains/tools/git.d.ts +3 -0
  436. package/dist/guest/toolchains/{git.js → tools/git.js} +38 -15
  437. package/dist/guest/toolchains/tools/pwsh.d.ts +4 -0
  438. package/dist/guest/toolchains/{pwsh.js → tools/pwsh.js} +14 -7
  439. package/dist/guest/toolchains/{vscode-profile.d.ts → tools/vscode-profile.d.ts} +6 -6
  440. package/dist/guest/toolchains/{vscode-profile.js → tools/vscode-profile.js} +28 -12
  441. package/dist/guest/toolchains/{vscode.d.ts → tools/vscode.d.ts} +6 -6
  442. package/dist/guest/toolchains/{vscode.js → tools/vscode.js} +67 -21
  443. package/dist/guest/toolchains/version-cache.d.ts +16 -0
  444. package/dist/guest/toolchains/version-cache.js +67 -0
  445. package/dist/host/agent-commands/commands.d.ts +13 -0
  446. package/dist/host/agent-commands/commands.js +33 -0
  447. package/dist/host/agent-commands/forwarders.d.ts +7 -0
  448. package/dist/host/agent-commands/forwarders.js +31 -0
  449. package/dist/host/agent-commands/index.d.ts +4 -0
  450. package/dist/host/agent-commands/index.js +4 -0
  451. package/dist/host/agent-commands/reconcile.d.ts +12 -0
  452. package/dist/host/agent-commands/reconcile.js +69 -0
  453. package/dist/host/agent-commands/user-path.d.ts +2 -0
  454. package/dist/host/agent-commands/user-path.js +33 -0
  455. package/dist/host/audit/collect.d.ts +2 -2
  456. package/dist/host/audit/collect.js +59 -22
  457. package/dist/host/audit/log.d.ts +2 -2
  458. package/dist/host/audit/log.js +24 -8
  459. package/dist/host/{attach.d.ts → channel/attach.d.ts} +2 -2
  460. package/dist/host/{attach.js → channel/attach.js} +33 -15
  461. package/dist/host/channel/channel.d.ts +51 -0
  462. package/dist/host/channel/channel.js +196 -0
  463. package/dist/host/channel/index.d.ts +2 -0
  464. package/dist/host/channel/index.js +2 -0
  465. package/dist/host/guard/agent-files.d.ts +7 -0
  466. package/dist/host/guard/agent-files.js +103 -0
  467. package/dist/host/guard/commands.d.ts +10 -0
  468. package/dist/host/guard/commands.js +123 -0
  469. package/dist/host/guard/file-hash.d.ts +4 -0
  470. package/dist/host/guard/file-hash.js +37 -0
  471. package/dist/host/guard/git-config.d.ts +5 -0
  472. package/dist/host/guard/git-config.js +62 -0
  473. package/dist/host/guard/git-dirs.d.ts +12 -0
  474. package/dist/host/guard/git-dirs.js +53 -0
  475. package/dist/host/guard/index.d.ts +5 -0
  476. package/dist/host/guard/index.js +4 -0
  477. package/dist/host/guard/mark-of-the-web.d.ts +8 -0
  478. package/dist/host/guard/mark-of-the-web.js +74 -0
  479. package/dist/host/guard/nested-repos.d.ts +14 -0
  480. package/dist/host/guard/nested-repos.js +88 -0
  481. package/dist/host/guard/quarantine.d.ts +3 -0
  482. package/dist/host/guard/quarantine.js +24 -0
  483. package/dist/host/guard/repo-guard.d.ts +10 -0
  484. package/dist/host/guard/repo-guard.js +36 -0
  485. package/dist/host/guard/store.d.ts +40 -0
  486. package/dist/host/guard/store.js +145 -0
  487. package/dist/host/guard/types.d.ts +27 -0
  488. package/dist/host/guard/types.js +3 -0
  489. package/dist/host/guard/watch-state.d.ts +9 -0
  490. package/dist/host/guard/watch-state.js +26 -0
  491. package/dist/host/launch/boot-projects.d.ts +17 -0
  492. package/dist/host/launch/{projects.js → boot-projects.js} +27 -12
  493. package/dist/host/{database-plan.d.ts → launch/database-plan.d.ts} +5 -5
  494. package/dist/host/{database-plan.js → launch/database-plan.js} +24 -13
  495. package/dist/host/launch/generate.d.ts +4 -0
  496. package/dist/host/launch/generate.js +77 -0
  497. package/dist/host/launch/index.d.ts +10 -0
  498. package/dist/host/launch/index.js +10 -0
  499. package/dist/host/launch/mappings.d.ts +7 -2
  500. package/dist/host/launch/mappings.js +83 -24
  501. package/dist/host/launch/pc-scan.d.ts +5 -0
  502. package/dist/host/{pc-scan.js → launch/pc-scan.js} +20 -13
  503. package/dist/host/launch/project-scan.d.ts +7 -0
  504. package/dist/host/{project-scan.js → launch/project-scan.js} +29 -21
  505. package/dist/host/launch/session-file.d.ts +23 -0
  506. package/dist/host/launch/session-file.js +73 -0
  507. package/dist/host/launch/stage.d.ts +5 -5
  508. package/dist/host/launch/stage.js +14 -13
  509. package/dist/host/launch/toolchains.d.ts +4 -0
  510. package/dist/host/launch/toolchains.js +11 -0
  511. package/dist/host/launch/{wsb.d.ts → wsb-file.d.ts} +4 -2
  512. package/dist/host/launch/wsb-file.js +56 -0
  513. package/dist/host/life/crash-report.d.ts +8 -0
  514. package/dist/host/life/crash-report.js +87 -0
  515. package/dist/host/life/index.d.ts +6 -0
  516. package/dist/host/life/index.js +6 -0
  517. package/dist/host/life/keep-awake.d.ts +10 -0
  518. package/dist/host/life/keep-awake.js +29 -0
  519. package/dist/host/life/life-record.d.ts +48 -0
  520. package/dist/host/life/life-record.js +76 -0
  521. package/dist/host/life/stop-events.d.ts +27 -0
  522. package/dist/host/life/stop-events.js +96 -0
  523. package/dist/host/life/stop-warning.d.ts +4 -0
  524. package/dist/host/life/stop-warning.js +25 -0
  525. package/dist/host/life/windows-update.d.ts +3 -0
  526. package/dist/host/life/windows-update.js +11 -0
  527. package/dist/host/native.d.ts +4 -0
  528. package/dist/host/native.js +11 -0
  529. package/dist/host/network/index.d.ts +1 -0
  530. package/dist/host/network/index.js +1 -0
  531. package/dist/host/{port-forward.d.ts → network/port-forward.d.ts} +1 -1
  532. package/dist/host/{port-forward.js → network/port-forward.js} +16 -10
  533. package/dist/host/profile/accounts.d.ts +37 -0
  534. package/dist/host/profile/accounts.js +146 -0
  535. package/dist/host/profile/claude-login.d.ts +22 -0
  536. package/dist/host/profile/claude-login.js +57 -0
  537. package/dist/host/{claude-profile.d.ts → profile/claude-profile.d.ts} +9 -9
  538. package/dist/host/{claude-profile.js → profile/claude-profile.js} +32 -22
  539. package/dist/host/profile/index.d.ts +7 -0
  540. package/dist/host/profile/index.js +7 -0
  541. package/dist/host/profile/personalize.d.ts +2 -0
  542. package/dist/host/profile/personalize.js +127 -0
  543. package/dist/host/profile/reg-file.d.ts +8 -0
  544. package/dist/host/profile/reg-file.js +45 -0
  545. package/dist/host/profile/secret-files.d.ts +2 -0
  546. package/dist/host/profile/secret-files.js +25 -0
  547. package/dist/host/profile/secret-patterns.d.ts +6 -0
  548. package/dist/host/profile/secret-patterns.js +128 -0
  549. package/dist/host/profile/secrets.d.ts +12 -0
  550. package/dist/host/profile/secrets.js +100 -0
  551. package/dist/host/projects/index.d.ts +4 -0
  552. package/dist/host/projects/index.js +4 -0
  553. package/dist/host/projects/join.d.ts +38 -0
  554. package/dist/host/projects/join.js +119 -0
  555. package/dist/host/projects/known.d.ts +28 -0
  556. package/dist/host/projects/known.js +55 -0
  557. package/dist/host/projects/mapper.d.ts +29 -0
  558. package/dist/host/projects/mapper.js +88 -0
  559. package/dist/host/projects/registry.d.ts +83 -0
  560. package/dist/host/projects/registry.js +136 -0
  561. package/dist/host/sandbox/doctor.d.ts +2 -0
  562. package/dist/host/sandbox/doctor.js +42 -0
  563. package/dist/host/sandbox/host-claude.d.ts +1 -0
  564. package/dist/host/sandbox/host-claude.js +26 -0
  565. package/dist/host/sandbox/index.d.ts +6 -0
  566. package/dist/host/sandbox/index.js +6 -0
  567. package/dist/host/{platform.d.ts → sandbox/platform.d.ts} +0 -5
  568. package/dist/host/sandbox/platform.js +60 -0
  569. package/dist/host/sandbox/probe.d.ts +3 -0
  570. package/dist/host/sandbox/probe.js +47 -0
  571. package/dist/host/{window.js → sandbox/window.js} +7 -5
  572. package/dist/host/{wsb.js → sandbox/wsb-cli.js} +31 -8
  573. package/dist/host/{cleanup.js → storage/cleanup.js} +27 -12
  574. package/dist/host/storage/index.d.ts +2 -0
  575. package/dist/host/storage/index.js +2 -0
  576. package/dist/host/storage/state-files.d.ts +4 -0
  577. package/dist/host/storage/state-files.js +10 -0
  578. package/dist/host/test-guard.js +1 -1
  579. package/dist/host/tools/conpty.d.ts +8 -0
  580. package/dist/host/tools/conpty.js +58 -0
  581. package/dist/host/tools/index.d.ts +2 -0
  582. package/dist/host/tools/index.js +2 -0
  583. package/dist/host/{terminal.d.ts → tools/windows-terminal.d.ts} +2 -10
  584. package/dist/host/{terminal.js → tools/windows-terminal.js} +33 -57
  585. package/dist/host/workspace-view/active-views.d.ts +3 -0
  586. package/dist/host/workspace-view/active-views.js +22 -0
  587. package/dist/host/workspace-view/index.d.ts +2 -18
  588. package/dist/host/workspace-view/index.js +2 -49
  589. package/dist/host/workspace-view/plan.d.ts +16 -0
  590. package/dist/host/workspace-view/plan.js +50 -0
  591. package/dist/host/workspace-view/rules.js +10 -3
  592. package/dist/host/workspace-view/view-state.d.ts +10 -0
  593. package/dist/host/workspace-view/view-state.js +31 -0
  594. package/dist/host/workspace-view/view.d.ts +1 -0
  595. package/dist/host/workspace-view/view.js +51 -55
  596. package/dist/runtime/daemon.js +4232 -1918
  597. package/dist/runtime/db.js +2145 -830
  598. package/dist/runtime/gitguard.js +29 -11
  599. package/dist/runtime/main.js +4760 -2155
  600. package/dist/runtime/netproxy.js +1654 -418
  601. package/dist/runtime/view.js +1515 -453
  602. package/dist/selftest/accounts.test.d.ts +1 -1
  603. package/dist/selftest/accounts.test.js +20 -17
  604. package/dist/selftest/agent-commands.test.d.ts +1 -1
  605. package/dist/selftest/agent-commands.test.js +9 -5
  606. package/dist/selftest/audit.test.d.ts +1 -1
  607. package/dist/selftest/audit.test.js +46 -13
  608. package/dist/selftest/channel.test.d.ts +1 -1
  609. package/dist/selftest/channel.test.js +91 -8
  610. package/dist/selftest/cli.test.d.ts +1 -1
  611. package/dist/selftest/cli.test.js +68 -16
  612. package/dist/selftest/cmdline.test.d.ts +1 -1
  613. package/dist/selftest/cmdline.test.js +36 -7
  614. package/dist/selftest/config.test.d.ts +1 -1
  615. package/dist/selftest/config.test.js +12 -5
  616. package/dist/selftest/data.test.d.ts +1 -1
  617. package/dist/selftest/data.test.js +35 -6
  618. package/dist/selftest/detect.test.d.ts +1 -1
  619. package/dist/selftest/detect.test.js +22 -9
  620. package/dist/selftest/generate.test.d.ts +1 -1
  621. package/dist/selftest/generate.test.js +33 -9
  622. package/dist/selftest/git-access.test.d.ts +1 -1
  623. package/dist/selftest/git-access.test.js +42 -4
  624. package/dist/selftest/guest-boot.test.d.ts +1 -1
  625. package/dist/selftest/guest-boot.test.js +25 -7
  626. package/dist/selftest/host-sim.test.d.ts +1 -1
  627. package/dist/selftest/host-sim.test.js +27 -3
  628. package/dist/selftest/hostile-input.test.d.ts +1 -1
  629. package/dist/selftest/hostile-input.test.js +5 -5
  630. package/dist/selftest/index.d.ts +1 -1
  631. package/dist/selftest/index.js +73 -16
  632. package/dist/selftest/layout.test.d.ts +2 -0
  633. package/dist/selftest/layout.test.js +131 -0
  634. package/dist/selftest/links.test.d.ts +1 -1
  635. package/dist/selftest/links.test.js +16 -11
  636. package/dist/selftest/live-daemon.test.d.ts +1 -1
  637. package/dist/selftest/live-daemon.test.js +20 -8
  638. package/dist/selftest/live-git.test.d.ts +1 -1
  639. package/dist/selftest/live-git.test.js +13 -4
  640. package/dist/selftest/live-network.test.d.ts +1 -1
  641. package/dist/selftest/live-network.test.js +24 -9
  642. package/dist/selftest/live-projects.test.d.ts +1 -1
  643. package/dist/selftest/live-projects.test.js +47 -20
  644. package/dist/selftest/live-terminal.test.d.ts +2 -0
  645. package/dist/selftest/live-terminal.test.js +195 -0
  646. package/dist/selftest/local-config.test.d.ts +1 -1
  647. package/dist/selftest/local-config.test.js +88 -15
  648. package/dist/selftest/mirror.test.d.ts +1 -1
  649. package/dist/selftest/mirror.test.js +118 -19
  650. package/dist/selftest/network.test.d.ts +1 -1
  651. package/dist/selftest/network.test.js +17 -8
  652. package/dist/selftest/personalization.test.d.ts +1 -1
  653. package/dist/selftest/personalization.test.js +12 -5
  654. package/dist/selftest/projects.test.d.ts +1 -1
  655. package/dist/selftest/projects.test.js +336 -72
  656. package/dist/selftest/repair.test.d.ts +1 -1
  657. package/dist/selftest/repair.test.js +17 -5
  658. package/dist/selftest/repo-guard.test.d.ts +1 -1
  659. package/dist/selftest/repo-guard.test.js +21 -20
  660. package/dist/selftest/secrets.test.d.ts +1 -1
  661. package/dist/selftest/secrets.test.js +57 -13
  662. package/dist/selftest/setup.test.d.ts +1 -1
  663. package/dist/selftest/setup.test.js +25 -5
  664. package/dist/selftest/{fixtures.d.ts → support/fixtures.d.ts} +7 -4
  665. package/dist/selftest/{fixtures.js → support/fixtures.js} +95 -17
  666. package/dist/selftest/{harness.js → support/harness.js} +24 -7
  667. package/dist/selftest/{live.d.ts → support/live.d.ts} +2 -2
  668. package/dist/selftest/{live.js → support/live.js} +34 -10
  669. package/dist/selftest/support/suite.js +1 -0
  670. package/dist/selftest/sync.test.d.ts +1 -1
  671. package/dist/selftest/sync.test.js +64 -26
  672. package/dist/selftest/test-guard.test.d.ts +1 -1
  673. package/dist/selftest/test-guard.test.js +43 -15
  674. package/dist/selftest/toolchains.test.d.ts +1 -1
  675. package/dist/selftest/toolchains.test.js +135 -36
  676. package/dist/selftest/workspace-view.test.d.ts +1 -1
  677. package/dist/selftest/workspace-view.test.js +48 -11
  678. package/dist/selftest/workspace.test.d.ts +1 -1
  679. package/dist/selftest/workspace.test.js +13 -4
  680. package/dist/shared/{apps.d.ts → apps/catalogue.d.ts} +1 -11
  681. package/dist/shared/apps/catalogue.js +768 -0
  682. package/dist/shared/apps/index.d.ts +2 -0
  683. package/dist/shared/apps/index.js +2 -0
  684. package/dist/shared/apps/selection.d.ts +11 -0
  685. package/dist/shared/apps/selection.js +40 -0
  686. package/dist/shared/channel/index.d.ts +2 -0
  687. package/dist/shared/channel/index.js +2 -0
  688. package/dist/shared/channel/run-dir.d.ts +30 -0
  689. package/dist/shared/channel/run-dir.js +84 -0
  690. package/dist/shared/{schema.d.ts → channel/schema.d.ts} +60 -19
  691. package/dist/shared/channel/schema.js +131 -0
  692. package/dist/shared/download/archive.d.ts +13 -0
  693. package/dist/shared/download/archive.js +57 -0
  694. package/dist/shared/download/downloader.d.ts +35 -0
  695. package/dist/shared/download/downloader.js +110 -0
  696. package/dist/shared/download/github.d.ts +16 -0
  697. package/dist/shared/download/github.js +74 -0
  698. package/dist/shared/download/http.d.ts +5 -0
  699. package/dist/shared/download/http.js +30 -0
  700. package/dist/shared/download/index.d.ts +5 -0
  701. package/dist/shared/download/index.js +5 -0
  702. package/dist/shared/download/spawn.d.ts +2 -0
  703. package/dist/shared/download/spawn.js +7 -0
  704. package/dist/shared/io/index.d.ts +3 -0
  705. package/dist/shared/io/index.js +3 -0
  706. package/dist/shared/io/json-file.d.ts +10 -0
  707. package/dist/shared/io/json-file.js +21 -0
  708. package/dist/shared/io/json.d.ts +13 -0
  709. package/dist/shared/io/json.js +49 -0
  710. package/dist/shared/{safe-remove.js → io/safe-remove.js} +32 -7
  711. package/dist/shared/{netrules.js → network/firewall-rules.js} +36 -5
  712. package/dist/shared/network/index.d.ts +2 -0
  713. package/dist/shared/network/index.js +2 -0
  714. package/dist/shared/{netpolicy.js → network/policy.js} +66 -11
  715. package/dist/shared/{paths.js → paths/claude-paths.js} +12 -2
  716. package/dist/shared/{guest-paths.d.ts → paths/guest-paths.d.ts} +21 -0
  717. package/dist/shared/paths/guest-paths.js +146 -0
  718. package/dist/shared/paths/index.d.ts +3 -0
  719. package/dist/shared/paths/index.js +3 -0
  720. package/dist/shared/{projects.d.ts → paths/projects.d.ts} +27 -4
  721. package/dist/shared/paths/projects.js +136 -0
  722. package/dist/shared/pty/client.d.ts +21 -0
  723. package/dist/shared/pty/client.js +79 -0
  724. package/dist/shared/pty/console-input.d.ts +11 -0
  725. package/dist/shared/pty/console-input.js +81 -0
  726. package/dist/shared/pty/index.d.ts +6 -0
  727. package/dist/shared/pty/index.js +6 -0
  728. package/dist/shared/pty/input-joiner.d.ts +15 -0
  729. package/dist/shared/pty/input-joiner.js +44 -0
  730. package/dist/shared/pty/output-filter.d.ts +13 -0
  731. package/dist/shared/pty/output-filter.js +140 -0
  732. package/dist/shared/pty/protocol.d.ts +36 -0
  733. package/dist/shared/pty/protocol.js +60 -0
  734. package/dist/shared/pty/terminal.d.ts +24 -0
  735. package/dist/shared/pty/terminal.js +147 -0
  736. package/dist/shared/test-guard.js +3 -1
  737. package/dist/sync/claude-mem.d.ts +1 -1
  738. package/dist/sync/claude-mem.js +9 -4
  739. package/dist/sync/history.d.ts +1 -29
  740. package/dist/sync/history.js +57 -45
  741. package/dist/sync/index.d.ts +5 -0
  742. package/dist/sync/index.js +5 -0
  743. package/dist/sync/sync-cycle.d.ts +18 -0
  744. package/dist/sync/sync-cycle.js +85 -0
  745. package/dist/sync/sync-state.d.ts +32 -0
  746. package/dist/sync/sync-state.js +37 -0
  747. package/dist/sync/watcher.d.ts +0 -18
  748. package/dist/sync/watcher.js +66 -100
  749. package/native/keep-awake.ps1 +8 -0
  750. package/native/power.cs +23 -0
  751. package/native/stop-events.ps1 +38 -0
  752. package/package.json +11 -3
  753. package/sandbox/linkgate.cs +98 -0
  754. package/sandbox/memlog.ps1 +15 -6
  755. package/sandbox/ptyhost.cs +60 -3
  756. package/schemas/config.schema.json +48 -1
  757. package/schemas/sandbox-config.schema.json +37 -3
  758. package/dist/cli/commands/launch.d.ts +0 -29
  759. package/dist/cli/commands/launch.js +0 -366
  760. package/dist/cli/commands/maintenance.d.ts +0 -10
  761. package/dist/cli/commands/maintenance.js +0 -187
  762. package/dist/cli/commands/project.d.ts +0 -29
  763. package/dist/cli/commands/project.js +0 -63
  764. package/dist/cli/commands/projects.d.ts +0 -14
  765. package/dist/cli/commands/projects.js +0 -146
  766. package/dist/cli/commands/restart.d.ts +0 -6
  767. package/dist/cli/commands/restart.js +0 -85
  768. package/dist/cli/commands/sessions.d.ts +0 -12
  769. package/dist/cli/commands/sessions.js +0 -257
  770. package/dist/cli/menu/settings/editors.js +0 -305
  771. package/dist/cli/progress.d.ts +0 -9
  772. package/dist/cli/progress.js +0 -49
  773. package/dist/cli/tui/dialogs.d.ts +0 -57
  774. package/dist/cli/tui/dialogs.js +0 -162
  775. package/dist/core/config.js +0 -109
  776. package/dist/core/schema.d.ts +0 -6
  777. package/dist/core/schema.js +0 -8
  778. package/dist/core/util.d.ts +0 -62
  779. package/dist/core/util.js +0 -156
  780. package/dist/core/workspace.d.ts +0 -18
  781. package/dist/core/workspace.js +0 -145
  782. package/dist/guest/boot-env.d.ts +0 -4
  783. package/dist/guest/daemon.js +0 -57
  784. package/dist/guest/env.d.ts +0 -52
  785. package/dist/guest/env.js +0 -103
  786. package/dist/guest/gitrules.js +0 -11
  787. package/dist/guest/project-status.d.ts +0 -5
  788. package/dist/guest/project-status.js +0 -17
  789. package/dist/guest/setup/user.js +0 -51
  790. package/dist/guest/toolchains/cli.d.ts +0 -10
  791. package/dist/guest/toolchains/common.d.ts +0 -54
  792. package/dist/guest/toolchains/common.js +0 -147
  793. package/dist/guest/toolchains/databases/dynamodb.d.ts +0 -8
  794. package/dist/guest/toolchains/databases/dynamodb.js +0 -52
  795. package/dist/guest/toolchains/databases/index.d.ts +0 -6
  796. package/dist/guest/toolchains/databases/index.js +0 -62
  797. package/dist/guest/toolchains/databases/mongodb.d.ts +0 -3
  798. package/dist/guest/toolchains/databases/mongodb.js +0 -31
  799. package/dist/guest/toolchains/databases/mysql.d.ts +0 -3
  800. package/dist/guest/toolchains/databases/mysql.js +0 -38
  801. package/dist/guest/toolchains/databases/postgres.d.ts +0 -5
  802. package/dist/guest/toolchains/databases/postgres.js +0 -38
  803. package/dist/guest/toolchains/databases/redis.d.ts +0 -3
  804. package/dist/guest/toolchains/databases/redis.js +0 -16
  805. package/dist/guest/toolchains/git.d.ts +0 -3
  806. package/dist/guest/toolchains/go.d.ts +0 -3
  807. package/dist/guest/toolchains/java.d.ts +0 -8
  808. package/dist/guest/toolchains/node.d.ts +0 -3
  809. package/dist/guest/toolchains/pwsh.d.ts +0 -4
  810. package/dist/guest/toolchains/python.d.ts +0 -3
  811. package/dist/guest/toolchains/scripting/php.d.ts +0 -3
  812. package/dist/guest/toolchains/scripting/ruby.d.ts +0 -3
  813. package/dist/host/accounts.d.ts +0 -32
  814. package/dist/host/accounts.js +0 -128
  815. package/dist/host/agent-commands.d.ts +0 -25
  816. package/dist/host/agent-commands.js +0 -145
  817. package/dist/host/channel.d.ts +0 -38
  818. package/dist/host/channel.js +0 -162
  819. package/dist/host/generate.d.ts +0 -13
  820. package/dist/host/generate.js +0 -108
  821. package/dist/host/join.d.ts +0 -28
  822. package/dist/host/join.js +0 -76
  823. package/dist/host/launch/projects.d.ts +0 -15
  824. package/dist/host/launch/wsb.js +0 -34
  825. package/dist/host/motw.d.ts +0 -17
  826. package/dist/host/motw.js +0 -74
  827. package/dist/host/pc-scan.d.ts +0 -6
  828. package/dist/host/personalize.d.ts +0 -10
  829. package/dist/host/personalize.js +0 -97
  830. package/dist/host/platform.js +0 -129
  831. package/dist/host/project-scan.d.ts +0 -7
  832. package/dist/host/projects.d.ts +0 -100
  833. package/dist/host/projects.js +0 -147
  834. package/dist/host/repo-guard.d.ts +0 -43
  835. package/dist/host/repo-guard.js +0 -347
  836. package/dist/host/secrets.d.ts +0 -14
  837. package/dist/host/secrets.js +0 -133
  838. package/dist/host/stops.d.ts +0 -67
  839. package/dist/host/stops.js +0 -126
  840. package/dist/shared/apps.js +0 -114
  841. package/dist/shared/download.d.ts +0 -60
  842. package/dist/shared/download.js +0 -215
  843. package/dist/shared/guest-paths.js +0 -61
  844. package/dist/shared/projects.js +0 -67
  845. package/dist/shared/pty-client.d.ts +0 -91
  846. package/dist/shared/pty-client.js +0 -349
  847. package/dist/shared/rundir.d.ts +0 -41
  848. package/dist/shared/rundir.js +0 -96
  849. package/dist/shared/schema.js +0 -92
  850. /package/dist/{guest/daemon.d.ts → cli/tui/list/list-types.js} +0 -0
  851. /package/dist/{guest/db.d.ts → cli/tui/screen.js} +0 -0
  852. /package/dist/core/{detect-databases.d.ts → detect/databases.d.ts} +0 -0
  853. /package/dist/{guest/toolchains → core/detect}/versions.d.ts +0 -0
  854. /package/dist/guest/{setup/agents.d.ts → agents/agent-installer.d.ts} +0 -0
  855. /package/dist/guest/{audit-parse.d.ts → audit/parse.d.ts} +0 -0
  856. /package/dist/guest/{guide.d.ts → boot/guide.d.ts} +0 -0
  857. /package/dist/guest/daemon/{shutdown.d.ts → idle-shutdown.d.ts} +0 -0
  858. /package/dist/guest/daemon/{session.d.ts → sessions.d.ts} +0 -0
  859. /package/dist/guest/{main.d.ts → entries/daemon.d.ts} +0 -0
  860. /package/dist/guest/{netproxy.d.ts → entries/db.d.ts} +0 -0
  861. /package/dist/{selftest/suite.js → guest/entries/gitguard.d.ts} +0 -0
  862. /package/dist/guest/{gitguard.d.ts → git/decision.d.ts} +0 -0
  863. /package/dist/guest/{ports.d.ts → runtime/ports.d.ts} +0 -0
  864. /package/dist/guest/{project-context.d.ts → runtime/project-context.d.ts} +0 -0
  865. /package/dist/guest/{cmdline.d.ts → sessions/cmdline.d.ts} +0 -0
  866. /package/dist/guest/{ptyhost.d.ts → sessions/pty-host.d.ts} +0 -0
  867. /package/dist/guest/{view.d.ts → sessions/viewer.d.ts} +0 -0
  868. /package/dist/guest/setup/{policy.d.ts → managed-policy.d.ts} +0 -0
  869. /package/dist/host/{window.d.ts → sandbox/window.d.ts} +0 -0
  870. /package/dist/host/{wsb.d.ts → sandbox/wsb-cli.d.ts} +0 -0
  871. /package/dist/host/{cleanup.d.ts → storage/cleanup.d.ts} +0 -0
  872. /package/dist/selftest/{harness.d.ts → support/harness.d.ts} +0 -0
  873. /package/dist/selftest/{suite.d.ts → support/suite.d.ts} +0 -0
  874. /package/dist/shared/{safe-remove.d.ts → io/safe-remove.d.ts} +0 -0
  875. /package/dist/shared/{netrules.d.ts → network/firewall-rules.d.ts} +0 -0
  876. /package/dist/shared/{netpolicy.d.ts → network/policy.d.ts} +0 -0
  877. /package/dist/shared/{paths.d.ts → paths/claude-paths.d.ts} +0 -0
@@ -1,5 +1,5 @@
1
- import { Text } from './text.js';
2
- import { Theme } from './theme.js';
1
+ import { Text } from '../text.js';
2
+ import { Theme } from '../theme.js';
3
3
  export class ListScreen {
4
4
  o;
5
5
  category = 0;
@@ -29,7 +29,9 @@ export class ListScreen {
29
29
  const label = (id) => this.o.categories?.find((c) => c.id === id)?.label ?? '';
30
30
  return all.filter((i) => {
31
31
  const it = this.o.items[i];
32
- const hay = [it.label, Text.strip(it.hint ?? ''), it.description, it.keywords, it.section, label(it.category)].join(' ').toLowerCase();
32
+ const hay = [it.label, Text.strip(it.hint ?? ''), it.description, it.keywords, it.section, label(it.category)]
33
+ .join(' ')
34
+ .toLowerCase();
33
35
  return words.every((w) => hay.includes(w));
34
36
  });
35
37
  }
@@ -42,7 +44,9 @@ export class ListScreen {
42
44
  const searchAll = Boolean(this.query.trim() && this.o.categories);
43
45
  for (const index of visible) {
44
46
  const it = this.o.items[index];
45
- const heading = searchAll ? [this.o.categories?.find((c) => c.id === it.category)?.label, it.section].filter(Boolean).join(' › ') : it.section;
47
+ const heading = searchAll
48
+ ? [this.o.categories?.find((c) => c.id === it.category)?.label, it.section].filter(Boolean).join(' › ')
49
+ : it.section;
46
50
  if (heading && heading !== section)
47
51
  rows.push({ kind: 'section', text: heading });
48
52
  section = heading;
@@ -53,19 +57,32 @@ export class ListScreen {
53
57
  render(size) {
54
58
  const visible = this.visible();
55
59
  this.cursor = Math.min(this.cursor, Math.max(0, visible.length - 1));
56
- const sideWidth = this.o.categories ? Math.min(32, Math.max(...this.o.categories.map((c) => Text.width(c.label))) + 7) : 0;
60
+ const sideWidth = this.o.categories
61
+ ? Math.min(32, Math.max(...this.o.categories.map((c) => Text.width(c.label))) + 7)
62
+ : 0;
57
63
  const rest = size.width - 1 - (sideWidth ? sideWidth + 3 : 0);
58
64
  const detailsRight = rest >= 100;
59
65
  const detailsWidth = detailsRight ? Math.min(52, Math.floor(rest * 0.38)) : rest;
60
66
  const listWidth = detailsRight ? rest - detailsWidth - 3 : rest;
61
67
  const top = [];
62
68
  if (this.o.tabs)
63
- top.push(' ' + this.o.tabs.items.map((tab, i) => (i === this.o.tabs.active ? tab.paint(' ' + tab.badge + ' ' + tab.label + ' ') : Theme.muted(' ' + tab.label + ' '))).join(' ') + Theme.muted(' tab switches'), '');
64
- const intro = typeof this.o.intro === 'string' ? [this.o.intro] : this.o.intro ?? [];
69
+ top.push(' ' +
70
+ this.o.tabs.items
71
+ .map((tab, i) => i === this.o.tabs.active
72
+ ? tab.paint(' ' + tab.badge + ' ' + tab.label + ' ')
73
+ : Theme.muted(' ' + tab.label + ' '))
74
+ .join(' ') +
75
+ Theme.muted(' tab switches'), '');
76
+ const intro = typeof this.o.intro === 'string' ? [this.o.intro] : (this.o.intro ?? []);
65
77
  for (const line of intro)
66
78
  top.push(...Text.wrap(line, size.width - 3).map((l) => ' ' + Theme.muted(l)));
67
79
  if (this.searching || this.query)
68
- top.push(' ' + Theme.accent(Theme.glyph.search) + ' ' + this.query + (this.searching ? Theme.accent('▏') : '') + Theme.muted(' ' + visible.length + ' match' + (visible.length === 1 ? '' : 'es')));
80
+ top.push(' ' +
81
+ Theme.accent(Theme.glyph.search) +
82
+ ' ' +
83
+ this.query +
84
+ (this.searching ? Theme.accent('▏') : '') +
85
+ Theme.muted(' ' + visible.length + ' match' + (visible.length === 1 ? '' : 'es')));
69
86
  if (top.length)
70
87
  top.push('');
71
88
  const details = this.detailsLines(visible[this.cursor], detailsWidth);
@@ -84,13 +101,19 @@ export class ListScreen {
84
101
  this.offset = cursorRow - listHeight + 1;
85
102
  }
86
103
  this.offset = Math.max(0, Math.min(this.offset, Math.max(0, rows.length - listHeight)));
87
- const listLines = rows.slice(this.offset, this.offset + listHeight).map((row) => this.rowLine(row, visible, listWidth));
104
+ const listLines = rows
105
+ .slice(this.offset, this.offset + listHeight)
106
+ .map((row) => this.rowLine(row, visible, listWidth));
88
107
  if (!visible.length)
89
- listLines.push('', ' ' + Theme.muted(this.query ? 'Nothing matches "' + this.query + '".' : this.o.empty ?? 'Nothing here yet.'));
108
+ listLines.push('', ' ' +
109
+ Theme.muted(this.query ? 'Nothing matches "' + this.query + '".' : (this.o.empty ?? 'Nothing here yet.')));
90
110
  if (rows.length > listHeight) {
91
111
  const above = this.offset;
92
112
  const below = rows.length - this.offset - listHeight;
93
- listLines.push(Theme.muted(' ' + (above > 0 ? '▲ ' + above + ' above' : '') + (above > 0 && below > 0 ? ' ' : '') + (below > 0 ? '▼ ' + below + ' more' : '')));
113
+ listLines.push(Theme.muted(' ' +
114
+ (above > 0 ? '▲ ' + above + ' above' : '') +
115
+ (above > 0 && below > 0 ? ' ' : '') +
116
+ (below > 0 ? '▼ ' + below + ' more' : '')));
94
117
  }
95
118
  const sideLines = this.sideLines(sideWidth);
96
119
  const body = [...top];
@@ -104,7 +127,9 @@ export class ListScreen {
104
127
  if (bottomDetails.length) {
105
128
  // The details sit at the bottom, whatever the length of the list.
106
129
  while (body.length < size.height - bottomDetails.length - 1)
107
- body.push(sideWidth ? Text.fit(sideLines[body.length - top.length] ?? '', sideWidth) + ' ' + Theme.dim(Theme.glyph.vline) : '');
130
+ body.push(sideWidth
131
+ ? Text.fit(sideLines[body.length - top.length] ?? '', sideWidth) + ' ' + Theme.dim(Theme.glyph.vline)
132
+ : '');
108
133
  body.push(Theme.dim(' ' + Theme.glyph.line.repeat(size.width - 3)), ...bottomDetails.map((l) => ' ' + l));
109
134
  }
110
135
  return { path: this.o.path, status: this.o.status, body, keys: this.keys(), notice: this.notice };
@@ -114,13 +139,21 @@ export class ListScreen {
114
139
  return ' ' + Theme.accentBold(row.text);
115
140
  const it = this.o.items[row.index];
116
141
  const selected = visible[this.cursor] === row.index;
117
- const box = this.o.multi ? (this.checked.has(row.index) ? Theme.ok(Theme.glyph.checked) : Theme.muted(Theme.glyph.unchecked)) + ' ' : '';
142
+ const box = this.o.multi
143
+ ? (this.checked.has(row.index) ? Theme.ok(Theme.glyph.checked) : Theme.muted(Theme.glyph.unchecked)) + ' '
144
+ : '';
118
145
  const icon = it.icon ? it.icon + ' ' : '';
119
146
  const hint = it.hint ?? '';
120
147
  const hintWidth = Math.min(Text.width(hint), Math.floor(width * 0.5));
121
148
  const labelWidth = width - 4 - Text.width(box) - Text.width(icon) - (hintWidth ? hintWidth + 2 : 0);
122
149
  const label = it.disabled ? Theme.muted(it.label) : it.label;
123
- const line = (selected ? Theme.glyph.pointer : ' ') + ' ' + box + icon + Text.fit(label, labelWidth) + (hintWidth ? ' ' + Text.fit(hint, hintWidth, 'right') : '') + ' ';
150
+ const line = (selected ? Theme.glyph.pointer : ' ') +
151
+ ' ' +
152
+ box +
153
+ icon +
154
+ Text.fit(label, labelWidth) +
155
+ (hintWidth ? ' ' + Text.fit(hint, hintWidth, 'right') : '') +
156
+ ' ';
124
157
  if (!selected)
125
158
  return ' ' + line;
126
159
  return this.focus === 'list' ? ' ' + Theme.selected(Text.strip(line)) : ' ' + Theme.accent(Text.strip(line));
@@ -140,7 +173,10 @@ export class ListScreen {
140
173
  const w = Math.max(10, width - 1);
141
174
  if (this.focus === 'side' && this.o.categories) {
142
175
  const cat = this.o.categories[this.category];
143
- return [Theme.bold(cat.label), ...(cat.description ? Text.wrap(cat.description, w).map((l) => Theme.muted(l)) : [])];
176
+ return [
177
+ Theme.bold(cat.label),
178
+ ...(cat.description ? Text.wrap(cat.description, w).map((l) => Theme.muted(l)) : []),
179
+ ];
144
180
  }
145
181
  if (index === undefined)
146
182
  return [];
@@ -154,24 +190,41 @@ export class ListScreen {
154
190
  }
155
191
  keys() {
156
192
  if (this.searching)
157
- return [['type', 'to search'], ['↑↓', 'move'], ['↵', this.o.multi ? 'done' : 'open'], ['esc', 'clear search']];
193
+ return [
194
+ ['type', 'to search'],
195
+ ['↑↓', 'move'],
196
+ ['↵', this.o.multi ? 'done' : 'open'],
197
+ ['esc', 'clear search'],
198
+ ];
158
199
  return [
159
200
  ['↑↓', 'move'],
160
- ...(this.o.tabs ? [['tab', 'switch ' + this.o.tabs.items.map((t) => t.label.toLowerCase()).join(' / ')]] : []),
201
+ ...(this.o.tabs
202
+ ? [['tab', 'switch ' + this.o.tabs.items.map((t) => t.label.toLowerCase()).join(' / ')]]
203
+ : []),
161
204
  ...(this.o.categories ? [['←→', 'categories']] : []),
162
- ...(this.o.multi ? [['space', 'tick'], ['a', 'tick all shown'], ['↵', 'done']] : [['↵', 'open']]),
205
+ ...(this.o.multi
206
+ ? [
207
+ ['space', 'tick'],
208
+ ['a', 'tick all shown'],
209
+ ['↵', 'done'],
210
+ ]
211
+ : [['↵', 'open']]),
163
212
  ['/', 'search'],
164
213
  ...(this.o.actions ?? []).map((a) => [a.key, a.label]),
165
214
  ['esc', this.o.escapeLabel ?? 'back'],
166
215
  ];
167
216
  }
168
217
  /** Programmatic notice (e.g. "Saved") shown until the next key. */
169
- setNotice(text) { this.notice = text; }
218
+ setNotice(text) {
219
+ this.notice = text;
220
+ }
170
221
  handle(key) {
171
222
  const visible = this.visible();
172
223
  const current = visible[this.cursor];
173
224
  this.notice = undefined;
174
- const move = (by) => { this.cursor = Math.max(0, Math.min(visible.length - 1, this.cursor + by)); };
225
+ const move = (by) => {
226
+ this.cursor = Math.max(0, Math.min(visible.length - 1, this.cursor + by));
227
+ };
175
228
  if (key.name === 'up') {
176
229
  if (this.focus === 'side')
177
230
  this.switchCategory(-1);
@@ -263,9 +316,13 @@ export class ListScreen {
263
316
  return;
264
317
  }
265
318
  if (key.name === 'return')
266
- return { done: { kind: 'multi', values: this.o.items.filter((_, i) => this.checked.has(i)).map((it) => it.value) } };
319
+ return {
320
+ done: { kind: 'multi', values: this.o.items.filter((_, i) => this.checked.has(i)).map((it) => it.value) },
321
+ };
267
322
  }
268
- if ((key.name === 'return' || key.name === 'right' || (key.name === 'space' && !this.searching)) && current !== undefined && !this.o.multi) {
323
+ if ((key.name === 'return' || key.name === 'right' || (key.name === 'space' && !this.searching)) &&
324
+ current !== undefined &&
325
+ !this.o.multi) {
269
326
  const it = this.o.items[current];
270
327
  if (it.disabled) {
271
328
  this.notice = Theme.warn(it.disabled);
@@ -275,7 +332,13 @@ export class ListScreen {
275
332
  }
276
333
  const action = !this.searching && key.text ? this.o.actions?.find((a) => a.key === key.text) : undefined;
277
334
  if (action)
278
- return { done: { kind: 'action', key: action.key, value: current === undefined ? undefined : this.o.items[current].value } };
335
+ return {
336
+ done: {
337
+ kind: 'action',
338
+ key: action.key,
339
+ value: current === undefined ? undefined : this.o.items[current].value,
340
+ },
341
+ };
279
342
  return;
280
343
  }
281
344
  toggle(index) {
@@ -1,6 +1,3 @@
1
- import type { FrameParts } from './frame.js';
2
- import type { Screen, Size, Step } from './app.js';
3
- import type { Key } from './terminal.js';
4
1
  export interface ListItem<T> {
5
2
  value: T;
6
3
  label: string;
@@ -74,28 +71,3 @@ export interface ListOptions<T> {
74
71
  /** What Esc does, for the footer ("back", "quit"). */
75
72
  escapeLabel?: string;
76
73
  }
77
- export declare class ListScreen<T> implements Screen<ListResult<T>> {
78
- private readonly o;
79
- private category;
80
- private focus;
81
- private cursor;
82
- private offset;
83
- private query;
84
- private searching;
85
- private notice;
86
- private readonly checked;
87
- constructor(o: ListOptions<T>);
88
- /** Indexes of the entries shown now: all matches of the search, else the current category's, else all. */
89
- private visible;
90
- private rows;
91
- render(size: Size): FrameParts;
92
- private rowLine;
93
- private sideLines;
94
- private detailsLines;
95
- private keys;
96
- /** Programmatic notice (e.g. "Saved") shown until the next key. */
97
- setNotice(text: string | undefined): void;
98
- handle(key: Key): Step<ListResult<T>>;
99
- private toggle;
100
- private switchCategory;
101
- }
@@ -0,0 +1,14 @@
1
+ import { type FrameParts } from './frame.js';
2
+ import { type Key } from './terminal.js';
3
+ export interface Size {
4
+ width: number;
5
+ height: number;
6
+ }
7
+ /** What a screen's key handler returns: `{ done: value }` ends the screen, nothing keeps it open (and redraws it). */
8
+ export type Step<T> = {
9
+ done: T;
10
+ } | undefined | void;
11
+ export interface Screen<T> {
12
+ render(size: Size): FrameParts;
13
+ handle(key: Key): Step<T> | Promise<Step<T>>;
14
+ }
@@ -5,7 +5,10 @@ import readline from 'node:readline';
5
5
  import { Text } from './text.js';
6
6
  /** Ctrl+C: leave the menu at once (callers let it propagate to the top). */
7
7
  export class ExitRequested extends Error {
8
- constructor() { super('Ctrl+C'); this.name = 'ExitPromptError'; }
8
+ constructor() {
9
+ super('Ctrl+C');
10
+ this.name = 'ExitPromptError';
11
+ }
9
12
  }
10
13
  export class Terminal {
11
14
  stdin;
@@ -16,15 +19,24 @@ export class Terminal {
16
19
  waiting = null;
17
20
  resizeHandler = null;
18
21
  onKeypress = (str, key) => this.push(str, key);
19
- onResize = () => { this.frame = []; this.resizeHandler?.(); };
22
+ onResize = () => {
23
+ this.frame = [];
24
+ this.resizeHandler?.();
25
+ };
20
26
  constructor(stdin = process.stdin, stdout = process.stdout) {
21
27
  this.stdin = stdin;
22
28
  this.stdout = stdout;
23
29
  }
24
- get width() { return Math.max(40, this.stdout.columns ?? 80); }
25
- get height() { return Math.max(12, this.stdout.rows ?? 30); }
30
+ get width() {
31
+ return Math.max(40, this.stdout.columns ?? 80);
32
+ }
33
+ get height() {
34
+ return Math.max(12, this.stdout.rows ?? 30);
35
+ }
26
36
  /** Called after the window was resized (the screen draws itself again). */
27
- onResized(handler) { this.resizeHandler = handler; }
37
+ onResized(handler) {
38
+ this.resizeHandler = handler;
39
+ }
28
40
  start() {
29
41
  if (this.active)
30
42
  return;
@@ -51,15 +63,19 @@ export class Terminal {
51
63
  this.queue = [];
52
64
  this.stdout.write('\x1b[0m\x1b[?25h\x1b[?1049l');
53
65
  }
54
- get running() { return this.active; }
66
+ get running() {
67
+ return this.active;
68
+ }
55
69
  /** Draws a whole screen: `lines` are cut to the width and padded to the height; unchanged rows are not rewritten. */
56
70
  render(lines) {
57
71
  const { width, height } = this;
58
72
  // One column is left free: writing the last column can scroll older consoles.
59
73
  const rows = Array.from({ length: height }, (_, i) => Text.fit(lines[i] ?? '', width - 1));
60
74
  let out = '';
61
- rows.forEach((row, i) => { if (this.frame[i] !== row)
62
- out += '\x1b[' + (i + 1) + ';1H' + row + '\x1b[0m'; });
75
+ rows.forEach((row, i) => {
76
+ if (this.frame[i] !== row)
77
+ out += '\x1b[' + (i + 1) + ';1H' + row + '\x1b[0m';
78
+ });
63
79
  if (this.frame.length !== rows.length)
64
80
  out = '\x1b[H\x1b[2J' + rows.map((r, i) => '\x1b[' + (i + 1) + ';1H' + r + '\x1b[0m').join('');
65
81
  this.frame = rows;
@@ -71,10 +87,18 @@ export class Terminal {
71
87
  const next = this.queue.shift();
72
88
  if (next)
73
89
  return next.ctrl && next.name === 'c' ? Promise.reject(new ExitRequested()) : Promise.resolve(next);
74
- return new Promise((resolve, reject) => { this.waiting = { resolve, reject }; });
90
+ return new Promise((resolve, reject) => {
91
+ this.waiting = { resolve, reject };
92
+ });
75
93
  }
76
94
  push(str, key) {
77
- const event = { name: key?.name ?? '', text: str && !key?.ctrl && !key?.meta && str.length >= 1 && str >= ' ' && str !== '\x7f' ? str : '', ctrl: Boolean(key?.ctrl), meta: Boolean(key?.meta), shift: Boolean(key?.shift) };
95
+ const event = {
96
+ name: key?.name ?? '',
97
+ text: str && !key?.ctrl && !key?.meta && str.length >= 1 && str >= ' ' && str !== '\x7f' ? str : '',
98
+ ctrl: Boolean(key?.ctrl),
99
+ meta: Boolean(key?.meta),
100
+ shift: Boolean(key?.shift),
101
+ };
78
102
  const waiting = this.waiting;
79
103
  if (!waiting) {
80
104
  this.queue.push(event);
@@ -6,7 +6,8 @@ export declare class Text {
6
6
  /** Columns `text` takes on screen. */
7
7
  static width(text: string): number;
8
8
  /**
9
- * The first `max` columns of `text`, keeping colour codes (and closing them), with an ellipsis when something was cut.
9
+ * The first `max` columns of `text`, keeping colour codes (and closing them), with an ellipsis when something was
10
+ * cut.
10
11
  */
11
12
  static truncate(text: string, max: number, ellipsis?: string): string;
12
13
  /** `text` cut or padded with spaces to exactly `width` columns. */
@@ -12,9 +12,15 @@ export class Text {
12
12
  return 0;
13
13
  if ((code >= 0x300 && code <= 0x36f) || (code >= 0x200b && code <= 0x200f) || code === 0xfe0f)
14
14
  return 0;
15
- const wide = (code >= 0x1100 && code <= 0x115f) || (code >= 0x2e80 && code <= 0xa4cf) || (code >= 0xac00 && code <= 0xd7a3)
16
- || (code >= 0xf900 && code <= 0xfaff) || (code >= 0xfe30 && code <= 0xfe4f) || (code >= 0xff00 && code <= 0xff60)
17
- || (code >= 0xffe0 && code <= 0xffe6) || (code >= 0x1f300 && code <= 0x1faff) || (code >= 0x20000 && code <= 0x3fffd);
15
+ const wide = (code >= 0x1100 && code <= 0x115f) ||
16
+ (code >= 0x2e80 && code <= 0xa4cf) ||
17
+ (code >= 0xac00 && code <= 0xd7a3) ||
18
+ (code >= 0xf900 && code <= 0xfaff) ||
19
+ (code >= 0xfe30 && code <= 0xfe4f) ||
20
+ (code >= 0xff00 && code <= 0xff60) ||
21
+ (code >= 0xffe0 && code <= 0xffe6) ||
22
+ (code >= 0x1f300 && code <= 0x1faff) ||
23
+ (code >= 0x20000 && code <= 0x3fffd);
18
24
  return wide ? 2 : 1;
19
25
  }
20
26
  /** Columns `text` takes on screen. */
@@ -25,7 +31,8 @@ export class Text {
25
31
  return width;
26
32
  }
27
33
  /**
28
- * The first `max` columns of `text`, keeping colour codes (and closing them), with an ellipsis when something was cut.
34
+ * The first `max` columns of `text`, keeping colour codes (and closing them), with an ellipsis when something was
35
+ * cut.
29
36
  */
30
37
  static truncate(text, max, ellipsis = '…') {
31
38
  if (max <= 0)
@@ -98,8 +105,31 @@ export class Text {
98
105
  }
99
106
  /** "memoryMb" -> "Memory MB", "vGpu" -> "V GPU": a readable label from a setting's key. */
100
107
  static humanize(key) {
101
- const words = key.replace(/([a-z0-9])([A-Z])/g, '$1 $2').replace(/[_-]+/g, ' ').split(' ').filter(Boolean);
102
- const upper = new Set(['mb', 'gb', 'cpu', 'gpu', 'jdk', 'sdk', 'id', 'url', 'ui', 'npm', 'msvc', 'uv', 'api', 'ssh', 'vm', 'io']);
103
- return words.map((w, i) => (upper.has(w.toLowerCase()) ? w.toUpperCase() : i === 0 ? w[0].toUpperCase() + w.slice(1) : w.toLowerCase())).join(' ');
108
+ const words = key
109
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
110
+ .replace(/[_-]+/g, ' ')
111
+ .split(' ')
112
+ .filter(Boolean);
113
+ const upper = new Set([
114
+ 'mb',
115
+ 'gb',
116
+ 'cpu',
117
+ 'gpu',
118
+ 'jdk',
119
+ 'sdk',
120
+ 'id',
121
+ 'url',
122
+ 'ui',
123
+ 'npm',
124
+ 'msvc',
125
+ 'uv',
126
+ 'api',
127
+ 'ssh',
128
+ 'vm',
129
+ 'io',
130
+ ]);
131
+ return words
132
+ .map((w, i) => upper.has(w.toLowerCase()) ? w.toUpperCase() : i === 0 ? w[0].toUpperCase() + w.slice(1) : w.toLowerCase())
133
+ .join(' ');
104
134
  }
105
135
  }
@@ -1,6 +1,6 @@
1
1
  // The look of every screen: colours (off with NO_COLOR, like the rest of the CLI) and the line-drawing characters.
2
- import { colorEnabled } from '../colors.js';
3
- const sgr = (open, close = '0') => (text) => (Theme.colour ? '\x1b[' + open + 'm' + text + '\x1b[' + close + 'm' : text);
2
+ import { colorEnabled } from '../output/index.js';
3
+ const sgr = (open, close = '0') => (text) => Theme.colour ? '\x1b[' + open + 'm' + text + '\x1b[' + close + 'm' : text;
4
4
  export class Theme {
5
5
  /** Colour is decided once per run: the menu only runs in a terminal. */
6
6
  static colour = colorEnabled(process.env, Boolean(process.stdout.isTTY));
@@ -15,16 +15,34 @@ export class Theme {
15
15
  static muted = sgr('38;5;245', '39');
16
16
  static changed = sgr('38;5;221', '39');
17
17
  /** The highlighted row: a soft background bar across the whole width. */
18
- static selected = (t) => (Theme.colour ? '\x1b[48;5;24m\x1b[97m' + t.replace(/\x1b\[0m/g, '\x1b[0m\x1b[48;5;24m\x1b[97m') + '\x1b[0m' : t);
18
+ static selected = (t) => Theme.colour ? '\x1b[48;5;24m\x1b[97m' + t.replace(/\x1b\[0m/g, '\x1b[0m\x1b[48;5;24m\x1b[97m') + '\x1b[0m' : t;
19
19
  /** The header bar. */
20
- static bar = (t) => (Theme.colour ? '\x1b[48;5;236m\x1b[97m' + t.replace(/\x1b\[0m/g, '\x1b[0m\x1b[48;5;236m\x1b[97m') + '\x1b[0m' : t);
20
+ static bar = (t) => Theme.colour ? '\x1b[48;5;236m\x1b[97m' + t.replace(/\x1b\[0m/g, '\x1b[0m\x1b[48;5;236m\x1b[97m') + '\x1b[0m' : t;
21
21
  /** The two settings scopes: your own (blue) and the project's (purple). */
22
- static scopeGlobal = (t) => (Theme.colour ? '\x1b[48;5;25m\x1b[97m\x1b[1m' + t + '\x1b[0m' : '[' + t + ']');
23
- static scopeProject = (t) => (Theme.colour ? '\x1b[48;5;91m\x1b[97m\x1b[1m' + t + '\x1b[0m' : '[' + t + ']');
22
+ static scopeGlobal = (t) => Theme.colour ? '\x1b[48;5;25m\x1b[97m\x1b[1m' + t + '\x1b[0m' : '[' + t + ']';
23
+ static scopeProject = (t) => Theme.colour ? '\x1b[48;5;91m\x1b[97m\x1b[1m' + t + '\x1b[0m' : '[' + t + ']';
24
24
  static project = sgr('38;5;177', '39');
25
- static key = (t) => (Theme.colour ? '\x1b[48;5;238m\x1b[97m ' + t + ' \x1b[0m' : '[' + t + ']');
25
+ static key = (t) => Theme.colour ? '\x1b[48;5;238m\x1b[97m ' + t + ' \x1b[0m' : '[' + t + ']';
26
26
  static glyph = {
27
- pointer: '›', bullet: '•', on: '●', off: '○', checked: '◉', unchecked: '◯', dot: '·', arrow: '→', back: '←', more: '…',
28
- folder: '▸', open: '▾', line: '─', vline: '│', search: '⌕', changed: '✎', lock: '⚿', ok: '✔', cross: '✘', star: '★',
27
+ pointer: '›',
28
+ bullet: '•',
29
+ on: '●',
30
+ off: '○',
31
+ checked: '◉',
32
+ unchecked: '◯',
33
+ dot: '·',
34
+ arrow: '→',
35
+ back: '←',
36
+ more: '…',
37
+ folder: '▸',
38
+ open: '▾',
39
+ line: '─',
40
+ vline: '│',
41
+ search: '⌕',
42
+ changed: '✎',
43
+ lock: '⚿',
44
+ ok: '✔',
45
+ cross: '✘',
46
+ star: '★',
29
47
  };
30
48
  }
@@ -1,17 +1,17 @@
1
1
  import type { Context } from './commands/context.js';
2
2
  /** Edit distance, for "did you mean". */
3
- export declare const distance: (a: string, b: string) => number;
3
+ export declare function distance(a: string, b: string): number;
4
4
  /** The closest of `choices` to `input`, when it is close enough to be a typo. */
5
- export declare const closest: (input: string, choices: readonly string[]) => string | undefined;
5
+ export declare function closest(input: string, choices: readonly string[]): string | undefined;
6
6
  /** "Unknown agent "cluade". Did you mean claude?" with the valid values as the fix. */
7
- export declare const unknownValue: (what: string, input: string, choices: readonly string[], howToList: string) => never;
7
+ export declare function unknownValue(what: string, input: string, choices: readonly string[], howToList: string): never;
8
8
  /** Node: 22, 22.1, v22.1.0, lts, lts/*, lts/iron, latest, current, node. */
9
- export declare const validNodeSpec: (spec: string) => boolean;
9
+ export declare function validNodeSpec(spec: string): boolean;
10
10
  /** Python 3: 3, 3.12, 3.12.4. */
11
- export declare const validPythonSpec: (spec: string) => boolean;
12
- export declare const checkHarness: (name: string | undefined, harnesses: string[]) => void;
11
+ export declare function validPythonSpec(spec: string): boolean;
12
+ export declare function checkHarness(name: string | undefined, harnesses: string[]): void;
13
13
  export declare const PROJECT_ACTIONS: readonly ["list", "choose", "add", "remove", "include", "exclude", "all", "roots"];
14
14
  /** `sandbox projects <action> [value] [folder]`: the action, then what it needs. Pure (no file checks). */
15
- export declare const validateProjectsArgs: (args: string[]) => void;
15
+ export declare function validateProjectsArgs(args: string[]): void;
16
16
  /** Fails with what is wrong and what is valid, before anything is started. */
17
- export declare const validateOptions: (ctx: Context) => void;
17
+ export declare function validateOptions(ctx: Context): void;
@@ -2,11 +2,11 @@
2
2
  // instead of halfway into a sandbox boot. Pure helpers first, then validateOptions (the one call from the dispatcher).
3
3
  import fs from 'node:fs';
4
4
  import path from 'node:path';
5
- import { DATABASES } from '../core/detect-databases.js';
6
- import { fail } from '../core/util.js';
7
- import { listAccounts } from '../host/accounts.js';
5
+ import { DATABASES } from '../core/detect/index.js';
6
+ import { fail } from '../core/util/index.js';
7
+ import { AccountStore } from '../host/profile/index.js';
8
8
  /** Edit distance, for "did you mean". */
9
- export const distance = (a, b) => {
9
+ export function distance(a, b) {
10
10
  let row = Array.from({ length: b.length + 1 }, (_, i) => i);
11
11
  for (let i = 1; i <= a.length; i++) {
12
12
  const next = [i];
@@ -15,30 +15,36 @@ export const distance = (a, b) => {
15
15
  row = next;
16
16
  }
17
17
  return row[b.length];
18
- };
18
+ }
19
19
  /** The closest of `choices` to `input`, when it is close enough to be a typo. */
20
- export const closest = (input, choices) => {
21
- const best = choices.map((c) => ({ c, d: distance(input.toLowerCase(), c.toLowerCase()) })).sort((x, y) => x.d - y.d)[0];
20
+ export function closest(input, choices) {
21
+ const best = choices
22
+ .map((c) => ({ c, d: distance(input.toLowerCase(), c.toLowerCase()) }))
23
+ .sort((x, y) => x.d - y.d)[0];
22
24
  return best && best.d <= Math.max(2, Math.floor(input.length / 3)) ? best.c : undefined;
23
- };
25
+ }
24
26
  /** "Unknown agent "cluade". Did you mean claude?" with the valid values as the fix. */
25
- export const unknownValue = (what, input, choices, howToList) => {
27
+ export function unknownValue(what, input, choices, howToList) {
26
28
  const hint = closest(input, choices);
27
29
  return fail('Unknown ' + what + ' "' + input + '".' + (hint ? ' Did you mean ' + hint + '?' : ''), (choices.length ? 'Choose one of: ' + choices.join(', ') + '. ' : '') + howToList);
28
- };
30
+ }
29
31
  /** Node: 22, 22.1, v22.1.0, lts, lts/*, lts/iron, latest, current, node. */
30
- export const validNodeSpec = (spec) => /^(v?\d+(\.\d+){0,2}|node|latest|current|stable|lts(\/(\*|[a-z]+))?)$/i.test(spec.trim());
32
+ export function validNodeSpec(spec) {
33
+ return /^(v?\d+(\.\d+){0,2}|node|latest|current|stable|lts(\/(\*|[a-z]+))?)$/i.test(spec.trim());
34
+ }
31
35
  /** Python 3: 3, 3.12, 3.12.4. */
32
- export const validPythonSpec = (spec) => /^v?3(\.\d+){0,2}$/.test(spec.trim());
33
- export const checkHarness = (name, harnesses) => {
36
+ export function validPythonSpec(spec) {
37
+ return /^v?3(\.\d+){0,2}$/.test(spec.trim());
38
+ }
39
+ export function checkHarness(name, harnesses) {
34
40
  if (name !== undefined && !harnesses.includes(name))
35
41
  unknownValue('agent', name, harnesses, 'Add your own under "harnesses" in your settings (sandbox config).');
36
- };
42
+ }
37
43
  /** Commands that read these options; checked only for them (restart/doctor take --harness too). */
38
44
  const LAUNCHING = new Set(['launch', 'generate', 'host-claude']);
39
45
  export const PROJECT_ACTIONS = ['list', 'choose', 'add', 'remove', 'include', 'exclude', 'all', 'roots'];
40
46
  /** `sandbox projects <action> [value] [folder]`: the action, then what it needs. Pure (no file checks). */
41
- export const validateProjectsArgs = (args) => {
47
+ export function validateProjectsArgs(args) {
42
48
  const [action = 'list', value, folder] = args;
43
49
  if (!PROJECT_ACTIONS.includes(action))
44
50
  unknownValue('projects action', action, PROJECT_ACTIONS, 'sandbox projects with no action lists your projects.');
@@ -50,9 +56,9 @@ export const validateProjectsArgs = (args) => {
50
56
  unknownValue('projects roots action', value, ['list', 'add', 'remove'], 'sandbox projects roots add|remove <folder>');
51
57
  if (action === 'roots' && (value === 'add' || value === 'remove') && !folder)
52
58
  fail('Which folder?', 'Usage: sandbox projects roots ' + value + ' <folder>');
53
- };
59
+ }
54
60
  /** Fails with what is wrong and what is valid, before anything is started. */
55
- export const validateOptions = (ctx) => {
61
+ export function validateOptions(ctx) {
56
62
  const o = ctx.options;
57
63
  const harnesses = Object.keys(ctx.loaded.config.harnesses);
58
64
  if (['launch', 'generate', 'restart', 'doctor'].includes(o.command))
@@ -65,14 +71,19 @@ export const validateOptions = (ctx) => {
65
71
  fail('"' + o.node + '" is not a Node version.', 'Use a number like 22 or 22.11.0, or lts, latest.');
66
72
  if (o.python !== undefined && !validPythonSpec(o.python))
67
73
  fail('"' + o.python + '" is not a Python 3 version.', 'Use 3, 3.12 or 3.12.4.');
68
- for (const db of o.databases.flatMap((d) => d.split(',')).map((d) => d.trim()).filter(Boolean)) {
74
+ for (const db of o.databases
75
+ .flatMap((d) => d.split(','))
76
+ .map((d) => d.trim())
77
+ .filter(Boolean)) {
69
78
  if (!DATABASES.includes(db))
70
79
  unknownValue('database', db, DATABASES, 'Repeat --database for several.');
71
80
  }
72
81
  if (o.account !== undefined) {
73
- const names = listAccounts(ctx.storageRoot, ctx.dataPath).map((a) => a.name);
82
+ const names = new AccountStore(ctx.storageRoot).list(ctx.dataPath).map((a) => a.name);
74
83
  if (!names.includes(o.account))
75
- unknownValue('account', o.account, names, names.length ? 'See them with: sandbox account list' : 'None saved yet: sign in inside the sandbox, then run sandbox account save <name>.');
84
+ unknownValue('account', o.account, names, names.length
85
+ ? 'See them with: sandbox account list'
86
+ : 'None saved yet: sign in inside the sandbox, then run sandbox account save <name>.');
76
87
  }
77
88
  for (const s of o.sessions) {
78
89
  checkHarness(s.harness, harnesses);
@@ -86,4 +97,4 @@ export const validateOptions = (ctx) => {
86
97
  for (const script of o.scripts)
87
98
  if (!fs.existsSync(path.resolve(script)))
88
99
  fail('The script ' + path.resolve(script) + ' does not exist.', 'Check the --script path.');
89
- };
100
+ }
@@ -0,0 +1,2 @@
1
+ import type { Config } from '../types.js';
2
+ export declare const DEFAULTS: Config;