windows-development-sandbox 1.13.2 → 1.15.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 (153) hide show
  1. package/config.example.json +2 -1
  2. package/dist/app/features/defs.d.ts +1 -1
  3. package/dist/app/features/projects/projects.def.d.ts +1 -1
  4. package/dist/app/features/projects/projects.run.d.ts +1 -1
  5. package/dist/app/features/projects/projects.run.js +10 -2
  6. package/dist/app/features/sandbox/sandbox.def.js +3 -1
  7. package/dist/app/features/settings/categories.def.js +1 -0
  8. package/dist/app/features/storage/storage.run.js +1 -1
  9. package/dist/bin/agent-sandbox.js +2 -2
  10. package/dist/bin/{chunk-VENWSGX2.js → chunk-D7CM63BS.js} +2303 -1462
  11. package/dist/bin/{chunk-K4SU3MHJ.js → chunk-HTQT5SBY.js} +1 -1
  12. package/dist/bin/{chunk-IL7BXJF2.js → chunk-RQ4BWBYX.js} +1 -1
  13. package/dist/bin/claude-host.js +2 -2
  14. package/dist/bin/claude-sbx.js +2 -2
  15. package/dist/bin/codex-sbx.js +2 -2
  16. package/dist/bin/gemini-sbx.js +2 -2
  17. package/dist/bin/sandbox.js +2 -2
  18. package/dist/bin/sbx-hide.js +2 -2
  19. package/dist/bin/sbx-show.js +2 -2
  20. package/dist/cli/commands/launch/launch.js +1 -1
  21. package/dist/cli/commands/projects/here.js +2 -0
  22. package/dist/cli/commands/repair/checks/contained.js +1 -1
  23. package/dist/cli/services/health-service.js +15 -3
  24. package/dist/cli/services/projects-service.d.ts +8 -3
  25. package/dist/cli/services/projects-service.js +21 -4
  26. package/dist/core/config/defaults.js +1 -0
  27. package/dist/core/schema/config.d.ts +4 -0
  28. package/dist/core/schema/projects.d.ts +4 -0
  29. package/dist/core/schema/projects.js +3 -0
  30. package/dist/guest/boot/boot.js +8 -2
  31. package/dist/guest/daemon/daemon.js +3 -0
  32. package/dist/guest/daemon/live-folders.d.ts +48 -0
  33. package/dist/guest/daemon/live-folders.js +245 -0
  34. package/dist/guest/daemon/live.d.ts +4 -0
  35. package/dist/guest/daemon/live.js +57 -0
  36. package/dist/guest/daemon/sessions.d.ts +7 -0
  37. package/dist/guest/daemon/sessions.js +23 -2
  38. package/dist/guest/entries/daemon.js +5 -2
  39. package/dist/guest/runtime/csc.d.ts +1 -0
  40. package/dist/guest/runtime/csc.js +1 -0
  41. package/dist/guest/runtime/secrets.d.ts +5 -2
  42. package/dist/guest/runtime/secrets.js +12 -5
  43. package/dist/guest/sessions/pty-host.d.ts +10 -0
  44. package/dist/guest/sessions/pty-host.js +48 -3
  45. package/dist/host/channel/channel.js +1 -1
  46. package/dist/host/engines/hcs/live-folders.d.ts +117 -0
  47. package/dist/host/engines/hcs/live-folders.js +347 -0
  48. package/dist/host/engines/index.d.ts +1 -0
  49. package/dist/host/engines/index.js +1 -0
  50. package/dist/host/install/install-record.d.ts +1 -0
  51. package/dist/host/install/install-record.js +2 -0
  52. package/dist/host/launch/generate.js +8 -1
  53. package/dist/host/projects/join.d.ts +4 -0
  54. package/dist/host/projects/join.js +11 -3
  55. package/dist/host/projects/mapper.d.ts +34 -5
  56. package/dist/host/projects/mapper.js +88 -20
  57. package/dist/host/projects/registry.d.ts +2 -0
  58. package/dist/host/projects/registry.js +1 -1
  59. package/dist/host/sandbox/contained-deps.d.ts +2 -1
  60. package/dist/host/sandbox/contained-deps.js +6 -4
  61. package/dist/host/secrets/launch-secrets.js +2 -1
  62. package/dist/host/sharing/lifecycle.js +9 -1
  63. package/dist/host/storage/contained/contained-storage.js +13 -0
  64. package/dist/host/storage/contained/disk-port.d.ts +5 -0
  65. package/dist/host/storage/contained/helper-port.d.ts +72 -0
  66. package/dist/host/storage/contained/helper-port.js +162 -0
  67. package/dist/host/storage/contained/index.d.ts +1 -0
  68. package/dist/host/storage/contained/index.js +1 -0
  69. package/dist/host/web/bridge.d.ts +5 -0
  70. package/dist/host/web/bridge.js +11 -1
  71. package/dist/host/web/server.d.ts +2 -0
  72. package/dist/host/web/server.js +11 -1
  73. package/dist/runtime/agent.js +23 -0
  74. package/dist/runtime/daemon.js +523 -135
  75. package/dist/runtime/db.js +23 -0
  76. package/dist/runtime/main.js +221 -15
  77. package/dist/runtime/netproxy.js +23 -0
  78. package/dist/runtime/view.js +209 -12
  79. package/dist/selftest/channel.test.js +72 -1
  80. package/dist/selftest/contained.test.js +1 -37
  81. package/dist/selftest/hcs.test.js +5 -2
  82. package/dist/selftest/index.js +4 -0
  83. package/dist/selftest/install.test.js +11 -0
  84. package/dist/selftest/layout.test.js +1 -0
  85. package/dist/selftest/live-daemon.test.js +51 -1
  86. package/dist/selftest/live-folders.test.d.ts +2 -0
  87. package/dist/selftest/live-folders.test.js +588 -0
  88. package/dist/selftest/live-terminal.test.js +112 -4
  89. package/dist/selftest/projects.test.js +7 -7
  90. package/dist/selftest/storage-helper.test.d.ts +2 -0
  91. package/dist/selftest/storage-helper.test.js +493 -0
  92. package/dist/selftest/support/engine-golden.js +1 -0
  93. package/dist/selftest/support/fixtures.d.ts +1 -0
  94. package/dist/selftest/support/live.js +2 -0
  95. package/dist/selftest/support/vhdx.d.ts +14 -0
  96. package/dist/selftest/support/vhdx.js +72 -0
  97. package/dist/selftest/web.test.js +14 -2
  98. package/dist/shared/channel/index.d.ts +1 -0
  99. package/dist/shared/channel/index.js +1 -0
  100. package/dist/shared/channel/live.d.ts +53 -0
  101. package/dist/shared/channel/live.js +92 -0
  102. package/dist/shared/channel/run-dir.d.ts +11 -0
  103. package/dist/shared/channel/run-dir.js +20 -0
  104. package/dist/shared/channel/secrets.d.ts +1 -0
  105. package/dist/shared/channel/secrets.js +5 -0
  106. package/dist/shared/paths/projects.d.ts +6 -1
  107. package/dist/shared/paths/projects.js +21 -1
  108. package/dist/shared/pty/index.d.ts +3 -1
  109. package/dist/shared/pty/index.js +3 -1
  110. package/dist/shared/pty/key-gate.d.ts +24 -0
  111. package/dist/shared/pty/key-gate.js +45 -0
  112. package/dist/shared/pty/mouse-modes.d.ts +27 -0
  113. package/dist/shared/pty/mouse-modes.js +155 -0
  114. package/dist/shared/pty/terminal.d.ts +0 -5
  115. package/dist/shared/pty/terminal.js +51 -20
  116. package/dist/sync/watcher.js +10 -1
  117. package/dist/web/index.html +1 -1
  118. package/dist/web/{main-NBQ3LF4E.js → main-7DJZ2M27.js} +34 -34
  119. package/native/csharp/HcsHost/AssemblyInfo.cs +4 -4
  120. package/native/csharp/HcsHost/FolderAccess.cs +361 -0
  121. package/native/csharp/HcsHost/Hcs.cs +31 -3
  122. package/native/csharp/HcsHost/Program.cs +54 -6
  123. package/native/csharp/HcsHost/Share.cs +64 -11
  124. package/native/csharp/HcsHost/WsbGuard.cs +130 -0
  125. package/native/csharp/HcsHost/WsbShare.cs +295 -0
  126. package/native/csharp/HostTools/AssemblyInfo.cs +3 -3
  127. package/native/csharp/StorageHelper/AssemblyInfo.cs +15 -0
  128. package/native/csharp/StorageHelper/Client.cs +297 -0
  129. package/native/csharp/StorageHelper/Log.cs +177 -0
  130. package/native/csharp/StorageHelper/MountRecords.cs +160 -0
  131. package/native/csharp/StorageHelper/Operations.cs +596 -0
  132. package/native/csharp/StorageHelper/Pins.cs +270 -0
  133. package/native/csharp/StorageHelper/Privileges.cs +78 -0
  134. package/native/csharp/StorageHelper/Program.cs +349 -0
  135. package/native/csharp/StorageHelper/Protocol.cs +107 -0
  136. package/native/csharp/StorageHelper/RateLimiter.cs +97 -0
  137. package/native/csharp/StorageHelper/Rules.cs +156 -0
  138. package/native/csharp/StorageHelper/Server.cs +656 -0
  139. package/native/csharp/StorageHelper/Settings.cs +297 -0
  140. package/native/csharp/StorageHelper/StorageService.cs +53 -0
  141. package/native/csharp/StorageHelper/UserSettings.cs +206 -0
  142. package/native/csharp/StorageHelper/Vhdx.cs +230 -0
  143. package/native/csharp/StorageHelper/VirtualDisk.cs +241 -0
  144. package/native/csharp/StorageHelper/Volumes.cs +379 -0
  145. package/native/csharp/StorageHelper/Watchdog.cs +128 -0
  146. package/native/csharp/StorageHelper/Win32.cs +250 -0
  147. package/native/scripts/contained-common.ps1 +4 -0
  148. package/native/scripts/hcs-live-share.ps1 +191 -0
  149. package/native/scripts/set-storage-helper.ps1 +203 -0
  150. package/package.json +1 -1
  151. package/sandbox/csharp/BindMount.cs +120 -0
  152. package/sandbox/csharp/PtyHost.cs +236 -1
  153. package/schemas/config.schema.json +8 -0
