diff --git a/backend/Dockerfile b/backend/Dockerfile index 5088842..f465183 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -13,3 +13,4 @@ COPY . . # Command is overridden by docker-compose for dev CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] + diff --git a/backend/alembic.ini b/backend/alembic.ini index 40f0e9d..c250693 100644 --- a/backend/alembic.ini +++ b/backend/alembic.ini @@ -101,3 +101,4 @@ formatter = generic format = %(levelname)-5.5s [%(name)s] %(message)s datefmt = %H:%M:%S + diff --git a/backend/alembic/env.py b/backend/alembic/env.py index 5758dc8..1c35728 100644 --- a/backend/alembic/env.py +++ b/backend/alembic/env.py @@ -88,3 +88,4 @@ if context.is_offline_mode(): else: asyncio.run(run_migrations_online()) + diff --git a/backend/alembic/script.py.mako b/backend/alembic/script.py.mako index de46926..96c9a3d 100644 --- a/backend/alembic/script.py.mako +++ b/backend/alembic/script.py.mako @@ -23,3 +23,4 @@ def upgrade() -> None: def downgrade() -> None: ${downgrades if downgrades else "pass"} + diff --git a/backend/app/api/v1/endpoints/members.py b/backend/app/api/v1/endpoints/members.py index 2ccb7eb..81a14e5 100644 --- a/backend/app/api/v1/endpoints/members.py +++ b/backend/app/api/v1/endpoints/members.py @@ -208,3 +208,4 @@ async def remove_project_member( return {"message": "成员已移除"} + diff --git a/backend/app/api/v1/endpoints/users.py b/backend/app/api/v1/endpoints/users.py index 95d6e30..96f6126 100644 --- a/backend/app/api/v1/endpoints/users.py +++ b/backend/app/api/v1/endpoints/users.py @@ -64,3 +64,4 @@ async def read_user_me( """ return current_user + diff --git a/backend/app/core/security.py b/backend/app/core/security.py index 81592dc..063000d 100644 --- a/backend/app/core/security.py +++ b/backend/app/core/security.py @@ -27,3 +27,4 @@ def verify_password(plain_password: str, hashed_password: str) -> bool: def get_password_hash(password: str) -> str: return pwd_context.hash(password) + diff --git a/backend/app/db/base.py b/backend/app/db/base.py index 4e3b62c..88b8670 100644 --- a/backend/app/db/base.py +++ b/backend/app/db/base.py @@ -10,3 +10,4 @@ class Base: def __tablename__(cls) -> str: return cls.__name__.lower() + "s" + diff --git a/backend/app/db/session.py b/backend/app/db/session.py index a805a54..286df94 100644 --- a/backend/app/db/session.py +++ b/backend/app/db/session.py @@ -15,3 +15,4 @@ async def get_db(): finally: await session.close() + diff --git a/backend/app/models/__init__.py b/backend/app/models/__init__.py index f3b226f..77e8fc9 100644 --- a/backend/app/models/__init__.py +++ b/backend/app/models/__init__.py @@ -3,3 +3,4 @@ from .project import Project, ProjectMember from .audit import AuditTask, AuditIssue from .analysis import InstantAnalysis + diff --git a/backend/app/models/analysis.py b/backend/app/models/analysis.py index a0a1d1b..863e9fa 100644 --- a/backend/app/models/analysis.py +++ b/backend/app/models/analysis.py @@ -22,3 +22,4 @@ class InstantAnalysis(Base): # Relationships user = relationship("User", backref="instant_analyses") + diff --git a/backend/app/models/project.py b/backend/app/models/project.py index 29efe87..02d3838 100644 --- a/backend/app/models/project.py +++ b/backend/app/models/project.py @@ -42,3 +42,4 @@ class ProjectMember(Base): project = relationship("Project", back_populates="members") user = relationship("User", backref="project_memberships") + diff --git a/backend/app/models/user.py b/backend/app/models/user.py index e7a85c2..1d1cf1f 100644 --- a/backend/app/models/user.py +++ b/backend/app/models/user.py @@ -23,3 +23,4 @@ class User(Base): created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), onupdate=func.now()) + diff --git a/backend/app/models/user_config.py b/backend/app/models/user_config.py index f739273..2f491e4 100644 --- a/backend/app/models/user_config.py +++ b/backend/app/models/user_config.py @@ -28,3 +28,4 @@ class UserConfig(Base): # Relationships user = relationship("User", backref="config") + diff --git a/backend/app/schemas/token.py b/backend/app/schemas/token.py index bfa2f54..05c722c 100644 --- a/backend/app/schemas/token.py +++ b/backend/app/schemas/token.py @@ -8,3 +8,4 @@ class Token(BaseModel): class TokenPayload(BaseModel): sub: Optional[str] = None + diff --git a/backend/app/schemas/user.py b/backend/app/schemas/user.py index 74c2428..adc33a6 100644 --- a/backend/app/schemas/user.py +++ b/backend/app/schemas/user.py @@ -33,3 +33,4 @@ class UserInDBBase(UserBase): class User(UserInDBBase): pass + diff --git a/backend/app/services/llm/adapters/baidu_adapter.py b/backend/app/services/llm/adapters/baidu_adapter.py index c5f809c..13b6d29 100644 --- a/backend/app/services/llm/adapters/baidu_adapter.py +++ b/backend/app/services/llm/adapters/baidu_adapter.py @@ -135,3 +135,4 @@ class BaiduAdapter(BaseLLMAdapter): def get_model(self) -> str: return self.config.model or "ERNIE-3.5-8K" + diff --git a/backend/app/services/llm/adapters/claude_adapter.py b/backend/app/services/llm/adapters/claude_adapter.py index 9da018a..d324be3 100644 --- a/backend/app/services/llm/adapters/claude_adapter.py +++ b/backend/app/services/llm/adapters/claude_adapter.py @@ -91,3 +91,4 @@ class ClaudeAdapter(BaseLLMAdapter): raise Exception(f"无效的Claude模型: {self.config.model}") return True + diff --git a/backend/app/services/llm/adapters/deepseek_adapter.py b/backend/app/services/llm/adapters/deepseek_adapter.py index c26192f..5472366 100644 --- a/backend/app/services/llm/adapters/deepseek_adapter.py +++ b/backend/app/services/llm/adapters/deepseek_adapter.py @@ -79,3 +79,4 @@ class DeepSeekAdapter(BaseLLMAdapter): raise Exception("未指定DeepSeek模型") return True + diff --git a/backend/app/services/llm/adapters/doubao_adapter.py b/backend/app/services/llm/adapters/doubao_adapter.py index 31cde9e..8801b48 100644 --- a/backend/app/services/llm/adapters/doubao_adapter.py +++ b/backend/app/services/llm/adapters/doubao_adapter.py @@ -85,3 +85,4 @@ class DoubaoAdapter(BaseLLMAdapter): def get_model(self) -> str: return self.config.model or "doubao-pro-32k" + diff --git a/backend/app/services/llm/adapters/minimax_adapter.py b/backend/app/services/llm/adapters/minimax_adapter.py index a99c78b..239d86a 100644 --- a/backend/app/services/llm/adapters/minimax_adapter.py +++ b/backend/app/services/llm/adapters/minimax_adapter.py @@ -82,3 +82,4 @@ class MinimaxAdapter(BaseLLMAdapter): def get_model(self) -> str: return self.config.model or "abab6.5-chat" + diff --git a/backend/app/services/llm/adapters/moonshot_adapter.py b/backend/app/services/llm/adapters/moonshot_adapter.py index 2c1bed3..bf02320 100644 --- a/backend/app/services/llm/adapters/moonshot_adapter.py +++ b/backend/app/services/llm/adapters/moonshot_adapter.py @@ -77,3 +77,4 @@ class MoonshotAdapter(BaseLLMAdapter): raise Exception("未指定Moonshot模型") return True + diff --git a/backend/app/services/llm/adapters/ollama_adapter.py b/backend/app/services/llm/adapters/ollama_adapter.py index 69b47d5..708ca19 100644 --- a/backend/app/services/llm/adapters/ollama_adapter.py +++ b/backend/app/services/llm/adapters/ollama_adapter.py @@ -80,3 +80,4 @@ class OllamaAdapter(BaseLLMAdapter): raise Exception("未指定Ollama模型") return True + diff --git a/backend/app/services/llm/adapters/openai_adapter.py b/backend/app/services/llm/adapters/openai_adapter.py index 48d5714..48fd7ef 100644 --- a/backend/app/services/llm/adapters/openai_adapter.py +++ b/backend/app/services/llm/adapters/openai_adapter.py @@ -90,3 +90,4 @@ class OpenAIAdapter(BaseLLMAdapter): raise Exception("未指定OpenAI模型") return True + diff --git a/backend/app/services/llm/adapters/qwen_adapter.py b/backend/app/services/llm/adapters/qwen_adapter.py index af6d33b..667287c 100644 --- a/backend/app/services/llm/adapters/qwen_adapter.py +++ b/backend/app/services/llm/adapters/qwen_adapter.py @@ -77,3 +77,4 @@ class QwenAdapter(BaseLLMAdapter): raise Exception("未指定通义千问模型") return True + diff --git a/backend/app/services/llm/adapters/zhipu_adapter.py b/backend/app/services/llm/adapters/zhipu_adapter.py index d78b0a8..6069502 100644 --- a/backend/app/services/llm/adapters/zhipu_adapter.py +++ b/backend/app/services/llm/adapters/zhipu_adapter.py @@ -77,3 +77,4 @@ class ZhipuAdapter(BaseLLMAdapter): raise Exception("未指定智谱AI模型") return True + diff --git a/backend/app/services/llm/base_adapter.py b/backend/app/services/llm/base_adapter.py index 2314d08..6eb4a69 100644 --- a/backend/app/services/llm/base_adapter.py +++ b/backend/app/services/llm/base_adapter.py @@ -132,3 +132,4 @@ class BaseLLMAdapter(ABC): await self._client.aclose() self._client = None + diff --git a/backend/app/services/llm/types.py b/backend/app/services/llm/types.py index 605288d..50d438f 100644 --- a/backend/app/services/llm/types.py +++ b/backend/app/services/llm/types.py @@ -118,3 +118,4 @@ DEFAULT_BASE_URLS: Dict[LLMProvider, str] = { LLMProvider.CLAUDE: "https://api.anthropic.com/v1", } + diff --git a/backend/requirements.txt b/backend/requirements.txt index 3bf7b70..4db4873 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -10,3 +10,4 @@ python-jose[cryptography] python-multipart httpx + diff --git a/frontend/Dockerfile b/frontend/Dockerfile index abfd6ca..c24674d 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -16,3 +16,4 @@ EXPOSE 5173 CMD ["npm", "run", "dev", "--", "--host"] + diff --git a/frontend/index.html b/frontend/index.html index 3db4bf3..7dcb069 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1,13 +1,16 @@ -
- - - -