diff --git a/capture/output/nuxt-dev-install-module.svg b/capture/output/nuxt-dev-install-module.svg
index b9abff96e..e20fd6398 100644
--- a/capture/output/nuxt-dev-install-module.svg
+++ b/capture/output/nuxt-dev-install-module.svg
@@ -16,47 +16,44 @@ svg{--bg:#ffffff;--fg:#24292f;--chrome:#f6f8fa;--dot:#d0d7de}
nuxt dev (module auto-install)
-
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/⠋━━━━━━━━━━━━━━━━━━━━0% · 0.0s STARTING starting Nuxt...rrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━17% · 0.1s STARTING setting up modulesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━33% · 0.3s STARTING preparing apprrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━33% · 0.4s STARTING preparing apprrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━50% · 0.5s STARTING generating typesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━67% · 0.7s STARTING bundling apprrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 0.9s STARTING building serverrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.0s STARTING building serverrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.1s STARTING building serverrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.3s STARTING building serverrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.4s STARTING building serverrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.5s STARTING building serverrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/waiting for requests READY watching for changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-❯ Do you want to install @nuxt/scripts package?● Yes /○No
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠹ installing with npm · 0.0s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠸ installing with npm · 0.1s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠼ installing with npm · 0.2s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠴ installing with npm · 0.4s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠦ installing with npm · 0.5s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠧ installing with npm · 0.6s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠇ installing with npm · 0.7s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠏ installing with npm · 0.8s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠋ installing with npm · 1.0s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠙ installing with npm · 1.1s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠹ installing with npm · 1.2s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠸ installing with npm · 1.3s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠼ installing with npm · 1.4s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠴ installing with npm · 1.6s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠦ installing with npm · 1.7s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠧ installing with npm · 1.8s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠇ installing with npm · 1.9s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/⠏ installing with npm · 2.0s READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/✔ 1 request 482ms median ⚠ 1 warning READY ✔dependencies installed · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━33% · 0.1s BUILDING ✔dependencies installed · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━67% · 0.2s BUILDING ✔dependencies installed · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 0.2s BUILDING ✔dependencies installed · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 0.4s BUILDING ✔dependencies installed · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 0.5s BUILDING ✔dependencies installed · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 0.6s BUILDING ✔dependencies installed · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/✔ 1 request 482ms median READY ✔dependencies installed · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.77sLocalhttp://localhost:3000/✔ 1 request 482ms median READY watching for changes · GET /scripts · 200 · 482msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2━━━━━━━━━━━━━━━━━━━━0% · 0.0ms STARTING preparing your apprrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/⠋━━━━━━━━━━━━━━━━━━━━0% · 0.0ms STARTING starting Nuxt...oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━17% · 96ms STARTING setting up modulesoopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━33% · 201ms STARTING preparing appoopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━33% · 301ms STARTING preparing appoopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━50% · 439ms STARTING generating typesoopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━67% · 567ms STARTING bundling appoopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 687ms STARTING building serveroopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 807ms STARTING building serveroopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 927ms STARTING building serveroopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.04s STARTING building serveroopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/waiting for requests READY watching for changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+❯ Do you want to install @nuxt/scripts package?● Yes /○No
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠏ installing with npm · 0.0ms READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠋ installing with npm · 121ms READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠙ installing with npm · 242ms READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠹ installing with npm · 363ms READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠸ installing with npm · 483ms READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠼ installing with npm · 605ms READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠴ installing with npm · 725ms READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠦ installing with npm · 846ms READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠧ installing with npm · 967ms READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠇ installing with npm · 1.08s READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠏ installing with npm · 1.20s READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠋ installing with npm · 1.32s READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠙ installing with npm · 1.44s READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠹ installing with npm · 1.57s READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠸ installing with npm · 1.69s READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠼ installing with npm · 1.81s READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠴ installing with npm · 1.93s READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/⠦ installing with npm · 2.05s READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/✔ 1 request 406ms median ⚠ 1 warning READY ✔dependencies installed · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━17% · 36ms BUILDING ✔dependencies installed · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━67% · 195ms BUILDING ✔dependencies installed · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 243ms BUILDING ✔dependencies installed · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 368ms BUILDING ✔dependencies installed · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 488ms BUILDING ✔dependencies installed · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/✔ 1 request 406ms median READY ✔dependencies installed · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+✔ Do you want to install @nuxt/scripts package?Yes⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/✔ 1 request 406ms median READY watching for changes · GET /scripts · 200 · 406msrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
diff --git a/capture/output/nuxt-dev-install-module.txt b/capture/output/nuxt-dev-install-module.txt
index 196202885..d35bf3619 100644
--- a/capture/output/nuxt-dev-install-module.txt
+++ b/capture/output/nuxt-dev-install-module.txt
@@ -1,4 +1,4 @@
-styles: eba055abc05015cd
+styles: 676a790aac9bd9d9
Local http://localhost:3000/
Local http://localhost:3000/ ⠋
waiting for requests
@@ -23,6 +23,7 @@ styles: eba055abc05015cd
STARTING preparing your app
STARTING setting up modules
STARTING starting Nuxt...
+ o open · i info · l logs · n network · p routes · ? help · q quit
r restart · o open · i info · l logs · n network · p routes · ? help · q quit
⣠⣦⣠⡀ Nuxt x.y.z
⣠⣦⣠⡀ Nuxt x.y.z ready in 42 ms
diff --git a/capture/output/nuxt-dev-restart.svg b/capture/output/nuxt-dev-restart.svg
index 149cf764c..64a89d3c6 100644
--- a/capture/output/nuxt-dev-restart.svg
+++ b/capture/output/nuxt-dev-restart.svg
@@ -16,31 +16,29 @@ svg{--bg:#ffffff;--fg:#24292f;--chrome:#f6f8fa;--dot:#d0d7de}
nuxt dev (restart on config change)
-
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/⠋━━━━━━━━━━━━━━━━━━━━0% · 0.0s STARTING starting Nuxt...rrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━17% · 0.1s STARTING setting up modulesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━33% · 0.3s STARTING preparing apprrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━33% · 0.4s STARTING preparing apprrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━50% · 0.5s STARTING generating typesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━67% · 0.7s STARTING bundling apprrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 0.9s STARTING building serverrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.0s STARTING building serverrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.1s STARTING building serverrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.2s STARTING building serverrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.4s STARTING building serverrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2ready in 1.67sLocalhttp://localhost:3000/waiting for requests READY watching for changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━0% · 0.0s BUILDING nuxt.config.ts changed. Reloading Nuxt...rrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━50% · 0.1s BUILDING generating typesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 0.2s BUILDING compiling changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 0.4s BUILDING compiling changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 0.5s BUILDING compiling changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 0.6s BUILDING compiling changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2ready in 1.67sLocalhttp://localhost:3000/waiting for requests READY watching for changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━67% · 0.1s BUILDING bundling apprrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 0.1s BUILDING compiling changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 0.3s BUILDING compiling changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 0.4s BUILDING compiling changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 0.5s BUILDING compiling changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2ready in 1.67sLocalhttp://localhost:3000/waiting for requests READY watching for changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2━━━━━━━━━━━━━━━━━━━━0% · 0.0ms STARTING preparing your appoopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/⠋━━━━━━━━━━━━━━━━━━━━0% · 0.0ms STARTING starting Nuxt...oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━17% · 94ms STARTING setting up modulesoopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━33% · 200ms STARTING preparing appoopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━33% · 304ms STARTING preparing appoopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━50% · 424ms STARTING generating typesoopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━67% · 576ms STARTING bundling appoopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 695ms STARTING building serveroopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 815ms STARTING building serveroopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 941ms STARTING building serveroopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.06s STARTING building serveroopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/waiting for requests READY watching for changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━0% · 0.0ms BUILDING nuxt.config.ts changed. Reloading Nuxt...rrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━67% · 189ms BUILDING bundling apprrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 242ms BUILDING compiling changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 373ms BUILDING compiling changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 493ms BUILDING compiling changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 617ms BUILDING compiling changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/waiting for requests READY watching for changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━67% · 66ms BUILDING bundling apprrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 120ms BUILDING compiling changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 245ms BUILDING compiling changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 365ms BUILDING compiling changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2ready in 1.42sLocalhttp://localhost:3000/waiting for requests READY watching for changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
diff --git a/capture/output/nuxt-dev-restart.txt b/capture/output/nuxt-dev-restart.txt
index aa38b25ed..573b639b9 100644
--- a/capture/output/nuxt-dev-restart.txt
+++ b/capture/output/nuxt-dev-restart.txt
@@ -1,4 +1,4 @@
-styles: cbc7a29b1cebf5be
+styles: 1dd116504606b5d1
Local http://localhost:3000/
Local http://localhost:3000/ ⠋
waiting for requests
@@ -23,6 +23,7 @@ styles: cbc7a29b1cebf5be
STARTING preparing your app
STARTING setting up modules
STARTING starting Nuxt...
+ o open · i info · l logs · n network · p routes · ? help · q quit
r restart · o open · i info · l logs · n network · p routes · ? help · q quit
⣠⣦⣠⡀ Nuxt x.y.z
⣠⣦⣠⡀ Nuxt x.y.z ready in 42 ms
diff --git a/capture/output/nuxt-dev-static.svg b/capture/output/nuxt-dev-static.svg
index 545491495..5785254eb 100644
--- a/capture/output/nuxt-dev-static.svg
+++ b/capture/output/nuxt-dev-static.svg
@@ -16,6 +16,6 @@ svg{--bg:#ffffff;--fg:#24292f;--chrome:#f6f8fa;--dot:#d0d7de}
nuxt dev (ready)
-⣠⣦⣠⡀Nuxt4.5.2ready in 2.09sLocalhttp://localhost:3000/waiting for requests READY watching for changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2ready in 1.47sLocalhttp://localhost:3000/waiting for requests READY watching for changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
diff --git a/capture/output/nuxt-dev-static.txt b/capture/output/nuxt-dev-static.txt
index e9afddcd7..1e474efdd 100644
--- a/capture/output/nuxt-dev-static.txt
+++ b/capture/output/nuxt-dev-static.txt
@@ -1,4 +1,4 @@
-styles: 1a9af3048c1f3c2b
+styles: bd638746e7494b36
Local http://localhost:3000/
Local http://localhost:3000/ ⠋
waiting for requests
@@ -16,6 +16,7 @@ styles: 1a9af3048c1f3c2b
STARTING preparing your app
STARTING setting up modules
STARTING starting Nuxt...
+ o open · i info · l logs · n network · p routes · ? help · q quit
r restart · o open · i info · l logs · n network · p routes · ? help · q quit
⣠⣦⣠⡀ Nuxt x.y.z
⣠⣦⣠⡀ Nuxt x.y.z ready in 42 ms
diff --git a/capture/output/nuxt-dev.svg b/capture/output/nuxt-dev.svg
index b7da9c376..63ad1b8fe 100644
--- a/capture/output/nuxt-dev.svg
+++ b/capture/output/nuxt-dev.svg
@@ -16,20 +16,17 @@ svg{--bg:#ffffff;--fg:#24292f;--chrome:#f6f8fa;--dot:#d0d7de}
nuxt dev
-
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/⠋━━━━━━━━━━━━━━━━━━━━0% · 0.0s STARTING starting Nuxt...rrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━17% · 0.2s STARTING setting up modulesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━33% · 0.3s STARTING preparing apprrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━33% · 0.5s STARTING preparing apprrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━50% · 0.7s STARTING generating typesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━50% · 0.8s STARTING generating typesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━67% · 0.9s STARTING bundling apprrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.1s STARTING building serverrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.2s STARTING building serverrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.3s STARTING building serverrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.4s STARTING building serverrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.5s STARTING building serverrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.7s STARTING building serverrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
-⣠⣦⣠⡀Nuxt4.5.2ready in 2.09sLocalhttp://localhost:3000/waiting for requests READY watching for changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2━━━━━━━━━━━━━━━━━━━━0% · 0.0ms STARTING preparing your apprrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/⠋━━━━━━━━━━━━━━━━━━━━0% · 0.0ms STARTING starting Nuxt...oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━17% · 103ms STARTING setting up modulesoopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━33% · 229ms STARTING preparing appoopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━33% · 337ms STARTING preparing appoopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━50% · 478ms STARTING generating typesoopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━67% · 607ms STARTING bundling appoopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 730ms STARTING building serveroopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 850ms STARTING building serveroopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 971ms STARTING building serveroopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2Localhttp://localhost:3000/━━━━━━━━━━━━━━━━━━━━83% · 1.09s STARTING building serveroopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
+⣠⣦⣠⡀Nuxt4.5.2ready in 1.49sLocalhttp://localhost:3000/waiting for requests READY watching for changesrrestart · oopen · iinfo · llogs · nnetwork · proutes · ?help · qquit
diff --git a/capture/output/nuxt-dev.txt b/capture/output/nuxt-dev.txt
index e9afddcd7..1e474efdd 100644
--- a/capture/output/nuxt-dev.txt
+++ b/capture/output/nuxt-dev.txt
@@ -1,4 +1,4 @@
-styles: 1a9af3048c1f3c2b
+styles: bd638746e7494b36
Local http://localhost:3000/
Local http://localhost:3000/ ⠋
waiting for requests
@@ -16,6 +16,7 @@ styles: 1a9af3048c1f3c2b
STARTING preparing your app
STARTING setting up modules
STARTING starting Nuxt...
+ o open · i info · l logs · n network · p routes · ? help · q quit
r restart · o open · i info · l logs · n network · p routes · ? help · q quit
⣠⣦⣠⡀ Nuxt x.y.z
⣠⣦⣠⡀ Nuxt x.y.z ready in 42 ms
diff --git a/packages/nuxt-cli/src/dev/shortcuts.ts b/packages/nuxt-cli/src/dev/shortcuts.ts
index c359c638d..57005f57d 100644
--- a/packages/nuxt-cli/src/dev/shortcuts.ts
+++ b/packages/nuxt-cli/src/dev/shortcuts.ts
@@ -9,12 +9,13 @@ import { isCI, isTest } from 'std-env'
import { guardReplayedInput, restoreRawMode, withDirectStdout } from '../utils/console'
import { copyURL, openBrowser, printQRCode } from './listen'
+import { isShutdownAdopted } from './shutdown'
export type { ShortcutContext } from './shortcut-context'
interface ActionContext extends ShortcutContext {
- /** Stop reading shortcuts, so a quitting server does not keep stdin open. */
closeInput: () => void
+ open: () => void
}
interface Shortcut {
@@ -31,11 +32,19 @@ const shortcuts: Shortcut[] = [
isAvailable: context => !!context.restart,
action: context => context.restart?.(),
},
+ {
+ keys: ['restart-clear', 'restart --clear'],
+ description: 'restart with a cleared cache',
+ isAvailable: context => !!context.restart && !!context.clearCaches,
+ action: async (context) => {
+ await context.clearCaches?.()
+ await context.restart?.()
+ },
+ },
{
keys: ['o', 'open'],
- description: 'open in browser',
- isAvailable: context => !!context.listener,
- action: context => context.listener && openBrowser(context.listener.url),
+ description: 'open in browser (press again while starting to cancel)',
+ action: context => context.open(),
},
{
keys: ['u', 'urls'],
@@ -50,7 +59,7 @@ const shortcuts: Shortcut[] = [
action: context => context.listener && printQRCode(resolveShareableURL(context.listener), { showURL: true }),
},
{
- keys: ['copy'],
+ keys: ['y', 'copy'],
description: 'copy the server URL to the clipboard',
isAvailable: context => !!context.listener,
action: context => context.listener && copyURL(resolveShareableURL(context.listener)),
@@ -85,6 +94,10 @@ function resolveShareableURL(listener: Listener): string {
async function quit(context: ActionContext): Promise {
context.closeInput()
+ if (isShutdownAdopted()) {
+ process.emit('SIGINT' as any)
+ return
+ }
try {
await context.close()
}
@@ -100,17 +113,9 @@ function printHelp(context: ActionContext): void {
` ${styleText('dim', 'press')} ${styleText('bold', `${keys[0]} + enter`)} ${styleText('dim', `to ${description}`)}`,
)
// eslint-disable-next-line no-console
- console.log(`\n${lines.join('\n')}\n`)
+ console.log(`\n${lines.join('\n')}\n ${styleText('bold', 'Ctrl-C')} ${styleText('dim', 'to quit; press again during cleanup to force exit')}\n`)
}
-/**
- * Without a readable stdin there are no shortcuts to offer, so point at the way
- * to talk to the server instead: a caller driving the CLI without a keyboard
- * (an agent, a wrapper script) otherwise has no indication that one exists.
- *
- * `/` is suggested rather than an API route because it is the one path every
- * project serves.
- */
function printRequestHint(): void {
// eslint-disable-next-line no-console
console.log(`\n ${styleText('dim', 'run')} ${styleText('bold', 'nuxt curl /')} ${styleText('dim', 'to send a request to this server')}\n`)
@@ -120,23 +125,23 @@ function availableShortcuts(context: ShortcutContext): Shortcut[] {
return shortcuts.filter(shortcut => shortcut.isAvailable?.(context) !== false)
}
-/**
- * Bind ` + enter` shortcuts to stdin.
- *
- * No output stream is passed to readline, so it stays in non-terminal mode and
- * does not intercept Ctrl-C or put stdin into raw mode.
- */
+/** Bind line-based commands without raw mode or intercepting Ctrl-C. */
export function setupShortcuts(context: ShortcutContext): void {
if (!process.stdin.isTTY || isCI || isTest) {
- // A hint written into a redirected log is read by nobody and answered by
- // nobody, so it is only offered while stdout is still a terminal.
if (process.stdout.isTTY && !isCI && !isTest) {
context.onReady(() => printRequestHint())
}
return
}
+ let armedOpen = false
+ let ready = false
context.onReady(() => {
+ ready = true
+ if (armedOpen && context.listener) {
+ armedOpen = false
+ openBrowser(context.listener.url)
+ }
// eslint-disable-next-line no-console
console.log(`\n ${styleText('dim', 'press')} ${styleText('bold', 'h + enter')} ${styleText('dim', 'to see available shortcuts')}\n`)
})
@@ -155,7 +160,16 @@ export function setupShortcuts(context: ShortcutContext): void {
return
}
try {
- await shortcut.action({ ...context, closeInput: () => rl.close() })
+ await shortcut.action({ ...context, closeInput: () => rl.close(), open: () => {
+ if (ready && context.listener) {
+ openBrowser(context.listener.url)
+ }
+ else {
+ armedOpen = !armedOpen
+ // eslint-disable-next-line no-console
+ console.log(armedOpen ? 'Browser will open when the server is ready.' : 'Browser opening cancelled.')
+ }
+ } })
}
catch (error) {
console.error(error)
diff --git a/packages/nuxt-cli/src/dev/shutdown.ts b/packages/nuxt-cli/src/dev/shutdown.ts
index 66a7c66ee..3b705b420 100644
--- a/packages/nuxt-cli/src/dev/shutdown.ts
+++ b/packages/nuxt-cli/src/dev/shutdown.ts
@@ -46,7 +46,7 @@ const SHUTDOWN_NOTICE_MS = 1500
export function handleShutdownSignals(close: () => Promise): void {
adoptShutdown()
let closing = false
- for (const signal of ['SIGINT', 'SIGTERM'] as const) {
+ for (const signal of ['SIGINT', 'SIGTERM', 'SIGQUIT'] as const) {
process.on(signal, () => {
if (closing) {
process.exit(130)
diff --git a/packages/nuxt-cli/src/dev/tui/help-overlay.ts b/packages/nuxt-cli/src/dev/tui/help-overlay.ts
index 480446ee7..ba82274eb 100644
--- a/packages/nuxt-cli/src/dev/tui/help-overlay.ts
+++ b/packages/nuxt-cli/src/dev/tui/help-overlay.ts
@@ -8,18 +8,23 @@ import { formatHints, ScreenOverlay } from './screen'
export interface HelpEntry {
keys: string[]
- /** The key that does the same thing when held with control. */
ctrl?: string
description: string
}
const VIEW_ENTRIES: HelpEntry[] = [
- { keys: ['y', 'enter'], description: 'copy the selected line' },
+ { keys: ['↑ / k', '↓ / j'], description: 'select an entry' },
+ { keys: ['Page Up', 'Page Down'], description: 'scroll a screenful' },
+ { keys: ['Home', 'g'], description: 'go to the beginning' },
+ { keys: ['End', 'G'], description: 'follow the latest entries' },
+ { keys: ['y'], description: 'copy the selected entry' },
+ { keys: ['enter'], description: 'open details, otherwise copy' },
{ keys: ['Y'], description: 'copy the whole view' },
- { keys: ['/'], description: 'search' },
+ { keys: ['/'], description: 'search (enter applies, esc cancels)' },
+ { keys: ['esc', 'q'], description: 'close or go back; opening key also closes' },
]
-/** The keyboard shortcuts, as a view rather than a wall of log output. */
+/** Keyboard shortcut reference. */
export class HelpOverlay extends ScreenOverlay {
#entries: () => HelpEntry[]
@@ -28,6 +33,15 @@ export class HelpOverlay extends ScreenOverlay {
this.#entries = entries
}
+ open(): void {
+ if (this.isOpen) {
+ return
+ }
+ super.open()
+ this.select(0)
+ this.repaint()
+ }
+
protected get closeKeys(): readonly string[] {
return ['h', '?']
}
@@ -43,18 +57,20 @@ export class HelpOverlay extends ScreenOverlay {
lines: [`${styleText('bold', formatKeys(entry).padEnd(width))} ${styleText(MUTED, entry.description)}`],
})
return [
- ...entries.map(row),
+ { lines: [styleText('bold', 'global')] },
+ ...entries.filter(entry => entry.ctrl).map(row),
+ { lines: ['', styleText('bold', 'main panel')] },
+ ...entries.filter(entry => !entry.ctrl).map(row),
{ lines: ['', styleText('bold', 'in a view')] },
...VIEW_ENTRIES.map(row),
]
}
protected renderHints(columns: number): string {
- return formatHints([['q', 'close']], columns)
+ return formatHints([['↑/↓', 'select'], ['PgUp/PgDn', 'scroll'], ['esc/q', 'close']], columns)
}
}
-/** Keys as a user presses them, with shifted letters spelled out. */
function formatKeys({ keys, ctrl }: HelpEntry): string {
const named = keys.map(key => /^[A-Z]$/.test(key) ? `shift-${key.toLowerCase()}` : key)
return [...named, ...ctrl ? [`ctrl-${ctrl}`] : []].join(' / ')
diff --git a/packages/nuxt-cli/src/dev/tui/index.ts b/packages/nuxt-cli/src/dev/tui/index.ts
index bf296ff6a..5db8bfa37 100644
--- a/packages/nuxt-cli/src/dev/tui/index.ts
+++ b/packages/nuxt-cli/src/dev/tui/index.ts
@@ -41,22 +41,16 @@ import { beginDevUI } from './session'
export { beginDevUI } from './session'
export type { DevUIController }
-/** The controller driving each session, so a second caller joins it. */
const attached = new WeakMap