diff --git a/clients/agent-runtime/Cargo.lock b/clients/agent-runtime/Cargo.lock index 081480cd..473fc693 100644 --- a/clients/agent-runtime/Cargo.lock +++ b/clients/agent-runtime/Cargo.lock @@ -997,7 +997,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd93fd2c1b27acd030440c9dbd9d14c1122aad622374fe05a670b67a4bc034be" dependencies = [ - "heapless 0.9.2", + "heapless 0.9.3", "thiserror 2.0.18", ] @@ -2680,9 +2680,9 @@ dependencies = [ [[package]] name = "heapless" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af2455f757db2b292a9b1768c4b70186d443bcb3b316252d6b540aec1cd89ed" +checksum = "25ba4bd83f9415b58b4ed8dc5714c76e626a105be4646c02630ad730ad3b5aa4" dependencies = [ "hash32 0.3.1", "stable_deref_trait", diff --git a/clients/cerebro/tests/backup_restore_test.rs b/clients/cerebro/tests/backup_restore_test.rs index d1381a27..ac511190 100644 --- a/clients/cerebro/tests/backup_restore_test.rs +++ b/clients/cerebro/tests/backup_restore_test.rs @@ -39,9 +39,10 @@ async fn backup_restore_preserves_data() { }; // Start Cerebro server - let (service, shutdown_tx, base_url) = helpers::start_cerebro_server(config.clone()) - .await - .expect("failed to start cerebro server"); + let (service, shutdown_tx, base_url, _server_handle) = + helpers::start_cerebro_server(config.clone()) + .await + .expect("failed to start cerebro server"); // Wait for service to become ready helpers::wait_for_ready(&base_url, 10) @@ -111,18 +112,30 @@ async fn backup_restore_preserves_data() { .expect("mem_search request failed"); let search_body: serde_json::Value = search_resp.json().await.expect("failed to parse search"); + let hits = search_body["result"]["output"]["results"] + .as_array() + .expect("mem_search should return results array"); + assert!( + !hits.is_empty(), + "mem_search should return at least one result" + ); assert!( - search_body["result"].is_object(), - "mem_search should return results" + hits.iter().any(|hit| { + hit["summary"] + .as_str() + .map(|s| s.contains("test content")) + .unwrap_or(false) + }), + "mem_search should return memories with expected content" ); // ========== BACKUP PHASE ========== // Gracefully shutdown Cerebro let _ = shutdown_tx.send(true); - + // Drop service to ensure all handles are released drop(service); - + // Wait for RocksDB to release locks and flush buffers tokio::time::sleep(Duration::from_secs(2)).await; @@ -172,7 +185,7 @@ async fn backup_restore_preserves_data() { ); // Restart Cerebro with restored data - let (_service, _shutdown_tx, base_url) = helpers::start_cerebro_server(config) + let (_service, _shutdown_tx, base_url, _server_handle) = helpers::start_cerebro_server(config) .await .expect("failed to restart cerebro after restore"); @@ -212,9 +225,21 @@ async fn backup_restore_preserves_data() { .expect("mem_search request failed after restore"); let search_body: serde_json::Value = search_resp.json().await.expect("failed to parse search"); + let hits = search_body["result"]["output"]["results"] + .as_array() + .expect("mem_search should return results array after restore"); + assert!( + !hits.is_empty(), + "mem_search should return at least one result after restore" + ); assert!( - search_body["result"].is_object(), - "mem_search should return results after restore" + hits.iter().any(|hit| { + hit["summary"] + .as_str() + .map(|s| s.contains("test content")) + .unwrap_or(false) + }), + "mem_search should return memories with expected content after restore" ); // Verify specific memory IDs are present diff --git a/clients/cerebro/tests/helpers/mod.rs b/clients/cerebro/tests/helpers/mod.rs index 50df4f0d..4da05acc 100644 --- a/clients/cerebro/tests/helpers/mod.rs +++ b/clients/cerebro/tests/helpers/mod.rs @@ -39,11 +39,16 @@ pub fn auth_header() -> Option<&'static str> { } /// Starts Cerebro server in background task with temporary storage. -/// Returns the service, shutdown channel, and base URL. +/// Returns the service, shutdown channel, base URL, and server task handle. #[allow(dead_code)] pub async fn start_cerebro_server( config: CerebroConfig, -) -> anyhow::Result<(Arc, watch::Sender, String)> { +) -> anyhow::Result<( + Arc, + watch::Sender, + String, + tokio::task::JoinHandle<()>, +)> { let service = Arc::new(CerebroService::from_config(config.clone()).await?); let listener = TcpListener::bind("127.0.0.1:0").await?; let addr = listener.local_addr()?; @@ -52,14 +57,14 @@ pub async fn start_cerebro_server( let (shutdown_tx, shutdown_rx) = watch::channel(false); let service_clone = service.clone(); - tokio::spawn(async move { + let server_handle = tokio::spawn(async move { axum::serve(listener, service_clone.router()) .with_graceful_shutdown(wait_for_shutdown(shutdown_rx)) .await .expect("server should run"); }); - Ok((service, shutdown_tx, base_url)) + Ok((service, shutdown_tx, base_url, server_handle)) } /// Waits for /readyz to return 200 with exponential backoff. @@ -130,11 +135,13 @@ pub async fn create_test_memories( } let body: serde_json::Value = resp.json().await?; - + // Extract memory_id from result.output.memory_id let memory_id = body["result"]["output"]["memory_id"] .as_str() - .ok_or_else(|| anyhow::anyhow!("Failed to extract memory_id from response: {:?}", body))? + .ok_or_else(|| { + anyhow::anyhow!("Failed to extract memory_id from response: {:?}", body) + })? .to_string(); memory_ids.push(memory_id); diff --git a/clients/web/apps/docs/src/content/docs/cerebro/operations.md b/clients/web/apps/docs/src/content/docs/cerebro/operations.md index 947db62c..98f471b5 100644 --- a/clients/web/apps/docs/src/content/docs/cerebro/operations.md +++ b/clients/web/apps/docs/src/content/docs/cerebro/operations.md @@ -345,8 +345,9 @@ After restoring from backup, verify service health and data integrity: ```bash curl -s -X POST http://127.0.0.1:4040/mcp \ -H "Content-Type: application/json" \ - -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"mem_stats","arguments":{}}}' \ - | jq '.result.content[0].text' + -H "Authorization: Bearer " \ + -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"mem_stats","arguments":{"input":{}}}}' \ + | jq '.result.output' ``` Compare the memory count with your pre-backup count. @@ -355,8 +356,9 @@ After restoring from backup, verify service health and data integrity: ```bash curl -s -X POST http://127.0.0.1:4040/mcp \ -H "Content-Type: application/json" \ - -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"mem_search","arguments":{"query":"test","limit":5}}}' \ - | jq '.result' + -H "Authorization: Bearer " \ + -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"mem_search","arguments":{"input":{"query":"test","limit":5}}}}' \ + | jq '.result.output' ``` Confirm that search returns expected results. @@ -365,6 +367,7 @@ After restoring from backup, verify service health and data integrity: ```bash curl -s -X POST http://127.0.0.1:4040/mcp \ -H "Content-Type: application/json" \ + -H "Authorization: Bearer " \ -d '{"jsonrpc":"2.0","id":3,"method":"tools/list"}' \ | jq '.result' ``` diff --git a/clients/web/pnpm-lock.yaml b/clients/web/pnpm-lock.yaml index 90fef3f3..3196e790 100644 --- a/clients/web/pnpm-lock.yaml +++ b/clients/web/pnpm-lock.yaml @@ -54,9 +54,6 @@ catalogs: '@vue/tsconfig': specifier: 0.9.1 version: 0.9.1 - astro: - specifier: 6.1.9 - version: 6.1.9 astro-vtbot: specifier: 2.1.12 version: 2.1.12 @@ -69,9 +66,6 @@ catalogs: portless: specifier: 0.6.0 version: 0.6.0 - postcss: - specifier: 8.5.10 - version: 8.5.10 sharp: specifier: 0.34.5 version: 0.34.5 @@ -116,11 +110,11 @@ importers: specifier: 'catalog:' version: 3.5.30 stylelint: - specifier: ^17.6.0 - version: 17.9.0(typescript@5.9.3) + specifier: ^17.9.1 + version: 17.9.1(typescript@5.9.3) stylelint-config-standard: specifier: ^40.0.0 - version: 40.0.0(stylelint@17.9.0(typescript@5.9.3)) + version: 40.0.0(stylelint@17.9.1(typescript@5.9.3)) typescript: specifier: 'catalog:' version: 5.9.3 @@ -195,8 +189,8 @@ importers: specifier: 'catalog:' version: 0.6.0 postcss: - specifier: 'catalog:' - version: 8.5.10 + specifier: ^8.5.13 + version: 8.5.13 tailwindcss: specifier: 'catalog:' version: 4.2.2 @@ -217,7 +211,7 @@ importers: dependencies: '@astrojs/starlight': specifier: 'catalog:' - version: 0.38.3(astro@6.1.9(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3)) + version: 0.38.3(astro@6.2.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3)) '@corvus/shared': specifier: workspace:* version: link:../../packages/shared @@ -231,8 +225,8 @@ importers: specifier: 'catalog:' version: 5.2.8 astro: - specifier: 'catalog:' - version: 6.1.9(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3) + specifier: ^6.2.1 + version: 6.2.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3) sharp: specifier: 'catalog:' version: 0.34.5 @@ -268,8 +262,8 @@ importers: specifier: 'catalog:' version: 5.2.8 astro: - specifier: 'catalog:' - version: 6.1.9(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3) + specifier: ^6.2.1 + version: 6.2.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3) sharp: specifier: 'catalog:' version: 0.34.5 @@ -368,8 +362,8 @@ packages: '@astrojs/compiler@2.13.1': resolution: {integrity: sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==} - '@astrojs/compiler@3.0.1': - resolution: {integrity: sha512-z97oYbdebO5aoWzuJ/8q5hLK232+17KcLZ7cJ8BCWk6+qNzVxn/gftC0KzMBUTD8WAaBkPpNSQK6PXLnNrZ0CA==} + '@astrojs/compiler@4.0.0': + resolution: {integrity: sha512-eouss7G8ygdZqHuke033VMcVw5HTZUu+PXd/h06DGDUg/jt5btPYPqh66ENWw/mU78rBrf/oeC4oqoBwMtDMNA==} '@astrojs/internal-helpers@0.9.0': resolution: {integrity: sha512-GdYkzR26re8izmyYlBqf4z2s7zNngmWLFuxw0UKiPNqHraZGS6GKWIwSHgS22RDlu2ePFJ8bzmpBcUszut/SDg==} @@ -1741,8 +1735,8 @@ packages: astro-vtbot@2.1.12: resolution: {integrity: sha512-6RlA0rdVPLT24FAyxsHAI71quTrLWuMXOADhcx8uEMTfuIVRhg4GajzmZmOiX6/nHA9p1gaIBuaTF3jVE1XWSA==} - astro@6.1.9: - resolution: {integrity: sha512-NsAHzMzpznB281g2aM5qnBt2QjfH6ttKiZ3hSZw52If8JJ+62kbnBKbyKhR2glQcJLl7Jfe4GSl0DihFZ36rRQ==} + astro@6.2.1: + resolution: {integrity: sha512-3g1sYNly+QAkuO5ErNEQBYvsxorNDSCUNIeStBs+kcXGchvKQl1Q9EuDNOvSg010XLlHJFLVFZs9LV18Jjp4Hg==} engines: {node: '>=22.12.0', npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true @@ -2903,8 +2897,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.10: - resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} + postcss@8.5.13: + resolution: {integrity: sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==} engines: {node: ^10 || ^12 || >=14} prismjs@1.30.0: @@ -3164,8 +3158,8 @@ packages: peerDependencies: stylelint: ^17.0.0 - stylelint@17.9.0: - resolution: {integrity: sha512-xO0jeY6z1/urFL5L/BZLmB1yYlbRiRMQnYH6ArZIDWJ+SZXGssOY7XoYb1JIv/L220+EBnwwJXJS4Mt/F96SvA==} + stylelint@17.9.1: + resolution: {integrity: sha512-THTmnAPJTrg/JhkTWZlSyrO+HUYMx6ELthIHeMyD2WOKqXIJUFQv2Yxn91bvUrZdbBJaW2dUuQdPST2wcQ6C3g==} engines: {node: '>=20.19.0'} hasBin: true @@ -3729,7 +3723,7 @@ snapshots: '@astrojs/compiler@2.13.1': {} - '@astrojs/compiler@3.0.1': {} + '@astrojs/compiler@4.0.0': {} '@astrojs/internal-helpers@0.9.0': dependencies: @@ -3784,12 +3778,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@5.0.4(astro@6.1.9(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3))': + '@astrojs/mdx@5.0.4(astro@6.2.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3))': dependencies: '@astrojs/markdown-remark': 7.1.1 '@mdx-js/mdx': 3.1.1 acorn: 8.16.0 - astro: 6.1.9(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3) + astro: 6.2.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3) es-module-lexer: 2.1.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -3813,17 +3807,17 @@ snapshots: stream-replace-string: 2.0.0 zod: 4.3.6 - '@astrojs/starlight@0.38.3(astro@6.1.9(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3))': + '@astrojs/starlight@0.38.3(astro@6.2.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3))': dependencies: '@astrojs/markdown-remark': 7.1.1 - '@astrojs/mdx': 5.0.4(astro@6.1.9(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3)) + '@astrojs/mdx': 5.0.4(astro@6.2.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3)) '@astrojs/sitemap': 3.7.2 '@pagefind/default-ui': 1.5.2 '@types/hast': 3.0.4 '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 6.1.9(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3) - astro-expressive-code: 0.41.7(astro@6.1.9(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3)) + astro: 6.2.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3) + astro-expressive-code: 0.41.7(astro@6.2.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3)) bcp-47: 2.1.0 hast-util-from-html: 2.0.3 hast-util-select: 6.0.4 @@ -4105,8 +4099,8 @@ snapshots: hast-util-to-html: 9.0.5 hast-util-to-text: 4.0.2 hastscript: 9.0.1 - postcss: 8.5.10 - postcss-nested: 6.2.0(postcss@8.5.10) + postcss: 8.5.13 + postcss-nested: 6.2.0(postcss@8.5.13) unist-util-visit: 5.1.0 unist-util-visit-parents: 6.0.2 @@ -4641,7 +4635,7 @@ snapshots: '@alloc/quick-lru': 5.2.0 '@tailwindcss/node': 4.2.2 '@tailwindcss/oxide': 4.2.2 - postcss: 8.5.10 + postcss: 8.5.13 tailwindcss: 4.2.2 '@tsconfig/node22@22.0.5': {} @@ -4864,7 +4858,7 @@ snapshots: '@vue/shared': 3.5.31 estree-walker: 2.0.2 magic-string: 0.30.21 - postcss: 8.5.10 + postcss: 8.5.13 source-map-js: 1.2.1 '@vue/compiler-ssr@3.5.31': @@ -4978,9 +4972,9 @@ snapshots: astring@1.9.0: {} - astro-expressive-code@0.41.7(astro@6.1.9(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3)): + astro-expressive-code@0.41.7(astro@6.2.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3)): dependencies: - astro: 6.1.9(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3) + astro: 6.2.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3) rehype-expressive-code: 0.41.7 astro-vtbot@2.1.12: @@ -4991,9 +4985,9 @@ snapshots: '@vtbag/turn-signal': 1.3.1 '@vtbag/utensil-drawer': 1.2.16 - astro@6.1.9(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3): + astro@6.2.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@5.9.3)(yaml@2.8.3): dependencies: - '@astrojs/compiler': 3.0.1 + '@astrojs/compiler': 4.0.0 '@astrojs/internal-helpers': 0.9.0 '@astrojs/markdown-remark': 7.1.1 '@astrojs/telemetry': 3.3.1 @@ -6570,14 +6564,14 @@ snapshots: dependencies: chalk: 5.6.2 - postcss-nested@6.2.0(postcss@8.5.10): + postcss-nested@6.2.0(postcss@8.5.13): dependencies: - postcss: 8.5.10 + postcss: 8.5.13 postcss-selector-parser: 6.1.2 - postcss-safe-parser@7.0.1(postcss@8.5.10): + postcss-safe-parser@7.0.1(postcss@8.5.13): dependencies: - postcss: 8.5.10 + postcss: 8.5.13 postcss-selector-parser@6.1.2: dependencies: @@ -6591,7 +6585,7 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.5.10: + postcss@8.5.13: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 @@ -6982,16 +6976,16 @@ snapshots: dependencies: inline-style-parser: 0.2.7 - stylelint-config-recommended@18.0.0(stylelint@17.9.0(typescript@5.9.3)): + stylelint-config-recommended@18.0.0(stylelint@17.9.1(typescript@5.9.3)): dependencies: - stylelint: 17.9.0(typescript@5.9.3) + stylelint: 17.9.1(typescript@5.9.3) - stylelint-config-standard@40.0.0(stylelint@17.9.0(typescript@5.9.3)): + stylelint-config-standard@40.0.0(stylelint@17.9.1(typescript@5.9.3)): dependencies: - stylelint: 17.9.0(typescript@5.9.3) - stylelint-config-recommended: 18.0.0(stylelint@17.9.0(typescript@5.9.3)) + stylelint: 17.9.1(typescript@5.9.3) + stylelint-config-recommended: 18.0.0(stylelint@17.9.1(typescript@5.9.3)) - stylelint@17.9.0(typescript@5.9.3): + stylelint@17.9.1(typescript@5.9.3): dependencies: '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) @@ -7020,8 +7014,8 @@ snapshots: micromatch: 4.0.8 normalize-path: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.10 - postcss-safe-parser: 7.0.1(postcss@8.5.10) + postcss: 8.5.13 + postcss-safe-parser: 7.0.1(postcss@8.5.13) postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 string-width: 8.2.0 @@ -7213,7 +7207,7 @@ snapshots: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 - postcss: 8.5.10 + postcss: 8.5.13 rollup: 4.60.2 tinyglobby: 0.2.16 optionalDependencies: @@ -7227,7 +7221,7 @@ snapshots: dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 - postcss: 8.5.10 + postcss: 8.5.13 rolldown: 1.0.0-rc.17 tinyglobby: 0.2.16 optionalDependencies: diff --git a/package.json b/package.json index 8941b16e..c8b04048 100644 --- a/package.json +++ b/package.json @@ -10,12 +10,12 @@ "lodash@>=4.17.0 <4.17.23": "^4.17.23", "devalue": "^5.6.4", "rollup": "^4.59.0", - "astro": "^6.1.6", + "astro": "^6.2.1", "defu": "^6.1.5", "h3": "^1.15.9", "picomatch@^2.3.1": "^2.3.2", "picomatch@^4.0.0": "^4.0.4", - "postcss": "^8.5.10", + "postcss": "^8.5.13", "smol-toml": "^1.6.1", "svgo": "^4.0.1", "yaml": "^2.8.3",