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/7] 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/7] 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/7] 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/7] 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) +}) From 5343ef38fbc2f6b12f972a8bd87247f66eb7f7a6 Mon Sep 17 00:00:00 2001 From: "Anthony Fu (via agent)" Date: Tue, 20 Oct 2026 01:50:09 +0000 Subject: [PATCH 5/7] chore(deps): upgrade devframe to v1.2.6 --- pnpm-lock.yaml | 370 +++++++++++++++++++++---------------------- pnpm-workspace.yaml | 2 +- skills-npm-lock.json | 2 +- 3 files changed, 187 insertions(+), 187 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6f306fa186..ab60020467 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -469,16 +469,16 @@ catalogs: version: 1.17.5 overrides: - '@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 + '@devframes/hub': ^1.2.6 + '@devframes/hub-ui-onboard': ^1.2.6 + '@devframes/json-render': ^1.2.6 + '@devframes/plugin-assets': ^1.2.6 + '@devframes/plugin-code-server': ^1.2.6 + '@devframes/plugin-data-inspector': ^1.2.6 + '@devframes/plugin-inspect': ^1.2.6 + '@devframes/plugin-messages': ^1.2.6 + '@devframes/plugin-og': ^1.2.6 + '@devframes/plugin-terminals': ^1.2.6 '@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.5 + devframe: ^1.2.6 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.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) + specifier: ^1.2.6 + version: 1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0) '@devframes/plugin-assets': - specifier: ^1.2.5 - version: 1.2.5(devframe@1.2.5)(vite@8.3.4) + specifier: ^1.2.6 + version: 1.2.6(devframe@1.2.6)(vite@8.3.4) '@devframes/plugin-code-server': - 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) + specifier: ^1.2.6 + version: 1.2.6(@devframes/hub-ui@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(devframe@1.2.6))(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6)(vite@8.3.4) '@devframes/plugin-data-inspector': - specifier: ^1.2.5 - version: 1.2.5(devframe@1.2.5)(vite@8.3.4) + specifier: ^1.2.6 + version: 1.2.6(devframe@1.2.6)(vite@8.3.4) '@devframes/plugin-og': - specifier: ^1.2.5 - version: 1.2.5(devframe@1.2.5)(vite@8.3.4) + specifier: ^1.2.6 + version: 1.2.6(devframe@1.2.6)(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.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) + version: 0.7.6(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(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.5 - version: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + specifier: ^1.2.6 + version: 1.2.6(@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.5 - version: 1.2.5 + specifier: ^1.2.6 + version: 1.2.6 '@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.5 + devframe: ^1.2.6 - '@devframes/hub-ui-onboard@1.2.5': - resolution: {integrity: sha512-x4cs2yNbRGZyf6bOV8hYGAb8WhSJs+joTVCSEygZFG3d+pfsMZUIiYozhxzYfq3E6DBve4bphzdDBE0PZnbVWw==} + '@devframes/hub-ui-onboard@1.2.6': + resolution: {integrity: sha512-51uFIzzVPNnoSfZLWabOimvzl6gGji97gzfLOV6fRkWm83/QFFM5tewz++st+6uVkV4RshqWeg4FXsulsyc8jA==} - '@devframes/hub-ui@1.2.5': - resolution: {integrity: sha512-zyQAvSGO8SM1KCAv/crlHbzA5mp1OY1UgcrHBrLaX2ocvj8SQ6Zu2D46PlgMe41zwcP5Gsc/gVxtpglstnD+ZA==} + '@devframes/hub-ui@1.2.6': + resolution: {integrity: sha512-s7pVHdMQCV4n8BMGcK2RCRSkK8H7hfQJ19BvdV31VaVj2fLarljBhMsE2656k9Smg3wACFoX96GrURNc+ZGhmw==} peerDependencies: - '@devframes/hub': ^1.2.5 - '@devframes/json-render': ^1.2.5 - devframe: ^1.2.5 + '@devframes/hub': ^1.2.6 + '@devframes/json-render': ^1.2.6 + devframe: ^1.2.6 peerDependenciesMeta: '@devframes/json-render': optional: true - '@devframes/hub@1.2.5': - resolution: {integrity: sha512-cN/cb3uRqdSfOTkHFg3cfzsi8oWXDakvqKuENphPz7zQZPEedxtAa7E1e5Ap77wRkEsBn5gP0K7i5yL8box+vQ==} + '@devframes/hub@1.2.6': + resolution: {integrity: sha512-nZv+A+lAAwFsbMGgpVbGWlLGDWXK5Egd0LkjGITr9Ji01HHmi3A1AWjpznNDCdSX3Cmlm9EBRz7Q8VzGx/I+dQ==} peerDependencies: - '@devframes/agentic': 1.2.5 - devframe: ^1.2.5 + '@devframes/agentic': 1.2.6 + devframe: ^1.2.6 peerDependenciesMeta: '@devframes/agentic': optional: true - '@devframes/json-render-ui@1.2.5': - resolution: {integrity: sha512-5webuN7TupD24z2fLbLzxZjY8uN+yRdU3AIRT2/pK0v93neX+2lDZvvY3D6ChTyOyF5ybqi8rMvYgpzeqjL2ow==} + '@devframes/json-render-ui@1.2.6': + resolution: {integrity: sha512-JGWGZiVRdJUaT45Wvdh4eICh3ZSWspHlCvUAxCiq/HqRRwpqBgmBr000g+6OTYu7scKUr+Y/3SEtlD0PX6LdFg==} peerDependencies: - '@devframes/hub': ^1.2.5 - devframe: ^1.2.5 + '@devframes/hub': ^1.2.6 + devframe: ^1.2.6 peerDependenciesMeta: '@devframes/hub': optional: true devframe: optional: true - '@devframes/json-render@1.2.5': - resolution: {integrity: sha512-5jF1539H3z2ZusYd4J7YoXsI1N91Djmh8H7M0E0/roNbC/El56ufjQP6VrqBsku3PSSQddedjusQbHdRuwyhqw==} + '@devframes/json-render@1.2.6': + resolution: {integrity: sha512-ZCDrPxU+KEKMTyqp1ggYQP1OnDlbmXJ8AUtOm9NEntobe9OVYqi8yMabwkAWtc8mhqrOiBE1NpSmczg96IO1Xw==} peerDependencies: - '@devframes/hub': ^1.2.5 - devframe: ^1.2.5 + '@devframes/hub': ^1.2.6 + devframe: ^1.2.6 peerDependenciesMeta: '@devframes/hub': optional: true - '@devframes/plugin-assets@1.2.5': - resolution: {integrity: sha512-ywl2jPQD1QYX3IYlnPEKc/yZzE6e/cyvapN9HA5jYL2BlJGL+glq+8SOXdOoeYJ/BQxL5zF+bp/GPwGavITcWw==} + '@devframes/plugin-assets@1.2.6': + resolution: {integrity: sha512-4ZQigBOPYBgMSMsKvdysYipAiNI7XIA0UQl58CtB/mJHboHzisyRPCZONBNvMthLBB/WlvxNQpcvZZZt6EUyZQ==} hasBin: true peerDependencies: - '@devframes/plugin-assets--assets': 1.2.5 - '@devframes/service-shiki': 1.2.5 - devframe: ^1.2.5 + '@devframes/plugin-assets--assets': 1.2.6 + '@devframes/service-shiki': 1.2.6 + devframe: ^1.2.6 vite: ^8.3.4 peerDependenciesMeta: '@devframes/plugin-assets--assets': @@ -1363,12 +1363,12 @@ packages: vite: optional: true - '@devframes/plugin-code-server@1.2.5': - resolution: {integrity: sha512-P4ykCyDGf+KM7S6vjtWVM7wc2yqlnZza6KwNGPdHSfic2U/Rf3i/6QMLVCijBX14zF/GTBE54xN4VjdEtbghWw==} + '@devframes/plugin-code-server@1.2.6': + resolution: {integrity: sha512-2RVDs0VaRalo/7Gh2covB5FfizwerHRL/DNF+nmAe0+sVEhJG3ZZLkCRNxciZf5Erf0L1YUCSDOm53FaVghMdw==} hasBin: true peerDependencies: - '@devframes/plugin-code-server--assets': 1.2.5 - devframe: ^1.2.5 + '@devframes/plugin-code-server--assets': 1.2.6 + devframe: ^1.2.6 vite: ^8.3.4 peerDependenciesMeta: '@devframes/plugin-code-server--assets': @@ -1376,12 +1376,12 @@ packages: vite: optional: true - '@devframes/plugin-data-inspector@1.2.5': - resolution: {integrity: sha512-GPPjv7RAtcES36i4y4apshPMkikjc/HgTO2Nft8sgUlswfRASx2LsZ4LlTt4Exh/3SljUr01gbruLwVfuq7SPw==} + '@devframes/plugin-data-inspector@1.2.6': + resolution: {integrity: sha512-BGuax47RSCfut8gDhU71HehETTDMlwHCc2OGusPBkKf0iVeK4pygBf7hTAHZ9c0WLI+FfGMJ5bNwMyi/vUbbZg==} hasBin: true peerDependencies: - '@devframes/plugin-data-inspector--assets': 1.2.5 - devframe: ^1.2.5 + '@devframes/plugin-data-inspector--assets': 1.2.6 + devframe: ^1.2.6 vite: ^8.3.4 peerDependenciesMeta: '@devframes/plugin-data-inspector--assets': @@ -1389,12 +1389,12 @@ packages: vite: optional: true - '@devframes/plugin-inspect@1.2.5': - resolution: {integrity: sha512-TqrH2eU7lsTxbWgwoET9Kh7YKSY06qd+4ITBmi+64G6UzepRVdjcYvVfOyUIn1m3NZSVeVmmjexSB5P07WKf6Q==} + '@devframes/plugin-inspect@1.2.6': + resolution: {integrity: sha512-Kn+yoOfhd7EFGMb9IJ/CfXLUj9jxN8Dt5ZIV4UHs9o25T6bf333t5CXkreKM/VGRrFgBJ/WZsScYGBA9w4o6fw==} hasBin: true peerDependencies: - '@devframes/plugin-inspect--assets': 1.2.5 - devframe: ^1.2.5 + '@devframes/plugin-inspect--assets': 1.2.6 + devframe: ^1.2.6 vite: ^8.3.4 peerDependenciesMeta: '@devframes/plugin-inspect--assets': @@ -1402,13 +1402,13 @@ packages: vite: optional: true - '@devframes/plugin-messages@1.2.5': - resolution: {integrity: sha512-T1SfTR4cAzjb/whiFT6O3QisyhC2khpUUn1MR16ZV9iQ8sn/7tiCsMWYsAYpEkbHwVcxFPJv69jRGYmvE1exBw==} + '@devframes/plugin-messages@1.2.6': + resolution: {integrity: sha512-Tdl760E516IgGl0LrhNGldZWhcwKwun+5GiO1/iorniAMwjI5ETka0f9LGGicDIRakEyey50rLq2lYg/nGf5Gw==} hasBin: true peerDependencies: - '@devframes/hub': ^1.2.5 - '@devframes/plugin-messages--assets': 1.2.5 - devframe: ^1.2.5 + '@devframes/hub': ^1.2.6 + '@devframes/plugin-messages--assets': 1.2.6 + devframe: ^1.2.6 vite: ^8.3.4 peerDependenciesMeta: '@devframes/plugin-messages--assets': @@ -1416,12 +1416,12 @@ packages: vite: optional: true - '@devframes/plugin-og@1.2.5': - resolution: {integrity: sha512-S4swoLst55pcb1MU9G0IAbtkBqU6i5J2Q3i5e2XIOPs5smQHTsqYyOOW8wtqz7s09P3k6HJim/I1Bg450bKceQ==} + '@devframes/plugin-og@1.2.6': + resolution: {integrity: sha512-pkosYpXvqdxIpu+hvwvZhObULn94H0h5AEQvRFKq94yeXpkgQ7k6KO3D5X4sITt196Ud56MBXoOr0ZSTS/NOqg==} hasBin: true peerDependencies: - '@devframes/plugin-og--assets': 1.2.5 - devframe: ^1.2.5 + '@devframes/plugin-og--assets': 1.2.6 + devframe: ^1.2.6 vite: ^8.3.4 peerDependenciesMeta: '@devframes/plugin-og--assets': @@ -1429,12 +1429,12 @@ packages: vite: optional: true - '@devframes/plugin-terminals@1.2.5': - resolution: {integrity: sha512-IT+2fHDQYg/tkAyCCXveSpOMp5W9KG4f/eRrGZM/Tae4QMAL36k4pEKbXCWYzloVlr50jL6y+Nrj/rN56m5FSw==} + '@devframes/plugin-terminals@1.2.6': + resolution: {integrity: sha512-AZ+k+uCcnqV2X1c6HPmMmribTnvyttXSt7cjV7z1zvIIO+kpvCkowTnAmTHkywg6cguHopbtW6hRIHyekqv0VQ==} hasBin: true peerDependencies: - '@devframes/plugin-terminals--assets': 1.2.5 - devframe: ^1.2.5 + '@devframes/plugin-terminals--assets': 1.2.6 + devframe: ^1.2.6 vite: ^8.3.4 peerDependenciesMeta: '@devframes/plugin-terminals--assets': @@ -1442,17 +1442,17 @@ packages: vite: optional: true - '@devframes/service-open@1.2.5': - resolution: {integrity: sha512-U4y2Ahd534uEgkni5Zv9vNZamTFcIZq3e/VSmIZp5FMjgUHajPklZlk1ljB7MNcr9BbR7CMMNhRuPxIbAUDCMg==} + '@devframes/service-open@1.2.6': + resolution: {integrity: sha512-lFEpPp/4sIwR68jVaaLqU9XngxYTkjKuWt1ZvCQ9xCY77WU+N8N1zKhs/dDWzE0+bURcmMhcWXZQ3gUlzcbbtw==} peerDependencies: - devframe: ^1.2.5 + devframe: ^1.2.6 - '@devframes/vite@1.2.5': - resolution: {integrity: sha512-6Xk7W9mWqyc2iAjjL9weub0IOpyEUoTFSScz9FJIwvuPGHwNcsHE0ORZE0h/qVtRCabGrVRPa4636Hn7ZmoXAw==} + '@devframes/vite@1.2.6': + resolution: {integrity: sha512-k08K5VwYATnMwRqOhQ91TdeiC1mm/6aR3StCGkdxj82VnvHOlvjQNXHIzx3WAH0wGTwoMWnH65XvdHIzeD3vbA==} peerDependencies: - '@devframes/hub': ^1.2.5 - '@devframes/hub-ui': 1.2.5 - devframe: ^1.2.5 + '@devframes/hub': ^1.2.6 + '@devframes/hub-ui': 1.2.6 + devframe: ^1.2.6 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-2610121948-3074e65': - resolution: {integrity: sha512-uiBhW0t2J+Sbv4dG8XuBOwwgxpvg4ukgPHy0Sy13psBycVzJngKKeoGW7mWVv5qHkhMdXWqRuskizlU9EODvjQ==} + '@nuxt/cli-nightly@4.0.1-2610152140-ad8153a': + resolution: {integrity: sha512-D3hB3Qd9dDRySDxmHnAnwvxXxLCl6jy67wHVHntnm1d1blMJoklTyUfoZDcvhFDDXKlGvpyCyQZI7l9zaBswhQ==} 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.5: - resolution: {integrity: sha512-7txhfBgFafXHN/KIyP/M6F1W5WF1VPypoB4mZtZEa4KM8n1Y57EtnVm281Y3cg7SHti/PtfCtmmmtDh/k/CS3g==} + devframe@1.2.6: + resolution: {integrity: sha512-mHzcm6ADzXgRMWdoSX+5PjwhmwAuC3SpDPi3+URznlpzxJF6tXwy5h1xr82zPKju38EVtdnYRnnP4hZwLK01vA==} hasBin: true peerDependencies: - '@devframes/agentic': 1.2.5 + '@devframes/agentic': 1.2.6 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.5)(ocache@0.3.0)': + '@devframes/agentic@1.1.0(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.6)(ocache@0.3.0)': dependencies: '@modelcontextprotocol/client': 2.2.0 '@modelcontextprotocol/server': 2.2.0 - devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.6(@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.5)(ocache@0.3.0)': + '@devframes/agentic@1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0)': dependencies: '@modelcontextprotocol/client': 2.2.0 '@modelcontextprotocol/server': 2.2.0 - devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.6(@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.5': + '@devframes/hub-ui-onboard@1.2.6': dependencies: nostics: 1.3.0 package-manager-detector: 1.9.0 tinyexec: 1.3.1 - '@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-ui@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(devframe@1.2.6)': dependencies: - '@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/hub': 1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0) + devframe: 1.2.6(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) optionalDependencies: - '@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/json-render': 1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6) - '@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@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.6)(ocache@0.3.0)': dependencies: destr: 2.0.5 - devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.6(@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.5)(ocache@0.3.0) + '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0) transitivePeerDependencies: - crossws - ocache - '@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@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0)': dependencies: destr: 2.0.5 - devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.6(@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.5)(ocache@0.3.0) + '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0) transitivePeerDependencies: - crossws - ocache - '@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/json-render-ui@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6)': optionalDependencies: - '@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/hub': 1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0) + devframe: 1.2.6(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) - '@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/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6)': dependencies: '@json-render/core': 0.21.0(zod@4.6.5) - devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.6(@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.5(@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.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0) - '@devframes/plugin-assets@1.2.5(devframe@1.2.5)(vite@8.3.4)': + '@devframes/plugin-assets@1.2.6(devframe@1.2.6)(vite@8.3.4)': dependencies: - '@devframes/service-open': 1.2.5(devframe@1.2.5) + '@devframes/service-open': 1.2.6(devframe@1.2.6) cac: 7.1.0 chokidar: 5.0.0 - devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.6(@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.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-code-server@1.2.6(@devframes/hub-ui@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(devframe@1.2.6))(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6)(vite@8.3.4)': dependencies: - '@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) + '@devframes/vite': 1.2.6(@devframes/hub-ui@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(devframe@1.2.6))(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6)(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) + devframe: 1.2.6(@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.5(devframe@1.2.5)(vite@8.3.4)': + '@devframes/plugin-data-inspector@1.2.6(devframe@1.2.6)(vite@8.3.4)': dependencies: 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) + devframe: 1.2.6(@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.5(devframe@1.2.5)(vite@8.3.4)': + '@devframes/plugin-inspect@1.2.6(devframe@1.2.6)(vite@8.3.4)': dependencies: cac: 7.0.0 - devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.6(@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.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-messages@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6)(vite@8.3.4)': dependencies: - '@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) + '@devframes/hub': 1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0) + '@devframes/service-open': 1.2.6(devframe@1.2.6) cac: 7.0.0 - devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.6(@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.5(devframe@1.2.5)(vite@8.3.4)': + '@devframes/plugin-og@1.2.6(devframe@1.2.6)(vite@8.3.4)': dependencies: 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) + devframe: 1.2.6(@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.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-terminals@1.2.6(@devframes/hub-ui@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(devframe@1.2.6))(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6)(vite@8.3.4)': dependencies: - '@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) + '@devframes/vite': 1.2.6(@devframes/hub-ui@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(devframe@1.2.6))(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6)(vite@8.3.4) cac: 7.0.0 - devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.6(@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.5(devframe@1.2.5)': + '@devframes/service-open@1.2.6(devframe@1.2.6)': dependencies: - devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.6(@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.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/vite@1.2.6(@devframes/hub-ui@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(devframe@1.2.6))(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6)(vite@8.3.4)': dependencies: - devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.6(@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.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/hub': 1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0) + '@devframes/hub-ui': 1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(devframe@1.2.6) 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.5)(ocache@0.3.0) + '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0) ansis: 4.4.0 cac: 7.0.0 chokidar: 5.0.0 - devframe: 1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.6(@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-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/cli-nightly@4.0.1-2610152140-ad8153a(@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.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.6(@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.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) + '@devframes/hub': 1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.6)(ocache@0.3.0) + '@devframes/json-render': 1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6) + devframe: 1.2.6(@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.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) + '@devframes/hub': 1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0) + '@devframes/json-render': 1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6) + devframe: 1.2.6(@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.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) + '@devframes/hub': 1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0) + '@devframes/json-render': 1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6) + devframe: 1.2.6(@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,18 +11013,18 @@ snapshots: - ocache - srvx - '@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)': + '@vitejs/devtools@0.7.6(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(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.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) + '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.6)(ocache@0.3.0) + '@devframes/hub': 1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.6)(ocache@0.3.0) + '@devframes/hub-ui': 1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(devframe@1.2.6) + '@devframes/json-render-ui': 1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6) + '@devframes/plugin-inspect': 1.2.6(devframe@1.2.6)(vite@8.3.4) + '@devframes/plugin-messages': 1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6)(vite@8.3.4) + '@devframes/plugin-terminals': 1.2.6(@devframes/hub-ui@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(devframe@1.2.6))(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6)(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.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@0.11.22) + devframe: 1.2.6(@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 @@ -11040,18 +11040,18 @@ snapshots: - ocache - srvx - '@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)': + '@vitejs/devtools@0.7.6(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(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.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) + '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0) + '@devframes/hub': 1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0) + '@devframes/hub-ui': 1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(devframe@1.2.6) + '@devframes/json-render-ui': 1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6) + '@devframes/plugin-inspect': 1.2.6(devframe@1.2.6)(vite@8.3.4) + '@devframes/plugin-messages': 1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6)(vite@8.3.4) + '@devframes/plugin-terminals': 1.2.6(@devframes/hub-ui@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(devframe@1.2.6))(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6)(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.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@0.11.22) + devframe: 1.2.6(@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 @@ -11067,18 +11067,18 @@ snapshots: - ocache - srvx - '@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@0.7.6(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(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.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) + '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0) + '@devframes/hub': 1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0) + '@devframes/hub-ui': 1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(devframe@1.2.6) + '@devframes/json-render-ui': 1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6) + '@devframes/plugin-inspect': 1.2.6(devframe@1.2.6)(vite@8.3.4) + '@devframes/plugin-messages': 1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6)(vite@8.3.4) + '@devframes/plugin-terminals': 1.2.6(@devframes/hub-ui@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(devframe@1.2.6))(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6)(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.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.6(@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 @@ -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.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5) + devframe: 1.2.6(@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.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@0.11.22): + devframe@1.2.6(@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.5)(ocache@0.3.0) + '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0) cac: 7.0.0 transitivePeerDependencies: - ocache - srvx - devframe@1.2.5(@devframes/agentic@1.1.0)(cac@7.0.0)(ocache@0.3.0)(srvx@1.0.5): + devframe@1.2.6(@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.5)(ocache@0.3.0) + '@devframes/agentic': 1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0) cac: 7.0.0 transitivePeerDependencies: - ocache @@ -14178,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-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/cli': '@nuxt/cli-nightly@4.0.1-2610152140-ad8153a(@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)' @@ -14300,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-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/cli': '@nuxt/cli-nightly@4.0.1-2610152140-ad8153a(@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)' @@ -14422,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-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/cli': '@nuxt/cli-nightly@4.0.1-2610152140-ad8153a(@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)' @@ -16415,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.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': 0.7.6(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(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) @@ -16445,7 +16445,7 @@ snapshots: tinyglobby: 0.2.17 optionalDependencies: '@types/node': 26.6.5 - '@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': 0.7.6(@devframes/json-render@1.2.6(@devframes/hub@1.2.6(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.6)(ocache@0.3.0))(devframe@1.2.6))(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 932191ab71..0394f352f6 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -100,7 +100,7 @@ packages: - '!playgrounds/**/.output/**' overrides: - '@devframes/hub': &devframe ^1.2.5 + '@devframes/hub': &devframe ^1.2.6 '@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 4413c5c90e..1b715c0729 100644 --- a/skills-npm-lock.json +++ b/skills-npm-lock.json @@ -8,7 +8,7 @@ }, "devframe": { "package": "devframe", - "version": "1.2.5", + "version": "1.2.6", "skillPath": "skills/devframe/SKILL.md" }, "fast-npm-meta": { From 1ab9bfa3703ae7bdb37e8a0c80a35b3f2ad9b5ad Mon Sep 17 00:00:00 2001 From: "Anthony Fu (via agent)" Date: Tue, 20 Oct 2026 02:12:44 +0000 Subject: [PATCH 6/7] fix(onboard): decide in onConfirm whether the request comes from this machine --- packages/devtools-onboard/src/module.ts | 36 ++++++++++++------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/packages/devtools-onboard/src/module.ts b/packages/devtools-onboard/src/module.ts index cc99a1adf1..9428954f5b 100644 --- a/packages/devtools-onboard/src/module.ts +++ b/packages/devtools-onboard/src/module.ts @@ -1,13 +1,12 @@ import type { NuxtOptions } from '@nuxt/schema' +import type { IncomingMessage } from 'node:http' +import { AsyncLocalStorage } from 'node:async_hooks' 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` @@ -60,9 +59,13 @@ export default defineNuxtModule({ if (!nuxt.options.dev) return + // `onConfirm` only gets a web `Request`, which has no socket address. + const incoming = new AsyncLocalStorage() const onboarding = createOnboarding({ cwd: nuxt.options.rootDir, - base: BASE, + // 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/', packages: [await devtoolsSpec()], branding: { productName: 'Nuxt DevTools', @@ -74,10 +77,14 @@ export default defineNuxtModule({ 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, + // The dev server can be reachable from other devices, so only a click + // from a browser on this machine counts as the developer's; anything + // else, including a call outside a request, is refused. The default + // y/N prompt reads stdin, which nuxi keeps for its shortcuts and TUI. + onConfirm: () => { + const req = incoming.getStore() + return req !== undefined && fromThisMachine(req) + }, 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 @@ -87,17 +94,8 @@ export default defineNuxtModule({ }) nuxt.hook('vite:serverCreated', (server, { isClient }) => { - 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 (isClient) + server.middlewares.use((req, res, next) => incoming.run(req, () => onboarding.nodeMiddleware(req, res, next))) }) if (!onboarding.disabled) (nuxt.options.app.head.script ??= []).push({ type: 'module', src: onboarding.scriptSrc, tagPosition: 'bodyClose' }) From 450f0f6f29495a955b67a83ce443dc015048ea8d Mon Sep 17 00:00:00 2001 From: "Anthony Fu (via agent)" Date: Tue, 20 Oct 2026 02:44:01 +0000 Subject: [PATCH 7/7] fix(onboard): confirm installs in the terminal, adapted to nuxi's TUI --- packages/devtools-onboard/README.md | 2 +- packages/devtools-onboard/src/module.ts | 25 ++----- .../devtools-onboard/src/terminal-confirm.ts | 48 ++++++++++++ packages/devtools-onboard/src/this-machine.ts | 12 --- packages/devtools-onboard/test/module.test.ts | 33 ++------- .../test/terminal-confirm.test.ts | 74 +++++++++++++++++++ .../test/this-machine.test.ts | 19 ----- 7 files changed, 136 insertions(+), 77 deletions(-) create mode 100644 packages/devtools-onboard/src/terminal-confirm.ts delete mode 100644 packages/devtools-onboard/src/this-machine.ts create mode 100644 packages/devtools-onboard/test/terminal-confirm.test.ts delete 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 698d22cd0e..062a0d63b8 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`. -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. +The dev server can be reachable from other devices, so each install from the button waits for you in the terminal that runs `nuxt dev`. In nuxi's interactive view, press `y`; in plain mode, type `yes` and press Enter. Anything else refuses, and so does no answer within 5 minutes. When the terminal cannot answer, for example after the dev server restarted under the interactive view, 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 9428954f5b..3e1b334427 100644 --- a/packages/devtools-onboard/src/module.ts +++ b/packages/devtools-onboard/src/module.ts @@ -1,11 +1,9 @@ import type { NuxtOptions } from '@nuxt/schema' -import type { IncomingMessage } from 'node:http' -import { AsyncLocalStorage } from 'node:async_hooks' import { fileURLToPath } from 'node:url' import { createOnboarding } from '@devframes/hub-ui-onboard' -import { defineNuxtModule, installModule, tryResolveModule } from '@nuxt/kit' +import { defineNuxtModule, installModule, logger, tryResolveModule } from '@nuxt/kit' import { readPackageJSON } from 'pkg-types' -import { fromThisMachine } from './this-machine' +import { confirmInTerminal } from './terminal-confirm' const DEVTOOLS = '@nuxt/devtools' const DEVTOOLS_NIGHTLY = `${DEVTOOLS}-nightly` @@ -59,8 +57,6 @@ export default defineNuxtModule({ if (!nuxt.options.dev) return - // `onConfirm` only gets a web `Request`, which has no socket address. - const incoming = new AsyncLocalStorage() const onboarding = createOnboarding({ cwd: nuxt.options.rootDir, // Where Vite DevTools mounts the hub, so after the restart the real @@ -73,18 +69,13 @@ 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 dev server can be reachable from other devices, so only a click - // from a browser on this machine counts as the developer's; anything - // else, including a call outside a request, is refused. The default - // y/N prompt reads stdin, which nuxi keeps for its shortcuts and TUI. - onConfirm: () => { - const req = incoming.getStore() - return req !== undefined && fromThisMachine(req) - }, + // Upstream's own question refuses at once under nuxi's TUI (DF9007). + onConfirm: ({ command }) => confirmInTerminal(command, { + ask: message => logger.box(message), + warn: message => logger.warn(message), + }), 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 @@ -95,7 +86,7 @@ export default defineNuxtModule({ nuxt.hook('vite:serverCreated', (server, { isClient }) => { if (isClient) - server.middlewares.use((req, res, next) => incoming.run(req, () => onboarding.nodeMiddleware(req, res, next))) + server.middlewares.use(onboarding.nodeMiddleware) }) if (!onboarding.disabled) (nuxt.options.app.head.script ??= []).push({ type: 'module', src: onboarding.scriptSrc, tagPosition: 'bodyClose' }) diff --git a/packages/devtools-onboard/src/terminal-confirm.ts b/packages/devtools-onboard/src/terminal-confirm.ts new file mode 100644 index 0000000000..71b67cb34a --- /dev/null +++ b/packages/devtools-onboard/src/terminal-confirm.ts @@ -0,0 +1,48 @@ +import type { Buffer } from 'node:buffer' +import type { Readable } from 'node:stream' +import process from 'node:process' + +/** As long as `@devframes/hub-ui-onboard`'s own terminal question waits (DF9008). */ +const ANSWER_TIMEOUT = 5 * 60_000 + +export interface Terminal { + input?: Readable & { isTTY?: boolean, isRaw?: boolean } + /** Shows the question; nuxi's TUI pins a boxed log as an ACTION line. */ + ask: (message: string) => void + warn: (message: string) => void +} + +/** + * The `y/N` question of `@devframes/hub-ui-onboard`, adapted to `nuxi dev`. + * Its TUI holds stdin in raw mode, so a single key answers and the question + * is boxed to stay visible. In plain mode nuxi's own `y` shortcut copies the + * URL, so the answer is `yes`. Like upstream it refuses without a terminal + * (nuxi's TUI gives the dev server's fork none) and after 5 minutes. + */ +export function confirmInTerminal(command: string[], { input = process.stdin, ask, warn }: Terminal): Promise { + const run = `\`${command.join(' ')}\`` + if (!input.isTTY) { + warn(`A browser asked to install Nuxt DevTools, but no terminal can confirm it, so it was refused. Run ${run} yourself.`) + return Promise.resolve(false) + } + const answerWith = input.isRaw ? 'Press y' : 'Type yes and press Enter' + ask(`${answerWith} to allow installing Nuxt DevTools; anything else refuses.\nThe browser asked to run ${run}. If you did not click Install, refuse it: another device can reach this dev server.`) + + const flowing = input.readableFlowing + return new Promise((resolve) => { + const timer = setTimeout(() => { + warn('Nobody allowed installing Nuxt DevTools within 5 minutes, so it was refused.') + answer(false) + }, ANSWER_TIMEOUT) + const onData = (chunk: Buffer | string) => answer(/^y(?:es)?$/i.test(String(chunk).trim())) + function answer(allowed: boolean) { + clearTimeout(timer) + input.off('data', onData) + // Leave the stream to the TUI or readline that read it before. + if (!flowing) + input.pause() + resolve(allowed) + } + input.on('data', onData) + }) +} diff --git a/packages/devtools-onboard/src/this-machine.ts b/packages/devtools-onboard/src/this-machine.ts deleted file mode 100644 index 4dc177e4b4..0000000000 --- a/packages/devtools-onboard/src/this-machine.ts +++ /dev/null @@ -1,12 +0,0 @@ -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 465e6740cb..b13ea94f12 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, request } from 'node:http' +import { createServer } 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, vi } from 'vitest' +import { afterEach, describe, expect, it } from 'vitest' const onboardModule = fileURLToPath(new URL('../src/module.ts', import.meta.url)) @@ -80,16 +80,6 @@ async function serveViteMiddleware(nuxt: Nuxt): Promise { 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', () => { it('does nothing when devtools are disabled', async () => { const nuxt = await bootNuxt({ devtools: false, modules: [onboardModule] }) @@ -122,26 +112,13 @@ describe('@nuxt/devtools-onboard', () => { expect(status.branding.productName).toBe('Nuxt DevTools') }, 60_000) - it('installs on one click from this machine', async () => { + it('refuses to install when nobody can confirm it in the terminal', async () => { const nuxt = await bootNuxt({ dev: true }, { withoutDevtools: true }) - // 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) + // Vitest workers get a piped stdin, so no terminal can answer the question. 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) - - 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(install.status).toBe(403) expect((await onboardStatus(origin)).state).toBe('idle') }, 60_000) diff --git a/packages/devtools-onboard/test/terminal-confirm.test.ts b/packages/devtools-onboard/test/terminal-confirm.test.ts new file mode 100644 index 0000000000..b46b131234 --- /dev/null +++ b/packages/devtools-onboard/test/terminal-confirm.test.ts @@ -0,0 +1,74 @@ +import { PassThrough } from 'node:stream' +import { afterEach, expect, it, vi } from 'vitest' +import { confirmInTerminal } from '../src/terminal-confirm' + +const COMMAND = ['npm', 'i', '-D', '@nuxt/devtools@^4.0.0'] + +function terminal({ isTTY = true, isRaw = false } = {}) { + const asked: string[] = [] + const warned: string[] = [] + return { + input: Object.assign(new PassThrough(), { isTTY, isRaw }), + asked, + warned, + ask: (message: string) => asked.push(message), + warn: (message: string) => warned.push(message), + } +} + +afterEach(() => { + vi.useRealTimers() +}) + +it.each([ + // nuxi's TUI holds stdin in raw mode, so a single key answers + [true, 'y', true], + [true, 'Y', true], + [true, 'w', false], + [true, '\r', false], + // nuxi's plain mode reads lines + [false, 'yes\n', true], + [false, 'y\n', true], + [false, '\n', false], + [false, 'no\n', false], +])('raw mode %s: answers %j with %s', async (isRaw, key, allowed) => { + const t = terminal({ isRaw }) + const answer = confirmInTerminal(COMMAND, t) + expect(t.asked[0]).toMatch(isRaw ? /^Press y / : /^Type yes and press Enter /) + expect(t.asked[0]).toContain('npm i -D @nuxt/devtools@^4.0.0') + + t.input.write(key) + expect(await answer).toBe(allowed) + expect(t.input.readableFlowing).toBe(false) +}) + +it('keeps the terminal flowing for the TUI that read it first', async () => { + const t = terminal({ isRaw: true }) + const keys: string[] = [] + t.input.on('data', chunk => keys.push(String(chunk))) + + const answer = confirmInTerminal(COMMAND, t) + t.input.write('y') + expect(await answer).toBe(true) + expect(t.input.readableFlowing).toBe(true) + expect(keys).toEqual(['y']) +}) + +it('refuses at once without a terminal', async () => { + const t = terminal({ isTTY: false }) + expect(await confirmInTerminal(COMMAND, t)).toBe(false) + expect(t.asked).toEqual([]) + expect(t.warned[0]).toContain('npm i -D @nuxt/devtools@^4.0.0') +}) + +it('refuses when nobody answers within 5 minutes', async () => { + vi.useFakeTimers() + const t = terminal({ isRaw: true }) + const answer = confirmInTerminal(COMMAND, t) + + vi.advanceTimersByTime(5 * 60_000) + expect(await answer).toBe(false) + expect(t.warned).toHaveLength(1) + t.input.write('y') + expect(t.input.readableFlowing).toBe(false) +}) diff --git a/packages/devtools-onboard/test/this-machine.test.ts b/packages/devtools-onboard/test/this-machine.test.ts deleted file mode 100644 index b6e88a3d34..0000000000 --- a/packages/devtools-onboard/test/this-machine.test.ts +++ /dev/null @@ -1,19 +0,0 @@ -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) -})