Scout 是 Linker 内部通用 AI 聊天工具,目标是提供类似 Codex / Claude App 的实时 Agent 对话体验。
当前后端先保留 OAuth2 provider 查询能力,用于前端获取可登录的 OAuth2 渠道配置。
当前已完成:
- 后端从旧 NestJS 骨架迁移到 Python FastAPI。
- Open API 路由统一放在
/api/v1/open下。 - OAuth2 API 按 controller / dependencies / dto 拆分。
- PostgreSQL 查询使用 SQLModel。
- OAuth2 provider 数据库表为
oauth2_providers。 - 接口响应统一为
code / data / msg。
Scout
├─ scout-backend # Python FastAPI backend
├─ scout-web # Web frontend
├─ package.json # 根目录项目元信息,不维护前后端启动脚本
└─ README.md
前端和后端各自维护自己的启动方式,根目录不维护统一启动脚本。
scout-backend
├─ app.py # FastAPI app 与路由聚合
├─ main.py # 服务启动入口
├─ pyproject.toml
└─ app
├─ api
│ └─ open
│ ├─ __init__.py
│ └─ oauth2
│ ├─ __init__.py
│ ├─ oauth2.py # controller
│ ├─ dependencies.py # dependency wiring
│ └─ dto.py # response DTO
├─ application
│ └─ oauth2
│ ├─ dto.py
│ └─ oauth2_provider_query_service.py
├─ domain
│ └─ oauth2
│ ├─ entities.py
│ ├─ models.py
│ └─ repositories.py
├─ infrastructure
│ ├─ pg.py
│ └─ oauth2
│ ├─ clients.py
│ ├─ models.py
│ └─ repos.py
└─ core
└─ base
└─ resp_models.py
当前只保留:
GET /api/v1/open/oauth2/providers
响应格式:
{
"code": 200,
"data": [
{
"providerType": "item",
"providerName": "Item"
}
],
"msg": ""
}说明:
data直接返回 provider 列表,不再包一层providers。oauth2_providers表默认只查询enabled = true的记录。protocol不返回,也不在表中保留;该表内记录默认都是 OAuth2 provider。
Scout 当前 PostgreSQL 数据库:
scout
OAuth2 provider 表:
public.oauth2_providers
当前字段:
id
provider_type
provider_name
enabled
authorization_uri
token_uri
refresh_token_uri
client_id
client_secret
scope
redirect_uri
extra_authorization_params_json
created_at
updated_at
后端从启动目录直接读取 .env:
PORT=8080
AGENTS_API_KEY=laf_xxx
ITEM_BASE_URL=https://id-staging.item.com
AGENTS_API_KEY 只允许放在后端环境变量中,不能暴露给前端。
安装 Python 依赖:
cd scout-backend
python -m venv .venv
source .venv/Scripts/activate
pip install -e ".[dev]"启动后端:
cd scout-backend
source .venv/Scripts/activate
python main.py基础检查:
cd scout-backend
source .venv/Scripts/activate
python -m compileall app.py main.py app
python -m ruff check app.py main.py app前端在 scout-web 下维护自己的启动与构建命令。
本次重构删除了旧 NestJS 后端文件、旧 pnpm workspace 文件,以及暂未使用的 OAuth2 登录/session/WebSocket app 路由代码。后续需要时再按当前分层重新实现。