windows-development-sandbox 1.27.1 → 1.27.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/context.d.ts +5 -0
- package/dist/app/context.js +13 -0
- package/dist/app/features/accounts/accounts.def.d.ts +16 -0
- package/dist/app/features/accounts/accounts.run.d.ts +4 -0
- package/dist/app/features/accounts/services.def.d.ts +15 -1
- package/dist/app/features/accounts/services.def.js +67 -31
- package/dist/app/features/accounts/services.run.d.ts +7 -2
- package/dist/app/features/accounts/services.run.js +25 -6
- package/dist/app/features/defs.d.ts +17 -0
- package/dist/app/registry.d.ts +1 -1
- package/dist/app/registry.js +15 -2
- package/dist/bin/agent-sandbox.js +2 -2
- package/dist/bin/{chunk-QUHNXHVG.js → chunk-4M5SZZ5P.js} +46 -41
- package/dist/bin/{chunk-4TLSWPG7.js → chunk-FA5VWLP4.js} +1 -1
- package/dist/bin/{chunk-RSIX7C6D.js → chunk-RU7XRN62.js} +249 -101
- package/dist/bin/claude-host.js +2 -2
- package/dist/bin/claude-sbx.js +2 -2
- package/dist/bin/codex-sbx.js +2 -2
- package/dist/bin/gemini-sbx.js +2 -2
- package/dist/bin/sandbox.js +2 -2
- package/dist/bin/sbx-hide.js +2 -2
- package/dist/bin/sbx-show.js +2 -2
- package/dist/cli/menu/menu.js +6 -1
- package/dist/cli/menu/pages/accounts-page.js +9 -5
- package/dist/guest/apps/app-installer.js +7 -5
- package/dist/guest/apps/comet-unpack.js +2 -2
- package/dist/guest/runtime/pools.d.ts +4 -4
- package/dist/guest/runtime/pools.js +4 -15
- package/dist/guest/runtime/process.d.ts +5 -2
- package/dist/guest/runtime/process.js +23 -3
- package/dist/guest/toolchains/engines/epic-launcher.d.ts +6 -0
- package/dist/guest/toolchains/engines/epic-launcher.js +19 -1
- package/dist/guest/toolchains/engines/unreal-engines.js +2 -1
- package/dist/guest/toolchains/installers.d.ts +3 -3
- package/dist/guest/toolchains/installers.js +5 -5
- package/dist/guest/toolchains/native/vcruntime.js +2 -2
- package/dist/guest/toolchains/native/vs-persist.d.ts +2 -2
- package/dist/guest/toolchains/signature.d.ts +2 -0
- package/dist/guest/toolchains/signature.js +9 -2
- package/dist/guest/toolchains/step-scheduler.js +1 -1
- package/dist/host/accounts/deliver.js +15 -7
- package/dist/host/pc-installs/discover.js +5 -2
- package/dist/host/pc-installs/unreal.d.ts +3 -1
- package/dist/host/pc-installs/unreal.js +27 -1
- package/dist/runtime/agent.js +34 -22
- package/dist/runtime/daemon.js +96 -51
- package/dist/runtime/db.js +32 -16
- package/dist/runtime/main.js +98 -53
- package/dist/runtime/netproxy.js +26 -12
- package/dist/runtime/tool.js +32 -15
- package/dist/runtime/view.js +26 -12
- package/dist/selftest/app.test.js +20 -2
- package/dist/selftest/boot-runner.test.js +15 -1
- package/dist/selftest/engines.test.js +22 -1
- package/dist/selftest/menu-screens.js +52 -1
- package/dist/selftest/menu.test.js +29 -3
- package/dist/selftest/service-accounts.test.js +77 -2
- package/dist/selftest/ui-text.test.js +4 -0
- package/dist/shared/accounts/kinds.js +9 -9
- package/dist/shared/apps/catalogue-gamedev.js +1 -0
- package/dist/shared/apps/catalogue.d.ts +2 -0
- package/dist/shared/concurrency/pools.js +1 -1
- package/dist/shared/download/archive.js +4 -2
- package/dist/shared/download/index.d.ts +1 -1
- package/dist/shared/download/index.js +1 -1
- package/dist/shared/download/spawn.d.ts +7 -1
- package/dist/shared/download/spawn.js +16 -1
- package/dist/shared/paths/pc-installs.d.ts +8 -0
- package/dist/shared/unreal/launcher-files.d.ts +7 -0
- package/dist/shared/unreal/launcher-files.js +32 -1
- package/dist/web/index.html +1 -1
- package/dist/web/{main-VPMYTSUL.js → main-NKM7ECSB.js} +59 -59
- package/native/csharp/HcsHost/AssemblyInfo.cs +3 -3
- package/native/csharp/HostTools/AssemblyInfo.cs +3 -3
- package/native/csharp/StorageHelper/AssemblyInfo.cs +3 -3
- package/package.json +1 -1
- package/schemas/config.schema.json +9 -9
- package/schemas/sandbox-config.schema.json +9 -9
|
@@ -182,6 +182,7 @@ import {
|
|
|
182
182
|
redactSecrets,
|
|
183
183
|
refreshStorage,
|
|
184
184
|
refuseInSelfTest,
|
|
185
|
+
reloadSettings,
|
|
185
186
|
reopenSessions,
|
|
186
187
|
reopenedText,
|
|
187
188
|
requestApp,
|
|
@@ -257,7 +258,7 @@ import {
|
|
|
257
258
|
withOperationCommands,
|
|
258
259
|
working,
|
|
259
260
|
writeJson
|
|
260
|
-
} from "./chunk-
|
|
261
|
+
} from "./chunk-RU7XRN62.js";
|
|
261
262
|
|
|
262
263
|
// node_modules/commander/lib/error.js
|
|
263
264
|
var require_error = __commonJS({
|
|
@@ -4410,7 +4411,7 @@ function helpOrdered() {
|
|
|
4410
4411
|
return [...COMMANDS].sort((x, y) => rank(x.name) - rank(y.name));
|
|
4411
4412
|
}
|
|
4412
4413
|
function toOptions(o, wrapper) {
|
|
4413
|
-
const
|
|
4414
|
+
const shown3 = o.shownAs && !wrapper ? o.shownAs : o.flag;
|
|
4414
4415
|
const placeholder = o.type === "boolean" ? "" : " <" + (o.value ?? "value") + ">";
|
|
4415
4416
|
const make = (flag) => {
|
|
4416
4417
|
const option = new Option((o.short ? o.short + ", " : "") + flag + placeholder, o.description);
|
|
@@ -4420,8 +4421,8 @@ function toOptions(o, wrapper) {
|
|
|
4420
4421
|
if (o.group) option.helpGroup(o.group + ":");
|
|
4421
4422
|
return option;
|
|
4422
4423
|
};
|
|
4423
|
-
const visible = make(
|
|
4424
|
-
return
|
|
4424
|
+
const visible = make(shown3);
|
|
4425
|
+
return shown3 === o.flag ? [visible] : [visible, make(o.flag).hideHelp()];
|
|
4425
4426
|
}
|
|
4426
4427
|
function toArgument(arg) {
|
|
4427
4428
|
const name = (arg.required ? "<" : "[") + arg.name + (arg.variadic ? "..." : "") + (arg.required ? ">" : "]");
|
|
@@ -4901,10 +4902,10 @@ var TextScreen = class {
|
|
|
4901
4902
|
const chars = [...this.value].map((ch) => this.o.masked ? "*" : ch);
|
|
4902
4903
|
const inner = width - 4;
|
|
4903
4904
|
const start = Math.max(0, this.cursor - inner + 1);
|
|
4904
|
-
const
|
|
4905
|
-
const before =
|
|
4906
|
-
const at =
|
|
4907
|
-
const after =
|
|
4905
|
+
const shown3 = chars.slice(start, start + inner);
|
|
4906
|
+
const before = shown3.slice(0, this.cursor - start).join("");
|
|
4907
|
+
const at = shown3[this.cursor - start] ?? " ";
|
|
4908
|
+
const after = shown3.slice(this.cursor - start + 1).join("");
|
|
4908
4909
|
const text2 = this.value === "" && this.o.placeholder ? Theme.muted(this.o.placeholder) : before + (Theme.colour ? "\x1B[7m" + at + "\x1B[27m" : "_") + after;
|
|
4909
4910
|
const body = [
|
|
4910
4911
|
"",
|
|
@@ -5114,10 +5115,10 @@ var PathPickerScreen = class {
|
|
|
5114
5115
|
const typing = this.mode === "input";
|
|
5115
5116
|
const frame = (t) => typing ? Theme.accent(t) : Theme.muted(t);
|
|
5116
5117
|
const start = Math.max(0, this.cursor - inner + 1);
|
|
5117
|
-
const
|
|
5118
|
-
const before =
|
|
5119
|
-
const at =
|
|
5120
|
-
const after =
|
|
5118
|
+
const shown3 = this.input.slice(start, start + inner);
|
|
5119
|
+
const before = shown3.slice(0, this.cursor - start);
|
|
5120
|
+
const at = shown3[this.cursor - start] ?? " ";
|
|
5121
|
+
const after = shown3.slice(this.cursor - start + 1);
|
|
5121
5122
|
const cursor = typing ? Theme.colour ? "\x1B[7m" + at + "\x1B[27m" : "_" : at;
|
|
5122
5123
|
const field = this.input === "" && !typing ? Theme.muted("type a path or pick below") : before + cursor + after;
|
|
5123
5124
|
const verdict = this.verdict();
|
|
@@ -5540,17 +5541,17 @@ var OverlayScreen = class {
|
|
|
5540
5541
|
var KeyBar = class {
|
|
5541
5542
|
static render(keys, width) {
|
|
5542
5543
|
const line = (list) => " " + list.map(([k, what]) => Theme.key(k) + " " + Theme.muted(what)).join(" ");
|
|
5543
|
-
const
|
|
5544
|
+
const shown3 = [...keys];
|
|
5544
5545
|
const importance = (k) => k[2] ?? 5;
|
|
5545
|
-
while (Text.width(line(
|
|
5546
|
+
while (Text.width(line(shown3)) > width - 1) {
|
|
5546
5547
|
let drop = -1;
|
|
5547
|
-
|
|
5548
|
-
if (importance(k) > 0 && (drop < 0 || importance(k) >= importance(
|
|
5548
|
+
shown3.forEach((k, i) => {
|
|
5549
|
+
if (importance(k) > 0 && (drop < 0 || importance(k) >= importance(shown3[drop]))) drop = i;
|
|
5549
5550
|
});
|
|
5550
5551
|
if (drop < 0) break;
|
|
5551
|
-
|
|
5552
|
+
shown3.splice(drop, 1);
|
|
5552
5553
|
}
|
|
5553
|
-
return Text.truncate(line(
|
|
5554
|
+
return Text.truncate(line(shown3), width - 1);
|
|
5554
5555
|
}
|
|
5555
5556
|
};
|
|
5556
5557
|
|
|
@@ -5584,9 +5585,9 @@ var SideNav = class _SideNav {
|
|
|
5584
5585
|
lines.findIndex((l) => l.stop)
|
|
5585
5586
|
);
|
|
5586
5587
|
const start = lines.length > height ? Math.min(Math.max(0, at - Math.floor(height / 2)), lines.length - height) : 0;
|
|
5587
|
-
const
|
|
5588
|
-
while (
|
|
5589
|
-
return
|
|
5588
|
+
const shown3 = lines.slice(start, start + height).map((l) => l.text);
|
|
5589
|
+
while (shown3.length < height) shown3.push(" ".repeat(width));
|
|
5590
|
+
return shown3;
|
|
5590
5591
|
}
|
|
5591
5592
|
static section(nav, section, index, width, slim, standing) {
|
|
5592
5593
|
const open = index === nav.active;
|
|
@@ -6435,8 +6436,8 @@ var StringListEditor = class extends CollectionEditor {
|
|
|
6435
6436
|
|
|
6436
6437
|
// src/cli/menu/settings/format.ts
|
|
6437
6438
|
function formatValue(value, max = 60) {
|
|
6438
|
-
const
|
|
6439
|
-
return
|
|
6439
|
+
const shown3 = valueText(value, void 0, max);
|
|
6440
|
+
return shown3.tone === "ok" ? Theme.ok(shown3.text) : shown3.tone === "muted" ? Theme.muted(shown3.text) : shown3.text;
|
|
6440
6441
|
}
|
|
6441
6442
|
|
|
6442
6443
|
// src/cli/menu/settings/collections/map-editor.ts
|
|
@@ -7266,34 +7267,35 @@ var ListPage = class {
|
|
|
7266
7267
|
};
|
|
7267
7268
|
|
|
7268
7269
|
// src/cli/menu/pages/accounts-page.ts
|
|
7270
|
+
function shown(m) {
|
|
7271
|
+
return m.services.filter((s) => s.ready);
|
|
7272
|
+
}
|
|
7269
7273
|
function viewOf(m, category) {
|
|
7270
7274
|
const agent = m.agents.find((a) => a.name === category);
|
|
7271
7275
|
if (agent) return menuView(agentPage(agent), { category: agent.name, refresh: false });
|
|
7272
|
-
const service = m.
|
|
7276
|
+
const service = shown(m).find((s) => serviceCategory(s.kind) === category);
|
|
7273
7277
|
if (service) return menuView(servicePage(service), { category: serviceCategory(service.kind), refresh: false });
|
|
7274
7278
|
return menuView({ title: "Accounts", sections: [] }, { refresh: false });
|
|
7275
7279
|
}
|
|
7276
7280
|
function accountsOptions(m) {
|
|
7277
7281
|
return {
|
|
7278
7282
|
path: [],
|
|
7279
|
-
intro: "Logins saved on this PC, per agent
|
|
7283
|
+
intro: "Logins saved on this PC, per agent, and the service sign-ins sandboxes may get.",
|
|
7280
7284
|
categories: [
|
|
7281
7285
|
...m.agents.map((a) => ({
|
|
7282
7286
|
id: a.name,
|
|
7283
7287
|
label: a.name,
|
|
7284
7288
|
description: a.kept ? "Saved " + a.name + " logins." : "This agent's login is not kept between sandboxes: it cannot be pointed at a folder we control."
|
|
7285
7289
|
})),
|
|
7286
|
-
...m.
|
|
7290
|
+
...shown(m).map((s) => ({
|
|
7287
7291
|
id: serviceCategory(s.kind),
|
|
7288
7292
|
label: s.label,
|
|
7289
|
-
description: "
|
|
7293
|
+
description: "For " + s.usedFor + "."
|
|
7290
7294
|
}))
|
|
7291
7295
|
],
|
|
7292
7296
|
items: [
|
|
7293
7297
|
...m.agents.flatMap((a) => menuView(agentPage(a), { category: a.name, refresh: false }).items),
|
|
7294
|
-
...m.
|
|
7295
|
-
(s) => menuView(servicePage(s), { category: serviceCategory(s.kind), refresh: false }).items
|
|
7296
|
-
)
|
|
7298
|
+
...shown(m).flatMap((s) => menuView(servicePage(s), { category: serviceCategory(s.kind), refresh: false }).items)
|
|
7297
7299
|
],
|
|
7298
7300
|
empty: "No agents.",
|
|
7299
7301
|
actions: (category) => viewOf(m, category).actions,
|
|
@@ -7481,7 +7483,7 @@ var CommandForm = class {
|
|
|
7481
7483
|
}
|
|
7482
7484
|
item(f) {
|
|
7483
7485
|
const v = this.values.get(this.id(f));
|
|
7484
|
-
const
|
|
7486
|
+
const shown3 = v === true ? Theme.ok("On") : v === false || v === void 0 ? Theme.muted(
|
|
7485
7487
|
f.kind === "option" && f.spec.type === "boolean" || f.kind === "json" ? "Off" : f.kind === "option" && f.spec.default !== void 0 ? "default " + f.spec.default : f.kind === "arg" && f.spec.required ? "required" : "not set"
|
|
7486
7488
|
) : Array.isArray(v) && v.length ? v.join(" ") : Theme.muted("not set");
|
|
7487
7489
|
const actions = this.actions();
|
|
@@ -7489,7 +7491,7 @@ var CommandForm = class {
|
|
|
7489
7491
|
return {
|
|
7490
7492
|
value: this.id(f),
|
|
7491
7493
|
label: argLabel(f.spec),
|
|
7492
|
-
hint:
|
|
7494
|
+
hint: shown3,
|
|
7493
7495
|
description: plainDescription(f.spec.description, actions),
|
|
7494
7496
|
section: "What",
|
|
7495
7497
|
keywords: f.spec.name
|
|
@@ -7498,7 +7500,7 @@ var CommandForm = class {
|
|
|
7498
7500
|
return {
|
|
7499
7501
|
value: "json",
|
|
7500
7502
|
label: "Machine-readable output",
|
|
7501
|
-
hint:
|
|
7503
|
+
hint: shown3,
|
|
7502
7504
|
description: "Print JSON instead of a table.",
|
|
7503
7505
|
section: "Output",
|
|
7504
7506
|
flip: true
|
|
@@ -7507,14 +7509,14 @@ var CommandForm = class {
|
|
|
7507
7509
|
return {
|
|
7508
7510
|
value: "extra",
|
|
7509
7511
|
label: this.spec.passthrough === "agent" ? "Extra arguments for the agent" : "Arguments for the command",
|
|
7510
|
-
hint:
|
|
7512
|
+
hint: shown3,
|
|
7511
7513
|
description: this.spec.passthrough === "agent" ? "Passed on to the agent, e.g. --continue." : "The rest of the command line.",
|
|
7512
7514
|
section: "Output"
|
|
7513
7515
|
};
|
|
7514
7516
|
return {
|
|
7515
7517
|
value: this.id(f),
|
|
7516
7518
|
label: optionLabel(f.spec),
|
|
7517
|
-
hint:
|
|
7519
|
+
hint: shown3,
|
|
7518
7520
|
description: plainDescription(f.spec.description, actions),
|
|
7519
7521
|
section: f.spec.advanced ? "Advanced" : "Options",
|
|
7520
7522
|
keywords: f.spec.flag,
|
|
@@ -8941,19 +8943,19 @@ function draftSource2(draft) {
|
|
|
8941
8943
|
effective: (file, key, config2) => file.isProject ? written(file, key) : draft.has(file, key) ? draft.value(file, key) ?? file.defaultOf(key) : import_lodash5.default.get(config2, key)
|
|
8942
8944
|
};
|
|
8943
8945
|
}
|
|
8944
|
-
function
|
|
8946
|
+
function shown2(row, value, max = 60) {
|
|
8945
8947
|
const v = valueText(value, row.field, max);
|
|
8946
8948
|
return v.tone === "ok" ? Theme.ok(v.text) : v.tone === "muted" ? Theme.muted(v.text) : v.text;
|
|
8947
8949
|
}
|
|
8948
8950
|
function item(row, file, draft) {
|
|
8949
8951
|
const unsaved = draft.has(file, row.key);
|
|
8950
8952
|
const paint2 = file.isProject ? Theme.project : Theme.changed;
|
|
8951
|
-
const value = file.isProject && !row.set ? Theme.muted("all projects: ") +
|
|
8953
|
+
const value = file.isProject && !row.set ? Theme.muted("all projects: ") + shown2(row, row.yours, 40) : shown2(row, row.value);
|
|
8952
8954
|
const details = [
|
|
8953
8955
|
Theme.muted("Setting ") + row.id,
|
|
8954
|
-
Theme.muted("All projects ") +
|
|
8955
|
-
Theme.muted("This project ") + (row.inProject === void 0 ? Theme.muted("not set") : Theme.project(Text.strip(
|
|
8956
|
-
...!file.isProject ? [Theme.muted("Default ") +
|
|
8956
|
+
Theme.muted("All projects ") + shown2(row, row.yours, 40) + Theme.muted(row.yoursSet ? " (your file)" : " (built-in default)"),
|
|
8957
|
+
Theme.muted("This project ") + (row.inProject === void 0 ? Theme.muted("not set") : Theme.project(Text.strip(shown2(row, row.inProject, 40)))),
|
|
8958
|
+
...!file.isProject ? [Theme.muted("Default ") + shown2(row, row.default, 40)] : [],
|
|
8957
8959
|
...unsaved ? [Theme.warn("Unsaved: Ctrl+S saves, z undoes this change.")] : [],
|
|
8958
8960
|
...file.isProject && row.locked ? [Theme.warn(Theme.glyph.lock + " A project can only make this stricter than your own setting.")] : []
|
|
8959
8961
|
];
|
|
@@ -9620,7 +9622,10 @@ var Menu = class {
|
|
|
9620
9622
|
new MaintenancePage(app, ctx)
|
|
9621
9623
|
],
|
|
9622
9624
|
draft,
|
|
9623
|
-
(saved) =>
|
|
9625
|
+
(saved) => {
|
|
9626
|
+
reloadSettings(this.ctx);
|
|
9627
|
+
return this.applyAgentCommands(saved);
|
|
9628
|
+
}
|
|
9624
9629
|
);
|
|
9625
9630
|
}
|
|
9626
9631
|
/** Runs the menu until you leave it, or until a command that takes over the terminal (attach) has run. */
|