windows-development-sandbox 1.12.0 → 1.13.2

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 (206) hide show
  1. package/README.md +1 -0
  2. package/config.example.json +11 -1
  3. package/dist/app/features/access/access.def.d.ts +190 -0
  4. package/dist/app/features/access/access.def.js +273 -0
  5. package/dist/app/features/access/access.run.d.ts +79 -0
  6. package/dist/app/features/access/access.run.js +129 -0
  7. package/dist/app/features/access/index.d.ts +2 -0
  8. package/dist/app/features/access/index.js +3 -0
  9. package/dist/app/features/accounts/accounts.def.d.ts +1 -0
  10. package/dist/app/features/accounts/accounts.def.js +12 -3
  11. package/dist/app/features/accounts/accounts.run.d.ts +1 -0
  12. package/dist/app/features/accounts/accounts.run.js +20 -11
  13. package/dist/app/features/agents/agent-entry.js +5 -0
  14. package/dist/app/features/agents/agents.def.js +1 -0
  15. package/dist/app/features/apps/apps.def.js +1 -0
  16. package/dist/app/features/audit/audit.def.d.ts +11 -2
  17. package/dist/app/features/audit/audit.def.js +7 -4
  18. package/dist/app/features/audit/audit.run.d.ts +3 -0
  19. package/dist/app/features/defs.d.ts +156 -3
  20. package/dist/app/features/defs.js +12 -1
  21. package/dist/app/features/files/files.def.js +1 -0
  22. package/dist/app/features/health/health.def.js +1 -0
  23. package/dist/app/features/sandbox/sandbox.def.js +3 -0
  24. package/dist/app/features/sessions/sessions.def.d.ts +36 -0
  25. package/dist/app/features/sessions/sessions.def.js +77 -9
  26. package/dist/app/features/sessions/sessions.run.d.ts +25 -2
  27. package/dist/app/features/sessions/sessions.run.js +71 -3
  28. package/dist/app/features/settings/settings-file.d.ts +7 -0
  29. package/dist/app/features/settings/settings-file.js +19 -2
  30. package/dist/app/features/settings/settings-rows.js +9 -1
  31. package/dist/app/features/settings/settings.def.d.ts +8 -0
  32. package/dist/app/features/settings/settings.def.js +17 -0
  33. package/dist/app/features/web/web.def.d.ts +9 -0
  34. package/dist/app/features/web/web.def.js +26 -1
  35. package/dist/app/features/web/web.run.d.ts +3 -0
  36. package/dist/app/features/web/web.run.js +11 -3
  37. package/dist/app/kernel/access.d.ts +33 -0
  38. package/dist/app/kernel/access.js +44 -0
  39. package/dist/app/kernel/define.d.ts +14 -1
  40. package/dist/app/kernel/index.d.ts +1 -0
  41. package/dist/app/kernel/index.js +1 -0
  42. package/dist/app/kernel/rpc.d.ts +5 -2
  43. package/dist/app/registry.d.ts +4 -1
  44. package/dist/app/registry.js +24 -4
  45. package/dist/bin/agent-sandbox.js +7 -1
  46. package/dist/bin/chunk-IL7BXJF2.js +7 -0
  47. package/dist/bin/chunk-K4SU3MHJ.js +10432 -0
  48. package/dist/bin/chunk-VENWSGX2.js +78437 -0
  49. package/dist/bin/claude-host.js +10 -4
  50. package/dist/bin/claude-sbx.js +8 -2
  51. package/dist/bin/codex-sbx.js +8 -2
  52. package/dist/bin/gemini-sbx.js +8 -2
  53. package/dist/bin/sandbox.js +7 -2
  54. package/dist/bin/sbx-hide.js +8 -2
  55. package/dist/bin/sbx-show.js +8 -2
  56. package/dist/cli/commands/launch/prepare.js +24 -7
  57. package/dist/cli/commands/launch/running.js +4 -0
  58. package/dist/cli/commands/registry.js +2 -0
  59. package/dist/cli/commands/remote.d.ts +2 -0
  60. package/dist/cli/commands/remote.js +49 -0
  61. package/dist/cli/commands/sessions/reopen.js +3 -0
  62. package/dist/cli/commands/storage/offer.js +1 -1
  63. package/dist/cli/commands/web.js +66 -0
  64. package/dist/cli/manifest.d.ts +63 -4
  65. package/dist/cli/manifest.js +33 -4
  66. package/dist/cli/menu/io-menu.d.ts +5 -3
  67. package/dist/cli/menu/io-menu.js +12 -5
  68. package/dist/cli/menu/live.d.ts +29 -0
  69. package/dist/cli/menu/live.js +92 -21
  70. package/dist/cli/menu/menu.d.ts +2 -1
  71. package/dist/cli/menu/menu.js +16 -2
  72. package/dist/cli/menu/pages/list-page.d.ts +5 -0
  73. package/dist/cli/menu/pages/list-page.js +19 -0
  74. package/dist/cli/menu/remote-menu.d.ts +19 -0
  75. package/dist/cli/menu/remote-menu.js +108 -0
  76. package/dist/cli/menu/shell.d.ts +2 -0
  77. package/dist/cli/menu/shell.js +1 -1
  78. package/dist/cli/menu/views.js +2 -0
  79. package/dist/cli/operations/handler.js +15 -1
  80. package/dist/cli/services/accounts-service.d.ts +7 -0
  81. package/dist/cli/services/accounts-service.js +20 -0
  82. package/dist/cli/services/remote-client.d.ts +16 -0
  83. package/dist/cli/services/remote-client.js +141 -0
  84. package/dist/cli/services/sessions-service.d.ts +5 -0
  85. package/dist/cli/services/sessions-service.js +17 -1
  86. package/dist/cli/tui/app.d.ts +4 -0
  87. package/dist/cli/tui/app.js +5 -0
  88. package/dist/cli/tui/terminal.d.ts +6 -0
  89. package/dist/cli/tui/terminal.js +8 -1
  90. package/dist/cli/validate.js +8 -4
  91. package/dist/core/config/defaults.js +11 -1
  92. package/dist/core/local-config/file.js +16 -2
  93. package/dist/core/local-config/overrides.js +7 -0
  94. package/dist/core/package-info.js +1 -1
  95. package/dist/core/run/versions.js +9 -8
  96. package/dist/core/schema/config.d.ts +22 -3
  97. package/dist/core/schema/config.js +39 -2
  98. package/dist/core/schema/web.d.ts +51 -0
  99. package/dist/core/schema/web.js +46 -1
  100. package/dist/core/util/fs.d.ts +5 -0
  101. package/dist/core/util/fs.js +23 -0
  102. package/dist/core/util/index.d.ts +1 -1
  103. package/dist/core/util/index.js +1 -1
  104. package/dist/guest/daemon/daemon.js +2 -0
  105. package/dist/guest/daemon/idle-shutdown.js +2 -1
  106. package/dist/guest/daemon/sessions.d.ts +16 -2
  107. package/dist/guest/daemon/sessions.js +126 -20
  108. package/dist/guest/git/decision.js +7 -0
  109. package/dist/guest/sessions/cmdline.d.ts +14 -0
  110. package/dist/guest/sessions/cmdline.js +10 -0
  111. package/dist/guest/toolchains/setup.js +3 -0
  112. package/dist/host/audit/log.d.ts +3 -2
  113. package/dist/host/audit/log.js +3 -3
  114. package/dist/host/channel/channel.d.ts +5 -1
  115. package/dist/host/channel/channel.js +12 -0
  116. package/dist/host/guard/agent-files.js +7 -1
  117. package/dist/host/guard/commands.js +13 -1
  118. package/dist/host/guard/git-config.js +27 -7
  119. package/dist/host/guard/git-dirs.js +78 -3
  120. package/dist/host/guard/mark-of-the-web.js +3 -1
  121. package/dist/host/guard/nested-repos.js +7 -2
  122. package/dist/host/guard/store.js +1 -0
  123. package/dist/host/guard/types.d.ts +2 -0
  124. package/dist/host/launch/mappings.js +11 -1
  125. package/dist/host/launch/project-scan.js +2 -21
  126. package/dist/host/launch/stage.js +4 -0
  127. package/dist/host/life/session-ledger.js +2 -1
  128. package/dist/host/remote/access-store.d.ts +156 -0
  129. package/dist/host/remote/access-store.js +308 -0
  130. package/dist/host/remote/cert.d.ts +20 -0
  131. package/dist/host/remote/cert.js +103 -0
  132. package/dist/host/remote/door-client.d.ts +13 -0
  133. package/dist/host/remote/door-client.js +54 -0
  134. package/dist/host/remote/firewall.d.ts +44 -0
  135. package/dist/host/remote/firewall.js +118 -0
  136. package/dist/host/remote/gate.d.ts +125 -0
  137. package/dist/host/remote/gate.js +391 -0
  138. package/dist/host/remote/index.d.ts +8 -0
  139. package/dist/host/remote/index.js +10 -0
  140. package/dist/host/remote/lan.d.ts +24 -0
  141. package/dist/host/remote/lan.js +88 -0
  142. package/dist/host/remote/tls-store.d.ts +22 -0
  143. package/dist/host/remote/tls-store.js +63 -0
  144. package/dist/host/remote/windows-helper.d.ts +67 -0
  145. package/dist/host/remote/windows-helper.js +129 -0
  146. package/dist/host/sandbox/platform.d.ts +2 -0
  147. package/dist/host/sandbox/platform.js +19 -4
  148. package/dist/host/storage/contained/state.d.ts +3 -2
  149. package/dist/host/storage/contained/state.js +5 -2
  150. package/dist/host/web/bridge.d.ts +5 -1
  151. package/dist/host/web/bridge.js +6 -2
  152. package/dist/host/web/browser.js +1 -1
  153. package/dist/host/web/control.d.ts +4 -1
  154. package/dist/host/web/control.js +28 -4
  155. package/dist/host/web/rpc.d.ts +16 -2
  156. package/dist/host/web/rpc.js +37 -4
  157. package/dist/host/web/runner.d.ts +4 -0
  158. package/dist/host/web/runner.js +12 -0
  159. package/dist/host/web/server.d.ts +18 -2
  160. package/dist/host/web/server.js +97 -24
  161. package/dist/host/web/state.d.ts +5 -0
  162. package/dist/host/web/state.js +8 -0
  163. package/dist/runtime/agent.js +74 -3
  164. package/dist/runtime/daemon.js +205 -24
  165. package/dist/runtime/db.js +74 -3
  166. package/dist/runtime/gitguard.js +6 -0
  167. package/dist/runtime/main.js +77 -3
  168. package/dist/runtime/netproxy.js +74 -3
  169. package/dist/runtime/view.js +76 -3
  170. package/dist/selftest/app.test.js +41 -6
  171. package/dist/selftest/channel.test.js +16 -0
  172. package/dist/selftest/cmdline.test.js +16 -0
  173. package/dist/selftest/git-access.test.js +8 -0
  174. package/dist/selftest/hostile-input.test.js +12 -1
  175. package/dist/selftest/index.js +2 -0
  176. package/dist/selftest/layout.test.js +10 -1
  177. package/dist/selftest/live-daemon.test.js +25 -0
  178. package/dist/selftest/local-config.test.js +30 -0
  179. package/dist/selftest/menu-perf.test.js +198 -12
  180. package/dist/selftest/menu.test.js +4 -0
  181. package/dist/selftest/remote.test.d.ts +2 -0
  182. package/dist/selftest/remote.test.js +536 -0
  183. package/dist/selftest/repo-guard.test.js +56 -2
  184. package/dist/selftest/resume.test.js +2 -1
  185. package/dist/selftest/sharing.test.js +9 -2
  186. package/dist/selftest/support/fixtures.d.ts +13 -0
  187. package/dist/selftest/support/web-preview.js +63 -0
  188. package/dist/selftest/web.test.js +2 -0
  189. package/dist/shared/channel/schema.d.ts +23 -0
  190. package/dist/shared/channel/schema.js +8 -0
  191. package/dist/shared/pty/protocol.d.ts +2 -0
  192. package/dist/shared/pty/protocol.js +2 -0
  193. package/dist/web/index.html +1 -1
  194. package/dist/web/main-NBQ3LF4E.js +221 -0
  195. package/native/csharp/HcsHost/AssemblyInfo.cs +3 -3
  196. package/native/csharp/HostTools/AssemblyInfo.cs +3 -3
  197. package/native/csharp/HostTools/Program.cs +17 -1
  198. package/native/csharp/HostTools/WebHelper.cs +499 -0
  199. package/native/scripts/get-network-profile.ps1 +19 -0
  200. package/native/scripts/set-folder-access.ps1 +11 -0
  201. package/native/scripts/set-web-firewall.ps1 +103 -0
  202. package/package.json +1 -1
  203. package/sandbox/csharp/PtyHost.cs +20 -0
  204. package/schemas/config.schema.json +65 -0
  205. package/schemas/sandbox-config.schema.json +0 -18
  206. package/dist/web/main-UD4QCXZR.js +0 -219
