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.
- package/README.md +1 -0
- package/config.example.json +11 -1
- package/dist/app/features/access/access.def.d.ts +190 -0
- package/dist/app/features/access/access.def.js +273 -0
- package/dist/app/features/access/access.run.d.ts +79 -0
- package/dist/app/features/access/access.run.js +129 -0
- package/dist/app/features/access/index.d.ts +2 -0
- package/dist/app/features/access/index.js +3 -0
- package/dist/app/features/accounts/accounts.def.d.ts +1 -0
- package/dist/app/features/accounts/accounts.def.js +12 -3
- package/dist/app/features/accounts/accounts.run.d.ts +1 -0
- package/dist/app/features/accounts/accounts.run.js +20 -11
- package/dist/app/features/agents/agent-entry.js +5 -0
- package/dist/app/features/agents/agents.def.js +1 -0
- package/dist/app/features/apps/apps.def.js +1 -0
- package/dist/app/features/audit/audit.def.d.ts +11 -2
- package/dist/app/features/audit/audit.def.js +7 -4
- package/dist/app/features/audit/audit.run.d.ts +3 -0
- package/dist/app/features/defs.d.ts +156 -3
- package/dist/app/features/defs.js +12 -1
- package/dist/app/features/files/files.def.js +1 -0
- package/dist/app/features/health/health.def.js +1 -0
- package/dist/app/features/sandbox/sandbox.def.js +3 -0
- package/dist/app/features/sessions/sessions.def.d.ts +36 -0
- package/dist/app/features/sessions/sessions.def.js +77 -9
- package/dist/app/features/sessions/sessions.run.d.ts +25 -2
- package/dist/app/features/sessions/sessions.run.js +71 -3
- package/dist/app/features/settings/settings-file.d.ts +7 -0
- package/dist/app/features/settings/settings-file.js +19 -2
- package/dist/app/features/settings/settings-rows.js +9 -1
- package/dist/app/features/settings/settings.def.d.ts +8 -0
- package/dist/app/features/settings/settings.def.js +17 -0
- package/dist/app/features/web/web.def.d.ts +9 -0
- package/dist/app/features/web/web.def.js +26 -1
- package/dist/app/features/web/web.run.d.ts +3 -0
- package/dist/app/features/web/web.run.js +11 -3
- package/dist/app/kernel/access.d.ts +33 -0
- package/dist/app/kernel/access.js +44 -0
- package/dist/app/kernel/define.d.ts +14 -1
- package/dist/app/kernel/index.d.ts +1 -0
- package/dist/app/kernel/index.js +1 -0
- package/dist/app/kernel/rpc.d.ts +5 -2
- package/dist/app/registry.d.ts +4 -1
- package/dist/app/registry.js +24 -4
- package/dist/bin/agent-sandbox.js +7 -1
- package/dist/bin/chunk-IL7BXJF2.js +7 -0
- package/dist/bin/chunk-K4SU3MHJ.js +10432 -0
- package/dist/bin/chunk-VENWSGX2.js +78437 -0
- package/dist/bin/claude-host.js +10 -4
- package/dist/bin/claude-sbx.js +8 -2
- package/dist/bin/codex-sbx.js +8 -2
- package/dist/bin/gemini-sbx.js +8 -2
- package/dist/bin/sandbox.js +7 -2
- package/dist/bin/sbx-hide.js +8 -2
- package/dist/bin/sbx-show.js +8 -2
- package/dist/cli/commands/launch/prepare.js +24 -7
- package/dist/cli/commands/launch/running.js +4 -0
- package/dist/cli/commands/registry.js +2 -0
- package/dist/cli/commands/remote.d.ts +2 -0
- package/dist/cli/commands/remote.js +49 -0
- package/dist/cli/commands/sessions/reopen.js +3 -0
- package/dist/cli/commands/storage/offer.js +1 -1
- package/dist/cli/commands/web.js +66 -0
- package/dist/cli/manifest.d.ts +63 -4
- package/dist/cli/manifest.js +33 -4
- package/dist/cli/menu/io-menu.d.ts +5 -3
- package/dist/cli/menu/io-menu.js +12 -5
- package/dist/cli/menu/live.d.ts +29 -0
- package/dist/cli/menu/live.js +92 -21
- package/dist/cli/menu/menu.d.ts +2 -1
- package/dist/cli/menu/menu.js +16 -2
- package/dist/cli/menu/pages/list-page.d.ts +5 -0
- package/dist/cli/menu/pages/list-page.js +19 -0
- package/dist/cli/menu/remote-menu.d.ts +19 -0
- package/dist/cli/menu/remote-menu.js +108 -0
- package/dist/cli/menu/shell.d.ts +2 -0
- package/dist/cli/menu/shell.js +1 -1
- package/dist/cli/menu/views.js +2 -0
- package/dist/cli/operations/handler.js +15 -1
- package/dist/cli/services/accounts-service.d.ts +7 -0
- package/dist/cli/services/accounts-service.js +20 -0
- package/dist/cli/services/remote-client.d.ts +16 -0
- package/dist/cli/services/remote-client.js +141 -0
- package/dist/cli/services/sessions-service.d.ts +5 -0
- package/dist/cli/services/sessions-service.js +17 -1
- package/dist/cli/tui/app.d.ts +4 -0
- package/dist/cli/tui/app.js +5 -0
- package/dist/cli/tui/terminal.d.ts +6 -0
- package/dist/cli/tui/terminal.js +8 -1
- package/dist/cli/validate.js +8 -4
- package/dist/core/config/defaults.js +11 -1
- package/dist/core/local-config/file.js +16 -2
- package/dist/core/local-config/overrides.js +7 -0
- package/dist/core/package-info.js +1 -1
- package/dist/core/run/versions.js +9 -8
- package/dist/core/schema/config.d.ts +22 -3
- package/dist/core/schema/config.js +39 -2
- package/dist/core/schema/web.d.ts +51 -0
- package/dist/core/schema/web.js +46 -1
- package/dist/core/util/fs.d.ts +5 -0
- package/dist/core/util/fs.js +23 -0
- package/dist/core/util/index.d.ts +1 -1
- package/dist/core/util/index.js +1 -1
- package/dist/guest/daemon/daemon.js +2 -0
- package/dist/guest/daemon/idle-shutdown.js +2 -1
- package/dist/guest/daemon/sessions.d.ts +16 -2
- package/dist/guest/daemon/sessions.js +126 -20
- package/dist/guest/git/decision.js +7 -0
- package/dist/guest/sessions/cmdline.d.ts +14 -0
- package/dist/guest/sessions/cmdline.js +10 -0
- package/dist/guest/toolchains/setup.js +3 -0
- package/dist/host/audit/log.d.ts +3 -2
- package/dist/host/audit/log.js +3 -3
- package/dist/host/channel/channel.d.ts +5 -1
- package/dist/host/channel/channel.js +12 -0
- package/dist/host/guard/agent-files.js +7 -1
- package/dist/host/guard/commands.js +13 -1
- package/dist/host/guard/git-config.js +27 -7
- package/dist/host/guard/git-dirs.js +78 -3
- package/dist/host/guard/mark-of-the-web.js +3 -1
- package/dist/host/guard/nested-repos.js +7 -2
- package/dist/host/guard/store.js +1 -0
- package/dist/host/guard/types.d.ts +2 -0
- package/dist/host/launch/mappings.js +11 -1
- package/dist/host/launch/project-scan.js +2 -21
- package/dist/host/launch/stage.js +4 -0
- package/dist/host/life/session-ledger.js +2 -1
- package/dist/host/remote/access-store.d.ts +156 -0
- package/dist/host/remote/access-store.js +308 -0
- package/dist/host/remote/cert.d.ts +20 -0
- package/dist/host/remote/cert.js +103 -0
- package/dist/host/remote/door-client.d.ts +13 -0
- package/dist/host/remote/door-client.js +54 -0
- package/dist/host/remote/firewall.d.ts +44 -0
- package/dist/host/remote/firewall.js +118 -0
- package/dist/host/remote/gate.d.ts +125 -0
- package/dist/host/remote/gate.js +391 -0
- package/dist/host/remote/index.d.ts +8 -0
- package/dist/host/remote/index.js +10 -0
- package/dist/host/remote/lan.d.ts +24 -0
- package/dist/host/remote/lan.js +88 -0
- package/dist/host/remote/tls-store.d.ts +22 -0
- package/dist/host/remote/tls-store.js +63 -0
- package/dist/host/remote/windows-helper.d.ts +67 -0
- package/dist/host/remote/windows-helper.js +129 -0
- package/dist/host/sandbox/platform.d.ts +2 -0
- package/dist/host/sandbox/platform.js +19 -4
- package/dist/host/storage/contained/state.d.ts +3 -2
- package/dist/host/storage/contained/state.js +5 -2
- package/dist/host/web/bridge.d.ts +5 -1
- package/dist/host/web/bridge.js +6 -2
- package/dist/host/web/browser.js +1 -1
- package/dist/host/web/control.d.ts +4 -1
- package/dist/host/web/control.js +28 -4
- package/dist/host/web/rpc.d.ts +16 -2
- package/dist/host/web/rpc.js +37 -4
- package/dist/host/web/runner.d.ts +4 -0
- package/dist/host/web/runner.js +12 -0
- package/dist/host/web/server.d.ts +18 -2
- package/dist/host/web/server.js +97 -24
- package/dist/host/web/state.d.ts +5 -0
- package/dist/host/web/state.js +8 -0
- package/dist/runtime/agent.js +74 -3
- package/dist/runtime/daemon.js +205 -24
- package/dist/runtime/db.js +74 -3
- package/dist/runtime/gitguard.js +6 -0
- package/dist/runtime/main.js +77 -3
- package/dist/runtime/netproxy.js +74 -3
- package/dist/runtime/view.js +76 -3
- package/dist/selftest/app.test.js +41 -6
- package/dist/selftest/channel.test.js +16 -0
- package/dist/selftest/cmdline.test.js +16 -0
- package/dist/selftest/git-access.test.js +8 -0
- package/dist/selftest/hostile-input.test.js +12 -1
- package/dist/selftest/index.js +2 -0
- package/dist/selftest/layout.test.js +10 -1
- package/dist/selftest/live-daemon.test.js +25 -0
- package/dist/selftest/local-config.test.js +30 -0
- package/dist/selftest/menu-perf.test.js +198 -12
- package/dist/selftest/menu.test.js +4 -0
- package/dist/selftest/remote.test.d.ts +2 -0
- package/dist/selftest/remote.test.js +536 -0
- package/dist/selftest/repo-guard.test.js +56 -2
- package/dist/selftest/resume.test.js +2 -1
- package/dist/selftest/sharing.test.js +9 -2
- package/dist/selftest/support/fixtures.d.ts +13 -0
- package/dist/selftest/support/web-preview.js +63 -0
- package/dist/selftest/web.test.js +2 -0
- package/dist/shared/channel/schema.d.ts +23 -0
- package/dist/shared/channel/schema.js +8 -0
- package/dist/shared/pty/protocol.d.ts +2 -0
- package/dist/shared/pty/protocol.js +2 -0
- package/dist/web/index.html +1 -1
- package/dist/web/main-NBQ3LF4E.js +221 -0
- package/native/csharp/HcsHost/AssemblyInfo.cs +3 -3
- package/native/csharp/HostTools/AssemblyInfo.cs +3 -3
- package/native/csharp/HostTools/Program.cs +17 -1
- package/native/csharp/HostTools/WebHelper.cs +499 -0
- package/native/scripts/get-network-profile.ps1 +19 -0
- package/native/scripts/set-folder-access.ps1 +11 -0
- package/native/scripts/set-web-firewall.ps1 +103 -0
- package/package.json +1 -1
- package/sandbox/csharp/PtyHost.cs +20 -0
- package/schemas/config.schema.json +65 -0
- package/schemas/sandbox-config.schema.json +0 -18
- 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
|
|
2
|
-
// view; sessions.run.ts does the work. A running session links to
|
|
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
|
|
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
|
|
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">,
|
|
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">,
|
|
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>;
|