From 1a20c246492b22e2b2dca9f24b12830baa129453 Mon Sep 17 00:00:00 2001 From: acoBOYZ Date: Mon, 12 Oct 2026 17:53:29 +0300 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20per-server=20PTY=20start=20director?= =?UTF-8?q?y.=20settings=20=E2=86=92=20agent=20=E2=86=92=20shell,=20then?= =?UTF-8?q?=20new=20terminals=20open=20there.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bun.lock | 100 +++++++++--------- package.json | 10 +- packages/agent-skills/package.json | 2 +- packages/agent/Cargo.lock | 42 ++++---- packages/agent/Cargo.toml | 2 +- packages/agent/package.json | 2 +- packages/agent/src/ops/pty.rs | 26 ++++- packages/codegen/package.json | 4 +- packages/db/package.json | 4 +- packages/main/package.json | 12 +-- .../agent/hooks/useRuntimeConfig.ts | 7 ++ .../main/src/components/agent/pty/PtyPane.tsx | 13 ++- .../agent/settings/AgentSettingsSheet.tsx | 7 ++ .../agent/settings/ShellSection.tsx | 59 +++++++++++ .../agent/settings/useAgentSettingsSheet.ts | 7 +- packages/main/src/db/do/agent.ts | 1 + packages/main/src/server/agent/functions.ts | 2 + packages/main/src/server/agent/sessionDo.ts | 11 +- packages/ui/package.json | 2 +- scripts/install-agent.sh.tpl | 4 +- scripts/sync-brand.ts | 2 +- 21 files changed, 219 insertions(+), 100 deletions(-) create mode 100644 packages/main/src/components/agent/settings/ShellSection.tsx diff --git a/bun.lock b/bun.lock index 9d33448..7b5d41b 100644 --- a/bun.lock +++ b/bun.lock @@ -6,19 +6,19 @@ "name": "monrep-mono", "devDependencies": { "@monrep/agent-skills": "workspace:*", - "@shadcn/lint": "^0.2.0", + "@shadcn/lint": "^0.2.1", "@stylistic/eslint-plugin": "^5.10.0", "@tanstack/eslint-plugin-router": "^1.162.0", "@tanstack/intent": "^0.5.5", - "@types/bun": "^1.4.2", - "@types/node": "^26.6.4", + "@types/bun": "^1.4.3", + "@types/node": "^26.6.5", "bun-scan": "^1.1.2", "git-cliff": "^2.14.2", "knip": "^6.41.0", - "npm-check-updates": "^23.1.0", + "npm-check-updates": "^23.1.1", "oxfmt": "^0.72.0", "oxlint": "^1.87.0", - "oxlint-tsgolint": "^7.0.2003", + "oxlint-tsgolint": "^7.0.2004", "react-doctor": "^0.9.17", "rimraf": "^6.1.3", "turbo": "^2.11.7", @@ -29,7 +29,7 @@ "name": "@monrep/agent", "version": "0.1.0", "devDependencies": { - "@types/bun": "^1.4.2", + "@types/bun": "^1.4.3", "rust-doctor": "^0.7.0", }, }, @@ -38,7 +38,7 @@ "version": "0.5.2", "devDependencies": { "@tanstack/intent": "^0.5.5", - "@types/bun": "^1.4.2", + "@types/bun": "^1.4.3", }, }, "packages/codegen": { @@ -49,8 +49,8 @@ "@tanstack/pacer": "0.23.1", }, "devDependencies": { - "@types/bun": "^1.4.2", - "@types/node": "^26.6.4", + "@types/bun": "^1.4.3", + "@types/node": "^26.6.5", "typescript": "^7.0.2", }, }, @@ -62,9 +62,9 @@ "@durable-streams/server-cloudflare": "^0.1.1", "@durable-streams/state": "^0.3.2", "@monrep/utils": "workspace:^", - "@tanstack/react-db": "^0.5.7", + "@tanstack/react-db": "^0.5.8", "@tanstack/react-store": "^0.11.2", - "zod": "^4.6.5", + "zod": "^4.6.6", }, "devDependencies": { "@types/react": "^19.3.0", @@ -112,9 +112,9 @@ "@simplewebauthn/browser": "^14.0.0", "@simplewebauthn/server": "^14.0.3", "@tanstack/charts": "^1.1.0", - "@tanstack/react-db": "^0.5.7", - "@tanstack/react-router": "^1.170.41", - "@tanstack/react-start": "^1.168.60", + "@tanstack/react-db": "^0.5.8", + "@tanstack/react-router": "^1.170.42", + "@tanstack/react-start": "^1.168.61", "@tanstack/react-store": "^0.11.2", "@xterm/addon-fit": "^0.11.0", "@xterm/xterm": "^6.0.0", @@ -124,16 +124,16 @@ "react-dom": "^19.3.0", "temporal-polyfill": "^1.0.5", "uqr": "^0.1.3", - "zod": "^4.6.5", + "zod": "^4.6.6", }, "devDependencies": { "@cloudflare/vite-plugin": "^1.63.1", "@monrep/codegen": "workspace:^", "@rolldown/plugin-babel": "^0.2.4", "@tailwindcss/vite": "^4.3.3", - "@tanstack/router-cli": "^1.167.40", + "@tanstack/router-cli": "^1.167.41", "@types/d3-scale": "^4.0.9", - "@types/node": "^26.6.4", + "@types/node": "^26.6.5", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "@vitejs/plugin-react": "^6.1.2", @@ -179,7 +179,7 @@ "@tanstack/react-hotkeys": "^0.13.0", "@tanstack/react-pacer": "^0.24.1", "@tanstack/react-store": "^0.11.2", - "@tanstack/react-virtual": "^3.14.13", + "@tanstack/react-virtual": "^3.14.17", "class-variance-authority": "^0.7.1", "input-otp": "^1.5.0", "react-number-format": "^5.4.5", @@ -673,17 +673,17 @@ "@oxfmt/binding-win32-x64-msvc": ["@oxfmt/binding-win32-x64-msvc@0.72.0", "", { "os": "win32", "cpu": "x64" }, "sha512-uhooIN+DCzWX5uH7mQkSVCsODqsGluGJ4n3ch4+mITtWKpESMDjUJUSDBAVFuYQDwqY2McPDKdKJbM0oZVW/Qw=="], - "@oxlint-tsgolint/darwin-arm64": ["@oxlint-tsgolint/darwin-arm64@7.0.2003", "", { "os": "darwin", "cpu": "arm64" }, "sha512-TgV33rXr6ueXBwvc+0nssUkTBSXHJxv77I8p4RCjDjCnvexHtmoPiudVRDfj3S3puMDdeQdHW6jdUgUPy3nr/w=="], + "@oxlint-tsgolint/darwin-arm64": ["@oxlint-tsgolint/darwin-arm64@7.0.2004", "", { "os": "darwin", "cpu": "arm64" }, "sha512-uJk3ttju7Lz+Nv8WG4CsLyewoL1qf/Ny8S8OksJ7Bm/F14Tc9gMfW6arM1PCc57IzH/X/I79YsCWTgxX1FKibQ=="], - "@oxlint-tsgolint/darwin-x64": ["@oxlint-tsgolint/darwin-x64@7.0.2003", "", { "os": "darwin", "cpu": "x64" }, "sha512-hY3FMAjIaPDdK3FNxyRXRfHPOFeoBn6dmnLyKZgQ2IbTTD1adXhl6PfCIqHhCPvurigv7nf7mYuWZZ19MmJzmg=="], + "@oxlint-tsgolint/darwin-x64": ["@oxlint-tsgolint/darwin-x64@7.0.2004", "", { "os": "darwin", "cpu": "x64" }, "sha512-0BFfHTzDxNDFPcu0UZAXT6CyCJHAXM0dZveyDb4KEHa2qF/DSnOKOrmvK/wFuFol9kvijbGM9JfuOsor+zWXRw=="], - "@oxlint-tsgolint/linux-arm64": ["@oxlint-tsgolint/linux-arm64@7.0.2003", "", { "os": "linux", "cpu": "arm64" }, "sha512-eAET4JpyfBbg8SO0K74o4R55tEjVC292pIyxGOw2XGf8x/HrPNyxwQ478jMYOM54FIVOHc8sJ6VRHxluy6lucw=="], + "@oxlint-tsgolint/linux-arm64": ["@oxlint-tsgolint/linux-arm64@7.0.2004", "", { "os": "linux", "cpu": "arm64" }, "sha512-TAehQc+qdRXyDN3nl/r/3/oPrBVrbtrDeGMkFyG6mf+XphpoJ2lAMVFLclyvrVZCw02RbKROjyw8h72XwQQHcw=="], - "@oxlint-tsgolint/linux-x64": ["@oxlint-tsgolint/linux-x64@7.0.2003", "", { "os": "linux", "cpu": "x64" }, "sha512-GXdyO/XyqDJ3s/llR/oOktLsYNjZtWSQBy0JMc+/0gsNPvTcseKPhn9c6KcFyWmnr6H4vljYALbujonqSzzEGw=="], + "@oxlint-tsgolint/linux-x64": ["@oxlint-tsgolint/linux-x64@7.0.2004", "", { "os": "linux", "cpu": "x64" }, "sha512-LPunZvm6ZbWPfHMAyfZf9ci3HHvNEzLejO8zdqO3GoVGoSEHqqufHUD7+OgeatVSaJP7uXDJ2HaNOHIoH7go4Q=="], - "@oxlint-tsgolint/win32-arm64": ["@oxlint-tsgolint/win32-arm64@7.0.2003", "", { "os": "win32", "cpu": "arm64" }, "sha512-TWauXnPfet0VgpmrstoAK58eJ4gbuwPUuUTQmYQAzE/RG1CpnxXtrKUJULf6lyerPE4KN3gM+DflIA1hOH+38Q=="], + "@oxlint-tsgolint/win32-arm64": ["@oxlint-tsgolint/win32-arm64@7.0.2004", "", { "os": "win32", "cpu": "arm64" }, "sha512-FVWplzDImWhiuawnIZVETaQecv4GWom6Jv4Fx2xj7hhXXDZ5okEgiw1gTCImHTIQsi2ycC5oSxVwrn69bMh7iw=="], - "@oxlint-tsgolint/win32-x64": ["@oxlint-tsgolint/win32-x64@7.0.2003", "", { "os": "win32", "cpu": "x64" }, "sha512-DoRmfe7j8VqNlukp8liRVW45GQDhzRccNenjD/pdzelgtffW47pCMd1xbJLkPaPbKnTwID3onn3VZlL7JbebEA=="], + "@oxlint-tsgolint/win32-x64": ["@oxlint-tsgolint/win32-x64@7.0.2004", "", { "os": "win32", "cpu": "x64" }, "sha512-7PsxuUx11Ry9DYTWcljTzRbmZY9B6O9fFFfZV+aodQEMy6pfRT3fhoQRv9PtGN/89z1pPz3nFKrsFm6WqNtX7w=="], "@oxlint/binding-android-arm-eabi": ["@oxlint/binding-android-arm-eabi@1.87.0", "", { "os": "android", "cpu": "arm" }, "sha512-22tVIHlB9898OYsBKmYB6He1MCSqdTmK1BVWuSNUTVrpS0KWNege+U9uEYqGJ+KatQag0r/oU44i3OOs46z7HQ=="], @@ -845,7 +845,7 @@ "@sentry/server-utils": ["@sentry/server-utils@10.75.3", "", { "dependencies": { "@sentry/conventions": "^0.16.0", "@sentry/core": "10.75.3" } }, "sha512-PG3a+3GxurYYipLykRM3qezWjkIBYuqBjn8EuXzzlG6mpucMVtU8SRgr3EB0wdVaj1Pz+mhz+MLh8CGnLfKhCQ=="], - "@shadcn/lint": ["@shadcn/lint@0.2.0", "", { "dependencies": { "@eslint/core": "^0.17.0", "cn": "0.3.2" }, "optionalDependencies": { "oxc-parser": "^0.148.0" }, "peerDependencies": { "@typescript-eslint/parser": ">=8.40.0", "eslint": ">=9.30.0" }, "optionalPeers": ["@typescript-eslint/parser", "eslint"] }, "sha512-DTYr427BR8cDc0J0Y++u1Uh12NAYGmdPiqgy4wKSogi7RNEhFanIcfBMPRPUvkunt9QiJUfI7B28TW39MrPCFA=="], + "@shadcn/lint": ["@shadcn/lint@0.2.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "cn": "0.4.0" }, "optionalDependencies": { "oxc-parser": "^0.148.0" }, "peerDependencies": { "@typescript-eslint/parser": ">=8.40.0", "eslint": ">=9.30.0" }, "optionalPeers": ["@typescript-eslint/parser", "eslint"] }, "sha512-sDgmh/lb4yiPJMJZe5/jE6Vq5mgBzaIvKcdQ98faZk4c99WKTqASEhUqR6XCp7DDc29LwqTRIsula7kfhhDQnQ=="], "@shaderfrog/glsl-parser": ["@shaderfrog/glsl-parser@7.0.1", "", {}, "sha512-8mpfsoPeRhesY3pOrzNZBL8uG6N5GVX1EHLBYbd4gzKs+c7vaEIqpTNK5VrffU33qQN4cwpP2v3u4aPPBU32sw=="], @@ -897,7 +897,7 @@ "@tanstack/charts": ["@tanstack/charts@1.1.0", "", { "dependencies": { "@types/d3-force": "^3.0.10", "@types/d3-geo": "^3.1.0", "@types/d3-hierarchy": "^3.1.7", "@types/d3-sankey": "^0.12.5", "@types/d3-shape": "^3.1.8", "d3-array": "3.2.4", "d3-brush": "3.0.0", "d3-contour": "4.0.2", "d3-delaunay": "6.0.4", "d3-force": "3.0.0", "d3-geo": "3.1.1", "d3-hexbin": "0.2.2", "d3-hierarchy": "3.1.2", "d3-sankey": "0.12.3", "d3-scale": "4.0.2", "d3-selection": "3.0.0", "d3-shape": "3.2.0", "d3-zoom": "3.0.0", "tslib": "^2.8.1" }, "peerDependencies": { "@angular/core": ">=19", "@angular/platform-browser": ">=19", "alpinejs": ">=3.15", "lit": ">=3.1.3", "octane": "^0.1.13", "preact": ">=10", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0", "react-native": "^0.86.0", "react-native-svg": ">=15.15.4 <16", "solid-js": ">=1.8", "svelte": "^5.20.0", "vue": ">=3.5" }, "optionalPeers": ["@angular/core", "@angular/platform-browser", "alpinejs", "lit", "octane", "preact", "react", "react-dom", "react-native", "react-native-svg", "solid-js", "svelte", "vue"] }, "sha512-0mb05yZMrBUzjHBohcKtK1XcTKJH9b8LS2uT0iYjDiLU+QR2jo0hrUJramAgg/AfBLMu2DY5fOgKe5bsqd6z4Q=="], - "@tanstack/db": ["@tanstack/db@0.12.3", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "@tanstack/db-ivm": "0.1.26", "@tanstack/pacer-lite": "^0.2.1" }, "peerDependencies": { "typescript": ">=4.7" } }, "sha512-Plm3nLRSv0S4xY9sGvWPuQ10QiBoMRYjEJmvLCgjz4Sog6ypjIDMVeUByiRSmDHfKj7na2u4NF7T/HshwHEvDw=="], + "@tanstack/db": ["@tanstack/db@0.13.0", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "@tanstack/db-ivm": "0.1.26", "@tanstack/pacer-lite": "^0.2.1" }, "peerDependencies": { "typescript": ">=4.7" } }, "sha512-Opp8m9K/5cw2N8WXK59W0WeV0yD+hV8zreqQv6U8GLSQAssnOPvrC5j0UwIyl8SfT6LslGFYNFGfnVN5V0oWmg=="], "@tanstack/db-ivm": ["@tanstack/db-ivm@0.1.26", "", { "dependencies": { "fractional-indexing": "^3.2.0", "sorted-btree": "^1.8.1" }, "peerDependencies": { "typescript": ">=4.7" } }, "sha512-Td2HbR68RfpMPv4zyMNQk83z/5gTjGl/I1LA/07A26LXMEPGh+hTsNbfPSr5YPZhq6KXX9lDFjDzv3Qz3DjV5w=="], @@ -905,7 +905,7 @@ "@tanstack/eslint-plugin-router": ["@tanstack/eslint-plugin-router@1.162.0", "", { "dependencies": { "@typescript-eslint/utils": "^8.23.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0" } }, "sha512-0mv+5fOnWXeorh6zd3VyHVfpejIzc7+z68Ts0CQMDzMiwjM5rvea46fyl2m50zx5JFennsu7RO/QJAfnqkKJXw=="], - "@tanstack/history": ["@tanstack/history@1.162.4", "", {}, "sha512-utTS5L2OkeYUzXGohL1Z8sefu1GLNOJcxe8Hd6iIdc/Xo1K1nDB2JEp4iSFhvYh33xKC9V91TxrS8qfrpoKobQ=="], + "@tanstack/history": ["@tanstack/history@1.162.5", "", {}, "sha512-w1+YvwmTkwt5n8yUqEH3IWZ9DsmorCZW/EQ3KYHnqEgIkOZpH54NvW6/Epq3Dzb8H0ifIeYX8PExvrNLIH5FIA=="], "@tanstack/hotkeys": ["@tanstack/hotkeys@0.11.0", "", { "dependencies": { "@tanstack/store": "^0.11.2" } }, "sha512-uFKTuknj3sNp5ERoxsI0ISMMOVw3KmSkgy2iIcp19QR/zheYm7bkwzNndMv5NDAqhXpavOn6h4A6HPVJFCBXPg=="], @@ -915,49 +915,49 @@ "@tanstack/pacer-lite": ["@tanstack/pacer-lite@0.2.2", "", {}, "sha512-eQ1MyLKCHyXiH7NbdmB80W77OhiMgGBUb+qDx/8WMGbwg5Lf/NlfD0TfNYAqY77i8V3AxoDoYdICrQE5ADw4Yw=="], - "@tanstack/react-db": ["@tanstack/react-db@0.5.7", "", { "dependencies": { "@tanstack/db": "0.12.3" }, "peerDependencies": { "react": ">=18.0.0" } }, "sha512-MRJHJXacI3+6oZEIGgv/3NozBYGNS53bWj68fVd7U/TBNFPyTB399MmiMloP3K1tDjCTEdry0z3cfta46Wh2Kw=="], + "@tanstack/react-db": ["@tanstack/react-db@0.5.8", "", { "dependencies": { "@tanstack/db": "0.13.0" }, "peerDependencies": { "react": ">=18.0.0" } }, "sha512-CpNBCW+jdAwTCJTP9b6u8S5ZfX+x5KtAKwcJ4hb+Y4zDJptbFy2teGxYk7oaIguGXdZreMd7lJH7jm3+NZBECA=="], "@tanstack/react-hotkeys": ["@tanstack/react-hotkeys@0.13.0", "", { "dependencies": { "@tanstack/hotkeys": "0.11.0", "@tanstack/react-store": "^0.11.2" }, "peerDependencies": { "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-+iF7bQe1YegbMa/mL7Zl490OXjSuGLlu2IPYd2YcvdeI8OcTHfdENPrRNk7PklWQ2WAIJjCVxMXiQ/Uiq8fzIQ=="], "@tanstack/react-pacer": ["@tanstack/react-pacer@0.24.1", "", { "dependencies": { "@tanstack/pacer": "0.23.1", "@tanstack/react-store": "^0.11.2" }, "peerDependencies": { "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-VjztEJmrNtLVdRrRaIsqx/+uX5qLHLp57dk19gVC/wLEu8ykU9twq6SKzhHSsajDEpNMauo7+bsFWAgjd+7Uiw=="], - "@tanstack/react-router": ["@tanstack/react-router@1.170.41", "", { "dependencies": { "@tanstack/history": "1.162.4", "@tanstack/react-store": "^0.11.2", "@tanstack/router-core": "1.171.34", "isbot": "^5.1.22" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-Mpvw8Wm5MGDbTqI8Yc9flLKxbOHwoWocv0H2aGKcgw2a017oK5nZWqa954P+DrUx/8fI98YNywnHP5XcD3tQ9w=="], + "@tanstack/react-router": ["@tanstack/react-router@1.170.42", "", { "dependencies": { "@tanstack/history": "1.162.5", "@tanstack/react-store": "^0.11.2", "@tanstack/router-core": "1.171.35", "isbot": "^5.1.22" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-4wBptX7DRvc+v/XQ0MxL9rKlmSFb0ob3tSEZWF4ssSl1DD+1HAofWM3HwSn9liQN0r7e00qiv5WQMp6rObOc1g=="], - "@tanstack/react-start": ["@tanstack/react-start@1.168.60", "", { "dependencies": { "@tanstack/react-router": "1.170.41", "@tanstack/react-start-client": "1.168.39", "@tanstack/react-start-rsc": "0.1.59", "@tanstack/react-start-server": "1.167.46", "@tanstack/router-utils": "1.162.3", "@tanstack/start-client-core": "1.170.34", "@tanstack/start-plugin-core": "1.171.49", "@tanstack/start-server-core": "1.169.39", "pathe": "^2.0.3" }, "peerDependencies": { "@rsbuild/core": "^2.0.0", "@vitejs/plugin-rsc": "*", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0", "vite": ">=7.0.0" }, "optionalPeers": ["@rsbuild/core", "@vitejs/plugin-rsc", "vite"] }, "sha512-WMOM0Xlh2lPbVlbjYM6uOxOpiaWRPvODm/dwkLsGKq5tjyHOHZmKckJgwlrZl7OQUqFlOZHYj8bKUTgoeg8cUQ=="], + "@tanstack/react-start": ["@tanstack/react-start@1.168.61", "", { "dependencies": { "@tanstack/react-router": "1.170.42", "@tanstack/react-start-client": "1.168.40", "@tanstack/react-start-rsc": "0.1.60", "@tanstack/react-start-server": "1.167.47", "@tanstack/router-utils": "1.162.3", "@tanstack/start-client-core": "1.170.35", "@tanstack/start-plugin-core": "1.171.50", "@tanstack/start-server-core": "1.169.40", "pathe": "^2.0.3" }, "peerDependencies": { "@rsbuild/core": "^2.0.0", "@vitejs/plugin-rsc": "*", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0", "vite": ">=7.0.0" }, "optionalPeers": ["@rsbuild/core", "@vitejs/plugin-rsc", "vite"] }, "sha512-qZdnI9Hug445JN5dEpq5aIVGqu6YVSmKOE3rw82ugJ9D65Kd7SWvP9/4M6jAo+P3qX1y6RtGuD3ascVxB0WIgQ=="], - "@tanstack/react-start-client": ["@tanstack/react-start-client@1.168.39", "", { "dependencies": { "@tanstack/react-router": "1.170.41", "@tanstack/router-core": "1.171.34", "@tanstack/start-client-core": "1.170.34" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-Uby0uo37JlQgUKHU0snDwH9nYiEeAjm9+7pUOFgycU/UszEILC2SO2DSCoNnCMuHKj9z+4URKzBYIP2exT9+wg=="], + "@tanstack/react-start-client": ["@tanstack/react-start-client@1.168.40", "", { "dependencies": { "@tanstack/react-router": "1.170.42", "@tanstack/router-core": "1.171.35", "@tanstack/start-client-core": "1.170.35" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-1tC0qw3qF2GhH0+4opN+qIJXrl0eoQeNOpU87qpPBiv4XQe2NdR51velqypxXWguoY2h3v1juLNbt+sYA24XkA=="], - "@tanstack/react-start-rsc": ["@tanstack/react-start-rsc@0.1.59", "", { "dependencies": { "@tanstack/react-router": "1.170.41", "@tanstack/router-core": "1.171.34", "@tanstack/router-utils": "1.162.3", "@tanstack/start-client-core": "1.170.34", "@tanstack/start-fn-stubs": "1.162.0", "@tanstack/start-plugin-core": "1.171.49", "@tanstack/start-storage-context": "1.167.36", "pathe": "^2.0.3" }, "peerDependencies": { "@rspack/core": ">=2.0.0-0", "@vitejs/plugin-rsc": ">=0.5.30", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0", "react-server-dom-rspack": ">=0.0.2" }, "optionalPeers": ["@rspack/core", "@vitejs/plugin-rsc", "react-server-dom-rspack"] }, "sha512-M2Lqxkk5C1zQncQs5paqX+/OLdOht51pg6D84YfLMrNsjhU/nzb6wd92MIja0mi5i23+L+fxLLjQYR2DObjBlw=="], + "@tanstack/react-start-rsc": ["@tanstack/react-start-rsc@0.1.60", "", { "dependencies": { "@tanstack/react-router": "1.170.42", "@tanstack/router-core": "1.171.35", "@tanstack/router-utils": "1.162.3", "@tanstack/start-client-core": "1.170.35", "@tanstack/start-fn-stubs": "1.162.0", "@tanstack/start-plugin-core": "1.171.50", "@tanstack/start-storage-context": "1.167.37", "pathe": "^2.0.3" }, "peerDependencies": { "@rspack/core": ">=2.0.0-0", "@vitejs/plugin-rsc": ">=0.5.30", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0", "react-server-dom-rspack": ">=0.0.2" }, "optionalPeers": ["@rspack/core", "@vitejs/plugin-rsc", "react-server-dom-rspack"] }, "sha512-P1k3zjsYNr7j9StKDpBi1aYD+D/9iMQ1f0H2UPqAMPyQzy4I09ikPpEkbOtjTGUCVZrEjE54x+yjixrbXyMsbg=="], - "@tanstack/react-start-server": ["@tanstack/react-start-server@1.167.46", "", { "dependencies": { "@tanstack/react-router": "1.170.41", "@tanstack/router-core": "1.171.34", "@tanstack/start-server-core": "1.169.39" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-K7z8xBOEdp8u5CZCxWrbS0tFtk5XZGMdhssLeZlRZKlLDbX7BKLdMtJ7th5sR6QVt9MTUAg3LcoqvJMPSFF+lg=="], + "@tanstack/react-start-server": ["@tanstack/react-start-server@1.167.47", "", { "dependencies": { "@tanstack/react-router": "1.170.42", "@tanstack/router-core": "1.171.35", "@tanstack/start-server-core": "1.169.40" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-8/hEzQhJD2RbJ/6VbiJq3whQ4NYxMWCc5MVu32moiPMYjcyvXNWWT1fTgn2aVezsk06ktZnckBnkA3TMJxWejA=="], "@tanstack/react-store": ["@tanstack/react-store@0.11.2", "", { "dependencies": { "@tanstack/store": "0.11.2", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-oj5O5DmiMWE+ih+SioX2ayC1kbK7d3fpLx0B75fPJr9nY3zU+hoW010yr64qXsY/9fyiLVE2bn5mGNV3owm8RQ=="], - "@tanstack/react-virtual": ["@tanstack/react-virtual@3.14.13", "", { "dependencies": { "@tanstack/virtual-core": "3.17.11" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-JbDTAwtzZ99aOeCrAfW5EsE5KSq5RWh6Af2dtFwyLIIk48Ja7vm6n4axu/43T3vfjFnEGJalxJ1wyYjSQD6bSg=="], + "@tanstack/react-virtual": ["@tanstack/react-virtual@3.14.17", "", { "dependencies": { "@tanstack/virtual-core": "3.19.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-b7b5LwydgQAWcsAWEZyd3iZkN5/QcC6S0K5E1zNheyFoSZl7E78foepGeDHlX2+JuXilA+VIGGFsUYPFddOrig=="], - "@tanstack/router-cli": ["@tanstack/router-cli@1.167.40", "", { "dependencies": { "@tanstack/router-generator": "1.167.40", "chokidar": "^5.0.0", "yargs": "^17.7.2" }, "bin": { "tsr": "bin/tsr.cjs" } }, "sha512-KKX9hedstsc0eEKfUAwrwy7CLNXdSxjiBBq0uojnjMnOnraRXP9Nf+x6/ZsAultxHp7NhWfYddO8VdT0zAtUDg=="], + "@tanstack/router-cli": ["@tanstack/router-cli@1.167.41", "", { "dependencies": { "@tanstack/router-generator": "1.167.41", "chokidar": "^5.0.0", "yargs": "^17.7.2" }, "bin": { "tsr": "bin/tsr.cjs" } }, "sha512-hi9lqsq9dS6sFWYS642BdQmW/ZFsIj3Ava8wElgAo8czCNZrE12BMFPCS0j4legpCMH8pVJrSCORvdYbIlQVAA=="], - "@tanstack/router-core": ["@tanstack/router-core@1.171.34", "", { "dependencies": { "@tanstack/history": "1.162.4", "cookie-es": "^3.0.0", "seroval": "^1.6.7", "seroval-plugins": "^1.6.7" } }, "sha512-X+19pGuuLVPvvAvPYw9v/+ktRk5cCll8AtfpBpOhDRmVgUMrfqze0467xtq8YRVVs/mmo5rVtWn/7Tp32RDBKw=="], + "@tanstack/router-core": ["@tanstack/router-core@1.171.35", "", { "dependencies": { "@tanstack/history": "1.162.5", "cookie-es": "^3.0.0", "seroval": "^1.6.7", "seroval-plugins": "^1.6.7" } }, "sha512-fNKsx/rrxppFNmCQ9mPwg4OCb1O3qfLPVrE9FVyyWyRPQk0f0NK5bdJUzTYZQ+T/Ajfllr3SEx9pntM45F5amQ=="], - "@tanstack/router-generator": ["@tanstack/router-generator@1.167.40", "", { "dependencies": { "@babel/types": "^7.29.8", "@tanstack/router-core": "1.171.34", "@tanstack/router-utils": "1.162.3", "@tanstack/virtual-file-routes": "1.162.0", "jiti": "^2.7.0", "magic-string": "^0.30.21", "prettier": "^3.9.6", "zod": "^4.5.4" } }, "sha512-WkEueqEvsBBudzO0fx1nWfOmRNW8OAvBoVABTGls9bAWzjdC+KDGHvjCNrvn88ofs1F6gqL8aWnzKCbxW3dCyQ=="], + "@tanstack/router-generator": ["@tanstack/router-generator@1.167.41", "", { "dependencies": { "@babel/types": "^7.29.8", "@tanstack/router-core": "1.171.35", "@tanstack/router-utils": "1.162.3", "@tanstack/virtual-file-routes": "1.162.0", "jiti": "^2.7.0", "magic-string": "^0.30.21", "prettier": "^3.9.6", "zod": "^4.5.4" } }, "sha512-N4zQB72lgQ6HeSv77JFSPQ7I+tUDT4xHAPvWBRT1Ah71IiTGXSGPJyqrN8raHcS7vk+QYx/tpWRg74SpqC/FUg=="], - "@tanstack/router-plugin": ["@tanstack/router-plugin@1.168.42", "", { "dependencies": { "@babel/core": "^7.29.7", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "@tanstack/router-core": "1.171.34", "@tanstack/router-generator": "1.167.40", "@tanstack/router-utils": "1.162.3", "chokidar": "^5.0.0", "unplugin": "^3.3.0", "zod": "^4.5.4" }, "peerDependencies": { "@rsbuild/core": ">=1.0.2 || ^2.0.0", "@tanstack/react-router": "^1.170.41", "vite": ">=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0", "vite-plugin-solid": "^2.11.10 || ^3.0.0-0", "webpack": ">=5.92.0" }, "optionalPeers": ["@rsbuild/core", "@tanstack/react-router", "vite", "vite-plugin-solid", "webpack"] }, "sha512-vAR5WXJh/ErseEWQftDhsJcr2c++ucRQ6FbqN3ygMO44+ZxxRfW3sIpZmddHROVSmBk8jc6MrwjTPNjVhd62Vw=="], + "@tanstack/router-plugin": ["@tanstack/router-plugin@1.168.43", "", { "dependencies": { "@babel/core": "^7.29.7", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "@tanstack/router-core": "1.171.35", "@tanstack/router-generator": "1.167.41", "@tanstack/router-utils": "1.162.3", "chokidar": "^5.0.0", "unplugin": "^3.3.0", "zod": "^4.5.4" }, "peerDependencies": { "@rsbuild/core": ">=1.0.2 || ^2.0.0", "@tanstack/react-router": "^1.170.42", "vite": ">=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0", "vite-plugin-solid": "^2.11.10 || ^3.0.0-0", "webpack": ">=5.92.0" }, "optionalPeers": ["@rsbuild/core", "@tanstack/react-router", "vite", "vite-plugin-solid", "webpack"] }, "sha512-0cMS2IhVJ1rfBqgcsLWBhKhHaW1oC26zCU2QveZnlDO+EjwuNH5XkRt+ZxhAinZZJIIRX7LEC/SBvjUutS4Zrw=="], "@tanstack/router-utils": ["@tanstack/router-utils@1.162.3", "", { "dependencies": { "@babel/generator": "^7.29.8", "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "ansis": "^4.3.1", "babel-dead-code-elimination": "^1.0.12", "diff": "^8.0.4", "pathe": "^2.0.3", "tinyglobby": "^0.2.17" } }, "sha512-Icb0xGuG1+54IV0WMLRcc3ErTx2HeJWyPG661FkQ8UT6guoBq1FJjFRqlG/JS0xi4mFFkBhvwO7tbLa32f3yxA=="], - "@tanstack/start-client-core": ["@tanstack/start-client-core@1.170.34", "", { "dependencies": { "@tanstack/router-core": "1.171.34", "@tanstack/start-fn-stubs": "1.162.0", "@tanstack/start-storage-context": "1.167.36", "seroval": "^1.6.7" } }, "sha512-LfwZSbau2MLLZ/uPAoO+NC9fK3J66c0wLhnNQqIa+Goqw7bXPjkHwlsjY7evlUz1AnyhhQ1Qab95v+VmP0TZ9A=="], + "@tanstack/start-client-core": ["@tanstack/start-client-core@1.170.35", "", { "dependencies": { "@tanstack/router-core": "1.171.35", "@tanstack/start-fn-stubs": "1.162.0", "@tanstack/start-storage-context": "1.167.37", "seroval": "^1.6.7" } }, "sha512-eX20qrqsOjU1C0plX4qJ/2Wiaz2ipQHkvAfbUJFIk+3SxaP9iCiDwML+BDifaupM3ic+6svy0s1iIFrm8dC9bg=="], "@tanstack/start-fn-stubs": ["@tanstack/start-fn-stubs@1.162.0", "", {}, "sha512-QWfUZ3Yo923tdQn38LyKMU8rcTw69zc+T4dAvgTWV4O56SqFRsGfS0lSWIMhJRwXIx/bvdi7nTUBDdZtTHtpTQ=="], - "@tanstack/start-plugin-core": ["@tanstack/start-plugin-core@1.171.49", "", { "dependencies": { "@babel/code-frame": "7.29.7", "@babel/core": "^7.29.7", "@babel/types": "^7.29.8", "@jridgewell/remapping": "^2.3.5", "@tanstack/router-core": "1.171.34", "@tanstack/router-generator": "1.167.40", "@tanstack/router-plugin": "1.168.42", "@tanstack/router-utils": "1.162.3", "@tanstack/start-server-core": "1.169.39", "exsolve": "^1.1.1", "lightningcss": "^1.33.0", "pathe": "^2.0.3", "picomatch": "^4.0.7", "seroval": "^1.6.7", "source-map": "^0.7.6", "srvx": "^0.11.22", "tinyglobby": "^0.2.17", "ufo": "^1.6.4", "vitefu": "^1.1.3", "xmlbuilder2": "^4.0.3", "zod": "^4.5.4" }, "peerDependencies": { "@rsbuild/core": "^2.0.0", "vite": ">=7.0.0" }, "optionalPeers": ["@rsbuild/core", "vite"] }, "sha512-HPOb7LnMc71k38cd5uvMybPPUU/Q/56KvSqQzSWz7cps1ZDFXaxUM6EFaFHLCdgTWqGexNGDdRE+sUVPVBM4Xg=="], + "@tanstack/start-plugin-core": ["@tanstack/start-plugin-core@1.171.50", "", { "dependencies": { "@babel/code-frame": "7.29.7", "@babel/core": "^7.29.7", "@babel/types": "^7.29.8", "@jridgewell/remapping": "^2.3.5", "@tanstack/router-core": "1.171.35", "@tanstack/router-generator": "1.167.41", "@tanstack/router-plugin": "1.168.43", "@tanstack/router-utils": "1.162.3", "@tanstack/start-server-core": "1.169.40", "exsolve": "^1.1.1", "lightningcss": "^1.33.0", "pathe": "^2.0.3", "picomatch": "^4.0.7", "seroval": "^1.6.7", "source-map": "^0.7.6", "srvx": "^0.11.22", "tinyglobby": "^0.2.17", "ufo": "^1.6.4", "vitefu": "^1.1.3", "xmlbuilder2": "^4.0.3", "zod": "^4.5.4" }, "peerDependencies": { "@rsbuild/core": "^2.0.0", "vite": ">=7.0.0" }, "optionalPeers": ["@rsbuild/core", "vite"] }, "sha512-qgxii74+p8oTVTPEeDKqiTS/ORXw9+Xt6DRkq0tPqjs8Q7NYxE9L9wl+ABFQFeVgrCSm9/08TKYc0X40A29hCw=="], - "@tanstack/start-server-core": ["@tanstack/start-server-core@1.169.39", "", { "dependencies": { "@tanstack/history": "1.162.4", "@tanstack/router-core": "1.171.34", "@tanstack/start-client-core": "1.170.34", "@tanstack/start-storage-context": "1.167.36", "fetchdts": "^0.1.6", "h3-v2": "npm:h3@2.0.1-rc.20", "seroval": "^1.6.7" } }, "sha512-pqqkxhXY46nuFSYt6TsMGyABiplUzHFHndKAlRRGC0fWDrJCH1koWxVMoxySa51ZETV79f/z73b5UZ1jfIkXwQ=="], + "@tanstack/start-server-core": ["@tanstack/start-server-core@1.169.40", "", { "dependencies": { "@tanstack/history": "1.162.5", "@tanstack/router-core": "1.171.35", "@tanstack/start-client-core": "1.170.35", "@tanstack/start-storage-context": "1.167.37", "fetchdts": "^0.1.6", "h3-v2": "npm:h3@2.0.1-rc.20", "seroval": "^1.6.7" } }, "sha512-bhHY30/0e8wsyCzTkb9suK3uLSyUunYxV4TZJZYs1kdCk511KwA1YLvDrNbzychY2ANEm1Y3R0bNFmk/dEqi2Q=="], - "@tanstack/start-storage-context": ["@tanstack/start-storage-context@1.167.36", "", { "dependencies": { "@tanstack/router-core": "1.171.34" } }, "sha512-x+xCXK2GtFzY6NbXqAg8YpU6cwAjDfMeYSNzxfGzntpjbwBRHHrXeC/kYUnBBQCV7wK4kJ8vBBQGP0OyYTasUg=="], + "@tanstack/start-storage-context": ["@tanstack/start-storage-context@1.167.37", "", { "dependencies": { "@tanstack/router-core": "1.171.35" } }, "sha512-79OkFNSUoLSQGB4Yz6/bF2aZcRX86438S/v+Ui5hdyviGmwgNYnZKMsKCK0q9bW3UPBQEAfhYX5trSqYTdXJSg=="], "@tanstack/store": ["@tanstack/store@0.11.2", "", {}, "sha512-sJ4mjol8uQsHV0gOJzzjwXfh2Fwm+Sz0+8deqiTm4jGbMdjzNSW+xZCFm0kUa870uhd8yi+DpKnZb5Kc4apa0Q=="], - "@tanstack/virtual-core": ["@tanstack/virtual-core@3.17.11", "", {}, "sha512-+ILjvtHup6Y2hzQ6YzwMgX1Q+oQpxEGOXCEsCNaPoIP0VxMbizIBTmYTDtkerkIQS8/CbP1BRuyt8V/8BCsy1g=="], + "@tanstack/virtual-core": ["@tanstack/virtual-core@3.19.2", "", {}, "sha512-Ch+e8t097FdTfuihfRwBMqz/OfRZKHOH/C213dbM1lXDZ8bv6r330Bcc9k9XCrP6NkoMYy0/ZCHcddOAPihW4w=="], "@tanstack/virtual-file-routes": ["@tanstack/virtual-file-routes@1.162.0", "", {}, "sha512-uhOeFyxLcU41HzvrxsGpiWdcMbScY1EDgbZ5K7DVRMYInbLYWAC0EA/kx9wXAoSM8q82bUG2hRl8+EAjE6XAbA=="], @@ -975,7 +975,7 @@ "@tybys/wasm-util": ["@tybys/wasm-util@0.10.4", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A=="], - "@types/bun": ["@types/bun@1.4.2", "", { "dependencies": { "bun-types": "1.4.2" } }, "sha512-GimotNn7+ZV0uVArItBbriZsR1oNf0+WTzPkdcFrzShI7k2norL0uzEaJT8T33dWr7O/c9ZDuAFQrctKCi72oQ=="], + "@types/bun": ["@types/bun@1.4.3", "", { "dependencies": { "bun-types": "1.4.3" } }, "sha512-N67Pqy8JXbAY/j0tNraS3V5mubGvc6rrrNDmDCtZLlFzccbUJPDb0tvgUBC5q4m8ybkP93Jcn1QB+RYQ6PvBhw=="], "@types/d3-force": ["@types/d3-force@3.0.10", "", {}, "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw=="], @@ -1001,7 +1001,7 @@ "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], - "@types/node": ["@types/node@26.6.4", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg=="], + "@types/node": ["@types/node@26.6.5", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg=="], "@types/react": ["@types/react@19.3.0", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg=="], @@ -1111,7 +1111,7 @@ "bun-scan": ["bun-scan@1.1.2", "", { "dependencies": { "zod": "4.3.6" }, "bin": { "bun-scan": "dist/cli.js" } }, "sha512-7hft4zQPUxq1zDN5v0OF2s3rnQCJ3v0QyrBxWnLLRcgGIkeiq1PmnpYCZzx3fS9FLWeV6vE97o9dVB9wsnW0ew=="], - "bun-types": ["bun-types@1.4.2", "", { "dependencies": { "@types/node": "*" } }, "sha512-bxV1FgK7yBIzjRe5zBozIM4Bem11ZJcCXSrjWRG3YWLt8yFDePu4cLjpebO8OvPeIE9trbyPF4fuj3Cia4Fj3w=="], + "bun-types": ["bun-types@1.4.3", "", { "dependencies": { "@types/node": "*", "undici-types": "*" } }, "sha512-tinRJNGOmUN+tEAsn2y2e942n9JHRHR42iUYzDH75NmhJqVBokGSQkkfSFdNWwsANIdrK6ACH9t01M452YyTwg=="], "cacheable": ["cacheable@2.5.0", "", { "dependencies": { "@cacheable/memory": "^2.2.0", "@cacheable/utils": "^2.5.0", "hookified": "^1.15.0", "keyv": "^5.6.0", "qified": "^0.10.1" } }, "sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g=="], @@ -1127,7 +1127,7 @@ "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], - "cn": ["cn@0.3.2", "", { "bin": { "cn": "bin/cn.mjs" } }, "sha512-RKzY5Edavc8B2Ka6tjJecKFC4nm0p7lADY72xzICmiJSf4TkaxWXt0fHsib2P2G4FkFyXfSDi9oDtIBuCZvY2g=="], + "cn": ["cn@0.4.0", "", { "bin": { "cn": "bin/cn.mjs" } }, "sha512-qOAeUhPwPzBxx6jaeQdo646XIKliKHc2j1ZF7Ngb1o0pJZKH5gq8FkA0aVdUdPFUDXNXyUCXpCtoJISo6dhizg=="], "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], @@ -1437,7 +1437,7 @@ "node-releases": ["node-releases@2.0.57", "", {}, "sha512-kQK9LGGFiHtrWiNhZtA7Qbw17AQz+dmsEKODRIVTXA9+e5MS/2gZEBhYJt13GrAz5/IOZKddH/0Z3TP/Zgo+yw=="], - "npm-check-updates": ["npm-check-updates@23.1.0", "", { "bin": { "ncu": "build/cli.js", "npm-check-updates": "build/cli.js" } }, "sha512-u6Odx/JDpDXNqXp5pPsVN0RhuWkNrBe4Sz26J7yWJcEadopKhQgcB+bFq2PK35iJY6vc6h1PbnXmnwfiOFQl/w=="], + "npm-check-updates": ["npm-check-updates@23.1.1", "", { "bin": { "ncu": "build/cli.js", "npm-check-updates": "build/cli.js" } }, "sha512-UzYDvvsQRkmXR59g9SqsQxygYp7AhFpfEcOOGOJaB/P7pF/XlaqIYLK3UjUGfMHH1+aS2nZvJRaIsk2nk0z5ag=="], "npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], @@ -1457,7 +1457,7 @@ "oxlint-plugin-react-doctor": ["oxlint-plugin-react-doctor@0.9.17", "", { "dependencies": { "@shaderfrog/glsl-parser": "^7.0.1", "@typescript-eslint/types": "^8.59.3", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "lightningcss": "^1.33.0", "oxc-parser": "^0.148.0" } }, "sha512-j6tdFoJbLztISYNlw7LMT+6naqhVsXTNn7drhoGRIqf0x2mCSD2Ur71hK0E/VrLens355finI6j+sMqHxHpEfA=="], - "oxlint-tsgolint": ["oxlint-tsgolint@7.0.2003", "", { "optionalDependencies": { "@oxlint-tsgolint/darwin-arm64": "7.0.2003", "@oxlint-tsgolint/darwin-x64": "7.0.2003", "@oxlint-tsgolint/linux-arm64": "7.0.2003", "@oxlint-tsgolint/linux-x64": "7.0.2003", "@oxlint-tsgolint/win32-arm64": "7.0.2003", "@oxlint-tsgolint/win32-x64": "7.0.2003" }, "bin": { "tsgolint": "./bin/tsgolint.js" } }, "sha512-VnK4zlqgmgq/7ZcjzCk/WpN8kKFsYGcB85Io9qT3wL4K8Un3RKmJkp793crNETieMusPMKOA4a+Mw2wbteI6TQ=="], + "oxlint-tsgolint": ["oxlint-tsgolint@7.0.2004", "", { "optionalDependencies": { "@oxlint-tsgolint/darwin-arm64": "7.0.2004", "@oxlint-tsgolint/darwin-x64": "7.0.2004", "@oxlint-tsgolint/linux-arm64": "7.0.2004", "@oxlint-tsgolint/linux-x64": "7.0.2004", "@oxlint-tsgolint/win32-arm64": "7.0.2004", "@oxlint-tsgolint/win32-x64": "7.0.2004" }, "bin": { "tsgolint": "./bin/tsgolint.js" } }, "sha512-vQ9WDF3fiZJvRdSDosNOflerOCOpwol6vWzVDxW76RcU19cjTh7engvkHLvmv+tzedR8fAiJUVUGr6IVZdkzXQ=="], "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], @@ -1695,7 +1695,7 @@ "youch-core": ["youch-core@0.3.3", "", { "dependencies": { "@poppinss/exception": "^1.2.2", "error-stack-parser-es": "^1.0.5" } }, "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA=="], - "zod": ["zod@4.6.5", "", {}, "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q=="], + "zod": ["zod@4.6.6", "", {}, "sha512-4UmzQUF5fxvfcYHlbjBmejU+w+hbDnWFx4aS8kBx7nPBHcO2SqPbpAG8snbdg+Xse4pRefR98hgjFgIMCI/UhA=="], "zod-validation-error": ["zod-validation-error@4.0.2", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ=="], diff --git a/package.json b/package.json index dc9f0cc..8d65130 100644 --- a/package.json +++ b/package.json @@ -72,19 +72,19 @@ }, "devDependencies": { "@monrep/agent-skills": "workspace:*", - "@shadcn/lint": "^0.2.0", + "@shadcn/lint": "^0.2.1", "@stylistic/eslint-plugin": "^5.10.0", "@tanstack/eslint-plugin-router": "^1.162.0", "@tanstack/intent": "^0.5.5", - "@types/bun": "^1.4.2", - "@types/node": "^26.6.4", + "@types/bun": "^1.4.3", + "@types/node": "^26.6.5", "bun-scan": "^1.1.2", "git-cliff": "^2.14.2", "knip": "^6.41.0", - "npm-check-updates": "^23.1.0", + "npm-check-updates": "^23.1.1", "oxfmt": "^0.72.0", "oxlint": "^1.87.0", - "oxlint-tsgolint": "^7.0.2003", + "oxlint-tsgolint": "^7.0.2004", "react-doctor": "^0.9.17", "rimraf": "^6.1.3", "turbo": "^2.11.7", diff --git a/packages/agent-skills/package.json b/packages/agent-skills/package.json index 0b5952b..0bdb551 100644 --- a/packages/agent-skills/package.json +++ b/packages/agent-skills/package.json @@ -34,6 +34,6 @@ }, "devDependencies": { "@tanstack/intent": "^0.5.5", - "@types/bun": "^1.4.2" + "@types/bun": "^1.4.3" } } diff --git a/packages/agent/Cargo.lock b/packages/agent/Cargo.lock index e1d07cf..ec91037 100644 --- a/packages/agent/Cargo.lock +++ b/packages/agent/Cargo.lock @@ -158,9 +158,9 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cc" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f74872d07caf508b30a21f6836e7d7016a2eaf7d9ff4f48deaa58cd8a0407630" +checksum = "6651c9ed80effdc7db0ff72512157f901af5e3549e341e24b1dd4887d836d838" dependencies = [ "find-msvc-tools", "jobserver", @@ -228,7 +228,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.8", ] [[package]] @@ -348,7 +348,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.8", ] [[package]] @@ -461,7 +461,7 @@ checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.8", ] [[package]] @@ -1377,14 +1377,14 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.8", ] [[package]] name = "serde_json" -version = "1.0.151" +version = "1.0.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6" dependencies = [ "itoa", "memchr", @@ -1471,9 +1471,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.16.2" +version = "1.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9395f0f0eee849a9b707b2f06bb92a6a422090e2123bb2ef8e87a0e61892a8e" +checksum = "5b3dc8af474f516a851ff4bd12db780f948b9250ad37211e4eec0bccea54e01b" [[package]] name = "socket2" @@ -1528,9 +1528,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.6" +version = "3.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" +checksum = "01016da373cd8f7ef12624f796309f5c31ba8d646dd08856c02cd741d823c622" dependencies = [ "proc-macro2", "quote", @@ -1554,7 +1554,7 @@ checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.8", ] [[package]] @@ -1594,7 +1594,7 @@ checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.8", ] [[package]] @@ -1637,7 +1637,7 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.8", ] [[package]] @@ -1775,9 +1775,9 @@ checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicode-ident" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" +checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" [[package]] name = "untrusted" @@ -1883,7 +1883,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.8", "wasm-bindgen-shared", ] @@ -2109,7 +2109,7 @@ checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.8", "synstructure", ] @@ -2130,7 +2130,7 @@ checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.8", "synstructure", ] @@ -2170,7 +2170,7 @@ checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.8", ] [[package]] diff --git a/packages/agent/Cargo.toml b/packages/agent/Cargo.toml index 406f4d1..68b48b3 100644 --- a/packages/agent/Cargo.toml +++ b/packages/agent/Cargo.toml @@ -16,7 +16,7 @@ directories = "6.0.0" fs-err = "3.3.2" reqwest = { version = "0.13.5", default-features = false, features = ["json", "rustls", "stream"] } serde = { version = "1.0.229", features = ["derive"] } -serde_json = "1.0.151" +serde_json = "1.0.154" thiserror = "2.0.21" tokio = { version = "1.53.2", features = [ "io-util", diff --git a/packages/agent/package.json b/packages/agent/package.json index 99484b8..b0dcf72 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -23,7 +23,7 @@ }, "dependencies": {}, "devDependencies": { - "@types/bun": "^1.4.2", + "@types/bun": "^1.4.3", "rust-doctor": "^0.7.0" } } diff --git a/packages/agent/src/ops/pty.rs b/packages/agent/src/ops/pty.rs index d9eac1e..8640bc5 100644 --- a/packages/agent/src/ops/pty.rs +++ b/packages/agent/src/ops/pty.rs @@ -80,6 +80,19 @@ pub async fn handle_open( .and_then(|v| v.as_str()) .map(|s| s.to_string()) .unwrap_or_else(default_shell); + let cwd = env + .body + .as_ref() + .and_then(|b| b.get("cwd")) + .and_then(|v| v.as_str()) + .map(str::trim) + .filter(|s| !s.is_empty()) + .map(|s| s.to_string()); + if let Some(ref path) = cwd + && !path.starts_with('/') + { + anyhow::bail!("pty cwd must be an absolute path"); + } let req_id = env.id.clone(); let permit = match acquire_pty_slot(ptys.clone(), pty_slots.clone()).await { @@ -104,7 +117,8 @@ pub async fn handle_open( let pty_id = req_id.clone(); let open_result = - tokio::task::spawn_blocking(move || open_pty_blocking(cols, rows, &shell)).await; + tokio::task::spawn_blocking(move || open_pty_blocking(cols, rows, &shell, cwd.as_deref())) + .await; let (reader, master, writer, child) = match open_result { Ok(Ok(t)) => t, @@ -449,7 +463,12 @@ type PtyWriter = Box; type PtyChild = Box; type OpenPtyParts = (PtyReader, PtyMaster, PtyWriter, PtyChild); -fn open_pty_blocking(cols: u16, rows: u16, shell: &str) -> anyhow::Result { +fn open_pty_blocking( + cols: u16, + rows: u16, + shell: &str, + cwd: Option<&str>, +) -> anyhow::Result { let system = NativePtySystem::default(); let pair = system.openpty(PtySize { rows, @@ -459,6 +478,9 @@ fn open_pty_blocking(cols: u16, rows: u16, shell: &str) -> anyhow::Result { const { error: err } = await tryCatch( db.actions @@ -59,6 +63,7 @@ export function useRuntimeConfig(serverId: string) { backgroundEnabled: nextBackground, autoUpdate: nextAutoUpdate, metricsIntervalSec: nextInterval, + ptyCwd: nextPtyCwd, }) .when("settled"), ); @@ -73,6 +78,7 @@ export function useRuntimeConfig(serverId: string) { autoUpdate: nextAutoUpdate, metricsEnabled: nextBackground, metricsIntervalSec: nextInterval, + ...(nextPtyCwd ? { ptyCwd: nextPtyCwd } : {}), }, }); toast.success("Saved"); @@ -130,6 +136,7 @@ export function useRuntimeConfig(serverId: string) { metricsEnabled, metricsIntervalSec, autoUpdate, + ptyCwd, save, saveServerName, triggerUpdate, diff --git a/packages/main/src/components/agent/pty/PtyPane.tsx b/packages/main/src/components/agent/pty/PtyPane.tsx index 707e22b..8665a74 100644 --- a/packages/main/src/components/agent/pty/PtyPane.tsx +++ b/packages/main/src/components/agent/pty/PtyPane.tsx @@ -7,6 +7,7 @@ import { useSelector } from "@tanstack/react-store"; import { FitAddon } from "@xterm/addon-fit"; import { Terminal as XTerm } from "@xterm/xterm"; import type { PaneApi } from "./ptyTypes"; +import { useRuntimeConfig } from "@/components/agent/hooks/useRuntimeConfig"; import { useSessionWs } from "@/components/agent/session-ws/useSessionWs"; function readThemeColor(varName: string, fallback: string): string { @@ -29,7 +30,8 @@ type PtyPaneProps = { }; export function PtyPane({ wsReady }: PtyPaneProps) { - const { send, setPane, subscribeRun } = useSessionWs(); + const { serverId, send, setPane, subscribeRun } = useSessionWs(); + const { ptyCwd } = useRuntimeConfig(serverId); const hostRef = useRef(null); const termRef = useRef(null); const fitRef = useRef(null); @@ -147,17 +149,22 @@ export function PtyPane({ wsReady }: PtyPaneProps) { unsub(); } }); + const cwd = ptyCwd.trim(); const ok = send({ v: 1, id: openId, op: "pty.open", - body: { cols: term.cols, rows: term.rows }, + body: { + cols: term.cols, + rows: term.rows, + ...(cwd ? { cwd } : {}), + }, }); if (!ok) unsub(); return () => { unsub(); }; - }, [wsReady, send, setPane, subscribeRun]); + }, [wsReady, send, setPane, subscribeRun, ptyCwd]); useEffect(() => { requestAnimationFrame(() => { diff --git a/packages/main/src/components/agent/settings/AgentSettingsSheet.tsx b/packages/main/src/components/agent/settings/AgentSettingsSheet.tsx index 4ec65b0..5391475 100644 --- a/packages/main/src/components/agent/settings/AgentSettingsSheet.tsx +++ b/packages/main/src/components/agent/settings/AgentSettingsSheet.tsx @@ -13,6 +13,7 @@ import { import { AgentPreferenceSection } from "./AgentPreferenceSection"; import { AgentUpdateSection } from "./AgentUpdateSection"; import { MetricsSection } from "./MetricsSection"; +import { ShellSection } from "./ShellSection"; import { useAgentSettingsSheet } from "./useAgentSettingsSheet"; type AgentSettingsSheetProps = { @@ -59,6 +60,12 @@ export function AgentSettingsSheet({ onMetricsEnabledChange={(enabled) => sheet.save({ backgroundEnabled: enabled })} onIntervalChange={(sec) => sheet.save({ metricsIntervalSec: sec })} /> + + sheet.save({ ptyCwd: cwd })} + /> diff --git a/packages/main/src/components/agent/settings/ShellSection.tsx b/packages/main/src/components/agent/settings/ShellSection.tsx new file mode 100644 index 0000000..47538f3 --- /dev/null +++ b/packages/main/src/components/agent/settings/ShellSection.tsx @@ -0,0 +1,59 @@ +import { useState } from "react"; +import { SaveIcon } from "@hugeicons/core-free-icons"; +import { HugeiconsIcon } from "@hugeicons/react"; +import { Button, Input } from "@monrep/ui/base"; +import { SettingRow } from "./SettingRow"; +import type { ChangeEvent, SubmitEvent } from "react"; + +type ShellSectionProps = { + ptyCwd: string; + pending?: boolean; + onPtyCwdChange: (cwd: string) => void; +}; + +export function ShellSection({ ptyCwd, pending = false, onPtyCwdChange }: ShellSectionProps) { + const [draft, setDraft] = useState(null); + const value = draft ?? ptyCwd; + const dirty = draft !== null && draft.trim() !== ptyCwd; + + const handleChange = (e: ChangeEvent) => { + setDraft(e.target.value); + }; + + const handleSave = () => { + const next = value.trim(); + onPtyCwdChange(next); + setDraft(null); + }; + + const handleSubmit = (e: SubmitEvent) => { + e.preventDefault(); + if (!dirty || pending) return; + handleSave(); + }; + + return ( +
+

Shell

+ +
+ + +
+
+
+ ); +} diff --git a/packages/main/src/components/agent/settings/useAgentSettingsSheet.ts b/packages/main/src/components/agent/settings/useAgentSettingsSheet.ts index 036c023..8cfbf25 100644 --- a/packages/main/src/components/agent/settings/useAgentSettingsSheet.ts +++ b/packages/main/src/components/agent/settings/useAgentSettingsSheet.ts @@ -15,7 +15,12 @@ export function useAgentSettingsSheet(serverId: string, onOpenChange: (open: boo }; const resetToDefaults = () => { - runtime.save({ backgroundEnabled: true, metricsIntervalSec: 30, autoUpdate: true }); + runtime.save({ + backgroundEnabled: true, + metricsIntervalSec: 30, + autoUpdate: true, + ptyCwd: "", + }); }; return { ...runtime, handleOpenChange, handleSaveMetrics, resetToDefaults, dirty: false }; diff --git a/packages/main/src/db/do/agent.ts b/packages/main/src/db/do/agent.ts index 6d56d72..c4e4d82 100644 --- a/packages/main/src/db/do/agent.ts +++ b/packages/main/src/db/do/agent.ts @@ -68,6 +68,7 @@ export default createDoModule("agent")({ backgroundEnabled: z.boolean(), autoUpdate: z.boolean().optional(), metricsIntervalSec: z.number().int().positive().optional(), + ptyCwd: z.string().optional(), updatedAt: z.string().optional(), }, onInsert: ({ ctx }) => ({ diff --git a/packages/main/src/server/agent/functions.ts b/packages/main/src/server/agent/functions.ts index bfe61d8..b5ffb0e 100644 --- a/packages/main/src/server/agent/functions.ts +++ b/packages/main/src/server/agent/functions.ts @@ -33,6 +33,7 @@ const PushAgentConfigInputSchema = z.object({ autoUpdate: z.boolean().optional(), metricsEnabled: z.boolean().optional(), metricsIntervalSec: z.number().int().positive().optional(), + ptyCwd: z.string().optional(), }); const MetricsLatestInputSchema = z.object({ @@ -139,6 +140,7 @@ export const pushAgentConfigFn = createServerFn({ method: "POST" }) autoUpdate: data.autoUpdate, metricsEnabled: data.metricsEnabled, metricsIntervalSec: data.metricsIntervalSec, + ...(data.ptyCwd ? { ptyCwd: data.ptyCwd } : {}), }, }); return ok(); diff --git a/packages/main/src/server/agent/sessionDo.ts b/packages/main/src/server/agent/sessionDo.ts index 42c0648..03a30e6 100644 --- a/packages/main/src/server/agent/sessionDo.ts +++ b/packages/main/src/server/agent/sessionDo.ts @@ -527,11 +527,20 @@ export class AgentSession extends DurableObject { const autoUpdate = config?.autoUpdate ?? true; const metricsEnabled = config?.backgroundEnabled ?? true; const metricsIntervalSec = config?.metricsIntervalSec ?? 30; + const ptyCwd = + typeof config?.ptyCwd === "string" && config.ptyCwd.trim() + ? config.ptyCwd.trim() + : undefined; await this.sendEnvelope({ v: PROTO_V, id: nextUlid(null), op: "config", - body: { autoUpdate, metricsEnabled, metricsIntervalSec }, + body: { + autoUpdate, + metricsEnabled, + metricsIntervalSec, + ...(ptyCwd ? { ptyCwd } : {}), + }, }); } finally { db.close(); diff --git a/packages/ui/package.json b/packages/ui/package.json index 2a6e3f6..34a7206 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -33,7 +33,7 @@ "@tanstack/react-hotkeys": "^0.13.0", "@tanstack/react-pacer": "^0.24.1", "@tanstack/react-store": "^0.11.2", - "@tanstack/react-virtual": "^3.14.13", + "@tanstack/react-virtual": "^3.14.17", "class-variance-authority": "^0.7.1", "input-otp": "^1.5.0", "react-number-format": "^5.4.5", diff --git a/scripts/install-agent.sh.tpl b/scripts/install-agent.sh.tpl index 200e736..3b0a331 100644 --- a/scripts/install-agent.sh.tpl +++ b/scripts/install-agent.sh.tpl @@ -1,6 +1,6 @@ #!/usr/bin/env bash # Install {{productName}} agent binary from GitHub Releases. -# Usage: curl -fsSL {{installUrl}} | bash +# Usage: curl -fsSL {{installUrl}} | sudo bash # Source: scripts/install-agent.sh.tpl — filled by bun run sync:brand set -euo pipefail @@ -47,7 +47,7 @@ chmod +x "$tmp" install_dir="${MONREP_INSTALL_DIR:-}" if [[ -z "$install_dir" ]]; then - if [[ -w "$INSTALL_DIR_DEFAULT" ]] || mkdir -p "$INSTALL_DIR_DEFAULT" 2>/dev/null; then + if [[ -d "$INSTALL_DIR_DEFAULT" && -w "$INSTALL_DIR_DEFAULT" ]]; then install_dir="$INSTALL_DIR_DEFAULT" elif command -v sudo >/dev/null 2>&1; then install_dir="$INSTALL_DIR_DEFAULT" diff --git a/scripts/sync-brand.ts b/scripts/sync-brand.ts index 90ce34b..0556fde 100644 --- a/scripts/sync-brand.ts +++ b/scripts/sync-brand.ts @@ -57,7 +57,7 @@ const githubRepo = `${brand.githubOwner}/${brand.githubRepo}`; const controlPlaneOrigin = brand.controlPlaneOrigin.replace(/\/$/, ""); const installPath = `/${brand.installPath.replace(/^\/+|\/+$/g, "")}`; const installUrl = `${controlPlaneOrigin}${installPath}`; -const installCommand = `curl -fsSL ${installUrl} | bash`; +const installCommand = `curl -fsSL ${installUrl} | sudo bash`; const githubUrl = `https://github.com/${githubRepo}`; const canonicalOrigin = `https://${brand.canonicalAppHost}`; From 4b5604696ca5d17a472b31a03101d07f766a182d Mon Sep 17 00:00:00 2001 From: acoBOYZ Date: Mon, 12 Oct 2026 17:56:30 +0300 Subject: [PATCH 2/2] feat: bun check is in --- package.json | 2 +- packages/.templates/app/package.json.tpl | 2 +- packages/agent-skills/skills/react-defaults/SKILL.md | 4 ++-- packages/agent-skills/skills/react-doctor/SKILL.md | 2 +- packages/agent/package.json | 2 +- packages/codegen/package.json | 2 +- packages/db/package.json | 2 +- packages/hooks/package.json | 2 +- packages/main/package.json | 2 +- packages/runtime/package.json | 2 +- packages/ui/package.json | 2 +- packages/utils/package.json | 2 +- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 8d65130..9d65ee5 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ ] }, "license": "MIT", - "packageManager": "bun@1.4.2", + "packageManager": "bun@1.4.3", "workspaces": [ "packages/*" ], diff --git a/packages/.templates/app/package.json.tpl b/packages/.templates/app/package.json.tpl index 85f3d77..f2fe1b6 100644 --- a/packages/.templates/app/package.json.tpl +++ b/packages/.templates/app/package.json.tpl @@ -7,7 +7,7 @@ "scripts": { "dev": "vite dev --port {{dev_port}}", "generate-routes": "tsr generate", - "typecheck": "tsc --noEmit --singleThreaded", + "typecheck": "bun check", "lint": "oxlint --threads=1 src .", "fmt": "oxfmt src", "fmtcheck": "oxfmt --check src", diff --git a/packages/agent-skills/skills/react-defaults/SKILL.md b/packages/agent-skills/skills/react-defaults/SKILL.md index 734cc1f..5b0799d 100644 --- a/packages/agent-skills/skills/react-defaults/SKILL.md +++ b/packages/agent-skills/skills/react-defaults/SKILL.md @@ -21,7 +21,7 @@ sources: ## Technical stack - React (latest stable patterns; React 19 where it improves UX/state flow) -- TypeScript — no `any`, no unsafe `as` casts; fix all TS and react-doctor findings (errors and warnings) until **100%** score. Prefer `turbo typecheck` / `bun run typecheck`. If you invoke `tsc` directly, use `tsc --noEmit --singleThreaded`. +- TypeScript — no `any`, no unsafe `as` casts; fix all TS and react-doctor findings (errors and warnings) until **100%** score. Prefer `turbo typecheck` / `bun run typecheck`. If you invoke `tsc` directly, use `bun check`. - Modular components, shared hooks and providers - Live data: `useLiveQueries` with joins when subscribing to multiple collections; avoid redundant subscriptions; structure queries to limit re-renders - **TanStack DB details** (orderBy indexes, non-null sort keys, `useLiveInfiniteQuery`): load `@monrep/agent-skills#tanstack-db` — do not duplicate those rules here @@ -202,7 +202,7 @@ Root fan-out: `bun typecheck` → `turbo typecheck`. If you invoke `tsc` **directly** (not via turbo or a package `typecheck` script): ```bash -tsc --noEmit --singleThreaded +bun check ``` ### 2. Format / polish (oxfmt) diff --git a/packages/agent-skills/skills/react-doctor/SKILL.md b/packages/agent-skills/skills/react-doctor/SKILL.md index 1e0f077..3a75874 100644 --- a/packages/agent-skills/skills/react-doctor/SKILL.md +++ b/packages/agent-skills/skills/react-doctor/SKILL.md @@ -54,7 +54,7 @@ bun run typecheck If you invoke `tsc` **directly** (not via turbo or a package `typecheck` script): ```bash -tsc --noEmit --singleThreaded +bun check ``` ### 2. Lint (oxlint) diff --git a/packages/agent/package.json b/packages/agent/package.json index b0dcf72..d3e973d 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -7,7 +7,7 @@ "scripts": { "dev": "cargo watch -w src -w Cargo.toml -w Cargo.lock -x 'run --bin monrep'", "local": "bun run scripts/local.ts", - "typecheck": "tsc --noEmit --singleThreaded && bun run typecheck:rust", + "typecheck": "bun check && bun run typecheck:rust", "typecheck:rust": "cargo check --locked --all-targets && bun run rust:miri", "lint": "bun run lint:rust && oxlint --threads=1 scripts", "lint:rust": "cargo clippy --locked --all-targets -- -D warnings", diff --git a/packages/codegen/package.json b/packages/codegen/package.json index c8e2ce7..f0fc2f7 100644 --- a/packages/codegen/package.json +++ b/packages/codegen/package.json @@ -11,7 +11,7 @@ "codegen": "bun src/cli.ts start", "watch": "bun --no-orphans src/cli.ts watch", "dev": "bun --no-orphans src/cli.ts watch", - "typecheck": "tsc --noEmit --singleThreaded", + "typecheck": "bun check", "lint": "oxlint --threads=1 src .", "clean": "rimraf dist node_modules bun.lock .turbo", "fmt": "oxfmt src", diff --git a/packages/db/package.json b/packages/db/package.json index b4e7dd2..2dbf7b3 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -15,7 +15,7 @@ "./stream/server": "./src/stream/server/index.ts" }, "scripts": { - "typecheck": "tsc --noEmit --singleThreaded", + "typecheck": "bun check", "lint": "oxlint --threads=1 src .", "clean": "rimraf dist node_modules bun.lock .turbo", "fmt": "oxfmt src", diff --git a/packages/hooks/package.json b/packages/hooks/package.json index 7922f92..935510f 100644 --- a/packages/hooks/package.json +++ b/packages/hooks/package.json @@ -8,7 +8,7 @@ ".": "./src/index.ts" }, "scripts": { - "typecheck": "tsc --noEmit --singleThreaded", + "typecheck": "bun check", "lint": "oxlint --threads=1 src .", "clean": "rimraf dist node_modules bun.lock .turbo", "fmt": "oxfmt src", diff --git a/packages/main/package.json b/packages/main/package.json index 75c7ea6..e057c62 100644 --- a/packages/main/package.json +++ b/packages/main/package.json @@ -7,7 +7,7 @@ "scripts": { "dev": "REACT_COMPILER=true vite dev --port 5274", "generate-routes": "tsr generate", - "typecheck": "tsc --noEmit --singleThreaded", + "typecheck": "bun check", "lint": "oxlint --threads=1 src .", "fmt": "oxfmt src", "fmtcheck": "oxfmt --check src", diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 35fc78f..c27c182 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -12,7 +12,7 @@ "./view": "./src/view/index.ts" }, "scripts": { - "typecheck": "tsc --noEmit --singleThreaded", + "typecheck": "bun check", "lint": "oxlint --threads=1 src .", "clean": "rimraf dist node_modules bun.lock .turbo", "fmt": "oxfmt src", diff --git a/packages/ui/package.json b/packages/ui/package.json index 34a7206..1685b44 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -14,7 +14,7 @@ "./tailwind.config": "./tailwind.config.ts" }, "scripts": { - "typecheck": "tsc --noEmit --singleThreaded", + "typecheck": "bun check", "lint": "oxlint --threads=1 src .", "clean": "rimraf dist node_modules bun.lock .turbo", "fmt": "oxfmt src", diff --git a/packages/utils/package.json b/packages/utils/package.json index ce958a2..515e0c6 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -10,7 +10,7 @@ "./ulid": "./src/ulid.ts" }, "scripts": { - "typecheck": "tsc --noEmit --singleThreaded", + "typecheck": "bun check", "lint": "oxlint --threads=1 src .", "clean": "rimraf dist node_modules bun.lock .turbo", "fmt": "oxfmt src",