@@ -11,6 +11,7 @@ export type { SessionRow, SessionsList } from './sessions/sessions.def.js';
11
11
  export type { SettingRow, SettingsList } from './settings/settings.def.js';
12
12
  export type { VpnStatus } from './vpn/vpn.def.js';
13
13
  export type { GithubStatus } from './github/github.def.js';
14
+ export type { AccessStatus } from './access/access.def.js';
14
15
  export declare const OPERATIONS: readonly [OperationDef<import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
15
16
  available: import("zod").ZodBoolean;
16
17
  stopped: import("zod").ZodNumber;
@@ -29,6 +30,22 @@ export declare const OPERATIONS: readonly [OperationDef<import("zod").ZodObject<
29
30
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
30
31
  message: import("zod").ZodString;
31
32
  }, import("zod/v4/core").$strip>, "sessions.restart">, OperationDef<import("zod").ZodObject<{
33
+ project: import("zod").ZodOptional<import("zod").ZodString>;
34
+ shell: import("zod").ZodDefault<import("zod").ZodEnum<{
35
+ pwsh: "pwsh";
36
+ auto: "auto";
37
+ powershell: "powershell";
38
+ cmd: "cmd";
39
+ }>>;
40
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
41
+ session: import("zod").ZodString;
42
+ shell: import("zod").ZodString;
43
+ message: import("zod").ZodString;
44
+ }, import("zod/v4/core").$strip>, "sessions.shell">, OperationDef<import("zod").ZodObject<{
45
+ session: import("zod").ZodString;
46
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
47
+ message: import("zod").ZodString;
48
+ }, import("zod/v4/core").$strip>, "sessions.close">, OperationDef<import("zod").ZodObject<{
32
49
  agent: import("zod").ZodString;
33
50
  project: import("zod").ZodOptional<import("zod").ZodString>;
34
51
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
@@ -94,6 +111,7 @@ export declare const OPERATIONS: readonly [OperationDef<import("zod").ZodObject<
94
111
  }, import("zod/v4/core").$strip>, "accounts.use">, OperationDef<import("zod").ZodObject<{
95
112
  agent: import("zod").ZodDefault<import("zod").ZodString>;
96
113
  name: import("zod").ZodOptional<import("zod").ZodString>;
114
+ noRestart: import("zod").ZodDefault<import("zod").ZodBoolean>;
97
115
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
98
116
  message: import("zod").ZodString;
99
117
  }, import("zod/v4/core").$strip>, "accounts.default">, OperationDef<import("zod").ZodObject<{
@@ -257,7 +275,32 @@ export declare const OPERATIONS: readonly [OperationDef<import("zod").ZodObject<
257
275
  }, import("zod/v4/core").$strip>, "github.login">, OperationDef<import("zod").ZodObject<{}, import("zod/v4/core").$strict>, import("zod").ZodObject<{
258
276
  deleted: import("zod").ZodBoolean;
259
277
  message: import("zod").ZodString;
260
- }, import("zod/v4/core").$strip>, "github.logout">];
278
+ }, import("zod/v4/core").$strip>, "github.logout">, OperationDef<import("zod").ZodObject<{
279
+ role: import("zod").ZodDefault<import("zod").ZodEnum<{
280
+ view: "view";
281
+ control: "control";
282
+ }>>;
283
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
284
+ code: import("zod").ZodString;
285
+ expiresAt: import("zod").ZodString;
286
+ role: import("zod").ZodEnum<{
287
+ view: "view";
288
+ control: "control";
289
+ }>;
290
+ address: import("zod").ZodNullable<import("zod").ZodString>;
291
+ fingerprint: import("zod").ZodNullable<import("zod").ZodString>;
292
+ }, import("zod/v4/core").$strip>, "access.allowDevice">, OperationDef<import("zod").ZodObject<{
293
+ id: import("zod").ZodString;
294
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
295
+ message: import("zod").ZodString;
296
+ }, import("zod/v4/core").$strip>, "access.revoke">, OperationDef<import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
297
+ message: import("zod").ZodString;
298
+ }, import("zod/v4/core").$strip>, "access.revokeAll">, OperationDef<import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
299
+ message: import("zod").ZodString;
300
+ address: import("zod").ZodString;
301
+ }, import("zod/v4/core").$strip>, "access.lanOn">, OperationDef<import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
302
+ message: import("zod").ZodString;
303
+ }, import("zod/v4/core").$strip>, "access.lanOff">];
261
304
  export declare const QUERIES: readonly [QueryDef<import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
262
305
  shared: import("zod").ZodOptional<import("zod").ZodObject<{
263
306
  line: import("zod").ZodString;
@@ -326,6 +369,10 @@ export declare const QUERIES: readonly [QueryDef<import("zod").ZodObject<{}, imp
326
369
  id: import("zod").ZodString;
327
370
  launchId: import("zod").ZodString;
328
371
  harness: import("zod").ZodString;
372
+ kind: import("zod").ZodOptional<import("zod").ZodEnum<{
373
+ shell: "shell";
374
+ agent: "agent";
375
+ }>>;
329
376
  cwd: import("zod").ZodString;
330
377
  project: import("zod").ZodOptional<import("zod").ZodString>;
331
378
  phase: import("zod").ZodEnum<{
@@ -623,6 +670,7 @@ export declare const QUERIES: readonly [QueryDef<import("zod").ZodObject<{}, imp
623
670
  days: import("zod").ZodDefault<import("zod").ZodNumber>;
624
671
  kind: import("zod").ZodDefault<import("zod").ZodEnum<{
625
672
  file: "file";
673
+ remote: "remote";
626
674
  all: "all";
627
675
  session: "session";
628
676
  commit: "commit";
@@ -644,6 +692,7 @@ export declare const QUERIES: readonly [QueryDef<import("zod").ZodObject<{}, imp
644
692
  days: import("zod").ZodNumber;
645
693
  kind: import("zod").ZodEnum<{
646
694
  file: "file";
695
+ remote: "remote";
647
696
  all: "all";
648
697
  session: "session";
649
698
  commit: "commit";
@@ -660,6 +709,7 @@ export declare const QUERIES: readonly [QueryDef<import("zod").ZodObject<{}, imp
660
709
  time: import("zod").ZodString;
661
710
  kind: import("zod").ZodEnum<{
662
711
  file: "file";
712
+ remote: "remote";
663
713
  session: "session";
664
714
  note: "note";
665
715
  commit: "commit";
@@ -799,6 +849,9 @@ export declare const QUERIES: readonly [QueryDef<import("zod").ZodObject<{}, imp
799
849
  running: import("zod").ZodBoolean;
800
850
  port: import("zod").ZodNullable<import("zod").ZodNumber>;
801
851
  address: import("zod").ZodNullable<import("zod").ZodString>;
852
+ lanAddress: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
853
+ lanFingerprint: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
854
+ lanProblem: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
802
855
  }, import("zod/v4/core").$strip>, "web.status">, QueryDef<import("zod").ZodObject<{
803
856
  tunnel: import("zod").ZodDefault<import("zod").ZodBoolean>;
804
857
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
@@ -845,7 +898,51 @@ export declare const QUERIES: readonly [QueryDef<import("zod").ZodObject<{}, imp
845
898
  classic: "classic";
846
899
  }>>;
847
900
  savedAt: import("zod").ZodNullable<import("zod").ZodString>;
848
- }, import("zod/v4/core").$strip>, "github.status">];
901
+ }, import("zod/v4/core").$strip>, "github.status">, QueryDef<import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
902
+ lan: import("zod").ZodObject<{
903
+ enabled: import("zod").ZodBoolean;
904
+ running: import("zod").ZodBoolean;
905
+ address: import("zod").ZodNullable<import("zod").ZodString>;
906
+ fingerprint: import("zod").ZodNullable<import("zod").ZodString>;
907
+ problem: import("zod").ZodNullable<import("zod").ZodString>;
908
+ network: import("zod").ZodNullable<import("zod").ZodString>;
909
+ }, import("zod/v4/core").$strip>;
910
+ windowsSignIn: import("zod").ZodBoolean;
911
+ users: import("zod").ZodArray<import("zod").ZodObject<{
912
+ name: import("zod").ZodString;
913
+ role: import("zod").ZodEnum<{
914
+ view: "view";
915
+ control: "control";
916
+ }>;
917
+ }, import("zod/v4/core").$strip>>;
918
+ rememberDays: import("zod").ZodNumber;
919
+ devices: import("zod").ZodArray<import("zod").ZodObject<{
920
+ id: import("zod").ZodString;
921
+ name: import("zod").ZodString;
922
+ role: import("zod").ZodEnum<{
923
+ view: "view";
924
+ control: "control";
925
+ }>;
926
+ address: import("zod").ZodString;
927
+ createdAt: import("zod").ZodString;
928
+ expiresAt: import("zod").ZodString;
929
+ lastSeen: import("zod").ZodNullable<import("zod").ZodString>;
930
+ }, import("zod/v4/core").$strip>>;
931
+ windows: import("zod").ZodArray<import("zod").ZodObject<{
932
+ id: import("zod").ZodString;
933
+ user: import("zod").ZodString;
934
+ createdAt: import("zod").ZodString;
935
+ expiresAt: import("zod").ZodString;
936
+ }, import("zod/v4/core").$strip>>;
937
+ pending: import("zod").ZodNullable<import("zod").ZodObject<{
938
+ role: import("zod").ZodEnum<{
939
+ view: "view";
940
+ control: "control";
941
+ }>;
942
+ expiresAt: import("zod").ZodString;
943
+ }, import("zod/v4/core").$strip>>;
944
+ codeVoided: import("zod").ZodBoolean;
945
+ }, import("zod/v4/core").$strip>, "access.status">];
849
946
  export declare const VIEWS: readonly [import("../kernel/define.js").ViewDef<{
850
947
  status: QueryDef<import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
851
948
  shared: import("zod").ZodOptional<import("zod").ZodObject<{
@@ -917,6 +1014,10 @@ export declare const VIEWS: readonly [import("../kernel/define.js").ViewDef<{
917
1014
  id: import("zod").ZodString;
918
1015
  launchId: import("zod").ZodString;
919
1016
  harness: import("zod").ZodString;
1017
+ kind: import("zod").ZodOptional<import("zod").ZodEnum<{
1018
+ shell: "shell";
1019
+ agent: "agent";
1020
+ }>>;
920
1021
  cwd: import("zod").ZodString;
921
1022
  project: import("zod").ZodOptional<import("zod").ZodString>;
922
1023
  phase: import("zod").ZodEnum<{
@@ -1216,6 +1317,7 @@ export declare const VIEWS: readonly [import("../kernel/define.js").ViewDef<{
1216
1317
  days: import("zod").ZodDefault<import("zod").ZodNumber>;
1217
1318
  kind: import("zod").ZodDefault<import("zod").ZodEnum<{
1218
1319
  file: "file";
1320
+ remote: "remote";
1219
1321
  all: "all";
1220
1322
  session: "session";
1221
1323
  commit: "commit";
@@ -1237,6 +1339,7 @@ export declare const VIEWS: readonly [import("../kernel/define.js").ViewDef<{
1237
1339
  days: import("zod").ZodNumber;
1238
1340
  kind: import("zod").ZodEnum<{
1239
1341
  file: "file";
1342
+ remote: "remote";
1240
1343
  all: "all";
1241
1344
  session: "session";
1242
1345
  commit: "commit";
@@ -1253,6 +1356,7 @@ export declare const VIEWS: readonly [import("../kernel/define.js").ViewDef<{
1253
1356
  time: import("zod").ZodString;
1254
1357
  kind: import("zod").ZodEnum<{
1255
1358
  file: "file";
1359
+ remote: "remote";
1256
1360
  session: "session";
1257
1361
  note: "note";
1258
1362
  commit: "commit";
@@ -1374,6 +1478,9 @@ export declare const VIEWS: readonly [import("../kernel/define.js").ViewDef<{
1374
1478
  running: import("zod").ZodBoolean;
1375
1479
  port: import("zod").ZodNullable<import("zod").ZodNumber>;
1376
1480
  address: import("zod").ZodNullable<import("zod").ZodString>;
1481
+ lanAddress: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1482
+ lanFingerprint: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1483
+ lanProblem: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1377
1484
  }, import("zod/v4/core").$strip>, "web.status">;
1378
1485
  }, Record<string, never>, "web">, import("../kernel/define.js").ViewDef<{
1379
1486
  status: QueryDef<import("zod").ZodObject<{
@@ -1425,7 +1532,53 @@ export declare const VIEWS: readonly [import("../kernel/define.js").ViewDef<{
1425
1532
  }>>;
1426
1533
  savedAt: import("zod").ZodNullable<import("zod").ZodString>;
1427
1534
  }, import("zod/v4/core").$strip>, "github.status">;
1428
- }, Record<string, never>, "github">];
1535
+ }, Record<string, never>, "github">, import("../kernel/define.js").ViewDef<{
1536
+ status: QueryDef<import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
1537
+ lan: import("zod").ZodObject<{
1538
+ enabled: import("zod").ZodBoolean;
1539
+ running: import("zod").ZodBoolean;
1540
+ address: import("zod").ZodNullable<import("zod").ZodString>;
1541
+ fingerprint: import("zod").ZodNullable<import("zod").ZodString>;
1542
+ problem: import("zod").ZodNullable<import("zod").ZodString>;
1543
+ network: import("zod").ZodNullable<import("zod").ZodString>;
1544
+ }, import("zod/v4/core").$strip>;
1545
+ windowsSignIn: import("zod").ZodBoolean;
1546
+ users: import("zod").ZodArray<import("zod").ZodObject<{
1547
+ name: import("zod").ZodString;
1548
+ role: import("zod").ZodEnum<{
1549
+ view: "view";
1550
+ control: "control";
1551
+ }>;
1552
+ }, import("zod/v4/core").$strip>>;
1553
+ rememberDays: import("zod").ZodNumber;
1554
+ devices: import("zod").ZodArray<import("zod").ZodObject<{
1555
+ id: import("zod").ZodString;
1556
+ name: import("zod").ZodString;
1557
+ role: import("zod").ZodEnum<{
1558
+ view: "view";
1559
+ control: "control";
1560
+ }>;
1561
+ address: import("zod").ZodString;
1562
+ createdAt: import("zod").ZodString;
1563
+ expiresAt: import("zod").ZodString;
1564
+ lastSeen: import("zod").ZodNullable<import("zod").ZodString>;
1565
+ }, import("zod/v4/core").$strip>>;
1566
+ windows: import("zod").ZodArray<import("zod").ZodObject<{
1567
+ id: import("zod").ZodString;
1568
+ user: import("zod").ZodString;
1569
+ createdAt: import("zod").ZodString;
1570
+ expiresAt: import("zod").ZodString;
1571
+ }, import("zod/v4/core").$strip>>;
1572
+ pending: import("zod").ZodNullable<import("zod").ZodObject<{
1573
+ role: import("zod").ZodEnum<{
1574
+ view: "view";
1575
+ control: "control";
1576
+ }>;
1577
+ expiresAt: import("zod").ZodString;
1578
+ }, import("zod/v4/core").$strip>>;
1579
+ codeVoided: import("zod").ZodBoolean;
1580
+ }, import("zod/v4/core").$strip>, "access.status">;
1581
+ }, Record<string, never>, "access">];
1429
1582
  export type Operation = (typeof OPERATIONS)[number];
1430
1583
  export type Query = (typeof QUERIES)[number];
1431
1584
  export type View = (typeof VIEWS)[number];
@@ -10,18 +10,21 @@ import { hideWindow, sandboxStatus, sandboxView, showWindow, stopSandbox } from
10
10
  import { addProject, allProjects, chooseProjects, excludeProject, includeProject, listProjects, projectRoots, projectsView, removeProject, } from './projects/projects.def.js';
11
11
  import { listLogs, logsView, tailLog } from './logs/logs.def.js';
12
12
  import { auditView, listAudit } from './audit/audit.def.js';
13
- import { listSessions, restartSessions, sessionsView } from './sessions/sessions.def.js';
13
+ import { closeSession, listSessions, restartSessions, sessionsView, startShell } from './sessions/sessions.def.js';
14
14
  import { vpnLogin, vpnLogout, vpnStatus, vpnView } from './vpn/vpn.def.js';
15
15
  import { githubLogin, githubLogout, githubStatus, githubView } from './github/github.def.js';
16
16
  import { exportConfig, getSetting, importConfig, listSettings, resetSetting, setSetting, settingsView, } from './settings/settings.def.js';
17
17
  import { migrateSettings, runUpdate, updatesStatus, updatesView } from './updates/updates.def.js';
18
18
  import { openWeb, startWeb, stopWeb, webStatus, webView } from './web/web.def.js';
19
+ import { accessStatus, accessView, allowDevice, lanOff, lanOn, revokeAccess, revokeAllAccess, } from './access/access.def.js';
19
20
  export const OPERATIONS = [
20
21
  cleanEngine,
21
22
  showWindow,
22
23
  hideWindow,
23
24
  stopSandbox,
24
25
  restartSessions,
26
+ startShell,
27
+ closeSession,
25
28
  startAgent,
26
29
  addAgent,
27
30
  makeDefaultAgent,
@@ -64,6 +67,11 @@ export const OPERATIONS = [
64
67
  vpnLogout,
65
68
  githubLogin,
66
69
  githubLogout,
70
+ allowDevice,
71
+ revokeAccess,
72
+ revokeAllAccess,
73
+ lanOn,
74
+ lanOff,
67
75
  ];
68
76
  export const QUERIES = [
69
77
  sandboxStatus,
@@ -89,6 +97,7 @@ export const QUERIES = [
89
97
  webStatus,
90
98
  vpnStatus,
91
99
  githubStatus,
100
+ accessStatus,
92
101
  ];
93
102
  export const VIEWS = [
94
103
  sandboxView,
@@ -108,6 +117,7 @@ export const VIEWS = [
108
117
  webView,
109
118
  vpnView,
110
119
  githubView,
120
+ accessView,
111
121
  ];
112
122
  export const DEFINITIONS = [...OPERATIONS, ...QUERIES];
113
123
  export function definitionById(id) {
@@ -155,6 +165,7 @@ export const NAV = [
155
165
  ],
156
166
  },
157
167
  { label: 'Accounts', view: 'accounts' },
168
+ { label: 'Remote access', view: 'access' },
158
169
  {
159
170
  label: 'Maintenance',
160
171
  children: [
@@ -22,6 +22,7 @@ export const FolderListingSchema = z.object({
22
22
  });
23
23
  export const browseFolder = defineQuery({
24
24
  id: 'files.browse',
25
+ access: 'owner',
25
26
  title: 'Browse folders',
26
27
  summary: 'list what is in a folder of this PC, to pick a folder or a file',
27
28
  input: z.object({
@@ -131,6 +131,7 @@ export const lastHealth = defineQuery({
131
131
  });
132
132
  export const checkHealth = defineOperation({
133
133
  id: 'health.check',
134
+ access: 'control',
134
135
  title: 'Check this PC',
135
136
  summary: 'check this PC, the install, your settings and the sandbox (changes nothing)',
136
137
  input: z.object({ harness: z.string().optional().describe('agent to check') }),
@@ -91,6 +91,7 @@ export const sandboxStatus = defineQuery({
91
91
  });
92
92
  export const showWindow = defineOperation({
93
93
  id: 'sandbox.showWindow',
94
+ access: 'control',
94
95
  title: 'Show the window',
95
96
  summary: 'show the sandbox window',
96
97
  input: z.object({}),
@@ -100,6 +101,7 @@ export const showWindow = defineOperation({
100
101
  });
101
102
  export const hideWindow = defineOperation({
102
103
  id: 'sandbox.hideWindow',
104
+ access: 'control',
103
105
  title: 'Hide the window',
104
106
  summary: 'hide the sandbox window (it keeps running)',
105
107
  input: z.object({}),
@@ -109,6 +111,7 @@ export const hideWindow = defineOperation({
109
111
  });
110
112
  export const stopSandbox = defineOperation({
111
113
  id: 'sandbox.stop',
114
+ access: 'control',
112
115
  title: 'Stop the sandbox…',
113
116
  summary: "shut the sandbox down (every project's sessions end)",
114
117
  input: z.object({}),
@@ -5,6 +5,10 @@ export declare const SessionRowSchema: z.ZodObject<{
5
5
  id: z.ZodString;
6
6
  launchId: z.ZodString;
7
7
  harness: z.ZodString;
8
+ kind: z.ZodOptional<z.ZodEnum<{
9
+ shell: "shell";
10
+ agent: "agent";
11
+ }>>;
8
12
  cwd: z.ZodString;
9
13
  project: z.ZodOptional<z.ZodString>;
10
14
  phase: z.ZodEnum<{
@@ -36,6 +40,10 @@ export declare const SessionsListSchema: z.ZodObject<{
36
40
  id: z.ZodString;
37
41
  launchId: z.ZodString;
38
42
  harness: z.ZodString;
43
+ kind: z.ZodOptional<z.ZodEnum<{
44
+ shell: "shell";
45
+ agent: "agent";
46
+ }>>;
39
47
  cwd: z.ZodString;
40
48
  project: z.ZodOptional<z.ZodString>;
41
49
  phase: z.ZodEnum<{
@@ -74,6 +82,10 @@ export declare const listSessions: import("../../kernel/define.js").QueryDef<z.Z
74
82
  id: z.ZodString;
75
83
  launchId: z.ZodString;
76
84
  harness: z.ZodString;
85
+ kind: z.ZodOptional<z.ZodEnum<{
86
+ shell: "shell";
87
+ agent: "agent";
88
+ }>>;
77
89
  cwd: z.ZodString;
78
90
  project: z.ZodOptional<z.ZodString>;
79
91
  phase: z.ZodEnum<{
@@ -102,6 +114,26 @@ export declare const restartSessions: import("../../kernel/define.js").Operation
102
114
  }, z.core.$strip>, z.ZodObject<{
103
115
  message: z.ZodString;
104
116
  }, z.core.$strip>, "sessions.restart">;
117
+ /** The shells a shell session can run; auto: PowerShell 7 when the sandbox has it, else Windows PowerShell. */
118
+ export declare const SHELL_CHOICES: readonly ["auto", "pwsh", "powershell", "cmd"];
119
+ export declare const startShell: import("../../kernel/define.js").OperationDef<z.ZodObject<{
120
+ project: z.ZodOptional<z.ZodString>;
121
+ shell: z.ZodDefault<z.ZodEnum<{
122
+ pwsh: "pwsh";
123
+ auto: "auto";
124
+ powershell: "powershell";
125
+ cmd: "cmd";
126
+ }>>;
127
+ }, z.core.$strip>, z.ZodObject<{
128
+ session: z.ZodString;
129
+ shell: z.ZodString;
130
+ message: z.ZodString;
131
+ }, z.core.$strip>, "sessions.shell">;
132
+ export declare const closeSession: import("../../kernel/define.js").OperationDef<z.ZodObject<{
133
+ session: z.ZodString;
134
+ }, z.core.$strip>, z.ZodObject<{
135
+ message: z.ZodString;
136
+ }, z.core.$strip>, "sessions.close">;
105
137
  /** The sessions page: one list (a table on the command line), this folder's project first. */
106
138
  export declare function sessionsPage(o: SessionsList): Page;
107
139
  export declare const sessionsView: import("../../kernel/define.js").ViewDef<{
@@ -116,6 +148,10 @@ export declare const sessionsView: import("../../kernel/define.js").ViewDef<{
116
148
  id: z.ZodString;
117
149
  launchId: z.ZodString;
118
150
  harness: z.ZodString;
151
+ kind: z.ZodOptional<z.ZodEnum<{
152
+ shell: "shell";
153
+ agent: "agent";
154
+ }>>;
119
155
  cwd: z.ZodString;
120
156
  project: z.ZodOptional<z.ZodString>;
121
157
  phase: z.ZodEnum<{
@@ -1,6 +1,6 @@
1
- // The agent sessions of the running sandbox: the list (live) and restarting the agents. Pure: schemas, labels and the
2
- // view; sessions.run.ts does the work. A running session links to its terminal (attach in the menu, the terminal page
3
- // in the web UI).
1
+ // The sessions of the running sandbox, agents and plain shells: the list (live), restarting the agents, opening a shell
2
+ // and closing a session. Pure: schemas, labels and the view; sessions.run.ts does the work. A running session links to
3
+ // its terminal (attach in the menu and on the command line, the terminal page in the web UI).
4
4
  import { z } from 'zod';
5
5
  import { action, ago, defineOperation, defineQuery, defineView, link, } from '../../kernel/index.js';
6
6
  const ViewersSchema = z.object({ viewers: z.number(), remote: z.number() });
@@ -8,7 +8,9 @@ const ViewersSchema = z.object({ viewers: z.number(), remote: z.number() });
8
8
  export const SessionRowSchema = z.object({
9
9
  id: z.string().describe('The session'),
10
10
  launchId: z.string(),
11
- harness: z.string().describe('The agent'),
11
+ harness: z.string().describe('The agent, or the shell (pwsh, powershell, cmd)'),
12
+ /** A plain shell rather than an agent (absent: an agent). */
13
+ kind: z.enum(['agent', 'shell']).optional(),
12
14
  cwd: z.string().describe('Its folder in the sandbox'),
13
15
  project: z.string().optional(),
14
16
  phase: z.enum(['starting', 'running', 'exited', 'failed']).describe('What it is doing'),
@@ -50,7 +52,7 @@ export function orderedSessions(list) {
50
52
  export const listSessions = defineQuery({
51
53
  id: 'sessions.list',
52
54
  title: 'Sessions',
53
- summary: 'list agent sessions and who is attached',
55
+ summary: 'list sessions (agents and shells) and who is attached',
54
56
  input: z.object({ wide: z.boolean().default(false).describe("also show each session's folder") }),
55
57
  output: SessionsListSchema,
56
58
  live: { everyMs: 2500 },
@@ -65,6 +67,7 @@ export const listSessions = defineQuery({
65
67
  });
66
68
  export const restartSessions = defineOperation({
67
69
  id: 'sessions.restart',
70
+ access: 'control',
68
71
  title: 'Restart agents',
69
72
  summary: "restart this project's running agents in place; they resume their conversation",
70
73
  input: z.object({
@@ -82,19 +85,71 @@ export const restartSessions = defineOperation({
82
85
  },
83
86
  },
84
87
  });
88
+ /** Agent and project names as the web UI has always accepted them. */
89
+ const NameText = z.string().regex(/^[A-Za-z0-9_.-]{1,64}$/);
90
+ const SessionId = z.string().regex(/^[A-Za-z0-9_-]{1,64}$/);
91
+ /** The shells a shell session can run; auto: PowerShell 7 when the sandbox has it, else Windows PowerShell. */
92
+ export const SHELL_CHOICES = ['auto', 'pwsh', 'powershell', 'cmd'];
93
+ /** The session the operation opened, as a link to its terminal. */
94
+ function openedSession(o) {
95
+ return { kind: 'terminal', session: o.session };
96
+ }
97
+ export const startShell = defineOperation({
98
+ id: 'sessions.shell',
99
+ title: 'New shell',
100
+ summary: 'open PowerShell or cmd in a project of the running sandbox, as a session you can attach to',
101
+ input: z.object({
102
+ project: NameText.optional().describe("The project of the running sandbox (default: this folder's, else asked)"),
103
+ shell: z
104
+ .enum(SHELL_CHOICES)
105
+ .default('auto')
106
+ .describe('The shell: pwsh, powershell or cmd (default: pwsh if present)'),
107
+ }),
108
+ output: z.object({
109
+ session: z.string().describe('The new session'),
110
+ shell: z.string().describe('The shell it runs'),
111
+ message: z.string().describe('What happened'),
112
+ }),
113
+ // A shell runs anything as you: someone you let in remotely may type into one you opened, never open one.
114
+ access: 'owner',
115
+ text: (o) => o.message,
116
+ opens: openedSession,
117
+ cli: {
118
+ name: 'shell',
119
+ group: 'Sessions',
120
+ positional: ['project'],
121
+ flags: { shell: { flag: '--shell', value: 'name', choices: ['pwsh', 'powershell', 'cmd'] } },
122
+ json: true,
123
+ examples: [
124
+ "sandbox shell PowerShell in this folder's project, in this terminal (Ctrl+] detaches)",
125
+ 'sandbox shell api --shell cmd cmd in the project api',
126
+ ],
127
+ },
128
+ });
129
+ export const closeSession = defineOperation({
130
+ id: 'sessions.close',
131
+ title: 'Close',
132
+ summary: 'end a running session (an agent or a shell) and every program it started',
133
+ input: z.object({ session: SessionId.describe('The session to close') }),
134
+ output: z.object({ message: z.string().describe("The sandbox's answer") }),
135
+ access: 'control',
136
+ danger: true,
137
+ text: (o) => o.message,
138
+ cli: { name: 'close', group: 'Sessions', positional: ['session'], examples: ['sandbox close 4f2c9a'] },
139
+ });
85
140
  function sessionItem(s, wide) {
86
141
  const state = s.phase + (s.exitCode !== undefined ? ' (' + s.exitCode + ')' : '');
87
142
  const running = s.phase === 'running';
88
143
  return {
89
144
  id: s.id,
90
- label: s.harness + ' ' + (s.projectName ?? '-'),
145
+ label: (s.kind === 'shell' ? s.harness + ' (shell)' : s.harness) + ' ' + (s.projectName ?? '-'),
91
146
  hint: state + ' ' + ago(s.startedAt),
92
147
  badges: [{ text: s.phase, tone: running ? 'ok' : s.phase === 'failed' ? 'danger' : 'muted' }],
93
148
  group: s.here ? "This folder's project" : 'Other sessions',
94
149
  marked: s.here,
95
150
  icon: s.harness,
96
151
  description: running
97
- ? "Opens this session's terminal (in a terminal, Ctrl+] detaches; the session keeps running)."
152
+ ? "Opens this session's terminal (in a terminal, Ctrl+] detaches; the session keeps running). x closes it."
98
153
  : undefined,
99
154
  details: ['Session ' + s.id, 'Folder ' + s.cwd, 'Attached ' + viewerText(s.viewers)],
100
155
  cells: {
@@ -108,6 +163,9 @@ function sessionItem(s, wide) {
108
163
  started: ago(s.startedAt),
109
164
  },
110
165
  ...(running && s.canOpen ? { primary: link({ kind: 'terminal', session: s.id }, 'Open', { verb: 'attach' }) } : {}),
166
+ ...(running
167
+ ? { actions: [action(closeSession, { session: s.id }, { key: 'x', verb: 'close', importance: 1 })] }
168
+ : {}),
111
169
  ...(running ? {} : { disabled: 'This session has ended.' }),
112
170
  ...(running && !s.canOpen ? { disabled: 'Not reachable from this PC.' } : {}),
113
171
  };
@@ -150,6 +208,16 @@ export function sessionsPage(o) {
150
208
  ],
151
209
  actions: [
152
210
  ...(o.sandboxRunning ? [{ ...start, label: 'New session', key: 'n', verb: 'new session', importance: 1 }] : []),
211
+ ...(o.sandboxRunning
212
+ ? [
213
+ action(startShell, { shell: 'auto' }, {
214
+ key: 's',
215
+ verb: 'new shell',
216
+ importance: 1,
217
+ description: 'Opens PowerShell in a project of the sandbox, as a session like the agents.',
218
+ }),
219
+ ]
220
+ : []),
153
221
  ...(sessions.length
154
222
  ? [action(restartSessions, { all: false }, { key: 'r', verb: 'restart agents', importance: 1 })]
155
223
  : []),
@@ -172,8 +240,8 @@ export function sessionsPage(o) {
172
240
  export const sessionsView = defineView({
173
241
  id: 'sessions',
174
242
  title: 'Sessions',
175
- summary: 'The agent sessions of the running sandbox: open one, restart the agents.',
243
+ summary: 'The sessions of the running sandbox: open one, restart the agents, open a shell, close one.',
176
244
  queries: { sessions: listSessions },
177
- operations: [restartSessions],
245
+ operations: [restartSessions, startShell, closeSession],
178
246
  build: ({ sessions }) => sessionsPage(sessions),
179
247
  });
@@ -1,3 +1,4 @@
1
+ import { type Context } from '../../../cli/commands/context.js';
1
2
  export declare const listSessionsRun: import("../../kernel/define.js").Implementation<import("../../kernel/define.js").QueryDef<import("zod").ZodObject<{
2
3
  wide: import("zod").ZodDefault<import("zod").ZodBoolean>;
3
4
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
@@ -9,6 +10,10 @@ export declare const listSessionsRun: import("../../kernel/define.js").Implement
9
10
  id: import("zod").ZodString;
10
11
  launchId: import("zod").ZodString;
11
12
  harness: import("zod").ZodString;
13
+ kind: import("zod").ZodOptional<import("zod").ZodEnum<{
14
+ shell: "shell";
15
+ agent: "agent";
16
+ }>>;
12
17
  cwd: import("zod").ZodString;
13
18
  project: import("zod").ZodOptional<import("zod").ZodString>;
14
19
  phase: import("zod").ZodEnum<{
@@ -30,10 +35,28 @@ export declare const listSessionsRun: import("../../kernel/define.js").Implement
30
35
  }, import("zod/v4/core").$strip>>>;
31
36
  canOpen: import("zod").ZodBoolean;
32
37
  }, import("zod/v4/core").$strip>>;
33
- }, import("zod/v4/core").$strip>, "sessions.list">, import("../../../cli/commands/context.js").Context>;
38
+ }, import("zod/v4/core").$strip>, "sessions.list">, Context>;
34
39
  export declare const restartSessionsRun: import("../../kernel/define.js").Implementation<import("../../kernel/define.js").OperationDef<import("zod").ZodObject<{
35
40
  harness: import("zod").ZodOptional<import("zod").ZodString>;
36
41
  all: import("zod").ZodDefault<import("zod").ZodBoolean>;
37
42
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
38
43
  message: import("zod").ZodString;
39
- }, import("zod/v4/core").$strip>, "sessions.restart">, import("../../../cli/commands/context.js").Context>;
44
+ }, import("zod/v4/core").$strip>, "sessions.restart">, Context>;
45
+ export declare const startShellRun: import("../../kernel/define.js").Implementation<import("../../kernel/define.js").OperationDef<import("zod").ZodObject<{
46
+ project: import("zod").ZodOptional<import("zod").ZodString>;
47
+ shell: import("zod").ZodDefault<import("zod").ZodEnum<{
48
+ pwsh: "pwsh";
49
+ auto: "auto";
50
+ powershell: "powershell";
51
+ cmd: "cmd";
52
+ }>>;
53
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
54
+ session: import("zod").ZodString;
55
+ shell: import("zod").ZodString;
56
+ message: import("zod").ZodString;
57
+ }, import("zod/v4/core").$strip>, "sessions.shell">, Context>;
58
+ export declare const closeSessionRun: import("../../kernel/define.js").Implementation<import("../../kernel/define.js").OperationDef<import("zod").ZodObject<{
59
+ session: import("zod").ZodString;
60
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
61
+ message: import("zod").ZodString;
62
+ }, import("zod/v4/core").$strip>, "sessions.close">, Context>;