windows-development-sandbox 1.7.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (432) hide show
  1. package/config.example.json +12 -1
  2. package/dist/app/context.d.ts +8 -0
  3. package/dist/app/context.js +12 -0
  4. package/dist/app/features/defs.d.ts +322 -0
  5. package/dist/app/features/defs.js +28 -0
  6. package/dist/app/features/sandbox/index.d.ts +2 -0
  7. package/dist/app/features/sandbox/index.js +3 -0
  8. package/dist/app/features/sandbox/sandbox.def.d.ts +193 -0
  9. package/dist/app/features/sandbox/sandbox.def.js +245 -0
  10. package/dist/app/features/sandbox/sandbox.run.d.ts +72 -0
  11. package/dist/app/features/sandbox/sandbox.run.js +98 -0
  12. package/dist/app/features/sessions/index.d.ts +2 -0
  13. package/dist/app/features/sessions/index.js +3 -0
  14. package/dist/app/features/sessions/sessions.def.d.ts +141 -0
  15. package/dist/app/features/sessions/sessions.def.js +176 -0
  16. package/dist/app/features/sessions/sessions.run.d.ts +39 -0
  17. package/dist/app/features/sessions/sessions.run.js +58 -0
  18. package/dist/{cli/menu/settings/categories.d.ts → app/features/settings/categories.def.d.ts} +2 -0
  19. package/dist/{cli/menu/settings/categories.js → app/features/settings/categories.def.js} +24 -5
  20. package/dist/app/features/settings/index.d.ts +5 -0
  21. package/dist/app/features/settings/index.js +6 -0
  22. package/dist/{cli/menu/settings/config-file.d.ts → app/features/settings/settings-file.d.ts} +1 -1
  23. package/dist/{cli/menu/settings/config-file.js → app/features/settings/settings-file.js} +1 -1
  24. package/dist/app/features/settings/settings-rows.d.ts +35 -0
  25. package/dist/app/features/settings/settings-rows.js +94 -0
  26. package/dist/app/features/settings/settings.def.d.ts +157 -0
  27. package/dist/app/features/settings/settings.def.js +179 -0
  28. package/dist/app/features/settings/settings.run.d.ts +67 -0
  29. package/dist/app/features/settings/settings.run.js +84 -0
  30. package/dist/app/kernel/define.d.ts +143 -0
  31. package/dist/app/kernel/define.js +42 -0
  32. package/dist/app/kernel/errors.d.ts +34 -0
  33. package/dist/app/kernel/errors.js +45 -0
  34. package/dist/app/kernel/fields.d.ts +70 -0
  35. package/dist/app/kernel/fields.js +243 -0
  36. package/dist/app/kernel/index.d.ts +8 -0
  37. package/dist/app/kernel/index.js +10 -0
  38. package/dist/app/kernel/io.d.ts +193 -0
  39. package/dist/app/kernel/io.js +126 -0
  40. package/dist/app/kernel/rpc.d.ts +156 -0
  41. package/dist/app/kernel/rpc.js +47 -0
  42. package/dist/app/kernel/text.d.ts +6 -0
  43. package/dist/app/kernel/text.js +57 -0
  44. package/dist/app/kernel/view.d.ts +146 -0
  45. package/dist/app/kernel/view.js +28 -0
  46. package/dist/app/registry.d.ts +10 -0
  47. package/dist/app/registry.js +50 -0
  48. package/dist/cli/args.d.ts +5 -0
  49. package/dist/cli/args.js +6 -0
  50. package/dist/cli/commands/engine.d.ts +2 -0
  51. package/dist/cli/commands/engine.js +60 -0
  52. package/dist/cli/commands/index.d.ts +1 -1
  53. package/dist/cli/commands/index.js +1 -1
  54. package/dist/cli/commands/launch/launch.js +49 -7
  55. package/dist/cli/commands/launch/prepare.js +3 -3
  56. package/dist/cli/commands/launch/running.js +2 -1
  57. package/dist/cli/commands/launch/summary.d.ts +2 -0
  58. package/dist/cli/commands/maintenance/config-share.d.ts +12 -0
  59. package/dist/cli/commands/maintenance/config-share.js +80 -0
  60. package/dist/cli/commands/maintenance/config.js +8 -82
  61. package/dist/cli/commands/maintenance/logs.js +14 -0
  62. package/dist/cli/commands/registry.js +3 -7
  63. package/dist/cli/commands/repair/checks/contained.d.ts +2 -0
  64. package/dist/cli/commands/repair/checks/contained.js +139 -0
  65. package/dist/cli/commands/repair/checks/hcs.d.ts +7 -0
  66. package/dist/cli/commands/repair/checks/hcs.js +28 -0
  67. package/dist/cli/commands/repair/checks/index.js +4 -0
  68. package/dist/cli/commands/repair/checks/pc.js +32 -1
  69. package/dist/cli/commands/repair/checks/sandbox.js +16 -1
  70. package/dist/cli/commands/repair/checks/vpn.js +34 -9
  71. package/dist/cli/commands/repair/env.js +2 -1
  72. package/dist/cli/commands/sessions/index.d.ts +0 -4
  73. package/dist/cli/commands/sessions/index.js +3 -7
  74. package/dist/cli/commands/shared-use.d.ts +5 -2
  75. package/dist/cli/commands/shared-use.js +11 -8
  76. package/dist/cli/commands/storage/contained.d.ts +3 -0
  77. package/dist/cli/commands/storage/contained.js +179 -0
  78. package/dist/cli/commands/storage/offer.js +7 -1
  79. package/dist/cli/commands/storage/storage.js +10 -2
  80. package/dist/cli/commands/user-config.js +1 -1
  81. package/dist/cli/commands/vpn.js +20 -3
  82. package/dist/cli/commands/web.d.ts +5 -0
  83. package/dist/cli/commands/web.js +40 -0
  84. package/dist/cli/index.js +2 -1
  85. package/dist/cli/manifest.d.ts +72 -104
  86. package/dist/cli/manifest.js +64 -39
  87. package/dist/cli/menu/add-agent.d.ts +1 -1
  88. package/dist/cli/menu/add-agent.js +1 -1
  89. package/dist/cli/menu/apps.d.ts +7 -1
  90. package/dist/cli/menu/apps.js +36 -0
  91. package/dist/cli/menu/command-fields.d.ts +1 -1
  92. package/dist/cli/menu/command-form.js +2 -2
  93. package/dist/cli/menu/io-menu.d.ts +29 -0
  94. package/dist/cli/menu/io-menu.js +126 -0
  95. package/dist/cli/menu/live.d.ts +27 -0
  96. package/dist/cli/menu/live.js +69 -0
  97. package/dist/cli/menu/memory.d.ts +19 -0
  98. package/dist/cli/menu/memory.js +53 -0
  99. package/dist/cli/menu/menu.d.ts +10 -1
  100. package/dist/cli/menu/menu.js +27 -9
  101. package/dist/cli/menu/pages/agents-page.d.ts +3 -1
  102. package/dist/cli/menu/pages/agents-page.js +12 -5
  103. package/dist/cli/menu/pages/apps-page.d.ts +3 -1
  104. package/dist/cli/menu/pages/apps-page.js +19 -2
  105. package/dist/cli/menu/pages/list-page.d.ts +27 -0
  106. package/dist/cli/menu/pages/list-page.js +109 -7
  107. package/dist/cli/menu/pages/maintenance-page.d.ts +0 -5
  108. package/dist/cli/menu/pages/maintenance-page.js +17 -19
  109. package/dist/cli/menu/pages/sandbox-page.d.ts +4 -6
  110. package/dist/cli/menu/pages/sandbox-page.js +26 -118
  111. package/dist/cli/menu/pages/scopes.d.ts +1 -1
  112. package/dist/cli/menu/pages/sessions-page.d.ts +5 -11
  113. package/dist/cli/menu/pages/sessions-page.js +19 -88
  114. package/dist/cli/menu/pages/settings-page.d.ts +2 -10
  115. package/dist/cli/menu/pages/settings-page.js +64 -94
  116. package/dist/cli/menu/render-view.d.ts +28 -0
  117. package/dist/cli/menu/render-view.js +112 -0
  118. package/dist/cli/menu/settings/{path-kind.d.ts → ask-path.d.ts} +1 -7
  119. package/dist/cli/menu/settings/ask-path.js +14 -0
  120. package/dist/cli/menu/settings/collections/collection-editor.d.ts +1 -1
  121. package/dist/cli/menu/settings/collections/string-list-editor.d.ts +1 -2
  122. package/dist/cli/menu/settings/collections/string-list-editor.js +1 -1
  123. package/dist/cli/menu/settings/draft.d.ts +1 -1
  124. package/dist/cli/menu/settings/format.d.ts +1 -3
  125. package/dist/cli/menu/settings/format.js +6 -36
  126. package/dist/cli/menu/settings/index.d.ts +1 -3
  127. package/dist/cli/menu/settings/index.js +3 -3
  128. package/dist/cli/menu/settings/object-editor.d.ts +1 -1
  129. package/dist/cli/menu/settings/share.d.ts +36 -0
  130. package/dist/cli/menu/settings/share.js +131 -0
  131. package/dist/cli/menu/settings/value-editor.d.ts +5 -1
  132. package/dist/cli/menu/settings/value-editor.js +57 -54
  133. package/dist/cli/menu/several.js +1 -1
  134. package/dist/cli/menu/share-settings.d.ts +21 -0
  135. package/dist/cli/menu/share-settings.js +112 -0
  136. package/dist/cli/menu/shell.d.ts +21 -5
  137. package/dist/cli/menu/shell.js +31 -6
  138. package/dist/cli/menu/views.d.ts +7 -0
  139. package/dist/cli/menu/views.js +11 -0
  140. package/dist/cli/menu/vpn-login.js +8 -0
  141. package/dist/cli/operations/handler.d.ts +6 -0
  142. package/dist/cli/operations/handler.js +61 -0
  143. package/dist/cli/operations/index.d.ts +4 -0
  144. package/dist/cli/operations/index.js +5 -0
  145. package/dist/cli/operations/input.d.ts +6 -0
  146. package/dist/cli/operations/input.js +37 -0
  147. package/dist/cli/operations/io-cli.d.ts +7 -0
  148. package/dist/cli/operations/io-cli.js +62 -0
  149. package/dist/cli/operations/spec.d.ts +18 -0
  150. package/dist/cli/operations/spec.js +108 -0
  151. package/dist/cli/output/colors.d.ts +2 -2
  152. package/dist/cli/output/colors.js +2 -11
  153. package/dist/cli/output/index.d.ts +1 -0
  154. package/dist/cli/output/index.js +1 -0
  155. package/dist/cli/output/print.d.ts +3 -1
  156. package/dist/cli/output/print.js +7 -3
  157. package/dist/cli/output/progress.d.ts +15 -0
  158. package/dist/cli/output/progress.js +44 -0
  159. package/dist/cli/output/render-view.d.ts +4 -0
  160. package/dist/cli/output/render-view.js +63 -0
  161. package/dist/cli/services/agent-commands-service.d.ts +2 -0
  162. package/dist/cli/services/agent-commands-service.js +11 -2
  163. package/dist/cli/services/logs-service.js +4 -3
  164. package/dist/cli/tui/app.d.ts +6 -1
  165. package/dist/cli/tui/app.js +26 -4
  166. package/dist/cli/tui/list/list-screen.d.ts +14 -0
  167. package/dist/cli/tui/list/list-screen.js +64 -36
  168. package/dist/cli/tui/list/list-types.d.ts +2 -0
  169. package/dist/cli/tui/terminal.d.ts +7 -0
  170. package/dist/cli/tui/terminal.js +30 -10
  171. package/dist/core/config/defaults.js +9 -1
  172. package/dist/core/schema/config.d.ts +14 -0
  173. package/dist/core/schema/config.js +16 -1
  174. package/dist/core/schema/harness.d.ts +1 -0
  175. package/dist/core/schema/harness.js +5 -0
  176. package/dist/core/schema/sandbox.d.ts +6 -0
  177. package/dist/core/schema/sandbox.js +20 -3
  178. package/dist/core/schema/vpn.d.ts +2 -1
  179. package/dist/core/schema/vpn.js +4 -4
  180. package/dist/core/schema/web.d.ts +1 -0
  181. package/dist/core/schema/web.js +4 -1
  182. package/dist/core/types.d.ts +23 -5
  183. package/dist/core/util/fs.d.ts +2 -0
  184. package/dist/core/util/fs.js +9 -0
  185. package/dist/core/util/index.d.ts +1 -1
  186. package/dist/core/util/index.js +1 -1
  187. package/dist/guest/agents/agent-files.d.ts +5 -0
  188. package/dist/guest/agents/agent-files.js +4 -0
  189. package/dist/guest/agents/local-state.d.ts +2 -0
  190. package/dist/guest/agents/local-state.js +21 -1
  191. package/dist/guest/boot/boot.js +5 -2
  192. package/dist/guest/daemon/daemon.js +4 -0
  193. package/dist/guest/daemon/sessions.d.ts +5 -0
  194. package/dist/guest/daemon/sessions.js +17 -3
  195. package/dist/guest/entries/daemon.js +3 -0
  196. package/dist/guest/governor/decide.d.ts +71 -0
  197. package/dist/guest/governor/decide.js +211 -0
  198. package/dist/guest/governor/governor.d.ts +45 -0
  199. package/dist/guest/governor/governor.js +230 -0
  200. package/dist/guest/governor/index.d.ts +2 -0
  201. package/dist/guest/governor/index.js +2 -0
  202. package/dist/guest/network/firewall.d.ts +1 -0
  203. package/dist/guest/network/firewall.js +65 -23
  204. package/dist/guest/runtime/csc.d.ts +1 -0
  205. package/dist/guest/runtime/csc.js +1 -0
  206. package/dist/guest/runtime/process.js +53 -5
  207. package/dist/guest/sessions/viewer.js +3 -1
  208. package/dist/guest/setup/claude-mem.js +12 -4
  209. package/dist/guest/toolchains/languages/node.js +29 -3
  210. package/dist/guest/toolchains/native/rust-extras.js +4 -2
  211. package/dist/guest/vpn/vpn.js +69 -21
  212. package/dist/guest/vpn/wireguard.d.ts +32 -0
  213. package/dist/guest/vpn/wireguard.js +132 -0
  214. package/dist/host/agent-commands/commands.d.ts +4 -0
  215. package/dist/host/agent-commands/commands.js +31 -7
  216. package/dist/host/audit/log.d.ts +1 -1
  217. package/dist/host/channel/attach.d.ts +3 -1
  218. package/dist/host/channel/attach.js +5 -2
  219. package/dist/host/channel/channel.d.ts +2 -0
  220. package/dist/host/channel/channel.js +4 -0
  221. package/dist/host/engines/engine.d.ts +12 -0
  222. package/dist/host/engines/engine.js +1 -0
  223. package/dist/host/engines/hcs/check.d.ts +25 -0
  224. package/dist/host/engines/hcs/check.js +95 -0
  225. package/dist/host/engines/hcs/documents.d.ts +44 -0
  226. package/dist/host/engines/hcs/documents.js +155 -0
  227. package/dist/host/engines/hcs/engine.d.ts +39 -0
  228. package/dist/host/engines/hcs/engine.js +171 -0
  229. package/dist/host/engines/hcs/helper.d.ts +43 -0
  230. package/dist/host/engines/hcs/helper.js +173 -0
  231. package/dist/host/engines/hcs/images.d.ts +37 -0
  232. package/dist/host/engines/hcs/images.js +152 -0
  233. package/dist/host/engines/index.d.ts +7 -0
  234. package/dist/host/engines/index.js +5 -0
  235. package/dist/host/engines/registry.d.ts +16 -0
  236. package/dist/host/engines/registry.js +30 -0
  237. package/dist/host/engines/types.d.ts +58 -0
  238. package/dist/host/engines/types.js +1 -0
  239. package/dist/host/engines/windows-sandbox/engine.d.ts +16 -0
  240. package/dist/host/engines/windows-sandbox/engine.js +63 -0
  241. package/dist/host/engines/windows-sandbox/wsb-text.d.ts +2 -0
  242. package/dist/host/engines/windows-sandbox/wsb-text.js +29 -0
  243. package/dist/host/launch/generate.d.ts +5 -1
  244. package/dist/host/launch/generate.js +50 -8
  245. package/dist/host/launch/index.d.ts +3 -1
  246. package/dist/host/launch/index.js +3 -1
  247. package/dist/host/launch/launch-plan.d.ts +13 -0
  248. package/dist/host/launch/launch-plan.js +26 -0
  249. package/dist/host/launch/mappings.js +2 -1
  250. package/dist/host/launch/risk-notes.d.ts +10 -0
  251. package/dist/host/launch/risk-notes.js +18 -0
  252. package/dist/host/launch/session-file.d.ts +2 -0
  253. package/dist/host/launch/session-file.js +7 -1
  254. package/dist/host/launch/wsb-file.d.ts +28 -4
  255. package/dist/host/launch/wsb-file.js +61 -42
  256. package/dist/host/life/crash-report.d.ts +27 -1
  257. package/dist/host/life/crash-report.js +173 -7
  258. package/dist/host/life/host-memory.d.ts +41 -0
  259. package/dist/host/life/host-memory.js +140 -0
  260. package/dist/host/life/index.d.ts +2 -0
  261. package/dist/host/life/index.js +2 -0
  262. package/dist/host/life/stop-events.d.ts +2 -0
  263. package/dist/host/life/stop-events.js +20 -3
  264. package/dist/host/life/stop-warning.js +1 -1
  265. package/dist/host/life/watchdog.d.ts +56 -0
  266. package/dist/host/life/watchdog.js +124 -0
  267. package/dist/host/native.d.ts +3 -2
  268. package/dist/host/native.js +22 -3
  269. package/dist/host/profile/claude-login.js +3 -2
  270. package/dist/host/sandbox/contained-deps.d.ts +2 -0
  271. package/dist/host/sandbox/contained-deps.js +17 -0
  272. package/dist/host/sandbox/index.d.ts +2 -0
  273. package/dist/host/sandbox/index.js +2 -0
  274. package/dist/host/sandbox/platform.d.ts +2 -0
  275. package/dist/host/sandbox/platform.js +7 -7
  276. package/dist/host/sandbox/tasklist.d.ts +13 -0
  277. package/dist/host/sandbox/tasklist.js +47 -0
  278. package/dist/host/secrets/launch-secrets.js +2 -1
  279. package/dist/host/sharing/current.js +2 -6
  280. package/dist/host/storage/contained/check.d.ts +9 -0
  281. package/dist/host/storage/contained/check.js +37 -0
  282. package/dist/host/storage/contained/contained-storage.d.ts +66 -0
  283. package/dist/host/storage/contained/contained-storage.js +168 -0
  284. package/dist/host/storage/contained/disk-port.d.ts +43 -0
  285. package/dist/host/storage/contained/disk-port.js +122 -0
  286. package/dist/host/storage/contained/index.d.ts +9 -0
  287. package/dist/host/storage/contained/index.js +8 -0
  288. package/dist/host/storage/contained/layout.d.ts +28 -0
  289. package/dist/host/storage/contained/layout.js +45 -0
  290. package/dist/host/storage/contained/resolve.d.ts +4 -0
  291. package/dist/host/storage/contained/resolve.js +30 -0
  292. package/dist/host/storage/contained/setting.d.ts +1 -0
  293. package/dist/host/storage/contained/setting.js +5 -0
  294. package/dist/host/storage/contained/state.d.ts +89 -0
  295. package/dist/host/storage/contained/state.js +166 -0
  296. package/dist/host/storage/contained/transfer.d.ts +24 -0
  297. package/dist/host/storage/contained/transfer.js +121 -0
  298. package/dist/host/storage/index.d.ts +2 -0
  299. package/dist/host/storage/index.js +2 -0
  300. package/dist/host/storage/providers/contained.d.ts +15 -0
  301. package/dist/host/storage/providers/contained.js +39 -0
  302. package/dist/host/storage/providers/folder.d.ts +12 -0
  303. package/dist/host/storage/providers/folder.js +20 -0
  304. package/dist/host/storage/providers/index.d.ts +4 -0
  305. package/dist/host/storage/providers/index.js +3 -0
  306. package/dist/host/storage/providers/registry.d.ts +9 -0
  307. package/dist/host/storage/providers/registry.js +14 -0
  308. package/dist/host/storage/providers/types.d.ts +33 -0
  309. package/dist/host/storage/providers/types.js +1 -0
  310. package/dist/host/tools/conpty.js +3 -2
  311. package/dist/host/tools/windows-terminal.js +8 -7
  312. package/dist/host/vpn/index.d.ts +1 -1
  313. package/dist/host/vpn/index.js +1 -1
  314. package/dist/host/vpn/prepare.d.ts +2 -0
  315. package/dist/host/vpn/prepare.js +63 -2
  316. package/dist/host/web/browser.d.ts +2 -0
  317. package/dist/host/web/browser.js +14 -1
  318. package/dist/host/web/index.d.ts +3 -2
  319. package/dist/host/web/index.js +3 -2
  320. package/dist/host/web/rpc.d.ts +24 -0
  321. package/dist/host/web/rpc.js +149 -0
  322. package/dist/host/web/runner.d.ts +2 -0
  323. package/dist/host/web/runner.js +1 -2
  324. package/dist/host/web/server.d.ts +7 -0
  325. package/dist/host/web/server.js +23 -3
  326. package/dist/runtime/agent.js +83 -18
  327. package/dist/runtime/daemon.js +1805 -1221
  328. package/dist/runtime/db.js +83 -18
  329. package/dist/runtime/main.js +779 -219
  330. package/dist/runtime/netproxy.js +73 -11
  331. package/dist/runtime/view.js +91 -16
  332. package/dist/selftest/agent-paths.test.js +11 -1
  333. package/dist/selftest/app.test.d.ts +2 -0
  334. package/dist/selftest/app.test.js +324 -0
  335. package/dist/selftest/channel.test.js +13 -0
  336. package/dist/selftest/cli.test.js +2 -1
  337. package/dist/selftest/config.test.js +59 -0
  338. package/dist/selftest/contained.test.d.ts +2 -0
  339. package/dist/selftest/contained.test.js +544 -0
  340. package/dist/selftest/credentials.test.js +1 -1
  341. package/dist/selftest/engine.test.d.ts +2 -0
  342. package/dist/selftest/engine.test.js +127 -0
  343. package/dist/selftest/guest-boot.test.js +47 -1
  344. package/dist/selftest/hcs.test.d.ts +2 -0
  345. package/dist/selftest/hcs.test.js +482 -0
  346. package/dist/selftest/heavy-load.test.d.ts +2 -0
  347. package/dist/selftest/heavy-load.test.js +355 -0
  348. package/dist/selftest/index.js +12 -0
  349. package/dist/selftest/layout.test.js +12 -0
  350. package/dist/selftest/menu-perf.test.d.ts +2 -0
  351. package/dist/selftest/menu-perf.test.js +248 -0
  352. package/dist/selftest/menu-screens.js +4 -2
  353. package/dist/selftest/menu.test.js +36 -8
  354. package/dist/selftest/network.test.js +20 -1
  355. package/dist/selftest/support/engine-cases.d.ts +8 -0
  356. package/dist/selftest/support/engine-cases.js +65 -0
  357. package/dist/selftest/support/engine-golden.d.ts +3 -0
  358. package/dist/selftest/support/engine-golden.js +66 -0
  359. package/dist/selftest/support/fixtures.d.ts +8 -1
  360. package/dist/selftest/support/hcs-probes.d.ts +17 -0
  361. package/dist/selftest/support/hcs-probes.js +41 -0
  362. package/dist/selftest/vpn.test.js +136 -3
  363. package/dist/selftest/web.test.js +101 -3
  364. package/dist/shared/channel/run-dir.d.ts +4 -1
  365. package/dist/shared/channel/run-dir.js +7 -1
  366. package/dist/shared/channel/schema.d.ts +35 -1
  367. package/dist/shared/channel/schema.js +27 -0
  368. package/dist/shared/channel/secrets.d.ts +1 -0
  369. package/dist/shared/channel/secrets.js +6 -0
  370. package/dist/shared/io/copy-tree.d.ts +7 -0
  371. package/dist/shared/io/copy-tree.js +45 -0
  372. package/dist/shared/io/index.d.ts +2 -0
  373. package/dist/shared/io/index.js +2 -0
  374. package/dist/shared/io/robocopy-result.d.ts +6 -0
  375. package/dist/shared/io/robocopy-result.js +23 -0
  376. package/dist/shared/memory/index.d.ts +1 -0
  377. package/dist/shared/memory/index.js +1 -0
  378. package/dist/shared/memory/policy.d.ts +38 -0
  379. package/dist/shared/memory/policy.js +63 -0
  380. package/dist/shared/network/firewall-rules.d.ts +8 -0
  381. package/dist/shared/network/firewall-rules.js +28 -0
  382. package/dist/shared/pty/output-filter.d.ts +14 -1
  383. package/dist/shared/pty/output-filter.js +22 -4
  384. package/dist/shared/pty/terminal.d.ts +4 -1
  385. package/dist/shared/pty/terminal.js +4 -2
  386. package/dist/shared/system.d.ts +1 -0
  387. package/dist/shared/system.js +1 -0
  388. package/dist/shared/vpn/download.d.ts +16 -0
  389. package/dist/shared/vpn/download.js +16 -0
  390. package/dist/shared/vpn/wireguard.d.ts +51 -0
  391. package/dist/shared/vpn/wireguard.js +227 -0
  392. package/dist/sync/sync-cycle.js +5 -5
  393. package/dist/sync/watcher.d.ts +13 -0
  394. package/dist/sync/watcher.js +92 -3
  395. package/dist/web/index.html +4 -3
  396. package/dist/web/main-NRRS5O6Z.js +157 -0
  397. package/dist/web/main-T5DMCHYV.css +1 -0
  398. package/native/csharp/HcsHost/AssemblyInfo.cs +14 -0
  399. package/native/csharp/HcsHost/Guard.cs +100 -0
  400. package/native/csharp/HcsHost/Hcs.cs +256 -0
  401. package/native/csharp/HcsHost/Json.cs +78 -0
  402. package/native/csharp/HcsHost/Program.cs +185 -0
  403. package/native/csharp/HcsHost/VirtualDisk.cs +95 -0
  404. package/native/csharp/HostTools/AssemblyInfo.cs +14 -0
  405. package/native/csharp/HostTools/MemoryStatus.cs +128 -0
  406. package/native/csharp/HostTools/Program.cs +58 -17
  407. package/native/scripts/check-contained.ps1 +28 -0
  408. package/native/scripts/contained-common.ps1 +241 -0
  409. package/native/scripts/dismount-contained.ps1 +66 -0
  410. package/native/scripts/memory-status.ps1 +42 -0
  411. package/native/scripts/mount-contained.ps1 +139 -0
  412. package/native/scripts/run-elevated.ps1 +17 -4
  413. package/native/scripts/stop-events.ps1 +23 -8
  414. package/package.json +9 -2
  415. package/sandbox/csharp/MemGov.cs +466 -0
  416. package/sandbox/csharp/PtyHost.cs +111 -5
  417. package/sandbox/scripts/new-shortcuts.ps1 +3 -1
  418. package/schemas/config.schema.json +66 -8
  419. package/schemas/sandbox-config.schema.json +3 -3
  420. package/dist/cli/commands/sessions/control.d.ts +0 -4
  421. package/dist/cli/commands/sessions/control.js +0 -66
  422. package/dist/cli/commands/sessions/list.d.ts +0 -2
  423. package/dist/cli/commands/sessions/list.js +0 -48
  424. package/dist/cli/commands/sessions/status.d.ts +0 -4
  425. package/dist/cli/commands/sessions/status.js +0 -114
  426. package/dist/cli/commands/sessions/window.d.ts +0 -3
  427. package/dist/cli/commands/sessions/window.js +0 -18
  428. package/dist/cli/menu/settings/path-kind.js +0 -44
  429. package/dist/web/main-CXESL347.js +0 -45
  430. package/dist/web/main-VLR7DVQ4.css +0 -1
  431. /package/dist/{cli/menu/settings → app/kernel}/schema-node.d.ts +0 -0
  432. /package/dist/{cli/menu/settings → app/kernel}/schema-node.js +0 -0