@@ -574,6 +574,7 @@
574
574
  "askToAddRoot": true,
575
575
  "declinedRoots": [],
576
576
  "allowOutsideMappings": "ask",
577
- "wsbShare": true
577
+ "wsbShare": true,
578
+ "liveFolders": "off"
578
579
  }
579
580
  }
@@ -172,9 +172,9 @@ export declare const OPERATIONS: readonly [OperationDef<import("zod").ZodObject<
172
172
  message: import("zod").ZodString;
173
173
  }, import("zod/v4/core").$strip>, "projects.all">, OperationDef<import("zod").ZodObject<{
174
174
  change: import("zod").ZodDefault<import("zod").ZodEnum<{
175
- list: "list";
176
175
  add: "add";
177
176
  remove: "remove";
177
+ list: "list";
178
178
  }>>;
179
179
  rootFolder: import("zod").ZodOptional<import("zod").ZodString>;
180
180
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
@@ -73,9 +73,9 @@ export declare const allProjects: import("../../kernel/define.js").OperationDef<
73
73
  }, z.core.$strip>, "projects.all">;
74
74
  export declare const projectRoots: import("../../kernel/define.js").OperationDef<z.ZodObject<{
75
75
  change: z.ZodDefault<z.ZodEnum<{
76
- list: "list";
77
76
  add: "add";
78
77
  remove: "remove";
78
+ list: "list";
79
79
  }>>;
80
80
  rootFolder: z.ZodOptional<z.ZodString>;
81
81
  }, z.core.$strip>, z.ZodObject<{
@@ -46,9 +46,9 @@ export declare const allProjectsRun: import("../../kernel/define.js").Implementa
46
46
  }, import("zod/v4/core").$strip>, "projects.all">, import("../../../cli/commands/context.js").Context>;
