windows-development-sandbox 1.20.0 → 1.23.1
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/config.example.json +8 -1
- package/dist/app/features/access/access.def.js +5 -2
- package/dist/app/features/access/access.run.js +7 -3
- package/dist/app/features/accounts/accounts.def.d.ts +29 -1
- package/dist/app/features/accounts/accounts.def.js +10 -4
- package/dist/app/features/accounts/accounts.run.d.ts +1 -0
- package/dist/app/features/accounts/accounts.run.js +7 -2
- package/dist/app/features/accounts/services.def.d.ts +4 -1
- package/dist/app/features/accounts/services.def.js +15 -14
- package/dist/app/features/accounts/services.run.d.ts +1 -0
- package/dist/app/features/accounts/services.run.js +41 -15
- package/dist/app/features/defs.d.ts +39 -2
- package/dist/app/features/engine/engine.run.js +1 -1
- package/dist/app/features/github/github.def.d.ts +44 -3
- package/dist/app/features/github/github.def.js +145 -63
- package/dist/app/features/github/github.run.d.ts +9 -2
- package/dist/app/features/github/github.run.js +43 -5
- package/dist/app/features/health/health.def.js +8 -2
- package/dist/app/features/logs/logs.def.js +0 -8
- package/dist/app/features/projects/projects.def.js +2 -2
- package/dist/app/features/projects/projects.run.js +5 -5
- package/dist/app/features/sandbox/sandbox.def.js +7 -3
- package/dist/app/features/sessions/sessions.def.d.ts +4 -4
- package/dist/app/features/sessions/sessions.def.js +0 -5
- package/dist/app/features/sessions/sessions.run.d.ts +1 -1
- package/dist/app/features/sessions/sessions.run.js +2 -2
- package/dist/app/features/settings/categories.def.js +2 -0
- package/dist/app/features/settings/settings-rows.js +1 -1
- package/dist/app/features/settings/settings.def.js +1 -1
- package/dist/app/features/settings/settings.run.js +3 -3
- package/dist/app/features/storage/storage.run.js +18 -9
- package/dist/app/features/updates/update-lines.js +2 -2
- package/dist/app/features/updates/updates.def.js +1 -1
- package/dist/app/features/updates/updates.run.js +1 -1
- package/dist/app/features/web/web.def.js +2 -2
- package/dist/app/features/web/web.run.js +12 -4
- package/dist/app/kernel/errors.d.ts +7 -0
- package/dist/app/kernel/errors.js +18 -3
- package/dist/app/kernel/rpc.d.ts +5 -0
- package/dist/app/kernel/view.d.ts +11 -1
- package/dist/bin/agent-sandbox.js +2 -2
- package/dist/bin/{chunk-DK4NTBUF.js → chunk-7YPEDAJD.js} +172 -48
- package/dist/bin/{chunk-2IMT7ZCT.js → chunk-QFSJX2KW.js} +1 -1
- package/dist/bin/{chunk-Z2P5OGKL.js → chunk-USTRSHIE.js} +2436 -1693
- 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/manifest.d.ts +2 -2
- package/dist/cli/manifest.js +2 -1
- package/dist/cli/menu/coverage-exempt.d.ts +17 -0
- package/dist/cli/menu/coverage-exempt.js +61 -0
- package/dist/cli/menu/io-menu.d.ts +2 -0
- package/dist/cli/menu/io-menu.js +50 -5
- package/dist/cli/menu/pages/accounts-page.js +1 -1
- package/dist/cli/menu/pages/agents-page.js +8 -2
- package/dist/cli/menu/pages/maintenance-page.d.ts +6 -0
- package/dist/cli/menu/pages/maintenance-page.js +9 -2
- package/dist/cli/menu/pages/sessions-page.d.ts +2 -0
- package/dist/cli/menu/pages/sessions-page.js +12 -4
- package/dist/cli/menu/pages/settings-page.js +12 -1
- package/dist/cli/menu/remote-menu.js +1 -1
- package/dist/cli/menu/shell.d.ts +5 -0
- package/dist/cli/menu/shell.js +13 -0
- package/dist/cli/report.js +2 -0
- package/dist/cli/tui/app.d.ts +5 -0
- package/dist/cli/tui/app.js +2 -0
- package/dist/core/config/defaults.js +3 -1
- package/dist/core/schema/accounts.d.ts +6 -0
- package/dist/core/schema/accounts.js +13 -11
- package/dist/core/schema/config.d.ts +20 -8
- package/dist/core/schema/config.js +4 -4
- package/dist/core/schema/github.js +1 -1
- package/dist/core/schema/profile.js +8 -4
- package/dist/core/schema/resume.js +1 -1
- package/dist/core/schema/sandbox.js +3 -3
- package/dist/core/schema/vpn.js +1 -1
- package/dist/core/schema/web.js +3 -3
- package/dist/core/types.d.ts +6 -0
- package/dist/core/util/errors.d.ts +11 -1
- package/dist/core/util/errors.js +7 -1
- package/dist/core/util/index.d.ts +1 -1
- package/dist/core/util/index.js +1 -1
- package/dist/guest/accounts/adapter.d.ts +2 -0
- package/dist/guest/accounts/adapters.js +4 -0
- package/dist/guest/accounts/apply.d.ts +6 -2
- package/dist/guest/accounts/kinds/cfx.d.ts +7 -0
- package/dist/guest/accounts/kinds/cfx.js +33 -3
- package/dist/guest/accounts/kinds/comet.d.ts +7 -0
- package/dist/guest/accounts/kinds/comet.js +50 -0
- package/dist/guest/accounts/kinds/perplexity.d.ts +2 -0
- package/dist/guest/accounts/kinds/perplexity.js +12 -0
- package/dist/guest/accounts/watch.d.ts +2 -0
- package/dist/guest/accounts/watch.js +12 -2
- package/dist/guest/agents/agent-installer.js +1 -1
- package/dist/guest/agents/profile-links.d.ts +2 -0
- package/dist/guest/agents/profile-links.js +18 -4
- package/dist/guest/apps/after-install.js +19 -0
- package/dist/guest/apps/app-installer.d.ts +11 -0
- package/dist/guest/apps/app-installer.js +69 -6
- package/dist/guest/apps/comet-unpack.d.ts +20 -0
- package/dist/guest/apps/comet-unpack.js +127 -0
- package/dist/guest/apps/index.d.ts +1 -1
- package/dist/guest/apps/index.js +1 -1
- package/dist/guest/apps/resolvers-agents-web.d.ts +2 -0
- package/dist/guest/apps/resolvers-agents-web.js +7 -0
- package/dist/guest/apps/resolvers.js +2 -0
- package/dist/guest/apps/shortcuts.d.ts +2 -0
- package/dist/guest/apps/shortcuts.js +1 -0
- package/dist/guest/apps/unpack.js +14 -4
- package/dist/guest/boot/boot.d.ts +45 -16
- package/dist/guest/boot/boot.js +316 -145
- package/dist/guest/boot/graph.d.ts +252 -0
- package/dist/guest/boot/graph.js +257 -0
- package/dist/guest/boot/guide-lines.d.ts +25 -0
- package/dist/guest/boot/guide-lines.js +41 -0
- package/dist/guest/boot/guide.d.ts +1 -4
- package/dist/guest/boot/guide.js +6 -8
- package/dist/guest/boot/runner.d.ts +77 -0
- package/dist/guest/boot/runner.js +215 -0
- package/dist/guest/browser/cdp.d.ts +71 -0
- package/dist/guest/browser/cdp.js +306 -0
- package/dist/guest/browser/comet.d.ts +28 -0
- package/dist/guest/browser/comet.js +155 -0
- package/dist/guest/daemon/project-provisioner.js +6 -1
- package/dist/guest/devtools/fivem.d.ts +1 -1
- package/dist/guest/devtools/fivem.js +243 -3
- package/dist/guest/entries/daemon.js +2 -0
- package/dist/guest/runtime/log.d.ts +12 -0
- package/dist/guest/runtime/log.js +29 -5
- package/dist/guest/runtime/pools.d.ts +24 -0
- package/dist/guest/runtime/pools.js +60 -0
- package/dist/guest/runtime/process.d.ts +4 -0
- package/dist/guest/runtime/process.js +38 -1
- package/dist/guest/runtime/status.d.ts +5 -1
- package/dist/guest/runtime/status.js +19 -0
- package/dist/guest/setup/addon-mcp.d.ts +1 -1
- package/dist/guest/setup/addon-mcp.js +52 -12
- package/dist/guest/setup/agent-addons.d.ts +3 -2
- package/dist/guest/setup/agent-addons.js +12 -3
- package/dist/guest/setup/environment.d.ts +1 -1
- package/dist/guest/setup/environment.js +25 -12
- package/dist/guest/setup/headroom.d.ts +8 -3
- package/dist/guest/setup/headroom.js +44 -15
- package/dist/guest/setup/path-plan.d.ts +28 -0
- package/dist/guest/setup/path-plan.js +69 -2
- package/dist/guest/setup/shell-path.d.ts +1 -1
- package/dist/guest/setup/shell-path.js +3 -3
- package/dist/guest/toolchains/fivem/artifacts.d.ts +48 -1
- package/dist/guest/toolchains/fivem/artifacts.js +97 -4
- package/dist/guest/toolchains/fivem/fivem.d.ts +32 -1
- package/dist/guest/toolchains/fivem/fivem.js +168 -3
- package/dist/guest/toolchains/fivem/scaffold.d.ts +35 -0
- package/dist/guest/toolchains/fivem/scaffold.js +105 -0
- package/dist/guest/toolchains/fivem/serve-plan.d.ts +34 -0
- package/dist/guest/toolchains/fivem/serve-plan.js +61 -0
- package/dist/guest/toolchains/languages/go.js +1 -1
- package/dist/guest/toolchains/languages/node.js +2 -1
- package/dist/guest/toolchains/languages/php.d.ts +2 -0
- package/dist/guest/toolchains/languages/php.js +13 -1
- package/dist/guest/toolchains/languages/python-tools.js +1 -1
- package/dist/guest/toolchains/languages/ruby.js +1 -1
- package/dist/guest/toolchains/native/binstall.js +1 -1
- package/dist/guest/toolchains/native/msvc/packages.js +10 -4
- package/dist/guest/toolchains/native/rust.d.ts +2 -0
- package/dist/guest/toolchains/native/rust.js +11 -4
- package/dist/guest/toolchains/native/unreal.d.ts +2 -0
- package/dist/guest/toolchains/native/unreal.js +16 -6
- package/dist/guest/toolchains/native/vcruntime.d.ts +2 -0
- package/dist/guest/toolchains/native/vcruntime.js +10 -2
- package/dist/guest/toolchains/native/visual-studio.d.ts +3 -0
- package/dist/guest/toolchains/native/visual-studio.js +44 -26
- package/dist/guest/toolchains/native/vs-request.d.ts +2 -0
- package/dist/guest/toolchains/native/vs-request.js +2 -0
- package/dist/guest/toolchains/plan.js +19 -8
- package/dist/guest/toolchains/scheduler.d.ts +2 -21
- package/dist/guest/toolchains/scheduler.js +7 -121
- package/dist/guest/toolchains/setup.d.ts +15 -2
- package/dist/guest/toolchains/setup.js +39 -20
- package/dist/guest/toolchains/split.d.ts +28 -0
- package/dist/guest/toolchains/split.js +60 -0
- package/dist/guest/toolchains/steam/client.js +2 -1
- package/dist/guest/toolchains/step-scheduler.d.ts +51 -0
- package/dist/guest/toolchains/step-scheduler.js +147 -0
- package/dist/guest/toolchains/step.d.ts +13 -0
- package/dist/guest/toolchains/tools/git.js +18 -0
- package/dist/guest/vpn/openvpn.js +3 -4
- package/dist/guest/vpn/wireguard.js +11 -4
- package/dist/host/accounts/deliver.js +7 -0
- package/dist/host/accounts/handoff.js +2 -6
- package/dist/host/accounts/index.d.ts +1 -1
- package/dist/host/accounts/index.js +1 -1
- package/dist/host/accounts/kinds/cfx.d.ts +1 -1
- package/dist/host/accounts/kinds/cfx.js +47 -4
- package/dist/host/accounts/kinds/comet.d.ts +2 -0
- package/dist/host/accounts/kinds/comet.js +6 -0
- package/dist/host/accounts/kinds/perplexity.d.ts +2 -0
- package/dist/host/accounts/kinds/perplexity.js +30 -0
- package/dist/host/accounts/leases.d.ts +7 -1
- package/dist/host/accounts/leases.js +13 -2
- package/dist/host/accounts/source.d.ts +7 -1
- package/dist/host/accounts/source.js +27 -0
- package/dist/host/accounts/sources.js +4 -0
- package/dist/host/github/deliver.d.ts +1 -1
- package/dist/host/github/deliver.js +20 -1
- package/dist/host/github/index.d.ts +2 -1
- package/dist/host/github/index.js +1 -0
- package/dist/host/github/token.d.ts +13 -1
- package/dist/host/github/token.js +19 -2
- package/dist/host/github/verify.d.ts +27 -0
- package/dist/host/github/verify.js +61 -0
- package/dist/host/launch/hints/fivem.d.ts +3 -1
- package/dist/host/launch/hints/fivem.js +68 -2
- package/dist/host/launch/session-file.js +4 -0
- package/dist/host/launch/toolchains.d.ts +2 -1
- package/dist/host/launch/toolchains.js +5 -3
- package/dist/host/profile/claude-login.d.ts +2 -2
- package/dist/host/profile/claude-login.js +4 -3
- package/dist/host/vpn/nordvpn.d.ts +2 -4
- package/dist/host/vpn/nordvpn.js +2 -24
- package/dist/runtime/agent.js +405 -90
- package/dist/runtime/daemon.js +3010 -1383
- package/dist/runtime/db.js +333 -90
- package/dist/runtime/main.js +4720 -1954
- package/dist/runtime/netproxy.js +286 -69
- package/dist/runtime/tool.js +2852 -1780
- package/dist/runtime/view.js +286 -69
- package/dist/selftest/accounts.test.js +1 -1
- package/dist/selftest/agent-paths.test.js +39 -1
- package/dist/selftest/agent-settings.test.js +6 -0
- package/dist/selftest/agents-web.test.d.ts +2 -0
- package/dist/selftest/agents-web.test.js +647 -0
- package/dist/selftest/app.test.js +5 -2
- package/dist/selftest/boot-runner.test.d.ts +2 -0
- package/dist/selftest/boot-runner.test.js +456 -0
- package/dist/selftest/channel.test.js +15 -0
- package/dist/selftest/fivem.test.js +249 -3
- package/dist/selftest/github.test.js +94 -9
- package/dist/selftest/guest-boot.test.js +3 -0
- package/dist/selftest/health.test.js +1 -1
- package/dist/selftest/index.js +8 -0
- package/dist/selftest/layout.test.js +5 -0
- package/dist/selftest/menu-coverage.test.d.ts +2 -0
- package/dist/selftest/menu-coverage.test.js +46 -0
- package/dist/selftest/menu-screens.js +37 -1
- package/dist/selftest/persisted-installs.test.js +6 -3
- package/dist/selftest/service-accounts.test.js +3 -2
- package/dist/selftest/support/engine-golden.js +27 -0
- package/dist/selftest/support/fixtures.d.ts +6 -0
- package/dist/selftest/support/web-preview.d.ts +34 -1
- package/dist/selftest/support/web-preview.js +21 -18
- package/dist/selftest/toolchains.test.js +23 -1
- package/dist/selftest/ui-text.test.d.ts +7 -0
- package/dist/selftest/ui-text.test.js +300 -0
- package/dist/shared/accounts/anthropic.d.ts +1 -1
- package/dist/shared/accounts/anthropic.js +9 -8
- package/dist/shared/accounts/index.d.ts +2 -0
- package/dist/shared/accounts/index.js +2 -0
- package/dist/shared/accounts/kinds/comet.d.ts +12 -0
- package/dist/shared/accounts/kinds/comet.js +64 -0
- package/dist/shared/accounts/kinds/perplexity.d.ts +8 -0
- package/dist/shared/accounts/kinds/perplexity.js +37 -0
- package/dist/shared/accounts/kinds.d.ts +24 -5
- package/dist/shared/accounts/kinds.js +86 -4
- package/dist/shared/accounts/payloads.d.ts +81 -0
- package/dist/shared/accounts/payloads.js +39 -1
- package/dist/shared/apps/agent-addons.d.ts +33 -5
- package/dist/shared/apps/agent-addons.js +95 -3
- package/dist/shared/apps/catalogue-agents-web.d.ts +14 -0
- package/dist/shared/apps/catalogue-agents-web.js +112 -0
- package/dist/shared/apps/catalogue-modding.js +32 -1
- package/dist/shared/apps/catalogue.d.ts +27 -3
- package/dist/shared/apps/catalogue.js +2 -1
- package/dist/shared/apps/index.d.ts +3 -1
- package/dist/shared/apps/index.js +3 -1
- package/dist/shared/channel/schema.d.ts +21 -3
- package/dist/shared/channel/schema.js +7 -0
- package/dist/shared/channel/secrets.d.ts +19 -0
- package/dist/shared/concurrency/index.d.ts +3 -0
- package/dist/shared/concurrency/index.js +3 -0
- package/dist/shared/concurrency/installer-retry.d.ts +6 -0
- package/dist/shared/concurrency/installer-retry.js +10 -0
- package/dist/shared/concurrency/limiter.d.ts +19 -0
- package/dist/shared/concurrency/limiter.js +67 -0
- package/dist/shared/concurrency/pools.d.ts +7 -0
- package/dist/shared/concurrency/pools.js +9 -0
- package/dist/shared/download/archive.d.ts +2 -0
- package/dist/shared/download/archive.js +11 -1
- package/dist/shared/download/bounded-fetch.d.ts +13 -0
- package/dist/shared/download/bounded-fetch.js +40 -0
- package/dist/shared/download/downloader.d.ts +5 -0
- package/dist/shared/download/downloader.js +50 -38
- package/dist/shared/download/index.d.ts +2 -1
- package/dist/shared/download/index.js +2 -1
- package/dist/shared/readiness.d.ts +2 -2
- package/dist/shared/readiness.js +2 -2
- package/dist/web/index.html +1 -1
- package/dist/web/{main-OUUQYNK4.js → main-CCILLX2M.js} +67 -67
- 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/sandbox/addons/browser-use-mcp/requirements.in +1 -0
- package/sandbox/addons/browser-use-mcp/requirements.txt +2350 -0
- package/sandbox/addons/chrome-devtools-mcp/package-lock.json +38 -0
- package/sandbox/addons/chrome-devtools-mcp/package.json +7 -0
- package/sandbox/addons/comet-mcp/package-lock.json +1277 -0
- package/sandbox/addons/comet-mcp/package.json +7 -0
- package/sandbox/addons/perplexity-mcp/package-lock.json +1655 -0
- package/sandbox/addons/perplexity-mcp/package.json +7 -0
- package/sandbox/scripts/add-firewall-port.ps1 +18 -4
- package/sandbox/scripts/set-machine-environment.ps1 +30 -15
- package/sandbox/templates/fivem/README.txt +6 -2
- package/sandbox/templates/fivem/cs/Client/Client.csproj +15 -0
- package/sandbox/templates/fivem/cs/Client/ClientMain.cs +20 -0
- package/sandbox/templates/fivem/cs/Server/Server.csproj +14 -0
- package/sandbox/templates/fivem/cs/Server/ServerMain.cs +20 -0
- package/sandbox/templates/fivem/cs/fxmanifest.lua +11 -0
- package/sandbox/templates/fivem/js/client.js +12 -0
- package/sandbox/templates/fivem/js/fxmanifest.lua +9 -0
- package/sandbox/templates/fivem/js/server.js +6 -0
- package/sandbox/templates/fivem/lua/client.lua +8 -0
- package/sandbox/templates/fivem/lua/fxmanifest.lua +10 -0
- package/sandbox/templates/fivem/lua/server.lua +6 -0
- package/sandbox/templates/fivem/server.cfg +37 -0
- package/sandbox/templates/fivem/ts/build.js +17 -0
- package/sandbox/templates/fivem/ts/fxmanifest.lua +9 -0
- package/sandbox/templates/fivem/ts/package.json +16 -0
- package/sandbox/templates/fivem/ts/src/client/client.ts +12 -0
- package/sandbox/templates/fivem/ts/src/client/tsconfig.json +13 -0
- package/sandbox/templates/fivem/ts/src/server/server.ts +6 -0
- package/sandbox/templates/fivem/ts/src/server/tsconfig.json +13 -0
- package/schemas/config.schema.json +56 -27
- package/schemas/sandbox-config.schema.json +37 -14
package/dist/bin/claude-host.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
run
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-7YPEDAJD.js";
|
|
6
|
+
import "./chunk-USTRSHIE.js";
|
|
7
7
|
|
|
8
8
|
// src/bin/claude-host.ts
|
|
9
9
|
var args = process.argv.slice(2);
|
package/dist/bin/claude-sbx.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
run
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-7YPEDAJD.js";
|
|
6
|
+
import "./chunk-USTRSHIE.js";
|
|
7
7
|
|
|
8
8
|
// src/bin/claude-sbx.ts
|
|
9
9
|
run(process.argv.slice(2), { harness: "claude" });
|
package/dist/bin/codex-sbx.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
run
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-7YPEDAJD.js";
|
|
6
|
+
import "./chunk-USTRSHIE.js";
|
|
7
7
|
|
|
8
8
|
// src/bin/codex-sbx.ts
|
|
9
9
|
run(process.argv.slice(2), { harness: "codex" });
|
package/dist/bin/gemini-sbx.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
run
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-7YPEDAJD.js";
|
|
6
|
+
import "./chunk-USTRSHIE.js";
|
|
7
7
|
|
|
8
8
|
// src/bin/gemini-sbx.ts
|
|
9
9
|
run(process.argv.slice(2), { harness: "gemini" });
|
package/dist/bin/sandbox.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
run
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-7YPEDAJD.js";
|
|
6
|
+
import "./chunk-USTRSHIE.js";
|
|
7
7
|
|
|
8
8
|
// src/bin/sandbox.ts
|
|
9
9
|
run(process.argv.slice(2));
|
package/dist/bin/sbx-hide.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
run
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-7YPEDAJD.js";
|
|
6
|
+
import "./chunk-USTRSHIE.js";
|
|
7
7
|
|
|
8
8
|
// src/bin/sbx-hide.ts
|
|
9
9
|
run(process.argv.slice(2), { command: "hide" });
|
package/dist/bin/sbx-show.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
run
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-7YPEDAJD.js";
|
|
6
|
+
import "./chunk-USTRSHIE.js";
|
|
7
7
|
|
|
8
8
|
// src/bin/sbx-show.ts
|
|
9
9
|
run(process.argv.slice(2), { command: "show" });
|
package/dist/cli/manifest.d.ts
CHANGED
|
@@ -296,7 +296,7 @@ declare const COMMAND_LIST: readonly [{
|
|
|
296
296
|
readonly name: "account";
|
|
297
297
|
readonly summary: "agent logins (list, save, use, default, remove) and service sign-ins (status, import, login, logout)";
|
|
298
298
|
readonly group: "Projects & accounts";
|
|
299
|
-
readonly examples: readonly ["sandbox account save work save the login you signed in with inside the sandbox", "sandbox account use work the sandbox uses it (running sessions restart)", "sandbox account status the service sign-ins (Epic, Steam, Unity, signing keys ...)", "sandbox account import epic take this PC's Epic Games Launcher sign-in for sandboxes", "sandbox account login cfx type a FiveM server key to keep for sandboxes", "sandbox account logout steam forget a service sign-in", "sandbox account save free --api-key save an Anthropic API key you paste in (not shown)"];
|
|
299
|
+
readonly examples: readonly ["sandbox account save work save the login you signed in with inside the sandbox", "sandbox account use work the sandbox uses it (running sessions restart)", "sandbox account status the service sign-ins (Epic, Steam, Unity, signing keys ...)", "sandbox account import epic take this PC's Epic Games Launcher sign-in for sandboxes", "sandbox account login cfx type a FiveM server key to keep for sandboxes", "sandbox account login perplexity type a Perplexity API key (or: import perplexity --from .env)", "sandbox account logout steam forget a service sign-in", "sandbox account save free --api-key save an Anthropic API key you paste in (not shown)"];
|
|
300
300
|
readonly args: readonly [{
|
|
301
301
|
readonly name: "action";
|
|
302
302
|
readonly description: "what to do";
|
|
@@ -304,7 +304,7 @@ declare const COMMAND_LIST: readonly [{
|
|
|
304
304
|
readonly choices: readonly ["list", "save", "use", "default", "rename", "remove"];
|
|
305
305
|
}, {
|
|
306
306
|
readonly name: "name";
|
|
307
|
-
readonly description: "account name, or the service (status, import, login, logout): epic, steam, unity, cfx, keystore, play, expo or
|
|
307
|
+
readonly description: "account name, or the service (status, import, login, logout): epic, steam, unity, cfx, keystore, play, expo, appstore, perplexity or comet";
|
|
308
308
|
readonly required: false;
|
|
309
309
|
readonly choices: "accounts";
|
|
310
310
|
}];
|
package/dist/cli/manifest.js
CHANGED
|
@@ -286,6 +286,7 @@ const COMMAND_LIST = [
|
|
|
286
286
|
'sandbox account status the service sign-ins (Epic, Steam, Unity, signing keys ...)',
|
|
287
287
|
"sandbox account import epic take this PC's Epic Games Launcher sign-in for sandboxes",
|
|
288
288
|
'sandbox account login cfx type a FiveM server key to keep for sandboxes',
|
|
289
|
+
'sandbox account login perplexity type a Perplexity API key (or: import perplexity --from .env)',
|
|
289
290
|
'sandbox account logout steam forget a service sign-in',
|
|
290
291
|
'sandbox account save free --api-key save an Anthropic API key you paste in (not shown)',
|
|
291
292
|
],
|
|
@@ -298,7 +299,7 @@ const COMMAND_LIST = [
|
|
|
298
299
|
},
|
|
299
300
|
{
|
|
300
301
|
name: 'name',
|
|
301
|
-
description: 'account name, or the service (status, import, login, logout): epic, steam, unity, cfx, keystore, play, expo or
|
|
302
|
+
description: 'account name, or the service (status, import, login, logout): epic, steam, unity, cfx, keystore, play, expo, appstore, perplexity or comet',
|
|
302
303
|
required: false,
|
|
303
304
|
choices: 'accounts',
|
|
304
305
|
},
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { SECTION_LABELS } from './shell.js';
|
|
2
|
+
type Section = (typeof SECTION_LABELS)[number];
|
|
3
|
+
export type CommandPlace = {
|
|
4
|
+
readonly place: `${Section}${string}`;
|
|
5
|
+
} | {
|
|
6
|
+
readonly exempt: string;
|
|
7
|
+
};
|
|
8
|
+
/** Every command of cli/manifest.ts (hand-written and from the shared core's CLI hints). */
|
|
9
|
+
export declare const COMMAND_PLACES: Readonly<Record<string, CommandPlace>>;
|
|
10
|
+
/**
|
|
11
|
+
* Operations and queries that declare `surfaces.except.menu`: the id and why the menu does without them. A definition
|
|
12
|
+
* with a menu exemption that is not here fails the coverage test.
|
|
13
|
+
*/
|
|
14
|
+
export declare const MENU_EXEMPT: Readonly<Record<string, string>>;
|
|
15
|
+
/** Setting keys (or key prefixes ending in a dot) the menu's Settings page does not list as a row. */
|
|
16
|
+
export declare const SETTING_PLACES: Readonly<Record<string, string>>;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/** Every command of cli/manifest.ts (hand-written and from the shared core's CLI hints). */
|
|
2
|
+
export const COMMAND_PLACES = {
|
|
3
|
+
launch: { place: 'Agents > Start (with the options of the tab)' },
|
|
4
|
+
start: { place: 'Agents > Start several' },
|
|
5
|
+
generate: { place: 'Maintenance > More commands' },
|
|
6
|
+
attach: { place: 'Sessions (Enter on a session)' },
|
|
7
|
+
resume: { place: 'Sessions (key o: reopen last sessions)' },
|
|
8
|
+
db: { place: 'Sandbox > Databases' },
|
|
9
|
+
exec: { place: 'Maintenance > More commands' },
|
|
10
|
+
projects: { place: 'Sandbox > Projects' },
|
|
11
|
+
account: { place: 'Accounts' },
|
|
12
|
+
data: { place: 'Maintenance > Data' },
|
|
13
|
+
storage: { place: 'Maintenance > Storage' },
|
|
14
|
+
engine: { place: 'Maintenance > Engine' },
|
|
15
|
+
sync: { place: 'Maintenance > More commands' },
|
|
16
|
+
logs: { place: 'Maintenance > Logs (key f follows)' },
|
|
17
|
+
setup: { place: 'Maintenance > Health' },
|
|
18
|
+
doctor: { place: 'Maintenance > Health' },
|
|
19
|
+
repair: { place: 'Maintenance > Health' },
|
|
20
|
+
'self-test': { exempt: 'a developer check that refuses to run outside a throwaway machine' },
|
|
21
|
+
config: { place: 'Settings (every setting) and Maintenance > More commands' },
|
|
22
|
+
'agent-commands': { place: 'Agents > Agent commands' },
|
|
23
|
+
vpn: { place: 'Settings > Network > VPN' },
|
|
24
|
+
github: { place: 'Accounts > GitHub (and Settings > Security)' },
|
|
25
|
+
'host-claude': { place: 'Agents > On this PC' },
|
|
26
|
+
host: { place: 'Agents > On this PC' },
|
|
27
|
+
menu: { exempt: 'it is the menu' },
|
|
28
|
+
web: { place: 'Maintenance > Web UI' },
|
|
29
|
+
remote: { exempt: "it opens this menu on another Windows user's web UI: the menu cannot start itself inside itself" },
|
|
30
|
+
_watch: { exempt: 'internal: the background history sync' },
|
|
31
|
+
_web: { exempt: 'internal: the web server process' },
|
|
32
|
+
show: { place: 'Sandbox > Status' },
|
|
33
|
+
hide: { place: 'Sandbox > Status' },
|
|
34
|
+
stop: { place: 'Sandbox > Status' },
|
|
35
|
+
cleanup: { place: 'Sandbox > Status (when a dead sandbox left programs behind)' },
|
|
36
|
+
restart: { place: 'Sessions (key r)' },
|
|
37
|
+
shell: { place: 'Sessions (key s)' },
|
|
38
|
+
close: { place: 'Sessions' },
|
|
39
|
+
clean: { place: 'Maintenance > Data' },
|
|
40
|
+
update: { place: 'Maintenance > Updates' },
|
|
41
|
+
migrate: { place: 'Maintenance > Updates' },
|
|
42
|
+
status: { place: 'Sandbox > Status' },
|
|
43
|
+
sessions: { place: 'Sessions' },
|
|
44
|
+
audit: { place: 'Maintenance > Activity' },
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Operations and queries that declare `surfaces.except.menu`: the id and why the menu does without them. A definition
|
|
48
|
+
* with a menu exemption that is not here fails the coverage test.
|
|
49
|
+
*/
|
|
50
|
+
export const MENU_EXEMPT = {
|
|
51
|
+
'agents.start': 'the menu starts agents with launch, which can boot the sandbox and attach this terminal',
|
|
52
|
+
'engine.check': 'the Engine category shows every engine and its check with the fixes (engine.status)',
|
|
53
|
+
'files.browse': 'the menu asks for a path as text and checks it',
|
|
54
|
+
'settings.get': 'Settings shows every value',
|
|
55
|
+
};
|
|
56
|
+
/** Setting keys (or key prefixes ending in a dot) the menu's Settings page does not list as a row. */
|
|
57
|
+
export const SETTING_PLACES = {
|
|
58
|
+
'apps.install': 'the Apps section (a tick per app)',
|
|
59
|
+
'apps.custom': 'the Apps section (your own apps)',
|
|
60
|
+
$schema: 'not a setting: the JSON schema address of the file',
|
|
61
|
+
};
|
|
@@ -22,6 +22,8 @@ export declare class MenuOperations {
|
|
|
22
22
|
perform(action: Action, where: Where, busy?: ShowBusy, onOutput?: (output: unknown) => void): Promise<Performed>;
|
|
23
23
|
/** The values of an action's fields, from the editors that fit them (undefined: one was backed out of). */
|
|
24
24
|
private fields;
|
|
25
|
+
/** A failure that names a fix: a dialog with the fix as a button; its result replaces the failure notice. */
|
|
26
|
+
private offerFix;
|
|
25
27
|
/**
|
|
26
28
|
* Runs a definition with this input and returns the notice to show: its text (✓), the problem and its fix (✘), or
|
|
27
29
|
* undefined when a question was declined (nothing changed, nothing to say).
|
package/dist/cli/menu/io-menu.js
CHANGED
|
@@ -5,10 +5,13 @@
|
|
|
5
5
|
import { operationById } from '../../app/features/defs.js';
|
|
6
6
|
import { runDefinition } from '../../app/registry.js';
|
|
7
7
|
import { Cancelled, ioFromAsker, SchemaNode, toWireError, } from '../../app/kernel/index.js';
|
|
8
|
+
import { spawn } from 'node:child_process';
|
|
8
9
|
import { errMsg } from '../../core/util/index.js';
|
|
10
|
+
import { SYSTEM } from '../../shared/system.js';
|
|
9
11
|
import { Theme } from '../tui/index.js';
|
|
10
12
|
import { askPath } from './settings/ask-path.js';
|
|
11
13
|
import { ValueEditor } from './settings/value-editor.js';
|
|
14
|
+
import { MENU_VIEWS } from './views.js';
|
|
12
15
|
async function ask(app, where, q, said) {
|
|
13
16
|
const lines = [...said, ...(q.lines ?? []), ...('problem' in q && q.problem ? [Theme.warn(q.problem)] : [])];
|
|
14
17
|
const path = [...where];
|
|
@@ -51,8 +54,27 @@ async function ask(app, where, q, said) {
|
|
|
51
54
|
});
|
|
52
55
|
}
|
|
53
56
|
}
|
|
57
|
+
/** The menu section (and category) that shows a view, for a link to it. */
|
|
58
|
+
function placeOf(view) {
|
|
59
|
+
const place = MENU_VIEWS.find((m) => m.view.id === view);
|
|
60
|
+
if (!place)
|
|
61
|
+
return undefined;
|
|
62
|
+
return { section: place.section, ...(view === 'agentEnv' ? { category: 'env' } : {}) };
|
|
63
|
+
}
|
|
64
|
+
/** Opens a page in the browser (https://github.com/ only). */
|
|
65
|
+
function openUrl(href) {
|
|
66
|
+
if (!/^https:\/\/github\.com\//.test(href))
|
|
67
|
+
return;
|
|
68
|
+
const child = spawn(SYSTEM.cmd(), ['/c', 'start', '""', href.replace(/&/g, '^&')], {
|
|
69
|
+
stdio: 'ignore',
|
|
70
|
+
detached: true,
|
|
71
|
+
windowsHide: true,
|
|
72
|
+
});
|
|
73
|
+
child.on('error', () => undefined);
|
|
74
|
+
child.unref();
|
|
75
|
+
}
|
|
54
76
|
/** Where a link goes in the menu: what needs the terminal is run on the normal screen. */
|
|
55
|
-
function follow(target) {
|
|
77
|
+
function follow(target, app) {
|
|
56
78
|
switch (target.kind) {
|
|
57
79
|
case 'terminal':
|
|
58
80
|
return { exit: { kind: 'run', argv: ['attach', target.session] } };
|
|
@@ -60,8 +82,19 @@ function follow(target) {
|
|
|
60
82
|
return { exit: { kind: 'run', argv: ['launch', '--harness', target.agent] } };
|
|
61
83
|
case 'command':
|
|
62
84
|
return { exit: { kind: 'run', argv: [...target.argv] } };
|
|
63
|
-
case 'view':
|
|
64
|
-
|
|
85
|
+
case 'view': {
|
|
86
|
+
const place = placeOf(target.view);
|
|
87
|
+
if (!place || !app)
|
|
88
|
+
return {};
|
|
89
|
+
return app.goTo(place.section, { category: place.category }).then(() => ({}));
|
|
90
|
+
}
|
|
91
|
+
case 'setting':
|
|
92
|
+
if (!app)
|
|
93
|
+
return {};
|
|
94
|
+
return app.goTo('Settings', { search: target.key }).then(() => ({}));
|
|
95
|
+
case 'url':
|
|
96
|
+
openUrl(target.href);
|
|
97
|
+
return { notice: Theme.muted('Opened ' + target.href + ' in your browser.') };
|
|
65
98
|
}
|
|
66
99
|
}
|
|
67
100
|
export class MenuOperations {
|
|
@@ -74,7 +107,7 @@ export class MenuOperations {
|
|
|
74
107
|
/** Does what an action of a page says: follows a link, or asks for its fields and runs its operation. */
|
|
75
108
|
async perform(action, where, busy, onOutput) {
|
|
76
109
|
if (action.kind === 'link')
|
|
77
|
-
return follow(action.target);
|
|
110
|
+
return follow(action.target, this.app);
|
|
78
111
|
const def = operationById(action.op);
|
|
79
112
|
if (!def)
|
|
80
113
|
return { notice: Theme.error(Theme.glyph.cross + ' Unknown operation ' + action.op + '.') };
|
|
@@ -105,6 +138,17 @@ export class MenuOperations {
|
|
|
105
138
|
}
|
|
106
139
|
return answers;
|
|
107
140
|
}
|
|
141
|
+
/** A failure that names a fix: a dialog with the fix as a button; its result replaces the failure notice. */
|
|
142
|
+
async offerFix(problem, where, busy) {
|
|
143
|
+
const fix = problem.action;
|
|
144
|
+
const def = fix ? operationById(fix.op) : undefined;
|
|
145
|
+
if (!fix || !def)
|
|
146
|
+
return undefined;
|
|
147
|
+
const yes = await this.app.ask(problem.message, problem.fix ? [problem.fix] : [], fix.label);
|
|
148
|
+
if (!yes)
|
|
149
|
+
return undefined;
|
|
150
|
+
return (await this.run(def, fix.input ?? {}, where, busy)) ?? Theme.ok(Theme.glyph.ok + ' Done.');
|
|
151
|
+
}
|
|
108
152
|
/**
|
|
109
153
|
* Runs a definition with this input and returns the notice to show: its text (✓), the problem and its fix (✘), or
|
|
110
154
|
* undefined when a question was declined (nothing changed, nothing to say).
|
|
@@ -129,7 +173,8 @@ export class MenuOperations {
|
|
|
129
173
|
const problem = toWireError(e);
|
|
130
174
|
if (problem.kind === 'bug')
|
|
131
175
|
return Theme.error(Theme.glyph.cross + ' ' + errMsg(e));
|
|
132
|
-
|
|
176
|
+
const notice = Theme.error(Theme.glyph.cross + ' ' + problem.message) + (problem.fix ? Theme.muted(' ' + problem.fix) : '');
|
|
177
|
+
return (await this.offerFix(problem, where, busy)) ?? notice;
|
|
133
178
|
}
|
|
134
179
|
}
|
|
135
180
|
}
|
|
@@ -33,7 +33,7 @@ export function accountsOptions(m) {
|
|
|
33
33
|
...m.services.map((s) => ({
|
|
34
34
|
id: serviceCategory(s.kind),
|
|
35
35
|
label: s.label,
|
|
36
|
-
description: 'Your ' + s.label + ' sign-in for sandboxes that use ' + s.
|
|
36
|
+
description: 'Your ' + s.label + ' sign-in for sandboxes that use ' + s.usedFor + '.',
|
|
37
37
|
})),
|
|
38
38
|
],
|
|
39
39
|
items: [
|
|
@@ -107,6 +107,12 @@ function startRow(item, m, cwd) {
|
|
|
107
107
|
function envView(m) {
|
|
108
108
|
return m.claudeEnv ? menuView(agentEnvPage(m.claudeEnv), { category: 'env', refresh: false }) : undefined;
|
|
109
109
|
}
|
|
110
|
+
/** What the last start was, in words: the agent and the folder it was for (never the command line). */
|
|
111
|
+
function lastStart(argv) {
|
|
112
|
+
const at = argv.indexOf('--harness');
|
|
113
|
+
const agent = at >= 0 ? argv[at + 1] : argv[0];
|
|
114
|
+
return agent ?? 'last start';
|
|
115
|
+
}
|
|
110
116
|
/** The list for the agents section. Pure. */
|
|
111
117
|
export function agentsOptions(m, cwd = process.cwd()) {
|
|
112
118
|
const view = startView(m);
|
|
@@ -123,8 +129,8 @@ export function agentsOptions(m, cwd = process.cwd()) {
|
|
|
123
129
|
label: 'Repeat last',
|
|
124
130
|
category: 'start',
|
|
125
131
|
section: 'Quick start',
|
|
126
|
-
hint: Theme.muted(Text.truncate(
|
|
127
|
-
description: '
|
|
132
|
+
hint: Theme.muted(Text.truncate(lastStart(m.last), 50)),
|
|
133
|
+
description: 'Starts the same agent again with the same options.',
|
|
128
134
|
},
|
|
129
135
|
]
|
|
130
136
|
: []),
|
|
@@ -8,6 +8,7 @@ import { type UpdatesStatus } from '../../../app/features/updates/updates.def.js
|
|
|
8
8
|
import { type WebStatus } from '../../../app/features/web/index.js';
|
|
9
9
|
import type { Context } from '../../commands/context.js';
|
|
10
10
|
import { type App, type ListOptions, type ListResult } from '../../tui/index.js';
|
|
11
|
+
import { type MenuView } from '../render-view.js';
|
|
11
12
|
import { ListPage, type Outcome } from './list-page.js';
|
|
12
13
|
export interface MaintenanceModel {
|
|
13
14
|
/** The Data & storage category's storage rows: the data folder and contained storage (null until read). */
|
|
@@ -42,6 +43,11 @@ export interface MaintenanceModel {
|
|
|
42
43
|
summary: string;
|
|
43
44
|
}[];
|
|
44
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* The logs view's rows and keys for the Logs category (its own empty row is left out: the category shows the page's
|
|
48
|
+
* "Nothing here yet.").
|
|
49
|
+
*/
|
|
50
|
+
export declare function logsMenu(files: LogFiles): MenuView;
|
|
45
51
|
/** The list for the maintenance tab. Pure. */
|
|
46
52
|
export declare function maintenanceOptions(m: MaintenanceModel): ListOptions<string>;
|
|
47
53
|
export declare class MaintenancePage extends ListPage<string> {
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// what is stored, clean-up), Health (doctor, repair and this PC's setup together), Activity (the audit log), the logs,
|
|
3
3
|
// and the less common commands. Each is a category on the left and loads when you open it.
|
|
4
4
|
import { dataPage, showData } from '../../../app/features/data/index.js';
|
|
5
|
+
import { link } from '../../../app/kernel/index.js';
|
|
5
6
|
import { readQuery } from '../../../app/registry.js';
|
|
6
7
|
import { errMsg } from '../../../core/util/index.js';
|
|
7
8
|
import { enginePage, engineLeftovers, engineStatus, } from '../../../app/features/engine/index.js';
|
|
@@ -108,8 +109,14 @@ const NO_UPDATES = {
|
|
|
108
109
|
* The logs view's rows and keys for the Logs category (its own empty row is left out: the category shows the page's
|
|
109
110
|
* "Nothing here yet.").
|
|
110
111
|
*/
|
|
111
|
-
function logsMenu(files) {
|
|
112
|
-
|
|
112
|
+
export function logsMenu(files) {
|
|
113
|
+
// Following a log runs the hand-written `logs --follow` on the normal screen: a menu key, not a page link.
|
|
114
|
+
const follow = link({ kind: 'command', argv: ['logs', '--follow'] }, 'Follow the newest log', {
|
|
115
|
+
key: 'f',
|
|
116
|
+
verb: 'follow in the terminal',
|
|
117
|
+
importance: 2,
|
|
118
|
+
});
|
|
119
|
+
return menuView({ ...logsPage(files), empty: undefined, actions: [follow] }, { category: 'logs', refresh: false });
|
|
113
120
|
}
|
|
114
121
|
/** The audit view (src/app/features/audit) as the Activity category's rows and keys (none until it was read). */
|
|
115
122
|
function auditMenu(m) {
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { type SessionsList } from '../../../app/features/sessions/index.js';
|
|
2
2
|
import type { Context } from '../../commands/context.js';
|
|
3
3
|
import type { App, ListOptions, ListResult } from '../../tui/index.js';
|
|
4
|
+
import { type MenuView } from '../render-view.js';
|
|
4
5
|
import { ListPage, type Outcome } from './list-page.js';
|
|
5
6
|
/** What the page shows: the sessions query's result (the folder column is never shown here). */
|
|
6
7
|
export type SessionsModel = Omit<SessionsList, 'wide'>;
|
|
8
|
+
export declare function sessionsMenu(m: SessionsModel): MenuView;
|
|
7
9
|
/** The list for the sessions tab. Pure. */
|
|
8
10
|
export declare function sessionsOptions(m: SessionsModel): ListOptions<string>;
|
|
9
11
|
export declare class SessionsPage extends ListPage<string> {
|
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
// Section 2: the agent sessions of the running sandbox, as the sessions view shows them (src/app/features/sessions).
|
|
2
2
|
// Enter shows one in this terminal (the one thing that leaves the menu), r restarts the agents.
|
|
3
|
+
import { link } from '../../../app/kernel/index.js';
|
|
3
4
|
import { listSessions, sessionsPage } from '../../../app/features/sessions/index.js';
|
|
4
5
|
import { readQuery } from '../../../app/registry.js';
|
|
5
6
|
import { MenuOperations } from '../io-menu.js';
|
|
6
7
|
import { menuView } from '../render-view.js';
|
|
7
8
|
import { ListPage } from './list-page.js';
|
|
8
|
-
function
|
|
9
|
-
|
|
9
|
+
export function sessionsMenu(m) {
|
|
10
|
+
// Reopening the last sessions runs the hand-written `resume` on the normal screen: a key of the menu, not a link.
|
|
11
|
+
const resume = link({ kind: 'command', argv: ['resume'] }, 'Reopen last sessions', {
|
|
12
|
+
key: 'o',
|
|
13
|
+
verb: 'reopen last sessions',
|
|
14
|
+
importance: 2,
|
|
15
|
+
});
|
|
16
|
+
const page = sessionsPage({ ...m, wide: false });
|
|
17
|
+
return menuView({ ...page, actions: [...(page.actions ?? []), resume] });
|
|
10
18
|
}
|
|
11
19
|
/** The list for the sessions tab. Pure. */
|
|
12
20
|
export function sessionsOptions(m) {
|
|
13
|
-
const v =
|
|
21
|
+
const v = sessionsMenu(m);
|
|
14
22
|
return { path: [], items: v.items, actions: v.actions, enterLabel: v.enterLabel };
|
|
15
23
|
}
|
|
16
24
|
export class SessionsPage extends ListPage {
|
|
@@ -31,7 +39,7 @@ export class SessionsPage extends ListPage {
|
|
|
31
39
|
return sessionsOptions(this.model);
|
|
32
40
|
}
|
|
33
41
|
async act(result) {
|
|
34
|
-
const chosen =
|
|
42
|
+
const chosen = sessionsMenu(this.model).resolve(result);
|
|
35
43
|
if (!chosen)
|
|
36
44
|
return {};
|
|
37
45
|
if (chosen.kind === 'refresh')
|
|
@@ -161,7 +161,18 @@ export class SettingsPage extends ListPage {
|
|
|
161
161
|
lastFailure: null,
|
|
162
162
|
};
|
|
163
163
|
/** Whether a GitHub token is saved (never the token): the token row needs only its state. */
|
|
164
|
-
github = {
|
|
164
|
+
github = {
|
|
165
|
+
shareToken: false,
|
|
166
|
+
gitAccess: 'full',
|
|
167
|
+
token: 'none',
|
|
168
|
+
kind: null,
|
|
169
|
+
savedAt: null,
|
|
170
|
+
login: null,
|
|
171
|
+
expiresAt: null,
|
|
172
|
+
repoCount: null,
|
|
173
|
+
checkedAt: null,
|
|
174
|
+
tokenUrl: '',
|
|
175
|
+
};
|
|
165
176
|
constructor(app, files, draft, ctx) {
|
|
166
177
|
super(app);
|
|
167
178
|
this.files = files;
|
|
@@ -94,7 +94,7 @@ export class RemoteMenu {
|
|
|
94
94
|
if (action.kind === 'link') {
|
|
95
95
|
notice =
|
|
96
96
|
action.target.kind === 'terminal'
|
|
97
|
-
? Theme.muted('Attach to it from your own terminal
|
|
97
|
+
? Theme.muted('Attach to it from your own terminal (session ' + safeText(action.target.session) + ').')
|
|
98
98
|
: Theme.muted('That opens on ' + safeText(this.owner) + "'s side only.");
|
|
99
99
|
continue;
|
|
100
100
|
}
|
package/dist/cli/menu/shell.d.ts
CHANGED
|
@@ -82,6 +82,11 @@ export declare class Shell implements Screen<ShellExit> {
|
|
|
82
82
|
restore(view: MenuView): Promise<void>;
|
|
83
83
|
/** Opens a section by index (loads its data); the first time, it goes back to the category and search it had. */
|
|
84
84
|
openTab(index: number): Promise<void>;
|
|
85
|
+
/** Opens a section by name, on a category and/or with a search typed (a link from another page). */
|
|
86
|
+
goTo(section: string, where?: {
|
|
87
|
+
category?: string;
|
|
88
|
+
search?: string;
|
|
89
|
+
}): Promise<void>;
|
|
85
90
|
/** Puts the keyboard in the navigation or in the list. */
|
|
86
91
|
setFocus(focus: 'nav' | 'list'): void;
|
|
87
92
|
/** Loads the open section again (after a command ran). */
|
package/dist/cli/menu/shell.js
CHANGED
|
@@ -27,6 +27,7 @@ export class Shell {
|
|
|
27
27
|
this.draft = draft;
|
|
28
28
|
this.afterSave = afterSave;
|
|
29
29
|
app.nav = () => this.nav();
|
|
30
|
+
app.goTo = (section, where) => this.goTo(section, where);
|
|
30
31
|
}
|
|
31
32
|
get page() {
|
|
32
33
|
return this.pages[this.active];
|
|
@@ -86,6 +87,18 @@ export class Shell {
|
|
|
86
87
|
if (wanted?.search)
|
|
87
88
|
this.page.restoreSearch?.(wanted.search);
|
|
88
89
|
}
|
|
90
|
+
/** Opens a section by name, on a category and/or with a search typed (a link from another page). */
|
|
91
|
+
async goTo(section, where = {}) {
|
|
92
|
+
const index = this.pages.findIndex((p) => p.label === section);
|
|
93
|
+
if (index < 0)
|
|
94
|
+
return;
|
|
95
|
+
await this.openTab(index);
|
|
96
|
+
if (where.category)
|
|
97
|
+
await this.page.selectCategory(where.category);
|
|
98
|
+
if (where.search)
|
|
99
|
+
this.page.restoreSearch?.(where.search);
|
|
100
|
+
this.setFocus('list');
|
|
101
|
+
}
|
|
89
102
|
/** Puts the keyboard in the navigation or in the list. */
|
|
90
103
|
setFocus(focus) {
|
|
91
104
|
this.focus = focus;
|
package/dist/cli/report.js
CHANGED
|
@@ -41,6 +41,8 @@ export function report(e) {
|
|
|
41
41
|
console.error(c.red('Error: ') + plainText(e.message));
|
|
42
42
|
if (e.fix)
|
|
43
43
|
console.error(' Fix: ' + plainText(e.fix));
|
|
44
|
+
if (e.action?.cli)
|
|
45
|
+
console.error(' Run: ' + plainText(e.action.cli));
|
|
44
46
|
return 1;
|
|
45
47
|
}
|
|
46
48
|
console.error(c.red('Unexpected error: ') + errMsg(e));
|
package/dist/cli/tui/app.d.ts
CHANGED
|
@@ -19,6 +19,11 @@ export declare class App {
|
|
|
19
19
|
onKey: () => void;
|
|
20
20
|
/** The navigation on the left of every screen (none: no navigation column). */
|
|
21
21
|
nav: () => NavState | undefined;
|
|
22
|
+
/** Opens another section of the menu (the shell sets it): what a link to a setting or a view does. */
|
|
23
|
+
goTo: (section: string, where?: {
|
|
24
|
+
category?: string;
|
|
25
|
+
search?: string;
|
|
26
|
+
}) => Promise<void>;
|
|
22
27
|
/** The screens being shown, innermost last: a dialog is drawn over the one below it. */
|
|
23
28
|
private readonly shown;
|
|
24
29
|
private redrawNow;
|
package/dist/cli/tui/app.js
CHANGED
|
@@ -25,6 +25,8 @@ export class App {
|
|
|
25
25
|
onKey = () => undefined;
|
|
26
26
|
/** The navigation on the left of every screen (none: no navigation column). */
|
|
27
27
|
nav = () => undefined;
|
|
28
|
+
/** Opens another section of the menu (the shell sets it): what a link to a setting or a view does. */
|
|
29
|
+
goTo = () => Promise.resolve();
|
|
28
30
|
/** The screens being shown, innermost last: a dialog is drawn over the one below it. */
|
|
29
31
|
shown = [];
|
|
30
32
|
redrawNow = null;
|
|
@@ -55,6 +55,8 @@ export const DEFAULTS = {
|
|
|
55
55
|
play: { share: false },
|
|
56
56
|
expo: { share: false },
|
|
57
57
|
appstore: { share: false },
|
|
58
|
+
perplexity: { share: false },
|
|
59
|
+
comet: { share: false },
|
|
58
60
|
},
|
|
59
61
|
pcInstalls: { steamGames: false, epicGames: false, unrealEngines: false, unityEditors: false },
|
|
60
62
|
provisioning: {
|
|
@@ -192,7 +194,7 @@ export const DEFAULTS = {
|
|
|
192
194
|
npmBin: 'codex',
|
|
193
195
|
arguments: [],
|
|
194
196
|
environment: {},
|
|
195
|
-
home: { env: { CODEX_HOME: 'codex' }, loginFiles: ['auth.json'], hostDir: '~/.codex' },
|
|
197
|
+
home: { env: { CODEX_HOME: 'codex' }, loginFiles: ['auth.json', '.credentials.json'], hostDir: '~/.codex' },
|
|
196
198
|
localState: { CODEX_SQLITE_HOME: 'sqlite' },
|
|
197
199
|
// Its own command sandbox keeps local users' passwords sealed with DPAPI: unreadable in the next sandbox
|
|
198
200
|
// ("CryptUnprotectData" on every command), so it sets that sandbox up again at each boot. tmp\arg0: folders
|
|
@@ -24,4 +24,10 @@ export declare const AccountsSchema: z.ZodObject<{
|
|
|
24
24
|
appstore: z.ZodObject<{
|
|
25
25
|
share: z.ZodBoolean;
|
|
26
26
|
}, z.core.$strict>;
|
|
27
|
+
perplexity: z.ZodObject<{
|
|
28
|
+
share: z.ZodBoolean;
|
|
29
|
+
}, z.core.$strict>;
|
|
30
|
+
comet: z.ZodObject<{
|
|
31
|
+
share: z.ZodBoolean;
|
|
32
|
+
}, z.core.$strict>;
|
|
27
33
|
}, z.core.$strict>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// accounts: which saved service sign-ins sandboxes get (the sign-ins themselves are not settings: they are kept
|
|
2
2
|
// encrypted by `sandbox account import|login`, or come back from a sandbox you signed in in).
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
-
import { SERVICE_SPECS } from '../../shared/accounts/kinds.js';
|
|
4
|
+
import { SERVICE_SPECS, usedByText } from '../../shared/accounts/kinds.js';
|
|
5
5
|
function share(kind, how) {
|
|
6
6
|
const spec = SERVICE_SPECS[kind];
|
|
7
7
|
return z.strictObject({
|
|
@@ -10,7 +10,7 @@ function share(kind, how) {
|
|
|
10
10
|
.describe('Hand your saved ' +
|
|
11
11
|
spec.label +
|
|
12
12
|
' sign-in to sandboxes that use ' +
|
|
13
|
-
spec.usedBy
|
|
13
|
+
usedByText(spec.usedBy) +
|
|
14
14
|
' (' +
|
|
15
15
|
how +
|
|
16
16
|
'). Kept encrypted on this PC; ' +
|
|
@@ -20,13 +20,15 @@ function share(kind, how) {
|
|
|
20
20
|
}
|
|
21
21
|
export const AccountsSchema = z
|
|
22
22
|
.strictObject({
|
|
23
|
-
epic: share('epic', "sign in to the launcher once in a sandbox, or take this PC's
|
|
24
|
-
steam: share('steam', 'sign in once with sbx-steam login, or
|
|
25
|
-
unity: share('unity', "sign in once in a sandbox, or take this PC's licence
|
|
26
|
-
cfx: share('cfx', '
|
|
27
|
-
keystore: share('keystore', '
|
|
28
|
-
play: share('play', '
|
|
29
|
-
expo: share('expo', '
|
|
30
|
-
appstore: share('appstore', '
|
|
23
|
+
epic: share('epic', "sign in to the launcher once in a sandbox, or take this PC's from Accounts"),
|
|
24
|
+
steam: share('steam', 'sign in once with sbx-steam login, or take it from a SteamCMD folder in Accounts'),
|
|
25
|
+
unity: share('unity', "sign in once in a sandbox, or take this PC's licence from Accounts"),
|
|
26
|
+
cfx: share('cfx', 'type the key in Accounts'),
|
|
27
|
+
keystore: share('keystore', 'import the upload.jks file in Accounts'),
|
|
28
|
+
play: share('play', 'import the service-account.json file in Accounts'),
|
|
29
|
+
expo: share('expo', 'type the token in Accounts'),
|
|
30
|
+
appstore: share('appstore', 'import the AuthKey.p8 file in Accounts'),
|
|
31
|
+
perplexity: share('perplexity', 'type the API key in Accounts, or import it from a .env file'),
|
|
32
|
+
comet: share('comet', 'sign in to Comet once in a sandbox: it cannot be taken from this PC'),
|
|
31
33
|
})
|
|
32
|
-
.describe('Service sign-ins for sandboxes (game stores, engines, app signing). Manage them in Accounts
|
|
34
|
+
.describe('Service sign-ins for sandboxes (game stores, engines, app signing, Perplexity). Manage them in Accounts.');
|