@@ -0,0 +1,245 @@
1
+ // The running sandbox as a whole: what it is doing (a live query), its window, and stopping it. Pure: schemas, labels
2
+ // and the view; sandbox.run.ts does the work.
3
+ import { z } from 'zod';
4
+ import { action, ago, defineOperation, defineQuery, defineView, plural, } from '../../kernel/index.js';
5
+ const ProjectSchema = z.object({
6
+ name: z.string().describe('The project'),
7
+ host: z.string().describe('Its folder on this PC'),
8
+ guest: z.string().describe('Its folder in the sandbox'),
9
+ mechanism: z.string().describe('How it got into the sandbox (launch, root, boot or share)'),
10
+ here: z.boolean().describe('The project of the current folder'),
11
+ setup: z.object({ phase: z.string(), message: z.string() }).describe('How far its setup is'),
12
+ databases: z.array(z.object({ database: z.string(), port: z.number(), state: z.string() })),
13
+ sessions: z.array(z.object({ id: z.string(), harness: z.string(), viewers: z.string(), started: z.string() })),
14
+ repoGuard: z.array(z.string()).describe('Repo guard findings in its folder'),
15
+ });
16
+ const StateSchema = z.object({
17
+ running: z.boolean().describe('A Windows Sandbox is running'),
18
+ phase: z.string().describe('What it is doing (ready, provisioning ...)'),
19
+ message: z.string().optional().describe('Its last message'),
20
+ headless: z.boolean().optional().describe('Its window is hidden'),
21
+ startedAt: z.number().nullable().describe('When it started (ms), if known'),
22
+ daemon: z.string().describe("The sandbox helper's answer"),
23
+ account: z.string().nullable().describe('The Claude login it uses'),
24
+ syncWatcher: z.boolean().describe('The background history sync runs'),
25
+ });
26
+ export const SandboxStatusSchema = z.object({
27
+ /** Present when the running sandbox is another user's. */
28
+ shared: z
29
+ .object({
30
+ line: z.string().describe('"Running, started by alice (shared with you)"'),
31
+ limited: z.boolean().describe('Not shared with you: nothing more is shown'),
32
+ startedBy: z.string().nullable().describe('Whose it is'),
33
+ })
34
+ .optional(),
35
+ sandbox: StateSchema,
36
+ here: z.object({ folder: z.string(), project: z.string().nullable(), guest: z.string().nullable() }),
37
+ roots: z.array(z.object({ host: z.string(), guest: z.string() })),
38
+ projects: z.array(ProjectSchema),
39
+ otherSessions: z.array(z.object({ id: z.string(), harness: z.string(), cwd: z.string() })),
40
+ repoGuard: z.object({ guarded: z.number(), findings: z.array(z.string()) }),
41
+ });
42
+ const MessageSchema = z.object({ message: z.string().describe('What happened') });
43
+ /** "pong (2 session(s) running)" from the helper in the sandbox, in plain words. */
44
+ export function helperText(answer) {
45
+ const sessions = /^pong \((\d+) session/.exec(answer);
46
+ if (!sessions)
47
+ return answer;
48
+ return 'responding, ' + plural(Number(sessions[1]), 'session') + ' running';
49
+ }
50
+ /** How long it has been up ("3 h"), or null. */
51
+ function uptime(s) {
52
+ return s.running && s.startedAt ? ago(s.startedAt).replace(' ago', '') : null;
53
+ }
54
+ export const sandboxStatus = defineQuery({
55
+ id: 'sandbox.status',
56
+ title: 'Sandbox status',
57
+ summary: 'show what the sandbox is doing',
58
+ input: z.object({}),
59
+ output: SandboxStatusSchema,
60
+ live: { everyMs: 2500 },
61
+ cli: {
62
+ name: 'status',
63
+ group: 'Sessions',
64
+ json: true,
65
+ // The --json shape `sandbox status` has always printed.
66
+ shapeJson: (o) => {
67
+ if (o.shared?.limited)
68
+ return { sandbox: { running: true, shared: false, startedBy: o.shared.startedBy } };
69
+ const s = o.sandbox;
70
+ const borrowed = o.shared?.startedBy ? { startedBy: o.shared.startedBy, shared: true } : {};
71
+ return {
72
+ sandbox: {
73
+ ...borrowed,
74
+ running: s.running,
75
+ phase: s.phase,
76
+ message: s.message,
77
+ headless: s.headless,
78
+ uptime: uptime(s),
79
+ daemon: s.daemon,
80
+ account: s.account,
81
+ syncWatcher: s.syncWatcher,
82
+ },
83
+ here: o.here,
84
+ roots: o.roots,
85
+ projects: o.projects,
86
+ otherSessions: o.otherSessions,
87
+ repoGuard: o.repoGuard,
88
+ };
89
+ },
90
+ },
91
+ });
92
+ export const showWindow = defineOperation({
93
+ id: 'sandbox.showWindow',
94
+ title: 'Show the window',
95
+ summary: 'show the sandbox window',
96
+ input: z.object({}),
97
+ output: MessageSchema,
98
+ text: (o) => o.message,
99
+ cli: { name: 'show', group: 'Sessions' },
100
+ });
101
+ export const hideWindow = defineOperation({
102
+ id: 'sandbox.hideWindow',
103
+ title: 'Hide the window',
104
+ summary: 'hide the sandbox window (it keeps running)',
105
+ input: z.object({}),
106
+ output: MessageSchema,
107
+ text: (o) => o.message,
108
+ cli: { name: 'hide', group: 'Sessions' },
109
+ });
110
+ export const stopSandbox = defineOperation({
111
+ id: 'sandbox.stop',
112
+ title: 'Stop the sandbox…',
113
+ summary: "shut the sandbox down (every project's sessions end)",
114
+ input: z.object({}),
115
+ output: z.object({ stopped: z.boolean().describe('It was asked to shut down'), message: z.string() }),
116
+ danger: true,
117
+ text: (o) => o.message,
118
+ cli: { name: 'stop', group: 'Agents', yes: "do not ask when other projects' sessions would end" },
119
+ });
120
+ const MECHANISM_TEXT = {
121
+ launch: 'started from here',
122
+ root: 'in a project root',
123
+ boot: 'mapped at start',
124
+ };
125
+ function projectItem(p) {
126
+ return {
127
+ id: 'project:' + p.name,
128
+ label: p.name,
129
+ hint: p.host + ' -> ' + p.guest + ' (' + (MECHANISM_TEXT[p.mechanism] ?? 'wsb share') + ')',
130
+ marked: p.here,
131
+ details: [
132
+ 'setup: ' + p.setup.phase + (p.setup.phase === 'ready' ? '' : ' - ' + p.setup.message),
133
+ ...(p.databases.length
134
+ ? ['databases: ' + p.databases.map((d) => d.database + ' :' + d.port + ' ' + d.state).join(', ')]
135
+ : []),
136
+ ...p.sessions.map((s) => 'session ' + s.id + ' ' + s.harness + ' ' + s.viewers + ' ' + ago(s.started)),
137
+ ...p.repoGuard.map((f) => 'guard: ' + f),
138
+ ],
139
+ };
140
+ }
141
+ function facts(o) {
142
+ const s = o.sandbox;
143
+ const sessions = o.projects.reduce((n, p) => n + p.sessions.length, 0) + o.otherSessions.length;
144
+ const fact = (id, label, value, extra = {}) => ({
145
+ id,
146
+ label,
147
+ value,
148
+ ...extra,
149
+ });
150
+ return [
151
+ ...(o.shared?.startedBy ? [fact('owner', 'Started by', o.shared.startedBy)] : []),
152
+ fact('running', 'Running', s.running ? 'yes' : 'no', { tone: s.running ? 'ok' : 'muted' }),
153
+ ...(s.running
154
+ ? [
155
+ fact('phase', 'Phase', s.phase, { tone: s.phase === 'ready' ? 'ok' : 'warn' }),
156
+ fact('message', 'Message', s.message || '-'),
157
+ fact('window', 'Window', s.headless ? 'hidden (sandbox show opens it)' : 'shown'),
158
+ fact('uptime', 'Uptime', uptime(s) ?? '-'),
159
+ fact('helper', 'Helper', s.daemon === '-' ? '-' : helperText(s.daemon)),
160
+ fact('sessions', 'Sessions', String(sessions)),
161
+ ]
162
+ : []),
163
+ fact('account', 'Account', s.account ?? 'none selected (sandbox account use)'),
164
+ fact('sync', 'Background sync', s.syncWatcher ? 'on' : 'off'),
165
+ ];
166
+ }
167
+ function projectsSection(o) {
168
+ const roots = o.roots.map((r) => ({
169
+ id: 'root:' + r.host,
170
+ label: 'root',
171
+ hint: r.host + ' -> ' + r.guest + ' (every project in it opens without a restart)',
172
+ }));
173
+ const here = o.projects.some((p) => p.here);
174
+ return {
175
+ id: 'projects',
176
+ title: 'Projects',
177
+ items: [...o.projects.map(projectItem), ...roots],
178
+ notes: [
179
+ here
180
+ ? { text: '* = the project of this folder', tone: 'muted' }
181
+ : { text: o.here.folder + ' is not in this sandbox (start it here: sandbox claude)', tone: 'muted' },
182
+ ],
183
+ };
184
+ }
185
+ function guardSection(o) {
186
+ const findings = o.repoGuard.findings;
187
+ return {
188
+ id: 'guard',
189
+ title: 'Repo guard',
190
+ summary: o.repoGuard.guarded +
191
+ ' folder(s) guarded; ' +
192
+ (findings.length ? findings.length + ' change(s) neutralised:' : 'nothing from the sandbox needed neutralising'),
193
+ items: findings.slice(-10).map((f, i) => ({ id: 'guard:' + i, label: f, tone: 'warn' })),
194
+ };
195
+ }
196
+ /** The status page: the facts, the window and stop actions, the projects, and the repo guard. */
197
+ export function sandboxPage(o) {
198
+ const notice = o.shared
199
+ ? {
200
+ text: o.shared.line + (o.shared.limited ? '' : '. Its window is on their desktop; use its agents here.'),
201
+ tone: 'accent',
202
+ }
203
+ : undefined;
204
+ if (o.shared?.limited)
205
+ return { title: 'Sandbox', notice, sections: [] };
206
+ const running = o.sandbox.running;
207
+ const status = {
208
+ id: 'status',
209
+ facts: facts(o),
210
+ actions: running
211
+ ? [
212
+ action(showWindow, {}, { key: 'w', verb: 'show', importance: 3 }),
213
+ action(hideWindow, {}, { key: 'h', verb: 'hide', importance: 3 }),
214
+ action(stopSandbox, {}, { key: 'x', verb: 'stop', importance: 1 }),
215
+ ]
216
+ : [],
217
+ };
218
+ const others = {
219
+ id: 'other-sessions',
220
+ title: 'Other sessions',
221
+ items: o.otherSessions.map((s) => ({
222
+ id: 'session:' + s.id,
223
+ label: 'session ' + s.id,
224
+ hint: s.harness + ' ' + s.cwd,
225
+ })),
226
+ };
227
+ return {
228
+ title: 'Sandbox',
229
+ notice,
230
+ sections: [
231
+ status,
232
+ ...(running ? [projectsSection(o)] : []),
233
+ ...(others.items?.length ? [others] : []),
234
+ guardSection(o),
235
+ ],
236
+ };
237
+ }
238
+ export const sandboxView = defineView({
239
+ id: 'sandbox',
240
+ title: 'Sandbox',
241
+ summary: 'What the sandbox is doing, its window, and stopping it.',
242
+ queries: { status: sandboxStatus },
243
+ operations: [showWindow, hideWindow, stopSandbox],
244
+ build: ({ status }) => sandboxPage(status),
245
+ });
@@ -0,0 +1,72 @@
1
+ export declare const sandboxStatusRun: import("../../kernel/define.js").Implementation<import("../../kernel/define.js").QueryDef<import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
2
+ shared: import("zod").ZodOptional<import("zod").ZodObject<{
3
+ line: import("zod").ZodString;
4
+ limited: import("zod").ZodBoolean;
5
+ startedBy: import("zod").ZodNullable<import("zod").ZodString>;
6
+ }, import("zod/v4/core").$strip>>;
7
+ sandbox: import("zod").ZodObject<{
8
+ running: import("zod").ZodBoolean;
9
+ phase: import("zod").ZodString;
10
+ message: import("zod").ZodOptional<import("zod").ZodString>;
11
+ headless: import("zod").ZodOptional<import("zod").ZodBoolean>;
12
+ startedAt: import("zod").ZodNullable<import("zod").ZodNumber>;
13
+ daemon: import("zod").ZodString;
14
+ account: import("zod").ZodNullable<import("zod").ZodString>;
15
+ syncWatcher: import("zod").ZodBoolean;
16
+ }, import("zod/v4/core").$strip>;
17
+ here: import("zod").ZodObject<{
18
+ folder: import("zod").ZodString;
19
+ project: import("zod").ZodNullable<import("zod").ZodString>;
20
+ guest: import("zod").ZodNullable<import("zod").ZodString>;
21
+ }, import("zod/v4/core").$strip>;
22
+ roots: import("zod").ZodArray<import("zod").ZodObject<{
23
+ host: import("zod").ZodString;
24
+ guest: import("zod").ZodString;
25
+ }, import("zod/v4/core").$strip>>;
26
+ projects: import("zod").ZodArray<import("zod").ZodObject<{
27
+ name: import("zod").ZodString;
28
+ host: import("zod").ZodString;
29
+ guest: import("zod").ZodString;
30
+ mechanism: import("zod").ZodString;
31
+ here: import("zod").ZodBoolean;
32
+ setup: import("zod").ZodObject<{
33
+ phase: import("zod").ZodString;
34
+ message: import("zod").ZodString;
35
+ }, import("zod/v4/core").$strip>;
36
+ databases: import("zod").ZodArray<import("zod").ZodObject<{
37
+ database: import("zod").ZodString;
38
+ port: import("zod").ZodNumber;
39
+ state: import("zod").ZodString;
40
+ }, import("zod/v4/core").$strip>>;
41
+ sessions: import("zod").ZodArray<import("zod").ZodObject<{
42
+ id: import("zod").ZodString;
43
+ harness: import("zod").ZodString;
44
+ viewers: import("zod").ZodString;
45
+ started: import("zod").ZodString;
46
+ }, import("zod/v4/core").$strip>>;
47
+ repoGuard: import("zod").ZodArray<import("zod").ZodString>;
48
+ }, import("zod/v4/core").$strip>>;
49
+ otherSessions: import("zod").ZodArray<import("zod").ZodObject<{
50
+ id: import("zod").ZodString;
51
+ harness: import("zod").ZodString;
52
+ cwd: import("zod").ZodString;
53
+ }, import("zod/v4/core").$strip>>;
54
+ repoGuard: import("zod").ZodObject<{
55
+ guarded: import("zod").ZodNumber;
56
+ findings: import("zod").ZodArray<import("zod").ZodString>;
57
+ }, import("zod/v4/core").$strip>;
58
+ }, import("zod/v4/core").$strip>, "sandbox.status">, import("../../../cli/commands/context.js").Context>;
59
+ export declare const showWindowRun: import("../../kernel/define.js").Implementation<import("../../kernel/define.js").OperationDef<import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
60
+ message: import("zod").ZodString;
61
+ }, import("zod/v4/core").$strip>, "sandbox.showWindow">, import("../../../cli/commands/context.js").Context>;
62
+ export declare const hideWindowRun: import("../../kernel/define.js").Implementation<import("../../kernel/define.js").OperationDef<import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
63
+ message: import("zod").ZodString;
64
+ }, import("zod/v4/core").$strip>, "sandbox.hideWindow">, import("../../../cli/commands/context.js").Context>;
65
+ /**
66
+ * Stopping ends every project's sessions: it says which, and the sessions of other projects need a yes (also on the
67
+ * command line, where --yes gives it; a script without it fails rather than end them by accident).
68
+ */
69
+ export declare const stopSandboxRun: import("../../kernel/define.js").Implementation<import("../../kernel/define.js").OperationDef<import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
70
+ stopped: import("zod").ZodBoolean;
71
+ message: import("zod").ZodString;
72
+ }, import("zod/v4/core").$strip>, "sandbox.stop">, import("../../../cli/commands/context.js").Context>;
@@ -0,0 +1,98 @@
1
+ // The sandbox feature's work: its status (from the services, as this user may see it), its window and stopping it.
2
+ // Talks only through `io`; another user's sandbox follows the sharing rules (cli/commands/shared-use.ts).
3
+ import path from 'node:path';
4
+ import { safeText } from '../../../core/util/index.js';
5
+ import { SandboxChannel } from '../../../host/channel/index.js';
6
+ import { runningOwner } from '../../../host/sharing/index.js';
7
+ import { requireOnPc, requireRunning } from '../../../cli/commands/context.js';
8
+ import { hereDir } from '../../../cli/commands/projects/here.js';
9
+ import { lookAtSandbox, useSharedSandbox } from '../../../cli/commands/shared-use.js';
10
+ import { SandboxService } from '../../../cli/services/index.js';
11
+ import { implement, typedConfirm } from '../../context.js';
12
+ import { cancelled } from '../../kernel/index.js';
13
+ import { hideWindow, sandboxStatus, showWindow, stopSandbox } from './sandbox.def.js';
14
+ /** Another user's sandbox that is not shared: whose it is, and nothing else. */
15
+ function limitedStatus(view, folder) {
16
+ const owner = view.owner;
17
+ return {
18
+ shared: { line: view.line ?? '', limited: true, startedBy: owner?.kind === 'other' ? owner.user : null },
19
+ sandbox: {
20
+ running: true,
21
+ phase: 'unknown',
22
+ startedAt: null,
23
+ daemon: '-',
24
+ account: null,
25
+ syncWatcher: false,
26
+ },
27
+ here: { folder, project: null, guest: null },
28
+ roots: [],
29
+ projects: [],
30
+ otherSessions: [],
31
+ repoGuard: { guarded: 0, findings: [] },
32
+ };
33
+ }
34
+ export const sandboxStatusRun = implement(sandboxStatus, async (asked) => {
35
+ const view = lookAtSandbox(asked);
36
+ if (view.limited)
37
+ return limitedStatus(view, hereDir(asked));
38
+ const report = await new SandboxService(view.ctx).status();
39
+ return {
40
+ ...(view.line ? { shared: { line: view.line, limited: false, startedBy: view.ctx.borrowed?.user ?? null } } : {}),
41
+ ...report,
42
+ sandbox: { ...report.sandbox, daemon: safeText(report.sandbox.daemon) },
43
+ };
44
+ });
45
+ export const showWindowRun = implement(showWindow, async (ctx, _input, io) => {
46
+ requireOnPc('show');
47
+ requireRunning();
48
+ await useSharedSandbox(ctx, { kind: 'owner-only', what: 'show the window', window: true }, typedConfirm(io));
49
+ new SandboxService(ctx).showWindow();
50
+ return { message: 'Sandbox window shown.' };
51
+ });
52
+ export const hideWindowRun = implement(hideWindow, async (ctx, _input, io) => {
53
+ requireOnPc('hide');
54
+ requireRunning();
55
+ await useSharedSandbox(ctx, { kind: 'owner-only', what: 'hide the window', window: true }, typedConfirm(io));
56
+ io.progress('Hiding the window');
57
+ await new SandboxService(ctx).hideWindow();
58
+ return { message: 'Sandbox window hidden. Bring it back with: sbx-show' };
59
+ });
60
+ /**
61
+ * Stopping ends every project's sessions: it says which, and the sessions of other projects need a yes (also on the
62
+ * command line, where --yes gives it; a script without it fails rather than end them by accident).
63
+ */
64
+ export const stopSandboxRun = implement(stopSandbox, async (asked, _input, io) => {
65
+ requireOnPc('stop');
66
+ if (!new SandboxService(asked).isRunning())
67
+ return { stopped: false, message: 'No Windows Sandbox is running.' };
68
+ // Another user's sandbox: only when shared, and only after typing their name (--yes in scripts).
69
+ const ctx = runningOwner().kind === 'mine'
70
+ ? asked
71
+ : await useSharedSandbox(asked, (shared) => ({ kind: 'stop', sessions: new SandboxChannel(shared.dataPath).currentSessions().length }), typedConfirm(io));
72
+ const service = new SandboxService(ctx);
73
+ const { sandbox, running, others } = service.stopPlan();
74
+ if (running.length)
75
+ io.log('Stopping ends ' +
76
+ running.length +
77
+ ' session(s): ' +
78
+ running
79
+ .map((s) => safeText(s.harness) + ' in ' + safeText(s.project ?? path.win32.basename(s.cwd)))
80
+ .join(', ') +
81
+ '.');
82
+ const yes = await io.confirm({
83
+ title: others.length ? 'Stop the whole sandbox?' : 'Stop the sandbox?',
84
+ lines: others.length ? [others.length + ' of them belong to other projects.'] : [],
85
+ yes: 'Stop',
86
+ danger: true,
87
+ implied: others.length === 0,
88
+ noTerminal: {
89
+ message: others.length + ' of these sessions belong to other projects, so the sandbox was not stopped.',
90
+ fix: 'Stop it anyway with: sandbox stop --yes',
91
+ },
92
+ });
93
+ if (!yes)
94
+ cancelled();
95
+ io.progress('Asking the sandbox to shut down');
96
+ await service.shutdown(sandbox);
97
+ return { stopped: true, message: 'Sandbox is shutting down; history and claude-mem sync back when it closes.' };
98
+ });
@@ -0,0 +1,2 @@
1
+ export * from './sessions.def.js';
2
+ export * from './sessions.run.js';
@@ -0,0 +1,3 @@
1
+ // The sessions feature: the list (live) and restarting the agents.
2
+ export * from './sessions.def.js';
3
+ export * from './sessions.run.js';
@@ -0,0 +1,141 @@
1
+ import { z } from 'zod';
2
+ import { type Page } from '../../kernel/index.js';
3
+ /** A session as every surface may see it: never its attach address or token. */
4
+ export declare const SessionRowSchema: z.ZodObject<{
5
+ id: z.ZodString;
6
+ launchId: z.ZodString;
7
+ harness: z.ZodString;
8
+ cwd: z.ZodString;
9
+ project: z.ZodOptional<z.ZodString>;
10
+ phase: z.ZodEnum<{
11
+ failed: "failed";
12
+ starting: "starting";
13
+ running: "running";
14
+ exited: "exited";
15
+ }>;
16
+ message: z.ZodString;
17
+ updatedAt: z.ZodString;
18
+ startedAt: z.ZodString;
19
+ conversation: z.ZodOptional<z.ZodString>;
20
+ exitCode: z.ZodOptional<z.ZodNumber>;
21
+ projectName: z.ZodOptional<z.ZodString>;
22
+ here: z.ZodOptional<z.ZodBoolean>;
23
+ viewers: z.ZodOptional<z.ZodNullable<z.ZodObject<{
24
+ viewers: z.ZodNumber;
25
+ remote: z.ZodNumber;
26
+ }, z.core.$strip>>>;
27
+ canOpen: z.ZodBoolean;
28
+ }, z.core.$strip>;
29
+ export type SessionRow = z.output<typeof SessionRowSchema>;
30
+ export declare const SessionsListSchema: z.ZodObject<{
31
+ sandboxRunning: z.ZodBoolean;
32
+ defaultAgent: z.ZodString;
33
+ wide: z.ZodBoolean;
34
+ owner: z.ZodOptional<z.ZodString>;
35
+ sessions: z.ZodArray<z.ZodObject<{
36
+ id: z.ZodString;
37
+ launchId: z.ZodString;
38
+ harness: z.ZodString;
39
+ cwd: z.ZodString;
40
+ project: z.ZodOptional<z.ZodString>;
41
+ phase: z.ZodEnum<{
42
+ failed: "failed";
43
+ starting: "starting";
44
+ running: "running";
45
+ exited: "exited";
46
+ }>;
47
+ message: z.ZodString;
48
+ updatedAt: z.ZodString;
49
+ startedAt: z.ZodString;
50
+ conversation: z.ZodOptional<z.ZodString>;
51
+ exitCode: z.ZodOptional<z.ZodNumber>;
52
+ projectName: z.ZodOptional<z.ZodString>;
53
+ here: z.ZodOptional<z.ZodBoolean>;
54
+ viewers: z.ZodOptional<z.ZodNullable<z.ZodObject<{
55
+ viewers: z.ZodNumber;
56
+ remote: z.ZodNumber;
57
+ }, z.core.$strip>>>;
58
+ canOpen: z.ZodBoolean;
59
+ }, z.core.$strip>>;
60
+ }, z.core.$strip>;
61
+ export type SessionsList = z.output<typeof SessionsListSchema>;
62
+ /** "1 here, 0 in sandbox" for a session's viewers. */
63
+ export declare function viewerText(v: SessionRow['viewers']): string;
64
+ /** This folder's project first, newest first within each group. */
65
+ export declare function orderedSessions(list: readonly SessionRow[]): SessionRow[];
66
+ export declare const listSessions: import("../../kernel/define.js").QueryDef<z.ZodObject<{
67
+ wide: z.ZodDefault<z.ZodBoolean>;
68
+ }, z.core.$strip>, z.ZodObject<{
69
+ sandboxRunning: z.ZodBoolean;
70
+ defaultAgent: z.ZodString;
71
+ wide: z.ZodBoolean;
72
+ owner: z.ZodOptional<z.ZodString>;
73
+ sessions: z.ZodArray<z.ZodObject<{
74
+ id: z.ZodString;
75
+ launchId: z.ZodString;
76
+ harness: z.ZodString;
77
+ cwd: z.ZodString;
78
+ project: z.ZodOptional<z.ZodString>;
79
+ phase: z.ZodEnum<{
80
+ failed: "failed";
81
+ starting: "starting";
82
+ running: "running";
83
+ exited: "exited";
84
+ }>;
85
+ message: z.ZodString;
86
+ updatedAt: z.ZodString;
87
+ startedAt: z.ZodString;
88
+ conversation: z.ZodOptional<z.ZodString>;
89
+ exitCode: z.ZodOptional<z.ZodNumber>;
90
+ projectName: z.ZodOptional<z.ZodString>;
91
+ here: z.ZodOptional<z.ZodBoolean>;
92
+ viewers: z.ZodOptional<z.ZodNullable<z.ZodObject<{
93
+ viewers: z.ZodNumber;
94
+ remote: z.ZodNumber;
95
+ }, z.core.$strip>>>;
96
+ canOpen: z.ZodBoolean;
97
+ }, z.core.$strip>>;
98
+ }, z.core.$strip>, "sessions.list">;
99
+ export declare const restartSessions: import("../../kernel/define.js").OperationDef<z.ZodObject<{
100
+ harness: z.ZodOptional<z.ZodString>;
101
+ all: z.ZodDefault<z.ZodBoolean>;
102
+ }, z.core.$strip>, z.ZodObject<{
103
+ message: z.ZodString;
104
+ }, z.core.$strip>, "sessions.restart">;
105
+ /** The sessions page: one list (a table on the command line), this folder's project first. */
106
+ export declare function sessionsPage(o: SessionsList): Page;
107
+ export declare const sessionsView: import("../../kernel/define.js").ViewDef<{
108
+ sessions: import("../../kernel/define.js").QueryDef<z.ZodObject<{
109
+ wide: z.ZodDefault<z.ZodBoolean>;
110
+ }, z.core.$strip>, z.ZodObject<{
111
+ sandboxRunning: z.ZodBoolean;
112
+ defaultAgent: z.ZodString;
113
+ wide: z.ZodBoolean;
114
+ owner: z.ZodOptional<z.ZodString>;
115
+ sessions: z.ZodArray<z.ZodObject<{
116
+ id: z.ZodString;
117
+ launchId: z.ZodString;
118
+ harness: z.ZodString;
119
+ cwd: z.ZodString;
120
+ project: z.ZodOptional<z.ZodString>;
121
+ phase: z.ZodEnum<{
122
+ failed: "failed";
123
+ starting: "starting";
124
+ running: "running";
125
+ exited: "exited";
126
+ }>;
127
+ message: z.ZodString;
128
+ updatedAt: z.ZodString;
129
+ startedAt: z.ZodString;
130
+ conversation: z.ZodOptional<z.ZodString>;
131
+ exitCode: z.ZodOptional<z.ZodNumber>;
132
+ projectName: z.ZodOptional<z.ZodString>;
133
+ here: z.ZodOptional<z.ZodBoolean>;
134
+ viewers: z.ZodOptional<z.ZodNullable<z.ZodObject<{
135
+ viewers: z.ZodNumber;
136
+ remote: z.ZodNumber;
137
+ }, z.core.$strip>>>;
138
+ canOpen: z.ZodBoolean;
139
+ }, z.core.$strip>>;
140
+ }, z.core.$strip>, "sessions.list">;
141
+ }, Record<string, never>, "sessions">;