47
47
  export declare const projectRootsRun: import("../../kernel/define.js").Implementation<import("../../kernel/define.js").OperationDef<import("zod").ZodObject<{
48
48
  change: import("zod").ZodDefault<import("zod").ZodEnum<{
49
- list: "list";
50
49
  add: "add";
51
50
  remove: "remove";
51
+ list: "list";
52
52
  }>>;
53
53
  rootFolder: import("zod").ZodOptional<import("zod").ZodString>;
54
54
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
@@ -68,14 +68,22 @@ export const removeProjectRun = implement(removeProject, async (ctx, input, io)
68
68
  const dir = await pickFolder(ctx, io, input.projectFolder);
69
69
  const yes = await io.confirm({
70
70
  title: 'Forget ' + path.basename(dir) + '?',
71
- lines: ['The project is dropped from your list of projects.', 'Nothing in ' + dir + ' is touched.'],
71
+ lines: [
72
+ 'The project is dropped from your list of projects.',
73
+ 'Nothing in ' + dir + ' is touched.',
74
+ ...(new ProjectsService(ctx).isLive(dir)
75
+ ? [
76
+ 'It is a live folder: it is hidden in the running sandbox and its share removed (Windows asks for permission).',
77
+ ]
78
+ : []),
79
+ ],
72
80
  yes: 'Forget',
73
81
  danger: true,
74
82
  implied: true,
75
83
  });
76
84
  if (!yes)
77
85
  cancelled();
78
- const { dir: forgotten, removed } = new ProjectsService(ctx).forget(dir);
86
+ const { dir: forgotten, removed } = await new ProjectsService(ctx).forget(dir);
79
87
  return {
80
88
  message: removed
81
89
  ? 'Removed ' + forgotten + ' from your projects (nothing in the folder was touched).'
@@ -6,7 +6,7 @@ const ProjectSchema = z.object({
6
6
  name: z.string().describe('The project'),
7
7
  host: z.string().describe('Its folder on this PC'),
8
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)'),
9
+ mechanism: z.string().describe('How it got into the sandbox (launch, root, boot, wsb or hcs)'),
10
10
  here: z.boolean().describe('The project of the current folder'),
11
11
  setup: z.object({ phase: z.string(), message: z.string() }).describe('How far its setup is'),
12
12
  databases: z.array(z.object({ database: z.string(), port: z.number(), state: z.string() })),
@@ -124,6 +124,8 @@ const MECHANISM_TEXT = {
124
124
  launch: 'started from here',
125
125
  root: 'in a project root',
126
126
  boot: 'mapped at start',
127
+ wsb: 'wsb share',
128
+ hcs: 'live folder through HCS, alpha',
127
129
  };
128
130
  function projectItem(p) {
129
131
  return {
@@ -123,6 +123,7 @@ const LABELS = {
123
123
  'sandbox.pressureResponse': 'Slow builds down when memory runs low',
124
124
  'network.dns': 'DNS servers',
125
125
  'projects.wsbShare': 'Add folders while the sandbox runs',
126
+ 'projects.liveFolders': 'Add folders through HCS (alpha, untested)',
126
127
  'projects.all': 'Map all known projects at start',
127
128
  'claudeProfile.hostDir': 'Claude folder on this PC',
128
129
  'claudeProfile.globalStateFile': 'Claude state file on this PC',
@@ -30,7 +30,7 @@ function requireNoSandbox() {
30
30
  }
31
31
  function storageFor(ctx) {
32
32
  const { config } = ctx.loaded;
33
- return new ContainedStorage(realContainedDeps(ctx.storageRoot, config.storage.containedMaxGb), config.storage.dataName);
33
+ return new ContainedStorage(realContainedDeps(ctx.storageRoot, config.storage.containedMaxGb, Boolean(ctx.options.config)), config.storage.dataName);
34
34
  }
35
35
  /** The folder a move or a switch goes to: picked from the known folders, or typed (expanded like the command line). */
36
36
  async function chooseFolder(io, service, what, cancelMessage) {
@@ -2,8 +2,8 @@
2
2
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
3
3
  import {
4
4
  run
5
- } from "./chunk-K4SU3MHJ.js";
6
- import "./chunk-VENWSGX2.js";
5
+ } from "./chunk-HTQT5SBY.js";
6
+ import "./chunk-D7CM63BS.js";
7
7
 
8
8
  // src/bin/agent-sandbox.ts
9
9
  run(process.argv.slice(2));