From 80ce3e6d08fa9988a8b6c9520304392ba81a7b81 Mon Sep 17 00:00:00 2001 From: "Anthony Fu (via agent)" Date: Wed, 14 Oct 2026 06:56:29 +0000 Subject: [PATCH 1/4] chore(deps): upgrade devframe to v1.2.5 --- pnpm-lock.yaml | 398 +++++++++++++++++++++---------------------- pnpm-workspace.yaml | 2 +- skills-npm-lock.json | 2 +- 3 files changed, 197 insertions(+), 205 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5b9faf0237..6f306fa186 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -469,16 +469,16 @@ catalogs: version: 1.17.5 overrides: - '@devframes/hub': ^1.2.4 - '@devframes/hub-ui-onboard': ^1.2.4 - '@devframes/json-render': ^1.2.4 - '@devframes/plugin-assets': ^1.2.4 - '@devframes/plugin-code-server': ^1.2.4 - '@devframes/plugin-data-inspector': ^1.2.4 - '@devframes/plugin-inspect': ^1.2.4 - '@devframes/plugin-messages': ^1.2.4 - '@devframes/plugin-og': ^1.2.4 - '@devframes/plugin-terminals': ^1.2.4 + '@devframes/hub': ^1.2.5 + '@devframes/hub-ui-onboard': ^1.2.5 + '@devframes/json-render': ^1.2.5 + '@devframes/plugin-assets': ^1.2.5 + '@devframes/plugin-code-server': ^1.2.5 + '@devframes/plugin-data-inspector': ^1.2.5 + '@devframes/plugin-inspect': ^1.2.5 + '@devframes/plugin-messages': ^1.2.5 + '@devframes/plugin-og': ^1.2.5 + '@devframes/plugin-terminals': ^1.2.5 '@nuxt/devtools': workspace:* '@nuxt/kit': npm:@nuxt/kit-nightly@5.0.0-2610052343-36eafab '@nuxt/schema': npm:@nuxt/schema-nightly@5.0.0-2610052343-36eafab @@ -489,7 +489,7 @@ overrides: '@vue/shared': ^3.5.43 '@vueuse/core': ^15.0.0 chokidar: ^5.0.0 - devframe: ^1.2.4 + devframe: ^1.2.5 esbuild: ^0.28.2 markdown-exit: ^1.3.0 nuxt: npm:nuxt-nightly@5.0.0-2610052343-36eafab @@ -620,20 +620,20 @@ importers: packages/devtools: dependencies: '@devframes/hub': - specifier: ^1.2.4 - version: 1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0) + specifier: ^1.2.5 + version: 1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0) '@devframes/plugin-assets': - specifier: ^1.2.4 - version: 1.2.4(devframe@1.2.4)(vite@8.3.4) + specifier: ^1.2.5 + version: 1.2.5(devframe@1.2.5)(vite@8.3.4) '@devframes/plugin-code-server': - specifier: ^1.2.4 - version: 1.2.4(@devframes/hub-ui@1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(devframe@1.2.4))(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4)(vite@8.3.4) + specifier: ^1.2.5 + version: 1.2.5(@devframes/hub-ui@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(devframe@1.2.5))(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5)(vite@8.3.4) '@devframes/plugin-data-inspector': - specifier: ^1.2.4 - version: 1.2.4(devframe@1.2.4)(vite@8.3.4) + specifier: ^1.2.5 + version: 1.2.5(devframe@1.2.5)(vite@8.3.4) '@devframes/plugin-og': - specifier: ^1.2.4 - version: 1.2.4(devframe@1.2.4)(vite@8.3.4) + specifier: ^1.2.5 + version: 1.2.5(devframe@1.2.5)(vite@8.3.4) '@nuxt/devtools-assets': specifier: workspace:* version: link:../devtools-assets @@ -645,7 +645,7 @@ importers: version: '@nuxt/kit-nightly@5.0.0-2610052343-36eafab(@nuxt/schema-nightly@5.0.0-2610052343-36eafab)(confbox@0.2.4)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.153.0)(rolldown@1.2.12)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.12)(rollup@4.64.5)(vite@8.3.4)(webpack@5.111.1(cssnano@7.1.9(postcss@8.5.28))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.28)(svgo@4.1.0)))' '@vitejs/devtools': specifier: ^0.7.6 - version: 0.7.6(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@1.0.5)(vite@8.3.4) + version: 0.7.6(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@1.0.5)(vite@8.3.4) '@vitejs/devtools-kit': specifier: ^0.7.6 version: 0.7.6(@devframes/agentic@1.1.0)(cac@7.0.0)(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@1.0.5)(vite@8.3.4) @@ -656,8 +656,8 @@ importers: specifier: catalog:prod version: 2.0.5 devframe: - specifier: ^1.2.4 - version: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + specifier: ^1.2.5 + version: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) error-stack-parser-es: specifier: catalog:frontend version: 2.0.1 @@ -906,8 +906,8 @@ importers: packages/devtools-onboard: dependencies: '@devframes/hub-ui-onboard': - specifier: ^1.2.4 - version: 1.2.4 + specifier: ^1.2.5 + version: 1.2.5 '@nuxt/devtools': specifier: workspace:* version: link:../devtools @@ -1303,57 +1303,57 @@ packages: '@devframes/agentic@1.1.0': resolution: {integrity: sha512-YLD+yCMiNuUnf1EslRWx0j+kwY8+ByX8RjKghC1ElqX/SrkMGw21K1u8+sd0REdX3uHy22nxL+X/tFaEjk0oLg==} peerDependencies: - devframe: ^1.2.4 + devframe: ^1.2.5 - '@devframes/hub-ui-onboard@1.2.4': - resolution: {integrity: sha512-Jfr/3a/ZOdJ155Nqu5THxKzh9L1tN1lP0ZwKy0c+Sld/3vdfQ+x2vLhdPHm5WlD1eQvP0svRRyybWZS84tIfvw==} + '@devframes/hub-ui-onboard@1.2.5': + resolution: {integrity: sha512-x4cs2yNbRGZyf6bOV8hYGAb8WhSJs+joTVCSEygZFG3d+pfsMZUIiYozhxzYfq3E6DBve4bphzdDBE0PZnbVWw==} - '@devframes/hub-ui@1.2.0': - resolution: {integrity: sha512-7q9zfo/i+Iiu5oO4RQdB3aWzt+4BWmKaK4L0UxwPxKibFx45xe3GrATNnoW1PY0kxY1gz2kqc9jdwXDOmXmmdw==} + '@devframes/hub-ui@1.2.5': + resolution: {integrity: sha512-zyQAvSGO8SM1KCAv/crlHbzA5mp1OY1UgcrHBrLaX2ocvj8SQ6Zu2D46PlgMe41zwcP5Gsc/gVxtpglstnD+ZA==} peerDependencies: - '@devframes/hub': ^1.2.4 - '@devframes/json-render': ^1.2.4 - devframe: ^1.2.4 + '@devframes/hub': ^1.2.5 + '@devframes/json-render': ^1.2.5 + devframe: ^1.2.5 peerDependenciesMeta: '@devframes/json-render': optional: true - '@devframes/hub@1.2.4': - resolution: {integrity: sha512-UGno4NpufOrvDvcgCKV6Z3CGq4BbRdOBNC9Xzyh5SH5TVwUa4HxlirsXUb/n+2Vn3O8zxP0AD+lcISINKMeYxQ==} + '@devframes/hub@1.2.5': + resolution: {integrity: sha512-cN/cb3uRqdSfOTkHFg3cfzsi8oWXDakvqKuENphPz7zQZPEedxtAa7E1e5Ap77wRkEsBn5gP0K7i5yL8box+vQ==} peerDependencies: - '@devframes/agentic': 1.2.4 - devframe: ^1.2.4 + '@devframes/agentic': 1.2.5 + devframe: ^1.2.5 peerDependenciesMeta: '@devframes/agentic': optional: true - '@devframes/json-render-ui@1.2.0': - resolution: {integrity: sha512-wnMefB5YWhVmykLZ1NYDLAVWXdaG14O5rpWV84I13/NhLI6PV7QcY3Ylrt81bslsQTSK2PmWQmj5+gnCls+krA==} + '@devframes/json-render-ui@1.2.5': + resolution: {integrity: sha512-5webuN7TupD24z2fLbLzxZjY8uN+yRdU3AIRT2/pK0v93neX+2lDZvvY3D6ChTyOyF5ybqi8rMvYgpzeqjL2ow==} peerDependencies: - '@devframes/hub': ^1.2.4 - devframe: ^1.2.4 + '@devframes/hub': ^1.2.5 + devframe: ^1.2.5 peerDependenciesMeta: '@devframes/hub': optional: true devframe: optional: true - '@devframes/json-render@1.2.4': - resolution: {integrity: sha512-irUST8dD3BNt11o4dy4HQ/DbbPP6OTuqLEIiaH5B76H6niqb4MtDpKKUXYeQpCqJ9s1VU4CVP9BndKtjs2reKA==} + '@devframes/json-render@1.2.5': + resolution: {integrity: sha512-5jF1539H3z2ZusYd4J7YoXsI1N91Djmh8H7M0E0/roNbC/El56ufjQP6VrqBsku3PSSQddedjusQbHdRuwyhqw==} peerDependencies: - '@devframes/hub': ^1.2.4 - devframe: ^1.2.4 + '@devframes/hub': ^1.2.5 + devframe: ^1.2.5 peerDependenciesMeta: '@devframes/hub': optional: true - '@devframes/plugin-assets@1.2.4': - resolution: {integrity: sha512-hgnZyTN6Hznr55u4JZB2y74gUT4UxqIMCpy54s2gTQSq+QD3G464pv3Je16iJhLPNoK8KXbqLHXxnX0y0EgV4A==} + '@devframes/plugin-assets@1.2.5': + resolution: {integrity: sha512-ywl2jPQD1QYX3IYlnPEKc/yZzE6e/cyvapN9HA5jYL2BlJGL+glq+8SOXdOoeYJ/BQxL5zF+bp/GPwGavITcWw==} hasBin: true peerDependencies: - '@devframes/plugin-assets--assets': 1.2.4 - '@devframes/service-shiki': 1.2.4 - devframe: ^1.2.4 + '@devframes/plugin-assets--assets': 1.2.5 + '@devframes/service-shiki': 1.2.5 + devframe: ^1.2.5 vite: ^8.3.4 peerDependenciesMeta: '@devframes/plugin-assets--assets': @@ -1363,12 +1363,12 @@ packages: vite: optional: true - '@devframes/plugin-code-server@1.2.4': - resolution: {integrity: sha512-36f4b5WfmiWKoSkH7pGHtStnv4YclBZ7UrsJ7CmB+bbI/X6B8aqAEHp3keOJF1Ud7PszyUZpuaSoQPxd2alULg==} + '@devframes/plugin-code-server@1.2.5': + resolution: {integrity: sha512-P4ykCyDGf+KM7S6vjtWVM7wc2yqlnZza6KwNGPdHSfic2U/Rf3i/6QMLVCijBX14zF/GTBE54xN4VjdEtbghWw==} hasBin: true peerDependencies: - '@devframes/plugin-code-server--assets': 1.2.4 - devframe: ^1.2.4 + '@devframes/plugin-code-server--assets': 1.2.5 + devframe: ^1.2.5 vite: ^8.3.4 peerDependenciesMeta: '@devframes/plugin-code-server--assets': @@ -1376,12 +1376,12 @@ packages: vite: optional: true - '@devframes/plugin-data-inspector@1.2.4': - resolution: {integrity: sha512-7hEjm8kkcsfxPiaYnuZUrvZ96M62+vze+VACuAGYgPy8OMCY1sxnYtu1RbMmppJIOizPKvpqA8oJ5JTCrCjrlQ==} + '@devframes/plugin-data-inspector@1.2.5': + resolution: {integrity: sha512-GPPjv7RAtcES36i4y4apshPMkikjc/HgTO2Nft8sgUlswfRASx2LsZ4LlTt4Exh/3SljUr01gbruLwVfuq7SPw==} hasBin: true peerDependencies: - '@devframes/plugin-data-inspector--assets': 1.2.4 - devframe: ^1.2.4 + '@devframes/plugin-data-inspector--assets': 1.2.5 + devframe: ^1.2.5 vite: ^8.3.4 peerDependenciesMeta: '@devframes/plugin-data-inspector--assets': @@ -1389,12 +1389,12 @@ packages: vite: optional: true - '@devframes/plugin-inspect@1.2.4': - resolution: {integrity: sha512-9a8xKsQE1aFWjcxncFzA2oyjtsq/1VXcZsWdsUGV0xIpathWgMwXqQLqz63v5aphn0cYNKBhsFX0Am9LWPBNGw==} + '@devframes/plugin-inspect@1.2.5': + resolution: {integrity: sha512-TqrH2eU7lsTxbWgwoET9Kh7YKSY06qd+4ITBmi+64G6UzepRVdjcYvVfOyUIn1m3NZSVeVmmjexSB5P07WKf6Q==} hasBin: true peerDependencies: - '@devframes/plugin-inspect--assets': 1.2.4 - devframe: ^1.2.4 + '@devframes/plugin-inspect--assets': 1.2.5 + devframe: ^1.2.5 vite: ^8.3.4 peerDependenciesMeta: '@devframes/plugin-inspect--assets': @@ -1402,13 +1402,13 @@ packages: vite: optional: true - '@devframes/plugin-messages@1.2.4': - resolution: {integrity: sha512-DWjtbetSAcckXPLMqVDBJsM2iFAM3KvxgsNAMNFCyRZDOW4HE0quxNP7eQPjib3gnElyLabogE+ukeNmOWiutw==} + '@devframes/plugin-messages@1.2.5': + resolution: {integrity: sha512-T1SfTR4cAzjb/whiFT6O3QisyhC2khpUUn1MR16ZV9iQ8sn/7tiCsMWYsAYpEkbHwVcxFPJv69jRGYmvE1exBw==} hasBin: true peerDependencies: - '@devframes/hub': ^1.2.4 - '@devframes/plugin-messages--assets': 1.2.4 - devframe: ^1.2.4 + '@devframes/hub': ^1.2.5 + '@devframes/plugin-messages--assets': 1.2.5 + devframe: ^1.2.5 vite: ^8.3.4 peerDependenciesMeta: '@devframes/plugin-messages--assets': @@ -1416,12 +1416,12 @@ packages: vite: optional: true - '@devframes/plugin-og@1.2.4': - resolution: {integrity: sha512-uY0dDDUl9FEkcb+353HM9i3y7mLVbIfwdILs5qfYyaq1+Pemq5KkFi+Y6HCrbdVfWJ9v1lrNIZaKbVUU0lUorA==} + '@devframes/plugin-og@1.2.5': + resolution: {integrity: sha512-S4swoLst55pcb1MU9G0IAbtkBqU6i5J2Q3i5e2XIOPs5smQHTsqYyOOW8wtqz7s09P3k6HJim/I1Bg450bKceQ==} hasBin: true peerDependencies: - '@devframes/plugin-og--assets': 1.2.4 - devframe: ^1.2.4 + '@devframes/plugin-og--assets': 1.2.5 + devframe: ^1.2.5 vite: ^8.3.4 peerDependenciesMeta: '@devframes/plugin-og--assets': @@ -1429,12 +1429,12 @@ packages: vite: optional: true - '@devframes/plugin-terminals@1.2.4': - resolution: {integrity: sha512-9tuT2Y5GIO1PvkEAgW1RG7cYOUxBmh6CDdzpWOXuSZeMiiN8XG4jWCU1wVEtQoTD5wOJxZ1/ojWawxSceunUNA==} + '@devframes/plugin-terminals@1.2.5': + resolution: {integrity: sha512-IT+2fHDQYg/tkAyCCXveSpOMp5W9KG4f/eRrGZM/Tae4QMAL36k4pEKbXCWYzloVlr50jL6y+Nrj/rN56m5FSw==} hasBin: true peerDependencies: - '@devframes/plugin-terminals--assets': 1.2.4 - devframe: ^1.2.4 + '@devframes/plugin-terminals--assets': 1.2.5 + devframe: ^1.2.5 vite: ^8.3.4 peerDependenciesMeta: '@devframes/plugin-terminals--assets': @@ -1442,17 +1442,17 @@ packages: vite: optional: true - '@devframes/service-open@1.2.4': - resolution: {integrity: sha512-tsJoztREt5jyEgraUCvLTgeZgAXBSQyvnzrLE5WU6eUQ9Lrca7fvKxrpY8E8kjuF7SUrbnRKrasao0SZCwTFbA==} + '@devframes/service-open@1.2.5': + resolution: {integrity: sha512-U4y2Ahd534uEgkni5Zv9vNZamTFcIZq3e/VSmIZp5FMjgUHajPklZlk1ljB7MNcr9BbR7CMMNhRuPxIbAUDCMg==} peerDependencies: - devframe: ^1.2.4 + devframe: ^1.2.5 - '@devframes/vite@1.2.4': - resolution: {integrity: sha512-Cb3s05pJTS5i7G/nteXbi/0A9qOAK/Hu7AR2GMcr96EgP3fDK+cIXGzr1R/w31/Xx8DtbmoSdQbzuUdikPNEQg==} + '@devframes/vite@1.2.5': + resolution: {integrity: sha512-6Xk7W9mWqyc2iAjjL9weub0IOpyEUoTFSScz9FJIwvuPGHwNcsHE0ORZE0h/qVtRCabGrVRPa4636Hn7ZmoXAw==} peerDependencies: - '@devframes/hub': ^1.2.4 - '@devframes/hub-ui': 1.2.4 - devframe: ^1.2.4 + '@devframes/hub': ^1.2.5 + '@devframes/hub-ui': 1.2.5 + devframe: ^1.2.5 vite: ^8.3.4 peerDependenciesMeta: '@devframes/hub': @@ -1962,8 +1962,8 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nuxt/cli-nightly@4.0.1-2610112158-6f7550e': - resolution: {integrity: sha512-maBgtUoRwciUdwXRaVxqFT31USjuQ3t8QDNhFOE/jh5e/OiR99Rafg32iS/T1PDY8g2bPYbBDjk3GyxV9BG4jw==} + '@nuxt/cli-nightly@4.0.1-2610121948-3074e65': + resolution: {integrity: sha512-uiBhW0t2J+Sbv4dG8XuBOwwgxpvg4ukgPHy0Sy13psBycVzJngKKeoGW7mWVv5qHkhMdXWqRuskizlU9EODvjQ==} engines: {node: ^22.21.0 || ^24.11.0 || >=26.0.0} hasBin: true peerDependencies: @@ -4343,11 +4343,11 @@ packages: resolution: {integrity: sha512-6V1HzU4to74skg//ScZR2mp9bdz+rESC9jQzVIIG/ha0HYgymHcXIQQCjH0+ivRaSuY82fa9fZ7Ro6QZT4s4uw==} engines: {node: '>=22.17'} - devframe@1.2.4: - resolution: {integrity: sha512-GasirFyfdZbHqaidWK1ah2PtTfjiHSdNBwbkvpYvf4wuylAHSqFkQWps7zo4QgLsP/8jkgGgi6RrWZj92gT42A==} + devframe@1.2.5: + resolution: {integrity: sha512-7txhfBgFafXHN/KIyP/M6F1W5WF1VPypoB4mZtZEa4KM8n1Y57EtnVm281Y3cg7SHti/PtfCtmmmtDh/k/CS3g==} hasBin: true peerDependencies: - '@devframes/agentic': 1.2.4 + '@devframes/agentic': 1.2.5 cac: ^7.0.0 peerDependenciesMeta: '@devframes/agentic': @@ -7949,141 +7949,141 @@ snapshots: '@colordx/core@7.3.0': {} - '@devframes/agentic@1.1.0(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.4)(ocache@0.3.0)': + '@devframes/agentic@1.1.0(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.5)(ocache@0.3.0)': dependencies: '@modelcontextprotocol/client': 2.2.0 '@modelcontextprotocol/server': 2.2.0 - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) - h3: 2.0.1-rc.32(crossws@0.4.12(srvx@0.11.22))(ocache@0.3.0) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + h3: 2.0.1(crossws@0.4.12(srvx@0.11.22))(ocache@0.3.0) pathe: 2.0.3 transitivePeerDependencies: - crossws - ocache - '@devframes/agentic@1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0)': + '@devframes/agentic@1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0)': dependencies: '@modelcontextprotocol/client': 2.2.0 '@modelcontextprotocol/server': 2.2.0 - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) - h3: 2.0.1-rc.32(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + h3: 2.0.1(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0) pathe: 2.0.3 transitivePeerDependencies: - crossws - ocache - '@devframes/hub-ui-onboard@1.2.4': + '@devframes/hub-ui-onboard@1.2.5': dependencies: nostics: 1.3.0 package-manager-detector: 1.9.0 tinyexec: 1.3.1 - '@devframes/hub-ui@1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(devframe@1.2.4)': + '@devframes/hub-ui@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(devframe@1.2.5)': dependencies: - '@devframes/hub': 1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0) - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + '@devframes/hub': 1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) optionalDependencies: - '@devframes/json-render': 1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4) + '@devframes/json-render': 1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5) - '@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.4)(ocache@0.3.0)': + '@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.5)(ocache@0.3.0)': dependencies: destr: 2.0.5 - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) h3: 2.0.1(crossws@0.4.12(srvx@0.11.22))(ocache@0.3.0) pathe: 2.0.3 tinyexec: 1.3.1 zigpty: 0.2.1 optionalDependencies: - '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0) + '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0) transitivePeerDependencies: - crossws - ocache - '@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0)': + '@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0)': dependencies: destr: 2.0.5 - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) h3: 2.0.1(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0) pathe: 2.0.3 tinyexec: 1.3.1 zigpty: 0.2.1 optionalDependencies: - '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0) + '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0) transitivePeerDependencies: - crossws - ocache - '@devframes/json-render-ui@1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4)': + '@devframes/json-render-ui@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5)': optionalDependencies: - '@devframes/hub': 1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0) - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + '@devframes/hub': 1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) - '@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4)': + '@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5)': dependencies: '@json-render/core': 0.21.0(zod@4.6.5) - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) zod: 4.6.5 optionalDependencies: - '@devframes/hub': 1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0) + '@devframes/hub': 1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0) - '@devframes/plugin-assets@1.2.4(devframe@1.2.4)(vite@8.3.4)': + '@devframes/plugin-assets@1.2.5(devframe@1.2.5)(vite@8.3.4)': dependencies: - '@devframes/service-open': 1.2.4(devframe@1.2.4) - cac: 7.0.0 + '@devframes/service-open': 1.2.5(devframe@1.2.5) + cac: 7.1.0 chokidar: 5.0.0 - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) image-meta: 0.3.0 pathe: 2.0.3 tinyglobby: 0.2.17 optionalDependencies: vite: 8.3.4(@types/node@26.6.5)(@vitejs/devtools@0.7.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) - '@devframes/plugin-code-server@1.2.4(@devframes/hub-ui@1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(devframe@1.2.4))(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4)(vite@8.3.4)': + '@devframes/plugin-code-server@1.2.5(@devframes/hub-ui@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(devframe@1.2.5))(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5)(vite@8.3.4)': dependencies: - '@devframes/vite': 1.2.4(@devframes/hub-ui@1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(devframe@1.2.4))(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4)(vite@8.3.4) - cac: 7.0.0 - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + '@devframes/vite': 1.2.5(@devframes/hub-ui@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(devframe@1.2.5))(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5)(vite@8.3.4) + cac: 7.1.0 + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) optionalDependencies: vite: 8.3.4(@types/node@26.6.5)(@vitejs/devtools@0.7.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) transitivePeerDependencies: - '@devframes/hub' - '@devframes/hub-ui' - '@devframes/plugin-data-inspector@1.2.4(devframe@1.2.4)(vite@8.3.4)': + '@devframes/plugin-data-inspector@1.2.5(devframe@1.2.5)(vite@8.3.4)': dependencies: - cac: 7.0.0 - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + cac: 7.1.0 + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) optionalDependencies: vite: 8.3.4(@types/node@26.6.5)(@vitejs/devtools@0.7.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) - '@devframes/plugin-inspect@1.2.4(devframe@1.2.4)(vite@8.3.4)': + '@devframes/plugin-inspect@1.2.5(devframe@1.2.5)(vite@8.3.4)': dependencies: cac: 7.0.0 - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) optionalDependencies: vite: 8.3.4(@types/node@26.6.5)(@vitejs/devtools@0.7.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) - '@devframes/plugin-messages@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4)(vite@8.3.4)': + '@devframes/plugin-messages@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5)(vite@8.3.4)': dependencies: - '@devframes/hub': 1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0) - '@devframes/service-open': 1.2.4(devframe@1.2.4) + '@devframes/hub': 1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0) + '@devframes/service-open': 1.2.5(devframe@1.2.5) cac: 7.0.0 - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) optionalDependencies: vite: 8.3.4(@types/node@26.6.5)(@vitejs/devtools@0.7.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) - '@devframes/plugin-og@1.2.4(devframe@1.2.4)(vite@8.3.4)': + '@devframes/plugin-og@1.2.5(devframe@1.2.5)(vite@8.3.4)': dependencies: - cac: 7.0.0 - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + cac: 7.1.0 + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) parse5: 8.0.1 optionalDependencies: vite: 8.3.4(@types/node@26.6.5)(@vitejs/devtools@0.7.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) - '@devframes/plugin-terminals@1.2.4(@devframes/hub-ui@1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(devframe@1.2.4))(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4)(vite@8.3.4)': + '@devframes/plugin-terminals@1.2.5(@devframes/hub-ui@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(devframe@1.2.5))(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5)(vite@8.3.4)': dependencies: - '@devframes/vite': 1.2.4(@devframes/hub-ui@1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(devframe@1.2.4))(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4)(vite@8.3.4) + '@devframes/vite': 1.2.5(@devframes/hub-ui@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(devframe@1.2.5))(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5)(vite@8.3.4) cac: 7.0.0 - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) zigpty: 0.2.1 optionalDependencies: vite: 8.3.4(@types/node@26.6.5)(@vitejs/devtools@0.7.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) @@ -8091,18 +8091,18 @@ snapshots: - '@devframes/hub' - '@devframes/hub-ui' - '@devframes/service-open@1.2.4(devframe@1.2.4)': + '@devframes/service-open@1.2.5(devframe@1.2.5)': dependencies: - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) pathe: 2.0.3 - '@devframes/vite@1.2.4(@devframes/hub-ui@1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(devframe@1.2.4))(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4)(vite@8.3.4)': + '@devframes/vite@1.2.5(@devframes/hub-ui@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(devframe@1.2.5))(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5)(vite@8.3.4)': dependencies: - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) pathe: 2.0.3 optionalDependencies: - '@devframes/hub': 1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0) - '@devframes/hub-ui': 1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(devframe@1.2.4) + '@devframes/hub': 1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0) + '@devframes/hub-ui': 1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(devframe@1.2.5) vite: 8.3.4(@types/node@26.6.5)(@vitejs/devtools@0.7.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) '@dprint/formatter@0.5.1': {} @@ -8360,11 +8360,11 @@ snapshots: '@eslint/config-inspector@3.5.0(crossws@0.4.12(srvx@1.0.5))(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(ocache@0.3.0)(srvx@1.0.5)': dependencies: - '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0) + '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0) ansis: 4.4.0 cac: 7.0.0 chokidar: 5.0.0 - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) eslint: 10.12.0(jiti@2.7.0)(supports-color@10.2.2) jiti: 2.7.0 tinyglobby: 0.2.17 @@ -8640,7 +8640,7 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.3 - '@nuxt/cli-nightly@4.0.1-2610112158-6f7550e(@nuxt/schema-nightly@5.0.0-2610052343-36eafab)(jiti@2.7.0)(oxc-parser@0.153.0)(rolldown@1.2.12)(vite@8.3.4)': + '@nuxt/cli-nightly@4.0.1-2610121948-3074e65(@nuxt/schema-nightly@5.0.0-2610052343-36eafab)(jiti@2.7.0)(oxc-parser@0.153.0)(rolldown@1.2.12)(vite@8.3.4)': dependencies: '@clack/prompts': 1.8.1 args-tokenizer: 0.3.0 @@ -10627,7 +10627,7 @@ snapshots: '@unocss/core': 66.11.0 '@unocss/language-server': 66.11.0 '@unocss/rule-utils': 66.11.0 - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) tinyglobby: 0.2.17 unplugin-utils: 0.3.2 transitivePeerDependencies: @@ -10967,9 +10967,9 @@ snapshots: '@vitejs/devtools-kit@0.7.6(@devframes/agentic@1.1.0)(cac@7.0.0)(crossws@0.4.12(srvx@0.11.22))(ocache@0.3.0)(srvx@0.11.22)(vite@8.3.4)': dependencies: - '@devframes/hub': 1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.4)(ocache@0.3.0) - '@devframes/json-render': 1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4) - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@0.11.22) + '@devframes/hub': 1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.5)(ocache@0.3.0) + '@devframes/json-render': 1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@0.11.22) local-pkg: 1.2.1 nostics: 1.3.0 package-manager-detector: 1.8.0 @@ -10983,9 +10983,9 @@ snapshots: '@vitejs/devtools-kit@0.7.6(@devframes/agentic@1.1.0)(cac@7.0.0)(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@0.11.22)(vite@8.3.4)': dependencies: - '@devframes/hub': 1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0) - '@devframes/json-render': 1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4) - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@0.11.22) + '@devframes/hub': 1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0) + '@devframes/json-render': 1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@0.11.22) local-pkg: 1.2.1 nostics: 1.3.0 package-manager-detector: 1.8.0 @@ -10999,9 +10999,9 @@ snapshots: '@vitejs/devtools-kit@0.7.6(@devframes/agentic@1.1.0)(cac@7.0.0)(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@1.0.5)(vite@8.3.4)': dependencies: - '@devframes/hub': 1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0) - '@devframes/json-render': 1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4) - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + '@devframes/hub': 1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0) + '@devframes/json-render': 1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) local-pkg: 1.2.1 nostics: 1.3.0 package-manager-detector: 1.8.0 @@ -11013,19 +11013,19 @@ snapshots: - ocache - srvx - '@vitejs/devtools@0.7.6(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(crossws@0.4.12(srvx@0.11.22))(ocache@0.3.0)(srvx@0.11.22)(vite@8.3.4)': + '@vitejs/devtools@0.7.6(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(crossws@0.4.12(srvx@0.11.22))(ocache@0.3.0)(srvx@0.11.22)(vite@8.3.4)': dependencies: - '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.4)(ocache@0.3.0) - '@devframes/hub': 1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.4)(ocache@0.3.0) - '@devframes/hub-ui': 1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(devframe@1.2.4) - '@devframes/json-render-ui': 1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4) - '@devframes/plugin-inspect': 1.2.4(devframe@1.2.4)(vite@8.3.4) - '@devframes/plugin-messages': 1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4)(vite@8.3.4) - '@devframes/plugin-terminals': 1.2.4(@devframes/hub-ui@1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(devframe@1.2.4))(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4)(vite@8.3.4) + '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.5)(ocache@0.3.0) + '@devframes/hub': 1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.5)(ocache@0.3.0) + '@devframes/hub-ui': 1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(devframe@1.2.5) + '@devframes/json-render-ui': 1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5) + '@devframes/plugin-inspect': 1.2.5(devframe@1.2.5)(vite@8.3.4) + '@devframes/plugin-messages': 1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5)(vite@8.3.4) + '@devframes/plugin-terminals': 1.2.5(@devframes/hub-ui@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(devframe@1.2.5))(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5)(vite@8.3.4) '@vitejs/devtools-kit': 0.7.6(@devframes/agentic@1.1.0)(cac@7.0.0)(crossws@0.4.12(srvx@0.11.22))(ocache@0.3.0)(srvx@0.11.22)(vite@8.3.4) cac: 7.0.0 - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@0.11.22) - h3: 2.0.1-rc.32(crossws@0.4.12(srvx@0.11.22))(ocache@0.3.0) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@0.11.22) + h3: 2.0.1(crossws@0.4.12(srvx@0.11.22))(ocache@0.3.0) local-pkg: 1.2.1 nostics: 1.3.0 obug: 3.0.0 @@ -11040,19 +11040,19 @@ snapshots: - ocache - srvx - '@vitejs/devtools@0.7.6(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@0.11.22)(vite@8.3.4)': + '@vitejs/devtools@0.7.6(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@0.11.22)(vite@8.3.4)': dependencies: - '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0) - '@devframes/hub': 1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0) - '@devframes/hub-ui': 1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(devframe@1.2.4) - '@devframes/json-render-ui': 1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4) - '@devframes/plugin-inspect': 1.2.4(devframe@1.2.4)(vite@8.3.4) - '@devframes/plugin-messages': 1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4)(vite@8.3.4) - '@devframes/plugin-terminals': 1.2.4(@devframes/hub-ui@1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(devframe@1.2.4))(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4)(vite@8.3.4) + '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0) + '@devframes/hub': 1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0) + '@devframes/hub-ui': 1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(devframe@1.2.5) + '@devframes/json-render-ui': 1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5) + '@devframes/plugin-inspect': 1.2.5(devframe@1.2.5)(vite@8.3.4) + '@devframes/plugin-messages': 1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5)(vite@8.3.4) + '@devframes/plugin-terminals': 1.2.5(@devframes/hub-ui@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(devframe@1.2.5))(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5)(vite@8.3.4) '@vitejs/devtools-kit': 0.7.6(@devframes/agentic@1.1.0)(cac@7.0.0)(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@0.11.22)(vite@8.3.4) cac: 7.0.0 - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@0.11.22) - h3: 2.0.1-rc.32(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@0.11.22) + h3: 2.0.1(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0) local-pkg: 1.2.1 nostics: 1.3.0 obug: 3.0.0 @@ -11067,19 +11067,19 @@ snapshots: - ocache - srvx - '@vitejs/devtools@0.7.6(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@1.0.5)(vite@8.3.4)': + '@vitejs/devtools@0.7.6(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@1.0.5)(vite@8.3.4)': dependencies: - '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0) - '@devframes/hub': 1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0) - '@devframes/hub-ui': 1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(devframe@1.2.4) - '@devframes/json-render-ui': 1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4) - '@devframes/plugin-inspect': 1.2.4(devframe@1.2.4)(vite@8.3.4) - '@devframes/plugin-messages': 1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4)(vite@8.3.4) - '@devframes/plugin-terminals': 1.2.4(@devframes/hub-ui@1.2.0(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(devframe@1.2.4))(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4)(vite@8.3.4) + '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0) + '@devframes/hub': 1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0) + '@devframes/hub-ui': 1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(devframe@1.2.5) + '@devframes/json-render-ui': 1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5) + '@devframes/plugin-inspect': 1.2.5(devframe@1.2.5)(vite@8.3.4) + '@devframes/plugin-messages': 1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5)(vite@8.3.4) + '@devframes/plugin-terminals': 1.2.5(@devframes/hub-ui@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(devframe@1.2.5))(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5)(vite@8.3.4) '@vitejs/devtools-kit': 0.7.6(@devframes/agentic@1.1.0)(cac@7.0.0)(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@1.0.5)(vite@8.3.4) cac: 7.0.0 - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) - h3: 2.0.1-rc.32(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + h3: 2.0.1(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0) local-pkg: 1.2.1 nostics: 1.3.0 obug: 3.0.0 @@ -11169,7 +11169,7 @@ snapshots: '@vue/shared': 3.5.43 estree-walker: 2.0.2 magic-string: 0.30.21 - postcss: 8.5.28 + postcss: 8.5.29 source-map-js: 1.2.2 '@vue/compiler-ssr@3.5.43': @@ -11190,7 +11190,7 @@ snapshots: '@vue/devtools-kit@9.0.0-beta.1(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5)': dependencies: - devframe: 1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) transitivePeerDependencies: - '@devframes/agentic' - cac @@ -11970,27 +11970,27 @@ snapshots: devalue@6.0.2: {} - devframe@1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@0.11.22): + devframe@1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@0.11.22): dependencies: crossws: 0.4.12(srvx@0.11.22) h3: 2.0.1(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0) nostics: 1.3.0 pathe: 2.0.3 optionalDependencies: - '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0) + '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0) cac: 7.0.0 transitivePeerDependencies: - ocache - srvx - devframe@1.2.4(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5): + devframe@1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5): dependencies: crossws: 0.4.12(srvx@1.0.5) h3: 2.0.1(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0) nostics: 1.3.0 pathe: 2.0.3 optionalDependencies: - '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0) + '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0) cac: 7.0.0 transitivePeerDependencies: - ocache @@ -12806,14 +12806,6 @@ snapshots: crossws: 0.4.12(srvx@1.0.5) ocache: 0.3.0 - h3@2.0.1-rc.32(crossws@0.4.12(srvx@0.11.22))(ocache@0.3.0): - dependencies: - rou3: 0.9.2 - srvx: 1.0.5 - optionalDependencies: - crossws: 0.4.12(srvx@0.11.22) - ocache: 0.3.0 - h3@2.0.1-rc.32(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0): dependencies: rou3: 0.9.2 @@ -14186,7 +14178,7 @@ snapshots: dependencies: '@dxup/nuxt': 0.5.10(@nuxt/schema-nightly@5.0.0-2610052343-36eafab)(confbox@0.2.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(jiti@2.7.0)(mlly@1.8.2)(oxc-parser@0.153.0)(rolldown@1.2.12)(rollup@4.64.5)(vite@8.3.4)(webpack@5.111.1(cssnano@7.1.9(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)(svgo@4.1.0)) '@jridgewell/trace-mapping': 0.3.31 - '@nuxt/cli': '@nuxt/cli-nightly@4.0.1-2610112158-6f7550e(@nuxt/schema-nightly@5.0.0-2610052343-36eafab)(jiti@2.7.0)(oxc-parser@0.153.0)(rolldown@1.2.12)(vite@8.3.4)' + '@nuxt/cli': '@nuxt/cli-nightly@4.0.1-2610121948-3074e65(@nuxt/schema-nightly@5.0.0-2610052343-36eafab)(jiti@2.7.0)(oxc-parser@0.153.0)(rolldown@1.2.12)(vite@8.3.4)' '@nuxt/devtools': link:packages/devtools '@nuxt/kit': '@nuxt/kit-nightly@5.0.0-2610052343-36eafab(@nuxt/schema-nightly@5.0.0-2610052343-36eafab)(confbox@0.2.4)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.153.0)(rolldown@1.2.12)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.12)(rollup@4.64.5)(vite@8.3.4)(webpack@5.111.1(cssnano@7.1.9(postcss@8.5.28))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.28)(svgo@4.1.0)))' '@nuxt/nitro-server': '@nuxt/nitro-server-nightly@5.0.0-2610052343-36eafab(911f4541affa6a14ad70332a4fcc4f2a)' @@ -14308,7 +14300,7 @@ snapshots: dependencies: '@dxup/nuxt': 0.5.10(@nuxt/schema-nightly@5.0.0-2610052343-36eafab)(confbox@0.2.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(jiti@2.7.0)(mlly@1.8.2)(oxc-parser@0.153.0)(rolldown@1.2.12)(rollup@4.64.5)(vite@8.3.4)(webpack@5.111.1(cssnano@7.1.9(postcss@8.5.28))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.28)(svgo@4.1.0)) '@jridgewell/trace-mapping': 0.3.31 - '@nuxt/cli': '@nuxt/cli-nightly@4.0.1-2610112158-6f7550e(@nuxt/schema-nightly@5.0.0-2610052343-36eafab)(jiti@2.7.0)(oxc-parser@0.153.0)(rolldown@1.2.12)(vite@8.3.4)' + '@nuxt/cli': '@nuxt/cli-nightly@4.0.1-2610121948-3074e65(@nuxt/schema-nightly@5.0.0-2610052343-36eafab)(jiti@2.7.0)(oxc-parser@0.153.0)(rolldown@1.2.12)(vite@8.3.4)' '@nuxt/devtools': link:packages/devtools '@nuxt/kit': '@nuxt/kit-nightly@5.0.0-2610052343-36eafab(@nuxt/schema-nightly@5.0.0-2610052343-36eafab)(confbox@0.2.4)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.153.0)(rolldown@1.2.12)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.12)(rollup@4.64.5)(vite@8.3.4)(webpack@5.111.1(cssnano@7.1.9(postcss@8.5.28))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.28)(svgo@4.1.0)))' '@nuxt/nitro-server': '@nuxt/nitro-server-nightly@5.0.0-2610052343-36eafab(9ef0122a6414c7e2b5f2ec7384f11e37)' @@ -14430,7 +14422,7 @@ snapshots: dependencies: '@dxup/nuxt': 0.5.10(@nuxt/schema-nightly@5.0.0-2610052343-36eafab)(confbox@0.2.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(jiti@2.7.0)(mlly@1.8.2)(oxc-parser@0.153.0)(rolldown@1.2.12)(rollup@4.64.5)(vite@8.3.4)(webpack@5.111.1(cssnano@7.1.9(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)(svgo@4.1.0)) '@jridgewell/trace-mapping': 0.3.31 - '@nuxt/cli': '@nuxt/cli-nightly@4.0.1-2610112158-6f7550e(@nuxt/schema-nightly@5.0.0-2610052343-36eafab)(jiti@2.7.0)(oxc-parser@0.153.0)(rolldown@1.2.12)(vite@8.3.4)' + '@nuxt/cli': '@nuxt/cli-nightly@4.0.1-2610121948-3074e65(@nuxt/schema-nightly@5.0.0-2610052343-36eafab)(jiti@2.7.0)(oxc-parser@0.153.0)(rolldown@1.2.12)(vite@8.3.4)' '@nuxt/devtools': link:packages/devtools '@nuxt/kit': '@nuxt/kit-nightly@5.0.0-2610052343-36eafab(@nuxt/schema-nightly@5.0.0-2610052343-36eafab)(confbox@0.2.4)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.153.0)(rolldown@1.2.12)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.12)(rollup@4.64.5)(vite@8.3.4)(webpack@5.111.1(cssnano@7.1.9(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)(svgo@4.1.0)))' '@nuxt/nitro-server': '@nuxt/nitro-server-nightly@5.0.0-2610052343-36eafab(4ad0156f0daefe0314d05ef31465282a)' @@ -16423,7 +16415,7 @@ snapshots: vite-plugin-vue-devtools@9.0.0-beta.1(@devframes/agentic@1.1.0)(@vitejs/devtools@0.7.6)(cac@7.0.0)(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@1.0.5)(vite@8.3.4): dependencies: - '@vitejs/devtools': 0.7.6(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@1.0.5)(vite@8.3.4) + '@vitejs/devtools': 0.7.6(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@1.0.5)(vite@8.3.4) '@vitejs/devtools-kit': 0.7.6(@devframes/agentic@1.1.0)(cac@7.0.0)(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@1.0.5)(vite@8.3.4) '@vue/devtools-kit': 9.0.0-beta.1(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) vite: 8.3.4(@types/node@26.6.5)(@vitejs/devtools@0.7.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) @@ -16453,7 +16445,7 @@ snapshots: tinyglobby: 0.2.17 optionalDependencies: '@types/node': 26.6.5 - '@vitejs/devtools': 0.7.6(@devframes/json-render@1.2.4(@devframes/hub@1.2.4(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.4)(ocache@0.3.0))(devframe@1.2.4))(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@1.0.5)(vite@8.3.4) + '@vitejs/devtools': 0.7.6(@devframes/json-render@1.2.5(@devframes/hub@1.2.5(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.5)(ocache@0.3.0))(devframe@1.2.5))(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@1.0.5)(vite@8.3.4) esbuild: 0.28.2 fsevents: 2.3.3 jiti: 2.7.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c3f30034d4..932191ab71 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -100,7 +100,7 @@ packages: - '!playgrounds/**/.output/**' overrides: - '@devframes/hub': &devframe ^1.2.4 + '@devframes/hub': &devframe ^1.2.5 '@devframes/hub-ui-onboard': *devframe '@devframes/json-render': *devframe '@devframes/plugin-assets': *devframe diff --git a/skills-npm-lock.json b/skills-npm-lock.json index cb58d83351..4413c5c90e 100644 --- a/skills-npm-lock.json +++ b/skills-npm-lock.json @@ -8,7 +8,7 @@ }, "devframe": { "package": "devframe", - "version": "1.2.4", + "version": "1.2.5", "skillPath": "skills/devframe/SKILL.md" }, "fast-npm-meta": { From 206c1484256901f395c0b8a5c0f559a1c79d92a6 Mon Sep 17 00:00:00 2001 From: "Anthony Fu (via agent)" Date: Wed, 14 Oct 2026 06:56:33 +0000 Subject: [PATCH 2/4] test(onboard): refuse installs nobody confirms in the terminal --- packages/devtools-onboard/test/module.test.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/devtools-onboard/test/module.test.ts b/packages/devtools-onboard/test/module.test.ts index 6af9920549..5a8b391d1d 100644 --- a/packages/devtools-onboard/test/module.test.ts +++ b/packages/devtools-onboard/test/module.test.ts @@ -58,7 +58,7 @@ function onboardScripts(nuxt: Nuxt) { type Middleware = (req: IncomingMessage, res: ServerResponse, next: () => void) => void -async function viteMiddlewareFetch(nuxt: Nuxt, path: string): Promise { +async function viteMiddlewareFetch(nuxt: Nuxt, path: string, init?: RequestInit): Promise { const mounted: Middleware[] = [] // Only `middlewares.use` is read; the rest of a real ViteDevServer is irrelevant here. const viteServer = { middlewares: { use: (fn: Middleware) => mounted.push(fn) } } as never @@ -74,7 +74,7 @@ async function viteMiddlewareFetch(nuxt: Nuxt, path: string): Promise await new Promise(resolve => server.listen(0, '127.0.0.1', resolve)) cleanups.push(() => new Promise(resolve => server.close(() => resolve()))) const { port } = server.address() as { port: number } // listening on a TCP port, never a pipe - return fetch(`http://127.0.0.1:${port}${path}`) + return fetch(`http://127.0.0.1:${port}${path}`, init) } describe('@nuxt/devtools-onboard', () => { @@ -109,6 +109,16 @@ describe('@nuxt/devtools-onboard', () => { expect(status.branding.productName).toBe('Nuxt DevTools') }, 60_000) + it('refuses to install when nobody confirms it in the terminal', async () => { + const nuxt = await bootNuxt({ dev: true }, { withoutDevtools: true }) + // Vitest workers get a piped stdin, so no terminal can answer the prompt. + const install = await viteMiddlewareFetch(nuxt, '/__devtools/__onboard/install', { method: 'POST' }) + expect(install.status).toBe(403) + + const status = await viteMiddlewareFetch(nuxt, '/__devtools/__onboard/status').then(r => r.json()) + expect(status.state).toBe('idle') + }, 60_000) + it('stays out of the way outside nuxt dev when @nuxt/devtools is missing', async () => { const nuxt = await bootNuxt({ dev: false }, { withoutDevtools: true }) expect(onboardScripts(nuxt)).toHaveLength(0) From 6090e58d24ece684c1e84f00d3193e44967a8f3f Mon Sep 17 00:00:00 2001 From: "Anthony Fu (via agent)" Date: Wed, 14 Oct 2026 06:56:37 +0000 Subject: [PATCH 3/4] docs(onboard): note that installs wait for a terminal confirmation --- packages/devtools-onboard/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/devtools-onboard/README.md b/packages/devtools-onboard/README.md index 3b105ecb08..6237a45c61 100644 --- a/packages/devtools-onboard/README.md +++ b/packages/devtools-onboard/README.md @@ -7,6 +7,8 @@ The entry point of [Nuxt DevTools](https://devtools.nuxt.com). It is a tiny Nuxt Nothing is injected outside `nuxt dev`. +Because the dev server can be reachable from other devices, each install from the button waits until you type `y` and press Enter in the terminal that runs `nuxt dev`. Without an interactive terminal the install is refused, and the panel shows the command to run yourself. + ## Turning it off - `devtools: false` (or `devtools: { enabled: false }`) in `nuxt.config` disables both the button and DevTools. From e264e861811fc196fe9bef05c2a5fa81045489b2 Mon Sep 17 00:00:00 2001 From: "Anthony Fu (via agent)" Date: Wed, 14 Oct 2026 08:07:07 +0000 Subject: [PATCH 4/4] fix(onboard): install only for a browser on this machine, without the terminal prompt --- packages/devtools-onboard/README.md | 2 +- packages/devtools-onboard/src/module.ts | 27 +++++++++-- packages/devtools-onboard/src/this-machine.ts | 12 +++++ packages/devtools-onboard/test/module.test.ts | 48 ++++++++++++++----- .../test/this-machine.test.ts | 19 ++++++++ 5 files changed, 91 insertions(+), 17 deletions(-) create mode 100644 packages/devtools-onboard/src/this-machine.ts create mode 100644 packages/devtools-onboard/test/this-machine.test.ts diff --git a/packages/devtools-onboard/README.md b/packages/devtools-onboard/README.md index 6237a45c61..698d22cd0e 100644 --- a/packages/devtools-onboard/README.md +++ b/packages/devtools-onboard/README.md @@ -7,7 +7,7 @@ The entry point of [Nuxt DevTools](https://devtools.nuxt.com). It is a tiny Nuxt Nothing is injected outside `nuxt dev`. -Because the dev server can be reachable from other devices, each install from the button waits until you type `y` and press Enter in the terminal that runs `nuxt dev`. Without an interactive terminal the install is refused, and the panel shows the command to run yourself. +The button installs only for a browser on the machine that runs `nuxt dev`. Other devices can reach a dev server bound to the network (for example with `--host`), or through a tunnel. There the install is refused, and the panel shows the command to run yourself. ## Turning it off diff --git a/packages/devtools-onboard/src/module.ts b/packages/devtools-onboard/src/module.ts index 9dbea61cec..cc99a1adf1 100644 --- a/packages/devtools-onboard/src/module.ts +++ b/packages/devtools-onboard/src/module.ts @@ -3,6 +3,10 @@ import { fileURLToPath } from 'node:url' import { createOnboarding } from '@devframes/hub-ui-onboard' import { defineNuxtModule, installModule, tryResolveModule } from '@nuxt/kit' import { readPackageJSON } from 'pkg-types' +import { fromThisMachine } from './this-machine' + +/** Where Vite DevTools mounts the hub, so after the restart the real `embedded.js` answers at the URL the button was loaded from. */ +const BASE = '/__devtools/' const DEVTOOLS = '@nuxt/devtools' const DEVTOOLS_NIGHTLY = `${DEVTOOLS}-nightly` @@ -58,9 +62,7 @@ export default defineNuxtModule({ const onboarding = createOnboarding({ cwd: nuxt.options.rootDir, - // Where Vite DevTools mounts the hub, so after the restart the real - // `embedded.js` answers at the URL the button was loaded from. - base: '/__devtools/', + base: BASE, packages: [await devtoolsSpec()], branding: { productName: 'Nuxt DevTools', @@ -68,8 +70,14 @@ export default defineNuxtModule({ logo: 'https://nuxt.com/assets/design-kit/icon-green.svg', }, messages: { + confirming: 'Installing…', + refused: 'Install from a browser on the machine that runs nuxt dev, or run the command above yourself.', restart: 'Installed. Restarting the dev server…', }, + // The middleware below refuses other devices, so a click from this + // machine is the developer's consent. The default y/N prompt reads + // stdin, which nuxi keeps for its own shortcuts and TUI. + onConfirm: () => true, onInstalled() { // A Nuxt module only mounts during setup, so the dev server has to // start over. Delay past the install response so the panel can show @@ -79,8 +87,17 @@ export default defineNuxtModule({ }) nuxt.hook('vite:serverCreated', (server, { isClient }) => { - if (isClient) - server.middlewares.use(onboarding.nodeMiddleware) + if (!isClient) + return + server.middlewares.use((req, res, next) => { + // Same prefix test as `nodeMiddleware`, so no spelling of its POST routes slips past. + if (req.method !== 'GET' && req.method !== 'HEAD' && req.url?.startsWith(BASE) && !fromThisMachine(req)) { + res.statusCode = 403 + res.end() + return + } + onboarding.nodeMiddleware(req, res, next) + }) }) if (!onboarding.disabled) (nuxt.options.app.head.script ??= []).push({ type: 'module', src: onboarding.scriptSrc, tagPosition: 'bodyClose' }) diff --git a/packages/devtools-onboard/src/this-machine.ts b/packages/devtools-onboard/src/this-machine.ts new file mode 100644 index 0000000000..4dc177e4b4 --- /dev/null +++ b/packages/devtools-onboard/src/this-machine.ts @@ -0,0 +1,12 @@ +const LOOPBACK_ADDRESS_RE = /^(?:127(?:\.\d{1,3}){3}|::1|::ffff:127(?:\.\d{1,3}){3})$/ +const LOCAL_HOST_RE = /^(?:(?:[a-z\d-]+\.)*localhost|127(?:\.\d{1,3}){3}|\[::1\])(?::\d+)?$/i + +/** + * Whether the request comes from a browser on the machine that runs the dev + * server. The socket must be loopback, which another device cannot fake, and + * the `Host` a local name, so a tunnel or proxy on this machine that keeps + * its public host does not count either. + */ +export function fromThisMachine(req: { socket: { remoteAddress?: string }, headers: { host?: string } }): boolean { + return LOOPBACK_ADDRESS_RE.test(req.socket.remoteAddress ?? '') && LOCAL_HOST_RE.test(req.headers.host ?? '') +} diff --git a/packages/devtools-onboard/test/module.test.ts b/packages/devtools-onboard/test/module.test.ts index 5a8b391d1d..465e6740cb 100644 --- a/packages/devtools-onboard/test/module.test.ts +++ b/packages/devtools-onboard/test/module.test.ts @@ -1,12 +1,12 @@ import type { Nuxt, NuxtConfig } from '@nuxt/schema' import type { IncomingMessage, ServerResponse } from 'node:http' import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises' -import { createServer } from 'node:http' +import { createServer, request } from 'node:http' import { tmpdir } from 'node:os' import { join } from 'node:path' import { fileURLToPath } from 'node:url' import { loadNuxt } from 'nuxt' -import { afterEach, describe, expect, it } from 'vitest' +import { afterEach, describe, expect, it, vi } from 'vitest' const onboardModule = fileURLToPath(new URL('../src/module.ts', import.meta.url)) @@ -58,7 +58,8 @@ function onboardScripts(nuxt: Nuxt) { type Middleware = (req: IncomingMessage, res: ServerResponse, next: () => void) => void -async function viteMiddlewareFetch(nuxt: Nuxt, path: string, init?: RequestInit): Promise { +/** Serves what the module mounts on the client Vite server; resolves to its origin. */ +async function serveViteMiddleware(nuxt: Nuxt): Promise { const mounted: Middleware[] = [] // Only `middlewares.use` is read; the rest of a real ViteDevServer is irrelevant here. const viteServer = { middlewares: { use: (fn: Middleware) => mounted.push(fn) } } as never @@ -74,7 +75,19 @@ async function viteMiddlewareFetch(nuxt: Nuxt, path: string, init?: RequestInit) await new Promise(resolve => server.listen(0, '127.0.0.1', resolve)) cleanups.push(() => new Promise(resolve => server.close(() => resolve()))) const { port } = server.address() as { port: number } // listening on a TCP port, never a pipe - return fetch(`http://127.0.0.1:${port}${path}`, init) + return `http://127.0.0.1:${port}` +} + +const onboardStatus = (origin: string) => fetch(`${origin}/__devtools/__onboard/status`).then(r => r.json()) + +/** `fetch` always sends the real `Host`; a tunnel on this machine forwards its public one. */ +function postWithHost(url: string, host: string): Promise { + return new Promise((resolve, reject) => { + request(url, { method: 'POST', headers: { host } }, (res) => { + res.resume() + resolve(res.statusCode) + }).on('error', reject).end() + }) } describe('@nuxt/devtools-onboard', () => { @@ -101,7 +114,7 @@ describe('@nuxt/devtools-onboard', () => { expect(nuxt.options._requiredModules['@nuxt/devtools']).toBeUndefined() expect(onboardScripts(nuxt)).toHaveLength(1) - const status = await viteMiddlewareFetch(nuxt, '/__devtools/__onboard/status').then(r => r.json()) + const status = await onboardStatus(await serveViteMiddleware(nuxt)) expect(status.state).toBe('idle') // No lockfile in the fixture, so the package manager falls back to npm. expect(status.command.slice(0, 3)).toEqual(['npm', 'i', '-D']) @@ -109,14 +122,27 @@ describe('@nuxt/devtools-onboard', () => { expect(status.branding.productName).toBe('Nuxt DevTools') }, 60_000) - it('refuses to install when nobody confirms it in the terminal', async () => { + it('installs on one click from this machine', async () => { const nuxt = await bootNuxt({ dev: true }, { withoutDevtools: true }) - // Vitest workers get a piped stdin, so no terminal can answer the prompt. - const install = await viteMiddlewareFetch(nuxt, '/__devtools/__onboard/install', { method: 'POST' }) - expect(install.status).toBe(403) + // Offline with an empty cache, so the install fails fast instead of downloading DevTools. + vi.stubEnv('npm_config_offline', 'true') + vi.stubEnv('npm_config_cache', join(nuxt.options.rootDir, '.npm-cache')) + cleanups.push(async () => { + vi.unstubAllEnvs() + }) + const origin = await serveViteMiddleware(nuxt) + + const install = await fetch(`${origin}/__devtools/__onboard/install`, { method: 'POST' }) + expect(install.status).toBe(202) + await vi.waitFor(async () => expect((await onboardStatus(origin)).state).toBe('error'), { timeout: 30_000, interval: 200 }) + }, 60_000) - const status = await viteMiddlewareFetch(nuxt, '/__devtools/__onboard/status').then(r => r.json()) - expect(status.state).toBe('idle') + it('refuses an install that does not come from this machine', async () => { + const nuxt = await bootNuxt({ dev: true }, { withoutDevtools: true }) + const origin = await serveViteMiddleware(nuxt) + + expect(await postWithHost(`${origin}/__devtools/__onboard/install`, 'my-app.trycloudflare.com')).toBe(403) + expect((await onboardStatus(origin)).state).toBe('idle') }, 60_000) it('stays out of the way outside nuxt dev when @nuxt/devtools is missing', async () => { diff --git a/packages/devtools-onboard/test/this-machine.test.ts b/packages/devtools-onboard/test/this-machine.test.ts new file mode 100644 index 0000000000..b6e88a3d34 --- /dev/null +++ b/packages/devtools-onboard/test/this-machine.test.ts @@ -0,0 +1,19 @@ +import { expect, it } from 'vitest' +import { fromThisMachine } from '../src/this-machine' + +it.each([ + ['127.0.0.1', 'localhost:3000', true], + ['::1', '[::1]:3000', true], + ['::ffff:127.0.0.1', '127.0.0.1:3000', true], + ['127.0.0.1', 'my-app.localhost', true], + // Another device, even when it claims a local host + ['192.168.1.20', 'localhost:3000', false], + ['::ffff:192.168.1.20', '192.168.1.5:3000', false], + // A tunnel or proxy on this machine that keeps its public host + ['127.0.0.1', 'my-app.trycloudflare.com', false], + ['127.0.0.1', '192.168.1.5:3000', false], + ['127.0.0.1', 'localhost.example.com', false], + ['127.0.0.1', undefined, false], +])('socket %s with Host %s is from this machine: %s', (remoteAddress, host, expected) => { + expect(fromThisMachine({ socket: { remoteAddress }, headers: { host } })).toBe(expected) +})