fix: 添加 vite-plugin-svgr 依赖并修复 SVG 类型声明

This commit is contained in:
coso
2025-12-25 00:00:45 +08:00
parent 0ce147d1c4
commit 4a64ae76c7
8 changed files with 27 additions and 45 deletions
+2 -21
View File
@@ -1,12 +1,12 @@
{
"name": "proxycast",
"version": "0.17.4",
"version": "0.17.8",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "proxycast",
"version": "0.17.4",
"version": "0.17.8",
"dependencies": {
"@radix-ui/react-dialog": "^1.1.2",
"@radix-ui/react-dropdown-menu": "^2.1.2",
@@ -98,7 +98,6 @@
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.28.5",
@@ -2666,7 +2665,6 @@
"integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/core": "^7.21.3",
"@svgr/babel-preset": "8.1.0",
@@ -3051,7 +3049,6 @@
"integrity": "sha512-LPM2G3Syo1GLzXLGJAKdqoU35XvrWzGJ21/7sgZTUpbkBaOasTj8tjwn6w+hCkqaa1TfJ/w67rJSwYItlJ2mYw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"undici-types": "~6.21.0"
}
@@ -3069,7 +3066,6 @@
"integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==",
"devOptional": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@types/prop-types": "*",
"csstype": "^3.2.2"
@@ -3081,7 +3077,6 @@
"integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
"devOptional": true,
"license": "MIT",
"peer": true,
"peerDependencies": {
"@types/react": "^18.0.0"
}
@@ -3121,7 +3116,6 @@
"integrity": "sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "8.49.0",
"@typescript-eslint/types": "8.49.0",
@@ -3444,7 +3438,6 @@
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -3663,7 +3656,6 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759",
@@ -4085,7 +4077,6 @@
"integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1",
@@ -4727,7 +4718,6 @@
"integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"jiti": "bin/jiti.js"
}
@@ -5263,7 +5253,6 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@@ -5486,7 +5475,6 @@
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0"
},
@@ -5499,7 +5487,6 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
"integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
"license": "MIT",
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.2"
@@ -6010,7 +5997,6 @@
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12"
},
@@ -6086,7 +6072,6 @@
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"dev": true,
"license": "Apache-2.0",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -6199,7 +6184,6 @@
"integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"esbuild": "^0.21.3",
"postcss": "^8.4.43",
@@ -6275,7 +6259,6 @@
"integrity": "sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@vitest/expect": "4.0.16",
"@vitest/mocker": "4.0.16",
@@ -6832,7 +6815,6 @@
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12"
},
@@ -6846,7 +6828,6 @@
"integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"esbuild": "^0.27.0",
"fdir": "^6.5.0",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "proxycast",
"private": true,
"version": "0.17.8",
"version": "0.17.8",
"type": "module",
"repository": {
"type": "git",
+1 -1
View File
@@ -3377,7 +3377,7 @@ dependencies = [
[[package]]
name = "proxycast"
version = "0.17.7"
version = "0.17.8"
dependencies = [
"anyhow",
"async-stream",
+5 -9
View File
@@ -7,7 +7,7 @@ use std::path::PathBuf;
pub fn get_app_config_path(app_type: &AppType) -> Option<PathBuf> {
let home = dirs::home_dir()?;
match app_type {
AppType::Claude => Some(home.join(".claude").join("settings.json")),
AppType::Claude => Some(home.join(".claude.json")),
AppType::Codex => Some(home.join(".codex")),
AppType::Gemini => Some(home.join(".gemini")),
AppType::ProxyCast => None,
@@ -56,16 +56,12 @@ fn clean_claude_auth_conflict(settings: &mut Value) {
}
}
/// Sync Claude settings to ~/.claude/settings.json
/// Sync Claude settings to ~/.claude.json
fn sync_claude_settings(
provider: &Provider,
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
let home = dirs::home_dir().ok_or("Cannot find home directory")?;
let claude_dir = home.join(".claude");
let config_path = claude_dir.join("settings.json");
// Create directory if not exists
std::fs::create_dir_all(&claude_dir)?;
let config_path = home.join(".claude.json");
// Read existing settings to preserve other fields
let mut settings: Value = if config_path.exists() {
@@ -201,7 +197,7 @@ pub fn read_live_settings(
match app_type {
AppType::Claude => {
let path = home.join(".claude").join("settings.json");
let path = home.join(".claude.json");
if !path.exists() {
return Err("Claude settings file not found".into());
}
@@ -398,7 +394,7 @@ pub fn check_config_sync(
fn get_config_last_modified(app_type: &AppType) -> Option<String> {
let home = dirs::home_dir()?;
let path = match app_type {
AppType::Claude => home.join(".claude").join("settings.json"),
AppType::Claude => home.join(".claude.json"),
AppType::Codex => home.join(".codex").join("auth.json"),
AppType::Gemini => home.join(".gemini").join(".env"),
AppType::ProxyCast => return None,
+7 -11
View File
@@ -24,7 +24,7 @@ fn escape_toml_string(s: &str) -> String {
pub fn get_mcp_config_path(app_type: &AppType) -> Option<PathBuf> {
let home = dirs::home_dir()?;
match app_type {
AppType::Claude => Some(home.join(".claude").join("settings.json")),
AppType::Claude => Some(home.join(".claude.json")),
AppType::Codex => Some(home.join(".codex").join("config.toml")),
AppType::Gemini => Some(home.join(".gemini").join("settings.json")),
AppType::ProxyCast => None,
@@ -73,17 +73,13 @@ pub fn sync_mcp_to_app(
}
}
/// Sync MCP servers to Claude's settings.json
/// Claude uses the mcpServers field in ~/.claude/settings.json
/// Sync MCP servers to Claude's .claude.json
/// Claude uses the mcpServers field in ~/.claude.json
fn sync_mcp_to_claude(
servers: &[&McpServer],
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
let home = dirs::home_dir().ok_or("Cannot find home directory")?;
let claude_dir = home.join(".claude");
let config_path = claude_dir.join("settings.json");
// Create directory if not exists
std::fs::create_dir_all(&claude_dir)?;
let config_path = home.join(".claude.json");
// Read existing settings
let mut settings: Value = if config_path.exists() {
@@ -259,7 +255,7 @@ pub fn remove_mcp_from_app(
fn remove_mcp_from_claude(server_id: &str) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
let home = dirs::home_dir().ok_or("Cannot find home directory")?;
let config_path = home.join(".claude").join("settings.json");
let config_path = home.join(".claude.json");
if !config_path.exists() {
return Ok(());
@@ -357,11 +353,11 @@ pub fn remove_mcp_from_all_apps(
Ok(())
}
/// Import MCP servers from Claude's settings.json
/// Import MCP servers from Claude's .claude.json
pub fn import_mcp_from_claude(
) -> Result<Vec<crate::models::McpServer>, Box<dyn std::error::Error + Send + Sync>> {
let home = dirs::home_dir().ok_or("Cannot find home directory")?;
let config_path = home.join(".claude").join("settings.json");
let config_path = home.join(".claude.json");
if !config_path.exists() {
return Ok(Vec::new());
+1 -1
View File
@@ -8,7 +8,7 @@ interface LiveConfigModalProps {
}
const configPaths: Record<AppType, string> = {
claude: "~/.claude/settings.json",
claude: "~/.claude.json",
codex: "~/.codex/auth.json & config.toml",
gemini: "~/.gemini/.env & settings.json",
proxycast: "",
+1 -1
View File
@@ -8,7 +8,7 @@ interface LiveConfigModalProps {
}
const configPaths: Record<AppType, string> = {
claude: "~/.claude/settings.json",
claude: "~/.claude.json",
codex: "~/.codex/auth.json & config.toml",
gemini: "~/.gemini/.env & settings.json",
proxycast: "",
+9
View File
@@ -1,6 +1,15 @@
/// <reference types="vite/client" />
/// <reference types="vite-plugin-svgr/client" />
// SVG 模块声明 - 支持 ?react 后缀导入为 React 组件
declare module "*.svg?react" {
import * as React from "react";
const ReactComponent: React.FunctionComponent<
React.SVGProps<SVGSVGElement> & { title?: string }
>;
export default ReactComponent;
}
// 全局类型声明
declare global {
type NotificationPermission = "default" | "denied" | "granted";