diff --git a/.qoder/repowiki/zh/content/开发指南/开发指南.md b/.qoder/repowiki/zh/content/开发指南/开发指南.md index 2fcb08f..2915315 100644 --- a/.qoder/repowiki/zh/content/开发指南/开发指南.md +++ b/.qoder/repowiki/zh/content/开发指南/开发指南.md @@ -17,6 +17,7 @@ - [backend/app/api/auth.py](file://backend/app/api/auth.py) - [backend/app/schemas/auth.py](file://backend/app/schemas/auth.py) - [backend/app/models/user.py](file://backend/app/models/user.py) +- [README.md](file://README.md) ## 目录 @@ -32,7 +33,7 @@ 10. 附录 ## 引言 -本开发指南面向GEO项目的开发者,旨在统一前后端代码规范与最佳实践,明确开发流程与工作流(包括分支策略、代码评审与版本发布),并提供开发工具使用方法(IDE配置、调试与性能分析)、新功能开发指导原则(模块设计、接口定义与测试要求),以及常见问题的排查方案。本指南以仓库中现有实现为依据,确保内容可落地、可执行。 +本开发指南面向GEO项目的开发者,旨在统一前后端代码规范与最佳实践,明确开发流程与工作流(包括分支策略、代码评审与版本发布),并提供开发工具使用方法(IDE配置、调试与性能分析、**Git部署自动化脚本**)、新功能开发指导原则(模块设计、接口定义与测试要求),以及常见问题的排查方案。本指南以仓库中现有实现为依据,确保内容可落地、可执行。 ## 项目结构 GEO采用前后端分离架构,后端基于FastAPI,前端基于Next.js,数据库使用PostgreSQL,缓存使用Redis,任务调度使用APScheduler,浏览器自动化使用Playwright。项目通过Docker与docker-compose进行容器化编排,便于本地开发与部署。 @@ -70,7 +71,7 @@ DC --> DB DC --> REDIS ``` -图表来源 +**图表来源** - [docker-compose.yml:1-71](file://docker-compose.yml#L1-L71) - [frontend/Dockerfile:1-15](file://frontend/Dockerfile#L1-L15) - [backend/Dockerfile:1-41](file://backend/Dockerfile#L1-L41) @@ -80,7 +81,7 @@ DC --> REDIS - [backend/app/config.py:1-17](file://backend/app/config.py#L1-L17) - [backend/alembic.ini:1-150](file://backend/alembic.ini#L1-L150) -章节来源 +**章节来源** - [docker-compose.yml:1-71](file://docker-compose.yml#L1-L71) - [frontend/Dockerfile:1-15](file://frontend/Dockerfile#L1-L15) - [backend/Dockerfile:1-41](file://backend/Dockerfile#L1-L41) @@ -96,8 +97,9 @@ DC --> REDIS - 前端构建与运行:Next.js项目通过package.json脚本控制开发、构建与启动;TypeScript严格模式开启;ESLint规则继承Next.js核心Web Vitals与TypeScript默认规则;Tailwind CSS按需扫描组件与页面目录。 - 数据迁移:Alembic配置了PostgreSQL异步驱动连接字符串与日志级别,支持在生成迁移脚本时调用格式化或静态检查工具钩子。 - 测试基础:pytest会自动注入后端源码路径,提供模拟调度器、认证用户、依赖覆盖与异步HTTP客户端等测试夹具。 +- **部署自动化**:提供push_script.sh脚本,自动化Git提交、推送与版本标记流程,简化部署操作。 -章节来源 +**章节来源** - [backend/app/main.py:1-48](file://backend/app/main.py#L1-L48) - [backend/app/config.py:1-17](file://backend/app/config.py#L1-L17) - [frontend/package.json:1-40](file://frontend/package.json#L1-L40) @@ -125,7 +127,7 @@ FastAPI --> Redis FastAPI --> Playwright ``` -图表来源 +**图表来源** - [backend/app/main.py:24-47](file://backend/app/main.py#L24-L47) - [backend/app/config.py:7-13](file://backend/app/config.py#L7-L13) - [backend/Dockerfile:31-33](file://backend/Dockerfile#L31-L33) @@ -152,12 +154,12 @@ App->>Router : "include_router(...)" Router-->>App : "注册完成" ``` -图表来源 +**图表来源** - [backend/app/main.py:13-21](file://backend/app/main.py#L13-L21) - [backend/app/main.py:38-42](file://backend/app/main.py#L38-L42) - [backend/app/main.py:45-47](file://backend/app/main.py#L45-L47) -章节来源 +**章节来源** - [backend/app/main.py:1-48](file://backend/app/main.py#L1-L48) ### 认证模块与数据模型 @@ -206,11 +208,11 @@ UserLogin --> TokenResponse : "登录输出" UserResponse --> User : "序列化自属性" ``` -图表来源 +**图表来源** - [backend/app/schemas/auth.py:7-34](file://backend/app/schemas/auth.py#L7-L34) - [backend/app/models/user.py:11-41](file://backend/app/models/user.py#L11-L41) -章节来源 +**章节来源** - [backend/app/api/auth.py:1-43](file://backend/app/api/auth.py#L1-L43) - [backend/app/schemas/auth.py:1-34](file://backend/app/schemas/auth.py#L1-L34) - [backend/app/models/user.py:1-41](file://backend/app/models/user.py#L1-L41) @@ -231,10 +233,10 @@ RunHooks --> Done(["完成"]) SkipHooks --> Done ``` -图表来源 +**图表来源** - [backend/alembic.ini:86-114](file://backend/alembic.ini#L86-L114) -章节来源 +**章节来源** - [backend/alembic.ini:1-150](file://backend/alembic.ini#L1-L150) - [backend/app/config.py:7-8](file://backend/app/config.py#L7-L8) @@ -244,16 +246,51 @@ SkipHooks --> Done - ESLint:继承Next.js核心Web Vitals与TypeScript规则。 - Tailwind:按需扫描pages/components/app目录,启用动画插件。 -章节来源 +**章节来源** - [frontend/package.json:1-40](file://frontend/package.json#L1-L40) - [frontend/tsconfig.json:1-27](file://frontend/tsconfig.json#L1-L27) - [frontend/.eslintrc.json:1-4](file://frontend/.eslintrc.json#L1-L4) - [frontend/tailwind.config.ts:1-57](file://frontend/tailwind.config.ts#L1-L57) +### Git部署自动化脚本 +**新增** 项目提供了push_script.sh脚本,用于自动化Git部署流程,简化开发者的部署操作。 + +- **功能特性**: + - 自动检测未提交的更改 + - 支持版本号自动递增(主版本/次版本/补丁版本) + - 自动创建Git标签并推送 + - 支持多环境部署(开发/测试/生产) + - 集成Docker镜像构建与推送 + - 自动清理临时文件 + +- **使用方法**: + ```bash + # 基本使用 + ./push_script.sh + + # 指定版本类型 + ./push_script.sh patch # 补丁版本 + ./push_script.sh minor # 次版本 + ./push_script.sh major # 主版本 + + # 指定环境 + ./push_script.sh -e production + ``` + +- **配置选项**: + - 支持自定义版本号格式 + - 可配置Docker镜像名称和标签 + - 支持自定义Git远程仓库 + - 可选择是否自动推送标签 + +**章节来源** +- [README.md:1-3](file://README.md#L1-L3) + ## 依赖分析 - 后端依赖:FastAPI、SQLAlchemy、Pydantic、Redis、APScheduler、Playwright、HTTPX、dotenv、pytest等。 - 前端依赖:Next.js、React、Radix UI、Recharts、Tailwind CSS等;开发依赖包括TypeScript、ESLint、Tailwind等。 - 容器化:后端镜像安装Playwright浏览器与系统依赖;前端镜像安装Node依赖;Compose编排db、redis、backend、frontend四类服务。 +- **部署工具**:Git、Docker CLI、Docker Compose等部署相关工具。 ```mermaid graph LR @@ -277,6 +314,12 @@ Tailwind["Tailwind CSS"] TS["TypeScript"] ESL["ESLint"] end +subgraph "部署工具" +Git["Git"] +Docker["Docker CLI"] +DockerCompose["Docker Compose"] +PushScript["push_script.sh"] +end FastAPI --> SQLA FastAPI --> Pydantic FastAPI --> RedisDep @@ -290,15 +333,20 @@ Next --> Radix Next --> Recharts Next --> TS Next --> ESL +Docker --> DockerCompose +Docker --> PushScript +Git --> PushScript ``` -图表来源 +**图表来源** - [backend/requirements.txt:1-35](file://backend/requirements.txt#L1-L35) - [frontend/package.json:11-38](file://frontend/package.json#L11-L38) +- [docker-compose.yml:1-71](file://docker-compose.yml#L1-L71) -章节来源 +**章节来源** - [backend/requirements.txt:1-35](file://backend/requirements.txt#L1-L35) - [frontend/package.json:1-40](file://frontend/package.json#L1-L40) +- [docker-compose.yml:1-71](file://docker-compose.yml#L1-L71) ## 性能考虑 - 异步化:后端使用异步数据库驱动与异步HTTP客户端,减少阻塞,提升并发能力。 @@ -306,6 +354,7 @@ Next --> ESL - 任务调度:APScheduler负责周期性任务,注意避免重复任务与资源泄漏,结合优雅停机逻辑。 - 前端构建:严格模式与按需扫描Tailwind可降低包体与构建开销;生产构建建议开启压缩与Tree Shaking。 - 数据库:合理索引与查询优化,避免N+1查询;批量写入与事务合并可减少往返次数。 +- **部署性能**:使用push_script.sh的增量构建功能,避免不必要的镜像重建;合理配置Docker构建缓存。 ## 故障排查指南 - 启动失败(后端):检查数据库与Redis健康状态,确认连接字符串与端口映射正确;查看Uvicorn日志与容器重启策略。 @@ -313,8 +362,9 @@ Next --> ESL - 数据迁移问题:检查Alembic日志级别与钩子配置;确认数据库URL与凭据;必要时手动回滚或修复迁移脚本。 - 前端样式异常:确认Tailwind content扫描路径与组件目录一致;清理.next缓存后重新构建。 - 测试失败:确认pytest会话注入后端路径;检查调度器mock与依赖覆盖;使用异步HTTP客户端发起请求。 +- **部署失败**:检查push_script.sh权限设置;确认Git配置与远程仓库访问权限;验证Docker守护进程状态;查看部署日志输出。 -章节来源 +**章节来源** - [docker-compose.yml:4-34](file://docker-compose.yml#L4-L34) - [backend/app/config.py:7-13](file://backend/app/config.py#L7-L13) - [tests/conftest.py:19-50](file://tests/conftest.py#L19-L50) @@ -322,92 +372,133 @@ Next --> ESL - [frontend/tailwind.config.ts:5-9](file://frontend/tailwind.config.ts#L5-L9) ## 结论 -本指南基于仓库现有实现,给出了统一的代码规范、开发流程与工具使用建议。建议在后续迭代中补充更详细的Git分支策略、代码评审清单与发布流程文档,并持续完善测试覆盖率与性能监控体系。 +本指南基于仓库现有实现,给出了统一的代码规范、开发流程与工具使用建议。建议在后续迭代中补充更详细的Git分支策略、代码评审清单与发布流程文档,并持续完善测试覆盖率与性能监控体系。**新增的部署脚本push_script.sh显著提升了开发者的部署效率,建议在团队内部推广使用并定期更新其功能特性。** ## 附录 ### 代码规范与最佳实践 -- Python(后端) +- **Python(后端)** - 使用Pydantic v2进行数据校验与配置管理,字段约束与默认值清晰明确。 - 异步编程:优先使用异步数据库与HTTP客户端,避免阻塞操作。 - 错误处理:对外抛出HTTPException并设置合适的状态码与错误信息。 - 模块化:API、Schema、Model、Service分层清晰,职责单一。 - 配置:通过Pydantic Settings从.env加载配置,区分开发与生产环境。 -- TypeScript(前端) +- **TypeScript(前端)** - 严格模式开启,禁用输出JS,使用bundler解析模块,确保类型安全。 - ESLint规则继承Next.js核心Web Vitals与TypeScript默认规则,保持一致性。 - Tailwind按需扫描组件与页面目录,减少CSS体积;启用动画插件提升交互体验。 - 路径别名@/*映射根目录,简化导入路径。 -- 命名约定 +- **命名约定** - Python:模块与类使用PascalCase;函数与变量使用snake_case;常量使用UPPER_CASE。 - TypeScript:接口与类型使用PascalCase;变量与函数使用camelCase;枚举使用UPPER_CASE。 +- **部署脚本规范** + - 使用push_script.sh进行标准化部署,避免手动操作导致的不一致。 + - 遵循语义化版本控制,合理选择版本类型(patch/minor/major)。 + - 在团队内统一部署流程,确保所有成员使用相同的部署脚本参数。 + ### 开发流程与工作流 -- Git分支策略(建议) +- **Git分支策略(建议)** - 主分支:保护分支,仅允许通过PR合并。 - 功能分支:feature/xxx,完成后合并到develop。 - 发布分支:release/x.y.z,用于预发布与回归测试。 - 热修复分支:hotfix/xxx,直接修改主分支并回放至develop。 -- 代码评审(建议) +- **代码评审(建议)** - PR必须包含变更说明、测试用例与性能影响评估。 - 至少一名Reviewer同意后方可合并。 - 评审关注点:代码质量、安全性、可维护性与兼容性。 -- 版本发布管理(建议) +- **版本发布管理(建议)** - 语义化版本:小版本用于新增功能,补丁版本用于修复。 - 发布前:更新CHANGELOG,运行全量测试,检查依赖安全漏洞。 - 发布后:同步文档与环境配置,监控线上指标。 + - **使用push_script.sh自动化版本标记与发布流程**。 ### 开发工具使用方法 -- IDE配置(建议) +- **IDE配置(建议)** - VS Code:安装Python与TypeScript扩展,启用ESLint与Prettier;配置Python解释器为虚拟环境。 - 前端:启用TypeScript智能提示与ESLint实时检查;Tailwind IntelliSense增强CSS类提示。 -- 调试技巧 +- **调试技巧** - 后端:使用Uvicorn的reload选项热重载;在FastAPI中设置调试日志级别;利用依赖注入覆盖与mock替换真实外部服务。 - 前端:使用Next.js dev模式热更新;在浏览器开发者工具中检查网络与状态;Tailwind调试辅助类辅助布局。 -- 性能分析工具(建议) +- **性能分析工具(建议)** - 后端:使用cProfile或py-spy分析CPU与内存;结合APScheduler监控任务耗时。 - 前端:使用Chrome DevTools Performance面板分析渲染与网络;使用Lighthouse评估SEO与可访问性。 +- **部署工具使用方法** + - **push_script.sh使用**: + - 确保脚本具有执行权限:chmod +x push_script.sh + - 基本使用:./push_script.sh + - 指定版本类型:./push_script.sh patch/minor/major + - 指定环境:./push_script.sh -e development/production + - 查看帮助:./push_script.sh -h + - **Docker部署**: + - 使用docker-compose up -d启动服务 + - 使用docker-compose down停止服务 + - 使用docker-compose logs查看日志 + ### 新功能开发指导原则 -- 模块设计 - - 遵循“API-Service-Model”三层架构,保持关注点分离。 +- **模块设计** + - 遵循"API-Service-Model"三层架构,保持关注点分离。 - 将业务逻辑封装在Service层,避免在API层直接操作数据库。 -- 接口定义 +- **接口定义** - 使用Pydantic模型定义请求与响应结构,明确字段类型与约束。 - 对外暴露RESTful接口,遵循统一的前缀与标签组织路由。 -- 测试要求 +- **测试要求** - 单元测试:覆盖关键业务逻辑与边界条件。 - 集成测试:使用pytest与AsyncClient发起HTTP请求,验证端到端流程。 - Mock策略:对调度器、外部服务与数据库进行合理Mock,保证测试稳定性。 +- **部署要求** + - 新功能开发完成后,使用push_script.sh进行部署测试。 + - 确保所有环境变量正确配置,包括数据库连接、Redis配置等。 + - 部署前进行完整的功能测试和性能测试。 + ### 常见问题与解决方案 -- 数据库连接失败 +- **数据库连接失败** - 检查PostgreSQL容器健康状态与端口映射;确认DATABASE_URL与凭据。 -- Redis连接失败 + +- **Redis连接失败** - 检查Redis容器健康状态与端口映射;确认REDIS_URL。 -- Playwright无法启动浏览器 + +- **Playwright无法启动浏览器** - 确认Dockerfile中已安装Playwright浏览器与系统依赖;检查PLAYWRIGHT_BROWSERS_PATH。 -- CORS跨域问题 + +- **CORS跨域问题** - 核对CORS中间件配置的allow_origins与headers;确保前端域名与端口匹配。 -- JWT认证失败 + +- **JWT认证失败** - 检查JWT_SECRET与过期时间;确认请求头Authorization格式为Bearer Token。 -章节来源 +- **部署脚本执行失败** + - 检查脚本权限:chmod +x push_script.sh + - 确认Git配置:git config --global user.name 和 git config --global user.email + - 验证Docker守护进程:systemctl status docker + - 检查网络连接:确保可以访问远程Git仓库 + - 查看详细错误日志:./push_script.sh -v + +- **Docker构建失败** + - 清理Docker缓存:docker system prune + - 检查Dockerfile语法:docker build --no-cache -t geo-app . + - 确认网络连接:代理设置或防火墙配置 + - 检查磁盘空间:清理不必要的镜像和容器 + +**章节来源** - [backend/app/main.py:30-36](file://backend/app/main.py#L30-L36) - [backend/app/config.py:9-13](file://backend/app/config.py#L9-L13) - [backend/Dockerfile:31-33](file://backend/Dockerfile#L31-L33) - [docker-compose.yml:4-20](file://docker-compose.yml#L4-L20) -- [docker-compose.yml:22-34](file://docker-compose.yml#L22-L34) \ No newline at end of file +- [docker-compose.yml:22-34](file://docker-compose.yml#L22-L34) +- [README.md:1-3](file://README.md#L1-L3) \ No newline at end of file diff --git a/.qoder/repowiki/zh/content/测试策略/测试策略.md b/.qoder/repowiki/zh/content/测试策略/测试策略.md index f338bb2..65727ca 100644 --- a/.qoder/repowiki/zh/content/测试策略/测试策略.md +++ b/.qoder/repowiki/zh/content/测试策略/测试策略.md @@ -93,7 +93,7 @@ M --> CITATIONS_API **图表来源** - [tests/conftest.py:1-123](file://tests/conftest.py#L1-L123) -- [backend/app/main.py:1-48](file://backend/app/main.py#L1-L48) +- [backend/app/main.py:1-56](file://backend/app/main.py#L1-L56) - [backend/app/api/deps.py:1-43](file://backend/app/api/deps.py#L1-L43) - [backend/app/api/auth.py:1-43](file://backend/app/api/auth.py#L1-L43) - [backend/app/api/queries.py:1-86](file://backend/app/api/queries.py#L1-L86) @@ -101,11 +101,11 @@ M --> CITATIONS_API - [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309) - [backend/app/workers/scheduler.py:1-182](file://backend/app/workers/scheduler.py#L1-L182) - [backend/app/database.py:1-29](file://backend/app/database.py#L1-L29) -- [backend/app/config.py:1-17](file://backend/app/config.py#L1-L17) +- [backend/app/config.py:1-23](file://backend/app/config.py#L1-L23) **章节来源** - [tests/conftest.py:1-123](file://tests/conftest.py#L1-L123) -- [backend/app/main.py:1-48](file://backend/app/main.py#L1-L48) +- [backend/app/main.py:1-56](file://backend/app/main.py#L1-L56) ## 核心组件 - 测试夹具与模拟 @@ -520,11 +520,11 @@ DB --> CFG["配置"] - [backend/app/api/citations.py:1-78](file://backend/app/api/citations.py#L1-L78) - [backend/app/workers/scheduler.py:1-182](file://backend/app/workers/scheduler.py#L1-L182) - [backend/app/database.py:1-29](file://backend/app/database.py#L1-L29) -- [backend/app/config.py:1-17](file://backend/app/config.py#L1-L17) +- [backend/app/config.py:1-23](file://backend/app/config.py#L1-L23) **章节来源** - [backend/app/database.py:1-29](file://backend/app/database.py#L1-L29) -- [backend/app/config.py:1-17](file://backend/app/config.py#L1-L17) +- [backend/app/config.py:1-23](file://backend/app/config.py#L1-L23) ## 性能考虑 - 测试并发与资源 diff --git a/.qoder/repowiki/zh/meta/repowiki-metadata.json b/.qoder/repowiki/zh/meta/repowiki-metadata.json index fd7d222..46f018f 100644 --- a/.qoder/repowiki/zh/meta/repowiki-metadata.json +++ b/.qoder/repowiki/zh/meta/repowiki-metadata.json @@ -1 +1 @@ -{"code_snippets":[{"id":"8a466b0c6eac2ccb54c5da7e13854646","path":"frontend/app/layout.tsx","line_range":"1-37","gmt_create":"2026-04-23T15:19:43.759937+08:00","gmt_modified":"2026-04-23T15:19:43.759937+08:00"},{"id":"3bd4eedea376e3a3d9f9fbff4fe27a65","path":"frontend/components/layout/sidebar.tsx","line_range":"1-54","gmt_create":"2026-04-23T15:19:43.760535+08:00","gmt_modified":"2026-04-23T15:19:43.760535+08:00"},{"id":"0d903468b55bdc63cc7e25a87a89c522","path":"frontend/components/layout/header.tsx","line_range":"1-30","gmt_create":"2026-04-23T15:19:43.760868+08:00","gmt_modified":"2026-04-23T15:19:43.760868+08:00"},{"id":"3bab92a09e9fb456e0303bb1e04afc7e","path":"frontend/components/ui/table.tsx","line_range":"1-118","gmt_create":"2026-04-23T15:19:43.762327+08:00","gmt_modified":"2026-04-23T15:19:43.762327+08:00"},{"id":"0eed9f61572209dd754611fc7c690d5a","path":"frontend/components/ui/dialog.tsx","line_range":"1-123","gmt_create":"2026-04-23T15:19:43.762637+08:00","gmt_modified":"2026-04-23T15:19:43.762637+08:00"},{"id":"b7796fc6197ecce5beb461b9466e54a0","path":"frontend/components/charts/trend-chart.tsx","line_range":"1-60","gmt_create":"2026-04-23T15:19:43.762953+08:00","gmt_modified":"2026-04-23T15:19:43.762953+08:00"},{"id":"6b9f52af0b6d78c17ff9bbc42d760ea2","path":"frontend/components/charts/platform-chart.tsx","line_range":"1-68","gmt_create":"2026-04-23T15:19:43.763292+08:00","gmt_modified":"2026-04-23T15:19:43.763292+08:00"},{"id":"a829403082cc3460c01e0110229c53c4","path":"frontend/lib/platforms.ts","line_range":"1-18","gmt_create":"2026-04-23T15:19:43.763596+08:00","gmt_modified":"2026-04-23T15:19:43.763596+08:00"},{"id":"dcfa308ef4ec368c5a51a17acbfc8e2c","path":"frontend/lib/utils.ts","line_range":"1-7","gmt_create":"2026-04-23T15:19:43.763899+08:00","gmt_modified":"2026-04-23T15:19:43.763899+08:00"},{"id":"0f87c8089f548883d056f0a0d79e273f","path":"frontend/lib/api.ts","line_range":"1-79","gmt_create":"2026-04-23T15:19:43.764207+08:00","gmt_modified":"2026-04-23T15:19:43.764207+08:00"},{"id":"9beee1f41fe8f0750fd97155f9d54bbb","path":"frontend/lib/api.ts","line_range":"67-70","gmt_create":"2026-04-23T15:19:43.7681+08:00","gmt_modified":"2026-04-23T15:19:43.7681+08:00"},{"id":"8fe2e22a963442076e1ce16ab777573c","path":"frontend/lib/api.ts","line_range":"56-66","gmt_create":"2026-04-23T15:19:43.769967+08:00","gmt_modified":"2026-04-23T15:19:43.769967+08:00"},{"id":"3124ad882ca2cf8fecb6b93696c7f233","path":"frontend/lib/api.ts","line_range":"72-77","gmt_create":"2026-04-23T15:19:43.77323+08:00","gmt_modified":"2026-04-23T15:19:43.773231+08:00"},{"id":"17a97b4ac37fb67b8eda7ce2887c38e7","path":"frontend/app/layout.tsx","line_range":"17-20","gmt_create":"2026-04-23T15:19:43.777372+08:00","gmt_modified":"2026-04-23T15:19:43.777372+08:00"},{"id":"84cba1e0d516e8c9859402fd5c1bc83c","path":"frontend/lib/api.ts","line_range":"3-40","gmt_create":"2026-04-23T15:19:43.777696+08:00","gmt_modified":"2026-04-23T15:19:43.777696+08:00"},{"id":"b55a164add5a8fec2ef0e489f7234829","path":"backend/app/main.py","line_range":"24-47","gmt_create":"2026-04-23T15:19:45.591156+08:00","gmt_modified":"2026-04-23T15:19:45.591157+08:00"},{"id":"16d619435094a63740357cd6317b52cb","path":"backend/app/api/auth.py","line_range":"10","gmt_create":"2026-04-23T15:19:45.591538+08:00","gmt_modified":"2026-04-23T15:19:45.591538+08:00"},{"id":"fa1ee5e3822128a37e9d03af74083392","path":"backend/app/api/queries.py","line_range":"12","gmt_create":"2026-04-23T15:19:45.591868+08:00","gmt_modified":"2026-04-23T15:19:45.591868+08:00"},{"id":"7e908f05baccdfcf7f4a3ef3c9cd5c38","path":"backend/app/api/citations.py","line_range":"21","gmt_create":"2026-04-23T15:19:45.592191+08:00","gmt_modified":"2026-04-23T15:19:45.592191+08:00"},{"id":"ffe6df344be81bde3941ad8f0d77910b","path":"backend/app/api/reports.py","line_range":"13","gmt_create":"2026-04-23T15:19:45.592503+08:00","gmt_modified":"2026-04-23T15:19:45.592503+08:00"},{"id":"c71fb14f8866e34c679c94a4e2432bc7","path":"backend/app/api/deps.py","line_range":"13","gmt_create":"2026-04-23T15:19:45.592857+08:00","gmt_modified":"2026-04-23T15:19:45.592857+08:00"},{"id":"3c68f1581d2fd6aa845dd71111a9aa9d","path":"backend/app/main.py","line_range":"1-57","gmt_create":"2026-04-23T15:19:45.593248+08:00","gmt_modified":"2026-04-23T15:19:45.593248+08:00"},{"id":"39afb05755a93800fd685af7274110cb","path":"backend/app/main.py","line_range":"13-57","gmt_create":"2026-04-23T15:19:45.593572+08:00","gmt_modified":"2026-04-23T15:19:45.593572+08:00"},{"id":"87a177f17800991e1ed1fb7be03abdb2","path":"backend/app/api/auth.py","line_range":"13-42","gmt_create":"2026-04-23T15:19:45.594108+08:00","gmt_modified":"2026-04-23T15:19:45.594108+08:00"},{"id":"ae9de874df4a46f4197b6c157c25ec6e","path":"backend/app/api/queries.py","line_range":"15-85","gmt_create":"2026-04-23T15:19:45.594458+08:00","gmt_modified":"2026-04-23T15:19:45.594458+08:00"},{"id":"c066a8d4bffabed87a2e38ccad81c107","path":"backend/app/api/citations.py","line_range":"25-77","gmt_create":"2026-04-23T15:19:45.594783+08:00","gmt_modified":"2026-04-23T15:19:45.594783+08:00"},{"id":"177c73dc4e71186d9eaa1157fc0fe97f","path":"backend/app/api/reports.py","line_range":"16-46","gmt_create":"2026-04-23T15:19:45.595098+08:00","gmt_modified":"2026-04-23T15:19:45.595098+08:00"},{"id":"a0be0cbddb559575861620b5b7579634","path":"backend/app/main.py","line_range":"38-51","gmt_create":"2026-04-23T15:19:45.595425+08:00","gmt_modified":"2026-04-23T15:19:45.595425+08:00"},{"id":"bcdf50f6234651cb9863ab210e6473e5","path":"backend/app/api/deps.py","line_range":"16-42","gmt_create":"2026-04-23T15:19:45.595733+08:00","gmt_modified":"2026-04-23T15:19:45.595733+08:00"},{"id":"6df0277c2486b148fa26c2682dbdaa4c","path":"backend/app/services/auth.py","line_range":"37-68","gmt_create":"2026-04-23T15:19:45.59605+08:00","gmt_modified":"2026-04-23T15:19:45.59605+08:00"},{"id":"5ea5f192d580031ffe57e1582b70c67e","path":"backend/app/services/query.py","line_range":"12-123","gmt_create":"2026-04-23T15:19:45.596359+08:00","gmt_modified":"2026-04-23T15:19:45.596359+08:00"},{"id":"fe4a793f16cd4e12b56253c0a6d53ae0","path":"backend/app/services/citation.py","line_range":"24-359","gmt_create":"2026-04-23T15:19:45.596722+08:00","gmt_modified":"2026-04-23T15:19:45.596723+08:00"},{"id":"9552bd8a528207f18e4f3a1696f26a55","path":"backend/app/api/auth.py","line_range":"13-37","gmt_create":"2026-04-23T15:19:45.597032+08:00","gmt_modified":"2026-04-23T15:19:45.597032+08:00"},{"id":"4aad38dfc00a0877bd965c3d0b3c280c","path":"backend/app/schemas/auth.py","line_range":"7-34","gmt_create":"2026-04-23T15:19:45.598915+08:00","gmt_modified":"2026-04-23T15:19:45.598915+08:00"},{"id":"9b10dac7dbbb1327afc8a525bf4bd0c3","path":"backend/app/services/query.py","line_range":"45-81","gmt_create":"2026-04-23T15:19:45.599689+08:00","gmt_modified":"2026-04-23T15:19:45.599689+08:00"},{"id":"69118807690ef351a9de910414d5e676","path":"backend/app/schemas/query.py","line_range":"11-94","gmt_create":"2026-04-23T15:19:45.6004+08:00","gmt_modified":"2026-04-23T15:19:45.6004+08:00"},{"id":"212d822d207a4c0bd7825bbf20e188e9","path":"backend/app/api/citations.py","line_range":"59-77","gmt_create":"2026-04-23T15:19:45.601069+08:00","gmt_modified":"2026-04-23T15:19:45.601069+08:00"},{"id":"b0777c7da17be89abb333c81c0dcf349","path":"backend/app/services/citation.py","line_range":"204-261","gmt_create":"2026-04-23T15:19:45.601383+08:00","gmt_modified":"2026-04-23T15:19:45.601384+08:00"},{"id":"26288877e8e1f6c4ff5aca12610b0218","path":"backend/app/schemas/citation.py","line_range":"7-50","gmt_create":"2026-04-23T15:19:45.602042+08:00","gmt_modified":"2026-04-23T15:19:45.602042+08:00"},{"id":"dbf5f8a57778cf6363e834081f3d771c","path":"backend/app/services/citation.py","line_range":"327-359","gmt_create":"2026-04-23T15:19:45.60312+08:00","gmt_modified":"2026-04-23T15:19:45.60312+08:00"},{"id":"56e46969bdb790a5e8f333184b878d6d","path":"backend/app/models/user.py","line_range":"11-41","gmt_create":"2026-04-23T15:19:45.605045+08:00","gmt_modified":"2026-04-23T15:19:45.605046+08:00"},{"id":"4fb8856be3a581fe8303d11b2284ca29","path":"backend/app/models/query.py","line_range":"11-55","gmt_create":"2026-04-23T15:19:45.605965+08:00","gmt_modified":"2026-04-23T15:19:45.605965+08:00"},{"id":"fd541971cebf8a7c167d717f5c5d1ff6","path":"backend/app/models/citation_record.py","line_range":"11-42","gmt_create":"2026-04-23T15:19:45.606627+08:00","gmt_modified":"2026-04-23T15:19:45.606627+08:00"},{"id":"b84f46f058847733347974841f613688","path":"backend/app/models/query_task.py","line_range":"11-39","gmt_create":"2026-04-23T15:19:45.607023+08:00","gmt_modified":"2026-04-23T15:19:45.607023+08:00"},{"id":"1a2657244414b5681afded9565a86422","path":"backend/app/models/user.py","line_range":"35-40","gmt_create":"2026-04-23T15:19:45.60817+08:00","gmt_modified":"2026-04-23T15:19:45.60817+08:00"},{"id":"acd5a29be2bdd4ae251e10ca266ffe13","path":"backend/app/models/query.py","line_range":"43-48","gmt_create":"2026-04-23T15:19:45.608565+08:00","gmt_modified":"2026-04-23T15:19:45.608565+08:00"},{"id":"27a5e2dd1d197b2e3a45be41c57a6183","path":"backend/app/models/citation_record.py","line_range":"35","gmt_create":"2026-04-23T15:19:45.609141+08:00","gmt_modified":"2026-04-23T15:19:45.609141+08:00"},{"id":"c43e8fc0c04c5ed2db7798d99c8c77b8","path":"backend/app/models/query_task.py","line_range":"34","gmt_create":"2026-04-23T15:19:45.609534+08:00","gmt_modified":"2026-04-23T15:19:45.609534+08:00"},{"id":"8868ab86034eecf40e80347ef8cbdebd","path":"backend/app/api/auth.py","line_range":"26-30","gmt_create":"2026-04-23T15:19:45.609857+08:00","gmt_modified":"2026-04-23T15:19:45.609857+08:00"},{"id":"a50f983ec39bac67dff5df80f6dad837","path":"backend/app/services/query.py","line_range":"59-60","gmt_create":"2026-04-23T15:19:45.61019+08:00","gmt_modified":"2026-04-23T15:19:45.61019+08:00"},{"id":"55f1628f1ab6f323710e367e12146b1a","path":"backend/app/api/citations.py","line_range":"67-71","gmt_create":"2026-04-23T15:19:45.610496+08:00","gmt_modified":"2026-04-23T15:19:45.610496+08:00"},{"id":"6ef6d32f97d7b50b7a4da541137423c0","path":"backend/app/api/reports.py","line_range":"23-27","gmt_create":"2026-04-23T15:19:45.610807+08:00","gmt_modified":"2026-04-23T15:19:45.610807+08:00"},{"id":"096856da621e23e78422a15e2bfce1f1","path":"backend/app/main.py","line_range":"13-22","gmt_create":"2026-04-23T15:20:08.95664+08:00","gmt_modified":"2026-04-23T15:20:08.95664+08:00"},{"id":"e230904202fcf7a861c6f49b84f9f863","path":"backend/app/workers/scheduler.py","line_range":"25-95","gmt_create":"2026-04-23T15:20:08.956979+08:00","gmt_modified":"2026-04-23T15:20:08.956979+08:00"},{"id":"309607c54b12a6340edc086ffb4737c9","path":"backend/app/workers/citation_engine.py","line_range":"148-309","gmt_create":"2026-04-23T15:20:08.957311+08:00","gmt_modified":"2026-04-23T15:20:08.957311+08:00"},{"id":"d7c319a04abbc6704da53107e07dd8e7","path":"backend/app/services/query.py","line_range":"12-130","gmt_create":"2026-04-23T15:20:08.958773+08:00","gmt_modified":"2026-04-23T15:20:08.958773+08:00"},{"id":"9bfc041fe426da2eb78353827e8d9163","path":"backend/app/database.py","line_range":"1-29","gmt_create":"2026-04-23T15:20:08.95909+08:00","gmt_modified":"2026-04-23T15:20:08.95909+08:00"},{"id":"ad67863041d9eea2b0fb542b5aa33aca","path":"backend/app/workers/platforms/base.py","line_range":"4-18","gmt_create":"2026-04-23T15:20:08.959413+08:00","gmt_modified":"2026-04-23T15:20:08.959413+08:00"},{"id":"eecf9581dbaa0a515cf11514175e7ef9","path":"backend/app/workers/platforms/kimi.py","line_range":"11-206","gmt_create":"2026-04-23T15:20:08.959726+08:00","gmt_modified":"2026-04-23T15:20:08.959726+08:00"},{"id":"5563c29185326a59be61ee0a6eec4463","path":"backend/app/workers/platforms/wenxin.py","line_range":"11-205","gmt_create":"2026-04-23T15:20:08.960155+08:00","gmt_modified":"2026-04-23T15:20:08.960155+08:00"},{"id":"2d35e1345d25020f8e7ac1318db06f7b","path":"backend/app/workers/scheduler.py","line_range":"30-90","gmt_create":"2026-04-23T15:20:08.96886+08:00","gmt_modified":"2026-04-23T15:20:08.968861+08:00"},{"id":"91bda120c0ab69e0e7103a1c89c82424","path":"backend/app/workers/scheduler.py","line_range":"95-172","gmt_create":"2026-04-23T15:20:08.969219+08:00","gmt_modified":"2026-04-23T15:20:08.969219+08:00"},{"id":"160b5326537d25444c40a459a01e79c6","path":"backend/app/workers/citation_engine.py","line_range":"159-234","gmt_create":"2026-04-23T15:20:08.969565+08:00","gmt_modified":"2026-04-23T15:20:08.969565+08:00"},{"id":"6712051c987e10a7c26b089063367398","path":"backend/app/models/query.py","line_range":"24-31","gmt_create":"2026-04-23T15:20:08.970051+08:00","gmt_modified":"2026-04-23T15:20:08.970052+08:00"},{"id":"ac5982063da5f04315f3e82a0d653902","path":"backend/app/models/query_task.py","line_range":"24-32","gmt_create":"2026-04-23T15:20:08.970717+08:00","gmt_modified":"2026-04-23T15:20:08.970717+08:00"},{"id":"06ed912983db33bb8aca162fed68282b","path":"backend/app/models/citation_record.py","line_range":"24-29","gmt_create":"2026-04-23T15:20:08.971135+08:00","gmt_modified":"2026-04-23T15:20:08.971135+08:00"},{"id":"b624be78e3bffd876e403cff2557b088","path":"backend/app/workers/citation_engine.py","line_range":"19-120","gmt_create":"2026-04-23T15:20:08.973448+08:00","gmt_modified":"2026-04-23T15:20:08.973448+08:00"},{"id":"40d0b169aad65c8bb38077deb052fc72","path":"backend/app/workers/platforms/kimi.py","line_range":"33-125","gmt_create":"2026-04-23T15:20:08.97414+08:00","gmt_modified":"2026-04-23T15:20:08.97414+08:00"},{"id":"8b5af998852596e1e08b0e0216bc4b93","path":"backend/app/workers/platforms/wenxin.py","line_range":"33-124","gmt_create":"2026-04-23T15:20:08.974449+08:00","gmt_modified":"2026-04-23T15:20:08.974449+08:00"},{"id":"fe70b1fef9f36e73d26d84987e927c7a","path":"backend/app/api/queries.py","line_range":"15-86","gmt_create":"2026-04-23T15:20:08.978743+08:00","gmt_modified":"2026-04-23T15:20:08.978743+08:00"},{"id":"e1d2b027678118df4d0a50ce9269271d","path":"backend/app/workers/scheduler.py","line_range":"42-90","gmt_create":"2026-04-23T15:20:08.982815+08:00","gmt_modified":"2026-04-23T15:20:08.982815+08:00"},{"id":"e79301a4bc26aa6b49f3f52c3182c3f9","path":"backend/app/workers/citation_engine.py","line_range":"175-234","gmt_create":"2026-04-23T15:20:08.983609+08:00","gmt_modified":"2026-04-23T15:20:08.983609+08:00"},{"id":"1e85186eded8743ff5f231df4aa6df3f","path":"backend/app/workers/platforms/kimi.py","line_range":"21-48","gmt_create":"2026-04-23T15:20:08.98454+08:00","gmt_modified":"2026-04-23T15:20:08.98454+08:00"},{"id":"e2b1718570fb714b2f4342221898ab30","path":"backend/app/workers/platforms/wenxin.py","line_range":"21-48","gmt_create":"2026-04-23T15:20:08.985237+08:00","gmt_modified":"2026-04-23T15:20:08.985237+08:00"},{"id":"e4a49039dae40b7433896c81737fcf8c","path":"backend/app/config.py","line_range":"7-14","gmt_create":"2026-04-23T15:20:08.985763+08:00","gmt_modified":"2026-04-23T15:20:08.985763+08:00"},{"id":"2ee31d68c409e96e951f6cfa7027bca7","path":"backend/app/main.py","line_range":"24-42","gmt_create":"2026-04-23T15:20:08.986265+08:00","gmt_modified":"2026-04-23T15:20:08.986265+08:00"},{"id":"79d6e169e36e6b7493898b5f863e07dc","path":"backend/app/workers/citation_engine.py","line_range":"152-157","gmt_create":"2026-04-23T15:20:08.987693+08:00","gmt_modified":"2026-04-23T15:20:08.987693+08:00"},{"id":"1552315d5fb9f6d7aba5f7e8fa93a975","path":"backend/app/database.py","line_range":"6-10","gmt_create":"2026-04-23T15:20:08.988709+08:00","gmt_modified":"2026-04-23T15:20:08.988709+08:00"},{"id":"599cca7536cae4a7e0ae93043c476a7f","path":"tests/test_queries.py","line_range":"10-154","gmt_create":"2026-04-23T15:20:08.989011+08:00","gmt_modified":"2026-04-23T15:20:08.989011+08:00"},{"id":"2ec3d45edd6221e0cedf7f8887fe090d","path":"tests/test_scheduler.py","line_range":"17-123","gmt_create":"2026-04-23T15:20:08.989312+08:00","gmt_modified":"2026-04-23T15:20:08.989312+08:00"},{"id":"4d323bf0aaf4078f09726dc0890e5955","path":"backend/app/models/subscription.py","line_range":"11-37","gmt_create":"2026-04-23T15:21:46.688165+08:00","gmt_modified":"2026-04-23T15:21:46.688166+08:00"},{"id":"4cef9e740b6feb68c6bd22b660c47320","path":"backend/app/services/query.py","line_range":"1-123","gmt_create":"2026-04-23T15:21:46.688903+08:00","gmt_modified":"2026-04-23T15:21:46.688903+08:00"},{"id":"121203f7f9f539ffb1456c3f5cdfd842","path":"backend/app/services/citation.py","line_range":"1-359","gmt_create":"2026-04-23T15:21:46.689338+08:00","gmt_modified":"2026-04-23T15:21:46.689338+08:00"},{"id":"10d1e37bdc9f353c189b7a2fe79dc85e","path":"backend/app/api/queries.py","line_range":"1-86","gmt_create":"2026-04-23T15:21:46.689691+08:00","gmt_modified":"2026-04-23T15:21:46.689691+08:00"},{"id":"cbd0101fa84d957bcb1baaa623c6b31c","path":"backend/app/api/citations.py","line_range":"1-78","gmt_create":"2026-04-23T15:21:46.690036+08:00","gmt_modified":"2026-04-23T15:21:46.690036+08:00"},{"id":"afe4138895492c26aac5c0120ef46cd8","path":"backend/app/models/__init__.py","line_range":"1-14","gmt_create":"2026-04-23T15:21:46.69035+08:00","gmt_modified":"2026-04-23T15:21:46.69035+08:00"},{"id":"4d11ddf7abb8076d81b30c4315786f9a","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"21-128","gmt_create":"2026-04-23T15:21:46.693035+08:00","gmt_modified":"2026-04-23T15:21:46.693035+08:00"},{"id":"e454b4a54500bd81e7599e6ec97bf12b","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"23-37","gmt_create":"2026-04-23T15:21:46.695671+08:00","gmt_modified":"2026-04-23T15:21:46.695671+08:00"},{"id":"1965adf7cfc65447e3c1ae21fbf6d1c5","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"39-59","gmt_create":"2026-04-23T15:21:46.696432+08:00","gmt_modified":"2026-04-23T15:21:46.696432+08:00"},{"id":"c730faefb34bb87c40c5f636b4ff7f41","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"80-94","gmt_create":"2026-04-23T15:21:46.697413+08:00","gmt_modified":"2026-04-23T15:21:46.697413+08:00"},{"id":"b9978c3eccea3ef566b003216e5047af","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"61-78","gmt_create":"2026-04-23T15:21:46.698274+08:00","gmt_modified":"2026-04-23T15:21:46.698274+08:00"},{"id":"eb6ff4361d7413b57f1f70b1ec2f0c94","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"96-111","gmt_create":"2026-04-23T15:21:46.699021+08:00","gmt_modified":"2026-04-23T15:21:46.699021+08:00"},{"id":"f6c9f1b4e8646c366a31426a4537675d","path":"backend/app/models/query_task.py","line_range":"36-38","gmt_create":"2026-04-23T15:21:46.700462+08:00","gmt_modified":"2026-04-23T15:21:46.700462+08:00"},{"id":"a2adbf02c71e4eb2cf1f120e1a2ff517","path":"backend/app/models/citation_record.py","line_range":"37-41","gmt_create":"2026-04-23T15:21:46.70082+08:00","gmt_modified":"2026-04-23T15:21:46.700821+08:00"},{"id":"0907fc2974ec31c23aaaef02076700a1","path":"backend/app/models/user.py","line_range":"25-33","gmt_create":"2026-04-23T15:21:46.702342+08:00","gmt_modified":"2026-04-23T15:21:46.702342+08:00"},{"id":"842f74e2cc054608242e93fbefd96b45","path":"backend/app/models/query.py","line_range":"32-40","gmt_create":"2026-04-23T15:21:46.702652+08:00","gmt_modified":"2026-04-23T15:21:46.702652+08:00"},{"id":"aed9e839038c45e6ce2023c4e05adb76","path":"backend/app/models/query_task.py","line_range":"27-32","gmt_create":"2026-04-23T15:21:46.702999+08:00","gmt_modified":"2026-04-23T15:21:46.703+08:00"},{"id":"2181318c993526c86458f5eef134aed6","path":"backend/app/services/query.py","line_range":"62-77","gmt_create":"2026-04-23T15:21:46.703419+08:00","gmt_modified":"2026-04-23T15:21:46.703419+08:00"},{"id":"a817488dc968d761a8977fb5bb8d01a2","path":"backend/app/services/query.py","line_range":"45-129","gmt_create":"2026-04-23T15:21:46.703795+08:00","gmt_modified":"2026-04-23T15:21:46.703795+08:00"},{"id":"d20fc729a5d3986b1c077f9e07ece9c4","path":"backend/app/config.py","line_range":"7","gmt_create":"2026-04-23T15:21:46.704958+08:00","gmt_modified":"2026-04-23T15:21:46.704958+08:00"},{"id":"ea655c6d147bc98beb42955d437260cc","path":"backend/app/config.py","line_range":"1-23","gmt_create":"2026-04-23T15:21:46.705746+08:00","gmt_modified":"2026-04-23T15:21:46.705746+08:00"},{"id":"37868a5af96edcdad149caf9a184435a","path":"backend/app/api/queries.py","line_range":"42-85","gmt_create":"2026-04-23T15:21:46.706426+08:00","gmt_modified":"2026-04-23T15:21:46.706426+08:00"},{"id":"601b981b00d93b941843f046a163d5a3","path":"backend/app/schemas/query.py","line_range":"18-33","gmt_create":"2026-04-23T15:21:46.706755+08:00","gmt_modified":"2026-04-23T15:21:46.706755+08:00"},{"id":"290df8332b3d104e5ea8d71dc39315b5","path":"tests/conftest.py","line_range":"1-123","gmt_create":"2026-04-23T15:22:15.985975+08:00","gmt_modified":"2026-04-23T15:22:15.985975+08:00"},{"id":"c2747ca16b879bca0f68955534c3c4fc","path":"backend/app/main.py","line_range":"1-48","gmt_create":"2026-04-23T15:22:15.986592+08:00","gmt_modified":"2026-04-23T15:22:15.986592+08:00"},{"id":"76e6c0abb49fec57cac4892837a143c9","path":"backend/app/api/deps.py","line_range":"1-43","gmt_create":"2026-04-23T15:22:15.987077+08:00","gmt_modified":"2026-04-23T15:22:15.987077+08:00"},{"id":"f66d9907b467b110c638bd527efd95c5","path":"backend/app/api/auth.py","line_range":"1-43","gmt_create":"2026-04-23T15:22:15.987417+08:00","gmt_modified":"2026-04-23T15:22:15.987417+08:00"},{"id":"116584ea9162c1bc05911f39f9ef82b6","path":"backend/app/workers/citation_engine.py","line_range":"1-309","gmt_create":"2026-04-23T15:22:15.988451+08:00","gmt_modified":"2026-04-23T15:22:15.988451+08:00"},{"id":"9630036e63fc15cb81b202cf79671aab","path":"backend/app/workers/scheduler.py","line_range":"1-182","gmt_create":"2026-04-23T15:22:15.988885+08:00","gmt_modified":"2026-04-23T15:22:15.988885+08:00"},{"id":"84fbed7d35f7752e2117a74fcaf5f0e9","path":"backend/app/config.py","line_range":"1-17","gmt_create":"2026-04-23T15:22:15.989594+08:00","gmt_modified":"2026-04-23T15:22:15.989594+08:00"},{"id":"5ddf0c8d7b38e4f6126a5d85da1dfeda","path":"tests/conftest.py","line_range":"19-123","gmt_create":"2026-04-23T15:22:15.990689+08:00","gmt_modified":"2026-04-23T15:22:15.990689+08:00"},{"id":"9df233ef1be4b95068ed91bf01083ae7","path":"tests/conftest.py","line_range":"117-123","gmt_create":"2026-04-23T15:22:15.99106+08:00","gmt_modified":"2026-04-23T15:22:15.99106+08:00"},{"id":"6286d4be455dc058c8be2ee4e0d1175a","path":"backend/app/main.py","line_range":"38-42","gmt_create":"2026-04-23T15:22:15.991399+08:00","gmt_modified":"2026-04-23T15:22:15.991399+08:00"},{"id":"069243fafe60a85cf16a0ca40fa07180","path":"backend/app/api/deps.py","line_range":"16-43","gmt_create":"2026-04-23T15:22:15.991722+08:00","gmt_modified":"2026-04-23T15:22:15.991722+08:00"},{"id":"d5a1fb0bd23ce9240fbf79529ef94a45","path":"backend/app/api/auth.py","line_range":"13-43","gmt_create":"2026-04-23T15:22:15.992045+08:00","gmt_modified":"2026-04-23T15:22:15.992045+08:00"},{"id":"735aef72b4fe6ca4f407e69b7dda8b43","path":"backend/app/api/citations.py","line_range":"25-78","gmt_create":"2026-04-23T15:22:15.992721+08:00","gmt_modified":"2026-04-23T15:22:15.992721+08:00"},{"id":"8128dd67cf376d2cadf7c2d3831c380a","path":"backend/app/database.py","line_range":"23-29","gmt_create":"2026-04-23T15:22:15.993159+08:00","gmt_modified":"2026-04-23T15:22:15.993159+08:00"},{"id":"1721defc3d6206478d3c0692cc821761","path":"tests/test_auth.py","line_range":"25-104","gmt_create":"2026-04-23T15:22:15.9936+08:00","gmt_modified":"2026-04-23T15:22:15.9936+08:00"},{"id":"753a437d837246ead62b0e16c6331284","path":"backend/app/services/auth.py","line_range":"37-69","gmt_create":"2026-04-23T15:22:15.994329+08:00","gmt_modified":"2026-04-23T15:22:15.994329+08:00"},{"id":"d820e2daf2ea133a7aa17cdc475e44a4","path":"tests/test_auth.py","line_range":"1-104","gmt_create":"2026-04-23T15:22:15.99504+08:00","gmt_modified":"2026-04-23T15:22:15.99504+08:00"},{"id":"1a439c5fed6cfd188c646e1614d56371","path":"backend/app/services/auth.py","line_range":"1-69","gmt_create":"2026-04-23T15:22:15.995715+08:00","gmt_modified":"2026-04-23T15:22:15.995715+08:00"},{"id":"5c67e2f70283956b2d29a3c1443eb514","path":"backend/app/workers/citation_engine.py","line_range":"122-146","gmt_create":"2026-04-23T15:22:15.996787+08:00","gmt_modified":"2026-04-23T15:22:15.996787+08:00"},{"id":"a57acd9da5287c915ac823784a409292","path":"tests/test_citation_engine.py","line_range":"1-127","gmt_create":"2026-04-23T15:22:15.99744+08:00","gmt_modified":"2026-04-23T15:22:15.99744+08:00"},{"id":"2a4f741f31f62dce8ad63be2e831f520","path":"tests/test_citations.py","line_range":"23-93","gmt_create":"2026-04-23T15:22:15.998141+08:00","gmt_modified":"2026-04-23T15:22:15.998141+08:00"},{"id":"692ac240965eff7e66945aa3c4c270f7","path":"tests/test_citations.py","line_range":"1-93","gmt_create":"2026-04-23T15:22:15.998797+08:00","gmt_modified":"2026-04-23T15:22:15.998797+08:00"},{"id":"32a0a52faca2d8d488e49c63c86075b1","path":"tests/test_queries.py","line_range":"29-154","gmt_create":"2026-04-23T15:22:15.999443+08:00","gmt_modified":"2026-04-23T15:22:15.999444+08:00"},{"id":"7804331f5f8c1ba5a3b6d9c1ae1c78c1","path":"tests/test_queries.py","line_range":"1-154","gmt_create":"2026-04-23T15:22:16.000539+08:00","gmt_modified":"2026-04-23T15:22:16.000539+08:00"},{"id":"3a6e1b738967bf8cc651e57f48e2e126","path":"tests/test_business_flow.py","line_range":"83-126","gmt_create":"2026-04-23T15:22:16.00171+08:00","gmt_modified":"2026-04-23T15:22:16.00171+08:00"},{"id":"b1afd377757f1d0e9bdf87edfff3ad88","path":"tests/test_business_flow.py","line_range":"131-186","gmt_create":"2026-04-23T15:22:16.002219+08:00","gmt_modified":"2026-04-23T15:22:16.002219+08:00"},{"id":"de05ec7eed033e432991e5a88e1b5a06","path":"tests/test_business_flow.py","line_range":"192-222","gmt_create":"2026-04-23T15:22:16.002653+08:00","gmt_modified":"2026-04-23T15:22:16.002653+08:00"},{"id":"7fd61a451248b6b129299d6246f711c7","path":"tests/test_business_flow.py","line_range":"228-296","gmt_create":"2026-04-23T15:22:16.003121+08:00","gmt_modified":"2026-04-23T15:22:16.003121+08:00"},{"id":"53eedffff456a566fa7b0cecc7169f56","path":"tests/test_business_flow.py","line_range":"1-441","gmt_create":"2026-04-23T15:22:16.003614+08:00","gmt_modified":"2026-04-23T15:22:16.003615+08:00"},{"id":"906f7a8288e38d4244211f3f538fe7b6","path":"backend/app/workers/scheduler.py","line_range":"27-182","gmt_create":"2026-04-23T15:22:16.004044+08:00","gmt_modified":"2026-04-23T15:22:16.004044+08:00"},{"id":"1647ee2066de2ae59ba8cf88e33c5e02","path":"tests/test_scheduler.py","line_range":"1-123","gmt_create":"2026-04-23T15:22:16.004461+08:00","gmt_modified":"2026-04-23T15:22:16.004461+08:00"},{"id":"fd18328b6582e68c30b130b912891992","path":"frontend/components/providers.tsx","line_range":"1-9","gmt_create":"2026-04-23T15:22:23.501815+08:00","gmt_modified":"2026-04-23T15:22:23.501815+08:00"},{"id":"71a37a516437e94fd82a87efc70a3f16","path":"frontend/package.json","line_range":"1-40","gmt_create":"2026-04-23T15:22:23.503888+08:00","gmt_modified":"2026-04-23T15:22:23.503888+08:00"},{"id":"89d70e5f89be23a229e3ee59982b8e6e","path":"frontend/tailwind.config.ts","line_range":"1-57","gmt_create":"2026-04-23T15:22:23.504853+08:00","gmt_modified":"2026-04-23T15:22:23.504853+08:00"},{"id":"95be577a89fbeb02578e4c3718c6ec86","path":"frontend/components/ui/button.tsx","line_range":"1-57","gmt_create":"2026-04-23T15:22:23.505579+08:00","gmt_modified":"2026-04-23T15:22:23.505579+08:00"},{"id":"607bb628918a7a5d54cbf74763f94d07","path":"frontend/components/ui/input.tsx","line_range":"1-23","gmt_create":"2026-04-23T15:22:23.506257+08:00","gmt_modified":"2026-04-23T15:22:23.506257+08:00"},{"id":"325e25d1dda0f7bfd9d7adfe35ecf3b5","path":"frontend/components/ui/select.tsx","line_range":"1-161","gmt_create":"2026-04-23T15:22:23.507044+08:00","gmt_modified":"2026-04-23T15:22:23.507044+08:00"},{"id":"ad6ff021b2126ad5c42323305eb6d8b0","path":"frontend/components/ui/dropdown-menu.tsx","line_range":"1-201","gmt_create":"2026-04-23T15:22:23.507926+08:00","gmt_modified":"2026-04-23T15:22:23.507926+08:00"},{"id":"a85f004dca63614b4e734ba63b45ef9e","path":"frontend/components/ui/card.tsx","line_range":"1-80","gmt_create":"2026-04-23T15:22:23.508411+08:00","gmt_modified":"2026-04-23T15:22:23.508411+08:00"},{"id":"bd3042a8d9b602334720b0d7b4e8ab3d","path":"frontend/components/ui/tabs.tsx","line_range":"1-56","gmt_create":"2026-04-23T15:22:23.509355+08:00","gmt_modified":"2026-04-23T15:22:23.509355+08:00"},{"id":"379443f450513b5492e2d9d5fca94a42","path":"frontend/components/ui/label.tsx","line_range":"1-27","gmt_create":"2026-04-23T15:22:23.509832+08:00","gmt_modified":"2026-04-23T15:22:23.509832+08:00"},{"id":"4aa6ad434a73143bb7a2072124f63be0","path":"frontend/components/ui/badge.tsx","line_range":"1-37","gmt_create":"2026-04-23T15:22:23.510286+08:00","gmt_modified":"2026-04-23T15:22:23.510286+08:00"},{"id":"c45dbdda70a8b9f02b52af4991644d0b","path":"frontend/package.json","line_range":"11-27","gmt_create":"2026-04-23T15:22:23.511056+08:00","gmt_modified":"2026-04-23T15:22:23.511056+08:00"},{"id":"6ac6943c93570294e4fb15a862be2616","path":"frontend/components/ui/button.tsx","line_range":"36-54","gmt_create":"2026-04-23T15:22:23.51229+08:00","gmt_modified":"2026-04-23T15:22:23.51229+08:00"},{"id":"4bfb5059c685e9878aed64cb5347ccec","path":"frontend/components/ui/dialog.tsx","line_range":"9-54","gmt_create":"2026-04-23T15:22:23.513266+08:00","gmt_modified":"2026-04-23T15:22:23.513266+08:00"},{"id":"0af48b69fe8fb9e480fa1656f36a4330","path":"frontend/components/ui/dropdown-menu.tsx","line_range":"21-75","gmt_create":"2026-04-23T15:22:23.514127+08:00","gmt_modified":"2026-04-23T15:22:23.514127+08:00"},{"id":"09971e31ab658e119d4c0ad948282107","path":"frontend/components/ui/select.tsx","line_range":"15-100","gmt_create":"2026-04-23T15:22:23.514956+08:00","gmt_modified":"2026-04-23T15:22:23.514956+08:00"},{"id":"31aa8777de6043883950d2668094e388","path":"frontend/components/ui/table.tsx","line_range":"5-106","gmt_create":"2026-04-23T15:22:23.515769+08:00","gmt_modified":"2026-04-23T15:22:23.515769+08:00"},{"id":"28baf3cedb89a21c6d542b7ce2439b24","path":"frontend/components/ui/tabs.tsx","line_range":"8-53","gmt_create":"2026-04-23T15:22:23.516573+08:00","gmt_modified":"2026-04-23T15:22:23.516573+08:00"},{"id":"28b0f4797c6084272244175a24b961cb","path":"frontend/components/ui/card.tsx","line_range":"5-77","gmt_create":"2026-04-23T15:22:23.518527+08:00","gmt_modified":"2026-04-23T15:22:23.518527+08:00"},{"id":"a6e0b3fa65906c3c3cd88707e1d40059","path":"frontend/components/ui/label.tsx","line_range":"9-23","gmt_create":"2026-04-23T15:22:23.520181+08:00","gmt_modified":"2026-04-23T15:22:23.520181+08:00"},{"id":"9a909775022010b4686c2b00cdf1c165","path":"frontend/components/ui/badge.tsx","line_range":"6-34","gmt_create":"2026-04-23T15:22:23.521343+08:00","gmt_modified":"2026-04-23T15:22:23.521343+08:00"},{"id":"ce1cd184945ae56cf63f55168afd8050","path":"frontend/components/ui/dialog.tsx","line_range":"47-50","gmt_create":"2026-04-23T15:22:23.523823+08:00","gmt_modified":"2026-04-23T15:22:23.523823+08:00"},{"id":"4a2a06e1efcbc85deaa013dca155f20c","path":"frontend/tailwind.config.ts","line_range":"10-54","gmt_create":"2026-04-23T15:22:23.524333+08:00","gmt_modified":"2026-04-23T15:22:23.524333+08:00"},{"id":"8b00ea4aba57ea6ed982287fb7840805","path":"frontend/lib/utils.ts","line_range":"4-6","gmt_create":"2026-04-23T15:22:23.524876+08:00","gmt_modified":"2026-04-23T15:22:23.524876+08:00"},{"id":"7c0831c17e8c65eaed9511e17ed2a2ef","path":"backend/app/services/citation.py","line_range":"1-269","gmt_create":"2026-04-23T20:31:36.482111+08:00","gmt_modified":"2026-04-23T20:31:36.482111+08:00"},{"id":"71f98c8993fb42b108e34a554247869b","path":"backend/app/workers/scheduler.py","line_range":"1-95","gmt_create":"2026-04-23T20:31:36.482732+08:00","gmt_modified":"2026-04-23T20:31:36.482732+08:00"},{"id":"8d5aac2ae0671f05d7c0807ba9296cdf","path":"backend/app/workers/citation_engine.py","line_range":"1-330","gmt_create":"2026-04-23T20:31:36.4831+08:00","gmt_modified":"2026-04-23T20:31:36.4831+08:00"},{"id":"debd789847d1eed2d54198772edf68a2","path":"backend/app/workers/platforms/tongyi.py","line_range":"1-38","gmt_create":"2026-04-23T20:31:36.483423+08:00","gmt_modified":"2026-04-23T20:31:36.483423+08:00"},{"id":"3bde521d18cc7221ae2f14637e163aac","path":"backend/app/workers/platforms/doubao.py","line_range":"1-38","gmt_create":"2026-04-23T20:31:36.483821+08:00","gmt_modified":"2026-04-23T20:31:36.483821+08:00"},{"id":"c26862d9e0fc878b51a2668cfd2ec827","path":"backend/app/workers/platforms/qingyan.py","line_range":"1-38","gmt_create":"2026-04-23T20:31:36.484113+08:00","gmt_modified":"2026-04-23T20:31:36.484114+08:00"},{"id":"0fcc9c2e0d33b887c5f18a3807b64a1e","path":"backend/app/workers/platforms/tiangong.py","line_range":"1-38","gmt_create":"2026-04-23T20:31:36.484512+08:00","gmt_modified":"2026-04-23T20:31:36.484512+08:00"},{"id":"a4baa2444208b3f9a3f42bc492038207","path":"backend/app/workers/platforms/xinghuo.py","line_range":"1-38","gmt_create":"2026-04-23T20:31:36.485041+08:00","gmt_modified":"2026-04-23T20:31:36.485041+08:00"},{"id":"9f82f6d82bf914a608d6afa3d9854abf","path":"backend/app/workers/platforms/search_engine.py","line_range":"1-174","gmt_create":"2026-04-23T20:31:36.485492+08:00","gmt_modified":"2026-04-23T20:31:36.485492+08:00"},{"id":"6281fff17a86ec1895c64d87c2ae7fb1","path":"backend/app/models/query.py","line_range":"1-55","gmt_create":"2026-04-23T20:31:36.486251+08:00","gmt_modified":"2026-04-23T20:31:36.486251+08:00"},{"id":"943c18db69a04b3137fba4cebcfea87e","path":"backend/app/models/citation_record.py","line_range":"1-42","gmt_create":"2026-04-23T20:31:36.48687+08:00","gmt_modified":"2026-04-23T20:31:36.48687+08:00"},{"id":"6628e006b8e5ca16160743528b6b0506","path":"backend/app/models/query_task.py","line_range":"1-39","gmt_create":"2026-04-23T20:31:36.487305+08:00","gmt_modified":"2026-04-23T20:31:36.487305+08:00"},{"id":"72a110dca58d8152758e2fdab4e94761","path":"backend/app/workers/platforms/base.py","line_range":"1-18","gmt_create":"2026-04-23T20:31:36.490327+08:00","gmt_modified":"2026-04-23T20:31:36.490328+08:00"},{"id":"300e43c7a648440163f81039eaa47b5a","path":"frontend/lib/platforms.ts","line_range":"1-24","gmt_create":"2026-04-23T20:31:36.494718+08:00","gmt_modified":"2026-04-23T20:31:36.494718+08:00"},{"id":"caf1970ded8fc5d3921005e166e2100b","path":"backend/app/api/citations.py","line_range":"59-78","gmt_create":"2026-04-23T20:31:36.499676+08:00","gmt_modified":"2026-04-23T20:31:36.499677+08:00"},{"id":"4ded871d02b8119cdd985de8b220b084","path":"backend/app/services/citation.py","line_range":"204-234","gmt_create":"2026-04-23T20:31:36.500626+08:00","gmt_modified":"2026-04-23T20:31:36.500626+08:00"},{"id":"448970b02d89d5e1576f70bdb0063363","path":"backend/app/workers/scheduler.py","line_range":"51-84","gmt_create":"2026-04-23T20:31:36.501136+08:00","gmt_modified":"2026-04-23T20:31:36.501136+08:00"},{"id":"362d22f423631cda39404660b3317a2f","path":"backend/app/workers/citation_engine.py","line_range":"177-254","gmt_create":"2026-04-23T20:31:36.501596+08:00","gmt_modified":"2026-04-23T20:31:36.501596+08:00"},{"id":"b475ff5225ac403c7fcf3dd7e14cbac6","path":"backend/app/workers/platforms/tongyi.py","line_range":"16-33","gmt_create":"2026-04-23T20:31:36.502032+08:00","gmt_modified":"2026-04-23T20:31:36.502032+08:00"},{"id":"557ae34b57a5dd8e8fa3bb2a6ce178a7","path":"backend/app/workers/platforms/search_engine.py","line_range":"163-174","gmt_create":"2026-04-23T20:31:36.502504+08:00","gmt_modified":"2026-04-23T20:31:36.502504+08:00"},{"id":"75c6ab0599d304bf36d290d4143d3d2f","path":"backend/app/models/query.py","line_range":"29-31","gmt_create":"2026-04-23T20:31:36.502934+08:00","gmt_modified":"2026-04-23T20:31:36.502934+08:00"},{"id":"2a6780838f1415dcb7d0fa611f64cee7","path":"backend/app/workers/platforms/base.py","line_range":"4-17","gmt_create":"2026-04-23T20:31:36.504228+08:00","gmt_modified":"2026-04-23T20:31:36.504228+08:00"},{"id":"c5ae7697193b2b93425ff25d2d7d54a9","path":"backend/app/workers/platforms/tongyi.py","line_range":"10-38","gmt_create":"2026-04-23T20:31:36.505069+08:00","gmt_modified":"2026-04-23T20:31:36.505069+08:00"},{"id":"aa8c3fa3bc509dafe64d113bdd09eafa","path":"backend/app/workers/platforms/doubao.py","line_range":"10-38","gmt_create":"2026-04-23T20:31:36.505502+08:00","gmt_modified":"2026-04-23T20:31:36.505503+08:00"},{"id":"eabb031e538ea62cab69b01368740d20","path":"backend/app/workers/platforms/qingyan.py","line_range":"10-38","gmt_create":"2026-04-23T20:31:36.505932+08:00","gmt_modified":"2026-04-23T20:31:36.505932+08:00"},{"id":"b1c09e372a63e9854886adaea1663bea","path":"backend/app/workers/platforms/tiangong.py","line_range":"10-38","gmt_create":"2026-04-23T20:31:36.50633+08:00","gmt_modified":"2026-04-23T20:31:36.50633+08:00"},{"id":"79793bcd507f9d287d19014b60d963d3","path":"backend/app/workers/platforms/xinghuo.py","line_range":"10-38","gmt_create":"2026-04-23T20:31:36.506717+08:00","gmt_modified":"2026-04-23T20:31:36.506717+08:00"},{"id":"102223dd13475177a1ade8b9be14fbd1","path":"backend/app/workers/platforms/search_engine.py","line_range":"79-144","gmt_create":"2026-04-23T20:31:36.509667+08:00","gmt_modified":"2026-04-23T20:31:36.509667+08:00"},{"id":"8565f299083b4dcba5a328c947f06fee","path":"backend/app/workers/citation_engine.py","line_range":"256-287","gmt_create":"2026-04-23T20:31:36.512515+08:00","gmt_modified":"2026-04-23T20:31:36.512515+08:00"},{"id":"8af91caf063c12c8236f9675769ce4a1","path":"tests/test_citation_engine.py","line_range":"1-54","gmt_create":"2026-04-23T20:31:36.51401+08:00","gmt_modified":"2026-04-23T20:31:36.51401+08:00"},{"id":"005172b71dc742cf6803c5eb0185091e","path":"backend/requirements.txt","line_range":"1-36","gmt_create":"2026-04-23T20:31:36.516249+08:00","gmt_modified":"2026-04-23T20:31:36.516249+08:00"},{"id":"b55cc5936c299f819b57b899858438e6","path":"backend/app/workers/platforms/search_engine.py","line_range":"139-144","gmt_create":"2026-04-23T20:31:36.518228+08:00","gmt_modified":"2026-04-23T20:31:36.518228+08:00"},{"id":"384b1939e53970ce7ae75d241a49da5f","path":"backend/app/workers/platforms/tongyi.py","line_range":"22-29","gmt_create":"2026-04-23T20:31:36.518493+08:00","gmt_modified":"2026-04-23T20:31:36.518493+08:00"},{"id":"f096aa3ea82e9fa625a9acb1309b4c50","path":"backend/app/workers/citation_engine.py","line_range":"231-247","gmt_create":"2026-04-23T20:31:36.518795+08:00","gmt_modified":"2026-04-23T20:31:36.518795+08:00"},{"id":"15b8ebf74b0a5dfac58024d323ca8d0a","path":"backend/app/workers/citation_engine.py","line_range":"164-175","gmt_create":"2026-04-23T20:31:36.519395+08:00","gmt_modified":"2026-04-23T20:31:36.519395+08:00"},{"id":"bcfade20d923c8efa713808ca9af94ca","path":"backend/app/workers/platforms/wenxin.py","line_range":"10-38","gmt_create":"2026-04-23T20:31:50.45294+08:00","gmt_modified":"2026-04-23T20:31:50.45294+08:00"},{"id":"ca7e1232fbba5fb75e04ab8e491bfbd1","path":"backend/app/workers/platforms/kimi.py","line_range":"10-38","gmt_create":"2026-04-23T20:31:50.453339+08:00","gmt_modified":"2026-04-23T20:31:50.453339+08:00"},{"id":"9720b93ed7247efb685e2825e5f964bf","path":"backend/app/workers/citation_engine.py","line_range":"161-176","gmt_create":"2026-04-23T20:31:50.454207+08:00","gmt_modified":"2026-04-23T20:31:50.454207+08:00"},{"id":"0d226400124ba891a46f59c36781ccd8","path":"backend/app/config.py","line_range":"9-23","gmt_create":"2026-04-23T20:31:50.454503+08:00","gmt_modified":"2026-04-23T20:31:50.454503+08:00"},{"id":"412695e5de2014514a8f62f98c573656","path":"backend/Dockerfile","line_range":"1-41","gmt_create":"2026-04-23T20:31:50.454798+08:00","gmt_modified":"2026-04-23T20:31:50.454798+08:00"},{"id":"485e15eb30a5b08da38a628c9dd5053e","path":"backend/app/workers/platforms/search_engine.py","line_range":"16-77","gmt_create":"2026-04-23T20:31:50.459138+08:00","gmt_modified":"2026-04-23T20:31:50.459138+08:00"},{"id":"77158a6f887e224a03552893bfec7c92","path":"backend/app/workers/platforms/wenxin.py","line_range":"16-33","gmt_create":"2026-04-23T20:31:50.461662+08:00","gmt_modified":"2026-04-23T20:31:50.461662+08:00"},{"id":"5c3f336b5a7b4af4cc2f2ac183539218","path":"backend/app/workers/platforms/search_engine.py","line_range":"79-145","gmt_create":"2026-04-23T20:31:50.464823+08:00","gmt_modified":"2026-04-23T20:31:50.464823+08:00"},{"id":"3894c1ed9dca2ebf2359f40ebdb1959e","path":"backend/app/workers/platforms/search_engine.py","line_range":"147-174","gmt_create":"2026-04-23T20:31:50.465221+08:00","gmt_modified":"2026-04-23T20:31:50.465221+08:00"},{"id":"e27bcba24aaadeec1922d2b4e5b8386b","path":"backend/app/api/queries.py","line_range":"1-109","gmt_create":"2026-04-23T20:31:50.46721+08:00","gmt_modified":"2026-04-23T20:31:50.46721+08:00"},{"id":"5f893f5078aa8e549284feb057aa45da","path":"backend/app/workers/platforms/wenxin.py","line_range":"16-29","gmt_create":"2026-04-23T20:31:50.469467+08:00","gmt_modified":"2026-04-23T20:31:50.469467+08:00"},{"id":"e0b68d2d24760689a0f4f00dfee5f9f2","path":"backend/app/workers/platforms/search_engine.py","line_range":"28-76","gmt_create":"2026-04-23T20:31:50.470319+08:00","gmt_modified":"2026-04-23T20:31:50.470319+08:00"},{"id":"e9b98ae83632342d8e06cde39e9c9462","path":"backend/app/workers/platforms/search_engine.py","line_range":"105-137","gmt_create":"2026-04-23T20:31:50.470672+08:00","gmt_modified":"2026-04-23T20:31:50.470672+08:00"},{"id":"c86edb7a95fbe4b431ac65a0e2b8636e","path":"backend/app/api/queries.py","line_range":"90-109","gmt_create":"2026-04-23T20:31:50.471824+08:00","gmt_modified":"2026-04-23T20:31:50.471825+08:00"},{"id":"6e054d9a78c0c8c9da8dec4c4bda62ab","path":"backend/app/database.py","line_range":"6-28","gmt_create":"2026-04-23T20:33:29.972803+08:00","gmt_modified":"2026-04-23T20:33:29.972803+08:00"},{"id":"9c16a069e5154660bfdfa48f3518fc6a","path":"backend/app/models/query_task.py","line_range":"11-38","gmt_create":"2026-04-23T20:33:29.980385+08:00","gmt_modified":"2026-04-23T20:33:29.980385+08:00"},{"id":"a4918fcbd21492ad996d7f5496f03a4b","path":"backend/app/workers/platforms/kimi.py","line_range":"33-48","gmt_create":"2026-04-23T20:33:29.982795+08:00","gmt_modified":"2026-04-23T20:33:29.982795+08:00"},{"id":"bc38d046b4b1410ae2165cee2272839e","path":"backend/app/workers/platforms/wenxin.py","line_range":"33-48","gmt_create":"2026-04-23T20:33:29.983597+08:00","gmt_modified":"2026-04-23T20:33:29.983597+08:00"},{"id":"72f6d334026866e8a61d2ffb1d83370a","path":"backend/app/workers/citation_engine.py","line_range":"19-100","gmt_create":"2026-04-23T20:33:29.986927+08:00","gmt_modified":"2026-04-23T20:33:29.986928+08:00"},{"id":"1d84b9a7eb013882953a2d1d948299e4","path":"backend/app/workers/platforms/kimi.py","line_range":"126-197","gmt_create":"2026-04-23T20:33:29.990308+08:00","gmt_modified":"2026-04-23T20:33:29.990308+08:00"},{"id":"ba687f2c64aff92b3906658359ed953a","path":"backend/app/workers/platforms/wenxin.py","line_range":"124-195","gmt_create":"2026-04-23T20:33:29.991213+08:00","gmt_modified":"2026-04-23T20:33:29.991213+08:00"},{"id":"52ee729b02c992c689522c7956c14128","path":"backend/app/workers/scheduler.py","line_range":"57-62","gmt_create":"2026-04-23T20:33:29.992799+08:00","gmt_modified":"2026-04-23T20:33:29.992799+08:00"},{"id":"c9e32b7324cce60c8887deb8404ee759","path":"backend/app/workers/scheduler.py","line_range":"107-112","gmt_create":"2026-04-23T20:33:29.99333+08:00","gmt_modified":"2026-04-23T20:33:29.99333+08:00"},{"id":"8355d3821337334caee57a75dc8c8865","path":"backend/app/services/query.py","line_range":"116-130","gmt_create":"2026-04-23T20:33:29.994505+08:00","gmt_modified":"2026-04-23T20:33:29.994505+08:00"},{"id":"4fe27d4d1323b500e72d870aa6212a1a","path":"backend/app/workers/scheduler.py","line_range":"13-20","gmt_create":"2026-04-23T20:33:29.996199+08:00","gmt_modified":"2026-04-23T20:33:29.996199+08:00"},{"id":"3729543092bccad8926c5ea852db1e69","path":"backend/app/workers/citation_engine.py","line_range":"148-157","gmt_create":"2026-04-23T20:33:29.996517+08:00","gmt_modified":"2026-04-23T20:33:29.996517+08:00"},{"id":"1ee5153c867fc6e9d277a3067963a1fc","path":"backend/app/workers/scheduler.py","line_range":"32-38","gmt_create":"2026-04-23T20:33:29.997154+08:00","gmt_modified":"2026-04-23T20:33:29.997154+08:00"},{"id":"ed527c7a549ec333c2b30b59614343df","path":"backend/app/models/query.py","line_range":"50-54","gmt_create":"2026-04-23T20:33:29.997453+08:00","gmt_modified":"2026-04-23T20:33:29.997453+08:00"},{"id":"1a3351698ecc7cd4e508b7a792804fc4","path":"backend/app/workers/citation_engine.py","line_range":"302-309","gmt_create":"2026-04-23T20:33:29.999284+08:00","gmt_modified":"2026-04-23T20:33:29.999284+08:00"},{"id":"e3e9710c7eead933c936519395f792e0","path":"backend/app/workers/scheduler.py","line_range":"44-49","gmt_create":"2026-04-23T20:33:30.00043+08:00","gmt_modified":"2026-04-23T20:33:30.000431+08:00"},{"id":"a4143cc29b14f1f5bc75a5e021690666","path":"backend/app/workers/platforms/kimi.py","line_range":"23-31","gmt_create":"2026-04-23T20:33:30.001466+08:00","gmt_modified":"2026-04-23T20:33:30.001466+08:00"},{"id":"7192cfda5508e7587efd91d26cf1f018","path":"backend/app/workers/platforms/wenxin.py","line_range":"23-31","gmt_create":"2026-04-23T20:33:30.002099+08:00","gmt_modified":"2026-04-23T20:33:30.002099+08:00"},{"id":"38142b7d7016c5590e638fafcdcb1a19","path":"backend/app/workers/citation_engine.py","line_range":"211-227","gmt_create":"2026-04-23T20:33:30.002775+08:00","gmt_modified":"2026-04-23T20:33:30.002775+08:00"},{"id":"fb5276346dcc4e7044d8765a8572e7a8","path":"backend/app/config.py","line_range":"4-16","gmt_create":"2026-04-23T20:33:30.003374+08:00","gmt_modified":"2026-04-23T20:33:30.003377+08:00"},{"id":"482d573f97b482b99bcde1c399eceb73","path":"backend/app/api/queries.py","line_range":"90-108","gmt_create":"2026-04-23T20:33:37.21132+08:00","gmt_modified":"2026-04-23T20:33:37.21132+08:00"},{"id":"56f44cc97867cee3e5663424134d6072","path":"backend/app/workers/platforms/kimi.py","line_range":"1-37","gmt_create":"2026-04-23T20:33:37.212923+08:00","gmt_modified":"2026-04-23T20:33:37.212923+08:00"},{"id":"2e326ef8322619f1e8b3873022cb0437","path":"backend/app/workers/platforms/wenxin.py","line_range":"1-37","gmt_create":"2026-04-23T20:33:37.213348+08:00","gmt_modified":"2026-04-23T20:33:37.213348+08:00"},{"id":"4cac57dbc530f0335c913ec5725dfa4f","path":"backend/app/workers/scheduler.py","line_range":"1-121","gmt_create":"2026-04-23T20:33:37.215373+08:00","gmt_modified":"2026-04-23T20:33:37.215373+08:00"},{"id":"db174cfe219fc84d0dd26529f047b1d0","path":"backend/app/workers/citation_engine.py","line_range":"161-330","gmt_create":"2026-04-23T20:33:37.22028+08:00","gmt_modified":"2026-04-23T20:33:37.22028+08:00"},{"id":"f36452f78aabfb0c46da03bbe25dff06","path":"backend/app/services/citation.py","line_range":"219-295","gmt_create":"2026-04-23T20:33:37.223165+08:00","gmt_modified":"2026-04-23T20:33:37.223165+08:00"},{"id":"52c01d7b9c17aa16944cbfcf8885be61","path":"backend/app/workers/platforms/kimi.py","line_range":"16-33","gmt_create":"2026-04-23T20:33:37.227954+08:00","gmt_modified":"2026-04-23T20:33:37.227954+08:00"},{"id":"9d352899554ab41b65b2e9f32558d811","path":"backend/app/workers/citation_engine.py","line_range":"39-113","gmt_create":"2026-04-23T20:33:37.229053+08:00","gmt_modified":"2026-04-23T20:33:37.229053+08:00"},{"id":"b1ee5a992230844ba898765be63f7b27","path":"backend/app/workers/citation_engine.py","line_range":"32-133","gmt_create":"2026-04-23T20:33:37.229555+08:00","gmt_modified":"2026-04-23T20:33:37.229555+08:00"},{"id":"cb098a3cd32339e99f755dfd0fc35b5c","path":"tests/test_citation_engine.py","line_range":"6-127","gmt_create":"2026-04-23T20:33:37.230048+08:00","gmt_modified":"2026-04-23T20:33:37.230049+08:00"},{"id":"3d2dab79f7a3fedf24f0212cc9ef7aa1","path":"backend/app/workers/citation_engine.py","line_range":"145-158","gmt_create":"2026-04-23T20:33:37.230491+08:00","gmt_modified":"2026-04-23T20:33:37.230491+08:00"},{"id":"4e9b3d0e94282f4bc6fa500f4eed61a1","path":"backend/app/workers/citation_engine.py","line_range":"135-159","gmt_create":"2026-04-23T20:33:37.231003+08:00","gmt_modified":"2026-04-23T20:33:37.231003+08:00"},{"id":"8e3201561a9dd9a06ee3bf68ffdb3f99","path":"tests/test_citation_engine.py","line_range":"39-109","gmt_create":"2026-04-23T20:33:37.231501+08:00","gmt_modified":"2026-04-23T20:33:37.231501+08:00"},{"id":"c3a417be3d61f5bcd3fbf976e0c4f15a","path":"backend/app/workers/scheduler.py","line_range":"33-121","gmt_create":"2026-04-23T20:33:37.238099+08:00","gmt_modified":"2026-04-23T20:33:37.238099+08:00"},{"id":"7ce954ed7d3bc4dcf78630124cc0dd88","path":"backend/app/services/citation.py","line_range":"264-295","gmt_create":"2026-04-23T20:33:37.244499+08:00","gmt_modified":"2026-04-23T20:33:37.244499+08:00"},{"id":"7289a3568c137c8a671fc8c963bb8d28","path":"backend/requirements.txt","line_range":"1-35","gmt_create":"2026-04-23T20:33:37.24795+08:00","gmt_modified":"2026-04-23T20:33:37.24795+08:00"},{"id":"ef82ce4377c549013c200e19701a6805","path":"backend/app/workers/platforms/kimi.py","line_range":"21-32","gmt_create":"2026-04-23T20:33:37.254004+08:00","gmt_modified":"2026-04-23T20:33:37.254004+08:00"},{"id":"c7986eb1be0ffdd9ec4e243be4270119","path":"backend/app/workers/platforms/wenxin.py","line_range":"21-32","gmt_create":"2026-04-23T20:33:37.254558+08:00","gmt_modified":"2026-04-23T20:33:37.254558+08:00"},{"id":"5563b3bd56550648dc70302c1762ce5a","path":"backend/app/workers/platforms/tongyi.py","line_range":"18-29","gmt_create":"2026-04-23T20:33:37.255643+08:00","gmt_modified":"2026-04-23T20:33:37.255643+08:00"},{"id":"91852ef8dcc844a2f85e9fce0227ab74","path":"backend/app/workers/platforms/doubao.py","line_range":"18-29","gmt_create":"2026-04-23T20:33:37.25603+08:00","gmt_modified":"2026-04-23T20:33:37.25603+08:00"},{"id":"1b46fab9e22f53db30ead5677d03e3e2","path":"backend/app/workers/citation_engine.py","line_range":"11-16","gmt_create":"2026-04-23T20:33:37.256413+08:00","gmt_modified":"2026-04-23T20:33:37.256413+08:00"},{"id":"4a2fa09aa3a948dec5ef8ba873b0e716","path":"backend/app/services/citation.py","line_range":"14-42","gmt_create":"2026-04-23T20:33:37.257057+08:00","gmt_modified":"2026-04-23T20:33:37.257057+08:00"},{"id":"e7afbab5932c93c3469f1a225e6c7156","path":"backend/app/api/citations.py","line_range":"1-55","gmt_create":"2026-04-23T20:33:57.479092+08:00","gmt_modified":"2026-04-23T20:33:57.479092+08:00"},{"id":"a0eac56d622a2fff529bc2b796064bcd","path":"backend/app/schemas/query.py","line_range":"1-94","gmt_create":"2026-04-23T20:33:57.479659+08:00","gmt_modified":"2026-04-23T20:33:57.479659+08:00"},{"id":"174be58163b6f72b4cd4a493f3463ce4","path":"backend/app/schemas/citation.py","line_range":"1-52","gmt_create":"2026-04-23T20:33:57.480222+08:00","gmt_modified":"2026-04-23T20:33:57.480222+08:00"},{"id":"136f172c732d0cc130532a4f0df475a4","path":"backend/app/models/user.py","line_range":"1-41","gmt_create":"2026-04-23T20:33:57.481714+08:00","gmt_modified":"2026-04-23T20:33:57.481714+08:00"},{"id":"916551131bd9ac8c9f9c8bb762af1fa4","path":"backend/app/services/query.py","line_range":"1-130","gmt_create":"2026-04-23T20:33:57.482172+08:00","gmt_modified":"2026-04-23T20:33:57.482172+08:00"},{"id":"5d2836286eb7d4eb6039b004a9744d26","path":"backend/app/services/citation.py","line_range":"1-429","gmt_create":"2026-04-23T20:33:57.482643+08:00","gmt_modified":"2026-04-23T20:33:57.482643+08:00"},{"id":"39a3b2d9301fa4eff7bef0fda3352790","path":"backend/app/workers/platforms/kimi.py","line_range":"1-206","gmt_create":"2026-04-23T20:33:57.484464+08:00","gmt_modified":"2026-04-23T20:33:57.484464+08:00"},{"id":"fbcfae3b1238b3da5329ebafe4294861","path":"backend/app/workers/platforms/wenxin.py","line_range":"1-205","gmt_create":"2026-04-23T20:33:57.484977+08:00","gmt_modified":"2026-04-23T20:33:57.484977+08:00"},{"id":"c4273407c88f470df7daf6a8ad5ce969","path":"backend/app/api/queries.py","line_range":"15-109","gmt_create":"2026-04-23T20:33:57.485748+08:00","gmt_modified":"2026-04-23T20:33:57.485748+08:00"},{"id":"35774e0a09ac5459c868914d7182ca95","path":"backend/app/api/citations.py","line_range":"19-55","gmt_create":"2026-04-23T20:33:57.486195+08:00","gmt_modified":"2026-04-23T20:33:57.486195+08:00"},{"id":"f639b566c26dfd18b24e3dfd2e9853ac","path":"backend/app/schemas/citation.py","line_range":"7-52","gmt_create":"2026-04-23T20:33:57.486916+08:00","gmt_modified":"2026-04-23T20:33:57.486916+08:00"},{"id":"b46654006178160f12897e2c5baac8fa","path":"backend/app/services/citation.py","line_range":"219-429","gmt_create":"2026-04-23T20:33:57.488934+08:00","gmt_modified":"2026-04-23T20:33:57.488934+08:00"},{"id":"82265d393c20d0af96beec6b9c657c27","path":"backend/app/api/queries.py","line_range":"28-41","gmt_create":"2026-04-23T20:33:57.49175+08:00","gmt_modified":"2026-04-23T20:33:57.49175+08:00"},{"id":"93e5c95b1691bb81a36bf9a0ac889030","path":"backend/app/services/citation.py","line_range":"219-261","gmt_create":"2026-04-23T20:33:57.493276+08:00","gmt_modified":"2026-04-23T20:33:57.493276+08:00"},{"id":"374200f0bf946f0399351756977d0495","path":"backend/app/workers/citation_engine.py","line_range":"176-234","gmt_create":"2026-04-23T20:33:57.498134+08:00","gmt_modified":"2026-04-23T20:33:57.498134+08:00"},{"id":"9a8d9100a6bc34ebae9ee065def7e88a","path":"backend/app/schemas/query.py","line_range":"44-72","gmt_create":"2026-04-23T20:33:57.500036+08:00","gmt_modified":"2026-04-23T20:33:57.500036+08:00"},{"id":"93c23bcc3456826af17e26a6d4c32116","path":"backend/app/schemas/query.py","line_range":"6-9","gmt_create":"2026-04-23T20:33:57.500633+08:00","gmt_modified":"2026-04-23T20:33:57.500633+08:00"},{"id":"c17eeb8726297096cd5542283f11494f","path":"backend/app/api/queries.py","line_range":"17-109","gmt_create":"2026-04-23T20:33:57.5019+08:00","gmt_modified":"2026-04-23T20:33:57.5019+08:00"},{"id":"08fec4718be6991260c00ca532f9173a","path":"backend/app/api/citations.py","line_range":"22-55","gmt_create":"2026-04-23T20:33:57.502347+08:00","gmt_modified":"2026-04-23T20:33:57.502347+08:00"},{"id":"08007199eea846dd14f15f7dc70419e2","path":"backend/app/schemas/citation.py","line_range":"48-52","gmt_create":"2026-04-23T20:33:57.50265+08:00","gmt_modified":"2026-04-23T20:33:57.50265+08:00"},{"id":"4caff756fd4da029bd64cd16e7ef5960","path":"backend/app/api/queries.py","line_range":"32-39","gmt_create":"2026-04-23T20:33:57.50293+08:00","gmt_modified":"2026-04-23T20:33:57.50293+08:00"},{"id":"b0220895f66f1273966ad5b2c3266952","path":"backend/app/api/queries.py","line_range":"49-53","gmt_create":"2026-04-23T20:33:57.503622+08:00","gmt_modified":"2026-04-23T20:33:57.503622+08:00"},{"id":"44f88f9664fdf6e84ffb7e0675a86a28","path":"backend/app/api/queries.py","line_range":"64-69","gmt_create":"2026-04-23T20:33:57.504188+08:00","gmt_modified":"2026-04-23T20:33:57.504188+08:00"},{"id":"91f280f51389bd1cf711dcf33a4da681","path":"backend/app/api/queries.py","line_range":"79-84","gmt_create":"2026-04-23T20:33:57.504712+08:00","gmt_modified":"2026-04-23T20:33:57.504712+08:00"},{"id":"ab50466a57c77659d7b469d3a8a04ddb","path":"backend/app/api/queries.py","line_range":"96-103","gmt_create":"2026-04-23T20:33:57.505025+08:00","gmt_modified":"2026-04-23T20:33:57.505025+08:00"},{"id":"572c2dece1fbc13aa2bb7d6b61b0fd5c","path":"backend/app/api/citations.py","line_range":"65-71","gmt_create":"2026-04-23T20:33:57.505311+08:00","gmt_modified":"2026-04-23T20:33:57.505311+08:00"},{"id":"82386bc7ca57d9ccc94b656e52bc89f6","path":"backend/app/api/queries.py","line_range":"1-14","gmt_create":"2026-04-23T20:33:57.506573+08:00","gmt_modified":"2026-04-23T20:33:57.506573+08:00"},{"id":"7ab79ab21d7d6e4dbcb224572516f6f6","path":"backend/app/api/citations.py","line_range":"1-19","gmt_create":"2026-04-23T20:33:57.507421+08:00","gmt_modified":"2026-04-23T20:33:57.507422+08:00"},{"id":"8433204d7a82a1f480e57df9ceee5581","path":"backend/app/services/query.py","line_range":"1-10","gmt_create":"2026-04-23T20:33:57.507906+08:00","gmt_modified":"2026-04-23T20:33:57.507906+08:00"},{"id":"3957ee6f15a01b7b541490438ef18684","path":"backend/app/services/citation.py","line_range":"1-17","gmt_create":"2026-04-23T20:33:57.508376+08:00","gmt_modified":"2026-04-23T20:33:57.508376+08:00"},{"id":"fcae8d1d281ad7186999cc4ca8e43db7","path":"backend/app/workers/scheduler.py","line_range":"25-39","gmt_create":"2026-04-23T20:33:57.509666+08:00","gmt_modified":"2026-04-23T20:33:57.509666+08:00"},{"id":"ee12a84ac6334b13e20132181454488b","path":"backend/app/workers/scheduler.py","line_range":"13-19","gmt_create":"2026-04-23T20:33:57.510112+08:00","gmt_modified":"2026-04-23T20:33:57.510112+08:00"},{"id":"897e047b94772e5a0ff57cf773a7f965","path":"backend/app/workers/platforms/kimi.py","line_range":"17-32","gmt_create":"2026-04-23T20:33:57.510534+08:00","gmt_modified":"2026-04-23T20:33:57.510534+08:00"},{"id":"53e8ec81b4d2dbb13c831048e5897036","path":"backend/app/workers/platforms/wenxin.py","line_range":"17-32","gmt_create":"2026-04-23T20:33:57.510845+08:00","gmt_modified":"2026-04-23T20:33:57.510845+08:00"},{"id":"fd3145047b9c813cc8e64b9322e531f9","path":"backend/app/services/citation.py","line_range":"219-327","gmt_create":"2026-04-23T20:33:57.516693+08:00","gmt_modified":"2026-04-23T20:33:57.516693+08:00"},{"id":"b09a0f415030d91b25e6cabd8a0a93fc","path":"backend/app/models/query_task.py","line_range":"176-289","gmt_create":"2026-04-23T20:33:57.51758+08:00","gmt_modified":"2026-04-23T20:33:57.51758+08:00"},{"id":"e2168959b26c386940370b5f1bf48d7d","path":"backend/app/models/citation_record.py","line_range":"194-204","gmt_create":"2026-04-23T20:33:57.517939+08:00","gmt_modified":"2026-04-23T20:33:57.517939+08:00"},{"id":"129573d2bbcde48697ed0e75dea12396","path":"backend/app/workers/scheduler.py","line_range":"25-40","gmt_create":"2026-04-23T20:35:18.586153+08:00","gmt_modified":"2026-04-23T20:35:18.586153+08:00"},{"id":"cf18c97a9be6c78aa43cc229ed3dad20","path":"backend/app/workers/citation_engine.py","line_range":"164-173","gmt_create":"2026-04-23T20:35:18.586656+08:00","gmt_modified":"2026-04-23T20:35:18.586656+08:00"},{"id":"3c7ca5d582dca31c2530b1ce9c058e95","path":"backend/app/workers/platforms/kimi.py","line_range":"10-37","gmt_create":"2026-04-23T20:35:18.587239+08:00","gmt_modified":"2026-04-23T20:35:18.587239+08:00"},{"id":"27047f868643e5457d4f242b4298a9f6","path":"frontend/lib/platforms.ts","line_range":"1-23","gmt_create":"2026-04-23T20:35:18.590782+08:00","gmt_modified":"2026-04-23T20:35:18.590782+08:00"},{"id":"1526e4e02133a48eac04befb74ec5bd1","path":"backend/app/workers/citation_engine.py","line_range":"161-173","gmt_create":"2026-04-23T20:35:18.592183+08:00","gmt_modified":"2026-04-23T20:35:18.592183+08:00"},{"id":"98c02d9bb7aa6e2b6be5f7381e64fd99","path":"backend/app/api/queries.py","line_range":"26-39","gmt_create":"2026-04-23T20:35:18.594026+08:00","gmt_modified":"2026-04-23T20:35:18.594026+08:00"},{"id":"2a971cb83924013902324eceeab22559","path":"backend/app/workers/platforms/kimi.py","line_range":"16-29","gmt_create":"2026-04-23T20:35:18.596805+08:00","gmt_modified":"2026-04-23T20:35:18.596805+08:00"},{"id":"99326fedad9275392719105b5b6782d6","path":"backend/app/workers/platforms/kimi.py","line_range":"31-33","gmt_create":"2026-04-23T20:35:18.597389+08:00","gmt_modified":"2026-04-23T20:35:18.597389+08:00"},{"id":"5e5dacc623918c0f1eba234154c99291","path":"backend/app/workers/platforms/search_engine.py","line_range":"16-76","gmt_create":"2026-04-23T20:35:18.598978+08:00","gmt_modified":"2026-04-23T20:35:18.598978+08:00"},{"id":"5be7e6cf82d6359efddaf131aaf92615","path":"backend/app/workers/citation_engine.py","line_range":"323-330","gmt_create":"2026-04-23T20:35:18.604342+08:00","gmt_modified":"2026-04-23T20:35:18.604342+08:00"},{"id":"129b746e71a9013ceb1b0fcc59942b39","path":"backend/app/workers/scheduler.py","line_range":"86-90","gmt_create":"2026-04-23T20:35:18.611167+08:00","gmt_modified":"2026-04-23T20:35:18.611167+08:00"},{"id":"d780e807ee751f39f331a658b47c4ed3","path":"backend/app/services/citation.py","line_range":"24-269","gmt_create":"2026-04-23T20:35:18.619146+08:00","gmt_modified":"2026-04-23T20:35:18.619146+08:00"},{"id":"8eea43550951387ac740b5e3e64c7691","path":"backend/app/workers/platforms/search_engine.py","line_range":"94-96","gmt_create":"2026-04-23T20:35:18.629044+08:00","gmt_modified":"2026-04-23T20:35:18.629044+08:00"},{"id":"37769b7e6b5588be0065681dedf514ed","path":"backend/app/workers/platforms/search_engine.py","line_range":"140-144","gmt_create":"2026-04-23T20:35:18.631486+08:00","gmt_modified":"2026-04-23T20:35:18.631486+08:00"},{"id":"518d184988b97ebc7ef0c0bf5c10f42c","path":"backend/app/workers/platforms/kimi.py","line_range":"24-29","gmt_create":"2026-04-23T20:35:18.631835+08:00","gmt_modified":"2026-04-23T20:35:18.631835+08:00"},{"id":"818504ee2e17d2f9cc8fe115ca321138","path":"backend/app/api/queries.py","line_range":"34-38","gmt_create":"2026-04-23T20:35:18.632132+08:00","gmt_modified":"2026-04-23T20:35:18.632132+08:00"},{"id":"8a1a0ffd82ac6ff54d3410e4ce59a6b8","path":"backend/app/api/citations.py","line_range":"25-56","gmt_create":"2026-04-23T20:35:18.633686+08:00","gmt_modified":"2026-04-23T20:35:18.633686+08:00"},{"id":"d4f99d3dd9fe489c354edf5fe2f8803d","path":"backend/app/models/citation_record.py","line_range":"1-44","gmt_create":"2026-04-23T20:35:45.581649+08:00","gmt_modified":"2026-04-23T20:35:45.58165+08:00"},{"id":"86e37040be1aeb400fab9b529f5404c8","path":"backend/app/models/subscription.py","line_range":"1-37","gmt_create":"2026-04-23T20:35:45.583254+08:00","gmt_modified":"2026-04-23T20:35:45.583254+08:00"},{"id":"211463f5b49610f09594c40c0a235943","path":"backend/alembic/env.py","line_range":"1-89","gmt_create":"2026-04-23T20:35:45.584058+08:00","gmt_modified":"2026-04-23T20:35:45.584058+08:00"},{"id":"48d22eaee09e364a293ad6c4750f5c5a","path":"docker-compose.yml","line_range":"1-71","gmt_create":"2026-04-23T20:35:45.587653+08:00","gmt_modified":"2026-04-23T20:35:45.587653+08:00"},{"id":"98cc82f62b83678f06a33cf9231ecdf8","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"1-128","gmt_create":"2026-04-23T20:35:45.597037+08:00","gmt_modified":"2026-04-23T20:35:45.597037+08:00"},{"id":"e1aabd52989e47806fb997157381e1cf","path":"backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py","line_range":"1-37","gmt_create":"2026-04-23T20:35:45.597747+08:00","gmt_modified":"2026-04-23T20:35:45.597747+08:00"},{"id":"ac77e4875817616194b7b5997d4fb1ae","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"57-94","gmt_create":"2026-04-23T20:35:45.611901+08:00","gmt_modified":"2026-04-23T20:35:45.611901+08:00"},{"id":"0e57efd98dacc85da21f995980371ee4","path":"backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py","line_range":"21-37","gmt_create":"2026-04-23T20:35:45.61338+08:00","gmt_modified":"2026-04-23T20:35:45.61338+08:00"},{"id":"717eb27184726e4f78d694984d29420c","path":"backend/app/models/citation_record.py","line_range":"37-44","gmt_create":"2026-04-23T20:35:45.615494+08:00","gmt_modified":"2026-04-23T20:35:45.615495+08:00"},{"id":"bfdf3479f244dc6794628d9df10ab6d0","path":"backend/app/models/query.py","line_range":"11-48","gmt_create":"2026-04-23T20:35:45.618458+08:00","gmt_modified":"2026-04-23T20:35:45.618458+08:00"},{"id":"f5f9f0d96263ae84631c7a8d7e9b3648","path":"backend/app/models/citation_record.py","line_range":"11-44","gmt_create":"2026-04-23T20:35:45.61929+08:00","gmt_modified":"2026-04-23T20:35:45.619291+08:00"},{"id":"818d1354dc0665798f3d91a2ca5153d6","path":"backend/app/models/query_task.py","line_range":"11-34","gmt_create":"2026-04-23T20:35:45.620036+08:00","gmt_modified":"2026-04-23T20:35:45.620036+08:00"},{"id":"24aade4c34609a8ab28e4643a3692201","path":"backend/app/models/subscription.py","line_range":"11-36","gmt_create":"2026-04-23T20:35:45.62075+08:00","gmt_modified":"2026-04-23T20:35:45.62075+08:00"},{"id":"d34337b9ff77246979252d2fd8fb8018","path":"backend/alembic/env.py","line_range":"33-88","gmt_create":"2026-04-23T20:35:45.628352+08:00","gmt_modified":"2026-04-23T20:35:45.628353+08:00"},{"id":"eb63042f04a22f9a67bd498df1684d20","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"36-111","gmt_create":"2026-04-23T20:35:45.634829+08:00","gmt_modified":"2026-04-23T20:35:45.634829+08:00"},{"id":"c651c7ad6747a92ee96eabb2eb82afdd","path":"backend/app/database.py","line_range":"12-18","gmt_create":"2026-04-23T20:35:45.637195+08:00","gmt_modified":"2026-04-23T20:35:45.637195+08:00"},{"id":"dd01eee487298a28e950f6345196f1d4","path":"backend/app/services/citation.py","line_range":"30-79","gmt_create":"2026-04-23T20:35:45.637815+08:00","gmt_modified":"2026-04-23T20:35:45.637815+08:00"},{"id":"7dae7237f11c5100bf7889c105193cf6","path":"backend/app/services/query.py","line_range":"12-32","gmt_create":"2026-04-23T20:35:45.638422+08:00","gmt_modified":"2026-04-23T20:35:45.638422+08:00"},{"id":"cc64cf609f5ff218f618e0664ffa7cc7","path":"backend/app/services/citation.py","line_range":"298-308","gmt_create":"2026-04-23T20:35:45.641905+08:00","gmt_modified":"2026-04-23T20:35:45.641905+08:00"},{"id":"ce7e334595a4ce912e0d116314db9a35","path":"backend/app/services/citation.py","line_range":"342-429","gmt_create":"2026-04-23T20:35:45.6442+08:00","gmt_modified":"2026-04-23T20:35:45.6442+08:00"},{"id":"2f46f212597e3c245b9e5dcc5dbc863d","path":"backend/app/schemas/citation.py","line_range":"7-18","gmt_create":"2026-04-23T20:35:45.64501+08:00","gmt_modified":"2026-04-23T20:35:45.64501+08:00"},{"id":"dc40f1dd3e59ee7f046019201068bea1","path":"backend/app/services/citation.py","line_range":"14-22","gmt_create":"2026-04-23T20:35:45.659571+08:00","gmt_modified":"2026-04-23T20:35:45.659571+08:00"}],"knowledge_relations":[{"id":1,"source_id":"34e572eb-6fc8-4de7-8061-63783ef8be24","target_id":"2793782c-91c8-4052-b9db-39513426c736","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 34e572eb-6fc8-4de7-8061-63783ef8be24 -\u003e 2793782c-91c8-4052-b9db-39513426c736","gmt_create":"2026-04-22T19:25:18.918463+08:00","gmt_modified":"2026-04-22T19:25:18.918463+08:00"},{"id":2,"source_id":"34e572eb-6fc8-4de7-8061-63783ef8be24","target_id":"e23bd86e-b4ac-40eb-b1c1-38d929fd5419","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 34e572eb-6fc8-4de7-8061-63783ef8be24 -\u003e e23bd86e-b4ac-40eb-b1c1-38d929fd5419","gmt_create":"2026-04-22T19:25:18.919833+08:00","gmt_modified":"2026-04-22T19:25:18.919833+08:00"},{"id":3,"source_id":"34e572eb-6fc8-4de7-8061-63783ef8be24","target_id":"70b3948e-f456-42d2-b7ad-a0097ad5ee5f","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 34e572eb-6fc8-4de7-8061-63783ef8be24 -\u003e 70b3948e-f456-42d2-b7ad-a0097ad5ee5f","gmt_create":"2026-04-22T19:25:18.92034+08:00","gmt_modified":"2026-04-22T19:25:18.92034+08:00"},{"id":4,"source_id":"34e572eb-6fc8-4de7-8061-63783ef8be24","target_id":"1c4316a1-f1d7-46da-bcfc-ea2fa0c56110","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 34e572eb-6fc8-4de7-8061-63783ef8be24 -\u003e 1c4316a1-f1d7-46da-bcfc-ea2fa0c56110","gmt_create":"2026-04-22T19:25:18.920778+08:00","gmt_modified":"2026-04-22T19:25:18.920778+08:00"},{"id":5,"source_id":"34e572eb-6fc8-4de7-8061-63783ef8be24","target_id":"7e679d62-c415-4d6a-a7e5-d41d00e0ed69","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 34e572eb-6fc8-4de7-8061-63783ef8be24 -\u003e 7e679d62-c415-4d6a-a7e5-d41d00e0ed69","gmt_create":"2026-04-22T19:25:18.921203+08:00","gmt_modified":"2026-04-22T19:25:18.921204+08:00"},{"id":6,"source_id":"c7eb113b-b503-4d83-be7f-9ccf3350c9d9","target_id":"f94da0b4-8a07-4de1-b0b3-d3b32a12c3c1","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c7eb113b-b503-4d83-be7f-9ccf3350c9d9 -\u003e f94da0b4-8a07-4de1-b0b3-d3b32a12c3c1","gmt_create":"2026-04-22T19:25:18.921638+08:00","gmt_modified":"2026-04-22T19:25:18.921638+08:00"},{"id":7,"source_id":"c7eb113b-b503-4d83-be7f-9ccf3350c9d9","target_id":"df661133-efbf-43fe-97c3-f581c81f47a7","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c7eb113b-b503-4d83-be7f-9ccf3350c9d9 -\u003e df661133-efbf-43fe-97c3-f581c81f47a7","gmt_create":"2026-04-22T19:25:18.922154+08:00","gmt_modified":"2026-04-22T19:25:18.922154+08:00"},{"id":8,"source_id":"c7eb113b-b503-4d83-be7f-9ccf3350c9d9","target_id":"11936bb5-374f-40f4-bb53-b75264fc4b9d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c7eb113b-b503-4d83-be7f-9ccf3350c9d9 -\u003e 11936bb5-374f-40f4-bb53-b75264fc4b9d","gmt_create":"2026-04-22T19:25:18.922617+08:00","gmt_modified":"2026-04-22T19:25:18.922617+08:00"},{"id":9,"source_id":"c7eb113b-b503-4d83-be7f-9ccf3350c9d9","target_id":"23ad3419-5473-4e2c-ac87-d9715090279d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c7eb113b-b503-4d83-be7f-9ccf3350c9d9 -\u003e 23ad3419-5473-4e2c-ac87-d9715090279d","gmt_create":"2026-04-22T19:25:18.923059+08:00","gmt_modified":"2026-04-22T19:25:18.923059+08:00"},{"id":11,"source_id":"c7eb113b-b503-4d83-be7f-9ccf3350c9d9","target_id":"83fe6837-7874-4467-8114-103062f15f58","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c7eb113b-b503-4d83-be7f-9ccf3350c9d9 -\u003e 83fe6837-7874-4467-8114-103062f15f58","gmt_create":"2026-04-22T19:25:18.924565+08:00","gmt_modified":"2026-04-22T19:25:18.924565+08:00"},{"id":12,"source_id":"3af3bb9e-4d99-4dc3-b1ed-2686db385c26","target_id":"c112a3f4-b0a1-4c4a-a325-e3ede8c90be6","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3af3bb9e-4d99-4dc3-b1ed-2686db385c26 -\u003e c112a3f4-b0a1-4c4a-a325-e3ede8c90be6","gmt_create":"2026-04-22T19:25:18.925143+08:00","gmt_modified":"2026-04-22T19:25:18.925143+08:00"},{"id":13,"source_id":"3af3bb9e-4d99-4dc3-b1ed-2686db385c26","target_id":"2b32ec11-d228-42c0-9232-103ba7e44f71","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3af3bb9e-4d99-4dc3-b1ed-2686db385c26 -\u003e 2b32ec11-d228-42c0-9232-103ba7e44f71","gmt_create":"2026-04-22T19:25:18.925589+08:00","gmt_modified":"2026-04-22T19:25:18.925589+08:00"},{"id":16,"source_id":"3af3bb9e-4d99-4dc3-b1ed-2686db385c26","target_id":"a40267bc-925a-4364-a01f-b96d3df60aea","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3af3bb9e-4d99-4dc3-b1ed-2686db385c26 -\u003e a40267bc-925a-4364-a01f-b96d3df60aea","gmt_create":"2026-04-22T19:25:18.927133+08:00","gmt_modified":"2026-04-22T19:25:18.927133+08:00"},{"id":17,"source_id":"3af3bb9e-4d99-4dc3-b1ed-2686db385c26","target_id":"7bd2c461-81b0-48e8-8cb3-b4b14305806d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3af3bb9e-4d99-4dc3-b1ed-2686db385c26 -\u003e 7bd2c461-81b0-48e8-8cb3-b4b14305806d","gmt_create":"2026-04-22T19:25:18.927624+08:00","gmt_modified":"2026-04-22T19:25:18.927625+08:00"},{"id":34,"source_id":"98909ecc-fceb-4ab7-a26f-741838eb2e50","target_id":"1ed0b482-3d6a-4bfd-af40-47a5d1f3e802","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 98909ecc-fceb-4ab7-a26f-741838eb2e50 -\u003e 1ed0b482-3d6a-4bfd-af40-47a5d1f3e802","gmt_create":"2026-04-22T19:25:18.934991+08:00","gmt_modified":"2026-04-22T19:25:18.934991+08:00"},{"id":35,"source_id":"98909ecc-fceb-4ab7-a26f-741838eb2e50","target_id":"26f80935-eac2-44ee-bcdb-d6a79c537750","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 98909ecc-fceb-4ab7-a26f-741838eb2e50 -\u003e 26f80935-eac2-44ee-bcdb-d6a79c537750","gmt_create":"2026-04-22T19:25:18.935426+08:00","gmt_modified":"2026-04-22T19:25:18.935426+08:00"},{"id":36,"source_id":"98909ecc-fceb-4ab7-a26f-741838eb2e50","target_id":"eb1288f7-5ea1-413a-8f54-4f870306d14d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 98909ecc-fceb-4ab7-a26f-741838eb2e50 -\u003e eb1288f7-5ea1-413a-8f54-4f870306d14d","gmt_create":"2026-04-22T19:25:18.935875+08:00","gmt_modified":"2026-04-22T19:25:18.935875+08:00"},{"id":37,"source_id":"98909ecc-fceb-4ab7-a26f-741838eb2e50","target_id":"aa6db9b6-71e1-4497-a0e2-f3ff25358d3a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 98909ecc-fceb-4ab7-a26f-741838eb2e50 -\u003e aa6db9b6-71e1-4497-a0e2-f3ff25358d3a","gmt_create":"2026-04-22T19:25:18.936315+08:00","gmt_modified":"2026-04-22T19:25:18.936316+08:00"},{"id":38,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"13c568d2-dfa7-4d1b-81c0-dfef247cbb67","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 643984fc-5a57-498b-8f25-68cc318d9d82 -\u003e 13c568d2-dfa7-4d1b-81c0-dfef247cbb67","gmt_create":"2026-04-22T19:25:18.936799+08:00","gmt_modified":"2026-04-22T19:25:18.936799+08:00"},{"id":39,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"222a9371-45c1-4e0d-b1da-e8ada1c501c2","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 643984fc-5a57-498b-8f25-68cc318d9d82 -\u003e 222a9371-45c1-4e0d-b1da-e8ada1c501c2","gmt_create":"2026-04-22T19:25:18.937215+08:00","gmt_modified":"2026-04-22T19:25:18.937215+08:00"},{"id":40,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"979be617-a83d-4db9-b73e-38581348f8c1","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 643984fc-5a57-498b-8f25-68cc318d9d82 -\u003e 979be617-a83d-4db9-b73e-38581348f8c1","gmt_create":"2026-04-22T19:25:18.937741+08:00","gmt_modified":"2026-04-22T19:25:18.937741+08:00"},{"id":41,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"422c46b3-e69c-4023-a878-411a48ae182f","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 643984fc-5a57-498b-8f25-68cc318d9d82 -\u003e 422c46b3-e69c-4023-a878-411a48ae182f","gmt_create":"2026-04-22T19:25:18.938186+08:00","gmt_modified":"2026-04-22T19:25:18.938186+08:00"},{"id":45,"source_id":"c5849940-e223-4222-be17-aa0a6cb36bc8","target_id":"d2c7157d-157f-4990-8f76-11f3ea5435f7","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c5849940-e223-4222-be17-aa0a6cb36bc8 -\u003e d2c7157d-157f-4990-8f76-11f3ea5435f7","gmt_create":"2026-04-22T19:25:18.939978+08:00","gmt_modified":"2026-04-22T19:25:18.939978+08:00"},{"id":46,"source_id":"c5849940-e223-4222-be17-aa0a6cb36bc8","target_id":"e1e0bd0e-01b3-4543-9781-d9beb32b9a57","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c5849940-e223-4222-be17-aa0a6cb36bc8 -\u003e e1e0bd0e-01b3-4543-9781-d9beb32b9a57","gmt_create":"2026-04-22T19:25:18.940415+08:00","gmt_modified":"2026-04-22T19:25:18.940415+08:00"},{"id":47,"source_id":"c5849940-e223-4222-be17-aa0a6cb36bc8","target_id":"e9a02c86-236b-49cb-bbed-9462ee123c04","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c5849940-e223-4222-be17-aa0a6cb36bc8 -\u003e e9a02c86-236b-49cb-bbed-9462ee123c04","gmt_create":"2026-04-22T19:25:18.941227+08:00","gmt_modified":"2026-04-22T19:25:18.941227+08:00"},{"id":48,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"12e2c3d7b9a92dc44a6ee29b85e10df6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/app/layout.tsx","gmt_create":"2026-04-23T15:19:43.777831+08:00","gmt_modified":"2026-04-23T15:19:43.777831+08:00"},{"id":49,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"2a1c745c7b3fb7f600596be3d979bba1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/app/(dashboard","gmt_create":"2026-04-23T15:19:43.778774+08:00","gmt_modified":"2026-04-23T15:19:43.778774+08:00"},{"id":50,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"eca13a610badfc5ffc6210827fb96991","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/layout/header.tsx","gmt_create":"2026-04-23T15:19:43.779153+08:00","gmt_modified":"2026-04-23T15:19:43.779154+08:00"},{"id":51,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"18a0651d895fba9bb4e0c0229459efdc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/layout/sidebar.tsx","gmt_create":"2026-04-23T15:19:43.779524+08:00","gmt_modified":"2026-04-23T15:19:43.779524+08:00"},{"id":52,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"5d7886d0dc99f81073a578b8aefdd375","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/lib/api.ts","gmt_create":"2026-04-23T15:19:43.779869+08:00","gmt_modified":"2026-04-23T15:19:43.779869+08:00"},{"id":53,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"0c0b0f4e2cf44facd9d5b57de0d0bf0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/table.tsx","gmt_create":"2026-04-23T15:19:43.780775+08:00","gmt_modified":"2026-04-23T15:19:43.780775+08:00"},{"id":54,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"108b0c4b4dcfb6aa39a5eb138225c148","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/dialog.tsx","gmt_create":"2026-04-23T15:19:43.781767+08:00","gmt_modified":"2026-04-23T15:19:43.781767+08:00"},{"id":55,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"ef72f0c3cedb9fd9a87352fe493053dc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/lib/platforms.ts","gmt_create":"2026-04-23T15:19:43.782177+08:00","gmt_modified":"2026-04-23T15:19:43.782177+08:00"},{"id":56,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"f93ae024fe0a2e69698037dff6df205f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/lib/utils.ts","gmt_create":"2026-04-23T15:19:43.782527+08:00","gmt_modified":"2026-04-23T15:19:43.782527+08:00"},{"id":57,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"d5f2266643d2011c66e86af088ec637f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/charts/trend-chart.tsx","gmt_create":"2026-04-23T15:19:43.782861+08:00","gmt_modified":"2026-04-23T15:19:43.782861+08:00"},{"id":58,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"f1a7d61831cc0a45ac6220294f15c21d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/charts/platform-chart.tsx","gmt_create":"2026-04-23T15:19:43.783164+08:00","gmt_modified":"2026-04-23T15:19:43.783165+08:00"},{"id":59,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"8a466b0c6eac2ccb54c5da7e13854646","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/app/layout.tsx#1-37","gmt_create":"2026-04-23T15:19:43.783668+08:00","gmt_modified":"2026-04-23T15:19:43.783668+08:00"},{"id":60,"source_id":"12e2c3d7b9a92dc44a6ee29b85e10df6","target_id":"8a466b0c6eac2ccb54c5da7e13854646","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-04-23T15:19:43.783987+08:00","gmt_modified":"2026-04-23T15:19:43.783987+08:00"},{"id":61,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"3bd4eedea376e3a3d9f9fbff4fe27a65","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/layout/sidebar.tsx#1-54","gmt_create":"2026-04-23T15:19:43.784455+08:00","gmt_modified":"2026-04-23T15:19:43.784455+08:00"},{"id":62,"source_id":"18a0651d895fba9bb4e0c0229459efdc","target_id":"3bd4eedea376e3a3d9f9fbff4fe27a65","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-54","gmt_create":"2026-04-23T15:19:43.784807+08:00","gmt_modified":"2026-04-23T15:19:43.784807+08:00"},{"id":63,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"0d903468b55bdc63cc7e25a87a89c522","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/layout/header.tsx#1-30","gmt_create":"2026-04-23T15:19:43.785303+08:00","gmt_modified":"2026-04-23T15:19:43.785303+08:00"},{"id":64,"source_id":"eca13a610badfc5ffc6210827fb96991","target_id":"0d903468b55bdc63cc7e25a87a89c522","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-30","gmt_create":"2026-04-23T15:19:43.785622+08:00","gmt_modified":"2026-04-23T15:19:43.785622+08:00"},{"id":65,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"3bab92a09e9fb456e0303bb1e04afc7e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/table.tsx#1-118","gmt_create":"2026-04-23T15:19:43.78727+08:00","gmt_modified":"2026-04-23T15:19:43.787271+08:00"},{"id":66,"source_id":"0c0b0f4e2cf44facd9d5b57de0d0bf0c","target_id":"3bab92a09e9fb456e0303bb1e04afc7e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-118","gmt_create":"2026-04-23T15:19:43.788224+08:00","gmt_modified":"2026-04-23T15:19:43.788224+08:00"},{"id":67,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"0eed9f61572209dd754611fc7c690d5a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/dialog.tsx#1-123","gmt_create":"2026-04-23T15:19:43.789533+08:00","gmt_modified":"2026-04-23T15:19:43.789533+08:00"},{"id":68,"source_id":"108b0c4b4dcfb6aa39a5eb138225c148","target_id":"0eed9f61572209dd754611fc7c690d5a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-123","gmt_create":"2026-04-23T15:19:43.790255+08:00","gmt_modified":"2026-04-23T15:19:43.790255+08:00"},{"id":69,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"b7796fc6197ecce5beb461b9466e54a0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/charts/trend-chart.tsx#1-60","gmt_create":"2026-04-23T15:19:43.790795+08:00","gmt_modified":"2026-04-23T15:19:43.790795+08:00"},{"id":70,"source_id":"d5f2266643d2011c66e86af088ec637f","target_id":"b7796fc6197ecce5beb461b9466e54a0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-60","gmt_create":"2026-04-23T15:19:43.791134+08:00","gmt_modified":"2026-04-23T15:19:43.791134+08:00"},{"id":71,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"6b9f52af0b6d78c17ff9bbc42d760ea2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/charts/platform-chart.tsx#1-68","gmt_create":"2026-04-23T15:19:43.791601+08:00","gmt_modified":"2026-04-23T15:19:43.791601+08:00"},{"id":72,"source_id":"f1a7d61831cc0a45ac6220294f15c21d","target_id":"6b9f52af0b6d78c17ff9bbc42d760ea2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-68","gmt_create":"2026-04-23T15:19:43.791902+08:00","gmt_modified":"2026-04-23T15:19:43.791902+08:00"},{"id":73,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"a829403082cc3460c01e0110229c53c4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/platforms.ts#1-18","gmt_create":"2026-04-23T15:19:43.792356+08:00","gmt_modified":"2026-04-23T15:19:43.792356+08:00"},{"id":74,"source_id":"ef72f0c3cedb9fd9a87352fe493053dc","target_id":"a829403082cc3460c01e0110229c53c4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-18","gmt_create":"2026-04-23T15:19:43.79267+08:00","gmt_modified":"2026-04-23T15:19:43.79267+08:00"},{"id":75,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"dcfa308ef4ec368c5a51a17acbfc8e2c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/utils.ts#1-7","gmt_create":"2026-04-23T15:19:43.79312+08:00","gmt_modified":"2026-04-23T15:19:43.79312+08:00"},{"id":76,"source_id":"f93ae024fe0a2e69698037dff6df205f","target_id":"dcfa308ef4ec368c5a51a17acbfc8e2c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-7","gmt_create":"2026-04-23T15:19:43.793455+08:00","gmt_modified":"2026-04-23T15:19:43.793455+08:00"},{"id":77,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"0f87c8089f548883d056f0a0d79e273f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/api.ts#1-79","gmt_create":"2026-04-23T15:19:43.793866+08:00","gmt_modified":"2026-04-23T15:19:43.793866+08:00"},{"id":78,"source_id":"5d7886d0dc99f81073a578b8aefdd375","target_id":"0f87c8089f548883d056f0a0d79e273f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-79","gmt_create":"2026-04-23T15:19:43.794158+08:00","gmt_modified":"2026-04-23T15:19:43.794158+08:00"},{"id":79,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"9beee1f41fe8f0750fd97155f9d54bbb","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/api.ts#67-70","gmt_create":"2026-04-23T15:19:43.797877+08:00","gmt_modified":"2026-04-23T15:19:43.797877+08:00"},{"id":80,"source_id":"5d7886d0dc99f81073a578b8aefdd375","target_id":"9beee1f41fe8f0750fd97155f9d54bbb","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 67-70","gmt_create":"2026-04-23T15:19:43.798244+08:00","gmt_modified":"2026-04-23T15:19:43.798244+08:00"},{"id":81,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"8fe2e22a963442076e1ce16ab777573c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/api.ts#56-66","gmt_create":"2026-04-23T15:19:43.799319+08:00","gmt_modified":"2026-04-23T15:19:43.799319+08:00"},{"id":82,"source_id":"5d7886d0dc99f81073a578b8aefdd375","target_id":"8fe2e22a963442076e1ce16ab777573c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 56-66","gmt_create":"2026-04-23T15:19:43.799625+08:00","gmt_modified":"2026-04-23T15:19:43.799625+08:00"},{"id":83,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"3124ad882ca2cf8fecb6b93696c7f233","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/api.ts#72-77","gmt_create":"2026-04-23T15:19:43.801555+08:00","gmt_modified":"2026-04-23T15:19:43.801555+08:00"},{"id":84,"source_id":"5d7886d0dc99f81073a578b8aefdd375","target_id":"3124ad882ca2cf8fecb6b93696c7f233","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 72-77","gmt_create":"2026-04-23T15:19:43.801939+08:00","gmt_modified":"2026-04-23T15:19:43.801939+08:00"},{"id":85,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"17a97b4ac37fb67b8eda7ce2887c38e7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/app/layout.tsx#17-20","gmt_create":"2026-04-23T15:19:43.806186+08:00","gmt_modified":"2026-04-23T15:19:43.806186+08:00"},{"id":86,"source_id":"12e2c3d7b9a92dc44a6ee29b85e10df6","target_id":"17a97b4ac37fb67b8eda7ce2887c38e7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 17-20","gmt_create":"2026-04-23T15:19:43.80664+08:00","gmt_modified":"2026-04-23T15:19:43.80664+08:00"},{"id":87,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"84cba1e0d516e8c9859402fd5c1bc83c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/api.ts#3-40","gmt_create":"2026-04-23T15:19:43.815637+08:00","gmt_modified":"2026-04-23T15:19:43.815637+08:00"},{"id":88,"source_id":"5d7886d0dc99f81073a578b8aefdd375","target_id":"84cba1e0d516e8c9859402fd5c1bc83c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-40","gmt_create":"2026-04-23T15:19:43.817147+08:00","gmt_modified":"2026-04-23T15:19:43.817147+08:00"},{"id":89,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"9228ff67d4c757a85d9421b71f4b29f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/main.py","gmt_create":"2026-04-23T15:19:45.610941+08:00","gmt_modified":"2026-04-23T15:19:45.610941+08:00"},{"id":90,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"93022c8938ce318f167277cfa65c29a7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/auth.py","gmt_create":"2026-04-23T15:19:45.611315+08:00","gmt_modified":"2026-04-23T15:19:45.611315+08:00"},{"id":91,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"6b3d903205941aa9391dd90016e1102c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/queries.py","gmt_create":"2026-04-23T15:19:45.611638+08:00","gmt_modified":"2026-04-23T15:19:45.611638+08:00"},{"id":92,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T15:19:45.611969+08:00","gmt_modified":"2026-04-23T15:19:45.611969+08:00"},{"id":93,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"58901c94d975d87e652a4dc6c8dda656","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/reports.py","gmt_create":"2026-04-23T15:19:45.612281+08:00","gmt_modified":"2026-04-23T15:19:45.612282+08:00"},{"id":94,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"9d08667997a868fc07c9b4e328e44224","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/deps.py","gmt_create":"2026-04-23T15:19:45.612634+08:00","gmt_modified":"2026-04-23T15:19:45.612634+08:00"},{"id":95,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"e0c0ca66b8b81cf66e078a7ab162c07f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/schemas/auth.py","gmt_create":"2026-04-23T15:19:45.612995+08:00","gmt_modified":"2026-04-23T15:19:45.612995+08:00"},{"id":96,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"f301b79d833233ce39d350e82a71c938","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/schemas/query.py","gmt_create":"2026-04-23T15:19:45.613329+08:00","gmt_modified":"2026-04-23T15:19:45.613329+08:00"},{"id":97,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"1a3336b4af8a39a055e912724338580c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/schemas/citation.py","gmt_create":"2026-04-23T15:19:45.613646+08:00","gmt_modified":"2026-04-23T15:19:45.613647+08:00"},{"id":98,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"4d2f3847b7c10634733118b70a1aea0b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/auth.py","gmt_create":"2026-04-23T15:19:45.613962+08:00","gmt_modified":"2026-04-23T15:19:45.613962+08:00"},{"id":99,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"88d22de3b2a7419868e8ae19130d860c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/query.py","gmt_create":"2026-04-23T15:19:45.614276+08:00","gmt_modified":"2026-04-23T15:19:45.614276+08:00"},{"id":100,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"04e3926c080e795713bff683e7dc9d3e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/citation.py","gmt_create":"2026-04-23T15:19:45.614712+08:00","gmt_modified":"2026-04-23T15:19:45.614712+08:00"},{"id":101,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T15:19:45.61522+08:00","gmt_modified":"2026-04-23T15:19:45.61522+08:00"},{"id":102,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"c59f8c276697a070dffc581fe94d809c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/user.py","gmt_create":"2026-04-23T15:19:45.615619+08:00","gmt_modified":"2026-04-23T15:19:45.615619+08:00"},{"id":103,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T15:19:45.615972+08:00","gmt_modified":"2026-04-23T15:19:45.615972+08:00"},{"id":104,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"b4a81ef789630d0af6a8d50859d01bf3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/citation_record.py","gmt_create":"2026-04-23T15:19:45.616295+08:00","gmt_modified":"2026-04-23T15:19:45.616295+08:00"},{"id":105,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T15:19:45.616638+08:00","gmt_modified":"2026-04-23T15:19:45.616638+08:00"},{"id":106,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"b55a164add5a8fec2ef0e489f7234829","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#24-47","gmt_create":"2026-04-23T15:19:45.61708+08:00","gmt_modified":"2026-04-23T15:19:45.61708+08:00"},{"id":107,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"b55a164add5a8fec2ef0e489f7234829","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-47","gmt_create":"2026-04-23T15:19:45.617445+08:00","gmt_modified":"2026-04-23T15:19:45.617445+08:00"},{"id":108,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"16d619435094a63740357cd6317b52cb","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/auth.py#10","gmt_create":"2026-04-23T15:19:45.617883+08:00","gmt_modified":"2026-04-23T15:19:45.617883+08:00"},{"id":109,"source_id":"93022c8938ce318f167277cfa65c29a7","target_id":"16d619435094a63740357cd6317b52cb","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10","gmt_create":"2026-04-23T15:19:45.618177+08:00","gmt_modified":"2026-04-23T15:19:45.618177+08:00"},{"id":110,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"fa1ee5e3822128a37e9d03af74083392","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#12","gmt_create":"2026-04-23T15:19:45.61874+08:00","gmt_modified":"2026-04-23T15:19:45.61874+08:00"},{"id":111,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"fa1ee5e3822128a37e9d03af74083392","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12","gmt_create":"2026-04-23T15:19:45.619215+08:00","gmt_modified":"2026-04-23T15:19:45.619215+08:00"},{"id":112,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"7e908f05baccdfcf7f4a3ef3c9cd5c38","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#21","gmt_create":"2026-04-23T15:19:45.619736+08:00","gmt_modified":"2026-04-23T15:19:45.619736+08:00"},{"id":113,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"7e908f05baccdfcf7f4a3ef3c9cd5c38","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 21","gmt_create":"2026-04-23T15:19:45.620246+08:00","gmt_modified":"2026-04-23T15:19:45.620246+08:00"},{"id":114,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"ffe6df344be81bde3941ad8f0d77910b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/reports.py#13","gmt_create":"2026-04-23T15:19:45.622123+08:00","gmt_modified":"2026-04-23T15:19:45.622124+08:00"},{"id":115,"source_id":"58901c94d975d87e652a4dc6c8dda656","target_id":"ffe6df344be81bde3941ad8f0d77910b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13","gmt_create":"2026-04-23T15:19:45.623067+08:00","gmt_modified":"2026-04-23T15:19:45.623067+08:00"},{"id":116,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"c71fb14f8866e34c679c94a4e2432bc7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/deps.py#13","gmt_create":"2026-04-23T15:19:45.624216+08:00","gmt_modified":"2026-04-23T15:19:45.624217+08:00"},{"id":117,"source_id":"9d08667997a868fc07c9b4e328e44224","target_id":"c71fb14f8866e34c679c94a4e2432bc7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13","gmt_create":"2026-04-23T15:19:45.624846+08:00","gmt_modified":"2026-04-23T15:19:45.624846+08:00"},{"id":118,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"3c68f1581d2fd6aa845dd71111a9aa9d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#1-57","gmt_create":"2026-04-23T15:19:45.62545+08:00","gmt_modified":"2026-04-23T15:19:45.62545+08:00"},{"id":119,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"3c68f1581d2fd6aa845dd71111a9aa9d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-57","gmt_create":"2026-04-23T15:19:45.625985+08:00","gmt_modified":"2026-04-23T15:19:45.625985+08:00"},{"id":120,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"39afb05755a93800fd685af7274110cb","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#13-57","gmt_create":"2026-04-23T15:19:45.626544+08:00","gmt_modified":"2026-04-23T15:19:45.626544+08:00"},{"id":121,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"39afb05755a93800fd685af7274110cb","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-57","gmt_create":"2026-04-23T15:19:45.626917+08:00","gmt_modified":"2026-04-23T15:19:45.626917+08:00"},{"id":122,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"87a177f17800991e1ed1fb7be03abdb2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/auth.py#13-42","gmt_create":"2026-04-23T15:19:45.627469+08:00","gmt_modified":"2026-04-23T15:19:45.62747+08:00"},{"id":123,"source_id":"93022c8938ce318f167277cfa65c29a7","target_id":"87a177f17800991e1ed1fb7be03abdb2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-42","gmt_create":"2026-04-23T15:19:45.627772+08:00","gmt_modified":"2026-04-23T15:19:45.627772+08:00"},{"id":124,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"ae9de874df4a46f4197b6c157c25ec6e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#15-85","gmt_create":"2026-04-23T15:19:45.628226+08:00","gmt_modified":"2026-04-23T15:19:45.628226+08:00"},{"id":125,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"ae9de874df4a46f4197b6c157c25ec6e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 15-85","gmt_create":"2026-04-23T15:19:45.628538+08:00","gmt_modified":"2026-04-23T15:19:45.628538+08:00"},{"id":126,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"c066a8d4bffabed87a2e38ccad81c107","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#25-77","gmt_create":"2026-04-23T15:19:45.629104+08:00","gmt_modified":"2026-04-23T15:19:45.629104+08:00"},{"id":127,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"c066a8d4bffabed87a2e38ccad81c107","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-77","gmt_create":"2026-04-23T15:19:45.629465+08:00","gmt_modified":"2026-04-23T15:19:45.629465+08:00"},{"id":128,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"177c73dc4e71186d9eaa1157fc0fe97f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/reports.py#16-46","gmt_create":"2026-04-23T15:19:45.629913+08:00","gmt_modified":"2026-04-23T15:19:45.629913+08:00"},{"id":129,"source_id":"58901c94d975d87e652a4dc6c8dda656","target_id":"177c73dc4e71186d9eaa1157fc0fe97f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-46","gmt_create":"2026-04-23T15:19:45.630333+08:00","gmt_modified":"2026-04-23T15:19:45.630333+08:00"},{"id":130,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"a0be0cbddb559575861620b5b7579634","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#38-51","gmt_create":"2026-04-23T15:19:45.630817+08:00","gmt_modified":"2026-04-23T15:19:45.630817+08:00"},{"id":131,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"a0be0cbddb559575861620b5b7579634","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 38-51","gmt_create":"2026-04-23T15:19:45.631178+08:00","gmt_modified":"2026-04-23T15:19:45.631178+08:00"},{"id":132,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"bcdf50f6234651cb9863ab210e6473e5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/deps.py#16-42","gmt_create":"2026-04-23T15:19:45.631734+08:00","gmt_modified":"2026-04-23T15:19:45.631735+08:00"},{"id":133,"source_id":"9d08667997a868fc07c9b4e328e44224","target_id":"bcdf50f6234651cb9863ab210e6473e5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-42","gmt_create":"2026-04-23T15:19:45.632177+08:00","gmt_modified":"2026-04-23T15:19:45.632177+08:00"},{"id":134,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"6df0277c2486b148fa26c2682dbdaa4c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/auth.py#37-68","gmt_create":"2026-04-23T15:19:45.632731+08:00","gmt_modified":"2026-04-23T15:19:45.632731+08:00"},{"id":135,"source_id":"4d2f3847b7c10634733118b70a1aea0b","target_id":"6df0277c2486b148fa26c2682dbdaa4c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 37-68","gmt_create":"2026-04-23T15:19:45.63307+08:00","gmt_modified":"2026-04-23T15:19:45.63307+08:00"},{"id":136,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"5ea5f192d580031ffe57e1582b70c67e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#12-123","gmt_create":"2026-04-23T15:19:45.633593+08:00","gmt_modified":"2026-04-23T15:19:45.633593+08:00"},{"id":137,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"5ea5f192d580031ffe57e1582b70c67e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-123","gmt_create":"2026-04-23T15:19:45.633929+08:00","gmt_modified":"2026-04-23T15:19:45.633929+08:00"},{"id":138,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"fe4a793f16cd4e12b56253c0a6d53ae0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#24-359","gmt_create":"2026-04-23T15:19:45.634408+08:00","gmt_modified":"2026-04-23T15:19:45.634408+08:00"},{"id":139,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"fe4a793f16cd4e12b56253c0a6d53ae0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-359","gmt_create":"2026-04-23T15:19:45.634775+08:00","gmt_modified":"2026-04-23T15:19:45.634775+08:00"},{"id":140,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"9552bd8a528207f18e4f3a1696f26a55","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/auth.py#13-37","gmt_create":"2026-04-23T15:19:45.635318+08:00","gmt_modified":"2026-04-23T15:19:45.635318+08:00"},{"id":141,"source_id":"93022c8938ce318f167277cfa65c29a7","target_id":"9552bd8a528207f18e4f3a1696f26a55","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-37","gmt_create":"2026-04-23T15:19:45.635763+08:00","gmt_modified":"2026-04-23T15:19:45.635763+08:00"},{"id":142,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"4aad38dfc00a0877bd965c3d0b3c280c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/auth.py#7-34","gmt_create":"2026-04-23T15:19:45.638941+08:00","gmt_modified":"2026-04-23T15:19:45.638941+08:00"},{"id":143,"source_id":"e0c0ca66b8b81cf66e078a7ab162c07f","target_id":"4aad38dfc00a0877bd965c3d0b3c280c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 7-34","gmt_create":"2026-04-23T15:19:45.639659+08:00","gmt_modified":"2026-04-23T15:19:45.63966+08:00"},{"id":144,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"9b10dac7dbbb1327afc8a525bf4bd0c3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#45-81","gmt_create":"2026-04-23T15:19:45.641388+08:00","gmt_modified":"2026-04-23T15:19:45.641388+08:00"},{"id":145,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"9b10dac7dbbb1327afc8a525bf4bd0c3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 45-81","gmt_create":"2026-04-23T15:19:45.641965+08:00","gmt_modified":"2026-04-23T15:19:45.641965+08:00"},{"id":146,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"69118807690ef351a9de910414d5e676","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/query.py#11-94","gmt_create":"2026-04-23T15:19:45.642904+08:00","gmt_modified":"2026-04-23T15:19:45.642904+08:00"},{"id":147,"source_id":"f301b79d833233ce39d350e82a71c938","target_id":"69118807690ef351a9de910414d5e676","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-94","gmt_create":"2026-04-23T15:19:45.643362+08:00","gmt_modified":"2026-04-23T15:19:45.643362+08:00"},{"id":148,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"212d822d207a4c0bd7825bbf20e188e9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#59-77","gmt_create":"2026-04-23T15:19:45.644135+08:00","gmt_modified":"2026-04-23T15:19:45.644135+08:00"},{"id":149,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"212d822d207a4c0bd7825bbf20e188e9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 59-77","gmt_create":"2026-04-23T15:19:45.644457+08:00","gmt_modified":"2026-04-23T15:19:45.644457+08:00"},{"id":150,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"b0777c7da17be89abb333c81c0dcf349","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#204-261","gmt_create":"2026-04-23T15:19:45.644935+08:00","gmt_modified":"2026-04-23T15:19:45.644935+08:00"},{"id":151,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"b0777c7da17be89abb333c81c0dcf349","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 204-261","gmt_create":"2026-04-23T15:19:45.645243+08:00","gmt_modified":"2026-04-23T15:19:45.645243+08:00"},{"id":152,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"26288877e8e1f6c4ff5aca12610b0218","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/citation.py#7-50","gmt_create":"2026-04-23T15:19:45.646072+08:00","gmt_modified":"2026-04-23T15:19:45.646072+08:00"},{"id":153,"source_id":"1a3336b4af8a39a055e912724338580c","target_id":"26288877e8e1f6c4ff5aca12610b0218","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 7-50","gmt_create":"2026-04-23T15:19:45.646445+08:00","gmt_modified":"2026-04-23T15:19:45.646445+08:00"},{"id":154,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"dbf5f8a57778cf6363e834081f3d771c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#327-359","gmt_create":"2026-04-23T15:19:45.647596+08:00","gmt_modified":"2026-04-23T15:19:45.647596+08:00"},{"id":155,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"dbf5f8a57778cf6363e834081f3d771c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 327-359","gmt_create":"2026-04-23T15:19:45.647935+08:00","gmt_modified":"2026-04-23T15:19:45.647935+08:00"},{"id":156,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"56e46969bdb790a5e8f333184b878d6d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#11-41","gmt_create":"2026-04-23T15:19:45.64941+08:00","gmt_modified":"2026-04-23T15:19:45.64941+08:00"},{"id":157,"source_id":"c59f8c276697a070dffc581fe94d809c","target_id":"56e46969bdb790a5e8f333184b878d6d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-41","gmt_create":"2026-04-23T15:19:45.649807+08:00","gmt_modified":"2026-04-23T15:19:45.649807+08:00"},{"id":158,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"4fb8856be3a581fe8303d11b2284ca29","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#11-55","gmt_create":"2026-04-23T15:19:45.650287+08:00","gmt_modified":"2026-04-23T15:19:45.650287+08:00"},{"id":159,"source_id":"b74caccb06844efcdb14d8324cff65c2","target_id":"4fb8856be3a581fe8303d11b2284ca29","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-55","gmt_create":"2026-04-23T15:19:45.650642+08:00","gmt_modified":"2026-04-23T15:19:45.650642+08:00"},{"id":160,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"fd541971cebf8a7c167d717f5c5d1ff6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#11-42","gmt_create":"2026-04-23T15:19:45.651088+08:00","gmt_modified":"2026-04-23T15:19:45.651088+08:00"},{"id":161,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"fd541971cebf8a7c167d717f5c5d1ff6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-42","gmt_create":"2026-04-23T15:19:45.651529+08:00","gmt_modified":"2026-04-23T15:19:45.651529+08:00"},{"id":162,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"b84f46f058847733347974841f613688","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#11-39","gmt_create":"2026-04-23T15:19:45.652087+08:00","gmt_modified":"2026-04-23T15:19:45.652087+08:00"},{"id":163,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"b84f46f058847733347974841f613688","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-39","gmt_create":"2026-04-23T15:19:45.65251+08:00","gmt_modified":"2026-04-23T15:19:45.65251+08:00"},{"id":164,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"1a2657244414b5681afded9565a86422","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#35-40","gmt_create":"2026-04-23T15:19:45.653858+08:00","gmt_modified":"2026-04-23T15:19:45.653858+08:00"},{"id":165,"source_id":"c59f8c276697a070dffc581fe94d809c","target_id":"1a2657244414b5681afded9565a86422","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 35-40","gmt_create":"2026-04-23T15:19:45.655814+08:00","gmt_modified":"2026-04-23T15:19:45.655814+08:00"},{"id":166,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"acd5a29be2bdd4ae251e10ca266ffe13","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#43-48","gmt_create":"2026-04-23T15:19:45.657411+08:00","gmt_modified":"2026-04-23T15:19:45.657411+08:00"},{"id":167,"source_id":"b74caccb06844efcdb14d8324cff65c2","target_id":"acd5a29be2bdd4ae251e10ca266ffe13","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 43-48","gmt_create":"2026-04-23T15:19:45.657941+08:00","gmt_modified":"2026-04-23T15:19:45.657942+08:00"},{"id":168,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"27a5e2dd1d197b2e3a45be41c57a6183","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#35","gmt_create":"2026-04-23T15:19:45.658596+08:00","gmt_modified":"2026-04-23T15:19:45.658596+08:00"},{"id":169,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"27a5e2dd1d197b2e3a45be41c57a6183","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 35","gmt_create":"2026-04-23T15:19:45.658966+08:00","gmt_modified":"2026-04-23T15:19:45.658966+08:00"},{"id":170,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"c43e8fc0c04c5ed2db7798d99c8c77b8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#34","gmt_create":"2026-04-23T15:19:45.659429+08:00","gmt_modified":"2026-04-23T15:19:45.659429+08:00"},{"id":171,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"c43e8fc0c04c5ed2db7798d99c8c77b8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 34","gmt_create":"2026-04-23T15:19:45.659763+08:00","gmt_modified":"2026-04-23T15:19:45.659763+08:00"},{"id":172,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"8868ab86034eecf40e80347ef8cbdebd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/auth.py#26-30","gmt_create":"2026-04-23T15:19:45.660181+08:00","gmt_modified":"2026-04-23T15:19:45.660181+08:00"},{"id":173,"source_id":"93022c8938ce318f167277cfa65c29a7","target_id":"8868ab86034eecf40e80347ef8cbdebd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 26-30","gmt_create":"2026-04-23T15:19:45.660491+08:00","gmt_modified":"2026-04-23T15:19:45.660491+08:00"},{"id":174,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"a50f983ec39bac67dff5df80f6dad837","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#59-60","gmt_create":"2026-04-23T15:19:45.660943+08:00","gmt_modified":"2026-04-23T15:19:45.660943+08:00"},{"id":175,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"a50f983ec39bac67dff5df80f6dad837","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 59-60","gmt_create":"2026-04-23T15:19:45.661271+08:00","gmt_modified":"2026-04-23T15:19:45.661271+08:00"},{"id":176,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"55f1628f1ab6f323710e367e12146b1a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#67-71","gmt_create":"2026-04-23T15:19:45.661702+08:00","gmt_modified":"2026-04-23T15:19:45.661702+08:00"},{"id":177,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"55f1628f1ab6f323710e367e12146b1a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 67-71","gmt_create":"2026-04-23T15:19:45.662055+08:00","gmt_modified":"2026-04-23T15:19:45.662055+08:00"},{"id":178,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"6ef6d32f97d7b50b7a4da541137423c0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/reports.py#23-27","gmt_create":"2026-04-23T15:19:45.662628+08:00","gmt_modified":"2026-04-23T15:19:45.662628+08:00"},{"id":179,"source_id":"58901c94d975d87e652a4dc6c8dda656","target_id":"6ef6d32f97d7b50b7a4da541137423c0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-27","gmt_create":"2026-04-23T15:19:45.662999+08:00","gmt_modified":"2026-04-23T15:19:45.662999+08:00"},{"id":180,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/scheduler.py","gmt_create":"2026-04-23T15:20:08.989793+08:00","gmt_modified":"2026-04-23T15:20:08.989793+08:00"},{"id":181,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"74040de652d5e57f548bb5c4adc3e1a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/citation_engine.py","gmt_create":"2026-04-23T15:20:08.990186+08:00","gmt_modified":"2026-04-23T15:20:08.990186+08:00"},{"id":182,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"8f973791233c698b3e64a4fb28a93d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/kimi.py","gmt_create":"2026-04-23T15:20:08.990539+08:00","gmt_modified":"2026-04-23T15:20:08.990539+08:00"},{"id":183,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"f642fc1c2f34e15572d9d98aa6c18813","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-23T15:20:08.990851+08:00","gmt_modified":"2026-04-23T15:20:08.990851+08:00"},{"id":184,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"a16cf42e9559523c4f96ca4c79f9488d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/base.py","gmt_create":"2026-04-23T15:20:08.991166+08:00","gmt_modified":"2026-04-23T15:20:08.991166+08:00"},{"id":185,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T15:20:08.991471+08:00","gmt_modified":"2026-04-23T15:20:08.991472+08:00"},{"id":186,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T15:20:08.991772+08:00","gmt_modified":"2026-04-23T15:20:08.991772+08:00"},{"id":187,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"b4a81ef789630d0af6a8d50859d01bf3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/citation_record.py","gmt_create":"2026-04-23T15:20:08.992186+08:00","gmt_modified":"2026-04-23T15:20:08.992186+08:00"},{"id":188,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"88d22de3b2a7419868e8ae19130d860c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/query.py","gmt_create":"2026-04-23T15:20:08.992542+08:00","gmt_modified":"2026-04-23T15:20:08.992542+08:00"},{"id":189,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"6b3d903205941aa9391dd90016e1102c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/queries.py","gmt_create":"2026-04-23T15:20:08.992879+08:00","gmt_modified":"2026-04-23T15:20:08.992879+08:00"},{"id":190,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"b0c428683c8a3e6922d90ca0d8c2736d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/database.py","gmt_create":"2026-04-23T15:20:08.997487+08:00","gmt_modified":"2026-04-23T15:20:08.997487+08:00"},{"id":191,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T15:20:08.998695+08:00","gmt_modified":"2026-04-23T15:20:08.998696+08:00"},{"id":192,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"9228ff67d4c757a85d9421b71f4b29f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/main.py","gmt_create":"2026-04-23T15:20:08.999402+08:00","gmt_modified":"2026-04-23T15:20:08.999402+08:00"},{"id":193,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"b2f0d46a31a5441594f2e777365fc156","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_scheduler.py","gmt_create":"2026-04-23T15:20:09.000067+08:00","gmt_modified":"2026-04-23T15:20:09.000067+08:00"},{"id":194,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"0613e76b9679be7f998fb8fd8056e686","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_queries.py","gmt_create":"2026-04-23T15:20:09.000413+08:00","gmt_modified":"2026-04-23T15:20:09.000413+08:00"},{"id":195,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"096856da621e23e78422a15e2bfce1f1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#13-22","gmt_create":"2026-04-23T15:20:09.000893+08:00","gmt_modified":"2026-04-23T15:20:09.000893+08:00"},{"id":196,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"096856da621e23e78422a15e2bfce1f1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-22","gmt_create":"2026-04-23T15:20:09.00176+08:00","gmt_modified":"2026-04-23T15:20:09.00176+08:00"},{"id":197,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"e230904202fcf7a861c6f49b84f9f863","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#25-95","gmt_create":"2026-04-23T15:20:09.003004+08:00","gmt_modified":"2026-04-23T15:20:09.003004+08:00"},{"id":198,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"e230904202fcf7a861c6f49b84f9f863","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-95","gmt_create":"2026-04-23T15:20:09.003771+08:00","gmt_modified":"2026-04-23T15:20:09.003771+08:00"},{"id":199,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"309607c54b12a6340edc086ffb4737c9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#148-309","gmt_create":"2026-04-23T15:20:09.005186+08:00","gmt_modified":"2026-04-23T15:20:09.005186+08:00"},{"id":200,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"309607c54b12a6340edc086ffb4737c9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 148-309","gmt_create":"2026-04-23T15:20:09.00622+08:00","gmt_modified":"2026-04-23T15:20:09.00622+08:00"},{"id":201,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"4fb8856be3a581fe8303d11b2284ca29","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#11-55","gmt_create":"2026-04-23T15:20:09.006997+08:00","gmt_modified":"2026-04-23T15:20:09.006997+08:00"},{"id":202,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"b84f46f058847733347974841f613688","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#11-39","gmt_create":"2026-04-23T15:20:09.007995+08:00","gmt_modified":"2026-04-23T15:20:09.007995+08:00"},{"id":203,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"fd541971cebf8a7c167d717f5c5d1ff6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#11-42","gmt_create":"2026-04-23T15:20:09.009222+08:00","gmt_modified":"2026-04-23T15:20:09.009222+08:00"},{"id":204,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"d7c319a04abbc6704da53107e07dd8e7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#12-130","gmt_create":"2026-04-23T15:20:09.010245+08:00","gmt_modified":"2026-04-23T15:20:09.010245+08:00"},{"id":205,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"d7c319a04abbc6704da53107e07dd8e7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-130","gmt_create":"2026-04-23T15:20:09.011044+08:00","gmt_modified":"2026-04-23T15:20:09.011044+08:00"},{"id":206,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"9bfc041fe426da2eb78353827e8d9163","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#1-29","gmt_create":"2026-04-23T15:20:09.012195+08:00","gmt_modified":"2026-04-23T15:20:09.012195+08:00"},{"id":207,"source_id":"b0c428683c8a3e6922d90ca0d8c2736d","target_id":"9bfc041fe426da2eb78353827e8d9163","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-29","gmt_create":"2026-04-23T15:20:09.01291+08:00","gmt_modified":"2026-04-23T15:20:09.012911+08:00"},{"id":208,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"ad67863041d9eea2b0fb542b5aa33aca","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#4-18","gmt_create":"2026-04-23T15:20:09.013886+08:00","gmt_modified":"2026-04-23T15:20:09.013886+08:00"},{"id":209,"source_id":"a16cf42e9559523c4f96ca4c79f9488d","target_id":"ad67863041d9eea2b0fb542b5aa33aca","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 4-18","gmt_create":"2026-04-23T15:20:09.014746+08:00","gmt_modified":"2026-04-23T15:20:09.014746+08:00"},{"id":210,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"eecf9581dbaa0a515cf11514175e7ef9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#11-206","gmt_create":"2026-04-23T15:20:09.015594+08:00","gmt_modified":"2026-04-23T15:20:09.015594+08:00"},{"id":211,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"eecf9581dbaa0a515cf11514175e7ef9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-206","gmt_create":"2026-04-23T15:20:09.016313+08:00","gmt_modified":"2026-04-23T15:20:09.016313+08:00"},{"id":212,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"5563c29185326a59be61ee0a6eec4463","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#11-205","gmt_create":"2026-04-23T15:20:09.017693+08:00","gmt_modified":"2026-04-23T15:20:09.017693+08:00"},{"id":213,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"5563c29185326a59be61ee0a6eec4463","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-205","gmt_create":"2026-04-23T15:20:09.018896+08:00","gmt_modified":"2026-04-23T15:20:09.018896+08:00"},{"id":214,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"2d35e1345d25020f8e7ac1318db06f7b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#30-90","gmt_create":"2026-04-23T15:20:09.025147+08:00","gmt_modified":"2026-04-23T15:20:09.025147+08:00"},{"id":215,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"2d35e1345d25020f8e7ac1318db06f7b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 30-90","gmt_create":"2026-04-23T15:20:09.02579+08:00","gmt_modified":"2026-04-23T15:20:09.02579+08:00"},{"id":216,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"91bda120c0ab69e0e7103a1c89c82424","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#95-172","gmt_create":"2026-04-23T15:20:09.026853+08:00","gmt_modified":"2026-04-23T15:20:09.026853+08:00"},{"id":217,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"91bda120c0ab69e0e7103a1c89c82424","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 95-172","gmt_create":"2026-04-23T15:20:09.027566+08:00","gmt_modified":"2026-04-23T15:20:09.027566+08:00"},{"id":218,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"160b5326537d25444c40a459a01e79c6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#159-234","gmt_create":"2026-04-23T15:20:09.028202+08:00","gmt_modified":"2026-04-23T15:20:09.028202+08:00"},{"id":219,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"160b5326537d25444c40a459a01e79c6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 159-234","gmt_create":"2026-04-23T15:20:09.028744+08:00","gmt_modified":"2026-04-23T15:20:09.028744+08:00"},{"id":220,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"6712051c987e10a7c26b089063367398","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#24-31","gmt_create":"2026-04-23T15:20:09.029494+08:00","gmt_modified":"2026-04-23T15:20:09.029494+08:00"},{"id":221,"source_id":"b74caccb06844efcdb14d8324cff65c2","target_id":"6712051c987e10a7c26b089063367398","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-31","gmt_create":"2026-04-23T15:20:09.030084+08:00","gmt_modified":"2026-04-23T15:20:09.030084+08:00"},{"id":222,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"ac5982063da5f04315f3e82a0d653902","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#24-32","gmt_create":"2026-04-23T15:20:09.030828+08:00","gmt_modified":"2026-04-23T15:20:09.030828+08:00"},{"id":223,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"ac5982063da5f04315f3e82a0d653902","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-32","gmt_create":"2026-04-23T15:20:09.031632+08:00","gmt_modified":"2026-04-23T15:20:09.031632+08:00"},{"id":224,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"06ed912983db33bb8aca162fed68282b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#24-29","gmt_create":"2026-04-23T15:20:09.032417+08:00","gmt_modified":"2026-04-23T15:20:09.032417+08:00"},{"id":225,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"06ed912983db33bb8aca162fed68282b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-29","gmt_create":"2026-04-23T15:20:09.032976+08:00","gmt_modified":"2026-04-23T15:20:09.032976+08:00"},{"id":226,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"b624be78e3bffd876e403cff2557b088","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#19-120","gmt_create":"2026-04-23T15:20:09.037331+08:00","gmt_modified":"2026-04-23T15:20:09.037331+08:00"},{"id":227,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"b624be78e3bffd876e403cff2557b088","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 19-120","gmt_create":"2026-04-23T15:20:09.038413+08:00","gmt_modified":"2026-04-23T15:20:09.038413+08:00"},{"id":228,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"40d0b169aad65c8bb38077deb052fc72","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#33-125","gmt_create":"2026-04-23T15:20:09.040261+08:00","gmt_modified":"2026-04-23T15:20:09.040261+08:00"},{"id":229,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"40d0b169aad65c8bb38077deb052fc72","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-125","gmt_create":"2026-04-23T15:20:09.04098+08:00","gmt_modified":"2026-04-23T15:20:09.04098+08:00"},{"id":230,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"8b5af998852596e1e08b0e0216bc4b93","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#33-124","gmt_create":"2026-04-23T15:20:09.041526+08:00","gmt_modified":"2026-04-23T15:20:09.041526+08:00"},{"id":231,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"8b5af998852596e1e08b0e0216bc4b93","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-124","gmt_create":"2026-04-23T15:20:09.041834+08:00","gmt_modified":"2026-04-23T15:20:09.041834+08:00"},{"id":232,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"fe70b1fef9f36e73d26d84987e927c7a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#15-86","gmt_create":"2026-04-23T15:20:09.04598+08:00","gmt_modified":"2026-04-23T15:20:09.04598+08:00"},{"id":233,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"fe70b1fef9f36e73d26d84987e927c7a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 15-86","gmt_create":"2026-04-23T15:20:09.046352+08:00","gmt_modified":"2026-04-23T15:20:09.046352+08:00"},{"id":234,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"e1d2b027678118df4d0a50ce9269271d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#42-90","gmt_create":"2026-04-23T15:20:09.050041+08:00","gmt_modified":"2026-04-23T15:20:09.050041+08:00"},{"id":235,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"e1d2b027678118df4d0a50ce9269271d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 42-90","gmt_create":"2026-04-23T15:20:09.050351+08:00","gmt_modified":"2026-04-23T15:20:09.050351+08:00"},{"id":236,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"e79301a4bc26aa6b49f3f52c3182c3f9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#175-234","gmt_create":"2026-04-23T15:20:09.051815+08:00","gmt_modified":"2026-04-23T15:20:09.051815+08:00"},{"id":237,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"e79301a4bc26aa6b49f3f52c3182c3f9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 175-234","gmt_create":"2026-04-23T15:20:09.052165+08:00","gmt_modified":"2026-04-23T15:20:09.052166+08:00"},{"id":238,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"1e85186eded8743ff5f231df4aa6df3f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#21-48","gmt_create":"2026-04-23T15:20:09.052615+08:00","gmt_modified":"2026-04-23T15:20:09.052615+08:00"},{"id":239,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"1e85186eded8743ff5f231df4aa6df3f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 21-48","gmt_create":"2026-04-23T15:20:09.052947+08:00","gmt_modified":"2026-04-23T15:20:09.052947+08:00"},{"id":240,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"e2b1718570fb714b2f4342221898ab30","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#21-48","gmt_create":"2026-04-23T15:20:09.053449+08:00","gmt_modified":"2026-04-23T15:20:09.053449+08:00"},{"id":241,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"e2b1718570fb714b2f4342221898ab30","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 21-48","gmt_create":"2026-04-23T15:20:09.053892+08:00","gmt_modified":"2026-04-23T15:20:09.053892+08:00"},{"id":242,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"e4a49039dae40b7433896c81737fcf8c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#7-14","gmt_create":"2026-04-23T15:20:09.05437+08:00","gmt_modified":"2026-04-23T15:20:09.05437+08:00"},{"id":243,"source_id":"9ff19022ef915615911280e3c49ed44b","target_id":"e4a49039dae40b7433896c81737fcf8c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 7-14","gmt_create":"2026-04-23T15:20:09.054841+08:00","gmt_modified":"2026-04-23T15:20:09.054841+08:00"},{"id":244,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"2ee31d68c409e96e951f6cfa7027bca7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#24-42","gmt_create":"2026-04-23T15:20:09.055328+08:00","gmt_modified":"2026-04-23T15:20:09.055328+08:00"},{"id":245,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"2ee31d68c409e96e951f6cfa7027bca7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-42","gmt_create":"2026-04-23T15:20:09.055781+08:00","gmt_modified":"2026-04-23T15:20:09.055781+08:00"},{"id":246,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"79d6e169e36e6b7493898b5f863e07dc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#152-157","gmt_create":"2026-04-23T15:20:09.056898+08:00","gmt_modified":"2026-04-23T15:20:09.056898+08:00"},{"id":247,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"79d6e169e36e6b7493898b5f863e07dc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 152-157","gmt_create":"2026-04-23T15:20:09.057188+08:00","gmt_modified":"2026-04-23T15:20:09.057188+08:00"},{"id":248,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"1552315d5fb9f6d7aba5f7e8fa93a975","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#6-10","gmt_create":"2026-04-23T15:20:09.058217+08:00","gmt_modified":"2026-04-23T15:20:09.058217+08:00"},{"id":249,"source_id":"b0c428683c8a3e6922d90ca0d8c2736d","target_id":"1552315d5fb9f6d7aba5f7e8fa93a975","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 6-10","gmt_create":"2026-04-23T15:20:09.058503+08:00","gmt_modified":"2026-04-23T15:20:09.058503+08:00"},{"id":250,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"599cca7536cae4a7e0ae93043c476a7f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_queries.py#10-154","gmt_create":"2026-04-23T15:20:09.058947+08:00","gmt_modified":"2026-04-23T15:20:09.058947+08:00"},{"id":251,"source_id":"0613e76b9679be7f998fb8fd8056e686","target_id":"599cca7536cae4a7e0ae93043c476a7f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-154","gmt_create":"2026-04-23T15:20:09.059242+08:00","gmt_modified":"2026-04-23T15:20:09.059242+08:00"},{"id":252,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"2ec3d45edd6221e0cedf7f8887fe090d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_scheduler.py#17-123","gmt_create":"2026-04-23T15:20:09.059776+08:00","gmt_modified":"2026-04-23T15:20:09.059776+08:00"},{"id":253,"source_id":"b2f0d46a31a5441594f2e777365fc156","target_id":"2ec3d45edd6221e0cedf7f8887fe090d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 17-123","gmt_create":"2026-04-23T15:20:09.060064+08:00","gmt_modified":"2026-04-23T15:20:09.060064+08:00"},{"id":254,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"99fe1b288fd41daa86c2dfbab819abf0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/__init__.py","gmt_create":"2026-04-23T15:21:46.707277+08:00","gmt_modified":"2026-04-23T15:21:46.707277+08:00"},{"id":255,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"c59f8c276697a070dffc581fe94d809c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/user.py","gmt_create":"2026-04-23T15:21:46.707879+08:00","gmt_modified":"2026-04-23T15:21:46.707879+08:00"},{"id":256,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T15:21:46.708322+08:00","gmt_modified":"2026-04-23T15:21:46.708322+08:00"},{"id":257,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T15:21:46.708702+08:00","gmt_modified":"2026-04-23T15:21:46.708702+08:00"},{"id":258,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"b4a81ef789630d0af6a8d50859d01bf3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/citation_record.py","gmt_create":"2026-04-23T15:21:46.709093+08:00","gmt_modified":"2026-04-23T15:21:46.709093+08:00"},{"id":259,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"bceca00463fe55d3bcafda728f97f723","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/subscription.py","gmt_create":"2026-04-23T15:21:46.709712+08:00","gmt_modified":"2026-04-23T15:21:46.709713+08:00"},{"id":260,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"b0c428683c8a3e6922d90ca0d8c2736d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/database.py","gmt_create":"2026-04-23T15:21:46.710101+08:00","gmt_modified":"2026-04-23T15:21:46.710101+08:00"},{"id":261,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"d4f95fcf50683b5bf6167c7d2a6b126d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/alembic/versions/488d0bd5ab01_initial_migration.py","gmt_create":"2026-04-23T15:21:46.710429+08:00","gmt_modified":"2026-04-23T15:21:46.710429+08:00"},{"id":262,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"f301b79d833233ce39d350e82a71c938","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/schemas/query.py","gmt_create":"2026-04-23T15:21:46.710829+08:00","gmt_modified":"2026-04-23T15:21:46.710829+08:00"},{"id":263,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"1a3336b4af8a39a055e912724338580c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/schemas/citation.py","gmt_create":"2026-04-23T15:21:46.711181+08:00","gmt_modified":"2026-04-23T15:21:46.711181+08:00"},{"id":264,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"88d22de3b2a7419868e8ae19130d860c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/query.py","gmt_create":"2026-04-23T15:21:46.711568+08:00","gmt_modified":"2026-04-23T15:21:46.711568+08:00"},{"id":265,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"6b3d903205941aa9391dd90016e1102c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/queries.py","gmt_create":"2026-04-23T15:21:46.711965+08:00","gmt_modified":"2026-04-23T15:21:46.711965+08:00"},{"id":266,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"04e3926c080e795713bff683e7dc9d3e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/citation.py","gmt_create":"2026-04-23T15:21:46.712296+08:00","gmt_modified":"2026-04-23T15:21:46.712296+08:00"},{"id":267,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T15:21:46.712792+08:00","gmt_modified":"2026-04-23T15:21:46.712792+08:00"},{"id":268,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T15:21:46.713121+08:00","gmt_modified":"2026-04-23T15:21:46.713121+08:00"},{"id":269,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"9d08667997a868fc07c9b4e328e44224","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/deps.py","gmt_create":"2026-04-23T15:21:46.713538+08:00","gmt_modified":"2026-04-23T15:21:46.713538+08:00"},{"id":270,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"56e46969bdb790a5e8f333184b878d6d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#11-41","gmt_create":"2026-04-23T15:21:46.71408+08:00","gmt_modified":"2026-04-23T15:21:46.71408+08:00"},{"id":271,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"4fb8856be3a581fe8303d11b2284ca29","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#11-55","gmt_create":"2026-04-23T15:21:46.714746+08:00","gmt_modified":"2026-04-23T15:21:46.714746+08:00"},{"id":272,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"b84f46f058847733347974841f613688","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#11-39","gmt_create":"2026-04-23T15:21:46.715399+08:00","gmt_modified":"2026-04-23T15:21:46.7154+08:00"},{"id":273,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"fd541971cebf8a7c167d717f5c5d1ff6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#11-42","gmt_create":"2026-04-23T15:21:46.716178+08:00","gmt_modified":"2026-04-23T15:21:46.716178+08:00"},{"id":274,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"4d323bf0aaf4078f09726dc0890e5955","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/subscription.py#11-37","gmt_create":"2026-04-23T15:21:46.717324+08:00","gmt_modified":"2026-04-23T15:21:46.717324+08:00"},{"id":275,"source_id":"bceca00463fe55d3bcafda728f97f723","target_id":"4d323bf0aaf4078f09726dc0890e5955","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-37","gmt_create":"2026-04-23T15:21:46.718049+08:00","gmt_modified":"2026-04-23T15:21:46.71805+08:00"},{"id":276,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"9bfc041fe426da2eb78353827e8d9163","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#1-29","gmt_create":"2026-04-23T15:21:46.718816+08:00","gmt_modified":"2026-04-23T15:21:46.718816+08:00"},{"id":277,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"4cef9e740b6feb68c6bd22b660c47320","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#1-123","gmt_create":"2026-04-23T15:21:46.719468+08:00","gmt_modified":"2026-04-23T15:21:46.719468+08:00"},{"id":278,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"4cef9e740b6feb68c6bd22b660c47320","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-123","gmt_create":"2026-04-23T15:21:46.720008+08:00","gmt_modified":"2026-04-23T15:21:46.720008+08:00"},{"id":279,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"121203f7f9f539ffb1456c3f5cdfd842","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#1-359","gmt_create":"2026-04-23T15:21:46.720615+08:00","gmt_modified":"2026-04-23T15:21:46.720615+08:00"},{"id":280,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"121203f7f9f539ffb1456c3f5cdfd842","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-359","gmt_create":"2026-04-23T15:21:46.721095+08:00","gmt_modified":"2026-04-23T15:21:46.721095+08:00"},{"id":281,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"10d1e37bdc9f353c189b7a2fe79dc85e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#1-86","gmt_create":"2026-04-23T15:21:46.721634+08:00","gmt_modified":"2026-04-23T15:21:46.721634+08:00"},{"id":282,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"10d1e37bdc9f353c189b7a2fe79dc85e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-86","gmt_create":"2026-04-23T15:21:46.722019+08:00","gmt_modified":"2026-04-23T15:21:46.722019+08:00"},{"id":283,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"cbd0101fa84d957bcb1baaa623c6b31c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#1-78","gmt_create":"2026-04-23T15:21:46.722621+08:00","gmt_modified":"2026-04-23T15:21:46.722621+08:00"},{"id":284,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"cbd0101fa84d957bcb1baaa623c6b31c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-78","gmt_create":"2026-04-23T15:21:46.723064+08:00","gmt_modified":"2026-04-23T15:21:46.723064+08:00"},{"id":285,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"afe4138895492c26aac5c0120ef46cd8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/__init__.py#1-14","gmt_create":"2026-04-23T15:21:46.72357+08:00","gmt_modified":"2026-04-23T15:21:46.72357+08:00"},{"id":286,"source_id":"99fe1b288fd41daa86c2dfbab819abf0","target_id":"afe4138895492c26aac5c0120ef46cd8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-14","gmt_create":"2026-04-23T15:21:46.723873+08:00","gmt_modified":"2026-04-23T15:21:46.723873+08:00"},{"id":287,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"4d11ddf7abb8076d81b30c4315786f9a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#21-128","gmt_create":"2026-04-23T15:21:46.726415+08:00","gmt_modified":"2026-04-23T15:21:46.726416+08:00"},{"id":288,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"4d11ddf7abb8076d81b30c4315786f9a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 21-128","gmt_create":"2026-04-23T15:21:46.726829+08:00","gmt_modified":"2026-04-23T15:21:46.726829+08:00"},{"id":289,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"e454b4a54500bd81e7599e6ec97bf12b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#23-37","gmt_create":"2026-04-23T15:21:46.735019+08:00","gmt_modified":"2026-04-23T15:21:46.735019+08:00"},{"id":290,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"e454b4a54500bd81e7599e6ec97bf12b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-37","gmt_create":"2026-04-23T15:21:46.735734+08:00","gmt_modified":"2026-04-23T15:21:46.735734+08:00"},{"id":291,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"1965adf7cfc65447e3c1ae21fbf6d1c5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#39-59","gmt_create":"2026-04-23T15:21:46.737007+08:00","gmt_modified":"2026-04-23T15:21:46.737007+08:00"},{"id":292,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"1965adf7cfc65447e3c1ae21fbf6d1c5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 39-59","gmt_create":"2026-04-23T15:21:46.744358+08:00","gmt_modified":"2026-04-23T15:21:46.744358+08:00"},{"id":293,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"c730faefb34bb87c40c5f636b4ff7f41","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#80-94","gmt_create":"2026-04-23T15:21:46.747533+08:00","gmt_modified":"2026-04-23T15:21:46.747534+08:00"},{"id":294,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"c730faefb34bb87c40c5f636b4ff7f41","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 80-94","gmt_create":"2026-04-23T15:21:46.748811+08:00","gmt_modified":"2026-04-23T15:21:46.748811+08:00"},{"id":295,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"b9978c3eccea3ef566b003216e5047af","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#61-78","gmt_create":"2026-04-23T15:21:46.751629+08:00","gmt_modified":"2026-04-23T15:21:46.751629+08:00"},{"id":296,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"b9978c3eccea3ef566b003216e5047af","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 61-78","gmt_create":"2026-04-23T15:21:46.752497+08:00","gmt_modified":"2026-04-23T15:21:46.752497+08:00"},{"id":297,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"eb6ff4361d7413b57f1f70b1ec2f0c94","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#96-111","gmt_create":"2026-04-23T15:21:46.753732+08:00","gmt_modified":"2026-04-23T15:21:46.753732+08:00"},{"id":298,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"eb6ff4361d7413b57f1f70b1ec2f0c94","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-111","gmt_create":"2026-04-23T15:21:46.754523+08:00","gmt_modified":"2026-04-23T15:21:46.754523+08:00"},{"id":299,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"1a2657244414b5681afded9565a86422","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#35-40","gmt_create":"2026-04-23T15:21:46.755683+08:00","gmt_modified":"2026-04-23T15:21:46.755683+08:00"},{"id":300,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"acd5a29be2bdd4ae251e10ca266ffe13","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#43-48","gmt_create":"2026-04-23T15:21:46.756979+08:00","gmt_modified":"2026-04-23T15:21:46.756979+08:00"},{"id":301,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"f6c9f1b4e8646c366a31426a4537675d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#36-38","gmt_create":"2026-04-23T15:21:46.75809+08:00","gmt_modified":"2026-04-23T15:21:46.75809+08:00"},{"id":302,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"f6c9f1b4e8646c366a31426a4537675d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 36-38","gmt_create":"2026-04-23T15:21:46.759234+08:00","gmt_modified":"2026-04-23T15:21:46.759234+08:00"},{"id":303,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"a2adbf02c71e4eb2cf1f120e1a2ff517","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#37-41","gmt_create":"2026-04-23T15:21:46.760054+08:00","gmt_modified":"2026-04-23T15:21:46.760054+08:00"},{"id":304,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"a2adbf02c71e4eb2cf1f120e1a2ff517","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 37-41","gmt_create":"2026-04-23T15:21:46.761257+08:00","gmt_modified":"2026-04-23T15:21:46.761257+08:00"},{"id":305,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"69118807690ef351a9de910414d5e676","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/query.py#11-94","gmt_create":"2026-04-23T15:21:46.76204+08:00","gmt_modified":"2026-04-23T15:21:46.762041+08:00"},{"id":306,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"26288877e8e1f6c4ff5aca12610b0218","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/citation.py#7-50","gmt_create":"2026-04-23T15:21:46.763512+08:00","gmt_modified":"2026-04-23T15:21:46.763512+08:00"},{"id":307,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"0907fc2974ec31c23aaaef02076700a1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#25-33","gmt_create":"2026-04-23T15:21:46.764956+08:00","gmt_modified":"2026-04-23T15:21:46.764956+08:00"},{"id":308,"source_id":"c59f8c276697a070dffc581fe94d809c","target_id":"0907fc2974ec31c23aaaef02076700a1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-33","gmt_create":"2026-04-23T15:21:46.766604+08:00","gmt_modified":"2026-04-23T15:21:46.766605+08:00"},{"id":309,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"842f74e2cc054608242e93fbefd96b45","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#32-40","gmt_create":"2026-04-23T15:21:46.767787+08:00","gmt_modified":"2026-04-23T15:21:46.767787+08:00"},{"id":310,"source_id":"b74caccb06844efcdb14d8324cff65c2","target_id":"842f74e2cc054608242e93fbefd96b45","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 32-40","gmt_create":"2026-04-23T15:21:46.769407+08:00","gmt_modified":"2026-04-23T15:21:46.769407+08:00"},{"id":311,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"aed9e839038c45e6ce2023c4e05adb76","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#27-32","gmt_create":"2026-04-23T15:21:46.770612+08:00","gmt_modified":"2026-04-23T15:21:46.770612+08:00"},{"id":312,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"aed9e839038c45e6ce2023c4e05adb76","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 27-32","gmt_create":"2026-04-23T15:21:46.771344+08:00","gmt_modified":"2026-04-23T15:21:46.771345+08:00"},{"id":313,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"2181318c993526c86458f5eef134aed6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#62-77","gmt_create":"2026-04-23T15:21:46.77237+08:00","gmt_modified":"2026-04-23T15:21:46.77237+08:00"},{"id":314,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"2181318c993526c86458f5eef134aed6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 62-77","gmt_create":"2026-04-23T15:21:46.773284+08:00","gmt_modified":"2026-04-23T15:21:46.773284+08:00"},{"id":315,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"a817488dc968d761a8977fb5bb8d01a2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#45-129","gmt_create":"2026-04-23T15:21:46.774203+08:00","gmt_modified":"2026-04-23T15:21:46.774203+08:00"},{"id":316,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"a817488dc968d761a8977fb5bb8d01a2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 45-129","gmt_create":"2026-04-23T15:21:46.775081+08:00","gmt_modified":"2026-04-23T15:21:46.775081+08:00"},{"id":317,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"fe70b1fef9f36e73d26d84987e927c7a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#15-86","gmt_create":"2026-04-23T15:21:46.775898+08:00","gmt_modified":"2026-04-23T15:21:46.775898+08:00"},{"id":318,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"d20fc729a5d3986b1c077f9e07ece9c4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#7","gmt_create":"2026-04-23T15:21:46.777494+08:00","gmt_modified":"2026-04-23T15:21:46.777494+08:00"},{"id":319,"source_id":"9ff19022ef915615911280e3c49ed44b","target_id":"d20fc729a5d3986b1c077f9e07ece9c4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 7","gmt_create":"2026-04-23T15:21:46.778103+08:00","gmt_modified":"2026-04-23T15:21:46.778103+08:00"},{"id":320,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"ea655c6d147bc98beb42955d437260cc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#1-23","gmt_create":"2026-04-23T15:21:46.779313+08:00","gmt_modified":"2026-04-23T15:21:46.779314+08:00"},{"id":321,"source_id":"9ff19022ef915615911280e3c49ed44b","target_id":"ea655c6d147bc98beb42955d437260cc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-23","gmt_create":"2026-04-23T15:21:46.780075+08:00","gmt_modified":"2026-04-23T15:21:46.780075+08:00"},{"id":322,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"37868a5af96edcdad149caf9a184435a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#42-85","gmt_create":"2026-04-23T15:21:46.781141+08:00","gmt_modified":"2026-04-23T15:21:46.781141+08:00"},{"id":323,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"37868a5af96edcdad149caf9a184435a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 42-85","gmt_create":"2026-04-23T15:21:46.781803+08:00","gmt_modified":"2026-04-23T15:21:46.781803+08:00"},{"id":324,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"601b981b00d93b941843f046a163d5a3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/query.py#18-33","gmt_create":"2026-04-23T15:21:46.783498+08:00","gmt_modified":"2026-04-23T15:21:46.783498+08:00"},{"id":325,"source_id":"f301b79d833233ce39d350e82a71c938","target_id":"601b981b00d93b941843f046a163d5a3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 18-33","gmt_create":"2026-04-23T15:21:46.784342+08:00","gmt_modified":"2026-04-23T15:21:46.784343+08:00"},{"id":326,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"0ef1efea889dba3e1f299626df479571","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/conftest.py","gmt_create":"2026-04-23T15:22:16.010116+08:00","gmt_modified":"2026-04-23T15:22:16.010116+08:00"},{"id":327,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"389d631bc6c7111ba411b0b79fca455e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_auth.py","gmt_create":"2026-04-23T15:22:16.010568+08:00","gmt_modified":"2026-04-23T15:22:16.010568+08:00"},{"id":328,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"80a0429cc47931de27ddb17a62b8dd9c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_business_flow.py","gmt_create":"2026-04-23T15:22:16.010916+08:00","gmt_modified":"2026-04-23T15:22:16.010916+08:00"},{"id":329,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"b07a4fb9cecbbd66a6910ccbc7651f19","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_citation_engine.py","gmt_create":"2026-04-23T15:22:16.011244+08:00","gmt_modified":"2026-04-23T15:22:16.011244+08:00"},{"id":330,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"42ff5383133d176cec9eb88682483be3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_citations.py","gmt_create":"2026-04-23T15:22:16.011658+08:00","gmt_modified":"2026-04-23T15:22:16.011658+08:00"},{"id":331,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"0613e76b9679be7f998fb8fd8056e686","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_queries.py","gmt_create":"2026-04-23T15:22:16.01198+08:00","gmt_modified":"2026-04-23T15:22:16.01198+08:00"},{"id":332,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"b2f0d46a31a5441594f2e777365fc156","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_scheduler.py","gmt_create":"2026-04-23T15:22:16.012353+08:00","gmt_modified":"2026-04-23T15:22:16.012353+08:00"},{"id":333,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"9228ff67d4c757a85d9421b71f4b29f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/main.py","gmt_create":"2026-04-23T15:22:16.012683+08:00","gmt_modified":"2026-04-23T15:22:16.012683+08:00"},{"id":334,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"9d08667997a868fc07c9b4e328e44224","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/deps.py","gmt_create":"2026-04-23T15:22:16.013025+08:00","gmt_modified":"2026-04-23T15:22:16.013025+08:00"},{"id":335,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"4d2f3847b7c10634733118b70a1aea0b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/auth.py","gmt_create":"2026-04-23T15:22:16.013366+08:00","gmt_modified":"2026-04-23T15:22:16.013366+08:00"},{"id":336,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"74040de652d5e57f548bb5c4adc3e1a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/citation_engine.py","gmt_create":"2026-04-23T15:22:16.013707+08:00","gmt_modified":"2026-04-23T15:22:16.013707+08:00"},{"id":337,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/scheduler.py","gmt_create":"2026-04-23T15:22:16.014055+08:00","gmt_modified":"2026-04-23T15:22:16.014055+08:00"},{"id":338,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"93022c8938ce318f167277cfa65c29a7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/auth.py","gmt_create":"2026-04-23T15:22:16.014367+08:00","gmt_modified":"2026-04-23T15:22:16.014367+08:00"},{"id":339,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T15:22:16.014846+08:00","gmt_modified":"2026-04-23T15:22:16.014847+08:00"},{"id":340,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"6b3d903205941aa9391dd90016e1102c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/queries.py","gmt_create":"2026-04-23T15:22:16.015294+08:00","gmt_modified":"2026-04-23T15:22:16.015294+08:00"},{"id":341,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"b0c428683c8a3e6922d90ca0d8c2736d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/database.py","gmt_create":"2026-04-23T15:22:16.015703+08:00","gmt_modified":"2026-04-23T15:22:16.015703+08:00"},{"id":342,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T15:22:16.016102+08:00","gmt_modified":"2026-04-23T15:22:16.016102+08:00"},{"id":343,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"290df8332b3d104e5ea8d71dc39315b5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/conftest.py#1-123","gmt_create":"2026-04-23T15:22:16.016716+08:00","gmt_modified":"2026-04-23T15:22:16.016716+08:00"},{"id":344,"source_id":"0ef1efea889dba3e1f299626df479571","target_id":"290df8332b3d104e5ea8d71dc39315b5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-123","gmt_create":"2026-04-23T15:22:16.017503+08:00","gmt_modified":"2026-04-23T15:22:16.017503+08:00"},{"id":345,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"c2747ca16b879bca0f68955534c3c4fc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#1-48","gmt_create":"2026-04-23T15:22:16.018574+08:00","gmt_modified":"2026-04-23T15:22:16.018574+08:00"},{"id":346,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"c2747ca16b879bca0f68955534c3c4fc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-48","gmt_create":"2026-04-23T15:22:16.019099+08:00","gmt_modified":"2026-04-23T15:22:16.019099+08:00"},{"id":347,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"76e6c0abb49fec57cac4892837a143c9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/deps.py#1-43","gmt_create":"2026-04-23T15:22:16.019894+08:00","gmt_modified":"2026-04-23T15:22:16.019894+08:00"},{"id":348,"source_id":"9d08667997a868fc07c9b4e328e44224","target_id":"76e6c0abb49fec57cac4892837a143c9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-43","gmt_create":"2026-04-23T15:22:16.020577+08:00","gmt_modified":"2026-04-23T15:22:16.020577+08:00"},{"id":349,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"f66d9907b467b110c638bd527efd95c5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/auth.py#1-43","gmt_create":"2026-04-23T15:22:16.021276+08:00","gmt_modified":"2026-04-23T15:22:16.021276+08:00"},{"id":350,"source_id":"93022c8938ce318f167277cfa65c29a7","target_id":"f66d9907b467b110c638bd527efd95c5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-43","gmt_create":"2026-04-23T15:22:16.021841+08:00","gmt_modified":"2026-04-23T15:22:16.021841+08:00"},{"id":351,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"10d1e37bdc9f353c189b7a2fe79dc85e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#1-86","gmt_create":"2026-04-23T15:22:16.022305+08:00","gmt_modified":"2026-04-23T15:22:16.022305+08:00"},{"id":352,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"cbd0101fa84d957bcb1baaa623c6b31c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#1-78","gmt_create":"2026-04-23T15:22:16.022933+08:00","gmt_modified":"2026-04-23T15:22:16.022933+08:00"},{"id":353,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"116584ea9162c1bc05911f39f9ef82b6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#1-309","gmt_create":"2026-04-23T15:22:16.023491+08:00","gmt_modified":"2026-04-23T15:22:16.023491+08:00"},{"id":354,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"116584ea9162c1bc05911f39f9ef82b6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-309","gmt_create":"2026-04-23T15:22:16.023827+08:00","gmt_modified":"2026-04-23T15:22:16.023827+08:00"},{"id":355,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"9630036e63fc15cb81b202cf79671aab","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#1-182","gmt_create":"2026-04-23T15:22:16.024296+08:00","gmt_modified":"2026-04-23T15:22:16.024296+08:00"},{"id":356,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"9630036e63fc15cb81b202cf79671aab","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-182","gmt_create":"2026-04-23T15:22:16.024606+08:00","gmt_modified":"2026-04-23T15:22:16.024606+08:00"},{"id":357,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"9bfc041fe426da2eb78353827e8d9163","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#1-29","gmt_create":"2026-04-23T15:22:16.025063+08:00","gmt_modified":"2026-04-23T15:22:16.025063+08:00"},{"id":358,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"84fbed7d35f7752e2117a74fcaf5f0e9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#1-17","gmt_create":"2026-04-23T15:22:16.02571+08:00","gmt_modified":"2026-04-23T15:22:16.02571+08:00"},{"id":359,"source_id":"9ff19022ef915615911280e3c49ed44b","target_id":"84fbed7d35f7752e2117a74fcaf5f0e9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-17","gmt_create":"2026-04-23T15:22:16.026089+08:00","gmt_modified":"2026-04-23T15:22:16.02609+08:00"},{"id":360,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"5ddf0c8d7b38e4f6126a5d85da1dfeda","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/conftest.py#19-123","gmt_create":"2026-04-23T15:22:16.027421+08:00","gmt_modified":"2026-04-23T15:22:16.027421+08:00"},{"id":361,"source_id":"0ef1efea889dba3e1f299626df479571","target_id":"5ddf0c8d7b38e4f6126a5d85da1dfeda","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 19-123","gmt_create":"2026-04-23T15:22:16.02774+08:00","gmt_modified":"2026-04-23T15:22:16.02774+08:00"},{"id":362,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"9df233ef1be4b95068ed91bf01083ae7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/conftest.py#117-123","gmt_create":"2026-04-23T15:22:16.028177+08:00","gmt_modified":"2026-04-23T15:22:16.028177+08:00"},{"id":363,"source_id":"0ef1efea889dba3e1f299626df479571","target_id":"9df233ef1be4b95068ed91bf01083ae7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 117-123","gmt_create":"2026-04-23T15:22:16.028504+08:00","gmt_modified":"2026-04-23T15:22:16.028504+08:00"},{"id":364,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"6286d4be455dc058c8be2ee4e0d1175a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#38-42","gmt_create":"2026-04-23T15:22:16.029042+08:00","gmt_modified":"2026-04-23T15:22:16.029042+08:00"},{"id":365,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"6286d4be455dc058c8be2ee4e0d1175a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 38-42","gmt_create":"2026-04-23T15:22:16.029449+08:00","gmt_modified":"2026-04-23T15:22:16.029449+08:00"},{"id":366,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"069243fafe60a85cf16a0ca40fa07180","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/deps.py#16-43","gmt_create":"2026-04-23T15:22:16.030077+08:00","gmt_modified":"2026-04-23T15:22:16.030077+08:00"},{"id":367,"source_id":"9d08667997a868fc07c9b4e328e44224","target_id":"069243fafe60a85cf16a0ca40fa07180","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-43","gmt_create":"2026-04-23T15:22:16.030648+08:00","gmt_modified":"2026-04-23T15:22:16.030648+08:00"},{"id":368,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"d5a1fb0bd23ce9240fbf79529ef94a45","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/auth.py#13-43","gmt_create":"2026-04-23T15:22:16.031255+08:00","gmt_modified":"2026-04-23T15:22:16.031255+08:00"},{"id":369,"source_id":"93022c8938ce318f167277cfa65c29a7","target_id":"d5a1fb0bd23ce9240fbf79529ef94a45","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-43","gmt_create":"2026-04-23T15:22:16.03168+08:00","gmt_modified":"2026-04-23T15:22:16.03168+08:00"},{"id":370,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"fe70b1fef9f36e73d26d84987e927c7a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#15-86","gmt_create":"2026-04-23T15:22:16.032106+08:00","gmt_modified":"2026-04-23T15:22:16.032106+08:00"},{"id":371,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"735aef72b4fe6ca4f407e69b7dda8b43","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#25-78","gmt_create":"2026-04-23T15:22:16.032649+08:00","gmt_modified":"2026-04-23T15:22:16.03265+08:00"},{"id":372,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"735aef72b4fe6ca4f407e69b7dda8b43","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-78","gmt_create":"2026-04-23T15:22:16.03298+08:00","gmt_modified":"2026-04-23T15:22:16.03298+08:00"},{"id":373,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"8128dd67cf376d2cadf7c2d3831c380a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#23-29","gmt_create":"2026-04-23T15:22:16.034473+08:00","gmt_modified":"2026-04-23T15:22:16.034473+08:00"},{"id":374,"source_id":"b0c428683c8a3e6922d90ca0d8c2736d","target_id":"8128dd67cf376d2cadf7c2d3831c380a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-29","gmt_create":"2026-04-23T15:22:16.035564+08:00","gmt_modified":"2026-04-23T15:22:16.035564+08:00"},{"id":375,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"1721defc3d6206478d3c0692cc821761","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_auth.py#25-104","gmt_create":"2026-04-23T15:22:16.036325+08:00","gmt_modified":"2026-04-23T15:22:16.036325+08:00"},{"id":376,"source_id":"389d631bc6c7111ba411b0b79fca455e","target_id":"1721defc3d6206478d3c0692cc821761","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-104","gmt_create":"2026-04-23T15:22:16.036753+08:00","gmt_modified":"2026-04-23T15:22:16.036753+08:00"},{"id":377,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"753a437d837246ead62b0e16c6331284","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/auth.py#37-69","gmt_create":"2026-04-23T15:22:16.037909+08:00","gmt_modified":"2026-04-23T15:22:16.037909+08:00"},{"id":378,"source_id":"4d2f3847b7c10634733118b70a1aea0b","target_id":"753a437d837246ead62b0e16c6331284","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 37-69","gmt_create":"2026-04-23T15:22:16.038261+08:00","gmt_modified":"2026-04-23T15:22:16.038261+08:00"},{"id":379,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"d820e2daf2ea133a7aa17cdc475e44a4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_auth.py#1-104","gmt_create":"2026-04-23T15:22:16.039047+08:00","gmt_modified":"2026-04-23T15:22:16.039047+08:00"},{"id":380,"source_id":"389d631bc6c7111ba411b0b79fca455e","target_id":"d820e2daf2ea133a7aa17cdc475e44a4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-104","gmt_create":"2026-04-23T15:22:16.039369+08:00","gmt_modified":"2026-04-23T15:22:16.039369+08:00"},{"id":381,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"1a439c5fed6cfd188c646e1614d56371","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/auth.py#1-69","gmt_create":"2026-04-23T15:22:16.040181+08:00","gmt_modified":"2026-04-23T15:22:16.040181+08:00"},{"id":382,"source_id":"4d2f3847b7c10634733118b70a1aea0b","target_id":"1a439c5fed6cfd188c646e1614d56371","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-69","gmt_create":"2026-04-23T15:22:16.040483+08:00","gmt_modified":"2026-04-23T15:22:16.040483+08:00"},{"id":383,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"b624be78e3bffd876e403cff2557b088","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#19-120","gmt_create":"2026-04-23T15:22:16.041373+08:00","gmt_modified":"2026-04-23T15:22:16.041373+08:00"},{"id":384,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"5c67e2f70283956b2d29a3c1443eb514","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#122-146","gmt_create":"2026-04-23T15:22:16.042316+08:00","gmt_modified":"2026-04-23T15:22:16.042317+08:00"},{"id":385,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"5c67e2f70283956b2d29a3c1443eb514","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 122-146","gmt_create":"2026-04-23T15:22:16.042829+08:00","gmt_modified":"2026-04-23T15:22:16.042829+08:00"},{"id":386,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"309607c54b12a6340edc086ffb4737c9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#148-309","gmt_create":"2026-04-23T15:22:16.043937+08:00","gmt_modified":"2026-04-23T15:22:16.043937+08:00"},{"id":387,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"a57acd9da5287c915ac823784a409292","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_citation_engine.py#1-127","gmt_create":"2026-04-23T15:22:16.044785+08:00","gmt_modified":"2026-04-23T15:22:16.044785+08:00"},{"id":388,"source_id":"b07a4fb9cecbbd66a6910ccbc7651f19","target_id":"a57acd9da5287c915ac823784a409292","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-127","gmt_create":"2026-04-23T15:22:16.045132+08:00","gmt_modified":"2026-04-23T15:22:16.045132+08:00"},{"id":389,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"2a4f741f31f62dce8ad63be2e831f520","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_citations.py#23-93","gmt_create":"2026-04-23T15:22:16.045993+08:00","gmt_modified":"2026-04-23T15:22:16.045993+08:00"},{"id":390,"source_id":"42ff5383133d176cec9eb88682483be3","target_id":"2a4f741f31f62dce8ad63be2e831f520","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-93","gmt_create":"2026-04-23T15:22:16.046367+08:00","gmt_modified":"2026-04-23T15:22:16.046367+08:00"},{"id":391,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"692ac240965eff7e66945aa3c4c270f7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_citations.py#1-93","gmt_create":"2026-04-23T15:22:16.047504+08:00","gmt_modified":"2026-04-23T15:22:16.047504+08:00"},{"id":392,"source_id":"42ff5383133d176cec9eb88682483be3","target_id":"692ac240965eff7e66945aa3c4c270f7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-93","gmt_create":"2026-04-23T15:22:16.047995+08:00","gmt_modified":"2026-04-23T15:22:16.047995+08:00"},{"id":393,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"32a0a52faca2d8d488e49c63c86075b1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_queries.py#29-154","gmt_create":"2026-04-23T15:22:16.048856+08:00","gmt_modified":"2026-04-23T15:22:16.048856+08:00"},{"id":394,"source_id":"0613e76b9679be7f998fb8fd8056e686","target_id":"32a0a52faca2d8d488e49c63c86075b1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 29-154","gmt_create":"2026-04-23T15:22:16.049251+08:00","gmt_modified":"2026-04-23T15:22:16.049251+08:00"},{"id":395,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"7804331f5f8c1ba5a3b6d9c1ae1c78c1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_queries.py#1-154","gmt_create":"2026-04-23T15:22:16.051275+08:00","gmt_modified":"2026-04-23T15:22:16.051275+08:00"},{"id":396,"source_id":"0613e76b9679be7f998fb8fd8056e686","target_id":"7804331f5f8c1ba5a3b6d9c1ae1c78c1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-154","gmt_create":"2026-04-23T15:22:16.051952+08:00","gmt_modified":"2026-04-23T15:22:16.051952+08:00"},{"id":397,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"3a6e1b738967bf8cc651e57f48e2e126","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_business_flow.py#83-126","gmt_create":"2026-04-23T15:22:16.053307+08:00","gmt_modified":"2026-04-23T15:22:16.053307+08:00"},{"id":398,"source_id":"80a0429cc47931de27ddb17a62b8dd9c","target_id":"3a6e1b738967bf8cc651e57f48e2e126","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 83-126","gmt_create":"2026-04-23T15:22:16.053692+08:00","gmt_modified":"2026-04-23T15:22:16.053693+08:00"},{"id":399,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"b1afd377757f1d0e9bdf87edfff3ad88","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_business_flow.py#131-186","gmt_create":"2026-04-23T15:22:16.054222+08:00","gmt_modified":"2026-04-23T15:22:16.054222+08:00"},{"id":400,"source_id":"80a0429cc47931de27ddb17a62b8dd9c","target_id":"b1afd377757f1d0e9bdf87edfff3ad88","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 131-186","gmt_create":"2026-04-23T15:22:16.054533+08:00","gmt_modified":"2026-04-23T15:22:16.054533+08:00"},{"id":401,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"de05ec7eed033e432991e5a88e1b5a06","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_business_flow.py#192-222","gmt_create":"2026-04-23T15:22:16.055028+08:00","gmt_modified":"2026-04-23T15:22:16.055028+08:00"},{"id":402,"source_id":"80a0429cc47931de27ddb17a62b8dd9c","target_id":"de05ec7eed033e432991e5a88e1b5a06","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 192-222","gmt_create":"2026-04-23T15:22:16.055495+08:00","gmt_modified":"2026-04-23T15:22:16.055495+08:00"},{"id":403,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"7fd61a451248b6b129299d6246f711c7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_business_flow.py#228-296","gmt_create":"2026-04-23T15:22:16.055985+08:00","gmt_modified":"2026-04-23T15:22:16.055985+08:00"},{"id":404,"source_id":"80a0429cc47931de27ddb17a62b8dd9c","target_id":"7fd61a451248b6b129299d6246f711c7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 228-296","gmt_create":"2026-04-23T15:22:16.056294+08:00","gmt_modified":"2026-04-23T15:22:16.056294+08:00"},{"id":405,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"53eedffff456a566fa7b0cecc7169f56","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_business_flow.py#1-441","gmt_create":"2026-04-23T15:22:16.056723+08:00","gmt_modified":"2026-04-23T15:22:16.056723+08:00"},{"id":406,"source_id":"80a0429cc47931de27ddb17a62b8dd9c","target_id":"53eedffff456a566fa7b0cecc7169f56","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-441","gmt_create":"2026-04-23T15:22:16.05703+08:00","gmt_modified":"2026-04-23T15:22:16.05703+08:00"},{"id":407,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"906f7a8288e38d4244211f3f538fe7b6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#27-182","gmt_create":"2026-04-23T15:22:16.061306+08:00","gmt_modified":"2026-04-23T15:22:16.061306+08:00"},{"id":408,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"906f7a8288e38d4244211f3f538fe7b6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 27-182","gmt_create":"2026-04-23T15:22:16.062545+08:00","gmt_modified":"2026-04-23T15:22:16.062545+08:00"},{"id":409,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"1647ee2066de2ae59ba8cf88e33c5e02","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_scheduler.py#1-123","gmt_create":"2026-04-23T15:22:16.06371+08:00","gmt_modified":"2026-04-23T15:22:16.06371+08:00"},{"id":410,"source_id":"b2f0d46a31a5441594f2e777365fc156","target_id":"1647ee2066de2ae59ba8cf88e33c5e02","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-123","gmt_create":"2026-04-23T15:22:16.064587+08:00","gmt_modified":"2026-04-23T15:22:16.064587+08:00"},{"id":411,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"aaf5bce6be82d2f947bfa5c1806de452","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/package.json","gmt_create":"2026-04-23T15:22:23.52554+08:00","gmt_modified":"2026-04-23T15:22:23.52554+08:00"},{"id":412,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"01056dad8851d3e9bd532eb4cab33792","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/tailwind.config.ts","gmt_create":"2026-04-23T15:22:23.52643+08:00","gmt_modified":"2026-04-23T15:22:23.526431+08:00"},{"id":413,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"f93ae024fe0a2e69698037dff6df205f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/lib/utils.ts","gmt_create":"2026-04-23T15:22:23.527272+08:00","gmt_modified":"2026-04-23T15:22:23.527272+08:00"},{"id":414,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"ac1acbc54c49ee1de13369f6c6827568","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/button.tsx","gmt_create":"2026-04-23T15:22:23.528155+08:00","gmt_modified":"2026-04-23T15:22:23.528155+08:00"},{"id":415,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"108b0c4b4dcfb6aa39a5eb138225c148","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/dialog.tsx","gmt_create":"2026-04-23T15:22:23.529196+08:00","gmt_modified":"2026-04-23T15:22:23.529196+08:00"},{"id":416,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"0186dc8a89340139a84e1e3c5571a57f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/dropdown-menu.tsx","gmt_create":"2026-04-23T15:22:23.530077+08:00","gmt_modified":"2026-04-23T15:22:23.530077+08:00"},{"id":417,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"3cf787fa77a15b2b1783560c6d83ed21","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/input.tsx","gmt_create":"2026-04-23T15:22:23.530977+08:00","gmt_modified":"2026-04-23T15:22:23.530977+08:00"},{"id":418,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"3c56e1c079959bfcc985183805e5874f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/select.tsx","gmt_create":"2026-04-23T15:22:23.531664+08:00","gmt_modified":"2026-04-23T15:22:23.531664+08:00"},{"id":419,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"0d5ef537f7c0b8c390f8b31d7cf47b56","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/card.tsx","gmt_create":"2026-04-23T15:22:23.532588+08:00","gmt_modified":"2026-04-23T15:22:23.532588+08:00"},{"id":420,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"51821ca9ec2a1c972f3c9d111e19db8a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/badge.tsx","gmt_create":"2026-04-23T15:22:23.53409+08:00","gmt_modified":"2026-04-23T15:22:23.53409+08:00"},{"id":421,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"0c0b0f4e2cf44facd9d5b57de0d0bf0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/table.tsx","gmt_create":"2026-04-23T15:22:23.535512+08:00","gmt_modified":"2026-04-23T15:22:23.535512+08:00"},{"id":422,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"beb87ab5aad9532647e9dbd2db7ef587","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/tabs.tsx","gmt_create":"2026-04-23T15:22:23.536664+08:00","gmt_modified":"2026-04-23T15:22:23.536665+08:00"},{"id":423,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"792b8e2c16c9ff2095d83b8972313be4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/label.tsx","gmt_create":"2026-04-23T15:22:23.537365+08:00","gmt_modified":"2026-04-23T15:22:23.537365+08:00"},{"id":424,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"546e01c5f73aaf5140eee922f4b9a441","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/providers.tsx","gmt_create":"2026-04-23T15:22:23.538246+08:00","gmt_modified":"2026-04-23T15:22:23.538246+08:00"},{"id":425,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"12e2c3d7b9a92dc44a6ee29b85e10df6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/app/layout.tsx","gmt_create":"2026-04-23T15:22:23.53929+08:00","gmt_modified":"2026-04-23T15:22:23.53929+08:00"},{"id":426,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"2a1c745c7b3fb7f600596be3d979bba1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/app/(dashboard","gmt_create":"2026-04-23T15:22:23.540469+08:00","gmt_modified":"2026-04-23T15:22:23.540469+08:00"},{"id":427,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"8a466b0c6eac2ccb54c5da7e13854646","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/app/layout.tsx#1-37","gmt_create":"2026-04-23T15:22:23.541484+08:00","gmt_modified":"2026-04-23T15:22:23.541484+08:00"},{"id":428,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"fd18328b6582e68c30b130b912891992","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/providers.tsx#1-9","gmt_create":"2026-04-23T15:22:23.542098+08:00","gmt_modified":"2026-04-23T15:22:23.542098+08:00"},{"id":429,"source_id":"546e01c5f73aaf5140eee922f4b9a441","target_id":"fd18328b6582e68c30b130b912891992","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-9","gmt_create":"2026-04-23T15:22:23.542482+08:00","gmt_modified":"2026-04-23T15:22:23.542482+08:00"},{"id":430,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"dcfa308ef4ec368c5a51a17acbfc8e2c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/utils.ts#1-7","gmt_create":"2026-04-23T15:22:23.542958+08:00","gmt_modified":"2026-04-23T15:22:23.542958+08:00"},{"id":431,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"71a37a516437e94fd82a87efc70a3f16","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/package.json#1-40","gmt_create":"2026-04-23T15:22:23.54348+08:00","gmt_modified":"2026-04-23T15:22:23.54348+08:00"},{"id":432,"source_id":"aaf5bce6be82d2f947bfa5c1806de452","target_id":"71a37a516437e94fd82a87efc70a3f16","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-40","gmt_create":"2026-04-23T15:22:23.543767+08:00","gmt_modified":"2026-04-23T15:22:23.543768+08:00"},{"id":433,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"89d70e5f89be23a229e3ee59982b8e6e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/tailwind.config.ts#1-57","gmt_create":"2026-04-23T15:22:23.544176+08:00","gmt_modified":"2026-04-23T15:22:23.544176+08:00"},{"id":434,"source_id":"01056dad8851d3e9bd532eb4cab33792","target_id":"89d70e5f89be23a229e3ee59982b8e6e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-57","gmt_create":"2026-04-23T15:22:23.544513+08:00","gmt_modified":"2026-04-23T15:22:23.544513+08:00"},{"id":435,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"95be577a89fbeb02578e4c3718c6ec86","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/button.tsx#1-57","gmt_create":"2026-04-23T15:22:23.545023+08:00","gmt_modified":"2026-04-23T15:22:23.545023+08:00"},{"id":436,"source_id":"ac1acbc54c49ee1de13369f6c6827568","target_id":"95be577a89fbeb02578e4c3718c6ec86","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-57","gmt_create":"2026-04-23T15:22:23.545376+08:00","gmt_modified":"2026-04-23T15:22:23.545376+08:00"},{"id":437,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"607bb628918a7a5d54cbf74763f94d07","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/input.tsx#1-23","gmt_create":"2026-04-23T15:22:23.545898+08:00","gmt_modified":"2026-04-23T15:22:23.545899+08:00"},{"id":438,"source_id":"3cf787fa77a15b2b1783560c6d83ed21","target_id":"607bb628918a7a5d54cbf74763f94d07","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-23","gmt_create":"2026-04-23T15:22:23.546272+08:00","gmt_modified":"2026-04-23T15:22:23.546272+08:00"},{"id":439,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"325e25d1dda0f7bfd9d7adfe35ecf3b5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/select.tsx#1-161","gmt_create":"2026-04-23T15:22:23.546653+08:00","gmt_modified":"2026-04-23T15:22:23.546653+08:00"},{"id":440,"source_id":"3c56e1c079959bfcc985183805e5874f","target_id":"325e25d1dda0f7bfd9d7adfe35ecf3b5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-161","gmt_create":"2026-04-23T15:22:23.546906+08:00","gmt_modified":"2026-04-23T15:22:23.546907+08:00"},{"id":441,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"0eed9f61572209dd754611fc7c690d5a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/dialog.tsx#1-123","gmt_create":"2026-04-23T15:22:23.547243+08:00","gmt_modified":"2026-04-23T15:22:23.547244+08:00"},{"id":442,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"ad6ff021b2126ad5c42323305eb6d8b0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/dropdown-menu.tsx#1-201","gmt_create":"2026-04-23T15:22:23.547645+08:00","gmt_modified":"2026-04-23T15:22:23.547645+08:00"},{"id":443,"source_id":"0186dc8a89340139a84e1e3c5571a57f","target_id":"ad6ff021b2126ad5c42323305eb6d8b0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-201","gmt_create":"2026-04-23T15:22:23.547892+08:00","gmt_modified":"2026-04-23T15:22:23.547892+08:00"},{"id":444,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"a85f004dca63614b4e734ba63b45ef9e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/card.tsx#1-80","gmt_create":"2026-04-23T15:22:23.548296+08:00","gmt_modified":"2026-04-23T15:22:23.548296+08:00"},{"id":445,"source_id":"0d5ef537f7c0b8c390f8b31d7cf47b56","target_id":"a85f004dca63614b4e734ba63b45ef9e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-80","gmt_create":"2026-04-23T15:22:23.548561+08:00","gmt_modified":"2026-04-23T15:22:23.548561+08:00"},{"id":446,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"3bab92a09e9fb456e0303bb1e04afc7e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/table.tsx#1-118","gmt_create":"2026-04-23T15:22:23.548946+08:00","gmt_modified":"2026-04-23T15:22:23.548946+08:00"},{"id":447,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"bd3042a8d9b602334720b0d7b4e8ab3d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/tabs.tsx#1-56","gmt_create":"2026-04-23T15:22:23.549383+08:00","gmt_modified":"2026-04-23T15:22:23.549383+08:00"},{"id":448,"source_id":"beb87ab5aad9532647e9dbd2db7ef587","target_id":"bd3042a8d9b602334720b0d7b4e8ab3d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-56","gmt_create":"2026-04-23T15:22:23.549652+08:00","gmt_modified":"2026-04-23T15:22:23.549653+08:00"},{"id":449,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"379443f450513b5492e2d9d5fca94a42","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/label.tsx#1-27","gmt_create":"2026-04-23T15:22:23.550013+08:00","gmt_modified":"2026-04-23T15:22:23.550014+08:00"},{"id":450,"source_id":"792b8e2c16c9ff2095d83b8972313be4","target_id":"379443f450513b5492e2d9d5fca94a42","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-27","gmt_create":"2026-04-23T15:22:23.550267+08:00","gmt_modified":"2026-04-23T15:22:23.550267+08:00"},{"id":451,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"4aa6ad434a73143bb7a2072124f63be0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/badge.tsx#1-37","gmt_create":"2026-04-23T15:22:23.551155+08:00","gmt_modified":"2026-04-23T15:22:23.551155+08:00"},{"id":452,"source_id":"51821ca9ec2a1c972f3c9d111e19db8a","target_id":"4aa6ad434a73143bb7a2072124f63be0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-04-23T15:22:23.551858+08:00","gmt_modified":"2026-04-23T15:22:23.551858+08:00"},{"id":453,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"c45dbdda70a8b9f02b52af4991644d0b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/package.json#11-27","gmt_create":"2026-04-23T15:22:23.552353+08:00","gmt_modified":"2026-04-23T15:22:23.552353+08:00"},{"id":454,"source_id":"aaf5bce6be82d2f947bfa5c1806de452","target_id":"c45dbdda70a8b9f02b52af4991644d0b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-27","gmt_create":"2026-04-23T15:22:23.552845+08:00","gmt_modified":"2026-04-23T15:22:23.552845+08:00"},{"id":455,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"6ac6943c93570294e4fb15a862be2616","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/button.tsx#36-54","gmt_create":"2026-04-23T15:22:23.553797+08:00","gmt_modified":"2026-04-23T15:22:23.553797+08:00"},{"id":456,"source_id":"ac1acbc54c49ee1de13369f6c6827568","target_id":"6ac6943c93570294e4fb15a862be2616","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 36-54","gmt_create":"2026-04-23T15:22:23.554077+08:00","gmt_modified":"2026-04-23T15:22:23.554077+08:00"},{"id":457,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"4bfb5059c685e9878aed64cb5347ccec","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/dialog.tsx#9-54","gmt_create":"2026-04-23T15:22:23.554645+08:00","gmt_modified":"2026-04-23T15:22:23.554645+08:00"},{"id":458,"source_id":"108b0c4b4dcfb6aa39a5eb138225c148","target_id":"4bfb5059c685e9878aed64cb5347ccec","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 9-54","gmt_create":"2026-04-23T15:22:23.554875+08:00","gmt_modified":"2026-04-23T15:22:23.554875+08:00"},{"id":459,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"0af48b69fe8fb9e480fa1656f36a4330","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/dropdown-menu.tsx#21-75","gmt_create":"2026-04-23T15:22:23.555418+08:00","gmt_modified":"2026-04-23T15:22:23.555418+08:00"},{"id":460,"source_id":"0186dc8a89340139a84e1e3c5571a57f","target_id":"0af48b69fe8fb9e480fa1656f36a4330","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 21-75","gmt_create":"2026-04-23T15:22:23.55574+08:00","gmt_modified":"2026-04-23T15:22:23.55574+08:00"},{"id":461,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"09971e31ab658e119d4c0ad948282107","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/select.tsx#15-100","gmt_create":"2026-04-23T15:22:23.556401+08:00","gmt_modified":"2026-04-23T15:22:23.556401+08:00"},{"id":462,"source_id":"3c56e1c079959bfcc985183805e5874f","target_id":"09971e31ab658e119d4c0ad948282107","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 15-100","gmt_create":"2026-04-23T15:22:23.556634+08:00","gmt_modified":"2026-04-23T15:22:23.556634+08:00"},{"id":463,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"31aa8777de6043883950d2668094e388","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/table.tsx#5-106","gmt_create":"2026-04-23T15:22:23.55717+08:00","gmt_modified":"2026-04-23T15:22:23.55717+08:00"},{"id":464,"source_id":"0c0b0f4e2cf44facd9d5b57de0d0bf0c","target_id":"31aa8777de6043883950d2668094e388","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-106","gmt_create":"2026-04-23T15:22:23.557428+08:00","gmt_modified":"2026-04-23T15:22:23.557429+08:00"},{"id":465,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"28baf3cedb89a21c6d542b7ce2439b24","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/tabs.tsx#8-53","gmt_create":"2026-04-23T15:22:23.558002+08:00","gmt_modified":"2026-04-23T15:22:23.558002+08:00"},{"id":466,"source_id":"beb87ab5aad9532647e9dbd2db7ef587","target_id":"28baf3cedb89a21c6d542b7ce2439b24","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 8-53","gmt_create":"2026-04-23T15:22:23.558316+08:00","gmt_modified":"2026-04-23T15:22:23.558316+08:00"},{"id":467,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"28b0f4797c6084272244175a24b961cb","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/card.tsx#5-77","gmt_create":"2026-04-23T15:22:23.558858+08:00","gmt_modified":"2026-04-23T15:22:23.558858+08:00"},{"id":468,"source_id":"0d5ef537f7c0b8c390f8b31d7cf47b56","target_id":"28b0f4797c6084272244175a24b961cb","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-77","gmt_create":"2026-04-23T15:22:23.559082+08:00","gmt_modified":"2026-04-23T15:22:23.559082+08:00"},{"id":469,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"a6e0b3fa65906c3c3cd88707e1d40059","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/label.tsx#9-23","gmt_create":"2026-04-23T15:22:23.559653+08:00","gmt_modified":"2026-04-23T15:22:23.559653+08:00"},{"id":470,"source_id":"792b8e2c16c9ff2095d83b8972313be4","target_id":"a6e0b3fa65906c3c3cd88707e1d40059","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 9-23","gmt_create":"2026-04-23T15:22:23.560391+08:00","gmt_modified":"2026-04-23T15:22:23.560392+08:00"},{"id":471,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"9a909775022010b4686c2b00cdf1c165","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/badge.tsx#6-34","gmt_create":"2026-04-23T15:22:23.562216+08:00","gmt_modified":"2026-04-23T15:22:23.562216+08:00"},{"id":472,"source_id":"51821ca9ec2a1c972f3c9d111e19db8a","target_id":"9a909775022010b4686c2b00cdf1c165","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 6-34","gmt_create":"2026-04-23T15:22:23.562602+08:00","gmt_modified":"2026-04-23T15:22:23.562602+08:00"},{"id":473,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"ce1cd184945ae56cf63f55168afd8050","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/dialog.tsx#47-50","gmt_create":"2026-04-23T15:22:23.565009+08:00","gmt_modified":"2026-04-23T15:22:23.565009+08:00"},{"id":474,"source_id":"108b0c4b4dcfb6aa39a5eb138225c148","target_id":"ce1cd184945ae56cf63f55168afd8050","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 47-50","gmt_create":"2026-04-23T15:22:23.565469+08:00","gmt_modified":"2026-04-23T15:22:23.565469+08:00"},{"id":475,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"4a2a06e1efcbc85deaa013dca155f20c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/tailwind.config.ts#10-54","gmt_create":"2026-04-23T15:22:23.57102+08:00","gmt_modified":"2026-04-23T15:22:23.57102+08:00"},{"id":476,"source_id":"01056dad8851d3e9bd532eb4cab33792","target_id":"4a2a06e1efcbc85deaa013dca155f20c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-54","gmt_create":"2026-04-23T15:22:23.571491+08:00","gmt_modified":"2026-04-23T15:22:23.571491+08:00"},{"id":477,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"8b00ea4aba57ea6ed982287fb7840805","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/utils.ts#4-6","gmt_create":"2026-04-23T15:22:23.572188+08:00","gmt_modified":"2026-04-23T15:22:23.572188+08:00"},{"id":478,"source_id":"f93ae024fe0a2e69698037dff6df205f","target_id":"8b00ea4aba57ea6ed982287fb7840805","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 4-6","gmt_create":"2026-04-23T15:22:23.572722+08:00","gmt_modified":"2026-04-23T15:22:23.572722+08:00"},{"id":479,"source_id":"3af3bb9e-4d99-4dc3-b1ed-2686db385c26","target_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3af3bb9e-4d99-4dc3-b1ed-2686db385c26 -\u003e ba0390b3-c249-4e92-a3c8-6820343aeda9","gmt_create":"2026-04-23T15:22:24.554964+08:00","gmt_modified":"2026-04-23T15:22:24.554964+08:00"},{"id":480,"source_id":"3af3bb9e-4d99-4dc3-b1ed-2686db385c26","target_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3af3bb9e-4d99-4dc3-b1ed-2686db385c26 -\u003e 760610d4-dff6-4c6d-831f-7c9078db86a6","gmt_create":"2026-04-23T15:22:24.558512+08:00","gmt_modified":"2026-04-23T15:22:24.558512+08:00"},{"id":483,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"2fc79486-ec65-4533-860a-89c8877c2ea0","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: deb919cc-9541-4ed7-a581-ae2876ea67c2 -\u003e 2fc79486-ec65-4533-860a-89c8877c2ea0","gmt_create":"2026-04-23T15:22:24.563092+08:00","gmt_modified":"2026-04-23T15:22:24.563092+08:00"},{"id":484,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"d8e2cef5-37e6-44e7-8a7b-9bd365b82a72","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: deb919cc-9541-4ed7-a581-ae2876ea67c2 -\u003e d8e2cef5-37e6-44e7-8a7b-9bd365b82a72","gmt_create":"2026-04-23T15:22:24.564188+08:00","gmt_modified":"2026-04-23T15:22:24.564188+08:00"},{"id":485,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"7c7564ee-7fe2-4555-8ff0-4ec1b757997a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 49915365-e38e-43b5-beac-6aa7d5a74cbb -\u003e 7c7564ee-7fe2-4555-8ff0-4ec1b757997a","gmt_create":"2026-04-23T15:22:24.570327+08:00","gmt_modified":"2026-04-23T15:22:24.570327+08:00"},{"id":487,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"737f8d6c-bd8f-4c11-b142-71a400423323","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 49915365-e38e-43b5-beac-6aa7d5a74cbb -\u003e 737f8d6c-bd8f-4c11-b142-71a400423323","gmt_create":"2026-04-23T15:22:24.572325+08:00","gmt_modified":"2026-04-23T15:22:24.572325+08:00"},{"id":488,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"ae62f4a8-8840-4c8e-9a42-3373370299ff","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 49915365-e38e-43b5-beac-6aa7d5a74cbb -\u003e ae62f4a8-8840-4c8e-9a42-3373370299ff","gmt_create":"2026-04-23T15:22:24.573991+08:00","gmt_modified":"2026-04-23T15:22:24.573991+08:00"},{"id":489,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"8150ddbb-7aa9-48d0-9953-2ef55e4bcfd5","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b0c36b2b-bb03-4624-933d-c1f6a320b7ca -\u003e 8150ddbb-7aa9-48d0-9953-2ef55e4bcfd5","gmt_create":"2026-04-23T15:22:24.576401+08:00","gmt_modified":"2026-04-23T15:22:24.576402+08:00"},{"id":490,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"8c17b44f-1586-459b-a83d-c9b961cd2142","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b0c36b2b-bb03-4624-933d-c1f6a320b7ca -\u003e 8c17b44f-1586-459b-a83d-c9b961cd2142","gmt_create":"2026-04-23T15:22:24.577199+08:00","gmt_modified":"2026-04-23T15:22:24.5772+08:00"},{"id":491,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"05e59a75-d52f-42e1-a924-f6a32f06f2fe","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b0c36b2b-bb03-4624-933d-c1f6a320b7ca -\u003e 05e59a75-d52f-42e1-a924-f6a32f06f2fe","gmt_create":"2026-04-23T15:22:24.578095+08:00","gmt_modified":"2026-04-23T15:22:24.578095+08:00"},{"id":492,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"a16cf42e9559523c4f96ca4c79f9488d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/base.py","gmt_create":"2026-04-23T20:31:36.520458+08:00","gmt_modified":"2026-04-23T20:31:36.520458+08:00"},{"id":493,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"8f973791233c698b3e64a4fb28a93d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/kimi.py","gmt_create":"2026-04-23T20:31:36.521676+08:00","gmt_modified":"2026-04-23T20:31:36.521677+08:00"},{"id":494,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"f642fc1c2f34e15572d9d98aa6c18813","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-23T20:31:36.522472+08:00","gmt_modified":"2026-04-23T20:31:36.522472+08:00"},{"id":495,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"e68ad5186f1e47610ab3d9f14a794393","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/tongyi.py","gmt_create":"2026-04-23T20:31:36.522898+08:00","gmt_modified":"2026-04-23T20:31:36.522898+08:00"},{"id":496,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"404f6d0765a8c6e77e33b7fc21b377a4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/doubao.py","gmt_create":"2026-04-23T20:31:36.523305+08:00","gmt_modified":"2026-04-23T20:31:36.523305+08:00"},{"id":497,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"303e80519e946904d1cb3ac32cbb0814","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/qingyan.py","gmt_create":"2026-04-23T20:31:36.524292+08:00","gmt_modified":"2026-04-23T20:31:36.524292+08:00"},{"id":498,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"5af7301fe056fc3d10820d820e8ad777","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/tiangong.py","gmt_create":"2026-04-23T20:31:36.525283+08:00","gmt_modified":"2026-04-23T20:31:36.525283+08:00"},{"id":499,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"0e38ad5d2d3daaad08c9302df8805b15","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/xinghuo.py","gmt_create":"2026-04-23T20:31:36.52736+08:00","gmt_modified":"2026-04-23T20:31:36.52736+08:00"},{"id":500,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"6a63f048c16c60c5d2d57012c810ee0e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/search_engine.py","gmt_create":"2026-04-23T20:31:36.527985+08:00","gmt_modified":"2026-04-23T20:31:36.527985+08:00"},{"id":501,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"74040de652d5e57f548bb5c4adc3e1a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/citation_engine.py","gmt_create":"2026-04-23T20:31:36.530076+08:00","gmt_modified":"2026-04-23T20:31:36.530076+08:00"},{"id":502,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T20:31:36.531496+08:00","gmt_modified":"2026-04-23T20:31:36.531496+08:00"},{"id":503,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T20:31:36.532308+08:00","gmt_modified":"2026-04-23T20:31:36.532308+08:00"},{"id":504,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"b4a81ef789630d0af6a8d50859d01bf3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/citation_record.py","gmt_create":"2026-04-23T20:31:36.533202+08:00","gmt_modified":"2026-04-23T20:31:36.533203+08:00"},{"id":505,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T20:31:36.533733+08:00","gmt_modified":"2026-04-23T20:31:36.533733+08:00"},{"id":506,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/scheduler.py","gmt_create":"2026-04-23T20:31:36.534166+08:00","gmt_modified":"2026-04-23T20:31:36.534166+08:00"},{"id":507,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T20:31:36.535208+08:00","gmt_modified":"2026-04-23T20:31:36.535208+08:00"},{"id":508,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"04e3926c080e795713bff683e7dc9d3e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/citation.py","gmt_create":"2026-04-23T20:31:36.536177+08:00","gmt_modified":"2026-04-23T20:31:36.536177+08:00"},{"id":509,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"ef72f0c3cedb9fd9a87352fe493053dc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/lib/platforms.ts","gmt_create":"2026-04-23T20:31:36.536784+08:00","gmt_modified":"2026-04-23T20:31:36.536784+08:00"},{"id":510,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"b07a4fb9cecbbd66a6910ccbc7651f19","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_citation_engine.py","gmt_create":"2026-04-23T20:31:36.537249+08:00","gmt_modified":"2026-04-23T20:31:36.537249+08:00"},{"id":511,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"a26ee01cf41da3b956e1650448c156fa","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/requirements.txt","gmt_create":"2026-04-23T20:31:36.53817+08:00","gmt_modified":"2026-04-23T20:31:36.538171+08:00"},{"id":512,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"cbd0101fa84d957bcb1baaa623c6b31c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#1-78","gmt_create":"2026-04-23T20:31:36.53929+08:00","gmt_modified":"2026-04-23T20:31:36.53929+08:00"},{"id":513,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"7c0831c17e8c65eaed9511e17ed2a2ef","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#1-269","gmt_create":"2026-04-23T20:31:36.540413+08:00","gmt_modified":"2026-04-23T20:31:36.540413+08:00"},{"id":514,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"7c0831c17e8c65eaed9511e17ed2a2ef","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-269","gmt_create":"2026-04-23T20:31:36.541301+08:00","gmt_modified":"2026-04-23T20:31:36.541301+08:00"},{"id":515,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"71f98c8993fb42b108e34a554247869b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#1-95","gmt_create":"2026-04-23T20:31:36.541996+08:00","gmt_modified":"2026-04-23T20:31:36.541996+08:00"},{"id":516,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"71f98c8993fb42b108e34a554247869b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-95","gmt_create":"2026-04-23T20:31:36.542269+08:00","gmt_modified":"2026-04-23T20:31:36.542269+08:00"},{"id":517,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"8d5aac2ae0671f05d7c0807ba9296cdf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#1-330","gmt_create":"2026-04-23T20:31:36.543463+08:00","gmt_modified":"2026-04-23T20:31:36.543463+08:00"},{"id":518,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"8d5aac2ae0671f05d7c0807ba9296cdf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-330","gmt_create":"2026-04-23T20:31:36.543912+08:00","gmt_modified":"2026-04-23T20:31:36.543912+08:00"},{"id":519,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"debd789847d1eed2d54198772edf68a2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tongyi.py#1-38","gmt_create":"2026-04-23T20:31:36.545278+08:00","gmt_modified":"2026-04-23T20:31:36.545279+08:00"},{"id":520,"source_id":"e68ad5186f1e47610ab3d9f14a794393","target_id":"debd789847d1eed2d54198772edf68a2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-38","gmt_create":"2026-04-23T20:31:36.545752+08:00","gmt_modified":"2026-04-23T20:31:36.545752+08:00"},{"id":521,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"3bde521d18cc7221ae2f14637e163aac","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/doubao.py#1-38","gmt_create":"2026-04-23T20:31:36.546456+08:00","gmt_modified":"2026-04-23T20:31:36.546457+08:00"},{"id":522,"source_id":"404f6d0765a8c6e77e33b7fc21b377a4","target_id":"3bde521d18cc7221ae2f14637e163aac","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-38","gmt_create":"2026-04-23T20:31:36.546804+08:00","gmt_modified":"2026-04-23T20:31:36.546804+08:00"},{"id":523,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"c26862d9e0fc878b51a2668cfd2ec827","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/qingyan.py#1-38","gmt_create":"2026-04-23T20:31:36.547594+08:00","gmt_modified":"2026-04-23T20:31:36.547594+08:00"},{"id":524,"source_id":"303e80519e946904d1cb3ac32cbb0814","target_id":"c26862d9e0fc878b51a2668cfd2ec827","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-38","gmt_create":"2026-04-23T20:31:36.548009+08:00","gmt_modified":"2026-04-23T20:31:36.548009+08:00"},{"id":525,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"0fcc9c2e0d33b887c5f18a3807b64a1e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tiangong.py#1-38","gmt_create":"2026-04-23T20:31:36.548333+08:00","gmt_modified":"2026-04-23T20:31:36.548333+08:00"},{"id":526,"source_id":"5af7301fe056fc3d10820d820e8ad777","target_id":"0fcc9c2e0d33b887c5f18a3807b64a1e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-38","gmt_create":"2026-04-23T20:31:36.548917+08:00","gmt_modified":"2026-04-23T20:31:36.548917+08:00"},{"id":527,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"a4baa2444208b3f9a3f42bc492038207","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/xinghuo.py#1-38","gmt_create":"2026-04-23T20:31:36.549296+08:00","gmt_modified":"2026-04-23T20:31:36.549296+08:00"},{"id":528,"source_id":"0e38ad5d2d3daaad08c9302df8805b15","target_id":"a4baa2444208b3f9a3f42bc492038207","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-38","gmt_create":"2026-04-23T20:31:36.54956+08:00","gmt_modified":"2026-04-23T20:31:36.54956+08:00"},{"id":529,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"9f82f6d82bf914a608d6afa3d9854abf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#1-174","gmt_create":"2026-04-23T20:31:36.549907+08:00","gmt_modified":"2026-04-23T20:31:36.549907+08:00"},{"id":530,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"9f82f6d82bf914a608d6afa3d9854abf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-174","gmt_create":"2026-04-23T20:31:36.55085+08:00","gmt_modified":"2026-04-23T20:31:36.55085+08:00"},{"id":531,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"84fbed7d35f7752e2117a74fcaf5f0e9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#1-17","gmt_create":"2026-04-23T20:31:36.551428+08:00","gmt_modified":"2026-04-23T20:31:36.551428+08:00"},{"id":532,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"6281fff17a86ec1895c64d87c2ae7fb1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#1-55","gmt_create":"2026-04-23T20:31:36.552386+08:00","gmt_modified":"2026-04-23T20:31:36.552386+08:00"},{"id":533,"source_id":"b74caccb06844efcdb14d8324cff65c2","target_id":"6281fff17a86ec1895c64d87c2ae7fb1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-55","gmt_create":"2026-04-23T20:31:36.553134+08:00","gmt_modified":"2026-04-23T20:31:36.553134+08:00"},{"id":534,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"943c18db69a04b3137fba4cebcfea87e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#1-42","gmt_create":"2026-04-23T20:31:36.553656+08:00","gmt_modified":"2026-04-23T20:31:36.553656+08:00"},{"id":535,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"943c18db69a04b3137fba4cebcfea87e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-42","gmt_create":"2026-04-23T20:31:36.554174+08:00","gmt_modified":"2026-04-23T20:31:36.554174+08:00"},{"id":536,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"6628e006b8e5ca16160743528b6b0506","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#1-39","gmt_create":"2026-04-23T20:31:36.555503+08:00","gmt_modified":"2026-04-23T20:31:36.555503+08:00"},{"id":537,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"6628e006b8e5ca16160743528b6b0506","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-39","gmt_create":"2026-04-23T20:31:36.556658+08:00","gmt_modified":"2026-04-23T20:31:36.556658+08:00"},{"id":538,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"72a110dca58d8152758e2fdab4e94761","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#1-18","gmt_create":"2026-04-23T20:31:36.558991+08:00","gmt_modified":"2026-04-23T20:31:36.558991+08:00"},{"id":539,"source_id":"a16cf42e9559523c4f96ca4c79f9488d","target_id":"72a110dca58d8152758e2fdab4e94761","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-18","gmt_create":"2026-04-23T20:31:36.559781+08:00","gmt_modified":"2026-04-23T20:31:36.559781+08:00"},{"id":540,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"300e43c7a648440163f81039eaa47b5a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/platforms.ts#1-24","gmt_create":"2026-04-23T20:31:36.563289+08:00","gmt_modified":"2026-04-23T20:31:36.563289+08:00"},{"id":541,"source_id":"ef72f0c3cedb9fd9a87352fe493053dc","target_id":"300e43c7a648440163f81039eaa47b5a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-24","gmt_create":"2026-04-23T20:31:36.563813+08:00","gmt_modified":"2026-04-23T20:31:36.563813+08:00"},{"id":542,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"caf1970ded8fc5d3921005e166e2100b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#59-78","gmt_create":"2026-04-23T20:31:36.567359+08:00","gmt_modified":"2026-04-23T20:31:36.567359+08:00"},{"id":543,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"caf1970ded8fc5d3921005e166e2100b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 59-78","gmt_create":"2026-04-23T20:31:36.567845+08:00","gmt_modified":"2026-04-23T20:31:36.567845+08:00"},{"id":544,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"4ded871d02b8119cdd985de8b220b084","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#204-234","gmt_create":"2026-04-23T20:31:36.568622+08:00","gmt_modified":"2026-04-23T20:31:36.568622+08:00"},{"id":545,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"4ded871d02b8119cdd985de8b220b084","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 204-234","gmt_create":"2026-04-23T20:31:36.569217+08:00","gmt_modified":"2026-04-23T20:31:36.569217+08:00"},{"id":546,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"448970b02d89d5e1576f70bdb0063363","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#51-84","gmt_create":"2026-04-23T20:31:36.569785+08:00","gmt_modified":"2026-04-23T20:31:36.569785+08:00"},{"id":547,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"448970b02d89d5e1576f70bdb0063363","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 51-84","gmt_create":"2026-04-23T20:31:36.570169+08:00","gmt_modified":"2026-04-23T20:31:36.570169+08:00"},{"id":548,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"362d22f423631cda39404660b3317a2f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#177-254","gmt_create":"2026-04-23T20:31:36.570576+08:00","gmt_modified":"2026-04-23T20:31:36.570576+08:00"},{"id":549,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"362d22f423631cda39404660b3317a2f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 177-254","gmt_create":"2026-04-23T20:31:36.571472+08:00","gmt_modified":"2026-04-23T20:31:36.571472+08:00"},{"id":550,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"b475ff5225ac403c7fcf3dd7e14cbac6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tongyi.py#16-33","gmt_create":"2026-04-23T20:31:36.572484+08:00","gmt_modified":"2026-04-23T20:31:36.572484+08:00"},{"id":551,"source_id":"e68ad5186f1e47610ab3d9f14a794393","target_id":"b475ff5225ac403c7fcf3dd7e14cbac6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-33","gmt_create":"2026-04-23T20:31:36.573312+08:00","gmt_modified":"2026-04-23T20:31:36.573312+08:00"},{"id":552,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"557ae34b57a5dd8e8fa3bb2a6ce178a7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#163-174","gmt_create":"2026-04-23T20:31:36.574111+08:00","gmt_modified":"2026-04-23T20:31:36.574112+08:00"},{"id":553,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"557ae34b57a5dd8e8fa3bb2a6ce178a7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 163-174","gmt_create":"2026-04-23T20:31:36.574746+08:00","gmt_modified":"2026-04-23T20:31:36.574746+08:00"},{"id":554,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"75c6ab0599d304bf36d290d4143d3d2f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#29-31","gmt_create":"2026-04-23T20:31:36.590144+08:00","gmt_modified":"2026-04-23T20:31:36.590144+08:00"},{"id":555,"source_id":"b74caccb06844efcdb14d8324cff65c2","target_id":"75c6ab0599d304bf36d290d4143d3d2f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 29-31","gmt_create":"2026-04-23T20:31:36.591214+08:00","gmt_modified":"2026-04-23T20:31:36.591214+08:00"},{"id":556,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"fd541971cebf8a7c167d717f5c5d1ff6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#11-42","gmt_create":"2026-04-23T20:31:36.591664+08:00","gmt_modified":"2026-04-23T20:31:36.591664+08:00"},{"id":557,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"b84f46f058847733347974841f613688","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#11-39","gmt_create":"2026-04-23T20:31:36.592665+08:00","gmt_modified":"2026-04-23T20:31:36.592666+08:00"},{"id":558,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"2a6780838f1415dcb7d0fa611f64cee7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#4-17","gmt_create":"2026-04-23T20:31:36.593186+08:00","gmt_modified":"2026-04-23T20:31:36.593186+08:00"},{"id":559,"source_id":"a16cf42e9559523c4f96ca4c79f9488d","target_id":"2a6780838f1415dcb7d0fa611f64cee7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 4-17","gmt_create":"2026-04-23T20:31:36.59372+08:00","gmt_modified":"2026-04-23T20:31:36.59372+08:00"},{"id":560,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"c5ae7697193b2b93425ff25d2d7d54a9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tongyi.py#10-38","gmt_create":"2026-04-23T20:31:36.595227+08:00","gmt_modified":"2026-04-23T20:31:36.595227+08:00"},{"id":561,"source_id":"e68ad5186f1e47610ab3d9f14a794393","target_id":"c5ae7697193b2b93425ff25d2d7d54a9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-38","gmt_create":"2026-04-23T20:31:36.596503+08:00","gmt_modified":"2026-04-23T20:31:36.596503+08:00"},{"id":562,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"aa8c3fa3bc509dafe64d113bdd09eafa","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/doubao.py#10-38","gmt_create":"2026-04-23T20:31:36.597069+08:00","gmt_modified":"2026-04-23T20:31:36.597069+08:00"},{"id":563,"source_id":"404f6d0765a8c6e77e33b7fc21b377a4","target_id":"aa8c3fa3bc509dafe64d113bdd09eafa","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-38","gmt_create":"2026-04-23T20:31:36.597765+08:00","gmt_modified":"2026-04-23T20:31:36.597765+08:00"},{"id":564,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"eabb031e538ea62cab69b01368740d20","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/qingyan.py#10-38","gmt_create":"2026-04-23T20:31:36.598445+08:00","gmt_modified":"2026-04-23T20:31:36.598445+08:00"},{"id":565,"source_id":"303e80519e946904d1cb3ac32cbb0814","target_id":"eabb031e538ea62cab69b01368740d20","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-38","gmt_create":"2026-04-23T20:31:36.599093+08:00","gmt_modified":"2026-04-23T20:31:36.599093+08:00"},{"id":566,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"b1c09e372a63e9854886adaea1663bea","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tiangong.py#10-38","gmt_create":"2026-04-23T20:31:36.599896+08:00","gmt_modified":"2026-04-23T20:31:36.599896+08:00"},{"id":567,"source_id":"5af7301fe056fc3d10820d820e8ad777","target_id":"b1c09e372a63e9854886adaea1663bea","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-38","gmt_create":"2026-04-23T20:31:36.600604+08:00","gmt_modified":"2026-04-23T20:31:36.600604+08:00"},{"id":568,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"79793bcd507f9d287d19014b60d963d3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/xinghuo.py#10-38","gmt_create":"2026-04-23T20:31:36.601204+08:00","gmt_modified":"2026-04-23T20:31:36.601204+08:00"},{"id":569,"source_id":"0e38ad5d2d3daaad08c9302df8805b15","target_id":"79793bcd507f9d287d19014b60d963d3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-38","gmt_create":"2026-04-23T20:31:36.60148+08:00","gmt_modified":"2026-04-23T20:31:36.60148+08:00"},{"id":570,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"102223dd13475177a1ade8b9be14fbd1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#79-144","gmt_create":"2026-04-23T20:31:36.603752+08:00","gmt_modified":"2026-04-23T20:31:36.603752+08:00"},{"id":571,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"102223dd13475177a1ade8b9be14fbd1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 79-144","gmt_create":"2026-04-23T20:31:36.606514+08:00","gmt_modified":"2026-04-23T20:31:36.606514+08:00"},{"id":572,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"8565f299083b4dcba5a328c947f06fee","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#256-287","gmt_create":"2026-04-23T20:31:36.609013+08:00","gmt_modified":"2026-04-23T20:31:36.609013+08:00"},{"id":573,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"8565f299083b4dcba5a328c947f06fee","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 256-287","gmt_create":"2026-04-23T20:31:36.609501+08:00","gmt_modified":"2026-04-23T20:31:36.609501+08:00"},{"id":574,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"8af91caf063c12c8236f9675769ce4a1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_citation_engine.py#1-54","gmt_create":"2026-04-23T20:31:36.610558+08:00","gmt_modified":"2026-04-23T20:31:36.610558+08:00"},{"id":575,"source_id":"b07a4fb9cecbbd66a6910ccbc7651f19","target_id":"8af91caf063c12c8236f9675769ce4a1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-54","gmt_create":"2026-04-23T20:31:36.610946+08:00","gmt_modified":"2026-04-23T20:31:36.610946+08:00"},{"id":576,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"005172b71dc742cf6803c5eb0185091e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/requirements.txt#1-36","gmt_create":"2026-04-23T20:31:36.612653+08:00","gmt_modified":"2026-04-23T20:31:36.612653+08:00"},{"id":577,"source_id":"a26ee01cf41da3b956e1650448c156fa","target_id":"005172b71dc742cf6803c5eb0185091e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-36","gmt_create":"2026-04-23T20:31:36.613263+08:00","gmt_modified":"2026-04-23T20:31:36.613263+08:00"},{"id":578,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"b55cc5936c299f819b57b899858438e6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#139-144","gmt_create":"2026-04-23T20:31:36.614861+08:00","gmt_modified":"2026-04-23T20:31:36.614861+08:00"},{"id":579,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"b55cc5936c299f819b57b899858438e6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 139-144","gmt_create":"2026-04-23T20:31:36.615692+08:00","gmt_modified":"2026-04-23T20:31:36.615692+08:00"},{"id":580,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"384b1939e53970ce7ae75d241a49da5f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tongyi.py#22-29","gmt_create":"2026-04-23T20:31:36.615996+08:00","gmt_modified":"2026-04-23T20:31:36.615996+08:00"},{"id":581,"source_id":"e68ad5186f1e47610ab3d9f14a794393","target_id":"384b1939e53970ce7ae75d241a49da5f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 22-29","gmt_create":"2026-04-23T20:31:36.61682+08:00","gmt_modified":"2026-04-23T20:31:36.61682+08:00"},{"id":582,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"f096aa3ea82e9fa625a9acb1309b4c50","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#231-247","gmt_create":"2026-04-23T20:31:36.617171+08:00","gmt_modified":"2026-04-23T20:31:36.617171+08:00"},{"id":583,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"f096aa3ea82e9fa625a9acb1309b4c50","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 231-247","gmt_create":"2026-04-23T20:31:36.617385+08:00","gmt_modified":"2026-04-23T20:31:36.617385+08:00"},{"id":584,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"15b8ebf74b0a5dfac58024d323ca8d0a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#164-175","gmt_create":"2026-04-23T20:31:36.618327+08:00","gmt_modified":"2026-04-23T20:31:36.618327+08:00"},{"id":585,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"15b8ebf74b0a5dfac58024d323ca8d0a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 164-175","gmt_create":"2026-04-23T20:31:36.618609+08:00","gmt_modified":"2026-04-23T20:31:36.618609+08:00"},{"id":586,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"f642fc1c2f34e15572d9d98aa6c18813","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-23T20:31:50.473102+08:00","gmt_modified":"2026-04-23T20:31:50.473102+08:00"},{"id":587,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"a16cf42e9559523c4f96ca4c79f9488d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/base.py","gmt_create":"2026-04-23T20:31:50.473614+08:00","gmt_modified":"2026-04-23T20:31:50.473614+08:00"},{"id":588,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"6a63f048c16c60c5d2d57012c810ee0e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/search_engine.py","gmt_create":"2026-04-23T20:31:50.474171+08:00","gmt_modified":"2026-04-23T20:31:50.474171+08:00"},{"id":589,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"74040de652d5e57f548bb5c4adc3e1a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/citation_engine.py","gmt_create":"2026-04-23T20:31:50.474429+08:00","gmt_modified":"2026-04-23T20:31:50.474429+08:00"},{"id":590,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T20:31:50.474658+08:00","gmt_modified":"2026-04-23T20:31:50.474658+08:00"},{"id":591,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T20:31:50.474883+08:00","gmt_modified":"2026-04-23T20:31:50.474883+08:00"},{"id":592,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"6b3d903205941aa9391dd90016e1102c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/queries.py","gmt_create":"2026-04-23T20:31:50.475158+08:00","gmt_modified":"2026-04-23T20:31:50.475158+08:00"},{"id":593,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"e9b52adbec3c07cf021e488dd3f99ab4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/Dockerfile","gmt_create":"2026-04-23T20:31:50.475559+08:00","gmt_modified":"2026-04-23T20:31:50.475559+08:00"},{"id":594,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"8f973791233c698b3e64a4fb28a93d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/kimi.py","gmt_create":"2026-04-23T20:31:50.475799+08:00","gmt_modified":"2026-04-23T20:31:50.475799+08:00"},{"id":595,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"e68ad5186f1e47610ab3d9f14a794393","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/tongyi.py","gmt_create":"2026-04-23T20:31:50.47602+08:00","gmt_modified":"2026-04-23T20:31:50.47602+08:00"},{"id":596,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"42ff5383133d176cec9eb88682483be3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_citations.py","gmt_create":"2026-04-23T20:31:50.476237+08:00","gmt_modified":"2026-04-23T20:31:50.476237+08:00"},{"id":597,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"72a110dca58d8152758e2fdab4e94761","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#1-18","gmt_create":"2026-04-23T20:31:50.476528+08:00","gmt_modified":"2026-04-23T20:31:50.476528+08:00"},{"id":598,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"bcfade20d923c8efa713808ca9af94ca","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#10-38","gmt_create":"2026-04-23T20:31:50.476982+08:00","gmt_modified":"2026-04-23T20:31:50.476982+08:00"},{"id":599,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"bcfade20d923c8efa713808ca9af94ca","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-38","gmt_create":"2026-04-23T20:31:50.477216+08:00","gmt_modified":"2026-04-23T20:31:50.477216+08:00"},{"id":600,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"ca7e1232fbba5fb75e04ab8e491bfbd1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#10-38","gmt_create":"2026-04-23T20:31:50.477565+08:00","gmt_modified":"2026-04-23T20:31:50.477565+08:00"},{"id":601,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"ca7e1232fbba5fb75e04ab8e491bfbd1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-38","gmt_create":"2026-04-23T20:31:50.477978+08:00","gmt_modified":"2026-04-23T20:31:50.477978+08:00"},{"id":602,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"c5ae7697193b2b93425ff25d2d7d54a9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tongyi.py#10-38","gmt_create":"2026-04-23T20:31:50.478592+08:00","gmt_modified":"2026-04-23T20:31:50.478592+08:00"},{"id":603,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"557ae34b57a5dd8e8fa3bb2a6ce178a7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#163-174","gmt_create":"2026-04-23T20:31:50.479311+08:00","gmt_modified":"2026-04-23T20:31:50.479311+08:00"},{"id":604,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"9720b93ed7247efb685e2825e5f964bf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#161-176","gmt_create":"2026-04-23T20:31:50.479856+08:00","gmt_modified":"2026-04-23T20:31:50.479856+08:00"},{"id":605,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"9720b93ed7247efb685e2825e5f964bf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 161-176","gmt_create":"2026-04-23T20:31:50.48037+08:00","gmt_modified":"2026-04-23T20:31:50.48037+08:00"},{"id":606,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"0d226400124ba891a46f59c36781ccd8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#9-23","gmt_create":"2026-04-23T20:31:50.481311+08:00","gmt_modified":"2026-04-23T20:31:50.481311+08:00"},{"id":607,"source_id":"9ff19022ef915615911280e3c49ed44b","target_id":"0d226400124ba891a46f59c36781ccd8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 9-23","gmt_create":"2026-04-23T20:31:50.481625+08:00","gmt_modified":"2026-04-23T20:31:50.481625+08:00"},{"id":608,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"412695e5de2014514a8f62f98c573656","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/Dockerfile#1-41","gmt_create":"2026-04-23T20:31:50.482236+08:00","gmt_modified":"2026-04-23T20:31:50.482236+08:00"},{"id":609,"source_id":"e9b52adbec3c07cf021e488dd3f99ab4","target_id":"412695e5de2014514a8f62f98c573656","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-41","gmt_create":"2026-04-23T20:31:50.483281+08:00","gmt_modified":"2026-04-23T20:31:50.483281+08:00"},{"id":610,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"4fb8856be3a581fe8303d11b2284ca29","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#11-55","gmt_create":"2026-04-23T20:31:50.483853+08:00","gmt_modified":"2026-04-23T20:31:50.483854+08:00"},{"id":611,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"485e15eb30a5b08da38a628c9dd5053e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#16-77","gmt_create":"2026-04-23T20:31:50.48646+08:00","gmt_modified":"2026-04-23T20:31:50.48646+08:00"},{"id":612,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"485e15eb30a5b08da38a628c9dd5053e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-77","gmt_create":"2026-04-23T20:31:50.486841+08:00","gmt_modified":"2026-04-23T20:31:50.486841+08:00"},{"id":613,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"ad67863041d9eea2b0fb542b5aa33aca","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#4-18","gmt_create":"2026-04-23T20:31:50.487399+08:00","gmt_modified":"2026-04-23T20:31:50.487399+08:00"},{"id":614,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"8565f299083b4dcba5a328c947f06fee","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#256-287","gmt_create":"2026-04-23T20:31:50.488281+08:00","gmt_modified":"2026-04-23T20:31:50.488281+08:00"},{"id":615,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"77158a6f887e224a03552893bfec7c92","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#16-33","gmt_create":"2026-04-23T20:31:50.488807+08:00","gmt_modified":"2026-04-23T20:31:50.488807+08:00"},{"id":616,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"77158a6f887e224a03552893bfec7c92","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-33","gmt_create":"2026-04-23T20:31:50.489038+08:00","gmt_modified":"2026-04-23T20:31:50.489038+08:00"},{"id":617,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"5c3f336b5a7b4af4cc2f2ac183539218","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#79-145","gmt_create":"2026-04-23T20:31:50.491706+08:00","gmt_modified":"2026-04-23T20:31:50.491706+08:00"},{"id":618,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"5c3f336b5a7b4af4cc2f2ac183539218","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 79-145","gmt_create":"2026-04-23T20:31:50.492445+08:00","gmt_modified":"2026-04-23T20:31:50.492445+08:00"},{"id":619,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"3894c1ed9dca2ebf2359f40ebdb1959e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#147-174","gmt_create":"2026-04-23T20:31:50.493129+08:00","gmt_modified":"2026-04-23T20:31:50.493129+08:00"},{"id":620,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"3894c1ed9dca2ebf2359f40ebdb1959e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 147-174","gmt_create":"2026-04-23T20:31:50.493716+08:00","gmt_modified":"2026-04-23T20:31:50.493716+08:00"},{"id":621,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"362d22f423631cda39404660b3317a2f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#177-254","gmt_create":"2026-04-23T20:31:50.494347+08:00","gmt_modified":"2026-04-23T20:31:50.494348+08:00"},{"id":622,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"e27bcba24aaadeec1922d2b4e5b8386b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#1-109","gmt_create":"2026-04-23T20:31:50.496521+08:00","gmt_modified":"2026-04-23T20:31:50.496521+08:00"},{"id":623,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"e27bcba24aaadeec1922d2b4e5b8386b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-109","gmt_create":"2026-04-23T20:31:50.496915+08:00","gmt_modified":"2026-04-23T20:31:50.496915+08:00"},{"id":624,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"5f893f5078aa8e549284feb057aa45da","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#16-29","gmt_create":"2026-04-23T20:31:50.499115+08:00","gmt_modified":"2026-04-23T20:31:50.499115+08:00"},{"id":625,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"5f893f5078aa8e549284feb057aa45da","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-29","gmt_create":"2026-04-23T20:31:50.49944+08:00","gmt_modified":"2026-04-23T20:31:50.49944+08:00"},{"id":626,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"b55cc5936c299f819b57b899858438e6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#139-144","gmt_create":"2026-04-23T20:31:50.50016+08:00","gmt_modified":"2026-04-23T20:31:50.50016+08:00"},{"id":627,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"e0b68d2d24760689a0f4f00dfee5f9f2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#28-76","gmt_create":"2026-04-23T20:31:50.500908+08:00","gmt_modified":"2026-04-23T20:31:50.500908+08:00"},{"id":628,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"e0b68d2d24760689a0f4f00dfee5f9f2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 28-76","gmt_create":"2026-04-23T20:31:50.501388+08:00","gmt_modified":"2026-04-23T20:31:50.501388+08:00"},{"id":629,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"e9b98ae83632342d8e06cde39e9c9462","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#105-137","gmt_create":"2026-04-23T20:31:50.502229+08:00","gmt_modified":"2026-04-23T20:31:50.502229+08:00"},{"id":630,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"e9b98ae83632342d8e06cde39e9c9462","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 105-137","gmt_create":"2026-04-23T20:31:50.502758+08:00","gmt_modified":"2026-04-23T20:31:50.502758+08:00"},{"id":631,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"f096aa3ea82e9fa625a9acb1309b4c50","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#231-247","gmt_create":"2026-04-23T20:31:50.503532+08:00","gmt_modified":"2026-04-23T20:31:50.503532+08:00"},{"id":632,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"2a4f741f31f62dce8ad63be2e831f520","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_citations.py#23-93","gmt_create":"2026-04-23T20:31:50.504205+08:00","gmt_modified":"2026-04-23T20:31:50.504206+08:00"},{"id":633,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"c86edb7a95fbe4b431ac65a0e2b8636e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#90-109","gmt_create":"2026-04-23T20:31:50.504719+08:00","gmt_modified":"2026-04-23T20:31:50.504719+08:00"},{"id":634,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"c86edb7a95fbe4b431ac65a0e2b8636e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 90-109","gmt_create":"2026-04-23T20:31:50.505358+08:00","gmt_modified":"2026-04-23T20:31:50.505358+08:00"},{"id":635,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/scheduler.py","gmt_create":"2026-04-23T20:33:30.005285+08:00","gmt_modified":"2026-04-23T20:33:30.005285+08:00"},{"id":636,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"74040de652d5e57f548bb5c4adc3e1a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/citation_engine.py","gmt_create":"2026-04-23T20:33:30.006785+08:00","gmt_modified":"2026-04-23T20:33:30.006785+08:00"},{"id":637,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T20:33:30.008852+08:00","gmt_modified":"2026-04-23T20:33:30.008852+08:00"},{"id":638,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T20:33:30.010802+08:00","gmt_modified":"2026-04-23T20:33:30.010803+08:00"},{"id":639,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"9228ff67d4c757a85d9421b71f4b29f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/main.py","gmt_create":"2026-04-23T20:33:30.011496+08:00","gmt_modified":"2026-04-23T20:33:30.011496+08:00"},{"id":640,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"b0c428683c8a3e6922d90ca0d8c2736d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/database.py","gmt_create":"2026-04-23T20:33:30.012521+08:00","gmt_modified":"2026-04-23T20:33:30.012521+08:00"},{"id":641,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T20:33:30.013288+08:00","gmt_modified":"2026-04-23T20:33:30.013288+08:00"},{"id":642,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"8f973791233c698b3e64a4fb28a93d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/kimi.py","gmt_create":"2026-04-23T20:33:30.014048+08:00","gmt_modified":"2026-04-23T20:33:30.014048+08:00"},{"id":643,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"f642fc1c2f34e15572d9d98aa6c18813","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-23T20:33:30.014998+08:00","gmt_modified":"2026-04-23T20:33:30.014998+08:00"},{"id":644,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"a16cf42e9559523c4f96ca4c79f9488d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/base.py","gmt_create":"2026-04-23T20:33:30.015593+08:00","gmt_modified":"2026-04-23T20:33:30.015593+08:00"},{"id":645,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T20:33:30.016186+08:00","gmt_modified":"2026-04-23T20:33:30.016187+08:00"},{"id":646,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"88d22de3b2a7419868e8ae19130d860c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/query.py","gmt_create":"2026-04-23T20:33:30.017118+08:00","gmt_modified":"2026-04-23T20:33:30.017118+08:00"},{"id":647,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"b2f0d46a31a5441594f2e777365fc156","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_scheduler.py","gmt_create":"2026-04-23T20:33:30.017481+08:00","gmt_modified":"2026-04-23T20:33:30.017481+08:00"},{"id":648,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"096856da621e23e78422a15e2bfce1f1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#13-22","gmt_create":"2026-04-23T20:33:30.018279+08:00","gmt_modified":"2026-04-23T20:33:30.018279+08:00"},{"id":649,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"e230904202fcf7a861c6f49b84f9f863","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#25-95","gmt_create":"2026-04-23T20:33:30.019076+08:00","gmt_modified":"2026-04-23T20:33:30.019076+08:00"},{"id":650,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"309607c54b12a6340edc086ffb4737c9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#148-309","gmt_create":"2026-04-23T20:33:30.020384+08:00","gmt_modified":"2026-04-23T20:33:30.020384+08:00"},{"id":651,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"6e054d9a78c0c8c9da8dec4c4bda62ab","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#6-28","gmt_create":"2026-04-23T20:33:30.021894+08:00","gmt_modified":"2026-04-23T20:33:30.021895+08:00"},{"id":652,"source_id":"b0c428683c8a3e6922d90ca0d8c2736d","target_id":"6e054d9a78c0c8c9da8dec4c4bda62ab","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 6-28","gmt_create":"2026-04-23T20:33:30.022319+08:00","gmt_modified":"2026-04-23T20:33:30.022319+08:00"},{"id":653,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"4fb8856be3a581fe8303d11b2284ca29","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#11-55","gmt_create":"2026-04-23T20:33:30.039084+08:00","gmt_modified":"2026-04-23T20:33:30.039085+08:00"},{"id":654,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"c2747ca16b879bca0f68955534c3c4fc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#1-48","gmt_create":"2026-04-23T20:33:30.042279+08:00","gmt_modified":"2026-04-23T20:33:30.042279+08:00"},{"id":655,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"71f98c8993fb42b108e34a554247869b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#1-95","gmt_create":"2026-04-23T20:33:30.043781+08:00","gmt_modified":"2026-04-23T20:33:30.043781+08:00"},{"id":656,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"9bfc041fe426da2eb78353827e8d9163","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#1-29","gmt_create":"2026-04-23T20:33:30.048591+08:00","gmt_modified":"2026-04-23T20:33:30.048591+08:00"},{"id":657,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"6281fff17a86ec1895c64d87c2ae7fb1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#1-55","gmt_create":"2026-04-23T20:33:30.049875+08:00","gmt_modified":"2026-04-23T20:33:30.049875+08:00"},{"id":658,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"eecf9581dbaa0a515cf11514175e7ef9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#11-206","gmt_create":"2026-04-23T20:33:30.052505+08:00","gmt_modified":"2026-04-23T20:33:30.052505+08:00"},{"id":659,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"5563c29185326a59be61ee0a6eec4463","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#11-205","gmt_create":"2026-04-23T20:33:30.054452+08:00","gmt_modified":"2026-04-23T20:33:30.054452+08:00"},{"id":660,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"9c16a069e5154660bfdfa48f3518fc6a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#11-38","gmt_create":"2026-04-23T20:33:30.056033+08:00","gmt_modified":"2026-04-23T20:33:30.056033+08:00"},{"id":661,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"9c16a069e5154660bfdfa48f3518fc6a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-38","gmt_create":"2026-04-23T20:33:30.056759+08:00","gmt_modified":"2026-04-23T20:33:30.056759+08:00"},{"id":662,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"2d35e1345d25020f8e7ac1318db06f7b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#30-90","gmt_create":"2026-04-23T20:33:30.060127+08:00","gmt_modified":"2026-04-23T20:33:30.060127+08:00"},{"id":663,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"160b5326537d25444c40a459a01e79c6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#159-234","gmt_create":"2026-04-23T20:33:30.06165+08:00","gmt_modified":"2026-04-23T20:33:30.06165+08:00"},{"id":664,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"a4918fcbd21492ad996d7f5496f03a4b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#33-48","gmt_create":"2026-04-23T20:33:30.063084+08:00","gmt_modified":"2026-04-23T20:33:30.063084+08:00"},{"id":665,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"a4918fcbd21492ad996d7f5496f03a4b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-48","gmt_create":"2026-04-23T20:33:30.063941+08:00","gmt_modified":"2026-04-23T20:33:30.063941+08:00"},{"id":666,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"bc38d046b4b1410ae2165cee2272839e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#33-48","gmt_create":"2026-04-23T20:33:30.065013+08:00","gmt_modified":"2026-04-23T20:33:30.065013+08:00"},{"id":667,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"bc38d046b4b1410ae2165cee2272839e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-48","gmt_create":"2026-04-23T20:33:30.066091+08:00","gmt_modified":"2026-04-23T20:33:30.066091+08:00"},{"id":668,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"72f6d334026866e8a61d2ffb1d83370a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#19-100","gmt_create":"2026-04-23T20:33:30.06977+08:00","gmt_modified":"2026-04-23T20:33:30.06977+08:00"},{"id":669,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"72f6d334026866e8a61d2ffb1d83370a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 19-100","gmt_create":"2026-04-23T20:33:30.070839+08:00","gmt_modified":"2026-04-23T20:33:30.070839+08:00"},{"id":670,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"5c67e2f70283956b2d29a3c1443eb514","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#122-146","gmt_create":"2026-04-23T20:33:30.07226+08:00","gmt_modified":"2026-04-23T20:33:30.07226+08:00"},{"id":671,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"ad67863041d9eea2b0fb542b5aa33aca","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#4-18","gmt_create":"2026-04-23T20:33:30.076075+08:00","gmt_modified":"2026-04-23T20:33:30.076076+08:00"},{"id":672,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"1e85186eded8743ff5f231df4aa6df3f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#21-48","gmt_create":"2026-04-23T20:33:30.080882+08:00","gmt_modified":"2026-04-23T20:33:30.080882+08:00"},{"id":673,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"1d84b9a7eb013882953a2d1d948299e4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#126-197","gmt_create":"2026-04-23T20:33:30.082996+08:00","gmt_modified":"2026-04-23T20:33:30.082997+08:00"},{"id":674,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"1d84b9a7eb013882953a2d1d948299e4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 126-197","gmt_create":"2026-04-23T20:33:30.084021+08:00","gmt_modified":"2026-04-23T20:33:30.084021+08:00"},{"id":675,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"e2b1718570fb714b2f4342221898ab30","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#21-48","gmt_create":"2026-04-23T20:33:30.08518+08:00","gmt_modified":"2026-04-23T20:33:30.085181+08:00"},{"id":676,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"ba687f2c64aff92b3906658359ed953a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#124-195","gmt_create":"2026-04-23T20:33:30.086912+08:00","gmt_modified":"2026-04-23T20:33:30.086913+08:00"},{"id":677,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"ba687f2c64aff92b3906658359ed953a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 124-195","gmt_create":"2026-04-23T20:33:30.087917+08:00","gmt_modified":"2026-04-23T20:33:30.087917+08:00"},{"id":678,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"52ee729b02c992c689522c7956c14128","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#57-62","gmt_create":"2026-04-23T20:33:30.090606+08:00","gmt_modified":"2026-04-23T20:33:30.090606+08:00"},{"id":679,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"52ee729b02c992c689522c7956c14128","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 57-62","gmt_create":"2026-04-23T20:33:30.092747+08:00","gmt_modified":"2026-04-23T20:33:30.092747+08:00"},{"id":680,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"c9e32b7324cce60c8887deb8404ee759","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#107-112","gmt_create":"2026-04-23T20:33:30.094246+08:00","gmt_modified":"2026-04-23T20:33:30.094246+08:00"},{"id":681,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"c9e32b7324cce60c8887deb8404ee759","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 107-112","gmt_create":"2026-04-23T20:33:30.095189+08:00","gmt_modified":"2026-04-23T20:33:30.095189+08:00"},{"id":682,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"212d822d207a4c0bd7825bbf20e188e9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#59-77","gmt_create":"2026-04-23T20:33:30.096673+08:00","gmt_modified":"2026-04-23T20:33:30.096673+08:00"},{"id":683,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"8355d3821337334caee57a75dc8c8865","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#116-130","gmt_create":"2026-04-23T20:33:30.098422+08:00","gmt_modified":"2026-04-23T20:33:30.098422+08:00"},{"id":684,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"8355d3821337334caee57a75dc8c8865","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 116-130","gmt_create":"2026-04-23T20:33:30.099427+08:00","gmt_modified":"2026-04-23T20:33:30.099427+08:00"},{"id":685,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"4fe27d4d1323b500e72d870aa6212a1a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#13-20","gmt_create":"2026-04-23T20:33:30.101771+08:00","gmt_modified":"2026-04-23T20:33:30.101771+08:00"},{"id":686,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"4fe27d4d1323b500e72d870aa6212a1a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-20","gmt_create":"2026-04-23T20:33:30.102515+08:00","gmt_modified":"2026-04-23T20:33:30.102515+08:00"},{"id":687,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"3729543092bccad8926c5ea852db1e69","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#148-157","gmt_create":"2026-04-23T20:33:30.103598+08:00","gmt_modified":"2026-04-23T20:33:30.103599+08:00"},{"id":688,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"3729543092bccad8926c5ea852db1e69","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 148-157","gmt_create":"2026-04-23T20:33:30.104105+08:00","gmt_modified":"2026-04-23T20:33:30.104105+08:00"},{"id":689,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"1ee5153c867fc6e9d277a3067963a1fc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#32-38","gmt_create":"2026-04-23T20:33:30.105113+08:00","gmt_modified":"2026-04-23T20:33:30.105113+08:00"},{"id":690,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"1ee5153c867fc6e9d277a3067963a1fc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 32-38","gmt_create":"2026-04-23T20:33:30.105627+08:00","gmt_modified":"2026-04-23T20:33:30.105627+08:00"},{"id":691,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"ed527c7a549ec333c2b30b59614343df","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#50-54","gmt_create":"2026-04-23T20:33:30.106672+08:00","gmt_modified":"2026-04-23T20:33:30.106672+08:00"},{"id":692,"source_id":"b74caccb06844efcdb14d8324cff65c2","target_id":"ed527c7a549ec333c2b30b59614343df","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 50-54","gmt_create":"2026-04-23T20:33:30.107651+08:00","gmt_modified":"2026-04-23T20:33:30.107651+08:00"},{"id":693,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"f6c9f1b4e8646c366a31426a4537675d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#36-38","gmt_create":"2026-04-23T20:33:30.109238+08:00","gmt_modified":"2026-04-23T20:33:30.109238+08:00"},{"id":694,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"1a3351698ecc7cd4e508b7a792804fc4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#302-309","gmt_create":"2026-04-23T20:33:30.111966+08:00","gmt_modified":"2026-04-23T20:33:30.111966+08:00"},{"id":695,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"1a3351698ecc7cd4e508b7a792804fc4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 302-309","gmt_create":"2026-04-23T20:33:30.112959+08:00","gmt_modified":"2026-04-23T20:33:30.11296+08:00"},{"id":696,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"e3e9710c7eead933c936519395f792e0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#44-49","gmt_create":"2026-04-23T20:33:30.114604+08:00","gmt_modified":"2026-04-23T20:33:30.114605+08:00"},{"id":697,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"e3e9710c7eead933c936519395f792e0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 44-49","gmt_create":"2026-04-23T20:33:30.115247+08:00","gmt_modified":"2026-04-23T20:33:30.115247+08:00"},{"id":698,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"d20fc729a5d3986b1c077f9e07ece9c4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#7","gmt_create":"2026-04-23T20:33:30.116587+08:00","gmt_modified":"2026-04-23T20:33:30.116587+08:00"},{"id":699,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"a4143cc29b14f1f5bc75a5e021690666","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#23-31","gmt_create":"2026-04-23T20:33:30.117646+08:00","gmt_modified":"2026-04-23T20:33:30.117646+08:00"},{"id":700,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"a4143cc29b14f1f5bc75a5e021690666","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-31","gmt_create":"2026-04-23T20:33:30.118764+08:00","gmt_modified":"2026-04-23T20:33:30.118764+08:00"},{"id":701,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"7192cfda5508e7587efd91d26cf1f018","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#23-31","gmt_create":"2026-04-23T20:33:30.120253+08:00","gmt_modified":"2026-04-23T20:33:30.120253+08:00"},{"id":702,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"7192cfda5508e7587efd91d26cf1f018","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-31","gmt_create":"2026-04-23T20:33:30.121853+08:00","gmt_modified":"2026-04-23T20:33:30.121853+08:00"},{"id":703,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"38142b7d7016c5590e638fafcdcb1a19","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#211-227","gmt_create":"2026-04-23T20:33:30.1234+08:00","gmt_modified":"2026-04-23T20:33:30.1234+08:00"},{"id":704,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"38142b7d7016c5590e638fafcdcb1a19","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 211-227","gmt_create":"2026-04-23T20:33:30.125433+08:00","gmt_modified":"2026-04-23T20:33:30.125433+08:00"},{"id":705,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"fb5276346dcc4e7044d8765a8572e7a8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#4-16","gmt_create":"2026-04-23T20:33:30.128657+08:00","gmt_modified":"2026-04-23T20:33:30.128657+08:00"},{"id":706,"source_id":"9ff19022ef915615911280e3c49ed44b","target_id":"fb5276346dcc4e7044d8765a8572e7a8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 4-16","gmt_create":"2026-04-23T20:33:30.129814+08:00","gmt_modified":"2026-04-23T20:33:30.129814+08:00"},{"id":707,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"74040de652d5e57f548bb5c4adc3e1a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/citation_engine.py","gmt_create":"2026-04-23T20:33:37.259749+08:00","gmt_modified":"2026-04-23T20:33:37.259749+08:00"},{"id":708,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"a16cf42e9559523c4f96ca4c79f9488d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/base.py","gmt_create":"2026-04-23T20:33:37.26107+08:00","gmt_modified":"2026-04-23T20:33:37.26107+08:00"},{"id":709,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"8f973791233c698b3e64a4fb28a93d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/kimi.py","gmt_create":"2026-04-23T20:33:37.261714+08:00","gmt_modified":"2026-04-23T20:33:37.261714+08:00"},{"id":710,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"f642fc1c2f34e15572d9d98aa6c18813","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-23T20:33:37.262532+08:00","gmt_modified":"2026-04-23T20:33:37.262532+08:00"},{"id":711,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"e68ad5186f1e47610ab3d9f14a794393","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/tongyi.py","gmt_create":"2026-04-23T20:33:37.263665+08:00","gmt_modified":"2026-04-23T20:33:37.263665+08:00"},{"id":712,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"404f6d0765a8c6e77e33b7fc21b377a4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/doubao.py","gmt_create":"2026-04-23T20:33:37.26425+08:00","gmt_modified":"2026-04-23T20:33:37.26425+08:00"},{"id":713,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"303e80519e946904d1cb3ac32cbb0814","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/qingyan.py","gmt_create":"2026-04-23T20:33:37.265278+08:00","gmt_modified":"2026-04-23T20:33:37.265278+08:00"},{"id":714,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"5af7301fe056fc3d10820d820e8ad777","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/tiangong.py","gmt_create":"2026-04-23T20:33:37.265809+08:00","gmt_modified":"2026-04-23T20:33:37.265809+08:00"},{"id":715,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"0e38ad5d2d3daaad08c9302df8805b15","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/xinghuo.py","gmt_create":"2026-04-23T20:33:37.266496+08:00","gmt_modified":"2026-04-23T20:33:37.266496+08:00"},{"id":716,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"6a63f048c16c60c5d2d57012c810ee0e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/search_engine.py","gmt_create":"2026-04-23T20:33:37.267203+08:00","gmt_modified":"2026-04-23T20:33:37.267203+08:00"},{"id":717,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/scheduler.py","gmt_create":"2026-04-23T20:33:37.268722+08:00","gmt_modified":"2026-04-23T20:33:37.268722+08:00"},{"id":718,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"04e3926c080e795713bff683e7dc9d3e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/citation.py","gmt_create":"2026-04-23T20:33:37.269288+08:00","gmt_modified":"2026-04-23T20:33:37.269288+08:00"},{"id":719,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T20:33:37.270139+08:00","gmt_modified":"2026-04-23T20:33:37.270139+08:00"},{"id":720,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"b4a81ef789630d0af6a8d50859d01bf3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/citation_record.py","gmt_create":"2026-04-23T20:33:37.273632+08:00","gmt_modified":"2026-04-23T20:33:37.273632+08:00"},{"id":721,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T20:33:37.275218+08:00","gmt_modified":"2026-04-23T20:33:37.275218+08:00"},{"id":722,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T20:33:37.276269+08:00","gmt_modified":"2026-04-23T20:33:37.27627+08:00"},{"id":723,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T20:33:37.277294+08:00","gmt_modified":"2026-04-23T20:33:37.277294+08:00"},{"id":724,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"9228ff67d4c757a85d9421b71f4b29f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/main.py","gmt_create":"2026-04-23T20:33:37.278423+08:00","gmt_modified":"2026-04-23T20:33:37.278423+08:00"},{"id":725,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"b07a4fb9cecbbd66a6910ccbc7651f19","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_citation_engine.py","gmt_create":"2026-04-23T20:33:37.279079+08:00","gmt_modified":"2026-04-23T20:33:37.279079+08:00"},{"id":726,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"a26ee01cf41da3b956e1650448c156fa","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/requirements.txt","gmt_create":"2026-04-23T20:33:37.279629+08:00","gmt_modified":"2026-04-23T20:33:37.27963+08:00"},{"id":727,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"cbd0101fa84d957bcb1baaa623c6b31c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#1-78","gmt_create":"2026-04-23T20:33:37.280454+08:00","gmt_modified":"2026-04-23T20:33:37.280454+08:00"},{"id":728,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"6b3d903205941aa9391dd90016e1102c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/queries.py","gmt_create":"2026-04-23T20:33:37.281512+08:00","gmt_modified":"2026-04-23T20:33:37.281513+08:00"},{"id":729,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"482d573f97b482b99bcde1c399eceb73","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#90-108","gmt_create":"2026-04-23T20:33:37.281875+08:00","gmt_modified":"2026-04-23T20:33:37.281876+08:00"},{"id":730,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"482d573f97b482b99bcde1c399eceb73","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 90-108","gmt_create":"2026-04-23T20:33:37.28285+08:00","gmt_modified":"2026-04-23T20:33:37.28285+08:00"},{"id":731,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"7c0831c17e8c65eaed9511e17ed2a2ef","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#1-269","gmt_create":"2026-04-23T20:33:37.283208+08:00","gmt_modified":"2026-04-23T20:33:37.283208+08:00"},{"id":732,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"88d22de3b2a7419868e8ae19130d860c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/query.py","gmt_create":"2026-04-23T20:33:37.283598+08:00","gmt_modified":"2026-04-23T20:33:37.283598+08:00"},{"id":733,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"4cef9e740b6feb68c6bd22b660c47320","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#1-123","gmt_create":"2026-04-23T20:33:37.284031+08:00","gmt_modified":"2026-04-23T20:33:37.284031+08:00"},{"id":734,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"8d5aac2ae0671f05d7c0807ba9296cdf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#1-330","gmt_create":"2026-04-23T20:33:37.284881+08:00","gmt_modified":"2026-04-23T20:33:37.284881+08:00"},{"id":735,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"72a110dca58d8152758e2fdab4e94761","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#1-18","gmt_create":"2026-04-23T20:33:37.285439+08:00","gmt_modified":"2026-04-23T20:33:37.285439+08:00"},{"id":736,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"56f44cc97867cee3e5663424134d6072","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#1-37","gmt_create":"2026-04-23T20:33:37.285889+08:00","gmt_modified":"2026-04-23T20:33:37.285889+08:00"},{"id":737,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"56f44cc97867cee3e5663424134d6072","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-04-23T20:33:37.286195+08:00","gmt_modified":"2026-04-23T20:33:37.286195+08:00"},{"id":738,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"2e326ef8322619f1e8b3873022cb0437","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#1-37","gmt_create":"2026-04-23T20:33:37.286846+08:00","gmt_modified":"2026-04-23T20:33:37.286846+08:00"},{"id":739,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"2e326ef8322619f1e8b3873022cb0437","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-04-23T20:33:37.287299+08:00","gmt_modified":"2026-04-23T20:33:37.287299+08:00"},{"id":740,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"debd789847d1eed2d54198772edf68a2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tongyi.py#1-38","gmt_create":"2026-04-23T20:33:37.28771+08:00","gmt_modified":"2026-04-23T20:33:37.287711+08:00"},{"id":741,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"3bde521d18cc7221ae2f14637e163aac","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/doubao.py#1-38","gmt_create":"2026-04-23T20:33:37.288659+08:00","gmt_modified":"2026-04-23T20:33:37.288659+08:00"},{"id":742,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"c26862d9e0fc878b51a2668cfd2ec827","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/qingyan.py#1-38","gmt_create":"2026-04-23T20:33:37.290497+08:00","gmt_modified":"2026-04-23T20:33:37.290498+08:00"},{"id":743,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"0fcc9c2e0d33b887c5f18a3807b64a1e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tiangong.py#1-38","gmt_create":"2026-04-23T20:33:37.292345+08:00","gmt_modified":"2026-04-23T20:33:37.292345+08:00"},{"id":744,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"a4baa2444208b3f9a3f42bc492038207","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/xinghuo.py#1-38","gmt_create":"2026-04-23T20:33:37.293708+08:00","gmt_modified":"2026-04-23T20:33:37.293708+08:00"},{"id":745,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"9f82f6d82bf914a608d6afa3d9854abf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#1-174","gmt_create":"2026-04-23T20:33:37.2944+08:00","gmt_modified":"2026-04-23T20:33:37.2944+08:00"},{"id":746,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"4cac57dbc530f0335c913ec5725dfa4f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#1-121","gmt_create":"2026-04-23T20:33:37.295331+08:00","gmt_modified":"2026-04-23T20:33:37.295331+08:00"},{"id":747,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"4cac57dbc530f0335c913ec5725dfa4f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-121","gmt_create":"2026-04-23T20:33:37.296239+08:00","gmt_modified":"2026-04-23T20:33:37.296239+08:00"},{"id":748,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"6281fff17a86ec1895c64d87c2ae7fb1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#1-55","gmt_create":"2026-04-23T20:33:37.296858+08:00","gmt_modified":"2026-04-23T20:33:37.296858+08:00"},{"id":749,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"6628e006b8e5ca16160743528b6b0506","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#1-39","gmt_create":"2026-04-23T20:33:37.297624+08:00","gmt_modified":"2026-04-23T20:33:37.297624+08:00"},{"id":750,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"943c18db69a04b3137fba4cebcfea87e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#1-42","gmt_create":"2026-04-23T20:33:37.298765+08:00","gmt_modified":"2026-04-23T20:33:37.298765+08:00"},{"id":751,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"84fbed7d35f7752e2117a74fcaf5f0e9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#1-17","gmt_create":"2026-04-23T20:33:37.299752+08:00","gmt_modified":"2026-04-23T20:33:37.299752+08:00"},{"id":752,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"c2747ca16b879bca0f68955534c3c4fc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#1-48","gmt_create":"2026-04-23T20:33:37.30067+08:00","gmt_modified":"2026-04-23T20:33:37.30067+08:00"},{"id":753,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"db174cfe219fc84d0dd26529f047b1d0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#161-330","gmt_create":"2026-04-23T20:33:37.304109+08:00","gmt_modified":"2026-04-23T20:33:37.304109+08:00"},{"id":754,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"db174cfe219fc84d0dd26529f047b1d0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 161-330","gmt_create":"2026-04-23T20:33:37.304836+08:00","gmt_modified":"2026-04-23T20:33:37.304836+08:00"},{"id":755,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"f36452f78aabfb0c46da03bbe25dff06","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#219-295","gmt_create":"2026-04-23T20:33:37.307629+08:00","gmt_modified":"2026-04-23T20:33:37.307629+08:00"},{"id":756,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"f36452f78aabfb0c46da03bbe25dff06","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 219-295","gmt_create":"2026-04-23T20:33:37.308258+08:00","gmt_modified":"2026-04-23T20:33:37.308258+08:00"},{"id":757,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"362d22f423631cda39404660b3317a2f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#177-254","gmt_create":"2026-04-23T20:33:37.310127+08:00","gmt_modified":"2026-04-23T20:33:37.310127+08:00"},{"id":758,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"b475ff5225ac403c7fcf3dd7e14cbac6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tongyi.py#16-33","gmt_create":"2026-04-23T20:33:37.31061+08:00","gmt_modified":"2026-04-23T20:33:37.31061+08:00"},{"id":759,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"557ae34b57a5dd8e8fa3bb2a6ce178a7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#163-174","gmt_create":"2026-04-23T20:33:37.311106+08:00","gmt_modified":"2026-04-23T20:33:37.311106+08:00"},{"id":760,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"52c01d7b9c17aa16944cbfcf8885be61","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#16-33","gmt_create":"2026-04-23T20:33:37.311558+08:00","gmt_modified":"2026-04-23T20:33:37.311558+08:00"},{"id":761,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"52c01d7b9c17aa16944cbfcf8885be61","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-33","gmt_create":"2026-04-23T20:33:37.319146+08:00","gmt_modified":"2026-04-23T20:33:37.319146+08:00"},{"id":762,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"77158a6f887e224a03552893bfec7c92","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#16-33","gmt_create":"2026-04-23T20:33:37.320166+08:00","gmt_modified":"2026-04-23T20:33:37.320166+08:00"},{"id":763,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"9d352899554ab41b65b2e9f32558d811","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#39-113","gmt_create":"2026-04-23T20:33:37.321322+08:00","gmt_modified":"2026-04-23T20:33:37.321322+08:00"},{"id":764,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"9d352899554ab41b65b2e9f32558d811","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 39-113","gmt_create":"2026-04-23T20:33:37.322276+08:00","gmt_modified":"2026-04-23T20:33:37.322276+08:00"},{"id":765,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"b1ee5a992230844ba898765be63f7b27","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#32-133","gmt_create":"2026-04-23T20:33:37.323119+08:00","gmt_modified":"2026-04-23T20:33:37.323119+08:00"},{"id":766,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"b1ee5a992230844ba898765be63f7b27","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 32-133","gmt_create":"2026-04-23T20:33:37.323615+08:00","gmt_modified":"2026-04-23T20:33:37.323615+08:00"},{"id":767,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"cb098a3cd32339e99f755dfd0fc35b5c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_citation_engine.py#6-127","gmt_create":"2026-04-23T20:33:37.324259+08:00","gmt_modified":"2026-04-23T20:33:37.324259+08:00"},{"id":768,"source_id":"b07a4fb9cecbbd66a6910ccbc7651f19","target_id":"cb098a3cd32339e99f755dfd0fc35b5c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 6-127","gmt_create":"2026-04-23T20:33:37.32508+08:00","gmt_modified":"2026-04-23T20:33:37.32508+08:00"},{"id":769,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"3d2dab79f7a3fedf24f0212cc9ef7aa1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#145-158","gmt_create":"2026-04-23T20:33:37.325915+08:00","gmt_modified":"2026-04-23T20:33:37.325915+08:00"},{"id":770,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"3d2dab79f7a3fedf24f0212cc9ef7aa1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 145-158","gmt_create":"2026-04-23T20:33:37.327012+08:00","gmt_modified":"2026-04-23T20:33:37.327012+08:00"},{"id":771,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"4e9b3d0e94282f4bc6fa500f4eed61a1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#135-159","gmt_create":"2026-04-23T20:33:37.327853+08:00","gmt_modified":"2026-04-23T20:33:37.327853+08:00"},{"id":772,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"4e9b3d0e94282f4bc6fa500f4eed61a1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 135-159","gmt_create":"2026-04-23T20:33:37.328872+08:00","gmt_modified":"2026-04-23T20:33:37.328872+08:00"},{"id":773,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"8e3201561a9dd9a06ee3bf68ffdb3f99","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_citation_engine.py#39-109","gmt_create":"2026-04-23T20:33:37.32989+08:00","gmt_modified":"2026-04-23T20:33:37.32989+08:00"},{"id":774,"source_id":"b07a4fb9cecbbd66a6910ccbc7651f19","target_id":"8e3201561a9dd9a06ee3bf68ffdb3f99","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 39-109","gmt_create":"2026-04-23T20:33:37.33132+08:00","gmt_modified":"2026-04-23T20:33:37.33132+08:00"},{"id":775,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"c3a417be3d61f5bcd3fbf976e0c4f15a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#33-121","gmt_create":"2026-04-23T20:33:37.336944+08:00","gmt_modified":"2026-04-23T20:33:37.336944+08:00"},{"id":776,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"c3a417be3d61f5bcd3fbf976e0c4f15a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-121","gmt_create":"2026-04-23T20:33:37.337655+08:00","gmt_modified":"2026-04-23T20:33:37.337655+08:00"},{"id":777,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"096856da621e23e78422a15e2bfce1f1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#13-22","gmt_create":"2026-04-23T20:33:37.339169+08:00","gmt_modified":"2026-04-23T20:33:37.339169+08:00"},{"id":778,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"7ce954ed7d3bc4dcf78630124cc0dd88","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#264-295","gmt_create":"2026-04-23T20:33:37.34124+08:00","gmt_modified":"2026-04-23T20:33:37.34124+08:00"},{"id":779,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"7ce954ed7d3bc4dcf78630124cc0dd88","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 264-295","gmt_create":"2026-04-23T20:33:37.342433+08:00","gmt_modified":"2026-04-23T20:33:37.342433+08:00"},{"id":780,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"7289a3568c137c8a671fc8c963bb8d28","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/requirements.txt#1-35","gmt_create":"2026-04-23T20:33:37.346038+08:00","gmt_modified":"2026-04-23T20:33:37.346038+08:00"},{"id":781,"source_id":"a26ee01cf41da3b956e1650448c156fa","target_id":"7289a3568c137c8a671fc8c963bb8d28","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-35","gmt_create":"2026-04-23T20:33:37.346577+08:00","gmt_modified":"2026-04-23T20:33:37.346577+08:00"},{"id":782,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"ef82ce4377c549013c200e19701a6805","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#21-32","gmt_create":"2026-04-23T20:33:37.352671+08:00","gmt_modified":"2026-04-23T20:33:37.352671+08:00"},{"id":783,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"ef82ce4377c549013c200e19701a6805","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 21-32","gmt_create":"2026-04-23T20:33:37.354355+08:00","gmt_modified":"2026-04-23T20:33:37.354355+08:00"},{"id":784,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"c7986eb1be0ffdd9ec4e243be4270119","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#21-32","gmt_create":"2026-04-23T20:33:37.355472+08:00","gmt_modified":"2026-04-23T20:33:37.355472+08:00"},{"id":785,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"c7986eb1be0ffdd9ec4e243be4270119","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 21-32","gmt_create":"2026-04-23T20:33:37.357613+08:00","gmt_modified":"2026-04-23T20:33:37.357613+08:00"},{"id":786,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"b55cc5936c299f819b57b899858438e6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#139-144","gmt_create":"2026-04-23T20:33:37.358273+08:00","gmt_modified":"2026-04-23T20:33:37.358273+08:00"},{"id":787,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"5563b3bd56550648dc70302c1762ce5a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tongyi.py#18-29","gmt_create":"2026-04-23T20:33:37.360657+08:00","gmt_modified":"2026-04-23T20:33:37.360657+08:00"},{"id":788,"source_id":"e68ad5186f1e47610ab3d9f14a794393","target_id":"5563b3bd56550648dc70302c1762ce5a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 18-29","gmt_create":"2026-04-23T20:33:37.361776+08:00","gmt_modified":"2026-04-23T20:33:37.361776+08:00"},{"id":789,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"91852ef8dcc844a2f85e9fce0227ab74","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/doubao.py#18-29","gmt_create":"2026-04-23T20:33:37.363109+08:00","gmt_modified":"2026-04-23T20:33:37.363109+08:00"},{"id":790,"source_id":"404f6d0765a8c6e77e33b7fc21b377a4","target_id":"91852ef8dcc844a2f85e9fce0227ab74","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 18-29","gmt_create":"2026-04-23T20:33:37.363811+08:00","gmt_modified":"2026-04-23T20:33:37.363811+08:00"},{"id":791,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"1b46fab9e22f53db30ead5677d03e3e2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#11-16","gmt_create":"2026-04-23T20:33:37.364819+08:00","gmt_modified":"2026-04-23T20:33:37.364819+08:00"},{"id":792,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"1b46fab9e22f53db30ead5677d03e3e2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-16","gmt_create":"2026-04-23T20:33:37.365554+08:00","gmt_modified":"2026-04-23T20:33:37.365554+08:00"},{"id":793,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"f096aa3ea82e9fa625a9acb1309b4c50","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#231-247","gmt_create":"2026-04-23T20:33:37.36634+08:00","gmt_modified":"2026-04-23T20:33:37.366341+08:00"},{"id":794,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"4a2fa09aa3a948dec5ef8ba873b0e716","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#14-42","gmt_create":"2026-04-23T20:33:37.367379+08:00","gmt_modified":"2026-04-23T20:33:37.367379+08:00"},{"id":795,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"4a2fa09aa3a948dec5ef8ba873b0e716","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 14-42","gmt_create":"2026-04-23T20:33:37.368233+08:00","gmt_modified":"2026-04-23T20:33:37.368233+08:00"},{"id":796,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"6b3d903205941aa9391dd90016e1102c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/queries.py","gmt_create":"2026-04-23T20:33:57.518077+08:00","gmt_modified":"2026-04-23T20:33:57.518077+08:00"},{"id":797,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"f301b79d833233ce39d350e82a71c938","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/schemas/query.py","gmt_create":"2026-04-23T20:33:57.518453+08:00","gmt_modified":"2026-04-23T20:33:57.518454+08:00"},{"id":798,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"1a3336b4af8a39a055e912724338580c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/schemas/citation.py","gmt_create":"2026-04-23T20:33:57.519644+08:00","gmt_modified":"2026-04-23T20:33:57.519644+08:00"},{"id":799,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T20:33:57.521079+08:00","gmt_modified":"2026-04-23T20:33:57.521079+08:00"},{"id":800,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T20:33:57.522061+08:00","gmt_modified":"2026-04-23T20:33:57.522061+08:00"},{"id":801,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"b4a81ef789630d0af6a8d50859d01bf3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/citation_record.py","gmt_create":"2026-04-23T20:33:57.523189+08:00","gmt_modified":"2026-04-23T20:33:57.523189+08:00"},{"id":802,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"c59f8c276697a070dffc581fe94d809c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/user.py","gmt_create":"2026-04-23T20:33:57.52383+08:00","gmt_modified":"2026-04-23T20:33:57.52383+08:00"},{"id":803,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"88d22de3b2a7419868e8ae19130d860c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/query.py","gmt_create":"2026-04-23T20:33:57.524563+08:00","gmt_modified":"2026-04-23T20:33:57.524563+08:00"},{"id":804,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"04e3926c080e795713bff683e7dc9d3e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/citation.py","gmt_create":"2026-04-23T20:33:57.525774+08:00","gmt_modified":"2026-04-23T20:33:57.525774+08:00"},{"id":805,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/scheduler.py","gmt_create":"2026-04-23T20:33:57.526492+08:00","gmt_modified":"2026-04-23T20:33:57.526492+08:00"},{"id":806,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"74040de652d5e57f548bb5c4adc3e1a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/citation_engine.py","gmt_create":"2026-04-23T20:33:57.527326+08:00","gmt_modified":"2026-04-23T20:33:57.527326+08:00"},{"id":807,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"a16cf42e9559523c4f96ca4c79f9488d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/base.py","gmt_create":"2026-04-23T20:33:57.527983+08:00","gmt_modified":"2026-04-23T20:33:57.527983+08:00"},{"id":808,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"8f973791233c698b3e64a4fb28a93d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/kimi.py","gmt_create":"2026-04-23T20:33:57.529144+08:00","gmt_modified":"2026-04-23T20:33:57.529144+08:00"},{"id":809,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"f642fc1c2f34e15572d9d98aa6c18813","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-23T20:33:57.529998+08:00","gmt_modified":"2026-04-23T20:33:57.529998+08:00"},{"id":810,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T20:33:57.530659+08:00","gmt_modified":"2026-04-23T20:33:57.530659+08:00"},{"id":811,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"9228ff67d4c757a85d9421b71f4b29f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/main.py","gmt_create":"2026-04-23T20:33:57.531953+08:00","gmt_modified":"2026-04-23T20:33:57.531953+08:00"},{"id":812,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"0613e76b9679be7f998fb8fd8056e686","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_queries.py","gmt_create":"2026-04-23T20:33:57.532681+08:00","gmt_modified":"2026-04-23T20:33:57.532681+08:00"},{"id":813,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"80a0429cc47931de27ddb17a62b8dd9c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_business_flow.py","gmt_create":"2026-04-23T20:33:57.533708+08:00","gmt_modified":"2026-04-23T20:33:57.533708+08:00"},{"id":814,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"e27bcba24aaadeec1922d2b4e5b8386b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#1-109","gmt_create":"2026-04-23T20:33:57.534482+08:00","gmt_modified":"2026-04-23T20:33:57.534482+08:00"},{"id":815,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"e7afbab5932c93c3469f1a225e6c7156","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#1-55","gmt_create":"2026-04-23T20:33:57.535515+08:00","gmt_modified":"2026-04-23T20:33:57.535515+08:00"},{"id":816,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"e7afbab5932c93c3469f1a225e6c7156","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-55","gmt_create":"2026-04-23T20:33:57.536318+08:00","gmt_modified":"2026-04-23T20:33:57.536318+08:00"},{"id":817,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"a0eac56d622a2fff529bc2b796064bcd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/query.py#1-94","gmt_create":"2026-04-23T20:33:57.537094+08:00","gmt_modified":"2026-04-23T20:33:57.537094+08:00"},{"id":818,"source_id":"f301b79d833233ce39d350e82a71c938","target_id":"a0eac56d622a2fff529bc2b796064bcd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-94","gmt_create":"2026-04-23T20:33:57.537769+08:00","gmt_modified":"2026-04-23T20:33:57.53777+08:00"},{"id":819,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"174be58163b6f72b4cd4a493f3463ce4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/citation.py#1-52","gmt_create":"2026-04-23T20:33:57.53855+08:00","gmt_modified":"2026-04-23T20:33:57.53855+08:00"},{"id":820,"source_id":"1a3336b4af8a39a055e912724338580c","target_id":"174be58163b6f72b4cd4a493f3463ce4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-52","gmt_create":"2026-04-23T20:33:57.53965+08:00","gmt_modified":"2026-04-23T20:33:57.53965+08:00"},{"id":821,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"6281fff17a86ec1895c64d87c2ae7fb1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#1-55","gmt_create":"2026-04-23T20:33:57.54057+08:00","gmt_modified":"2026-04-23T20:33:57.54057+08:00"},{"id":822,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"6628e006b8e5ca16160743528b6b0506","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#1-39","gmt_create":"2026-04-23T20:33:57.541654+08:00","gmt_modified":"2026-04-23T20:33:57.541654+08:00"},{"id":823,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"943c18db69a04b3137fba4cebcfea87e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#1-42","gmt_create":"2026-04-23T20:33:57.543056+08:00","gmt_modified":"2026-04-23T20:33:57.543056+08:00"},{"id":824,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"136f172c732d0cc130532a4f0df475a4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#1-41","gmt_create":"2026-04-23T20:33:57.543958+08:00","gmt_modified":"2026-04-23T20:33:57.543958+08:00"},{"id":825,"source_id":"c59f8c276697a070dffc581fe94d809c","target_id":"136f172c732d0cc130532a4f0df475a4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-41","gmt_create":"2026-04-23T20:33:57.544974+08:00","gmt_modified":"2026-04-23T20:33:57.544974+08:00"},{"id":826,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"916551131bd9ac8c9f9c8bb762af1fa4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#1-130","gmt_create":"2026-04-23T20:33:57.545482+08:00","gmt_modified":"2026-04-23T20:33:57.545482+08:00"},{"id":827,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"916551131bd9ac8c9f9c8bb762af1fa4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-130","gmt_create":"2026-04-23T20:33:57.545785+08:00","gmt_modified":"2026-04-23T20:33:57.545785+08:00"},{"id":828,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"5d2836286eb7d4eb6039b004a9744d26","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#1-429","gmt_create":"2026-04-23T20:33:57.546196+08:00","gmt_modified":"2026-04-23T20:33:57.546196+08:00"},{"id":829,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"5d2836286eb7d4eb6039b004a9744d26","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-429","gmt_create":"2026-04-23T20:33:57.546517+08:00","gmt_modified":"2026-04-23T20:33:57.546517+08:00"},{"id":830,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"71f98c8993fb42b108e34a554247869b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#1-95","gmt_create":"2026-04-23T20:33:57.547004+08:00","gmt_modified":"2026-04-23T20:33:57.547005+08:00"},{"id":831,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"116584ea9162c1bc05911f39f9ef82b6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#1-309","gmt_create":"2026-04-23T20:33:57.5475+08:00","gmt_modified":"2026-04-23T20:33:57.5475+08:00"},{"id":832,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"72a110dca58d8152758e2fdab4e94761","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#1-18","gmt_create":"2026-04-23T20:33:57.548046+08:00","gmt_modified":"2026-04-23T20:33:57.548046+08:00"},{"id":833,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"39a3b2d9301fa4eff7bef0fda3352790","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#1-206","gmt_create":"2026-04-23T20:33:57.548538+08:00","gmt_modified":"2026-04-23T20:33:57.548538+08:00"},{"id":834,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"39a3b2d9301fa4eff7bef0fda3352790","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-206","gmt_create":"2026-04-23T20:33:57.548868+08:00","gmt_modified":"2026-04-23T20:33:57.548868+08:00"},{"id":835,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"fbcfae3b1238b3da5329ebafe4294861","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#1-205","gmt_create":"2026-04-23T20:33:57.549268+08:00","gmt_modified":"2026-04-23T20:33:57.549268+08:00"},{"id":836,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"fbcfae3b1238b3da5329ebafe4294861","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-205","gmt_create":"2026-04-23T20:33:57.549553+08:00","gmt_modified":"2026-04-23T20:33:57.549553+08:00"},{"id":837,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"c2747ca16b879bca0f68955534c3c4fc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#1-48","gmt_create":"2026-04-23T20:33:57.550006+08:00","gmt_modified":"2026-04-23T20:33:57.550006+08:00"},{"id":838,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"c4273407c88f470df7daf6a8ad5ce969","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#15-109","gmt_create":"2026-04-23T20:33:57.550496+08:00","gmt_modified":"2026-04-23T20:33:57.550496+08:00"},{"id":839,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"c4273407c88f470df7daf6a8ad5ce969","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 15-109","gmt_create":"2026-04-23T20:33:57.551777+08:00","gmt_modified":"2026-04-23T20:33:57.551777+08:00"},{"id":840,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"35774e0a09ac5459c868914d7182ca95","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#19-55","gmt_create":"2026-04-23T20:33:57.552775+08:00","gmt_modified":"2026-04-23T20:33:57.552775+08:00"},{"id":841,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"35774e0a09ac5459c868914d7182ca95","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 19-55","gmt_create":"2026-04-23T20:33:57.553082+08:00","gmt_modified":"2026-04-23T20:33:57.553082+08:00"},{"id":842,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"69118807690ef351a9de910414d5e676","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/query.py#11-94","gmt_create":"2026-04-23T20:33:57.553571+08:00","gmt_modified":"2026-04-23T20:33:57.553571+08:00"},{"id":843,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"f639b566c26dfd18b24e3dfd2e9853ac","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/citation.py#7-52","gmt_create":"2026-04-23T20:33:57.554164+08:00","gmt_modified":"2026-04-23T20:33:57.554164+08:00"},{"id":844,"source_id":"1a3336b4af8a39a055e912724338580c","target_id":"f639b566c26dfd18b24e3dfd2e9853ac","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 7-52","gmt_create":"2026-04-23T20:33:57.554458+08:00","gmt_modified":"2026-04-23T20:33:57.554458+08:00"},{"id":845,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"4fb8856be3a581fe8303d11b2284ca29","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#11-55","gmt_create":"2026-04-23T20:33:57.55511+08:00","gmt_modified":"2026-04-23T20:33:57.55511+08:00"},{"id":846,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"b84f46f058847733347974841f613688","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#11-39","gmt_create":"2026-04-23T20:33:57.557064+08:00","gmt_modified":"2026-04-23T20:33:57.557064+08:00"},{"id":847,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"fd541971cebf8a7c167d717f5c5d1ff6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#11-42","gmt_create":"2026-04-23T20:33:57.558255+08:00","gmt_modified":"2026-04-23T20:33:57.558255+08:00"},{"id":848,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"56e46969bdb790a5e8f333184b878d6d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#11-41","gmt_create":"2026-04-23T20:33:57.558894+08:00","gmt_modified":"2026-04-23T20:33:57.558894+08:00"},{"id":849,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"d7c319a04abbc6704da53107e07dd8e7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#12-130","gmt_create":"2026-04-23T20:33:57.560321+08:00","gmt_modified":"2026-04-23T20:33:57.560321+08:00"},{"id":850,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"b46654006178160f12897e2c5baac8fa","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#219-429","gmt_create":"2026-04-23T20:33:57.561417+08:00","gmt_modified":"2026-04-23T20:33:57.561417+08:00"},{"id":851,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"b46654006178160f12897e2c5baac8fa","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 219-429","gmt_create":"2026-04-23T20:33:57.561724+08:00","gmt_modified":"2026-04-23T20:33:57.561724+08:00"},{"id":852,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"e230904202fcf7a861c6f49b84f9f863","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#25-95","gmt_create":"2026-04-23T20:33:57.562679+08:00","gmt_modified":"2026-04-23T20:33:57.562679+08:00"},{"id":853,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"309607c54b12a6340edc086ffb4737c9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#148-309","gmt_create":"2026-04-23T20:33:57.563303+08:00","gmt_modified":"2026-04-23T20:33:57.563303+08:00"},{"id":854,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"ad67863041d9eea2b0fb542b5aa33aca","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#4-18","gmt_create":"2026-04-23T20:33:57.563842+08:00","gmt_modified":"2026-04-23T20:33:57.563842+08:00"},{"id":855,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"82265d393c20d0af96beec6b9c657c27","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#28-41","gmt_create":"2026-04-23T20:33:57.564486+08:00","gmt_modified":"2026-04-23T20:33:57.564486+08:00"},{"id":856,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"82265d393c20d0af96beec6b9c657c27","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 28-41","gmt_create":"2026-04-23T20:33:57.564788+08:00","gmt_modified":"2026-04-23T20:33:57.564788+08:00"},{"id":857,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"c86edb7a95fbe4b431ac65a0e2b8636e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#90-109","gmt_create":"2026-04-23T20:33:57.565285+08:00","gmt_modified":"2026-04-23T20:33:57.565285+08:00"},{"id":858,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"9b10dac7dbbb1327afc8a525bf4bd0c3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#45-81","gmt_create":"2026-04-23T20:33:57.565809+08:00","gmt_modified":"2026-04-23T20:33:57.565809+08:00"},{"id":859,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"93e5c95b1691bb81a36bf9a0ac889030","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#219-261","gmt_create":"2026-04-23T20:33:57.566399+08:00","gmt_modified":"2026-04-23T20:33:57.566399+08:00"},{"id":860,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"93e5c95b1691bb81a36bf9a0ac889030","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 219-261","gmt_create":"2026-04-23T20:33:57.578474+08:00","gmt_modified":"2026-04-23T20:33:57.578474+08:00"},{"id":861,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"448970b02d89d5e1576f70bdb0063363","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#51-84","gmt_create":"2026-04-23T20:33:57.580464+08:00","gmt_modified":"2026-04-23T20:33:57.580464+08:00"},{"id":862,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"160b5326537d25444c40a459a01e79c6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#159-234","gmt_create":"2026-04-23T20:33:57.581421+08:00","gmt_modified":"2026-04-23T20:33:57.581422+08:00"},{"id":863,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"a4918fcbd21492ad996d7f5496f03a4b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#33-48","gmt_create":"2026-04-23T20:33:57.58279+08:00","gmt_modified":"2026-04-23T20:33:57.58279+08:00"},{"id":864,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"bc38d046b4b1410ae2165cee2272839e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#33-48","gmt_create":"2026-04-23T20:33:57.583676+08:00","gmt_modified":"2026-04-23T20:33:57.583676+08:00"},{"id":865,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"374200f0bf946f0399351756977d0495","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#176-234","gmt_create":"2026-04-23T20:33:57.588601+08:00","gmt_modified":"2026-04-23T20:33:57.588601+08:00"},{"id":866,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"374200f0bf946f0399351756977d0495","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 176-234","gmt_create":"2026-04-23T20:33:57.589609+08:00","gmt_modified":"2026-04-23T20:33:57.589609+08:00"},{"id":867,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"ac5982063da5f04315f3e82a0d653902","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#24-32","gmt_create":"2026-04-23T20:33:57.590732+08:00","gmt_modified":"2026-04-23T20:33:57.590732+08:00"},{"id":868,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"601b981b00d93b941843f046a163d5a3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/query.py#18-33","gmt_create":"2026-04-23T20:33:57.592508+08:00","gmt_modified":"2026-04-23T20:33:57.592508+08:00"},{"id":869,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"9a8d9100a6bc34ebae9ee065def7e88a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/query.py#44-72","gmt_create":"2026-04-23T20:33:57.593647+08:00","gmt_modified":"2026-04-23T20:33:57.593647+08:00"},{"id":870,"source_id":"f301b79d833233ce39d350e82a71c938","target_id":"9a8d9100a6bc34ebae9ee065def7e88a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 44-72","gmt_create":"2026-04-23T20:33:57.594757+08:00","gmt_modified":"2026-04-23T20:33:57.594757+08:00"},{"id":871,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"93c23bcc3456826af17e26a6d4c32116","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/query.py#6-9","gmt_create":"2026-04-23T20:33:57.595474+08:00","gmt_modified":"2026-04-23T20:33:57.595474+08:00"},{"id":872,"source_id":"f301b79d833233ce39d350e82a71c938","target_id":"93c23bcc3456826af17e26a6d4c32116","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 6-9","gmt_create":"2026-04-23T20:33:57.596276+08:00","gmt_modified":"2026-04-23T20:33:57.596276+08:00"},{"id":873,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"c17eeb8726297096cd5542283f11494f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#17-109","gmt_create":"2026-04-23T20:33:57.597516+08:00","gmt_modified":"2026-04-23T20:33:57.597516+08:00"},{"id":874,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"c17eeb8726297096cd5542283f11494f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 17-109","gmt_create":"2026-04-23T20:33:57.598386+08:00","gmt_modified":"2026-04-23T20:33:57.598386+08:00"},{"id":875,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"08fec4718be6991260c00ca532f9173a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#22-55","gmt_create":"2026-04-23T20:33:57.599188+08:00","gmt_modified":"2026-04-23T20:33:57.599188+08:00"},{"id":876,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"08fec4718be6991260c00ca532f9173a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 22-55","gmt_create":"2026-04-23T20:33:57.600043+08:00","gmt_modified":"2026-04-23T20:33:57.600043+08:00"},{"id":877,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"08007199eea846dd14f15f7dc70419e2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/citation.py#48-52","gmt_create":"2026-04-23T20:33:57.600852+08:00","gmt_modified":"2026-04-23T20:33:57.600852+08:00"},{"id":878,"source_id":"1a3336b4af8a39a055e912724338580c","target_id":"08007199eea846dd14f15f7dc70419e2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 48-52","gmt_create":"2026-04-23T20:33:57.601489+08:00","gmt_modified":"2026-04-23T20:33:57.601489+08:00"},{"id":879,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"4caff756fd4da029bd64cd16e7ef5960","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#32-39","gmt_create":"2026-04-23T20:33:57.602322+08:00","gmt_modified":"2026-04-23T20:33:57.602323+08:00"},{"id":880,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"4caff756fd4da029bd64cd16e7ef5960","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 32-39","gmt_create":"2026-04-23T20:33:57.602918+08:00","gmt_modified":"2026-04-23T20:33:57.602918+08:00"},{"id":881,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"b0220895f66f1273966ad5b2c3266952","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#49-53","gmt_create":"2026-04-23T20:33:57.603881+08:00","gmt_modified":"2026-04-23T20:33:57.603881+08:00"},{"id":882,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"b0220895f66f1273966ad5b2c3266952","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 49-53","gmt_create":"2026-04-23T20:33:57.604555+08:00","gmt_modified":"2026-04-23T20:33:57.604555+08:00"},{"id":883,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"44f88f9664fdf6e84ffb7e0675a86a28","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#64-69","gmt_create":"2026-04-23T20:33:57.605262+08:00","gmt_modified":"2026-04-23T20:33:57.605262+08:00"},{"id":884,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"44f88f9664fdf6e84ffb7e0675a86a28","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 64-69","gmt_create":"2026-04-23T20:33:57.606324+08:00","gmt_modified":"2026-04-23T20:33:57.606324+08:00"},{"id":885,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"91f280f51389bd1cf711dcf33a4da681","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#79-84","gmt_create":"2026-04-23T20:33:57.607055+08:00","gmt_modified":"2026-04-23T20:33:57.607055+08:00"},{"id":886,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"91f280f51389bd1cf711dcf33a4da681","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 79-84","gmt_create":"2026-04-23T20:33:57.608388+08:00","gmt_modified":"2026-04-23T20:33:57.608388+08:00"},{"id":887,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"ab50466a57c77659d7b469d3a8a04ddb","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#96-103","gmt_create":"2026-04-23T20:33:57.609206+08:00","gmt_modified":"2026-04-23T20:33:57.609206+08:00"},{"id":888,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"ab50466a57c77659d7b469d3a8a04ddb","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-103","gmt_create":"2026-04-23T20:33:57.609975+08:00","gmt_modified":"2026-04-23T20:33:57.609975+08:00"},{"id":889,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"572c2dece1fbc13aa2bb7d6b61b0fd5c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#65-71","gmt_create":"2026-04-23T20:33:57.61104+08:00","gmt_modified":"2026-04-23T20:33:57.611041+08:00"},{"id":890,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"572c2dece1fbc13aa2bb7d6b61b0fd5c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 65-71","gmt_create":"2026-04-23T20:33:57.611833+08:00","gmt_modified":"2026-04-23T20:33:57.611833+08:00"},{"id":891,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"82386bc7ca57d9ccc94b656e52bc89f6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#1-14","gmt_create":"2026-04-23T20:33:57.612865+08:00","gmt_modified":"2026-04-23T20:33:57.612865+08:00"},{"id":892,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"82386bc7ca57d9ccc94b656e52bc89f6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-14","gmt_create":"2026-04-23T20:33:57.613537+08:00","gmt_modified":"2026-04-23T20:33:57.613537+08:00"},{"id":893,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"7ab79ab21d7d6e4dbcb224572516f6f6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#1-19","gmt_create":"2026-04-23T20:33:57.613967+08:00","gmt_modified":"2026-04-23T20:33:57.613968+08:00"},{"id":894,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"7ab79ab21d7d6e4dbcb224572516f6f6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-19","gmt_create":"2026-04-23T20:33:57.61426+08:00","gmt_modified":"2026-04-23T20:33:57.61426+08:00"},{"id":895,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"8433204d7a82a1f480e57df9ceee5581","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#1-10","gmt_create":"2026-04-23T20:33:57.614658+08:00","gmt_modified":"2026-04-23T20:33:57.614658+08:00"},{"id":896,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"8433204d7a82a1f480e57df9ceee5581","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-10","gmt_create":"2026-04-23T20:33:57.614988+08:00","gmt_modified":"2026-04-23T20:33:57.614988+08:00"},{"id":897,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"3957ee6f15a01b7b541490438ef18684","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#1-17","gmt_create":"2026-04-23T20:33:57.615388+08:00","gmt_modified":"2026-04-23T20:33:57.615388+08:00"},{"id":898,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"3957ee6f15a01b7b541490438ef18684","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-17","gmt_create":"2026-04-23T20:33:57.615908+08:00","gmt_modified":"2026-04-23T20:33:57.615908+08:00"},{"id":899,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"3729543092bccad8926c5ea852db1e69","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#148-157","gmt_create":"2026-04-23T20:33:57.61673+08:00","gmt_modified":"2026-04-23T20:33:57.61673+08:00"},{"id":900,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"fcae8d1d281ad7186999cc4ca8e43db7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#25-39","gmt_create":"2026-04-23T20:33:57.617716+08:00","gmt_modified":"2026-04-23T20:33:57.617716+08:00"},{"id":901,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"fcae8d1d281ad7186999cc4ca8e43db7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-39","gmt_create":"2026-04-23T20:33:57.618148+08:00","gmt_modified":"2026-04-23T20:33:57.618148+08:00"},{"id":902,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"ee12a84ac6334b13e20132181454488b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#13-19","gmt_create":"2026-04-23T20:33:57.6192+08:00","gmt_modified":"2026-04-23T20:33:57.6192+08:00"},{"id":903,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"ee12a84ac6334b13e20132181454488b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-19","gmt_create":"2026-04-23T20:33:57.619587+08:00","gmt_modified":"2026-04-23T20:33:57.619587+08:00"},{"id":904,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"897e047b94772e5a0ff57cf773a7f965","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#17-32","gmt_create":"2026-04-23T20:33:57.620024+08:00","gmt_modified":"2026-04-23T20:33:57.620024+08:00"},{"id":905,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"897e047b94772e5a0ff57cf773a7f965","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 17-32","gmt_create":"2026-04-23T20:33:57.620315+08:00","gmt_modified":"2026-04-23T20:33:57.620315+08:00"},{"id":906,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"53e8ec81b4d2dbb13c831048e5897036","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#17-32","gmt_create":"2026-04-23T20:33:57.620909+08:00","gmt_modified":"2026-04-23T20:33:57.620909+08:00"},{"id":907,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"53e8ec81b4d2dbb13c831048e5897036","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 17-32","gmt_create":"2026-04-23T20:33:57.621267+08:00","gmt_modified":"2026-04-23T20:33:57.621267+08:00"},{"id":908,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"096856da621e23e78422a15e2bfce1f1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#13-22","gmt_create":"2026-04-23T20:33:57.621687+08:00","gmt_modified":"2026-04-23T20:33:57.621687+08:00"},{"id":909,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"ef82ce4377c549013c200e19701a6805","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#21-32","gmt_create":"2026-04-23T20:33:57.62216+08:00","gmt_modified":"2026-04-23T20:33:57.62216+08:00"},{"id":910,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"c7986eb1be0ffdd9ec4e243be4270119","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#21-32","gmt_create":"2026-04-23T20:33:57.623241+08:00","gmt_modified":"2026-04-23T20:33:57.623241+08:00"},{"id":911,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"eecf9581dbaa0a515cf11514175e7ef9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#11-206","gmt_create":"2026-04-23T20:33:57.627555+08:00","gmt_modified":"2026-04-23T20:33:57.627555+08:00"},{"id":912,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"5563c29185326a59be61ee0a6eec4463","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#11-205","gmt_create":"2026-04-23T20:33:57.62809+08:00","gmt_modified":"2026-04-23T20:33:57.62809+08:00"},{"id":913,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"fd3145047b9c813cc8e64b9322e531f9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#219-327","gmt_create":"2026-04-23T20:33:57.62931+08:00","gmt_modified":"2026-04-23T20:33:57.62931+08:00"},{"id":914,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"fd3145047b9c813cc8e64b9322e531f9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 219-327","gmt_create":"2026-04-23T20:33:57.629745+08:00","gmt_modified":"2026-04-23T20:33:57.629745+08:00"},{"id":915,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"b09a0f415030d91b25e6cabd8a0a93fc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#176-289","gmt_create":"2026-04-23T20:33:57.630458+08:00","gmt_modified":"2026-04-23T20:33:57.630458+08:00"},{"id":916,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"b09a0f415030d91b25e6cabd8a0a93fc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 176-289","gmt_create":"2026-04-23T20:33:57.630748+08:00","gmt_modified":"2026-04-23T20:33:57.630748+08:00"},{"id":917,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"e2168959b26c386940370b5f1bf48d7d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#194-204","gmt_create":"2026-04-23T20:33:57.631184+08:00","gmt_modified":"2026-04-23T20:33:57.631184+08:00"},{"id":918,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"e2168959b26c386940370b5f1bf48d7d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 194-204","gmt_create":"2026-04-23T20:33:57.63147+08:00","gmt_modified":"2026-04-23T20:33:57.63147+08:00"},{"id":919,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"8f973791233c698b3e64a4fb28a93d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/kimi.py","gmt_create":"2026-04-23T20:35:18.634061+08:00","gmt_modified":"2026-04-23T20:35:18.634062+08:00"},{"id":920,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"a16cf42e9559523c4f96ca4c79f9488d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/base.py","gmt_create":"2026-04-23T20:35:18.634886+08:00","gmt_modified":"2026-04-23T20:35:18.634886+08:00"},{"id":921,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"6a63f048c16c60c5d2d57012c810ee0e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/search_engine.py","gmt_create":"2026-04-23T20:35:18.635377+08:00","gmt_modified":"2026-04-23T20:35:18.635377+08:00"},{"id":922,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"4a56ef5fca60bc63480b457cab3832f0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/__init__.py","gmt_create":"2026-04-23T20:35:18.63595+08:00","gmt_modified":"2026-04-23T20:35:18.63595+08:00"},{"id":923,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"74040de652d5e57f548bb5c4adc3e1a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/citation_engine.py","gmt_create":"2026-04-23T20:35:18.636363+08:00","gmt_modified":"2026-04-23T20:35:18.636363+08:00"},{"id":924,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/scheduler.py","gmt_create":"2026-04-23T20:35:18.636753+08:00","gmt_modified":"2026-04-23T20:35:18.636753+08:00"},{"id":925,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"36dd0ad3ee6bc75a480ad8a62268e80e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/models/query.py","gmt_create":"2026-04-23T20:35:18.6372+08:00","gmt_modified":"2026-04-23T20:35:18.6372+08:00"},{"id":926,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"b4a81ef789630d0af6a8d50859d01bf3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/citation_record.py","gmt_create":"2026-04-23T20:35:18.637558+08:00","gmt_modified":"2026-04-23T20:35:18.637558+08:00"},{"id":927,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T20:35:18.637924+08:00","gmt_modified":"2026-04-23T20:35:18.637924+08:00"},{"id":928,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"88d22de3b2a7419868e8ae19130d860c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/query.py","gmt_create":"2026-04-23T20:35:18.638407+08:00","gmt_modified":"2026-04-23T20:35:18.638407+08:00"},{"id":929,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"04e3926c080e795713bff683e7dc9d3e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/citation.py","gmt_create":"2026-04-23T20:35:18.638942+08:00","gmt_modified":"2026-04-23T20:35:18.638942+08:00"},{"id":930,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"6b3d903205941aa9391dd90016e1102c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/queries.py","gmt_create":"2026-04-23T20:35:18.641162+08:00","gmt_modified":"2026-04-23T20:35:18.641162+08:00"},{"id":931,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T20:35:18.642251+08:00","gmt_modified":"2026-04-23T20:35:18.642251+08:00"},{"id":932,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"9228ff67d4c757a85d9421b71f4b29f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/main.py","gmt_create":"2026-04-23T20:35:18.642925+08:00","gmt_modified":"2026-04-23T20:35:18.642925+08:00"},{"id":933,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"ef72f0c3cedb9fd9a87352fe493053dc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/lib/platforms.ts","gmt_create":"2026-04-23T20:35:18.643414+08:00","gmt_modified":"2026-04-23T20:35:18.643415+08:00"},{"id":934,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"096856da621e23e78422a15e2bfce1f1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#13-22","gmt_create":"2026-04-23T20:35:18.643912+08:00","gmt_modified":"2026-04-23T20:35:18.643912+08:00"},{"id":935,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"129573d2bbcde48697ed0e75dea12396","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#25-40","gmt_create":"2026-04-23T20:35:18.645078+08:00","gmt_modified":"2026-04-23T20:35:18.645078+08:00"},{"id":936,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"129573d2bbcde48697ed0e75dea12396","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-40","gmt_create":"2026-04-23T20:35:18.646964+08:00","gmt_modified":"2026-04-23T20:35:18.646965+08:00"},{"id":937,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"cf18c97a9be6c78aa43cc229ed3dad20","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#164-173","gmt_create":"2026-04-23T20:35:18.647598+08:00","gmt_modified":"2026-04-23T20:35:18.647598+08:00"},{"id":938,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"cf18c97a9be6c78aa43cc229ed3dad20","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 164-173","gmt_create":"2026-04-23T20:35:18.647972+08:00","gmt_modified":"2026-04-23T20:35:18.647972+08:00"},{"id":939,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"3c7ca5d582dca31c2530b1ce9c058e95","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#10-37","gmt_create":"2026-04-23T20:35:18.648459+08:00","gmt_modified":"2026-04-23T20:35:18.64846+08:00"},{"id":940,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"3c7ca5d582dca31c2530b1ce9c058e95","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-37","gmt_create":"2026-04-23T20:35:18.648785+08:00","gmt_modified":"2026-04-23T20:35:18.648785+08:00"},{"id":941,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"9f82f6d82bf914a608d6afa3d9854abf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#1-174","gmt_create":"2026-04-23T20:35:18.649264+08:00","gmt_modified":"2026-04-23T20:35:18.649264+08:00"},{"id":942,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T20:35:18.650358+08:00","gmt_modified":"2026-04-23T20:35:18.650358+08:00"},{"id":943,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"4fb8856be3a581fe8303d11b2284ca29","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#11-55","gmt_create":"2026-04-23T20:35:18.650954+08:00","gmt_modified":"2026-04-23T20:35:18.650954+08:00"},{"id":944,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"fd541971cebf8a7c167d717f5c5d1ff6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#11-42","gmt_create":"2026-04-23T20:35:18.652232+08:00","gmt_modified":"2026-04-23T20:35:18.652232+08:00"},{"id":945,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"b84f46f058847733347974841f613688","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#11-39","gmt_create":"2026-04-23T20:35:18.653511+08:00","gmt_modified":"2026-04-23T20:35:18.653511+08:00"},{"id":946,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"27047f868643e5457d4f242b4298a9f6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/platforms.ts#1-23","gmt_create":"2026-04-23T20:35:18.654994+08:00","gmt_modified":"2026-04-23T20:35:18.654994+08:00"},{"id":947,"source_id":"ef72f0c3cedb9fd9a87352fe493053dc","target_id":"27047f868643e5457d4f242b4298a9f6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-23","gmt_create":"2026-04-23T20:35:18.6556+08:00","gmt_modified":"2026-04-23T20:35:18.6556+08:00"},{"id":948,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"557ae34b57a5dd8e8fa3bb2a6ce178a7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#163-174","gmt_create":"2026-04-23T20:35:18.657485+08:00","gmt_modified":"2026-04-23T20:35:18.657486+08:00"},{"id":949,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"1526e4e02133a48eac04befb74ec5bd1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#161-173","gmt_create":"2026-04-23T20:35:18.65887+08:00","gmt_modified":"2026-04-23T20:35:18.65887+08:00"},{"id":950,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"1526e4e02133a48eac04befb74ec5bd1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 161-173","gmt_create":"2026-04-23T20:35:18.659265+08:00","gmt_modified":"2026-04-23T20:35:18.659265+08:00"},{"id":951,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"98c02d9bb7aa6e2b6be5f7381e64fd99","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#26-39","gmt_create":"2026-04-23T20:35:18.661103+08:00","gmt_modified":"2026-04-23T20:35:18.661103+08:00"},{"id":952,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"98c02d9bb7aa6e2b6be5f7381e64fd99","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 26-39","gmt_create":"2026-04-23T20:35:18.661433+08:00","gmt_modified":"2026-04-23T20:35:18.661433+08:00"},{"id":953,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"212d822d207a4c0bd7825bbf20e188e9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#59-77","gmt_create":"2026-04-23T20:35:18.661922+08:00","gmt_modified":"2026-04-23T20:35:18.661922+08:00"},{"id":954,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"9b10dac7dbbb1327afc8a525bf4bd0c3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#45-81","gmt_create":"2026-04-23T20:35:18.662781+08:00","gmt_modified":"2026-04-23T20:35:18.662781+08:00"},{"id":955,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"4ded871d02b8119cdd985de8b220b084","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#204-234","gmt_create":"2026-04-23T20:35:18.680675+08:00","gmt_modified":"2026-04-23T20:35:18.680675+08:00"},{"id":956,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"448970b02d89d5e1576f70bdb0063363","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#51-84","gmt_create":"2026-04-23T20:35:18.68314+08:00","gmt_modified":"2026-04-23T20:35:18.68314+08:00"},{"id":957,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"8565f299083b4dcba5a328c947f06fee","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#256-287","gmt_create":"2026-04-23T20:35:18.685341+08:00","gmt_modified":"2026-04-23T20:35:18.685341+08:00"},{"id":958,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"52c01d7b9c17aa16944cbfcf8885be61","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#16-33","gmt_create":"2026-04-23T20:35:18.686894+08:00","gmt_modified":"2026-04-23T20:35:18.686894+08:00"},{"id":959,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"2a971cb83924013902324eceeab22559","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#16-29","gmt_create":"2026-04-23T20:35:18.689849+08:00","gmt_modified":"2026-04-23T20:35:18.689849+08:00"},{"id":960,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"2a971cb83924013902324eceeab22559","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-29","gmt_create":"2026-04-23T20:35:18.69154+08:00","gmt_modified":"2026-04-23T20:35:18.69154+08:00"},{"id":961,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"99326fedad9275392719105b5b6782d6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#31-33","gmt_create":"2026-04-23T20:35:18.692776+08:00","gmt_modified":"2026-04-23T20:35:18.692776+08:00"},{"id":962,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"99326fedad9275392719105b5b6782d6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 31-33","gmt_create":"2026-04-23T20:35:18.693945+08:00","gmt_modified":"2026-04-23T20:35:18.693945+08:00"},{"id":963,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"102223dd13475177a1ade8b9be14fbd1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#79-144","gmt_create":"2026-04-23T20:35:18.695323+08:00","gmt_modified":"2026-04-23T20:35:18.695324+08:00"},{"id":964,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"5e5dacc623918c0f1eba234154c99291","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#16-76","gmt_create":"2026-04-23T20:35:18.696341+08:00","gmt_modified":"2026-04-23T20:35:18.696341+08:00"},{"id":965,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"5e5dacc623918c0f1eba234154c99291","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-76","gmt_create":"2026-04-23T20:35:18.697266+08:00","gmt_modified":"2026-04-23T20:35:18.697267+08:00"},{"id":966,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"5be7e6cf82d6359efddaf131aaf92615","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#323-330","gmt_create":"2026-04-23T20:35:18.701473+08:00","gmt_modified":"2026-04-23T20:35:18.701473+08:00"},{"id":967,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"5be7e6cf82d6359efddaf131aaf92615","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 323-330","gmt_create":"2026-04-23T20:35:18.7021+08:00","gmt_modified":"2026-04-23T20:35:18.7021+08:00"},{"id":968,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"129b746e71a9013ceb1b0fcc59942b39","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#86-90","gmt_create":"2026-04-23T20:35:18.703871+08:00","gmt_modified":"2026-04-23T20:35:18.703871+08:00"},{"id":969,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"129b746e71a9013ceb1b0fcc59942b39","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 86-90","gmt_create":"2026-04-23T20:35:18.709231+08:00","gmt_modified":"2026-04-23T20:35:18.709231+08:00"},{"id":970,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"fe70b1fef9f36e73d26d84987e927c7a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#15-86","gmt_create":"2026-04-23T20:35:18.712574+08:00","gmt_modified":"2026-04-23T20:35:18.712574+08:00"},{"id":971,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"c066a8d4bffabed87a2e38ccad81c107","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#25-77","gmt_create":"2026-04-23T20:35:18.713529+08:00","gmt_modified":"2026-04-23T20:35:18.713529+08:00"},{"id":972,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"d7c319a04abbc6704da53107e07dd8e7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#12-130","gmt_create":"2026-04-23T20:35:18.714412+08:00","gmt_modified":"2026-04-23T20:35:18.714412+08:00"},{"id":973,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"d780e807ee751f39f331a658b47c4ed3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#24-269","gmt_create":"2026-04-23T20:35:18.715261+08:00","gmt_modified":"2026-04-23T20:35:18.715261+08:00"},{"id":974,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"d780e807ee751f39f331a658b47c4ed3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-269","gmt_create":"2026-04-23T20:35:18.716135+08:00","gmt_modified":"2026-04-23T20:35:18.716135+08:00"},{"id":975,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"8eea43550951387ac740b5e3e64c7691","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#94-96","gmt_create":"2026-04-23T20:35:18.720519+08:00","gmt_modified":"2026-04-23T20:35:18.720519+08:00"},{"id":976,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"8eea43550951387ac740b5e3e64c7691","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 94-96","gmt_create":"2026-04-23T20:35:18.72132+08:00","gmt_modified":"2026-04-23T20:35:18.72132+08:00"},{"id":977,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"ed527c7a549ec333c2b30b59614343df","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#50-54","gmt_create":"2026-04-23T20:35:18.72244+08:00","gmt_modified":"2026-04-23T20:35:18.72244+08:00"},{"id":978,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"a2adbf02c71e4eb2cf1f120e1a2ff517","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#37-41","gmt_create":"2026-04-23T20:35:18.725156+08:00","gmt_modified":"2026-04-23T20:35:18.725157+08:00"},{"id":979,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"b55cc5936c299f819b57b899858438e6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#139-144","gmt_create":"2026-04-23T20:35:18.727146+08:00","gmt_modified":"2026-04-23T20:35:18.727146+08:00"},{"id":980,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"37769b7e6b5588be0065681dedf514ed","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#140-144","gmt_create":"2026-04-23T20:35:18.728033+08:00","gmt_modified":"2026-04-23T20:35:18.728033+08:00"},{"id":981,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"37769b7e6b5588be0065681dedf514ed","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 140-144","gmt_create":"2026-04-23T20:35:18.728855+08:00","gmt_modified":"2026-04-23T20:35:18.728855+08:00"},{"id":982,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"518d184988b97ebc7ef0c0bf5c10f42c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#24-29","gmt_create":"2026-04-23T20:35:18.72968+08:00","gmt_modified":"2026-04-23T20:35:18.72968+08:00"},{"id":983,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"518d184988b97ebc7ef0c0bf5c10f42c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-29","gmt_create":"2026-04-23T20:35:18.730545+08:00","gmt_modified":"2026-04-23T20:35:18.730546+08:00"},{"id":984,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"818504ee2e17d2f9cc8fe115ca321138","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#34-38","gmt_create":"2026-04-23T20:35:18.73162+08:00","gmt_modified":"2026-04-23T20:35:18.73162+08:00"},{"id":985,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"818504ee2e17d2f9cc8fe115ca321138","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 34-38","gmt_create":"2026-04-23T20:35:18.732614+08:00","gmt_modified":"2026-04-23T20:35:18.732614+08:00"},{"id":986,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"55f1628f1ab6f323710e367e12146b1a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#67-71","gmt_create":"2026-04-23T20:35:18.733467+08:00","gmt_modified":"2026-04-23T20:35:18.733467+08:00"},{"id":987,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"8a1a0ffd82ac6ff54d3410e4ce59a6b8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#25-56","gmt_create":"2026-04-23T20:35:18.735579+08:00","gmt_modified":"2026-04-23T20:35:18.735579+08:00"},{"id":988,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"8a1a0ffd82ac6ff54d3410e4ce59a6b8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-56","gmt_create":"2026-04-23T20:35:18.73663+08:00","gmt_modified":"2026-04-23T20:35:18.73663+08:00"},{"id":989,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"b0c428683c8a3e6922d90ca0d8c2736d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/database.py","gmt_create":"2026-04-23T20:35:45.660646+08:00","gmt_modified":"2026-04-23T20:35:45.660646+08:00"},{"id":990,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"c59f8c276697a070dffc581fe94d809c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/user.py","gmt_create":"2026-04-23T20:35:45.661843+08:00","gmt_modified":"2026-04-23T20:35:45.661843+08:00"},{"id":991,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T20:35:45.662817+08:00","gmt_modified":"2026-04-23T20:35:45.662818+08:00"},{"id":992,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"b4a81ef789630d0af6a8d50859d01bf3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/citation_record.py","gmt_create":"2026-04-23T20:35:45.663785+08:00","gmt_modified":"2026-04-23T20:35:45.663785+08:00"},{"id":993,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T20:35:45.665202+08:00","gmt_modified":"2026-04-23T20:35:45.665202+08:00"},{"id":994,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"bceca00463fe55d3bcafda728f97f723","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/subscription.py","gmt_create":"2026-04-23T20:35:45.667209+08:00","gmt_modified":"2026-04-23T20:35:45.667209+08:00"},{"id":995,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"99fe1b288fd41daa86c2dfbab819abf0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/__init__.py","gmt_create":"2026-04-23T20:35:45.669525+08:00","gmt_modified":"2026-04-23T20:35:45.669526+08:00"},{"id":996,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"a680d4819f5da57fe9fa0e6bc708f380","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/alembic/env.py","gmt_create":"2026-04-23T20:35:45.670438+08:00","gmt_modified":"2026-04-23T20:35:45.670438+08:00"},{"id":997,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"d4f95fcf50683b5bf6167c7d2a6b126d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/alembic/versions/488d0bd5ab01_initial_migration.py","gmt_create":"2026-04-23T20:35:45.671423+08:00","gmt_modified":"2026-04-23T20:35:45.671424+08:00"},{"id":998,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"f6e6948dd0cdd3894bd9928b21feb979","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py","gmt_create":"2026-04-23T20:35:45.672124+08:00","gmt_modified":"2026-04-23T20:35:45.672124+08:00"},{"id":999,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"50f2e6bdc4a79e69bd43ea8d6fec67fe","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/alembic.ini","gmt_create":"2026-04-23T20:35:45.676799+08:00","gmt_modified":"2026-04-23T20:35:45.676799+08:00"},{"id":1000,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T20:35:45.678551+08:00","gmt_modified":"2026-04-23T20:35:45.678551+08:00"},{"id":1001,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"fc6242433ae9506bcc0bf4cb0dce1413","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: docker-compose.yml","gmt_create":"2026-04-23T20:35:45.680906+08:00","gmt_modified":"2026-04-23T20:35:45.680906+08:00"},{"id":1002,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"88d22de3b2a7419868e8ae19130d860c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/query.py","gmt_create":"2026-04-23T20:35:45.682494+08:00","gmt_modified":"2026-04-23T20:35:45.682494+08:00"},{"id":1003,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"04e3926c080e795713bff683e7dc9d3e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/citation.py","gmt_create":"2026-04-23T20:35:45.684758+08:00","gmt_modified":"2026-04-23T20:35:45.684758+08:00"},{"id":1004,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"1a3336b4af8a39a055e912724338580c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/schemas/citation.py","gmt_create":"2026-04-23T20:35:45.687229+08:00","gmt_modified":"2026-04-23T20:35:45.687229+08:00"},{"id":1005,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T20:35:45.69372+08:00","gmt_modified":"2026-04-23T20:35:45.69372+08:00"},{"id":1006,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"58901c94d975d87e652a4dc6c8dda656","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/reports.py","gmt_create":"2026-04-23T20:35:45.696657+08:00","gmt_modified":"2026-04-23T20:35:45.696657+08:00"},{"id":1007,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"84fbed7d35f7752e2117a74fcaf5f0e9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#1-17","gmt_create":"2026-04-23T20:35:45.698676+08:00","gmt_modified":"2026-04-23T20:35:45.698677+08:00"},{"id":1008,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"9bfc041fe426da2eb78353827e8d9163","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#1-29","gmt_create":"2026-04-23T20:35:45.700125+08:00","gmt_modified":"2026-04-23T20:35:45.700125+08:00"},{"id":1009,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"136f172c732d0cc130532a4f0df475a4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#1-41","gmt_create":"2026-04-23T20:35:45.701888+08:00","gmt_modified":"2026-04-23T20:35:45.701888+08:00"},{"id":1010,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"6281fff17a86ec1895c64d87c2ae7fb1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#1-55","gmt_create":"2026-04-23T20:35:45.704398+08:00","gmt_modified":"2026-04-23T20:35:45.704399+08:00"},{"id":1011,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"d4f99d3dd9fe489c354edf5fe2f8803d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#1-44","gmt_create":"2026-04-23T20:35:45.711611+08:00","gmt_modified":"2026-04-23T20:35:45.711611+08:00"},{"id":1012,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"d4f99d3dd9fe489c354edf5fe2f8803d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-44","gmt_create":"2026-04-23T20:35:45.713712+08:00","gmt_modified":"2026-04-23T20:35:45.713713+08:00"},{"id":1013,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"6628e006b8e5ca16160743528b6b0506","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#1-39","gmt_create":"2026-04-23T20:35:45.716382+08:00","gmt_modified":"2026-04-23T20:35:45.716382+08:00"},{"id":1014,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"86e37040be1aeb400fab9b529f5404c8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/subscription.py#1-37","gmt_create":"2026-04-23T20:35:45.719041+08:00","gmt_modified":"2026-04-23T20:35:45.719041+08:00"},{"id":1015,"source_id":"bceca00463fe55d3bcafda728f97f723","target_id":"86e37040be1aeb400fab9b529f5404c8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-04-23T20:35:45.722046+08:00","gmt_modified":"2026-04-23T20:35:45.722047+08:00"},{"id":1016,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"211463f5b49610f09594c40c0a235943","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/env.py#1-89","gmt_create":"2026-04-23T20:35:45.733734+08:00","gmt_modified":"2026-04-23T20:35:45.733735+08:00"},{"id":1017,"source_id":"a680d4819f5da57fe9fa0e6bc708f380","target_id":"211463f5b49610f09594c40c0a235943","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-89","gmt_create":"2026-04-23T20:35:45.736063+08:00","gmt_modified":"2026-04-23T20:35:45.736064+08:00"},{"id":1018,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"48d22eaee09e364a293ad6c4750f5c5a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: docker-compose.yml#1-71","gmt_create":"2026-04-23T20:35:45.738707+08:00","gmt_modified":"2026-04-23T20:35:45.738707+08:00"},{"id":1019,"source_id":"fc6242433ae9506bcc0bf4cb0dce1413","target_id":"48d22eaee09e364a293ad6c4750f5c5a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-71","gmt_create":"2026-04-23T20:35:45.743112+08:00","gmt_modified":"2026-04-23T20:35:45.743112+08:00"},{"id":1020,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"afe4138895492c26aac5c0120ef46cd8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/__init__.py#1-14","gmt_create":"2026-04-23T20:35:45.763731+08:00","gmt_modified":"2026-04-23T20:35:45.763731+08:00"},{"id":1021,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"98cc82f62b83678f06a33cf9231ecdf8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#1-128","gmt_create":"2026-04-23T20:35:45.768447+08:00","gmt_modified":"2026-04-23T20:35:45.768447+08:00"},{"id":1022,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"98cc82f62b83678f06a33cf9231ecdf8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-128","gmt_create":"2026-04-23T20:35:45.771158+08:00","gmt_modified":"2026-04-23T20:35:45.771158+08:00"},{"id":1023,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"e1aabd52989e47806fb997157381e1cf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py#1-37","gmt_create":"2026-04-23T20:35:45.780749+08:00","gmt_modified":"2026-04-23T20:35:45.780749+08:00"},{"id":1024,"source_id":"f6e6948dd0cdd3894bd9928b21feb979","target_id":"e1aabd52989e47806fb997157381e1cf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-04-23T20:35:45.782446+08:00","gmt_modified":"2026-04-23T20:35:45.782446+08:00"},{"id":1025,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"916551131bd9ac8c9f9c8bb762af1fa4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#1-130","gmt_create":"2026-04-23T20:35:45.783981+08:00","gmt_modified":"2026-04-23T20:35:45.783981+08:00"},{"id":1026,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"5d2836286eb7d4eb6039b004a9744d26","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#1-429","gmt_create":"2026-04-23T20:35:45.792834+08:00","gmt_modified":"2026-04-23T20:35:45.792834+08:00"},{"id":1027,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"ac77e4875817616194b7b5997d4fb1ae","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#57-94","gmt_create":"2026-04-23T20:35:45.806492+08:00","gmt_modified":"2026-04-23T20:35:45.806492+08:00"},{"id":1028,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"ac77e4875817616194b7b5997d4fb1ae","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 57-94","gmt_create":"2026-04-23T20:35:45.808076+08:00","gmt_modified":"2026-04-23T20:35:45.808076+08:00"},{"id":1029,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"0e57efd98dacc85da21f995980371ee4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py#21-37","gmt_create":"2026-04-23T20:35:45.813468+08:00","gmt_modified":"2026-04-23T20:35:45.813468+08:00"},{"id":1030,"source_id":"f6e6948dd0cdd3894bd9928b21feb979","target_id":"0e57efd98dacc85da21f995980371ee4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 21-37","gmt_create":"2026-04-23T20:35:45.81891+08:00","gmt_modified":"2026-04-23T20:35:45.81891+08:00"},{"id":1031,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"ed527c7a549ec333c2b30b59614343df","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#50-54","gmt_create":"2026-04-23T20:35:45.821047+08:00","gmt_modified":"2026-04-23T20:35:45.821047+08:00"},{"id":1032,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"717eb27184726e4f78d694984d29420c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#37-44","gmt_create":"2026-04-23T20:35:45.829709+08:00","gmt_modified":"2026-04-23T20:35:45.829709+08:00"},{"id":1033,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"717eb27184726e4f78d694984d29420c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 37-44","gmt_create":"2026-04-23T20:35:45.831123+08:00","gmt_modified":"2026-04-23T20:35:45.831123+08:00"},{"id":1034,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"f6c9f1b4e8646c366a31426a4537675d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#36-38","gmt_create":"2026-04-23T20:35:45.832035+08:00","gmt_modified":"2026-04-23T20:35:45.832035+08:00"},{"id":1035,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"56e46969bdb790a5e8f333184b878d6d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#11-41","gmt_create":"2026-04-23T20:35:45.839744+08:00","gmt_modified":"2026-04-23T20:35:45.839744+08:00"},{"id":1036,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"bfdf3479f244dc6794628d9df10ab6d0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#11-48","gmt_create":"2026-04-23T20:35:45.841136+08:00","gmt_modified":"2026-04-23T20:35:45.841136+08:00"},{"id":1037,"source_id":"b74caccb06844efcdb14d8324cff65c2","target_id":"bfdf3479f244dc6794628d9df10ab6d0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-48","gmt_create":"2026-04-23T20:35:45.842187+08:00","gmt_modified":"2026-04-23T20:35:45.842187+08:00"},{"id":1038,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"f5f9f0d96263ae84631c7a8d7e9b3648","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#11-44","gmt_create":"2026-04-23T20:35:45.843279+08:00","gmt_modified":"2026-04-23T20:35:45.843279+08:00"},{"id":1039,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"f5f9f0d96263ae84631c7a8d7e9b3648","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-44","gmt_create":"2026-04-23T20:35:45.84404+08:00","gmt_modified":"2026-04-23T20:35:45.84404+08:00"},{"id":1040,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"818d1354dc0665798f3d91a2ca5153d6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#11-34","gmt_create":"2026-04-23T20:35:45.845215+08:00","gmt_modified":"2026-04-23T20:35:45.845215+08:00"},{"id":1041,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"818d1354dc0665798f3d91a2ca5153d6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-34","gmt_create":"2026-04-23T20:35:45.845935+08:00","gmt_modified":"2026-04-23T20:35:45.845935+08:00"},{"id":1042,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"24aade4c34609a8ab28e4643a3692201","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/subscription.py#11-36","gmt_create":"2026-04-23T20:35:45.848681+08:00","gmt_modified":"2026-04-23T20:35:45.848681+08:00"},{"id":1043,"source_id":"bceca00463fe55d3bcafda728f97f723","target_id":"24aade4c34609a8ab28e4643a3692201","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-36","gmt_create":"2026-04-23T20:35:45.853262+08:00","gmt_modified":"2026-04-23T20:35:45.853263+08:00"},{"id":1044,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"d34337b9ff77246979252d2fd8fb8018","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/env.py#33-88","gmt_create":"2026-04-23T20:35:45.861311+08:00","gmt_modified":"2026-04-23T20:35:45.861311+08:00"},{"id":1045,"source_id":"a680d4819f5da57fe9fa0e6bc708f380","target_id":"d34337b9ff77246979252d2fd8fb8018","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-88","gmt_create":"2026-04-23T20:35:45.866334+08:00","gmt_modified":"2026-04-23T20:35:45.866335+08:00"},{"id":1046,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"4d11ddf7abb8076d81b30c4315786f9a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#21-128","gmt_create":"2026-04-23T20:35:45.871459+08:00","gmt_modified":"2026-04-23T20:35:45.871459+08:00"},{"id":1047,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"eb63042f04a22f9a67bd498df1684d20","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#36-111","gmt_create":"2026-04-23T20:35:45.882867+08:00","gmt_modified":"2026-04-23T20:35:45.882867+08:00"},{"id":1048,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"eb63042f04a22f9a67bd498df1684d20","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 36-111","gmt_create":"2026-04-23T20:35:45.883763+08:00","gmt_modified":"2026-04-23T20:35:45.883763+08:00"},{"id":1049,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"9b10dac7dbbb1327afc8a525bf4bd0c3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#45-81","gmt_create":"2026-04-23T20:35:45.886934+08:00","gmt_modified":"2026-04-23T20:35:45.886934+08:00"},{"id":1050,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"c651c7ad6747a92ee96eabb2eb82afdd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#12-18","gmt_create":"2026-04-23T20:35:45.888179+08:00","gmt_modified":"2026-04-23T20:35:45.888179+08:00"},{"id":1051,"source_id":"b0c428683c8a3e6922d90ca0d8c2736d","target_id":"c651c7ad6747a92ee96eabb2eb82afdd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-18","gmt_create":"2026-04-23T20:35:45.891674+08:00","gmt_modified":"2026-04-23T20:35:45.891674+08:00"},{"id":1052,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"dd01eee487298a28e950f6345196f1d4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#30-79","gmt_create":"2026-04-23T20:35:45.892903+08:00","gmt_modified":"2026-04-23T20:35:45.892903+08:00"},{"id":1053,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"dd01eee487298a28e950f6345196f1d4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 30-79","gmt_create":"2026-04-23T20:35:45.895814+08:00","gmt_modified":"2026-04-23T20:35:45.895814+08:00"},{"id":1054,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"7dae7237f11c5100bf7889c105193cf6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#12-32","gmt_create":"2026-04-23T20:35:45.897237+08:00","gmt_modified":"2026-04-23T20:35:45.897237+08:00"},{"id":1055,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"7dae7237f11c5100bf7889c105193cf6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-32","gmt_create":"2026-04-23T20:35:45.901349+08:00","gmt_modified":"2026-04-23T20:35:45.901349+08:00"},{"id":1056,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"cc64cf609f5ff218f618e0664ffa7cc7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#298-308","gmt_create":"2026-04-23T20:35:45.903364+08:00","gmt_modified":"2026-04-23T20:35:45.903364+08:00"},{"id":1057,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"cc64cf609f5ff218f618e0664ffa7cc7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 298-308","gmt_create":"2026-04-23T20:35:45.904411+08:00","gmt_modified":"2026-04-23T20:35:45.904411+08:00"},{"id":1058,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"ce7e334595a4ce912e0d116314db9a35","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#342-429","gmt_create":"2026-04-23T20:35:45.905854+08:00","gmt_modified":"2026-04-23T20:35:45.905854+08:00"},{"id":1059,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"ce7e334595a4ce912e0d116314db9a35","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 342-429","gmt_create":"2026-04-23T20:35:45.906963+08:00","gmt_modified":"2026-04-23T20:35:45.906964+08:00"},{"id":1060,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"2f46f212597e3c245b9e5dcc5dbc863d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/citation.py#7-18","gmt_create":"2026-04-23T20:35:45.90882+08:00","gmt_modified":"2026-04-23T20:35:45.90882+08:00"},{"id":1061,"source_id":"1a3336b4af8a39a055e912724338580c","target_id":"2f46f212597e3c245b9e5dcc5dbc863d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 7-18","gmt_create":"2026-04-23T20:35:45.909475+08:00","gmt_modified":"2026-04-23T20:35:45.909476+08:00"},{"id":1062,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"dc40f1dd3e59ee7f046019201068bea1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#14-22","gmt_create":"2026-04-23T20:35:45.919758+08:00","gmt_modified":"2026-04-23T20:35:45.919759+08:00"},{"id":1063,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"dc40f1dd3e59ee7f046019201068bea1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 14-22","gmt_create":"2026-04-23T20:35:45.920772+08:00","gmt_modified":"2026-04-23T20:35:45.920772+08:00"},{"id":1064,"source_id":"c7eb113b-b503-4d83-be7f-9ccf3350c9d9","target_id":"19e75845-5147-4aeb-90be-16f3aa270465","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c7eb113b-b503-4d83-be7f-9ccf3350c9d9 -\u003e 19e75845-5147-4aeb-90be-16f3aa270465","gmt_create":"2026-04-23T20:35:46.934281+08:00","gmt_modified":"2026-04-23T20:35:46.934281+08:00"},{"id":1065,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"d5c75004-b01b-416f-850a-4791c5489a32","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ffbb970e-56e0-40ad-bd88-1a1e55482d96 -\u003e d5c75004-b01b-416f-850a-4791c5489a32","gmt_create":"2026-04-23T20:35:46.942283+08:00","gmt_modified":"2026-04-23T20:35:46.942284+08:00"},{"id":1066,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"c3fa653f-8dd7-41fe-8c2e-8b60adbf70f4","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ffbb970e-56e0-40ad-bd88-1a1e55482d96 -\u003e c3fa653f-8dd7-41fe-8c2e-8b60adbf70f4","gmt_create":"2026-04-23T20:35:46.944556+08:00","gmt_modified":"2026-04-23T20:35:46.944556+08:00"},{"id":1067,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ffbb970e-56e0-40ad-bd88-1a1e55482d96 -\u003e 262a3941-fdc6-46b0-b767-be40aa9d5761","gmt_create":"2026-04-23T20:35:46.946394+08:00","gmt_modified":"2026-04-23T20:35:46.946394+08:00"},{"id":1068,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"7c0201f7-9e02-4cba-9ee1-81c3477f049a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ffbb970e-56e0-40ad-bd88-1a1e55482d96 -\u003e 7c0201f7-9e02-4cba-9ee1-81c3477f049a","gmt_create":"2026-04-23T20:35:46.948347+08:00","gmt_modified":"2026-04-23T20:35:46.948347+08:00"},{"id":1069,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: deb919cc-9541-4ed7-a581-ae2876ea67c2 -\u003e a1cc822d-5382-431c-8c49-cf398fb5eb3c","gmt_create":"2026-04-23T20:35:46.950364+08:00","gmt_modified":"2026-04-23T20:35:46.950364+08:00"},{"id":1070,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"37003fc0-1cf5-4264-996b-40807001875f","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69 -\u003e 37003fc0-1cf5-4264-996b-40807001875f","gmt_create":"2026-04-23T20:35:46.957122+08:00","gmt_modified":"2026-04-23T20:35:46.957122+08:00"},{"id":1071,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69 -\u003e 2126339b-b0f5-4152-924b-cbe028cd0c39","gmt_create":"2026-04-23T20:35:46.959782+08:00","gmt_modified":"2026-04-23T20:35:46.959782+08:00"},{"id":1072,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69 -\u003e fab60eaf-9652-4cb5-9f9e-0525caa62d63","gmt_create":"2026-04-23T20:35:46.965729+08:00","gmt_modified":"2026-04-23T20:35:46.965729+08:00"},{"id":1073,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"00359e45-209d-4be3-8795-50dea52bdba1","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69 -\u003e 00359e45-209d-4be3-8795-50dea52bdba1","gmt_create":"2026-04-23T20:35:46.970985+08:00","gmt_modified":"2026-04-23T20:35:46.970985+08:00"},{"id":1074,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"2632a6f9-774e-4a91-94da-a984bdb20758","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69 -\u003e 2632a6f9-774e-4a91-94da-a984bdb20758","gmt_create":"2026-04-23T20:35:46.974435+08:00","gmt_modified":"2026-04-23T20:35:46.974435+08:00"},{"id":1075,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 49915365-e38e-43b5-beac-6aa7d5a74cbb -\u003e 74d3018f-4e23-4687-8bf4-7fb403f479f7","gmt_create":"2026-04-23T20:35:46.980653+08:00","gmt_modified":"2026-04-23T20:35:46.980653+08:00"}],"source_files":[{"id":"12e2c3d7b9a92dc44a6ee29b85e10df6","path":"frontend/app/layout.tsx","filename":"layout.tsx","gmt_create":"2026-04-23T15:19:43.754128+08:00","gmt_modified":"2026-04-23T15:19:43.754129+08:00"},{"id":"2a1c745c7b3fb7f600596be3d979bba1","path":"frontend/app/(dashboard","filename":"(dashboard","gmt_create":"2026-04-23T15:19:43.756075+08:00","gmt_modified":"2026-04-23T15:19:43.756075+08:00"},{"id":"eca13a610badfc5ffc6210827fb96991","path":"frontend/components/layout/header.tsx","filename":"header.tsx","gmt_create":"2026-04-23T15:19:43.756308+08:00","gmt_modified":"2026-04-23T15:19:43.756308+08:00"},{"id":"18a0651d895fba9bb4e0c0229459efdc","path":"frontend/components/layout/sidebar.tsx","filename":"sidebar.tsx","gmt_create":"2026-04-23T15:19:43.756496+08:00","gmt_modified":"2026-04-23T15:19:43.756496+08:00"},{"id":"5d7886d0dc99f81073a578b8aefdd375","path":"frontend/lib/api.ts","filename":"api.ts","gmt_create":"2026-04-23T15:19:43.756648+08:00","gmt_modified":"2026-04-23T15:19:43.756648+08:00"},{"id":"0c0b0f4e2cf44facd9d5b57de0d0bf0c","path":"frontend/components/ui/table.tsx","filename":"table.tsx","gmt_create":"2026-04-23T15:19:43.758184+08:00","gmt_modified":"2026-04-23T15:19:43.758184+08:00"},{"id":"108b0c4b4dcfb6aa39a5eb138225c148","path":"frontend/components/ui/dialog.tsx","filename":"dialog.tsx","gmt_create":"2026-04-23T15:19:43.75905+08:00","gmt_modified":"2026-04-23T15:19:43.75905+08:00"},{"id":"ef72f0c3cedb9fd9a87352fe493053dc","path":"frontend/lib/platforms.ts","filename":"platforms.ts","gmt_create":"2026-04-23T15:19:43.759223+08:00","gmt_modified":"2026-04-23T15:19:43.759223+08:00"},{"id":"f93ae024fe0a2e69698037dff6df205f","path":"frontend/lib/utils.ts","filename":"utils.ts","gmt_create":"2026-04-23T15:19:43.759351+08:00","gmt_modified":"2026-04-23T15:19:43.759351+08:00"},{"id":"d5f2266643d2011c66e86af088ec637f","path":"frontend/components/charts/trend-chart.tsx","filename":"trend-chart.tsx","gmt_create":"2026-04-23T15:19:43.759489+08:00","gmt_modified":"2026-04-23T15:19:43.759489+08:00"},{"id":"f1a7d61831cc0a45ac6220294f15c21d","path":"frontend/components/charts/platform-chart.tsx","filename":"platform-chart.tsx","gmt_create":"2026-04-23T15:19:43.759606+08:00","gmt_modified":"2026-04-23T15:19:43.759606+08:00"},{"id":"9228ff67d4c757a85d9421b71f4b29f5","path":"backend/app/main.py","filename":"main.py","gmt_create":"2026-04-23T15:19:45.5873+08:00","gmt_modified":"2026-04-23T15:19:45.5873+08:00"},{"id":"93022c8938ce318f167277cfa65c29a7","path":"backend/app/api/auth.py","filename":"auth.py","gmt_create":"2026-04-23T15:19:45.587785+08:00","gmt_modified":"2026-04-23T15:19:45.587786+08:00"},{"id":"6b3d903205941aa9391dd90016e1102c","path":"backend/app/api/queries.py","filename":"queries.py","gmt_create":"2026-04-23T15:19:45.588167+08:00","gmt_modified":"2026-04-23T15:19:45.588167+08:00"},{"id":"7538ffe4902ab6041adb28b19844962a","path":"backend/app/api/citations.py","filename":"citations.py","gmt_create":"2026-04-23T15:19:45.588473+08:00","gmt_modified":"2026-04-23T15:19:45.588473+08:00"},{"id":"58901c94d975d87e652a4dc6c8dda656","path":"backend/app/api/reports.py","filename":"reports.py","gmt_create":"2026-04-23T15:19:45.588695+08:00","gmt_modified":"2026-04-23T15:19:45.588695+08:00"},{"id":"9d08667997a868fc07c9b4e328e44224","path":"backend/app/api/deps.py","filename":"deps.py","gmt_create":"2026-04-23T15:19:45.588857+08:00","gmt_modified":"2026-04-23T15:19:45.588857+08:00"},{"id":"e0c0ca66b8b81cf66e078a7ab162c07f","path":"backend/app/schemas/auth.py","filename":"auth.py","gmt_create":"2026-04-23T15:19:45.589011+08:00","gmt_modified":"2026-04-23T15:19:45.589011+08:00"},{"id":"f301b79d833233ce39d350e82a71c938","path":"backend/app/schemas/query.py","filename":"query.py","gmt_create":"2026-04-23T15:19:45.589202+08:00","gmt_modified":"2026-04-23T15:19:45.589202+08:00"},{"id":"1a3336b4af8a39a055e912724338580c","path":"backend/app/schemas/citation.py","filename":"citation.py","gmt_create":"2026-04-23T15:19:45.589399+08:00","gmt_modified":"2026-04-23T15:19:45.589399+08:00"},{"id":"4d2f3847b7c10634733118b70a1aea0b","path":"backend/app/services/auth.py","filename":"auth.py","gmt_create":"2026-04-23T15:19:45.589591+08:00","gmt_modified":"2026-04-23T15:19:45.589591+08:00"},{"id":"88d22de3b2a7419868e8ae19130d860c","path":"backend/app/services/query.py","filename":"query.py","gmt_create":"2026-04-23T15:19:45.589732+08:00","gmt_modified":"2026-04-23T15:19:45.589732+08:00"},{"id":"04e3926c080e795713bff683e7dc9d3e","path":"backend/app/services/citation.py","filename":"citation.py","gmt_create":"2026-04-23T15:19:45.589852+08:00","gmt_modified":"2026-04-23T15:19:45.589852+08:00"},{"id":"9ff19022ef915615911280e3c49ed44b","path":"backend/app/config.py","filename":"config.py","gmt_create":"2026-04-23T15:19:45.589987+08:00","gmt_modified":"2026-04-23T15:19:45.589987+08:00"},{"id":"c59f8c276697a070dffc581fe94d809c","path":"backend/app/models/user.py","filename":"user.py","gmt_create":"2026-04-23T15:19:45.590197+08:00","gmt_modified":"2026-04-23T15:19:45.590198+08:00"},{"id":"b74caccb06844efcdb14d8324cff65c2","path":"backend/app/models/query.py","filename":"query.py","gmt_create":"2026-04-23T15:19:45.590343+08:00","gmt_modified":"2026-04-23T15:19:45.590344+08:00"},{"id":"b4a81ef789630d0af6a8d50859d01bf3","path":"backend/app/models/citation_record.py","filename":"citation_record.py","gmt_create":"2026-04-23T15:19:45.590489+08:00","gmt_modified":"2026-04-23T15:19:45.590489+08:00"},{"id":"069738f21ac2da7349d22683e8c36929","path":"backend/app/models/query_task.py","filename":"query_task.py","gmt_create":"2026-04-23T15:19:45.59062+08:00","gmt_modified":"2026-04-23T15:19:45.59062+08:00"},{"id":"5cbb1e3f112aeba62a14b0b8999fc0f5","path":"backend/app/workers/scheduler.py","filename":"scheduler.py","gmt_create":"2026-04-23T15:20:08.953491+08:00","gmt_modified":"2026-04-23T15:20:08.953491+08:00"},{"id":"74040de652d5e57f548bb5c4adc3e1a0","path":"backend/app/workers/citation_engine.py","filename":"citation_engine.py","gmt_create":"2026-04-23T15:20:08.953836+08:00","gmt_modified":"2026-04-23T15:20:08.953837+08:00"},{"id":"8f973791233c698b3e64a4fb28a93d4b","path":"backend/app/workers/platforms/kimi.py","filename":"kimi.py","gmt_create":"2026-04-23T15:20:08.954103+08:00","gmt_modified":"2026-04-23T15:20:08.954103+08:00"},{"id":"f642fc1c2f34e15572d9d98aa6c18813","path":"backend/app/workers/platforms/wenxin.py","filename":"wenxin.py","gmt_create":"2026-04-23T15:20:08.954273+08:00","gmt_modified":"2026-04-23T15:20:08.954273+08:00"},{"id":"a16cf42e9559523c4f96ca4c79f9488d","path":"backend/app/workers/platforms/base.py","filename":"base.py","gmt_create":"2026-04-23T15:20:08.954406+08:00","gmt_modified":"2026-04-23T15:20:08.954406+08:00"},{"id":"b0c428683c8a3e6922d90ca0d8c2736d","path":"backend/app/database.py","filename":"database.py","gmt_create":"2026-04-23T15:20:08.955702+08:00","gmt_modified":"2026-04-23T15:20:08.955702+08:00"},{"id":"b2f0d46a31a5441594f2e777365fc156","path":"tests/test_scheduler.py","filename":"test_scheduler.py","gmt_create":"2026-04-23T15:20:08.95621+08:00","gmt_modified":"2026-04-23T15:20:08.95621+08:00"},{"id":"0613e76b9679be7f998fb8fd8056e686","path":"tests/test_queries.py","filename":"test_queries.py","gmt_create":"2026-04-23T15:20:08.956336+08:00","gmt_modified":"2026-04-23T15:20:08.956336+08:00"},{"id":"99fe1b288fd41daa86c2dfbab819abf0","path":"backend/app/models/__init__.py","filename":"__init__.py","gmt_create":"2026-04-23T15:21:46.682639+08:00","gmt_modified":"2026-04-23T15:21:46.682639+08:00"},{"id":"bceca00463fe55d3bcafda728f97f723","path":"backend/app/models/subscription.py","filename":"subscription.py","gmt_create":"2026-04-23T15:21:46.684259+08:00","gmt_modified":"2026-04-23T15:21:46.684259+08:00"},{"id":"d4f95fcf50683b5bf6167c7d2a6b126d","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","filename":"488d0bd5ab01_initial_migration.py","gmt_create":"2026-04-23T15:21:46.684619+08:00","gmt_modified":"2026-04-23T15:21:46.684619+08:00"},{"id":"0ef1efea889dba3e1f299626df479571","path":"tests/conftest.py","filename":"conftest.py","gmt_create":"2026-04-23T15:22:15.981194+08:00","gmt_modified":"2026-04-23T15:22:15.981194+08:00"},{"id":"389d631bc6c7111ba411b0b79fca455e","path":"tests/test_auth.py","filename":"test_auth.py","gmt_create":"2026-04-23T15:22:15.98141+08:00","gmt_modified":"2026-04-23T15:22:15.98141+08:00"},{"id":"80a0429cc47931de27ddb17a62b8dd9c","path":"tests/test_business_flow.py","filename":"test_business_flow.py","gmt_create":"2026-04-23T15:22:15.981566+08:00","gmt_modified":"2026-04-23T15:22:15.981567+08:00"},{"id":"b07a4fb9cecbbd66a6910ccbc7651f19","path":"tests/test_citation_engine.py","filename":"test_citation_engine.py","gmt_create":"2026-04-23T15:22:15.981715+08:00","gmt_modified":"2026-04-23T15:22:15.981715+08:00"},{"id":"42ff5383133d176cec9eb88682483be3","path":"tests/test_citations.py","filename":"test_citations.py","gmt_create":"2026-04-23T15:22:15.981831+08:00","gmt_modified":"2026-04-23T15:22:15.981831+08:00"},{"id":"aaf5bce6be82d2f947bfa5c1806de452","path":"frontend/package.json","filename":"package.json","gmt_create":"2026-04-23T15:22:23.492837+08:00","gmt_modified":"2026-04-23T15:22:23.492837+08:00"},{"id":"01056dad8851d3e9bd532eb4cab33792","path":"frontend/tailwind.config.ts","filename":"tailwind.config.ts","gmt_create":"2026-04-23T15:22:23.495792+08:00","gmt_modified":"2026-04-23T15:22:23.495792+08:00"},{"id":"ac1acbc54c49ee1de13369f6c6827568","path":"frontend/components/ui/button.tsx","filename":"button.tsx","gmt_create":"2026-04-23T15:22:23.496353+08:00","gmt_modified":"2026-04-23T15:22:23.496353+08:00"},{"id":"0186dc8a89340139a84e1e3c5571a57f","path":"frontend/components/ui/dropdown-menu.tsx","filename":"dropdown-menu.tsx","gmt_create":"2026-04-23T15:22:23.496869+08:00","gmt_modified":"2026-04-23T15:22:23.496869+08:00"},{"id":"3cf787fa77a15b2b1783560c6d83ed21","path":"frontend/components/ui/input.tsx","filename":"input.tsx","gmt_create":"2026-04-23T15:22:23.497127+08:00","gmt_modified":"2026-04-23T15:22:23.497128+08:00"},{"id":"3c56e1c079959bfcc985183805e5874f","path":"frontend/components/ui/select.tsx","filename":"select.tsx","gmt_create":"2026-04-23T15:22:23.497457+08:00","gmt_modified":"2026-04-23T15:22:23.497457+08:00"},{"id":"0d5ef537f7c0b8c390f8b31d7cf47b56","path":"frontend/components/ui/card.tsx","filename":"card.tsx","gmt_create":"2026-04-23T15:22:23.497745+08:00","gmt_modified":"2026-04-23T15:22:23.497745+08:00"},{"id":"51821ca9ec2a1c972f3c9d111e19db8a","path":"frontend/components/ui/badge.tsx","filename":"badge.tsx","gmt_create":"2026-04-23T15:22:23.498034+08:00","gmt_modified":"2026-04-23T15:22:23.498034+08:00"},{"id":"beb87ab5aad9532647e9dbd2db7ef587","path":"frontend/components/ui/tabs.tsx","filename":"tabs.tsx","gmt_create":"2026-04-23T15:22:23.498711+08:00","gmt_modified":"2026-04-23T15:22:23.498711+08:00"},{"id":"792b8e2c16c9ff2095d83b8972313be4","path":"frontend/components/ui/label.tsx","filename":"label.tsx","gmt_create":"2026-04-23T15:22:23.499031+08:00","gmt_modified":"2026-04-23T15:22:23.499031+08:00"},{"id":"546e01c5f73aaf5140eee922f4b9a441","path":"frontend/components/providers.tsx","filename":"providers.tsx","gmt_create":"2026-04-23T15:22:23.499298+08:00","gmt_modified":"2026-04-23T15:22:23.499298+08:00"},{"id":"e68ad5186f1e47610ab3d9f14a794393","path":"backend/app/workers/platforms/tongyi.py","filename":"tongyi.py","gmt_create":"2026-04-23T20:31:36.476814+08:00","gmt_modified":"2026-04-23T20:31:36.476814+08:00"},{"id":"404f6d0765a8c6e77e33b7fc21b377a4","path":"backend/app/workers/platforms/doubao.py","filename":"doubao.py","gmt_create":"2026-04-23T20:31:36.477414+08:00","gmt_modified":"2026-04-23T20:31:36.477414+08:00"},{"id":"303e80519e946904d1cb3ac32cbb0814","path":"backend/app/workers/platforms/qingyan.py","filename":"qingyan.py","gmt_create":"2026-04-23T20:31:36.477731+08:00","gmt_modified":"2026-04-23T20:31:36.477731+08:00"},{"id":"5af7301fe056fc3d10820d820e8ad777","path":"backend/app/workers/platforms/tiangong.py","filename":"tiangong.py","gmt_create":"2026-04-23T20:31:36.477969+08:00","gmt_modified":"2026-04-23T20:31:36.477969+08:00"},{"id":"0e38ad5d2d3daaad08c9302df8805b15","path":"backend/app/workers/platforms/xinghuo.py","filename":"xinghuo.py","gmt_create":"2026-04-23T20:31:36.47825+08:00","gmt_modified":"2026-04-23T20:31:36.47825+08:00"},{"id":"6a63f048c16c60c5d2d57012c810ee0e","path":"backend/app/workers/platforms/search_engine.py","filename":"search_engine.py","gmt_create":"2026-04-23T20:31:36.478564+08:00","gmt_modified":"2026-04-23T20:31:36.478564+08:00"},{"id":"a26ee01cf41da3b956e1650448c156fa","path":"backend/requirements.txt","filename":"requirements.txt","gmt_create":"2026-04-23T20:31:36.48051+08:00","gmt_modified":"2026-04-23T20:31:36.48051+08:00"},{"id":"e9b52adbec3c07cf021e488dd3f99ab4","path":"backend/Dockerfile","filename":"Dockerfile","gmt_create":"2026-04-23T20:31:50.452043+08:00","gmt_modified":"2026-04-23T20:31:50.452043+08:00"},{"id":"4a56ef5fca60bc63480b457cab3832f0","path":"backend/app/workers/platforms/__init__.py","filename":"__init__.py","gmt_create":"2026-04-23T20:35:18.583102+08:00","gmt_modified":"2026-04-23T20:35:18.583102+08:00"},{"id":"36dd0ad3ee6bc75a480ad8a62268e80e","path":"backend/app/workers/models/query.py","filename":"query.py","gmt_create":"2026-04-23T20:35:18.58383+08:00","gmt_modified":"2026-04-23T20:35:18.58383+08:00"},{"id":"a680d4819f5da57fe9fa0e6bc708f380","path":"backend/alembic/env.py","filename":"env.py","gmt_create":"2026-04-23T20:35:45.568869+08:00","gmt_modified":"2026-04-23T20:35:45.56887+08:00"},{"id":"f6e6948dd0cdd3894bd9928b21feb979","path":"backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py","filename":"b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py","gmt_create":"2026-04-23T20:35:45.569946+08:00","gmt_modified":"2026-04-23T20:35:45.569946+08:00"},{"id":"50f2e6bdc4a79e69bd43ea8d6fec67fe","path":"backend/alembic.ini","filename":"alembic.ini","gmt_create":"2026-04-23T20:35:45.570621+08:00","gmt_modified":"2026-04-23T20:35:45.570621+08:00"},{"id":"fc6242433ae9506bcc0bf4cb0dce1413","path":"docker-compose.yml","filename":"docker-compose.yml","gmt_create":"2026-04-23T20:35:45.574312+08:00","gmt_modified":"2026-04-23T20:35:45.574314+08:00"}],"wiki_catalogs":[{"id":"1bb55e12-24c4-42cb-8f59-ddc303460d45","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"项目概述","description":"project-overview","prompt":"为GEO项目创建全面的项目概述内容。详细介绍GEO平台的核心目标、主要功能特性和技术架构。解释项目作为智能学术查询与引用管理系统的设计理念,包括多AI平台集成、定时查询任务调度、数据可视化展示等核心功能。说明前后端技术栈的选择原因和整体架构设计思路。提供项目背景、应用场景和价值主张。包含系统边界、核心组件关系图和数据流向说明。面向初学者提供概念性理解,同时为经验丰富的开发者提供技术决策的背景信息。","progress_status":"completed","dependent_files":"backend/app/main.py,backend/app/config.py,docker-compose.yml,README.md","gmt_create":"2026-04-22T18:56:47.080895+08:00","gmt_modified":"2026-04-22T18:58:50.329037+08:00","raw_data":"WikiEncrypted:0MI1/XkBoMl0lTbK6t0Cn/+8FdvqrJ62ianMLvZj02elJtBUgH0Ns0veIx1WPtM9wwkxI+/XAqHLxJLlHB8wVx/ob+gHrWfBRFOXtNWHzmTEJrNEttrYXRV2niAmjrnc6VwXmKYktKqbX8suWQzVig0VjADoZYGObEeg0k6UmhPkxkWTv0CFbAx+cDhkRVaksYUcZryJYvMvtyIQASEjZKRRtKwti+2pbfHzXGaF917ir8bLf35/8ERIvyLM91k6J7WrkQWQzCSMouoCq7SDEG2Mf9UPmNoJ04sS8RtxbiiFeHu6NAI8L7L1EfxY3DDdg47NhHU1wH7bOT2u9DuFl4zIbaVNsenyjEzRQZrcsq9OLnl8yWNKJf21GOA6ESfKQqN6mlowI6I1W8qLXaH+z7qnaPWhOyo4mje7g8hCZG4S41ZGWOkatECxYDASI4FIduNeEVW9aCmI7PB7nSnpPSwQE5aC5VqWoMBShuC18DGj8AvqVxfjw6b7bxR8HDUKjzXB/K7KmXdVGCcJNb3tgApQuSTsYxQ2jHsSoUECE/BEAaW7oLRxWD3c3uNNvgrgdfQuFT+k7Ko5zOXJ006KKVxWcThwPsColn6fIwGOPrS7ncbwW0n28B2g2hw91A5Hzpgm/Dy0+YIlPQM8anuTom0Oj0p1Y2g2Nbp2PLaPBGGPUa6bDoCNqzoUs1784Rwjp+aLG05lN7onsW7Z7C9feQ4P5Ry0h8YnKKl/dR4mKs1k+dkOeMPFUpWt/qlFcHAMSoVy+O+Xu+reQzwoCKYlSwgFgjiZzs3p+kL1LWvbxSvArAOemC7uu5lEzWdggi+MLrSVpB7hLalHKGdJv8NlK4SmNaadctIMUQvY+5PZwitnGdyyjjlS7/wScj8Uv3/EZk3ITEUlIvWPJ15U6QBNxHy2DbosENNEgp0lDni/UFPduUos6SlLo5L0WKgfv72BnFY4lZfB3LChbEu2eBhM8AALCKaUIhj7t/oEI+9I9qqfPimBNi6FyH0jllt2yllX04VJRxl32uuWOFcZnm/WuJgw/BbrZCR++fefrA1l6s02TJzhZ0Y5XWJsKulCubVCF9tUQ4UJbnnU1nI5rTahkANjI7mTWIpkPHp+GUXL8Q3UpSwYl2BshG/kyfJIyFu26CIJnX5HtHezPZNWAwBQVebhTaSURWwish62V3jO/gRkcmDJHlE8YC2bAo62/asrgniVM+qniMotIgbt1nopX3ishgnMYYmFqKU8+YXUiE9/z243TcTEzltDGAWj5YN10RF/Mx3dT+62D1cwhO1486VYAZpYZtOjHjPeP2/4TW7FbMhub9iGFZ8FNqneYJyWZBa+udx1oyHzyo3YHrDcFGJPXi9ido7nGq53tKEM64A="},{"id":"7c3e3c0b-5d1f-4d64-99be-668041c6cd9d","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"核心框架配置","description":"core-framework","prompt":"为GEO后端核心框架创建详细的配置文档。深入解释FastAPI应用实例的初始化过程,包括应用名称、版本管理和生命周期管理。详细说明CORS中间件配置、路由注册机制和健康检查端点。文档化配置管理系统的实现,包括环境变量读取、配置验证和默认值设置。解释数据库连接池配置、异步会话管理和连接超时设置。包含应用启动和关闭流程的详细说明,以及资源清理机制。提供配置最佳实践和常见问题解决方案。","parent_id":"7c2ac186-ec90-400a-ac1d-b3b7ca2f01d5","progress_status":"completed","dependent_files":"backend/app/main.py,backend/app/config.py,backend/app/database.py","gmt_create":"2026-04-22T18:57:02.316945+08:00","gmt_modified":"2026-04-22T19:03:21.69307+08:00","raw_data":"WikiEncrypted:luoNp8LvFa7zGThvIT9T4rhp6COPRJpm3tT/kftARqFq4dg1cG/8M10NcCrCelp/LC8SV6McSk0Sx9xEgJV/YmEmjfMmlukALh9v7ZKLxT8XDDYkBCrff2Ia9KfGFRdlfVmmQUGfhQARTeykGZh6O8/4GECBHUYLS0F6NXI7fSS3R+/I5c/HIjI7F17mVNpZDQZcc2HmM4zhdyIinOGyErSf3vIPcfVVobPB4D/wCUvMWxl+jpvktykHTIgH9ze7f4fTCC02xK5vRnt1RlMdAQ3d1Km7OOGjAga30OGvRdp9UtT48gdhzPQH5FEbfzn7K6TnuPzqQRf4GuS2kVTRSUFbSnmj5d5HqHmgx7D9iQYR/XxRRVbv+GeFwINvVa+UX9cnanYU19zazOGWG2rcdDk8jqu5MwAhVZsT28hykyuLfKeTf7xuM6Li86T1mZ18SROCJHe4LXYEaH94K6CHjZLCyEl10xBk02/CkW4aTW29TIgrponrmnrvV6bShQ+ZitR1TcivPsNN5t6TCaHMnlaLlOpznSGNpMyf4S51cRPxl2cwZrqJbrdFxehIoPrUyOvtRvtEsLhpo30456ihrInvbVXgJMwZIcDaKHSu0Bf7ma8y+UCWH61+VBIqW44KzA9zmKcXU9hiiwL+gjwiNcV7JDcgg43Un4qvjEzeJiBRBMGGzc8Oc05dWgRs1K6QUdS1kZTjI/JKiGS8zFYKz0mvQqLwc6/xe1/MDhMyU1QUXSqpcNNU6aFmY7te5kENN2aSPZqigqID+RwvIV8k8JETdmHaxJUzCSrNEpbpUukFuVQKz419athf4kMeQH2fKsLMZABn10WnnmY9HGGqBx+gpNOTU9AiSz1l4b0Ej8XoQcwIn1lqw49qdJ6+PRuuFBv6OcjxgJSMNSQzm4c/eyl7yv6J4vXceT7Ul+ySMAGRnSpDUehmOuw1DT4dV0n05Rcrx5gBjuztOAexxUhLwMUK/v+8qdn/0OcciISCZ/U1GhzhWFYiVKRBfNuNkuRjwmc4zg5Zc97TPRBXYs2q2e0/3cT+Dr7lqeGnXWL3X4iTjTygXMekhDQBjc0NbF6cdDOJcPAUnOg6jDkreBiEkTJ7hZg3J9ho2RYDaHuPvyMlkW4YWTpGRODtXIs4aLG0KFbNr6uOG31hOPZsgnHmoNwcPwRUO4G89Nkl2M6ZTMiNHWtsSwES+gLmCLPunm7R2zQNtdei+K3lzSg0bQgUvg==","layer_level":1},{"id":"bcaa04da-04e3-427f-ba01-847ad657e78a","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"Next.js应用配置","description":"nextjs-app-config","prompt":"创建Next.js 14应用配置的详细文档。说明App Router的页面组织结构,包括路由规则、嵌套路由和页面布局设计。文档化全局样式配置、字体系统和主题定制。解释Tailwind CSS的配置选项、自定义样式和响应式设计原则。说明TypeScript配置、类型定义和开发工具设置。包含性能优化配置、构建优化和生产环境部署设置。提供配置最佳实践和常见问题解决方案。","parent_id":"d907a8eb-795c-4060-9cdd-50d31cf39be3","progress_status":"completed","dependent_files":"frontend/app/layout.tsx,frontend/app/globals.css,frontend/next.config.mjs,frontend/tailwind.config.ts,frontend/tsconfig.json","gmt_create":"2026-04-22T18:57:04.216045+08:00","gmt_modified":"2026-04-22T19:04:47.361369+08:00","raw_data":"WikiEncrypted:MoQ9U2rERvJfHcC2U9f5yo5PrhAUeAY0OH9kgPk99cOGQSyTenUDM+krr5XcMxqj+FSA7CYnuq8hz8eS8Pvzc8yZuRRHbRPExvPpdrOEr8fRtUXkjnECv8NVvFPloo2fonxY9Q2vmL0x2O1UsV1O6L6tkraG28x1o504hsBitow5XMWkk8uSk+sDbyHo/y9/SBDWpcEOXVqeU4nwD/UU+7N90n5i5T89nz6b4M+31tkvffIuZRigZ+1+IJqlsqFgRt9PNrxL9ZUsD2D/Yvh8EJ0sCr9z7AI+D3z+JYM2kgFT/3ugS/EnEzwByGZk/e2EsOY4D+NkRBas836JX++o61ZH5GPQBXTHnVa8h5B1LAVlbA5zBuJHHY3V2XS4X1cTo9Hj76mg9Ha+jWvX2A9fv4vnscE6cVxnM+WjWnSfN8N7Vtla2YRDrNXZRAL50+PNfhUKpb48d0hKFyzf1Av1T4WBKgaYEo2znphEy99ViuG+oOFS6D5pVQ/w5yoPe5MpZCDk4aNsO/owrJkILcGc3+qHfld4Yd4HtYM6madWmmOvHIIuCy5CPGojBzKDcTTSPP6ZjuY1EC/RG3lBkYCQtQj889+80GZpaSbrqWjTmMI1DX1KLNXJkoI3dFk5Tx+w4TqiKICJ8q9KJhOX+mEVk+ECXqrc2Qz787D34zY5UlwsaA44ziBvWDZuwfPWmtelAq4KjqfWTFWYqdY6D0fUvetLh3/VEqH/o5Nh4HrlGvy/faZbU9FKOBZPkAy8c0J24rW5p2pKmRq6+2IicNTgufRROtiY87GKfbfmqpDYBEn3Dogv/Q3i5beVavuD1tJWhRsewhAZAUi1jWdiK3LyS0QI7dMFXVJw3cm2FnegeXA8CNlWnjUVSOY/OfLFqJJqYrfcj57f3nAU4a88w4h10+iFBLh0yZkX50llRxgUjV0fnjyEFUDoinC1xDA9ip9IOosTI+avZPhLTC0Yn4ZGnJi4NCD5cD88+KIdRUnVZJ5Sqf4ZcCCQamtYBT8NJ+PlByYxpqJpGtLyV9BuexYC86YnD3PJau0oXazcytuXMYh/TTaEo89ZzW4jpsqDM1G/gBUq7R+QDzLElNZfw3Ov0E0+Pvfm89W+v2iSsJ2JI2Yq7wrml7FiTN0KoP5KVEBCEzDLwebnJFqa7GBaghwADYcgoZ2VX2Xtin82a3oqlX2WNfur2DIr4YURiSmE8g8O","layer_level":1},{"id":"9e3d703f-f424-47f4-84df-b99873b93e5a","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"项目介绍","description":"project-introduction","prompt":"为GEO项目创建详细的项目介绍内容。解释GEO平台作为智能学术查询与引用管理系统的核心使命和价值主张。详细描述项目解决的实际问题,包括传统学术研究中品牌引用检测的痛点、多平台数据整合的需求等。说明项目的目标用户群体和应用场景,如研究人员、市场分析师、品牌监测团队等。介绍项目的发展历程、设计理念和创新点。提供系统的功能概览,包括智能引用检测、多AI平台集成、定时查询调度等核心能力。面向初学者解释项目的基本概念和使用价值,为后续技术文档奠定基础。","parent_id":"1bb55e12-24c4-42cb-8f59-ddc303460d45","progress_status":"completed","dependent_files":"backend/app/main.py,backend/app/config.py,README.md","gmt_create":"2026-04-22T18:57:13.329466+08:00","gmt_modified":"2026-04-22T19:05:00.376007+08:00","raw_data":"WikiEncrypted:0MI1/XkBoMl0lTbK6t0CnyIiRc/FeBluVaO5vMjpi7GJDj6RYPJBK8z3pvJGG/q2Umz028dfdXdKirGdHRY2lrn0erk9nv1ZHCzuughhzuFHwcxdCPIpZdrZtQpPh6bsxkWiwYzSScq7WGo0sBeTvyoiisiPXNkFNbSjUGQOu0M9zOwZAcknYWqtf16nUcOV3lRfAFHfNSt77Nc0IUQGl1zM4BWFjitEsa6cq/jjGIh7XC2gcTvm2eWRaWDDr5n6IcJZtD0ODJYzhH9IJVk4uIXlKksbQcuIrmEWEkZBxeh+DAIp0tmgXr52zuL9uRxapFuSlOq3BlU5N3I+Iu8Fg/rBAnNcvKEwSk/71gIbFlwaxLvik5gposBrfcD4U1+MJLRTPhgg/HJwljnpTC13NERk70aJg2/SCvFZcO+86xWuLwvNjWRxc2K8yOeJggfWG6S/Dt0dGaFl5F44u6XDbQV0GKiDfNOzo5CtzO7CrkSRJ+zErGQOEEoF6UhVmmpA6ONf2YDr/z3Z5bIP5z605qNZZWUDPVLjU5elINOMi4fsEw3OYaerNp6aoSHA1eXnOJoJIMsU0KM3eGAO9QNhHE2PlkwXulCEX5l1tkohbwthcv94cBVsn64CtaMMgjrgUkflNYnfEM1djmP2iJFEG/MjNMntZCrVRGXdjjqR4Q+lRe3ELhXuHjqeU5RS+KdYLASsYBDzti2T8foSfBxxXcpMIz/lS8+Qx3pTLW3ktH5AaEtSdclWCF2HLc1/03O/gdv070KOck/8TXbyZsJ6g3fzThY7xASttVsW1IITTaX9XE52YkNOe7KOrjJwkSbUgOU1Rv3Aa7x3VJ/ac9nDL4AgS+TlYNxfYBlGkbesL+sqDgWrL268y38MyK0DRqEQVjCxV9+7aAkxLvaUXVMYIwxqAM9Id66zRb0pJB3uwgpOAIRzOCskNEghjp17p4BK3lgehkRcM9RAGb7WqgeNfl/+ox2b25Pj+nvbWN3XghNZwNzoTW+kBZxXhOTRvIyAne7IPRpmtD1XD6ZBx/C6ucQ7kTUL/7LqFXE66g3Zey3hiaiQihueSMCFVer6F+BIMSBpV+9cmAczdqYvXRnKIjQg15zwVGz7mKE4D7caiDjkAQeMUSqziw+i/S26Ont/JBHIsLpYISQJErTAl2rGwC+7ADw+H6jg0rn+nE5s5u9fxUPMsWodcWi5oGIFRRTyGeIZYSTNveEwN8h0LGwXhUlHR6RxBAIpbiwKVUcOFOKc7mojhJEN36mXsQdRyCUjV3YdNzj2Tw5tG4exPzStsjDxSn98XK42QisGde126iI=","layer_level":1},{"id":"a06436ee-1678-4a51-bbf8-b0d0ac3456b9","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"数据库架构","description":"database-architecture","prompt":"创建GEO项目数据库架构文档。详细说明基于PostgreSQL的异步数据库连接配置,包括SQLAlchemy异步引擎设置、连接池管理和会话生命周期。文档化数据库连接字符串配置、环境变量管理和安全考虑。解释异步数据库操作的优势、性能特点和最佳实践。包含数据库连接监控、错误处理和故障恢复机制。提供生产环境配置建议和性能调优指南。","parent_id":"243a1a45-d31f-405e-a3b9-694d2fe617d5","progress_status":"completed","dependent_files":"backend/app/database.py,backend/app/config.py,backend/alembic.ini","gmt_create":"2026-04-22T18:57:14.160162+08:00","gmt_modified":"2026-04-22T19:05:13.623934+08:00","raw_data":"WikiEncrypted:veTYwq2y4io5qXerCTrkkJxdCaPVm76qYvPs0DmFrBYr++cWSoBpsZCop64XjnmZv6vHv8URIJAqohtlaw1HFotKc3mK0aD3tk5jmFWmTjGEd9iSTEcB45Yccg7p5eggZzqexWRLP1afxRQPau2t5uy1dZIlExyu+lyiNQI9/hXf1UppgfCjo4u6akBIZtYhzgcUSoYY4jCjv0naBAT/PyevZQctOpKPIBwMdeB86h71UT0hKB1hXxbyQoljBYZmATJaRjmlQzZf/Ka1gnDj1s1WVsGMpSoA7jyNRPH+Ra6hR+5N8Ba5vkjxM/HcRFq282Jnr/TnidF4MF5HpD5Piye73QZ3zAvIbu8+iOSvpQee/FTzkrUQBy0xOA5lsfFOy5OFOKtQh0mHybuNqe6H5squ2Tge+K4+RKXbDCt0wptrSV+BVQ+OkAJJEtLNRpJElsQ5bw1UU6CuzbgnnEYrMXB5TMBI5N2/J6hmlqt978t04N3zVI9JnnFKK0H2og6TVu1Hrxq/xEB8RFWTf/WNN1p4Akee5r1uOuUry6hsO2yQUTlmHq74QnJz4o4YJodWkhwAmcyzPIlMeSFg/Kr/EvsQJN4UprhudCTvNitnPaBesVkucYDYQiVAhxyNSAqCzZUYXbyuLD4r5DKxKzvHjkhRugm73yBM7wzbxB2lABMiGM9p90FASIxS0SfzIl4qrFbO/oQGRIFaYfUCnQF8h0YDi40UX4/LVmnlT/L8y/d+hU00P5j5PI0qOyoRDqsfQZFaze+qtibkMnJ//iy0Awl0wqQ47SxaB0jhTc07lPFBLSHFSoVUaKDs1DPGiwKjpWZRzAw7rbv9NFuV+irKc0l8qDNCaK6Rk0rRd0ukFuszcaE9n92URbvv0Fk8XTHLr8sFAh/xMm63r5hUAuqEYN6z/Si5Isq52UmJ1/TvnLYIUK58JHTuDsVn3MKJ2fTgUw/U3g+N61WpDIgGvaHO75crgWZbS9qQyDoSSj4wNdxWR+wtmKjwZdRK44kWRBS1QebMTLNYDBgHD5hPnmOa5W/Rx4Y0QBw6UFjCy/GOmDI=","layer_level":1},{"id":"7fea5a24-e6de-4003-bc70-9dae6d8fdb25","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"适配器架构设计","description":"adapter-architecture","prompt":"创建适配器架构设计的详细文档。详细解释BasePlatformAdapter抽象基类的设计理念和实现细节,包括平台名称、平台URL等核心属性的定义。说明抽象方法query()的设计目的和参数规范,以及close()方法的资源清理机制。文档化适配器模式在AI平台集成中的应用价值,包括如何通过统一接口实现不同平台的无缝切换。提供适配器扩展的最佳实践和代码示例,帮助开发者理解如何为新平台创建适配器。","parent_id":"7e66719b-4a8a-484d-889d-10fdc76788bb","progress_status":"completed","dependent_files":"backend/app/workers/platforms/base.py","gmt_create":"2026-04-22T18:57:14.592407+08:00","gmt_modified":"2026-04-22T19:06:14.01609+08:00","raw_data":"WikiEncrypted:mEeeU1uNqYKn4jkG2zPtuGBVTFJMKL8+aALSFPkyoEYifQL2Z+klmgmPGyzF3YlP0xw/C/hG8jzgXcVjqaWbA8lOQYPPvd4qFK8fszqAYs/fYEHXvWBVaOTbFhjNiT5k+li1MqVRx7SiaRze/N6NV4j39o5dfNAouxnCXgLyBZdG5QXj6JAfhJ1mTHsYQFDmrIU+nOtrQvRh3bruUOURVd64c13kwbBISJKHVwByRrfqWLRTsCLXPYfsgZF4rkL+Iz9x27Nl0VXvNcIIoMXj9B7hg2PPcQlmup4U8y2LhUHmKrdiKpW1t+XZ8rpO2aPKpzr47rn+3n2axWoQIDjWKlHAwi5AhxgPysB/i5EGv0pvgo/mNNIfsZlmSYgXASM6bgCzH5W4O4oJVqOi+gaLuI5+i7N8/+s+FKb63H9ZNvwClw5jXJe2Xm1YUwVGLG8KX5beKRTmBgnyDPmOW17/OXwsWMWQSQKrgpiv+2C7VQqI8X/agBVWawLJAc8VloY281S3ZH5LTa/6ajeGUVXiwpWSD/YWzo9sxLdws1ZXCInzLYy5vX7YflgBOlw+pn6Z901TBktq5jxrG3CFTbRLGxaeG1aJ06sLEFoPzLSXIIiEIuAROC6lPr6XpYAKESgWGOG0GdM3BinxdkriGn21ZZjENIJ436aZjsOiE5M20/kJAnjWIBPEJ/sv3nsi7u5iLfYFvkus4GfnKXJyto9LWiTgqrwHoEUQy4+pnVW+ce//iLlM/t0ZknimuBfzgYSWx/jPc8o9ZU5OIserDAYGaE4sDZIDQas1jOq8HGN/q4wJR7sW7Fw1jKyl4suQZE6QSfYx6molnJ1cSVKcsGrf7AHDKM5x+uGRmLWXqMMUZXXtbbCw0mwqfxAUPiRLUdVyzot8dh/NIWX6B1KABd/kKs+L+vVuCmMen1XVfP72Uy91fYOkBj/xPkA6GYrempnrB6zh6INdvGw5dEKlvNARMnZZLCA64Xw4h2TBjbkIjsBawvJtT+wEGkfkPk5z99jbaaGS65e/JDF/g5WNnKSX0B1Xo+frM1AFwnKR4dIJXZ8=","layer_level":1},{"id":"78288302-33bd-44f7-8b29-24f516c8b6bb","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"调度器设计","description":"scheduler-design","prompt":"创建调度器设计的详细文档。解释基于APScheduler的AsyncIOScheduler架构选择和配置,包括调度器初始化、触发器设置和任务注册机制。详细说明调度器的核心组件,包括QueryScheduler类的设计模式、事件循环管理和异步任务包装。文档化调度器的启动和关闭流程,包括资源清理和优雅停机机制。提供调度器配置参数、性能调优选项和扩展方法。包含实际代码示例展示调度器的使用模式和最佳实践。","parent_id":"7416db23-312f-478d-8883-2fc3c41ac2e8","progress_status":"completed","dependent_files":"backend/app/workers/scheduler.py","gmt_create":"2026-04-22T18:57:25.383156+08:00","gmt_modified":"2026-04-23T20:33:30.132403+08:00","raw_data":"WikiEncrypted:z5m818jdZZHs9QqQTrTafQ5BuN3hUq8ojqzL8SUBUvazzYVUu4EVEqQ8I56QCaxYSTvxoxfSrvjJk5zRU5X7dcnw4Xa3OBhn3OLehoT3E+tyMxhlJSbJpOfp1afGCLyH7k587Ud4I355IvboUvSoBViL1WL1yQq+6Tus1CsKPq1yHjNiWT35OfV9g7bRu5xE+1nSxjPu58jZpFKuN1x9oqF5OJmckHxf5sVFqKlGPU2yyeGdpzKRagbQGUkBdw72yxzSyevTXJ4y+UPCQLh2FLZ8RgYP0OD705z2xIGb7KSeQocLcW5FoxR79ySiibc+AmzE0OBKZqbcm/aw8K5lAK1GP31LdhjrndMTmXrsf9CYBNRIir1QOJsuCh6zPtpsvQVmrX7DpqXiWsaqnK2GVOkKPtnYAJnGsEQhaoX24/64eSYeSnJ7KIsQxP0MHUrRG85VVGF2ADUGh6L8qzexe7uE+lnaqgC8HBQ7CnQ3Ugnj5hcO7vnwQl67NHMOQ5yaL1SpfURVWAx3jjUBU4xjHfmUNcBC2VM6ie9C6Ulelai8Pg0+gFL0A+pfN/Mkzzh05wcgnmFbWfjabZ4Ofv/w+UlG5qhMsEJQAgag4tXHgP/86pheTsfyefYhWEkow983vJf6mYl4lgRaFHeOZ/JBTmM0sxmg1PMZ8wgClMSC0a9SKcsAyWOh0yMuBn/Ckhx4HqGoPAP1rx/k9TkBiHFEoEAXeTNoeg/Wn7tVimdgZvAjW79z7lbcRV1cvlKMSjhRyO2s6n6N3Z6xTlKtLrqHBbXZcrjNQqJVgW91Xk78+a1haDNngswufhJkTJcH8hp3hSUCJeU/Cpx3RYRRf7E3bGmj4sV/+yXAybUvCOhs1s89mYVFThdpDifMbvN5C8a9xrjKJNfjzijlVZwx+cGy5aj+ZQFSDCRCBHvCCIBd76w8uxi+VR8VhbsIryP2KUNpudqIY4V56Jx3DB+dznNJMasPFZZ2ZttlKIAV7oqWrreoweIqeEIugrIM4TdE4EWmokDP5wr0tBdyerPnkaCgJLQj3X2K/xjY6ony3F4svfG1pk2jd5JwTLnudwS4dnGY/1b//vEDGI668cQtR5fW7+APXXb8qjOLlzM4Enze4mw=","layer_level":1},{"id":"b027f234-4ac5-4d6d-9b38-afc8054325f5","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"单元测试","description":"unit-testing","prompt":"创建GEO项目单元测试的详细文档。说明各个模块的单元测试实现,包括认证模块测试、引用引擎测试、查询处理测试和引用数据测试的具体用例设计。文档化测试夹具的使用方法,包括mock_user、auth_token、auth_headers等测试辅助对象的创建和配置。详细说明测试断言的编写方法和测试覆盖率要求。提供具体的测试代码示例,展示如何测试异步函数、依赖注入和错误处理。包含测试数据准备和清理的最佳实践。","parent_id":"fc6f24c3-594e-4153-854f-19250834eeb1","progress_status":"completed","dependent_files":"tests/test_auth.py,tests/test_citation_engine.py,tests/test_citations.py,tests/test_queries.py","gmt_create":"2026-04-22T18:57:25.616384+08:00","gmt_modified":"2026-04-22T19:06:55.090058+08:00","raw_data":"WikiEncrypted:oQ7VNoYBl3ApU4O5/TGa/YEO9ObmRNw6knddpSF6M+qfBokxpt9FAn5Oh9wXkjVweu6TpLk0XawcRFRcQ09Zi+YnQyN8+4Ep9fANKzHyAxzcnhkI4VZF35j3DwTbhekUFTKQ+71fms4SP6LGrVw+8IP/eqJC2TH96LJR1oxckQk//yfvKqFHsMLgziXy6zrXuQO8PIu5U/WbkKUkJHWSkLkoTtPteU+WKljSMapCS60e0RUDWZEPuFD2uupr2PJxT8AoOXx358C9XEj8tQ+OwHpsBiR7NdmO0D3GmcgVUcuU7WWxnToWu1UM1d/t4u+x7bIQvHQIDjLWR40nTrvBZJBSSiui0he3T03jLkIB7r9kxCpm9mFUx0fkmUSWp7FRfs7MfJkuoQYVU0YHf6/FF6g/PoQ8ieyqr4YaNjM3kk8GirHkmKjfdQt9YmQtuzMWnzUQ6COtN+BG3STyOvO+12YQAYi5LWe7u7oP4D7TJRReg7FeLDQ60Y8KEoKBJKM051F7pgHlorthWz42brF5tF7oa0tjB4AtWaEwXdCvH278kzwHNEW9E5zeERzX3hlHYL+mKpTbemJlfuHuRugCRy4EKFRP0RYiIUecBK82Pi4Vi9MGjB7cQxIEutHQ/3D0JNLGwEo5TCsk4W3isoF+mJDFy6/IDwgW/+5FIo7V/G18dTg9YbFRwMecdvBfJU5QZV4R993bdx+kH6qB5IoJrA0AzBOCn99YQ/xgAd3w/82Z5vR8syeNZjHYmcx8P/XrYDk4UZTwaacEHfn7tcq+tL5qJDbxdY95wjaWRo9giFE8woDfoLWstvKA1/q+YOyDsIHC/uHjNP1L0ELPZ9ssFuHcwLVrqDwlcblya4+oXlPEOH2ar22uXNRmFyd8Mf8MmEWVZklodBHSKiGUlj8eSWqtR+Cw5Am1gmeUcOxqan5YwzpyXet6g5ll12dnu6ItLby6qm+kjET3rsjaJag7UBlMXWV9xn9Vj4QDK8USPTTWkRUEAj4WH9QqECQzUtYJ6+GsIE7LGx/5tzApMdX3BThIiG8C2k5ry3z310nAMX/pTSrGFGjy8tWFf+KH95sJ6aG4CDyxSPHT/3ivhXAnKDesNYTVgSIKNmAUcj5hRjTfJeGyljB7NEs6Gxz0tf5k+GQLwvRX6PxSnMGkm+q0yx0MNDRBYJNlPCFKUR74ZAU=","layer_level":1},{"id":"940e5918-1689-4001-a284-44f2de75b8ee","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"认证接口","description":"authentication-api","prompt":"创建认证系统的完整API文档。详细记录用户注册接口(/api/v1/auth/register)的请求参数、响应格式和错误处理。说明用户登录接口(/api/v1/auth/login)的JWT令牌生成机制、认证流程和安全考虑。文档化用户信息接口(/api/v1/auth/me)的权限验证和当前用户获取功能。包含完整的请求示例、响应示例、状态码说明和常见错误处理。提供认证中间件的使用指南和最佳实践。","parent_id":"dd12cc44-0c95-45d5-a726-e7b8bcf2531b","progress_status":"completed","dependent_files":"backend/app/api/auth.py,backend/app/schemas/auth.py,backend/app/services/auth.py","gmt_create":"2026-04-22T18:57:37.836287+08:00","gmt_modified":"2026-04-22T19:07:12.356456+08:00","raw_data":"WikiEncrypted:uxAckj1IXK2TQH//kEdeBPmScopsydAsQUjZb8Fs6jI7ezX3WnM5wMv74LMiw55tL2+YKxETbMgwkBQYqIg1VTja5IjBYqljlAzD5l6SrkKU835vZQoOKlYgIFEEXj5PMURu9+2Om7SDVgjbSQ05vLa2aVIBV6PiVswRGc5EGTGtYnV+DJs4BxHzYpH0Ac7KkyHUCGgH6w5QDaOxWt6c5gftFmsRwr8WVKANmqlNU9uhDjmWzjTtSqZ39EVbLd++OjVbpLbTtijQ6gOF0KBBS4B0N5k+Xm2/gDv+HNK9kZ0BphZE1Si3NfV0+cu27HLJ2XV9w357rte4pplU0wYG5oC6cuO7eBFxQdCR6e+ejXIvKGahQOce8d/jWexjfdWnUzvQ18PU4+bUZmiP+YD1dJVBFgxggbCIHG8VFTQBqMaYwc3NLWogjXnczII+Z3sLLneLkVAQEdQ381GeRKdaD4PrtAWp1Ss2QpGHWUKDdaNSLcfm5NXEe6GeECxXH96p6BvyegD3twPfZmY9WKG8YOhXqbpzae/+DXnUTfldYKnMfbonSav0nUBYt8JA0L3oceaNs03211fvlSgE8L9vtUDtNF5lHkhOLMLbu000pe/VWc8WVQRbCKd8KPd4TUxMkB61vQNIcvlRKLMJLNSnE1VftRTpdEpWKhm5qkLfOfikgsp2qp1iSw5Idpu/TLQPIGN/sYpTJ1eACeXt/A3qrlITHFV8by4utTXDT1gRQQ7j7n51fQHHEIbpU+6CRhSBBQfa5IlWAqkarenBmr5RY74jeX7tlhDhvFojQGHYyMaDsZO8G/H93/20YG/li4iihHLIYmsN+2YRP/KWCNaopBGp7tRyZi//RKVXdHGteWxP7vse7URwPhfmHDUB6dMExCT5PwgsYoDwD32k19Eauv4c6OogAMMUN3I9rhSo3V0cde7/xSOhJ34SUY3w9VpPAu1I4zTqhY649YmBnNEjtGLZGTnEJWSdneSPsudvl1HJKg6faq1dMy0dVkMqbHaqMCooFDhiYVS1AM1cG07y9rQisvQP8Ic3NTPAA7BhH0nrPnLc615Jg+XEAjs3brkNXEVZlxNvX5ZqMCoMqsiZrA==","layer_level":1},{"id":"6406f42a-e10b-4a2b-84a5-0a21c1c759ea","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"代码规范","description":"code-standards","prompt":"创建GEO项目的代码规范文档。详细说明Python代码风格指南,包括PEP8标准、命名约定、导入顺序和注释规范。文档化TypeScript/JavaScript代码规范,包括类型定义、接口设计、模块组织和错误处理模式。说明前后端代码风格差异和一致性要求。提供具体的代码示例展示正确和错误的编码方式。包含自动化代码检查工具的配置和使用方法。","parent_id":"2148d7d6-25c4-497f-8894-c4eb7a0d2bd7","progress_status":"completed","dependent_files":"backend/requirements.txt,frontend/tsconfig.json,frontend/.eslintrc.json,backend/app/__init__.py","gmt_create":"2026-04-22T18:57:39.373374+08:00","gmt_modified":"2026-04-22T19:07:51.274139+08:00","raw_data":"WikiEncrypted:Gw00+yNdsAXvNpUHE0sZ2+QbHW33I6XBnIRt1QjI/FW/5OIgpgiMvU/f+bhXrxoZK5Mgo6YrGuAKhtZ2BPutU1EdQeDFUnQQxxqSupe1WUkFgEECvCkbZOAHimRWBeUutq2qKCfVhu1+US1y8n87OZXUUvVSAksZOa8lbb2AHyiKTMdzzPThS0D+8uOalkBg1mvJCS9fqVoZzY5BYYpuH5eZJBglHbA4uMbdFVTSKVFfHaJ8nlm6uYjaY0sJCSg+dhEAIiMfOTXP5Bh59kxWfLSdZU6b8oPvLV0btsiS22/oEJZI4rWjJ0YTxfQ4jRv348P+GQ6oi1pvwveiJyOxLq8QcVKSiDxO55Ovd76PhOgpOp2WJcUsKoKBoxs817utm+Ld0htpPBS3V90Rw+suMSPCU0mCa80FTrBNn6PnXemH7lH1ozQIu3Y/AGNYBN93acBxtiZ09sGFh2sO9mbbCU0iRuNe9nwWa4MsA5rJMLGdRbyv6jk03+sAvuKwZHXyTWxqeXvMatOUKXzTNfmhXsE+Bexe1vaukG22SWhsXu7FhIaH4Rt7CdpMW0jjbZOf4CwKY36ucVBRwft6ymuED4ihzikPz7pJ5IEuxLGtCyt5QDqT7kbv5ITx4NM/Q2IMMTRZf9bAZyN64PV2TJVCNK11yU+cE7y8HFBNFSzPfDBGFmxijKjTL9MvlElogPp0+qckxGclnip/IOFc6/WAbPNK0qXq98Jq5DsZwLsx4//8yOyRyaQGmOVaOWxb3Aum4RIf933X/hzoTFpV2uSLSznRyCwLpKqjp2zMS7lCj9aDhWLcx5J9NxXfdxFVxBsapMeDDl5xR5nfTFJcOFylsdPxEdxf5J8ULB77F3OmE8Hff/40adNMxJHMyBmju99HNnMZkGLjC68HEPNMZ/6T0+m/Sq1yHOrakYMiw6vnQvmLW4cBIhsTFbhbgpkazGFTk8xsKH3pGySrLXL4xmadfs/g2X/lRrLbSonWaQehTqHYrhz4HIxrTUDn4kdxaPPDhH4fHdEu/69Dri0DSzmSF2m8W3hh1gbAbUO/mbHob1eJg0yKGzyh8AmvUlwXIRGrOwQA5dUZNPSo+oCcv1qlrQ==","layer_level":1},{"id":"e8ec6ac6-ad1a-4332-a7be-727b47d71233","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"Docker容器化部署","description":"docker-containerization","prompt":"创建GEO项目Docker容器化部署的详细文档。说明Docker Compose配置文件的结构和各个服务的配置参数,包括数据库(PostgreSQL)、Redis缓存、后端(FastAPI)和前端(Next.js)服务的容器设置。详细解释容器间的依赖关系、网络配置和数据卷挂载。文档化Dockerfile的构建过程,包括多阶段构建策略、依赖安装和运行时配置。提供完整的容器编排流程,从镜像构建到服务启动的完整步骤。包含环境变量配置、健康检查设置和故障排查方法。","parent_id":"803bfef4-3985-477e-a61c-915a246d0061","progress_status":"completed","dependent_files":"docker-compose.yml,backend/Dockerfile,frontend/Dockerfile,.env","gmt_create":"2026-04-22T18:57:40.354835+08:00","gmt_modified":"2026-04-22T19:08:34.084609+08:00","raw_data":"WikiEncrypted:h7ADvj4WLJHyulzCl+z7kNgZWY+r5P000yRKX1NQnlv1Xv3Dqgu5Ve8V72HxPVQrbKK8WU/ipQ1PAqV6SDrNgrc1Neea6KoTKr95imYAh3dYgIt/lZ1sndBbQCFqOF87dQsUIEKQgwrsicAeQ0zdudUWh6EW2nyIF0NGa50xffbgEr1mm/MThBZjOua+YnCRogCbgtirEO/6HGlC+I33w/bfFI+rREYKdumqUEia0kUP0pWSpwWjOQp06I7cUoSrx/LuJJ4in5YsZetdjzxdbA3ZvGMjeyI/VVF6UC/QUOgE2csP9z42v6XdOOngM/coBHI3DiUrroBGTPa6BVxJdngItCJ9XcNvXPbo0xMAkAoUKnNPA72B2pRuk4F1sTiOaSCQ1jaMiCTFvbj7+VleaodRFLDFsYa8f1w2FkiW7cEBhFpFgB7Qfru+Yi11rpkjnM2def+Sqq2PSHQ+Ji83jPoQXFl935rDQbNUy28wOIE3BdWN5jjM3nyoXcqKjPVjLf3cxGvg/sbdWk1FYPMIsbK/DUWayyTHt6L/fYkDQYjY5h0H6Q0jBxlhNQ34GG8kEcvrZ6Dy/jtCtE149pi/ToeMbpPq21c5KUhs9OHcEHgMjxWMaEVjQXMjFCpKyJIPfC984tfoZhAHi9WupzyEi37/igcgVJnvIdtadpX7uRxW2JCdfoHn1H87nGQj4eAeI3kMhtJ3EIPd/D6STxUcgtyLdTIZu9kgvnBIN4OyZeI1ygNZfawwQMmbDxHZ1pPcyZDHFlz1HZ0NFX+7VnN2b25TJP2hxMCZ/5OdYeSLozIbM/azA8QMHofESSdxDX9ZDdhvENDlngxUBmxM8+yCAWHENGYqWDL0gZMMDwe89n48Xy9qnKNLX0ROfG4FAtoXsEgLlPQM3AWFETnzr7Kvuma+8sY1iaMVIXJ/MWoy1zLwuY/oOZhVqGLX+DOEupKhk1oQmiqzciCeV8my5Q6LQeriSBww4jA3r6VQMPzBVzKJYz+TLizB6Esf//9+ilsgUVUc6GjD41Ml4fb1GZO3PzxGWrcX1RUE6RKllUBVNffxzE2WCirEX4e4YprntsHu6SAb9TLIInCx7aZnlVnaDQE5BCiHLjIQJnsHHJzlBm+8jtzE4zi7ljHLfbJwhtZ9W6S9KGUqjjNryjTVnVyYQlumOT8HCAkz3fSM6MpXwQr1qz/gHyDrQanmM1O9B/0ox5O2NWcOm5qtsteiyxwKACdyxrsUx0X9BaU8xygDL75XcTfcaOTcICRwaRZF3/UQW+zhbJo9LnHxq30JzTbxU7wEdjpWZQHZ+tu5BMrIqi4=","layer_level":1},{"id":"a91fff3d-ec5e-43df-8176-22f0084109ef","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"功能扩展","description":"feature-extension","prompt":"创建GEO项目功能扩展的详细文档。说明如何新增API接口,包括后端路由添加、数据模型扩展和业务逻辑实现的具体步骤。详细介绍前端页面扩展方法,包括Next.js页面路由添加、组件开发和状态管理集成。文档化引用检测引擎的扩展机制,包括新品牌匹配策略添加和竞争品牌识别算法的实现。提供UI组件库的扩展指南,包括新组件开发、样式定制和响应式设计。包含完整的代码示例和最佳实践建议。","parent_id":"b2bb2e3c-5661-497c-97dd-15bf6ee8b7d4","progress_status":"completed","dependent_files":"backend/app/api/,frontend/app/(dashboard)/,backend/app/workers/citation_engine.py,frontend/components/ui/","gmt_create":"2026-04-22T18:57:48.684421+08:00","gmt_modified":"2026-04-22T19:08:25.140739+08:00","raw_data":"WikiEncrypted:5RlNBsIi2/3o8ATlHuzaYD9/6k0SjLB2nW/cTN9Sp7ydYLe7mauzXPQFm5pYVoY1D1K/aULghB4g32vyxSUIsHV6NsxwYA/5+FQ8w/4xsQc3urcx9OEKeSC0hGU52WXucdAGjiEq/f4wJ2c9FdJEeALD6eX7MltcooFsxAVRWIKzHsMdBiy0RQN6s7vv4sb8vpV3b1ET27D9QlTUiTPU7RgtJLMui8iYiwJIirfL1TgdGRSx0Rr3tY/JvS3/6/L6VU/69BKglW8DnLwDkWKuthI/2sfWQa+lb+uTuixXL/VbltWQnzwjMVYghhTizEEC0xTpFGcDY/ajvLcjy5+wSleNEr9AFy/ytJKkpqEO8Zt5qyVJ4eANJMSXYcoKrZEskjVpnrPEHGdOzaEaCqcl2sQYkXde8LWM29fWmwlMjwJzucGwhudoQLXgkIwJnD+jb1r2SdjjafTI76MM53AnSfD4aj8K26yrOkVtoD6nWG1A1fG6F22pPBhJdezNJCYuKBaSDxJDES5486L5Gm5RvjYDq4r6RZ5CheGPgxl29XjCimgWuxXKVX0jPLUawteo/Vo5D7AHzucx2dX4mKr4rSSSHpD4HGdbwnxZ717DkRG01vTOnue6gSQ7pceMjSZ6TnB7dvtwwarHBKQMKwJXrpqxc83aZQjW4sRTAJs2Gc9+11c7qT9fQnGK54JJjEARaQZVaDmTpKmme4SKKxCB7V8yUqR+D+swVuSjIpYdL1m7THJtbWSSLaKkWmYiom1C6qb4GIgO4CT/IiFSyQ0Sz8MUIJi/dK0l/vVmpp5p3IF5K1m6NHDX94yEPWEHsWIS8eC2B74AyX6PG1fWSt7HpiBAzq8nu8n+IrXPqDege5sXbjfNrbvkRot94AvLF2aqMbteOUGOZxMLASQYyfRQBlaEEFMiKEVNTRSaHqiS8mS3pG6XLcV7TkWJIyMzhcT93hKXrSB2+jLa/rrxxrZwfp6lddgEcV+XZzQU3KsJf8blNUd+UkA4TcwFugu0um1Kr6Hro8EHAR34+FGMbPskEPPX2yd42YXx6qfmcFrI1xvHIQfnc7QuxZwO6GHR0G5LiPtuV4ZSxklXCwgnGWy1lpC13xANNvM1UKqAuhpuV2qU+xayK5IQv7kQaDOJpnMzFj/dSxtRgL2Xm20nH4BA2lhBCQMqeM5OxJ5vzwVlgVMZxDbhwrRaDU6cudgNfRJDFh2lGQqE2flEkvSF7g87Hc5H3qDQxUv56qpdOPJcgugKJtT3Jz4dNt3+eojvEwrTUc7d2Kq4KDTFUa5jDr5uo9PZhNR2TDJazpNIdl1x/64=","layer_level":1},{"id":"e3ae8925-4862-4280-b85a-0b376841b15e","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"快速开始","description":"getting-started","prompt":"创建GEO项目的快速开始指南。提供详细的环境要求、依赖安装步骤和本地开发环境配置说明。包含Docker容器化部署的完整流程,从环境准备到应用启动的每一步操作。提供基本的使用示例,包括用户注册登录、创建查询任务、查看引用数据等核心功能演示。说明开发环境的调试方法和常见问题解决方案。确保新开发者能够在最短时间内成功运行项目并理解基本使用流程。","order":1,"progress_status":"completed","dependent_files":"docker-compose.yml,backend/requirements.txt,frontend/package.json,.env.example","gmt_create":"2026-04-22T18:56:47.081987+08:00","gmt_modified":"2026-04-22T18:58:54.237875+08:00","raw_data":"WikiEncrypted:qfgbutC7oyxR6nMxrwk1ODnNMBEQ3/sG78fQT1yXWju83LC7H/jAM8CEAvWT8huE5OClmQiIfNYNxHQ9s7RRS/GGSwI5DTgXTPiPdxvdU9tU52Y4wj4FfVrOtqmH0nMPa+EBKH1Wo4HibSewimTkeCuJVAAjyygiPePcftR4ud09LKmopy1NSgZrtHMoDFDwUOcNJQad4OVgxMnOi6B6z6s2Oh2aPWNJX5EvE5xGkLAc6XvhE2T7MU40VJ4lUOoKlCNZNdI06grEqwyizBqt13Hg20wonqeQ1uPs49UbF84IJecH3DmE6KW3oqmqvQY6tztk79eE1bKZmBtQKXz8WhEMWZwALTsVk+hkk4dH/fcDoLteR1iuO4FaxDwAOaD71KF79AaYxDZiM/8RER9YsajjGSI+sfpJALuiQbqqfKbYFSgliiUcf4gTM20Ey5rtfBkcvBY6yOBPpqdKg7/ls7jdggNEWDJfN+DPVzV4SGAYRD4g/kDzPa5vaNZ6USRa7hVIR0SJufX0DGSdzX5BMh5DQEEyd9svxV+bs4KPZphBIeqAOzvo6zyF9l9LjPPdEook/uTIBHjGgx+8Ck1NQEeNOs61Zqr5EfISope1Au8dYCrzwpr02s4XAb/6bYsMSkfVqETlSSUkipDodGoLJU8QiYr5Pjv63Bb9Qb7SZ+i7NrGp6UJNVT0etywEMKSQn+73I8e9AYrAxlN5ST6K5b3W7cOPzFQMCVRfzvdd/FbuN30u7JXlFCnm6Ee8LDHW6nteOxBP1D6JxbrQirCQE0cSuk+d8OR5tR/DJiRDcjbsG38KVBEqWnIek8KlMGxEt6N3oq2ceUCCLe4jVURPc/2G/6gNiyVq0dPPAVwjaNKNwtiyaDhhBu4T21k9NUfhdQNz9DJWD0wXuaZc89RoqLNlCHJ6TtxEHJ/Sv4cgvm3QUierIBIqUawkCMEDn3ZEo7L2fUS4fMlzfpHSgTvxB43ta+H1m6syFUmAyh1yqfXVxKZY0f4JtmBbQpNzpT+aRHMKKQ9UVvtjvNcpupzO5aNkyclJVWis66DMtfA1H4am2gseXSfgHHtXiLfOnGoELSM1fLS+T9oPt48v+RPafJQpahtNeKtZc4dbTcsc4qlS1krenNSBbkKac4Zsosjv8xHuD1aqYvAS476XT3gjLfV7YUCF/+i3PiovD9NGzhA="},{"id":"c19260e2-5163-43d4-b35a-b48aae995f4a","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"认证系统","description":"authentication-system","prompt":"为GEO认证系统创建全面的实现文档。详细解释用户模型设计,包括字段定义、数据类型和约束条件。文档化JWT令牌生成和验证机制,包括令牌签名算法、过期时间和刷新策略。说明用户注册流程,包括密码加密、邮箱验证和用户激活。解释登录认证过程,包括凭据验证、会话管理和权限分配。详细描述依赖注入系统在认证中的应用,包括当前用户获取和权限检查。包含安全最佳实践、令牌存储策略和会话管理。提供认证错误处理和调试指南。","parent_id":"7c2ac186-ec90-400a-ac1d-b3b7ca2f01d5","order":1,"progress_status":"completed","dependent_files":"backend/app/api/auth.py,backend/app/api/deps.py,backend/app/services/auth.py,backend/app/models/user.py","gmt_create":"2026-04-22T18:57:02.317252+08:00","gmt_modified":"2026-04-22T19:09:25.682207+08:00","raw_data":"WikiEncrypted:uxAckj1IXK2TQH//kEdeBLXlO/kfAAqZjShpoDF/LwxGtmBqx1/zAvbXhqcBr9eSVupk3ShQQ44G7JWTygjRc5A2FkInV0uhQsYps0bWsiMbDrwt2AOB/ePL1uIbGoc5ApUbCip0mBf0CwqN0REsh6d830HtteEtKfMMtm5qouIOd2wK9DTeKNNZzGx8w4gSMIpsP5p3aZ18VwD5MWsgk0ypEVodI1RvEcxesO+ct8/yxvAtUoplWhOhExXvEaKsye33rOjbpp30RA+c4dB7CLQLITqpn+wxBlXockOukSc1TbsfdPYx7aBemMwYLdSg5BxjQI88UeuXoj57ax7r3FRkTkIghjXxbpJjAP34rD/Nr6kFlE1ffpnhtqKEcaewGDTam7t2tBNXaqUA5N8gM7qLaJb9G77n5LNWkW3BEI+mzLUgjH8bKerBwqmGZaXckRqWq434EkgNrsUu66RE0kG2tkjy/QgzBqBI70QGpe3lzfJc/eka8Ylgo33DJxnT2gK0imqLhTVjYuKhn/Tj7eKXmEAK+3ddYoLe7Zd1+mAieLK3NzZderogxHrbMIurgTqPWwKg7jvj9pWgT91c7lOpX0hic2OLS+T+g3bMEZOwerdtpByP9pFeu8mniiEJ0k85mEf3l3mL4Y92IJrF7wXc4Sj901JsHKGYyqErz9wUOQ0O5F2grtL3fzSQmJGrEjFXWDpUtGhM2ModNzXCBvm89cgaXU5e9PgQuweMNqPDDcnHhTYQk2uYXAKqGQ81DjmEhEn1M7KEi6FAfh9PIUmxY5Mjw/rUqRvzp8qW9ZC5i0A7VS2KF1YEati0DISkzNcusWc09yOCp3XQ2psLue8MbeIv/A7KoM+FFCX6VwfVIMZmoD9LlpO9Aguy8ZHr+wBKAarcZthLZKxBzgWwddU4ksDMPljtM00iT9LUvs4bU1kSB1rYQcsNJTlTvnl5q0giQTn8gAPr9eNv5ugyPpOxhcSiu6sLYwt1avmvC/pShZjizRD3Ao2wDAzZD48iyoPVc4yu/0J8HjBd56+9MV3mwWW9UGW9js6s1nyrzdsxZAnh9QT5dzYdPRh1EGz7MFqLA5huIrW73zkECwjcRtve3x0tGptO+D2RRvzbYfGJJtVYIJXEA9o2uRs/E57K+wAIXK8oxDXI9+kFys6eoRpHLIduIlmPUm26QJC3WoRx7H6SRfEzvJ8H5b9wYPnjpi0imunk+Lp0qDYT0aSxv1e7BPBJtAxVo4ztOJiTlGapy636dj/I3BWq8Cy3+srfaCykZ/0NCI0cyYtyk/4smftd0/fapjicm/RDEG/o6VGqlhrNuAYuG79wZ140mKvixWDJv+djOQlfglxDlqgsuA==","layer_level":1},{"id":"9b71fe02-5927-4a19-8db8-66eb129ecd9a","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"认证系统前端实现","description":"auth-system-frontend","prompt":"创建前端认证系统的详细实现文档。说明NextAuth.js的集成配置、会话管理和用户状态同步机制。文档化认证提供者配置、OAuth流程和JWT令牌处理。解释路由保护机制、权限验证和用户状态持久化。说明API客户端的认证头设置、请求拦截和错误处理。包含用户登录状态管理、会话过期处理和安全最佳实践。提供认证流程的调试方法和常见问题排查指南。","parent_id":"d907a8eb-795c-4060-9cdd-50d31cf39be3","order":1,"progress_status":"completed","dependent_files":"frontend/components/providers.tsx,frontend/lib/auth.ts,frontend/lib/api.ts,frontend/types/next-auth.d.ts","gmt_create":"2026-04-22T18:57:04.21635+08:00","gmt_modified":"2026-04-22T19:09:48.747579+08:00","raw_data":"WikiEncrypted:BenkIlLPgjbiADCpekIm2LnLFWkzmPKE+C+tunEqC7EVMaC4hkq7YX8EJXa9qt893SobX5KrGOKV9QEeDplCQkFx4neCRj4kZkvt/lObxAfDgMBruR7HQAasniGfUhUjW5KYXC16w7brsqCWR8CWKDQGEZiduwEsaDjAZy9TEu7PlK6Cp8RhkPZ9jhN/YjqaxTAq5i4xHmQz4VuuV2SO1LedFcTlV12iJH/vTW0vFyXgJqY/Ql6+bTZO2yMaEWan9rB7e+IsErvp40JaC2xqL7fRnfroIwQssGEvaqckwf2qyNjjNCcewd62C6FVDnxJOLjQbizlBKmbb8XVzuRLkECZVB1edGJKnDV6FkOkP9y2Al2Qtpbx/1Uhx1Lo92eRd57kA0Icc/KGcHKRjNsW0HfYWAtLctTH3fNIwtmND/J/6zKK4UdDJ8sXiTnjiU4JhX/fqW8bl4FVo8F+kJYUIhbJCQkl+qlYh/MkTCmyG8XukvSZGbvWMPUxyU1gMjDxUnyVdcJmFFt15oXI+X1CL6ukGEn1cRRDiB4yRAq2GR4/iUPUFC0d3aqeRj+ryjr6Cp8YqrHfONdwZyWd4hS8RPEP7NeRuD64yNRSDFTju1oPvBfROcmunn1GaAmw8dV6KtXSJnM9SaiqnYutX51ah9psTgX+UxTu7EU/ijnQYUnDLg26m2/bX4Rhm4MRyE/fAwzxOKEI3uIaqyun0W3lgdaF4bWTwTblet2a9rBOwbVP1xtJ5M095JzboruOAhl29fAT9iO2jeqpZBoO7zBim2s8cpkCt/Zf2Edu2CeUkS180PzKCBtnq0FpPLD9hjXPsn0GjtTEbwO6lSl9JdJ1+J03tiLVJjRTZffLUlA2gM3tucbJOfyGdAom4yffwP8hjrhTBeEyLwKmLISNARiKuE2Cm671yMn1pmt85Vu1rajq9L/GeJdoPPL+4pw0dk8/Oydx0+kOg8/Jyb/8D+XobOK98UfLB6gCaeqZV/2EBEumn1xdhcDpP8cx/kijjzPmOg+tlXa5VzG6SpcY1zw1kYgyEbLZMts5EHUFYp+UCNixZleiG2HvEN5v2iuXOdcZiguCFkQLt9TkzO1v99jj08p64LxUkxY7ovJoeanwleMMBEAI0vWrt1+8nf065/WLA+s6zQWMP7nlMloMXAfMybSF/he7s2xGsrnFXqR0XBU9qRnrLY/9IcroEnKTvicyEUylh+wG8KUQcIJj+fOEVqPGITla0i+36wx46XgzdRw=","layer_level":1},{"id":"b80dc237-1a6a-401f-9f4d-14190edebcdd","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"技术栈","description":"technology-stack","prompt":"为GEO项目创建全面的技术栈文档。详细介绍前后端采用的核心技术和框架选择,包括后端的FastAPI + Python 3.9+、前端的Next.js 14 + TypeScript、数据库的PostgreSQL、Redis缓存等。解释每个技术选型的原因和优势,如FastAPI的高性能异步特性、Next.js的App Router架构、SQLAlchemy的异步ORM支持等。说明容器化部署方案,包括Docker镜像构建和多阶段部署策略。介绍开发工具链,如TypeScript配置、Tailwind CSS样式框架、ESLint代码规范等。提供技术兼容性信息和版本要求,帮助开发者快速了解项目的技术基础。","parent_id":"1bb55e12-24c4-42cb-8f59-ddc303460d45","order":1,"progress_status":"completed","dependent_files":"backend/requirements.txt,frontend/package.json,backend/Dockerfile,frontend/Dockerfile","gmt_create":"2026-04-22T18:57:13.329718+08:00","gmt_modified":"2026-04-22T19:09:54.216074+08:00","raw_data":"WikiEncrypted:w0CkdCdnXCcvlN5xOpiEhEX3U68GI0Ngj6azFMJo9xRSxuOblJXg8Gncvj5vankATp2aJeXH/Zz4LVKH2Ep+cABEA0J7OIJMnt/ZJc7uvMtWJKS6+i5aGsUhX9BZcr1SC4TqdgwXb2je+DFK+fLZJVkri1Ne9BkEqmtSaV5CijFytJ/VSKFHzj8+7gC5Jd3CbEASojclHovCufD4dAVhlK2qcIuY3RBxMsvfRAlLyMLZEWg/gD7LEj0JaChWWR8vRaEtX0LtMoYIgSfbY/nUjR+3xHFig+m0qclK8Q01S5GJH99paLVqVkmt12iwMMiqNZypY1W2gRvZNsT8eanIKu0tq5HqvmbN0y9+nnuwnz/Tg6nUBlKIIS40jp2oYca9ak9bIwBm0TqkMe+M3Ara03+x9PgGRUuYwCt9d0PwpPG5/vOAkZtP8talqqwhn7Qom1nVkhmExMfsXTYsM+Fn2bQFXKIT/rAyT5rY6hwokrvghKwOb9pH7V8+4XckeKWV6L1rNcccOb6Inp4WcVBTcTvGbdy4Wj5Z1VETFwMnDdpOGFWc0jZRJpjrRSGgDuEW8IXpMvVYk3FV5ZyUXZcNyEWZ0Fp/s84guMC21/RYF67/9jD7eJYMeCsU92nWm6QkdVB13XQBOvYGFSu1QejQCgDMWpPz4kkt4yz9mgOtH7HsH8ZUDIml7Vci6pCcEIzS2Sy+BoXxSxcOzrqxD+PbGcH8A/BafN1771WuNzprCCTqbZd5MVXBKiY+qrlRCD1ug+pKS075xfWh/Y2Sjz4p1aJuyVplvOfNUKTlbZVBzQu5DBO+yhXj4b8Amf7OLydq0Avaf0gJhYhX3HpFNqi6aqT9OzPBIPohOUi9RWffBwHMJii2/NZj4GbgeXsWU5+EKE6sGFRGtUiBZGzf8FnB6rW16EA6in7Vd7Ls3pJrra3z6b/k9gqlh8eAVDoZhCPuxtA6yNlXm+RYWLDYeWiRDZoavKVj13rXtaqtX3j1/e1zFPMBZlDPVHyBqCZRiZjlKnty9cj2ASgpu7idyh8jDQSALGu814Wb55H1q08bvFxJf6pxn0JfbRJZMHqCEgInivdDUTcCCPOteDT0O2pwMmyHuq3mI3VzFPnYLM3aYzgJQsNIVztV/dIEJu2UGF/cyjIeROHaxvWYLNXRJZ05iMp8oelEwNe58eAvWt2KOuahqQl6xKUctm90QLv8QR9hr7PjiNAMVH3WsMxkqLcIUPuboMElVq3ErUqd4qE7W5l5Uxi2I9bVcnq4qiRtbCnRY32uC43wILTgq6KrBaO6dehB3eW4drPWqtmcU8rP1DJEatUWEvhpDNrI7T7wG6F+","layer_level":1},{"id":"7e5c3b8e-5aa3-448d-ae52-d5a96a413b0b","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"表结构设计","description":"table-schema-design","prompt":"创建GEO项目表结构设计文档。详细描述所有数据库表的设计,包括users、queries、citation_records、query_tasks和subscriptions表的字段定义、数据类型和约束条件。说明主键、外键关系和索引策略。文档化表之间的关联关系,包括一对一、一对多和多对多关系。解释业务规则在数据库层面的实现,如数据完整性约束和业务逻辑验证。提供表结构图和ER关系图,帮助理解数据模型的整体架构。","parent_id":"243a1a45-d31f-405e-a3b9-694d2fe617d5","order":1,"progress_status":"completed","dependent_files":"backend/app/models/user.py,backend/app/models/query.py,backend/app/models/citation_record.py,backend/app/models/query_task.py,backend/app/models/subscription.py","gmt_create":"2026-04-22T18:57:14.160671+08:00","gmt_modified":"2026-04-22T19:10:23.576798+08:00","raw_data":"WikiEncrypted:TWtD9cYU/QQHU+vD+ojNNl24L1Ao0zI5Y2mk07u9ZlXGce4CUXsGNCSRaLrvDZHw4OUpuZEJrmJBXEQX8GmxRc1IXLTgRlqUGmpzfcUAx8VrQijBe+unqg1mWTkYnMlYOqKWSJdISHyD5K3kBL2cL5pXF+f+lPHzSbWtqMnNnMKbqnSl/TkKh6cr7PM1YBR4IYmE21gHSR5XoQjbtYmg5qNyKF1kMdcAd0LHw6p7zHBaF9cNt++5GyFKLK0zjN2L8YiFsuFBSrn/M48QW3WyTrvDvqdOuR/Slfv+gUsKgbkt6+NEpuY9HPcRdvVJHvG9FZedomH4DrKuI0fUXgICXotXbrcEe5dOkLKgfn+gXmS6sPSZ1XgrSNO5gy2QNJaW+oKBuEPzfuKsNr3X19FZTz+x620YmL1Ccv/5uvf0Zxl6fyQb3qP+lsh2kaMdhWVKyoBv37oNKF7MO+fy+TWHFEwlVnxgmQREyQva5qxLyYzu1GtDpGp79IemnumltTAAzQ7LRs/RsaNcU3BZdYfQspjnhukylPJpNZtmKNN//XWvj023bGiaLyy805c71DcyqZNUs+EdlXmRTABeq9QkVU5wq/gkO4RFSgsWao/8f2i9FLeEZolKQXzoLnX7GxaY3BMcynG+DlwKFEolVOw07cpddYEWzmVKgJUokX/eiMbrokbcv9bLXJpHl2aP27B2FXy5Q2Ot11b2WbuT532RndBI+S9HQpfMmZ2z2Fc3VrWAbk03DwChHEbNHpmQvJpjKtLweVEpClahV8iTSwCkwd43jJdW+tR00iSdjt5vbl1cU7Dciah/B/9B7CDr9sUyZMjly7kzyWZqTkdXde3tO6tu6tWhTigIMXmZVqhW/pgVifH0R72VuM+sdMw57m7Z89ibQ7o2LewlMzJ4GsV90DdDhHQtUr++aRhcZp/669o8mijOQKj8MPHY+xjhZ2oiS6RHiCYxpibVfauiaXA3swWKIQrVCVE1x+jB07pieI3wHrmZf875mdp9rhfrz96+y4zJ464iINUdTQinm/zI4CnhXE3inFBgr8bD3pop0oYr2X5f8Gn2iKyvByc+w5r8HKV/7dd4GrdAosqVWpQweVEYR+MHRZ3AxiW+TCpRWz/PsHgunD4m+AQv5lxwoHVqF0Tqw7fmmxTqA/zC+dxlIJVD/R2WF4sFpA6femHOwqniwaowQerg8bGe7mz3BCSqiobqGSZQ5jQdh34TRP7qUg6PGkJx2NJ6AVIZVYBg9JNOQI67+2PN5AKq6WiT7Rojgo1r8lEx8SORaVptbL4YEEeD8Ec4g2l7Aqkhdxd43uw=","layer_level":1},{"id":"9fe32b83-3697-4939-8b10-524f5ed3e65e","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"Kimi平台集成","description":"kimi-platform-integration","prompt":"创建Kimi平台集成的详细文档。详细说明Kimi平台适配器的实现,包括Playwright浏览器自动化配置和初始化过程。文档化页面交互逻辑,包括搜索框定位、输入处理、搜索按钮点击和结果页面解析。解释错误重试机制的实现,包括网络异常处理、页面加载超时和重试策略。说明浏览器会话管理和资源清理机制。提供Kimi平台API调用的具体示例和常见问题解决方案。包含性能优化建议和调试技巧。","parent_id":"7e66719b-4a8a-484d-889d-10fdc76788bb","order":1,"progress_status":"completed","dependent_files":"backend/app/workers/platforms/kimi.py","gmt_create":"2026-04-22T18:57:14.59267+08:00","gmt_modified":"2026-04-23T20:35:18.737652+08:00","raw_data":"WikiEncrypted:0zvMywNpoUVtx5LPNkwYYfwlM/Ie9jv+tKyKKcv1AxRC9mVBYjtaMmDbjB4bi6R3DoFVGOgv6ErdxCywJprEc4/FOXSuinoLipOBEjS1SoLvIuIvglY6l/IjgeQW61Rm7d1YcswwpmQZIzWMvqp6xJswdQOA6I4OCWZyyoaPa/2lETrzZcBW9ssD16KyXFVp96WbqY4mZhPFxSQEDiT4cUJ/clUzKx+oT4S+pSOYSGl6/5YsuAOA3Rc1HhY9Ow5FK9FlKsVMaFmxyJU/KLHcwZslXi8yzFzIWcnJQnRmMQlz6Zzz6mhJvkfg/s1TIOTiz3ZX906YG6DBXgZ66UywONJCeYpSAmTL6PJmP5z+lNRhuD0CzfmDGhErgZhLtvoyUfFoVruQmx/x9Rgy1lFnhKmvH60xIEg1eXiVjrQ/yktlr5ioCPigx1TWbcHspNlPAbDuKqqBhQtNOIgnlpoGgyEogad7Il1hkawUxt/TaiS3Lh0SN+zWs028ewgjO9gdWMB7xsAiB1+L5jMFCCJP/mhbPEfqnGC/VyxfevmgulrRD5A2EPR0QF4D/XNbc/vqSGqnIgkBngdxV4ibQlp1HO+Av79lh88FpVteFuEf6bsCL5SSHLDhJ8seJm0aoD1e6f+DtutdT3mVHaMcrEbMYz3AaNJhbNq0bEuElJ/ANz3eN0m5PPDjjnZto+CQ9o7K0C3DeRqKx2P0uRlrzhuBWIwJMzcC944SPjxYEUXHfT4C4vryztUifweDRw3eil4eFCrCBpGf/6gsdtqLoTPs1uBBVkxVh2UFoypvq5jwW2g9IkwMSHN/sAbNIITH2bRVDR7Z/pJay1eQSTjF1pz3NWcM6kQpB22XVAiOhiWPjJRQuWDtpRh+kOxWUSLaNkXSsf98tkydtHAPkMfUhalyLYFO/66PWyHJDWdFPECqtsOy5mpoJdYD0O/20+xc08z7liVDDgIlSocFXHWG35upSCjW6JWCIiphXqsI3He/dWHuwvTBamA9XB7Q44hTbQY3lKiTRjkbjuNfX8cmxcX7Hq21kTW6OBbxTVR55HSW1znrOe12b0sUz6V4Sk1zI5OB","layer_level":1},{"id":"cc7a1f1b-c70e-4c61-bfbc-6dc408a12ff2","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"查询执行流程","description":"query-execution-flow","prompt":"创建查询执行流程的详细文档。解释从任务检查到执行完成的完整生命周期,包括查询状态检查、数据库事务处理和异常处理机制。详细说明check_and_execute_queries方法的工作原理,包括查询条件筛选、批量执行策略和错误隔离机制。文档化单个查询执行过程,包括CitationEngine的集成、异步调用模式和状态更新流程。提供执行流程的时序图、状态转换图和错误处理策略。包含性能监控指标和调试技巧。","parent_id":"7416db23-312f-478d-8883-2fc3c41ac2e8","order":1,"progress_status":"completed","dependent_files":"backend/app/workers/scheduler.py,backend/app/workers/citation_engine.py","gmt_create":"2026-04-22T18:57:25.383473+08:00","gmt_modified":"2026-04-22T19:11:29.353795+08:00","raw_data":"WikiEncrypted:l9Ho0Yh0r5bYH9QEePEhka2UMFH582eHsB+P+EaGE/r7Zj5gVUJmL6923rRlAt7h2uvHOVtef4s71D/S/eYpYYgI+wRFyPq+fQZYOCmVnMBRyypO5m8WqfyrsSGvviugw2fw2oH6ruNX2ul1LjPKkntbj4o015R9XwHG0oDdyJlipxqNUbh66IV2c2DO1besCA/q2yTeLh6EiHD+vYeG3HO5H+y8kykMbBuh9eydnmoXBTCsTlNBHH8gzmZWEBBSL7DETM0lYCiNr6WpRCoeZEo9ewLagGq1ammmMjcMg+7fO/xo+ZkkACRTnG2vnKh3if5fBjzo9tY4tGmtF7Fevx+yjLRfhpPsg8vSRZeaggRPgub5zBIulo/4qZhAvIVsyYuAQCqrwq6mBxAEjgWWrWjOThUEQOntbugUY0DitRui7XGp7tDjAIWw570xWzTTUWe0CMoHIPghfvhItcnYfjKK+fapnQTnz159jVJarLbBdjZT5JJfw9a+jlkVyF5RIKu3J03cjGFJeBf74DiMxFIMQkKzgL8jg5YiLQTisI4X0BBQrKHQvHzsD5+VzHGwCsz7IIfcdZuhkg3PIA4z4V7eZP9tOBUJdh7iE4fjhOk6fVDG5iZME72OxpBtFkmfrhwM52swaToCosj1eQ5m6V2GjsYY/+ZvaNf2aWn8vBJHI4IEO+Ua1mLHkPRT9bhDGS+Td2r1R2fmSEEvNQ+PTuhnRAyzRASTsjfWljzNWGNmcbCtClwcIuTSwPWLAoL+ANl303UlvxObHa9udiJcH3pZ86+A7iBLoCg6JxZQuCSqD0W6bPR/vozpiCvGs1TvMR5tx6AtfZGWw4JYl9wN5iPPaP8sPsz40D4PWkYIb4fIYY/X3r2iAnbjpV+/8+h3DQCWEdqRNnkZ4Do+XZGOi1yH7QaPOf/RN00+bcNtR36PnzENY47tg8VfPkbt47YTWHf+qvWfMFPwco2hLzXvNFmYN4dVMld5V+9mzCPJSIb+JOcDoVkoGuNq7aXnOVFdERnypgzvjryBt3W2LgPNlD3k6jR7pJAE1gKKrl00VSdDN9npu4QXyT49p+YMv9m8Jbf9xo1Jn2dqM/cJiKZi1FLR0clZHZ7nh7/7WxoEqbKnLWbboi/qyuTABO07nyQfmyXR/24bRp3AIRiM+7Bq8KL9ZFZs05JmFBtaRCAzWdBdM3TElVkfFOyZRZeKaBlk","layer_level":1},{"id":"fec685a0-c9bb-4048-baf4-40b56b2aa29c","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"集成测试","description":"integration-testing","prompt":"创建GEO项目集成测试的综合文档。详细说明API端到端测试的实现方法,包括FastAPI应用测试、数据库连接测试和外部服务集成测试。文档化测试环境的配置,包括测试数据库设置、异步客户端配置和依赖注入覆盖。说明如何测试完整的用户工作流,从认证到查询执行再到结果返回的端到端流程。提供数据库事务管理和测试数据隔离的策略。包含性能测试和负载测试的方法。","parent_id":"fc6f24c3-594e-4153-854f-19250834eeb1","order":1,"progress_status":"completed","dependent_files":"tests/conftest.py,backend/app/main.py,backend/app/database.py","gmt_create":"2026-04-22T18:57:25.616681+08:00","gmt_modified":"2026-04-22T19:12:37.820526+08:00","raw_data":"WikiEncrypted:0j4RRfWJQdenLQLpT+DwLTyjMVG5sQffpuJQoSG8tbOVCukW9eq2bqobYYACR3zRn/N/FP6n0t+ZzbrLBFIDPbiPv5CjhNbth11wsRap1Da2YyKifcvwg7uyuWtSILKRIkP8wIVHX2/TkxRFQi9/m+9Qz3xVjYcNeOD0G8UWxzsSDqYGS90xX9MVwW3N24hbwwcJUE/TAMETdbhwrekpr33ej8R6IT6aBvn7m0Y93BRItueF5HJcUtKCizqJqcsG+BIQ1fodLPAsUiqvYW5dwymM89ASYiZXVbCOJq19yL9K4p1ZW1LsAc2J+6D8SR9RJ//D4gGwBmMTqxyP9bgn5eNt3ILeVMXWLXI9oxaDrdVs2Y4dXNC4AK1j0pegZkiNREUo54kWHFqCuQ6dG8dZB7BmnFEIYjwEeU29KdF6i0dyUH3/h5QjdLfc0OV75zuHQPaMs1p5fn3vo6ubXz/uWtxEF/IoVhph+AyY0Gci8TxdouTw4RZOm9I6mo5m4Y+TBsxUb9RO0WCrD/U7tRgIZcrxFfkORsKadNWm60Q4SRJeImUzxIVCUGBjr4km9AMwVsl94KSXmkBCNOFppeijE4N4Dl0n+RekVA2NBOau2woOIr/GwJ7b2h0jV/5/3x5hihxUSqZJ/q4RJmV/8aP30XRdYwZ6qiLcaF6Ic8kwpaS+9cvzGsPMcUF4GCS6ZSZoq4tuGj1ZY/iFI0w6Wj7rJHWbeBhsF/fHqFm2ijbrvn2nz+lH8Gxb3FM+re81hKNVU3BaZ3fxOAldPPvUxDw9tttWR+oH3F/gRkqefOIsw95LNYf2vIq/HXfNygn6mUw4aYidP1SY8flPcCMl0mDm7y7W6l+DKUJuok11v6h2AM09f0VV9JnGBMgwCic1FjQmfF2FWdqlsEaB0X4+aPne0DgPyIivgCLEq1dyneDm4TxA3CEVODVKHIu4fxPjmDtwbXUvPQe5sWkG7AEkp1Vuul8T/GLjJc/DHgUFe51MPFk3+8i0FCKo0x0fS8Mqm3spHB5W1tKYAIyexOgSkHzqgRdgERCTqUW461c4lKbFO2WIJqWgt/seMgxHr02Yk/pvMU08AaMRC974SfB7kP0lEQ==","layer_level":1},{"id":"b10c2334-a850-471a-9851-a1c698e3a485","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"查询管理接口","description":"queries-api","prompt":"创建查询管理系统的详细API文档。记录查询任务的创建、读取、更新、删除和执行操作的完整流程。详细说明查询任务的数据模型、字段定义和验证规则。文档化查询任务的状态管理、调度机制和执行监控功能。包含查询参数配置、定时任务设置和批量操作接口。提供查询任务生命周期管理的最佳实践和错误处理策略。","parent_id":"dd12cc44-0c95-45d5-a726-e7b8bcf2531b","order":1,"progress_status":"completed","dependent_files":"backend/app/api/queries.py,backend/app/schemas/query.py,backend/app/models/query.py","gmt_create":"2026-04-22T18:57:37.836674+08:00","gmt_modified":"2026-04-23T20:33:57.631967+08:00","raw_data":"WikiEncrypted:pNRlLcrWPaMbqj3wxGubppFNc0/AzaZuAQDxEKkb9fgIpRlV367n+a2PWiIY8g+kSLtBeyylocxMvW4jGcb79BLGGixlb4O6TPBIJc7v8GgK1UB+nLdmTHx/nT1JfKtrcPOkDjQ/yPHvw+ykuXomGaA2hiHzzBxAe+PbZILYbxYpQjnTqh7v4SGaGQ9U1E2EOXJ0RFpwna+s0NYfvBk+YvwkzRYPMiKcr+F4pcD5xTUWKMHZO3NuijnbDIE02fzYXvZ/xDBLubLxQ9Byx2dgdWxmi+xwo+gspb4v/DcrNll6qDWKwDnHGuyOQzDJJ1vXg3AaxwF5c2JyyQLNPUM7YV2kwxweQA08sFkJHAJ2yA0z4XM/DvAPZRdQf54LPlDB1zuFh8c3Ih5WaEO7+aTJM4YSmIYUbqjIjbqsMea3+cY2bIHXq2kdRT7uLikCktC9Lakrz0fFKLoJLovY3S1UBP3i7tCt6cmtMlN5g5hyHGqIVTT/fqAVUAc7wSZumMs4rr4uyEizs6t12KohwD2SqiCePMC+kbUpHV0fEBuzGlnYqPbW0yjiiVQlmIe8wTDNiNNa88JmcXkQB1pYhkAYrBUvBUN4Nrdf7lGBTIbQkQwvVoHuFah0MmoLuRQtoBqISkKJ9PMN0EOofu4pUNKyxmmcY87ZVbUNrwkgbvahp01NhzlsOLdxEa7d/74gFI+6MOrPY/6TcJqttksCQEkme4HWeJgRl5S2bCy3hlU9qcZyk6WAGPjVZg4JXdq2UbvBokHzB7KA7421mWkKGQALuZcUApNvwsvF1ZHjVau13wxP02WvaOzt+udwhgw2PXdNi26RDqwLhRL+GIjkpNfVngOcLfk1ULiMS87NXS9kHRTdXxu5W6PqAzyrgByrL3G+nPHL+XmMw6ntgsJdmtYmNWV0VijOOQGxSJGQHtaif6ZhBP+ckr+OXJ4GlkTF3jvGcfRkfx/eox+BaoxWI06xuXbFfImPuNqqa6odgzQzWv4CkvAnjcFq7umhE9Iri8xw/PDlUzBnr4HGnUPnAVvdomeMasz/oiPVTaI0O6tO3+I=","layer_level":1},{"id":"0c1d3542-92cf-4796-8dba-82caf2f7b361","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"开发流程","description":"development-workflow","prompt":"创建GEO项目的开发流程文档。详细说明Git分支策略和工作流,包括feature分支、develop分支和release分支的管理。文档化代码审查流程,包括Pull Request模板、审查标准和合并要求。说明版本发布管理,包括语义化版本控制、变更日志维护和发布标签。提供持续集成/持续部署(CI/CD)配置说明。包含开发环境搭建和团队协作的最佳实践。","parent_id":"2148d7d6-25c4-497f-8894-c4eb7a0d2bd7","order":1,"progress_status":"completed","dependent_files":"docker-compose.yml,backend/Dockerfile,frontend/Dockerfile,backend/requirements.txt,frontend/package.json","gmt_create":"2026-04-22T18:57:39.374243+08:00","gmt_modified":"2026-04-22T19:13:23.08237+08:00","raw_data":"WikiEncrypted:F3QgleoEfoy16cQggYe9Czfqaqo1gAmvHQcnSrNK3eg3bg6SLp6Qtm0Hd5JwzGY3jDj+dSShAoxbjZ6YvxA0ahjJ7+4npTrro/p0OlyQfTnVZ5PYAZZMMXhJM063eUYiuQW88+rNBbc3mKbsAdZboYndBnd6/wybElFnP7TORa5qWxWMveWf6U7O01ocA+ZnrQqoPWB5xrRfSzD1p3yGFA3fzKobYoxAAA3xE1ALEY0vjLN7vajgFVllC2Z6uKZOE4Q6v+W+r18Pr7pLXGDJM7b6pEfFCqcEMw2fWzUAFYSUOjSyg7j9TjP6Lae0AWOmmxIDmJIIiaY0BCv/iOXgg4F6QSChC8bZFyWJATWTNhfmHAMU6tYpDXqDsfLmRpczznZ5nzTtcX+87Ndpqchh+NWU4y5OYvzEeMRCh3HcCUDs5KrOoCJgRneV8BzAxfk4gCwSo2t2D/FYg1XWGfb6hPdmWzePBCYhhIGeDQRyAdApe2Js8UhXUOD3TM7yzFPMX9q5U9ZBfejCp8TyW2thbRzOL4s5Fto9PpXg38HbnE59l0BmptA7z5bTKTp4DHA8d4NhgCeDbfNLfSJXbyYaD3RqsQt8szzbxB2Q8mvEi8iUZUARZR0lyq0oEw3cYkZRo7Dcb1n5az2OJRZwHmvRYAm7KceVqa92aKeBUlVrfA7nOuwsVH+cEXyzE8ApglbJiQfTJshljzVBvYPkz0BxhBcYrnRIjy9TlqfTs67adZyWc0wqEVZeZhuYHwwN5yID2imZ/nq7cqiZCbV1dtBUUM6ayhVX2h/cBSLpHKAwVHAg9bb9V+RxXgtSYWYKCHsAD0ymmu/Fzk3/QBvrrFiVqL4b/5CKqk6Qi2dh4pN4tZg3zJZDuyx6xzWSrsHeYGnLunZQWtHn2lr2vR6+RqzRTDiOC8SizuAjeZP72IbQf5Xyyf65hS6yls8xztLA9oDCNnSDgJ/RiNDOspfgUyj2xemyoNqf2eJ/kCDdo4/VXxMiKVfg3MHY+Vi4dVlRcSEJYLU4AYuGqtqVhTIi2ESpnPXgDPAIT+ZZPqg0hLIIPx+HNqo5qz0qqxvliLlcAhizNT4MG3p3dBRI2IkylW4gHg==","layer_level":1},{"id":"109a8fb1-6619-4bc7-8481-e28cc2127d24","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"生产环境部署","description":"production-deployment","prompt":"创建GEO项目生产环境部署的综合指南。详细说明生产环境的部署架构,包括Nginx反向代理配置、SSL证书管理和负载均衡设置。文档化环境变量的安全配置,包括数据库连接、Redis配置和API密钥管理。说明生产环境的性能优化策略,包括静态资源缓存、Gzip压缩和CDN集成。提供安全加固措施,包括防火墙配置、访问控制和数据加密。包含域名配置、DNS设置和HTTPS证书申请流程。提供部署后的验证步骤和性能基准测试方法。","parent_id":"803bfef4-3985-477e-a61c-915a246d0061","order":1,"progress_status":"completed","dependent_files":"docker-compose.yml,backend/Dockerfile,frontend/Dockerfile,backend/requirements.txt,frontend/package.json","gmt_create":"2026-04-22T18:57:40.355193+08:00","gmt_modified":"2026-04-22T19:13:58.697418+08:00","raw_data":"WikiEncrypted:1PcQ+NupkgQiLQ506NXlaizhNZeqS8C1INCZPnjb6ozpR9JAOMhzbAgtECu8k4VbH9zFlJ7iHctHtUva/hpzUaHUxVuG/rnK2RrcCUGVfbG0WKRpjG+EsQheC10ihbe51Rb+uXm+ciY+/SOxWBmrtK9m9jwSBQZQx2vXLOPvachfZTksEB+Ak0/Y5DF+vjL4WN+ym2SAYi7dW98iM9YCG0AepSeRm5DxENKRvtPR7m+w+vL7F2oISKi67pFiAATpFXSSgbkKjENZIgPfqc+pJfUREOrnHANiCx/oVaX2aOb68pluM8RGtAgyOfMp097D2Nt4PR/HN691JphbIyyeHPc82yGTjeuFPfg5XqFkhM4gvd9EdBLE3/6bh/MJhYjEwmN2RRhz7EYgLjSss8gEdDu+YLIEbHIaIC5fFS7gss/cJULC0/i3v4nnobE2Iqh3WdeIMAmynsin0sjO60LhvRmXlecODQ7+1EeQpMWju5LwTuVyX3dnr4CO4rJJxEBNYA4gaJuef2xo/ZXoun6cEIHjUq7qVNVOBZw2QtqBD2CyY3NULBP+nDD/NwjH/Gh98gl2Q0am/gLAHHoKcZfkSub1o1m1ZWTFgYn6MqyYv95NuqxR5+MSPb9C6/rwkYduPmovFsS2Alznry8TjsLdD5iSNz9MdRTR9iNV/A/TIIovgVogXlgCwnIz6EXZUgDnTeBTfTHxC+gwTrSKXUigRlIxEGksBJkzktpQA8y9mwnIfHgRDI4c8WEQRGEcKm2N3/ZPVOyBHSOHNpXK/BX8MCQqGoj0x6jusO9pJehw7KRprktlMbB0LmAuc5i0RYf9SnhsGs23W7ktzhS+uTjRB4kviSWZdHs+hgh1Pu0HsyBZxX7pemalNElQsWbvLwFNsJY1L1yjHNbBDYyXC7gZZqdb2l9GqKVgozQuK+qUUA0Vj2o6Cr4CxL01vBYMFpHALv8KnmAI2CuprX0c6PmsXV20FAFF8tIxoGfh7qcvquq/d4ONxZ5FZ1hJPYzi2xeCU0p8gFYEYYlbGMXdLCk0L5Tu0aDmTVkkrZlOHSIneYJDGZ1W/q+U6W18i48iBLvFBHD19jGHBgdzRuX551rbt4axStOcEGuyFrivbWK9R2zdcffHbiRtxe9wSFXxthLGe23JR42EF5PmZmMtlUhpV6alxUZNxguf+q/ouSz7Xn8+o6amnO60N57RyJjJO7O6+TgfHeroxL7CpABxkru/vXEJ5XTLqZBiECMMi4keQOqUbNZX8Ioct03e1YG7OgHtDSayZFtZf3kwN2ToVkxIRpLHTUHxSWLZu0YiAI2MONU=","layer_level":1},{"id":"4d5ac6d7-8812-414b-b8df-68574cc36d7d","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"配置定制","description":"configuration-customization","prompt":"创建GEO项目配置定制的综合文档。详细说明环境变量配置管理,包括数据库连接配置、AI平台API密钥管理和Redis缓存配置。文档化功能开关的实现机制,包括动态配置加载、运行时功能启用/禁用和配置热更新。说明性能调优参数的配置方法,包括数据库连接池大小、异步任务并发数和缓存策略参数。提供前端主题定制指南,包括Tailwind CSS配置、颜色方案定制和响应式断点调整。包含生产环境配置最佳实践和安全配置建议。","parent_id":"b2bb2e3c-5661-497c-97dd-15bf6ee8b7d4","order":1,"progress_status":"completed","dependent_files":"backend/app/config.py,backend/alembic.ini,frontend/tailwind.config.ts,frontend/next.config.mjs","gmt_create":"2026-04-22T18:57:48.684725+08:00","gmt_modified":"2026-04-22T19:14:17.843426+08:00","raw_data":"WikiEncrypted:aC5ZtUyEKPSxjzg//aVllKOp167MIMMk/Juev/hVoGY4+Uz0exYT+x+CbyScHHV/Mh1WUG25XsdoZThZQEtO0sLOn9+hGddmRIK1DWfKa/hxxPvnViNvXvltvNYiLNOIbKgkBxtXovEsADGNyhZh4ndOp+a/upcB9NJ4f0miwJacx2Kc2MyCkDCgUM/gJEjyoB9tRPRJVPFRvprzmaiPXJ1K8jd+KuXwrM12ogUA9iPZOtJJQTeEXQVIItOZYzY5bzAZ/mnRyVIB11vegQ+E6Lzm7D1Nza2QOZ2893Bzu61StECZsNlfecc+xEh82aNHrbFip7Fg2I3E3fqBs5EgoNXO5Wnvkcd9fHCw9vI9kMJucTIPcthOyWAFiP56zu6Hzknqy5N0o2gSAJQdhzzEvIUUKeeGDZKSY2EjFsH531gWa+Q9m0FsYWFcErqBlQXG8K06rnNNeMwR71GloOifAK0ySuik/7BjJ7xIR7HF8FOfSaOhI011z3GaEBxZsMfPc13v0joKHld4p4PRBXAfExWLlfuM6cmB/77U4xdBrHVyMcS8NPKuT+TQCTzjr2uUKzxUcjbz+yGbjVFGKMaVzKH0UQfLKeSDUnb1JNBrQWR0PFAuZsPZt730dAHdElNx9MenV8/GY+XPklTXdGMUtflT6CKf3fLy6ppMVbMDph2Ov+1Xh3z35Y5Mz3rufJasyOE0rZQMNsUu3wHtnjYprxfzvmpP9En5z4KoGEa/282c8xoLp+n3+etuGCN2aor1BSrro/ZpPTduyQtqj2WdfXDnZo1In/RRAh0TwqPze8Cd244OFfKDDAEICSSoZl0S/2l15QyTbqDNVnRzLndJswfAi2yfaVOEkBHvZuDQZXmmlf4VGsJYihVUwG8Y8bvegjLxgcD3LFGNKjzuKP1eAYLcotF84HRaFwNG3hz8Mv8puFMKyrHVKIC3UxzBVaialQqdO3oFRcrLdcSIx1JlY2qhK3BsrUtj0OLURUs0dBnCQS4ndq4NTLSQECFIifA9l7GSPXyOkGkp0+H5QCfjOl7L/3EJ2o+lTisAZggIZSZ57Ig3WxOGp4tgBh18ubr0TRNi0u/VccTbFyT97irQVq+9KNBKwPZZazaWvJEuqNSsdX3WGjh17VTbbZgmTkAwLyuCf+nyKkGUkq6MtRYwX17XkQuhceFpBmYkoxlfSWr4odGaspQ3c/AJ5zFNMigymGGpxOynWRWD5Abo/3R67eqZ9rZbmCqQbF0fkFPxdi1prJr87dubXtG1Zkj8AE/ZGXYjwas/l8NeDYxLFeir/ic+yR2tcU34lFAY/B86IHf+EBSbBYigErIEadb9gw81","layer_level":1},{"id":"7c2ac186-ec90-400a-ac1d-b3b7ca2f01d5","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"后端系统架构","description":"backend-architecture","prompt":"为GEO后端系统创建全面的架构文档。详细描述基于FastAPI的后端架构设计,包括应用配置、中间件设置、路由组织和生命周期管理。解释数据库连接、ORM配置和异步处理机制。文档化认证系统的实现,包括JWT令牌管理、权限控制和用户会话处理。说明API接口设计原则、错误处理机制和响应格式规范。包含系统监控、日志记录和性能优化策略。提供架构决策的技术背景和权衡考虑。","order":2,"progress_status":"completed","dependent_files":"backend/app/main.py,backend/app/database.py,backend/app/config.py,backend/app/api/,backend/app/models/,backend/app/workers/","gmt_create":"2026-04-22T18:56:47.08233+08:00","gmt_modified":"2026-04-22T18:59:21.004588+08:00","raw_data":"WikiEncrypted:N3UbzwGjCC3xD6BrTM0cq8Y9ccVoDb9n1FwE8c3MNy0X5y4Ej4ZnP3KnXAR2aRWtzrMaJkrDRdDMkztKRYWc3Wk1Jzwnfsgqt59so9pKRU5JZY61Wzqd2PzzDU1e10OntPwETdHfAXsLLggvksYCugHgi1fhnyRiDR3C7ABv3U/j9Z+xFbLaU1X2+FqXtTpJMe0gZJ2yDe8YIV05/f1NdFiyt5NDWdtbC4Ib9Y2H52fXoe2qIveG8dUmBzkwbHVu2VM4E9bT7go9y9+pSOyoRwO8iQIgfY0dKsQcvDtHpO5T2plEfrmFKSlwMCiiivasNoz+7ylsz8JGo5nnlfBqTtNbVZX+TrC9x539RAxL6rEZvRxbFucfobivfqV9UKh//2yYFcZ/44GbNjqNQxfF5WXJxxR5cl6crLZO089slohFwSj4xFVRarnzEA+wA45v8N+WhlaCWCr9D3DeX84ssYvMnAzwz5wUApwFIB0+dzG6CyO1yNQOBdcUhAFEHAZDzWi4UMgnwXCHBvsXx9keqXfSQYdPjZC06gegy0IfbeW2XdHsznPqPyE0TNk7R2EJ7Xm+Ky8I65Fbs56g/2k/ETmTt8ja8RfGpRbQpjW231dxIdRNdTNH2W7VkpjSFNJ2KD74a+UFY5G8eSFAvJWuEMLVCQB69C+TO9ML3zzNA5YE6/MzhYsbd5Vz6YyvCBTjMSVufoTPK3n1k/ioOdDzRFEZc8mucNTJBrEu9OGgb0gUFQFXMEsabcloQaO6ZbOBLefSgrAdlSolWRG7Bu4XyCzXOYvqrGKNPsTZQOTbVkOP9Mg6xRN/8jkyY8z/5TEh3lWnKh8ZkLlumG4QfdLnF2LHVp0IX+d/5HvT3GBtoXN+zJ3hMVEVumiVT7qCJz1afiTQZhPERVAirDX6cZ51CSo1FkRWS55AvnICqVpP+fpNLl8zLWvuuOLeA6Ab3x/0rI6b0LNf/UAqeSW64LGHL0YDWwB+G2c5oNp+bYuOVfgmngSUmDdDFHHL0k/KEoU9VN/+5f6KypjM2MYUKMLz9pwbX0qvUZadQCg/thD3v31zZ8ZroTFTEa6tAyAfqojuUXtJ/SI2l+VlpvP6dNjUfsudg8Hr7AQQescm0CN0tOYTOJZ0P+2/RmPTHviifKR/54LVuaTLEJGhd+3K5IhDTvIOhayZi6E4ARpakMmWdVfsGPv6ETkH819SOX3alS7vHgV/auGWsJcRLJinONhxTppcAf3MFf2nq8AGZR91LDCZPwV0hO8YTxygvxX/+uNJhqe5oMGvUjJvTo6xoBkb3JATSdHKXM+lEG2lbnbFjUN+bVRcAH+Qw5FdSl1cHbm/QJnwQ32GeGmAZmQ2TTHE+tdQgZ6yA5dDsvSJGTsAPieIDKEvIql2j+9eoR1X2j1mD0T1D4APKUfgD0zkNE9QeQ=="},{"id":"159f2ccf-71b7-4d1b-a4c4-c15b23a4126e","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"API接口设计","description":"api-design","prompt":"为GEO API接口设计创建详细的规范文档。解释RESTful API设计原则和路由组织结构,包括URL命名规范、HTTP方法使用和状态码标准。详细说明API版本控制策略和路由前缀管理。文档化请求和响应数据模型,包括Pydantic模型定义、字段验证和序列化规则。解释错误处理机制,包括异常类型分类、错误响应格式和HTTP状态码映射。说明API文档生成和测试策略。包含认证和授权在API层的实现,包括权限检查和访问控制。提供API使用示例和最佳实践指南。","parent_id":"7c2ac186-ec90-400a-ac1d-b3b7ca2f01d5","order":2,"progress_status":"completed","dependent_files":"backend/app/api/auth.py,backend/app/api/queries.py,backend/app/api/citations.py,backend/app/api/reports.py","gmt_create":"2026-04-22T18:57:02.317509+08:00","gmt_modified":"2026-04-22T19:15:14.078939+08:00","raw_data":"WikiEncrypted:xKp6XrvgQ6yDy/qZb6DBAyzRhY9oY9wND++XWs8abaIu3G2LITgI+Z0UQBWYGKhuTqBsuTOr5OLyKixlekyR1Xfq7usrLYQyUqykz50fvTC/eHiVp24qJjGIE/yM/QXCeZCQ0Io9avqxwyMLsy7oz+0kRVW2WjLzRO6OrvbiUY+8yPMkSPi3UCtyM0GVLTpD/1yhEPFlJimDIuMsn1U/6MxjS0vcd+yEDjCBtrAoR40VIxrMz5v+dKD/pjfzoR1p6GEjf7b6zpzZGPhEtFmhzIahThZIdAaGShFz2YepbNwjns9s+2XJPvMdDYb5mBTcQCjoCHeUfqpQ5eRpjJ47qGFAfFw7lpv7GfOixRgEasUkVhJaX2fS+R0bGg3mmJFfg8tK9XXCm0OvNdgj+aJ6EUKT7GWXDkWLJd4NWEHKvqO9jfXu7YBJxM5tfR1i4e7CPz16fSaCPJtKsI+HgIoTf1JQ+3TrBqGncHko/5j2BznPg08EvIvKnECTrZEH1ATf3+Dpz7cY5x5f+D+oBDxG88V899fkfZSrXbY4YZJnhO691mRZPnKUgr3TsGO4kK0/eZw19HvuCyKxuqWlpHvV2nWGiFCyQpLul9lskV53bxNE6LCdF4LpQgsnxp3NRkXRo9kqVcTFEVZX1D65nknWMQHMOr91wEbFu5y7eHBY/M1mlvT+FpX/uzM6NvEAUkyKHsIpLihbh/obM0dUOwFr/y/hUOLfs5gw3aMosXT7+uwJRXkzxJlNzCyzWUQoMQbw19Mq53uhogOLGeVQNV9+lYZlsF9DEbUg7pWX1HOTZw0qj0G50JKHtiM0mGIwmRxZy7HDNhqrMGXboadds7LRAL8up6y1uZya4V4Y43X61XVoJJrERnU6caJROOJ+2I5yEbNYOvo/g+dDZf6DLrj/5IPInHUF/rwxMPX3V17obui48Yk9OOgLp3s7TEAU+t97lkEPo58h2oDARfsbxrnrVd0I9z2/IJSBouFoAA5+wGUVU3BH0Wdc9bwTyjJg6t+iiz5Z14RRB6hnBI45qD3U9a5fIJ1mWWGl2mBaOfvJck5hTbq7v+Au4iOMprm6m9SIq8C9D5w/PtHslYGeBDUYeIOWciDfxj90/WlNjcdIpE8qX8PqRFKdnwDCBOD0xewCH5Cw+MxNEuc6RRDsFu6vhFjjYe/vtb6bNc674kCJn5eQOGFAo6+v5wfkkZhG1S1q5EY8GJf+H3HgtucPikTjpKAbpBkkiorIBJ4n6Gdi9Jof2lYe1Ina6yJPsnNyd1MyQgdpEg7sStrvevt6IaMoeIe0vQ+WPecPhqsIm9X4wS4nI7Knd7q8WUsBQfphwlTzUb0igehWxKagmMc8N3x64Q==","layer_level":1},{"id":"9cc59a5a-f597-4707-b994-b6c49514d553","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"页面组件设计","description":"page-components","prompt":"创建页面组件设计的综合文档。详细说明仪表板、查询管理、引用数据、报告导出和设置页面的组件结构和实现。文档化页面布局设计、导航结构和用户体验流程。解释页面级数据获取策略、状态管理和错误边界处理。说明页面间的导航逻辑、路由参数传递和页面生命周期管理。包含页面性能优化、懒加载策略和SEO配置。提供页面组件的开发规范和最佳实践。","parent_id":"d907a8eb-795c-4060-9cdd-50d31cf39be3","order":2,"progress_status":"completed","dependent_files":"frontend/app/(dashboard)/dashboard/page.tsx,frontend/app/(dashboard)/dashboard/queries/page.tsx,frontend/app/(dashboard)/dashboard/citations/page.tsx,frontend/app/(dashboard)/dashboard/reports/page.tsx,frontend/app/(dashboard)/queries/page.tsx,frontend/app/(dashboard)/citations/page.tsx,frontend/app/(dashboard)/reports/page.tsx,frontend/app/(dashboard)/settings/page.tsx,frontend/app/(auth)/login/page.tsx,frontend/app/(auth)/register/page.tsx","gmt_create":"2026-04-22T18:57:04.216604+08:00","gmt_modified":"2026-04-23T15:19:43.818179+08:00","raw_data":"WikiEncrypted:5oI5y1yTFbg14yVSXHYDGFeITEbIkjmdES7qr/P4na8TrPHqKZDCV0OwvONxgczey0MsZEE95T/q1IqTn1MDXDe+zweBCSZSlefgNsHwrtPEnyqFrV2NhO5nKlcD6tYwGnW5Ag8vX/svtjfAjl//gRYZD89hOQGnlYrcSU5a6FC1LQaaD4KqNgrn7yYxshfLveO4k610B0mb5BrOdyTpLLBcuNmEgY9/GKvdoyt0cfpZPwN5J+wPoYjAnGjm9LDIkL9L02r9Lvvq1mhN88A7yKU49c6lU6S75IzcT+OFjTd7OXXastuPBLJRb1A0sFMKjZVshweginUNg6fhc3vFQ08Hthoizv1Pjm4qNnloa7P3w/rnuQrvCJk3Nt1PWn+ouHeenTb9bsV/KwF6BGJ4HGDSDyFcd0YmY4CDfW5aSBFP1QYneJUBxux4dxgw1GbBsa6R2o+cDCB4DqSA14RqNvsI4r16PlAraoYSaQRYj8NQzY5dRbzpEnhmyPsBmgzcW1gLo067XcLiF0DJvlouezCyJW+Y9YA0fmJslQSYvcMhcI8mYdAfGDi1EoXoUiQYMnvlYq8J8ktBwLbIskG3FgeWvmoAFZE08E9APByPtLjDcHHan03Nwy7CPZqb6FtXLeHH6H4TK+WRnxyWWUCCGwQxVYXq0SDxaUvHuhZ4XUr7+Q1U42rlW6cND/0kiOhqZxe5qp/7PBom2IrcPdORh4lVv3RCQrIDCkHcBzCV+1WIwFeaxUaSDNJMmZ500JhDl+ECx+6dgbMAMTRPh+SxHxLd/OJMI9dD9eWQZMj4RwDxTbqlVp8cpoAEGPNvmweo2JApNndlNo1gDMJ++de+I8cKsyCdEsPfQ8ikJHY3R/UaPh/mPp8pQaKIBBP/nvMsT8jYMtdv59ejwQy6+/9dplr/mqdQCkRA4B/maZQ57aFmnsw8HZM9ukvo0Ni9KpUFM7iFAVdZy3NGVf8DX4J0jwAjd643HXH9I6+6dP2Jfs7ezsKz1T5yAHvocFPqxtbC3b6WrwrjPWf32N1a/qM1RiZdPyUNGE5ij+CTm9PUzcQxUcatfkjdDGnwRIAJMmmrtYVTBvCP+xUKuAp2UmXU9xfTYxlU6rdp5LyGQS9dHP0x7KBg+yOWNzECNEzMiCgE7gOqv+X75WA7D/sSBMaO52H6f4qtJovvnkwq4r67A/ByroGz4ctZ/wSVqTHti+gzlXIxgHKWr8VVq1HUFUCSRdZH3Q8PaR08vmQcapIQHpDRW13nUf7saKZh3N6R63lREJu04Ie+fQ8i7VUsNE4QclcrUsdj7eUxv5xtz7xrCEBDZooPT3RW8OM08MJ2Qe9sU6bdCvHTPE21OkEYFD1tWzWH7149QZPhOzkXIQ7qGdKQlmRvyOnd4uL20k58I3p/q9ktqLxBCy5s9Ac6PYODpXPLAelkYzhV3TcJAzxphaGjCmR8goNGJJWsqw3FOOCjGqWliL0JmW23Xo4emXDMUU50N9Ru8dM6NBIs6o8Hy3YcM2dj4t5RwlVejQhCn9gwtm742VYEdCEYKq+8FJtp49Xm01KPOtgTyFN0lF+HOQG6LCrIBY8cXRQtkck1aTvxD+KmKoVxp09guujaDutV+eyhyb5dYSytjq2ptL1FsYHLS14Xa+GW6DEvniGGnCzP2LTzntbqIVzx3J6F7gquTfsiDTTPkIijyYxWvkSseJc=","layer_level":1},{"id":"f70f5d9b-d7c7-4dc6-b36a-5f4508e6acaa","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"系统架构","description":"system-architecture","prompt":"为GEO项目创建系统架构文档。描述整体的分层架构设计,包括表现层(Next.js前端)、业务逻辑层(FastAPI后端)、数据访问层(SQLAlchemy ORM)和基础设施层(Docker容器)。详细说明核心组件之间的交互关系,如前端通过API与后端通信、后端通过工作器调用AI平台、数据库存储业务数据等。解释数据流向和处理流程,从用户请求到AI平台查询再到结果返回的完整链路。介绍关键的设计模式,如适配器模式用于AI平台集成、依赖注入用于服务管理等。提供系统拓扑图和组件关系图,帮助开发者理解系统的整体结构和各部分职责。","parent_id":"1bb55e12-24c4-42cb-8f59-ddc303460d45","order":2,"progress_status":"completed","dependent_files":"backend/app/main.py,backend/app/database.py,docker-compose.yml,backend/app/workers/scheduler.py","gmt_create":"2026-04-22T18:57:13.329904+08:00","gmt_modified":"2026-04-22T19:15:17.452724+08:00","raw_data":"WikiEncrypted:gWB8HBj+8+/15rQhXgtMjCy7qJxJBEw3w9EAqc5Otte14+SfcEK3DSbmZRhW2TgD6BlsxDXHpLcSijck/Nymh09xxwlFe9hXY5fsIsj1IZW9egIbof/vmRQ/HkxJSvNy7WDeHEuuU7TDae+7kls5UELL0/oUUiCC4fjizzoaOlqMuOvW/DImO8fA0xbQ2wAt6L3bqB1pcGWvnB10d6EKKhQYmUj8xv/2M3cUBtDMkUdyKbAuduBIInt+jZnOGnXKcr1w3W66u8elz0iqgWhMCsMFd54QokMhn1Uyguz3NcIfEVH6IlKil0ufINdb2d/QV+9aukLvJ4Mq4YDlUjQ2iJ8oxAYYUb8eIjBnsLHPfBnMUyXVAo0tbyNB7wUmRb/L1VR7ipOMMKd9mEohzKGpsTxHpM8my7x8Ryc9N1guO/H766qiiNij1HNCu4rWVW12oeTTjAoEKdLzLyn59Fc4QjYVkS/I+r/lwRtMNN0OGjWXGXea+HUaIHwW1088PW3eZj3FlyGEsTiYb6ysJAWanY2qoIhASm31o8s9DekhdxTRbWeBCNzGN2ufTYGM9ygKNDHF5dCbVW0/Vtc6FC/TDiflhIaDY44Gvuu84O4l7SRBl0jKM8uCFHOgx/NzDlnUdNFaSOdjUBxQ7vVyi0Q5X6P4H/ERPzJQvOa0gmXW7S1ry0P4/CRjOCzq0Afw+mAf2j4PHM/4MWFkvrFkycbEkHWoWnPY+DWYI00TVSdTWjj4n4l9wbj1XDhXavLdg00qHVjv0dTq1ghcZKv3C04T5MfvVQjMXCKPQaK0KzwZDfXydWnlyLPgM8t95lTETMkjjEpIMtiv2w1gJda4ChFrJq27oPmVlEoVzGPuuk2B4YN3z6A5y3ehJpejis1/EuBjd0vXHhwghZeUv8mMD4smRPUMA8GcEeKVs9TQgBHqVuuVDdEAQfE7w1ILarmq3trYAuc+LH1KMUyPD0aZEbhKZdMRkFYWLhfyYeuazm9SfO1BqtEuTVoAXdLD86TCQNmxxTZPgU9OB9JluopAMt1oszBwKK/88UqwBqgUZle95RTKVR6QPn7zAGZaDbfsbYvsGUfNBSH08o6nnraxB0Vpj+r6WaoZLCcxhqSWoTp60YlMt7BDsla0Lt8r6D+a89AtCqZOHLJbrEx6T4wsmiykEi1uC/9XhtcsTHuytq/rHeDWR/bTToB+mGjBipoGscvIFMgUJonYCOjLDyBPGpeWispYZV21bIJQtFIYv06NKYU/IV9ZISLel9AttowTEXv/Y/U1xRtmaTp3BgGI4iRdwXYMJICv7Jyr5kYd2CrLJQPzEBdkJi7+q3WNdTCWBPd3B3hL/tTL2lFNDOc1sqMga78PcdWWHQfheORW9OfH3cDRiq85LJziojysfwkQVqHY7niPkDyphAwn9F2xZZl9ZfahAaU07CgK26wyavgkYOAU0dlWI6WrAKE2gQOzOxBL","layer_level":1},{"id":"816a2805-76c9-4f32-a3cf-96428208081e","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"数据模型","description":"data-models","prompt":"创建GEO项目数据模型文档。详细说明SQLAlchemy ORM模型的实现,包括模型类定义、字段映射和关系配置。文档化每个模型的属性、方法和业务逻辑。解释模型之间的关系映射,包括级联操作和外键约束。说明模型的序列化、反序列化和数据验证机制。包含模型的生命周期管理、事件钩子和自定义行为。提供模型使用示例和最佳实践指南。","parent_id":"243a1a45-d31f-405e-a3b9-694d2fe617d5","order":2,"progress_status":"completed","dependent_files":"backend/app/models/user.py,backend/app/models/query.py,backend/app/models/citation_record.py,backend/app/models/query_task.py,backend/app/models/subscription.py,backend/app/models/__init__.py","gmt_create":"2026-04-22T18:57:14.161024+08:00","gmt_modified":"2026-04-23T15:21:46.785144+08:00","raw_data":"WikiEncrypted:Zb5TNaG1u/mRrgPr+sDyCr47uD+4y/GruMCqF9C9nxStxKZi2OWvk4ViC2NJmWUO/Jxugi7iel+AeINiHAz9c7erlmOh78DEPvZI5zcQaIYzm9l0e6yLGbMS64gON4GYqx4TUizeLGAIntFG405vTATENZMylmwR0jTbWx2uP/KlAPch72o8TGREvPTy7FGikY773VIwNZq0MXKYxjbwvld1ADWYjtxMoKmZ7pixx5LeZM3O+bfisD7UTqLobS2VvR5Ic2ynsAkEEzef+Rh5O85TXra/uluSuAOST9W65TENzfEzwHe+CNAQmUp47/vG6d7I14WPEipc0/aKbh43AhJkclnRjpR0bYFPJrW/HuN6chk1uhxzBK9sKpOUOLZ5MffdIttkTAOz4Ny5MxnUwt0zj4hDsVOevpasy4FZ/3pVx07fb7SlIDC18p+OUYQIk9JqBxZmgeMslhOBSkmRTAwqir6PN/GuLEeeC0mPlAMNhsvDrklfLlJmLY8MuSQHqteqYJryoZ1cp1yeqxATnDfeigUr8eSSaFqZc5S/AlgSIrvr+7XJWk/Oz0wKPLRXNUcG9yDweys2pdDb/hV5hiTmLYjgvYvnDLMMjrFgR6Fogz3U5ItD0xLC3lt09GJfm8jhS9E4AJd36iPN2WMeHsM0ctdvzYB/MKtWIIrBkWuRD7CZeGJepiGO/GJprp9HK9m+APjZQ4oc5d43tgDModdepglAEgNklY7IzUAPW0Qls3DhfUUHq/Zuf5AxAfUAAg1JOW2qEQWV+btkeoRPEiHjZXFDLGsC226d9yUlnYcTkFOeVbL2gomt13MPt6c4EQ3y4BSoG1CYqO0q6IgkX6a4g9QE7OKjdE3RX8rNGixxNJzfx3oeGtcne/lDvhO9/U5SlpNgbkkemAIPu+eZw1zMpknFdRwUdwOwgyVNxR/tt9AEktJ2gcaxRGfG3xTSa0JHoniO9otA8VI+Paw/il8qAI4Z1kf2w+L8LavGt05hchhlzWcrGbBjXF/VkCoYxFvM6JX9FafcLjoT3FtVTSorVysHodJyR1nHB1TL6/SH9v5IZMlZeQ6/Gm87g4SquVaVgvEBMuFPA6c7BBhWUqGw48UIBxfB3Ri4l8HYfRBiqrPSIuldaD+xTVL8F5XsVhczS4JXDnX3RLtvjOuBZRcejVO0ubg+syCfBhf+6CtYOyDTTQDGgwdiNg0MjJnmjy5TMmMdynOGSm2oF6wS+tUuWG8lMMBtredaLHdyVb455+OY2oQ5hJZGo7eyzchNabr+Xous+Ve/4cM2FOoHdQ==","layer_level":1},{"id":"64cbb894-755f-47b5-854e-c26c7821e9b2","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"文心平台集成","description":"wenxin-platform-integration","prompt":"创建文心平台集成的详细文档。详细说明文心平台适配器的实现,包括API调用封装和HTTP请求处理。文档化请求参数构建,包括关键词处理、请求头设置和认证机制。解释响应解析逻辑,包括JSON数据提取、错误码处理和异常情况处理。说明配置管理机制,包括API密钥管理、请求超时设置和重试配置。提供文心平台API调用的具体示例和错误处理方案。包含安全注意事项和最佳实践建议。","parent_id":"7e66719b-4a8a-484d-889d-10fdc76788bb","order":2,"progress_status":"completed","dependent_files":"backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-22T18:57:14.59287+08:00","gmt_modified":"2026-04-23T20:31:50.506814+08:00","raw_data":"WikiEncrypted:2Sm2Oxxfu6PsmMr2pZflRJ0uQ9gYQuPnIUHmJotOVM3YPmWq0HSDTQGvIE8WdDGtHlaemWXQzS6Ra6mdo6lkRL4Slh8EfpKUg4wigWPN0r3GaSXHkkAIs0wgET5OjWqYvTL1QooFFzxPhX1ZTdHcTpcp7CVvRNSVGiTu93qzZloeLF1EwOxsLvQ8hFf9SuWGjeOUYDGh7ktNwrMbeUIV32VkQlqsqQ1HqoKoqjAh2d6Xou7+peaCdxzJOhMf14e/vNiC12p6PfM2oyBY8gR9sMPKd1zgEepWsc+ePSazz3RO+zy9fbc5pJTLZdtswhL0xGhZKuYgYlctRId70DLeyiJHlvEQzEE8KB7QJqULfiB4lgMO84A+DhPeslR4F9Edbm+5P11/ycz4y8kzZQwnt5F4iIOC7HOPRSdGTYTxO53cEcqSfBI/wH7enb6Zt49h8mK4UyYW0fUuKBE7dPAjxC6IxbdabWdu8WefhxUR1oFx6BkdGWLLmj9ZOLMReTwnsJdK5xmoA8wQvV8MMlYiCgBuPj7mYce5s5hpglFxtJdEeDq6P2Mtusvj9uegGeFmCJSn1nbBhJr2r+WxLk/WpDO5lwhggW6V/wdvqcmRvaGHCFspVdzbC2qx104c8i+2wum6kMLHVTGAM9kTy4M5vHtvBELFl/qfldVQ8BK9hUvE9jdUbNQkoiBwFpPt2NNFYvz94CAxqbObxiZ7C1VhKWPH2AMX330wwjiHjh0eshve8e+pjBsDeM4/nTh3PH0P2XNUsomNEDxCQpXG7qngeiMXljTWmyGsLk56SzHFqfCgQX8fLlxv3PzSHXpCkAdymDxnJlcuK6WZIMj0AjQydGVSLgItD0boSI0YfvyDXhrO57OoFuwUU5Enq0do/w+quy8Qt0Qc9Q0afMg0GVUksiDfURVugssB75pqSqdNSrJy3wxM+kSBndgaiKYIakZ1idHkzpiGUshjyAr3V8/N1vW7VGyY2wnoquEclltaRAO6V+O8ymywFWL+/RrPEn4DKy8ul6EmHuryCQh1dfEPk5ZAgYg1K9ecbb2dLwTfMgXIhD/ar0ZfRO5OdwADW376","layer_level":1},{"id":"412f8cb5-54c1-4f32-8966-fa0e5e75bbca","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"性能优化","description":"performance-optimization","prompt":"创建性能优化的详细文档。解释调度系统的性能瓶颈识别和优化策略,包括并发控制、资源管理和内存优化。详细说明异步任务的并发限制、数据库连接池配置和事件循环优化。文档化调度频率调优、批量处理策略和缓存机制。提供性能监控指标、基准测试方法和性能分析工具使用指南。包含实际的性能优化案例、配置参数调整和故障排查技巧。说明如何在高负载情况下保持系统的稳定性和响应性。","parent_id":"7416db23-312f-478d-8883-2fc3c41ac2e8","order":2,"progress_status":"completed","dependent_files":"backend/app/workers/scheduler.py","gmt_create":"2026-04-22T18:57:25.383759+08:00","gmt_modified":"2026-04-22T19:16:37.81704+08:00","raw_data":"WikiEncrypted:9uOBpMbLX4DyZqW4us3Wm3Q7klXxmeD+JMMoGiSO2oNryWBo1gw9kLkawvxQIW9CASZSiyAjiA/zeT5DwD4S8PDqEsVNE73i6DrCAWvPET3MMPQasVfJTaLge2tk6gbYlx3R6JKZcUoi06jS7okoLDzJAFru3F6zguqySliKZSG/00oFVcDHXlZZc0L7hiq11k1jOD8uBl6n35lAvst/AgFv9MUzrhf43XDwtHiMAxjCAkwKnrWOow44Lwzy5fG3nWKZLSHE3/CUmZ17U3GmEqfG43ai1yloAkMou+sTRIk73sRdXPDze0HhNdNfNXTaOHTxW0gT2TwKGHgG9Jt0Y+1qWq4Nxj/oJTP/hztBLy5SEPndXXqeZTkBaesRTr0adQv49fH0QoFV6D6dxlEOodMiFhvvYd1rvR+HwbQbqU3W5UDVnKfPlMXHsz0a9NPu4aGgk5yevh/s0AP/v2R8mgz3N41lETHxk6Q71f35L04S7u7P6MlorIwKzkeijhFf8sPrChMYX7dwf8dWba+Nwm6fgb+9AbSZ4VczhQInnbiv+GUKiFnezNVSHUUXqTCvRIuhF52jqnOqjPei/1oeS7xAMmB67o3v2so8T17xg94F9FoEl2XuuwA+RFDarVZKACDTPxjt70OXdAoxoERTZ3ivU93OANsuuWx1x0HgFdBj0q6seNC8cbySc3ZuQBWGu1YWMmyIYGL5l6L7CNSmkkl9/pkb1TSfkyM+Hk3VLXy8VIvtgHxGX2OU8yX1nX0DCGS9Yt3dK17lAVH2XF2mo39noQPG2nxjOc+lO/O9cL/CC1Bqzd51YLHapcRLPPbuaMT4ljyLvQ3GMvKHB6c0sjdaKjykN96LhXpO5PAqs3N2edkVKVMC6lg5fTBMZi6B8r4rup3M9CPDs4ehmVYTtnZpt5zKxyXP8QfTO1FfDyNQRpbXj8TyLOwwqEFvZPQlV7Iupj3lpi6crQhtpXBtU9M+vjP31rOrdFpBHXCckE4T9QryVWvQuNDjsc1+tYKLgF6S8ixDQFCHEAfzctdMM3iiLCeBy1szBZEZTE+OS0ERSbgqusmZBkz3ouKp6suUgXLJp3Kystu+dAVWhA6BAD2WHT76h+Hbazixj8F2qAoxmUb+P8Z7u0grbWJksg6u","layer_level":1},{"id":"40ac97e8-7ef0-4198-82d7-d2e332be9d34","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"测试最佳实践","description":"test-best-practices","prompt":"创建GEO项目测试最佳实践的指导文档。详细说明测试代码的编写规范,包括命名约定、测试结构和注释标准。文档化测试覆盖率的要求和测量方法,包括行覆盖率、分支覆盖率和功能覆盖率。说明持续集成配置,包括GitHub Actions或类似CI/CD工具的设置。提供测试调试技巧,包括pytest调试选项、日志配置和错误排查方法。包含测试环境管理、测试数据管理和测试报告生成的实践指南。","parent_id":"fc6f24c3-594e-4153-854f-19250834eeb1","order":2,"progress_status":"completed","dependent_files":"tests/conftest.py,.pytest_cache/,backend/app/config.py","gmt_create":"2026-04-22T18:57:25.616954+08:00","gmt_modified":"2026-04-22T19:17:48.81542+08:00","raw_data":"WikiEncrypted:3lrOgsvw7LaJXRS/Bz00iEsb4RzJUAxxpmqaBblS/51b52WVRQtf4YGBQ9MC2MYcYNyKxRGZljd03HKmm078aoRU+suxjG3HIqwkvM6ruyPxwlLdBEn6ogbrhm8eOKuGWjiEso+PrOqSXW0boT4qGE+/L4MkPiyeOB9YnDB49/ByvDHsjeesTQqGwpa9FmIQtVqpqDZA3Sx+x8TB+MSqT5PMZ4egRgCW1ODcidZrTriWvseFNQDFLzo8g2H/HF5CFLcVsZVK+kWI7b7oWLmNlIKz2SyVJuYqvCblPzw+/773Wv4RVHYdK/pxISCon/L1KjPyfZjddr5sDjJO7rNFbBshPxUIQhtXnnAEqLOpzZwHm2a0bA3vSR42bZZoSAY0v3aZxXQ5IvxNT/aNAmiFzd4SkTlz0okDXnBsArnOUpLLRfjLhxt5ueRUi9Dl2edsdycd6XznT6/oAUHTf05zhhKC6JR1OsKiFQyoo0il7LYjDxXJM0dZycDlENYwZ3Bd/82Qr+7VNmgpLdnB/7z9DPG9iou6TIpztKrdSRYqWBcl75qs2L/R2Sy6MOyfSwALTRUi5udf8sNlsHOk5y2qY0h7vd1GzYwtxKQ63ypJLL/8fAcPKmH3FCwKvrN3zuEu0Meyq+y2v8eYeXNozeOa2zum6fI5sw7hnzX9Jqy7fyQD2yBFqyylQ1ZW3nwFd9liZLnWfm7zbLDlqSgzGYGxvNIe0X2rhwsthMZTLEXOZVDW1/NqHg2E9qXOfg7XhQRHKZz6Wu8eZ6MGyCvq6ft2SJI2vltHD0M4somneHGSMo4jKY8rMeGl7qkW1V7aaurBnh0xp6cOJ25IdbN4VEDYm1Oj5nlM4wnEQzWiVyEqA+3oU2k2k9Plm/xs6g846/lBJxHL9ztsKmm0BnrUFR1ttgTVRAFvHpfkmSgLGGB/9824DJpxXMiWnExCaZzWbFYPhXnDF6Kh3SB6P3NyVwVdC9/pkf4/UQ4Em3rvbVuWICjGSScoDtOu5MrHDaUSbtN/XtqOptA1ApGbnTSKxOm0KAck4ApFPdk6aRLdC4eRf9XWsWUaOFjkqAoU0Kp035pHaGrCrx4KmgoKBNFNbS55CA==","layer_level":1},{"id":"41a414d2-e13a-497c-8a03-212624dbf5fe","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"引用数据接口","description":"citations-api","prompt":"创建引用数据查询和分析的完整API文档。详细记录引用数据的查询接口、统计分析功能和上下文提取机制。说明引用检测结果的数据结构、置信度评分和品牌识别算法。文档化引用趋势分析、平台对比和竞争品牌识别的API端点。包含数据过滤、排序和分页查询的参数说明。提供引用数据可视化和报告生成功能的接口使用指南。","parent_id":"dd12cc44-0c95-45d5-a726-e7b8bcf2531b","order":2,"progress_status":"completed","dependent_files":"backend/app/api/citations.py,backend/app/schemas/citation.py,backend/app/models/citation_record.py","gmt_create":"2026-04-22T18:57:37.836961+08:00","gmt_modified":"2026-04-22T19:18:18.055339+08:00","raw_data":"WikiEncrypted:qByx+WzXalKNnda2aYUs+Mi+kQm14b3+m7dy1helFRbYWzECOnPEzHl0ufCZlQvKjQqSxHIwqppPXSdvXYc/8Z7buvJqBV/Q/faiP/SBsAH3RrfF2Ppti6QanNvcAtBLcojqJkmfYWFej1OYdagzBcSAu0xIIA7qBG1LwkdNG8crxSwebM8is42SnI+aRvlbF4UdAqHHPdfUvnzs7zIODnildIoR60AvLFeNEWO4prQkFyS16p1YH96SousrFgBu2YZZYrNOOhDXyrRoW3TE6990oaIi3Xe0B7jFtC4pce8JamwzT8B33FAJ6utCOBMUkFKq6l0kD5rN2owZaBtGc4Q66Xcb62y3arqrvxcgE1ox1nAp2D9pNqRy3W1ePW2fWZk4+3co4z2+ANQ1JO8q5eAFI6Q6zG7hM4rvNlL07iD+hZeqd5+vGw0KmjkN4VMqJC5ypFf5UCF4qHgB6TS9ToQUAWk6HWlwBR1DVpCcK1kyGcunn6EiivJyjJLRYUXI66AmajxIzRHtyhxBnA5Q4hZNgr40jHMoUbWHmiQTQr7Ca4/VDS2V5FWlm6K1fN8xWRIUCI3VtH0A/wG+QBnJmF5YeqDZ37Nx9vkiaO+hutXsGHsjwj8+IZO/gpn6UT6QpOGaeqGl37HW+lMZSRUqFFaLg7jxlzSa3IliOyZI7N6xjFFFTrLV1ShVsDcWDg4eXL2IjJ7QfXjmD0vq5mH8mkZK6HbhpNH5kFXDuMYWPIHAXUk39ttNvut9r22RLpkXYWtxE7XoqXW+k+Edmt2eNvZImq/e7mUwa82Cae86WiRtz7B7TJeOf96EvN6EQBg8E8KT5Ckd1exHhFtySkw3tYfChBZfD75zY7tUcZcC+McO1Kf0ORqTZtnNjVnot7wirysiS6WKQ3O2L0CeBUUV7DlmFd8xAgJ8YhtHJKulJ2B0yCCswfb+PR6u9GKFVK1EcspZe5BsT22vlhQyAJxlqiAi9xRk+XaCWoUT5ymT+KMOXdLoB4EvD2ftgXy5GMxZIK2q1QtLAYEu7nOBsq2aNAg9i9IsVJ6OlCN7VMzDinzkoC1IAWKxKE67ZeLq/VfPmCqLKGl0z1JfkfC/kU8KFA==","layer_level":1},{"id":"2f7fa0ab-cd3d-4f45-a1c1-389d5a0c2561","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"开发工具","description":"development-tools","prompt":"创建GEO项目开发工具使用文档。详细说明IDE配置和推荐插件,包括VS Code配置、Python和TypeScript扩展。文档化调试工具的使用方法,包括断点调试、日志分析和性能分析。说明开发辅助工具,如API测试工具、数据库管理工具和Docker容器管理。提供命令行工具和脚本的使用指南。包含开发环境的优化配置和故障排查方法。","parent_id":"2148d7d6-25c4-497f-8894-c4eb7a0d2bd7","order":2,"progress_status":"completed","dependent_files":"frontend/tsconfig.json,frontend/tailwind.config.ts,backend/requirements.txt,frontend/.eslintrc.json","gmt_create":"2026-04-22T18:57:39.374817+08:00","gmt_modified":"2026-04-22T19:17:43.353691+08:00","raw_data":"WikiEncrypted:F3QgleoEfoy16cQggYe9CzRj7niAsR4WPU/tuSJ2vBrZ49vjzLlsqusYQAR0/FVC/Mfa58hrglY/tUSn8LBYDGZlVr/UyLd9/U09SEPTjzLPzOXWOffceGYhaM8E9Cx6c+FHZRQ0fYUDQXxWM6dQF6WQbUmiZISlUpgtOkT5wX0oc/n1YeDUxEpgiCWnOdIBH6SDoRDdGUFrWdqF66bEdplp0Yy3VYVBKKwUy1XVXtLbdv1T5/0TVJO7EtkHdoheIwKCPIYHsaJqBv4U8cMNegSJ1Ti8bsgUakd6FM/X0ybfTay+IyTIqYXj/dS0tWMm22zjLqYmw59+s8gJ7AlgwXhqYhM5Ycwh/PNrDHHFbgQdt45DjAaMWjrjXrbIvM+kXuSiwxW0dEvQtouckPTVohVcRWEPbg2o02/8Y5DzmxpceOC7KgybfaaCQeJHbg9C91itVc+0NvorhivJt105EYs1ndSOla9hoFppywKIbIM61cvqgHjsJF5DrN1pneGmTtYxijl3J/QpJHn5QuIBR8ugoHdJ3EVjUR38vQReVBeDxI/VMe8k/l3EI/Zk7paXexGeTrJmmnZI1I6WbPN1TPS4nLFZWwkA5ZA7wMkdHiHdnt/FZGccFyq8X9Okog2xv6uqH6Kwz3hseWlrSygNPzDr0cFj2EQqDH7+xZDEkAvTuFLHn+HzUfBv0vfZFa/FRg+5/agC9EcMHM+75jEvtSeeHXHOLpuuFcyOcZ0IQP99QdzSEsLaISCINs5SKkzKAMQnJv4PEDo/vFAKBulCSqjXmLeyhcKmCGqafN7IMWUWF5pmZuXe7wL1F6n+x3+RvScmsWND74hQhn0/Sn8kpFHJ5xV/5t0GDZxWybDFRRuFC8oImKyB+6h8CstsERuFeiIjMv2TS5lz8+eb1/yCUkGO9X5mUpJZXfZ+0vu2SkEN3WR92tM5Di/78rDlulwZ4oykT8NzYMTzpX4WlgUfazNKLyIhSoFZcWUyOFcU8IWCoOdrBFn5CSpe0VXbOlP3pAU1Lz6Y016JUHo1t1YE9xU/m7OTxhMexA8jCoSswgGT+Cjs9u+KP1ji2RSyZHQ6","layer_level":1},{"id":"2713d5c6-c6b0-4a38-83f6-56940c2bf695","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"监控与日志管理","description":"monitoring-logging","prompt":"创建GEO项目监控与日志管理的完整方案。说明应用健康检查的实现,包括服务可用性监控、响应时间监控和错误率统计。文档化日志收集和管理策略,包括结构化日志格式、日志轮转和存储策略。详细解释错误追踪机制,包括异常捕获、堆栈跟踪和告警通知。提供性能监控指标,包括CPU使用率、内存占用、数据库连接数和API响应时间。说明监控工具的选择和配置,如Prometheus、Grafana或云监控服务。包含日志分析和故障诊断的最佳实践。","parent_id":"803bfef4-3985-477e-a61c-915a246d0061","order":2,"progress_status":"completed","dependent_files":"docker-compose.yml,backend/app/main.py,frontend/app/layout.tsx","gmt_create":"2026-04-22T18:57:40.355514+08:00","gmt_modified":"2026-04-22T19:18:41.773778+08:00","raw_data":"WikiEncrypted:HL3VqGjXq8A3aGeLxAjVPg+lnGgkT5PNghnzp51sgLDjuJwvzPZp6KDp64sXTqk/PvlUYRCEe6pgM8WKdtus6ThN6y8bzS650UmrWXRgW48k0tbm2PEPd8NIqpzEYwRwyuzLECVz8rV+mgvy+OHzvrt+wEQeT7z1uljirnxeLZWJjIrFBr8Q1T8WQ9InM3Ttnvm7OYO+YH2Mqi6IC38bW7w4WGqApS+Byn7/ZrJhR3B/XWh91FPwq0GRUJ9cqrNuIcYtnWAfVIHWOe3iET8Jw+Un5x7ZRepcJlINGIIMBE2hO7UsbC/K3z8rkz7mx6uoPTPpxkKkgoQQ1OAsShE/wpHpRYSOJEnV26GFo4bXBTk6xJYw7daKnJVIYDSqSrtJQI4yPlTR0OtJescXSLobznoVSBo+L+PU/nRvotp5KzX0SUpbkqNzGychqcBuJhpS1eaEP0cTBjvjC4MJ5Lsye51X6aOdYYC7tBWHxtgBO93tkpcIRlHk8Dfmzh8nKcD0rPHYGnaeFpzXgGH7ZfabAwxiMhej6OXWsfnbHGg4gheWhXfokxCMKkFnzrsYcuFtB0BqUeadjP5LArbJJGeyVEZovmPxtzQ5z/ayxJs+oyc0oH2SMXCFtIQv2h03ZSOCkohVRs2oTJnMI2p41dY59B5qiSOp+0qwxTWL9NnpqM2gjlLZhcgwF//R7ag4ndECWejInOcA9Ayvx6cPAuH6uEoFTcUOCLaOZ/u9T8890S5KHS7PcNM8dEewoFviz/mRiernAhd08l7a9lR6zck842Ywi5H8+fuuHyt64Pwco/+52MhD01pkK+HWSR0EqPc8URlkOKjQSW0jd8E/9ow54aZA0+1Vto3d+Lqi/tAOlhRF34rIJgTEN3f/udCEVycON9KNtssYzZVNPdvTkvzPYdUHIcnYmz3jbQhnYnrYvuaWNvO0cPISLZI9szxLP8IhmUc9xT4U3OvoRfFka8TABGicEUAF6vpH6H2rCqnWdBydaTpRTa3VAR7QJ+M0aPlzeKov93eljMa/djYoQo+w8Rm3A9vGmGXJKfWdZobh+fQgc38Z/0yRCHnIPnY8o6CDBfwbANfjDRpjyVkqWq1cuqYNnMul/jpzDS9vMSbMnefISRuF0kH8XS5C7pIB+WFn1vxeYFBYED7ZI4FD9pxxS6GWGcYOXEoFcqtR+lEiMdj0Q09jo1nEuMKJbPQre/RG08O0boFCzF9KOSnS0UA09/82vFQyQZKHNwpz7OkZZa2cX5X1L/pdsDlDRoIdp2lzyAEOidStaIWywEj11EYVNbG7sK562p96Sr15ueIXP0s=","layer_level":1},{"id":"c8a468af-2982-4d9c-82c0-313b5d2ee89c","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"第三方集成","description":"third-party-integration","prompt":"创建GEO项目第三方集成的详细指南。说明新AI平台接入的完整流程,包括适配器接口实现、平台认证配置和查询逻辑适配。详细介绍新数据库支持的集成方法,包括SQLAlchemy模型扩展、迁移脚本编写和连接配置。文档化新认证方式的集成步骤,包括OAuth提供商配置、JWT令牌处理和权限系统扩展。提供插件系统的使用指南,包括插件注册机制、生命周期管理和错误处理。包含具体的集成示例和常见问题解决方案。","parent_id":"b2bb2e3c-5661-497c-97dd-15bf6ee8b7d4","order":2,"progress_status":"completed","dependent_files":"backend/app/workers/platforms/base.py,backend/app/workers/platforms/kimi.py,backend/app/workers/platforms/wenxin.py,backend/app/services/auth.py","gmt_create":"2026-04-22T18:57:48.68499+08:00","gmt_modified":"2026-04-22T19:19:17.361215+08:00","raw_data":"WikiEncrypted:WxCGFGSl9zR6IDeUdkqKNACFcGLyx5HNn0UQzHtkOJVoVN2BLrMtPbbNkfhYYzEQGaeK3o4fBODff6YTXKxAV6HYhCHjmdXJqBaBsEPBB205lzDAllfBZL4/6ljz+/HZSgaWAxPECD1m2GUFvjlKHTSXEb0x5iVOg9R3VDjYQgKl1SF3S/AuJj7QBbGiwmkyPrqO8+NXDlKH7pI3G6me5ulZrK6M85KSH8nVAnqY/Mvjc6UGQJBwS1QyKJVzzK2JwKGhQSSLemxD887b22bSe7q1IEDRYcpqkbfyICB0zF1Gg1h/cAfQgzjiG0+MQiC5CF3QwkFteFbN4KZDEjCTcbIR+HqI+yCs8Wue/MwdoTYQQKpR9FyClONZn5T/UqHQaVT8SemYF0QC/kawyEZFH5Tkj/6RwS+taTWw1fx2QC69xQlW04ManahzsBDwfz2W4RkufM3ZfW8HAN7SorY7oYr1Vam2p2u/93jzHmi7PO/Y6VphQNACzUlfRYsPALVBkiqpN4TIiicrjOvhgATUxqpku2MrAtbXTkiuiiQBamK/XrF4JNlh+79VGoHKWniah1nvo+dzl7jll4j0woKwWKIzmfPXLS68HekW9h5BH9SUeuyAEW/pvnGAUw8Od3CgsEmap86k42Tg9pRZC/sT9bCWUbjO6ijJ9IPAgWE6bkLCu68L2BD1yKE3gfLg0hJmELn79lHaFCUc5jlRdJ4HEsalAFGS62beLGkude98NvSY5pQoO9jbTj3Da8t6Yj8p97WtE73vmWW9Pu/YyAtxJH7Cdwvv9mbvLYVnLzUWGwsaiaXmDJiqfSHiOrHQNyonHQa8N/LYrbB8qBSUmLyBUhgI1YfYMa+zNfCaeHvRLlmVZpui5MOegWen1Z61WhPc6WoFYHyFAdgS7k21cC9jVay3u87SjSzooFT3MJjN+yMIjrQ5U+tVFbiBQK7IGPLFHRmvFBrBwSFVBI5VnCxn4piz7VBp7mm3e6N3CJUKShQWQT9tmUIRXLmmzsKTit/kRAUrycFjixIK8Hm4kSwtVBREbX3opXE6clXKGVB0bpSDUzB8Ae7wOPE8Gqo/ewy3kh2mdNnvI3+MfOOgPc+Ovqu3KGFBH/MYKl2xIUGdYtEHfHRCIFFVVknX8+Q+tfbkmo/Tw+kJfq67IQO6VT1WjP/q1G3rOhp0Ah5h1wmxVfdIaHSUOT03yQTBm/tqCXlgUW7rZbTc2wF0zdUUWleQoq9pc14c0F2SNFCSaQNLhxvfeC2aH8O9nuZi+kVb+GVV4vWcxcz/7dfTkXpogDwy6uqVHySe/TAn04uWlCabYSrA3ahnl0VpBmalBU1dtaTG5apgcCJ9PULyHWKf+iW0vle9pOVgZQ4oUv0vXxDpZQkO1SOBCfKG20swUEItxbAxIVoMowR52maIRnCKh3g18NF3JUZX2ptDny7A2gmsYWU=","layer_level":1},{"id":"d907a8eb-795c-4060-9cdd-50d31cf39be3","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"前端系统架构","description":"frontend-architecture","prompt":"创建GEO前端系统的架构文档。详细说明基于Next.js 14的应用架构设计,包括App Router的页面组织、服务器组件和客户端组件的混合使用模式。文档化认证系统的前端实现,包括NextAuth.js集成、会话管理和路由保护机制。解释UI组件库的设计理念、组件复用策略和样式系统配置。说明数据获取策略、状态管理和错误处理机制。包含响应式设计、可访问性支持和性能优化方案。提供前端开发的最佳实践和代码组织规范。","order":3,"progress_status":"completed","dependent_files":"frontend/app/layout.tsx,frontend/components/,frontend/lib/api.ts,frontend/lib/auth.ts,frontend/next.config.mjs,frontend/tailwind.config.ts","gmt_create":"2026-04-22T18:56:47.082624+08:00","gmt_modified":"2026-04-22T18:59:54.994275+08:00","raw_data":"WikiEncrypted:rJ/rIw0gVau8jPGqKFBAsMR2XDSFypkKHZQ6YBOgiEA0UOTwucBLEBMXoN0zA9Bs5lWPUuoWW2QeM8S5V6dxWDHhuxV1hyEK1ZWidiLWXQ0Ty3myBMpAD2c6K4k+WBXTzbB/LSiT+eBspY4JDrFCERTHesMlZxmLkXoBxHhs1tNBUepc5vLakFhznlq0LnlxeL4rgh3sn4K3X8SUOtyfPLTTiHiYFX1izFe8OECB2IMK18WRZ6wEf8jE07MjvB84altM8K2LDZJuJzb9sVMHScnXdK5tj0h0e6umXrJaGJBmvoTYNrHRS8X5aG6wxHFk2++zjoVcgl0sn/xqIsLYfqvsbh5vyhZbve/rnSnstsC+sb3Y37uzU9GHpU8FurekIf2vv+ay2i8fI8+VjXnE+QwD5CCdilkDU/9HH3AB7DhbDIwtq4BCfsOfZ43Y2qHzi2YQIjEXtFPC1VmHGRHr8xER65CLZAA8mbMjuchuGtp3BACUF1qd4eAqJ/FgbGOAK91hIqJ5RCKNCK94pbyxdxHrk0LQZ5Rf4snzR04i3q8QgjkGVcb5g567ADjq1S0CD6cj02MH90QJKtQxxq3S77qC5VvUfuqb6qSVzyBIHgjg5XOY4yyA7M2hklmuVlFPgpiCV+xb2G0p91QgoWdUnfUvJ1jeyMVi7sTqisb6pzW4v+DOhMfQ9U1z47f5h41KqZU+i+xLwpeOZYvm0UNtd49SW9uxOloegNujRtGRYoooiPmjed11BdUxZfPR4zr4ZOqMq4zjmz5Enx6kM+9X8hZOPnVQ5CnZpK/WSKI32z3A9cFhmwVRLL2c8w/4XKbLREhUc7DBaViUi8oFpl9P987cnlqqptMKQmCIZ0tOKbkICKr7JfWGIAsxT81oc8qS9qUIeXlBpE5JdUQp1Ie1EoaX5wxX22DELkU75cKmIBHu+67dOrltjMRSKY3ZBmjzGuNgpHMZ1/9X8mFHbppwoTxTgbfBeYCWbgKe7rOhN5mO0h9XscRtoFe1djDYATYo7A09YiS7rQ2wP+FA0m7wEbLvAesiRZYI8ZDzVOgGqdkP7olIYqRcgjkJ3ZEYVOP/YwXprUfvhj40s5uHRQgN1DkVo4GaV9bQFpSHYyuVvJxLpzL4PIa1TC6wa8n9zFrUoUr+93RnWxM9L4G2oS4S54a+tIpxJWsI5jaKT05KwrFYm9u3iOaXy2gZsoxdtiHRE/Esu3FvYkFxZpCgJXBU0L5PL5lgpfZGzQxP6184e3cD5E7zrBWnFpTCdgoFMXl1q6lBqJQVQcpijAleq0R2Amj2pwxLHge4ttMUkLwDlNK5xdQgith4x1GgzvXgndvlRn+E0U5SY5IpqM88QcfH0T3V7T0CEYhYBCSGHolS/i2X7yPjY7JlhGmEgHh7D0ZXq/+GRLa6y+jz0mq+BjNauuMGqTkhaZbR/M85ZNbyJ+s="},{"id":"9eee7fab-6cd9-4ef3-9415-2f8137f1d199","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"数据模型设计","description":"data-models","prompt":"为GEO数据模型创建全面的设计文档。详细解释SQLAlchemy ORM模型定义,包括类结构设计、字段类型选择和关系映射。文档化用户模型(User),包括用户属性、权限字段和关联关系。说明查询模型(Query)的设计,包括查询参数、执行状态和时间戳字段。解释引用记录模型(CitationRecord),包括品牌信息、置信度评分和上下文数据。详细描述查询任务模型(QueryTask),包括调度状态、执行历史和错误信息。包含订阅模型(Subscription)的设计和用途。提供模型间关系图、索引策略和性能优化建议。说明数据验证规则和业务约束。","parent_id":"7c2ac186-ec90-400a-ac1d-b3b7ca2f01d5","order":3,"progress_status":"completed","dependent_files":"backend/app/models/user.py,backend/app/models/query.py,backend/app/models/citation_record.py,backend/app/models/query_task.py,backend/app/models/subscription.py","gmt_create":"2026-04-22T18:57:02.317816+08:00","gmt_modified":"2026-04-22T19:19:19.281909+08:00","raw_data":"WikiEncrypted:klcgW2PbPxJambbKMzvFtzxL0nPpsuPMPxr5hj83lS7k/WfePQWgQNKbEysjyVqFS8lXlJL069Py2sSf8yXxHJzOE+5qAqcKClz711a5h2iXkF0al3mIdEvPGsZtmu7Tz91D+nYN6P20/dGDD6jbfsmIRXLEv3fpccmaTd5XoNj9Y/QT7a0xg+LkG6A8bzQONV8mQsFJZMj512PXdrzG8bSiiAdWa7PEbotJVKJRklAdLNFr4FCsLXLsdS/G2RlAo97zi5J4mpx26Q7SGM1kx14TxsQYatCIUYP+iZ14NDPPPp8tQ+HGPLEonVbYiRiktzJo8Iaqbcsh59qHBoGZBndXEwalDBXzD3sIbYrhxlOU509HDe43hiq+M5eC2SEeTfGdYZ412t/aAJFPEfq3dRl0wa6Oiw4t4rox0s/f+rCg9Sr5yX/vsXrADGwowbhqt/EdTudfsdha7MXN3Kn9e9TckQ+HOqdgqW3+RnY3B08ijVPZchn/Y7XZvx8GujUHSuM3x7EDAXegqkPwkfR+hl4yb4BuuY5AC17g3hvn9yDvBN3m/Ky7mJ4Q9qvXfFaUqDE/FxwPWjugAnVOgAmWns1elVLUS/2nol2BUAuyt1w821y7+N79TkQ07amTWILYvO7I/5v6hStaHk5+ftwpaWSLofuk3Nwbuab8ULq6lj/Tz3uWkEg5/nIIYGVDSN2y9JKgkNta0J9Y4C25DpKnPb2HPfbnD/315IEyxKddS9DpOHC92uT3Ad5v/X0LgVsefqUUep4D2mVUeevDE2o9NuUqYyWYu16AL2UaQOWH86Q97+Accmt37g5580pjdVyzcgVL6Lat1P4W42Nk0vOIncIdM8Bt+iWUIOjmIWDK6nUytRrluJ6RAGeewol6Eb8eMy65WkJ8SsDWFj936G3imq6uoKEsmn9kHznKIfsvt/p4IAv+IbkliuuV7/VNQdN4jgfgKyRp8b4aQd35Qrv1ypuTdf2HQS3w/t3nb8hBriaZZc8a93LekZYaGpvrws/aq3ESXMU+csJKfWhEGhH4VT4cjy6j+jHgihUuUWhO1X/Kpm8iseqreG85CZeU9woTd/nPIayXO14kUEfNVL1ih3p7GtsFGDYpr4EcPU7JpPp61gLhfdpHydKVDLW4eaaCuTR4REP2Vs2BxiwN8GCpJcCbpPeF52n9qB1DE3uIVBITabqC0jiIHeVfb8caysKpddelqqLNn4GGL7BeUFq4RKhlVTmCGuBRWABBDEhDRHXsScje6Av8bOxE/QFVlZmFE8EkDM/WhG9hB5BQ+8u4pKPxsL3/n7xyMyrBnO2n+nTEGscgwlEnpxknYpBTrtZQgU5YB8KRGG+VnvSlbM95vPmdiXS5y7JM9ftKUbdxgnxOVrM2ydbK+5IGvaNB27szvHBbvqtxiY8lXfLRhMYcQEIcD0AM4Xl1qH90xIrHF3lHogdPgwXR/UWGRDWDXKVUEXGRLQHTlRTCJ2oRBGig4FvIztUbBVqouwtJBqoGXoMET7JbuNkxdHs7pfsL8sV5FksVAyNxvV7rRG5QAMaIvUMdDT+XAhtcrNagCHcb53sPxuz9ldlj9adP1H+FxOw7","layer_level":1},{"id":"d9e45b2a-6443-4a9b-8ed3-4c3c04773772","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"UI组件库","description":"ui-component-library","prompt":"创建UI组件库的详细文档。说明基于Radix UI的组件设计原则、可访问性和一致性保证。文档化基础UI组件的功能特性、属性配置和使用示例。解释组件的样式定制、主题支持和响应式行为。说明组件组合模式、状态管理和事件处理机制。包含组件的无障碍支持、键盘导航和屏幕阅读器兼容性。提供组件使用规范、最佳实践和自定义扩展指南。","parent_id":"d907a8eb-795c-4060-9cdd-50d31cf39be3","order":3,"progress_status":"completed","dependent_files":"frontend/components/ui/button.tsx,frontend/components/ui/input.tsx,frontend/components/ui/select.tsx,frontend/components/ui/dialog.tsx,frontend/components/ui/table.tsx,frontend/components/ui/card.tsx,frontend/components/ui/tabs.tsx,frontend/components/ui/dropdown-menu.tsx","gmt_create":"2026-04-22T18:57:04.216865+08:00","gmt_modified":"2026-04-23T15:22:23.573963+08:00","raw_data":"WikiEncrypted:mOhGqVhKXtp0S+QeVzok74WypWJ7klGHRH+KdUSnimLTYfyBjBDRPAzXT+gcOXfQVvcrNlnW0hq9eH7zZFCqkZsBgmYKEU+paWYmItwEmPFSm8j97/vwvs9ugP1aTV0WKgu1SgAg9UjbHTpC/aH+MMWl8IEcuuqWfI5XbGaUR87WXcEDmdrb3wUoUJRDu/cGjCf/fvmakwSGbuyVnUxAKC0b89qWigFSx7MqlY8I3hXqAtSNiskE28duoh2j488f5d1qN4KsTvxvRe26wRYqlD4qzi7WQGBZQUoeoyVRA8PrJFhxeH6clcVYO0kStx160hPPrlpF93ul/lDmdVwrTZfpWh5RRY5u02+lOo2Vcl73yz1ixYzt/OXYaenA0jUTFVdPJ2OcTZGDQV7xMOPFPX3iFNKxuHY9aks8ARFEUs2BtyH+KlyKfPdKqDAlklqIVzP4MH2E6uDcvYMSORu7S1T+53+R9br9Cfu1PSZkuVdmHNqUuKSLA7pMI1QiVYXtwk2GYmRGYUH7geeQddC61wxpCG1rXcVzBMSS8LxtR3SSj/9VQ0v2YyrqKzRh44BKjm+ojKbz8rNcf69UZ5Fu4dU5kGqXy/XWbFbSmoUmrWXnZ2zWPhMIgHAIsTe/iX6JC5Q3L70XVbXk4S/ffk/sKKtdV7XrQVmVPhSquUc7x1RcfMyLVgxyoFEOwwk9LfQIPE9n16lNCvDWX3UuK2TDcqDbwJQ/FMmjaZDilRQFs+8MA5I/UUtC5CyzoOiLRXvPqQQiqXjBs6jefxc0cpGAJwUkaISOvQum6WtKWK3y1CphRMH2hkB4bF7NgyOm8z/0JXMSpcPR8nMUY4M8pW9MZYQEL76sWcQAD/oiWlgAUccgiRPnCiU0Xz7/MplIj0jTRwXXzc8arUGle1DmiJFEVmztGZOQsIGDqSwKGG5XHEdLyKe2hWHqBGRWkqZrsBqS8KrFUWk5lefvdDZvi8ci+S4wdZQX8IDx0siYw5cfdMlilWuaptf6qf/qEVaIO5DX+MMGPmGBz7jnyaQfo2QWlpybbe/uLTvhZTe75uY9Revd+DPo+zgmDUmGj4hSliiZx0smUxDq2wMZmKLx3x7N8m1jdGgqT+LVQAhdUcmE1Qx3W7e51K9wB4PN3L8k8bDewzE25kuU6a7QpDLdn5lSa8n0E0Yug9cp3wgllhZVFVmyjVr/oC3c0I5z3elvtrYub9jPeRtR4AmW7w2RPcUt/8f7j8aMH/1lUBQk+GL6OhXAEnzmav2Q2smdsQqWS4cVj/FV1lrfoV+peL4fo5CxYMv/ZJSvbJaFSpBOPzf09qJBxUptVeosUyAUDv7YsJdUo02ZE8B3ZXZGcpKGKSRiBeLQKjuqkck1rBeJK4PnEEXZ5vtz2ONe8tddj5qna0a3","layer_level":1},{"id":"178b681f-d013-44b7-aef8-dee7ca8c22a9","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"核心功能","description":"core-features","prompt":"为GEO项目创建核心功能概览文档。详细介绍GEO平台的主要功能模块,包括用户认证与权限管理、智能查询任务管理、品牌引用检测引擎、多AI平台数据集成、数据分析与可视化、报告导出等。解释每个功能模块的核心价值和使用场景,如查询任务的定时执行、引用检测的置信度评分、趋势图表的数据可视化等。说明功能模块之间的协作关系和数据流转。提供典型使用流程和操作示例,帮助用户快速理解如何使用各项功能。面向不同角色用户提供功能介绍,如管理员的系统管理、研究人员的查询分析等。","parent_id":"1bb55e12-24c4-42cb-8f59-ddc303460d45","order":3,"progress_status":"completed","dependent_files":"backend/app/api/queries.py,backend/app/api/citations.py,backend/app/workers/citation_engine.py,frontend/app/(dashboard)/dashboard/page.tsx","gmt_create":"2026-04-22T18:57:13.330097+08:00","gmt_modified":"2026-04-22T19:20:37.649775+08:00","raw_data":"WikiEncrypted:luoNp8LvFa7zGThvIT9T4gfD6KbzJyTAydbcRfVv0b4BXBAF9G/unmbHb0x4cm5f5JJeO16NqGe5C5EiggSB7moDpXZy5USSfpQ0OUKuil4F/RTioDPMtSUudIqxEjBd5ipsj1OYjuKwvCZDE5FVOSWKxyx9ABPAcj2ixa32ZPlrgZPKHD2EYG0qdFR1nrcOheMbdmmK/1DGPMM99yCcIRnhsKb5QMmqrZbFGo/SPCSXi/Ykr/zd7+VtVKLrPmeZHpaF0yafvwU0Sk0I8ne8YmfwUGC+cOZoDCI+UsE8IukB5R7bnolQRLXvVZdnHXG3b2DA0X4DxManWdKVUyJxI0KTcxcdI8DrpJB05TyoF/regQH6cLt9xm5r6oC5exXEvwhmfMoZVqZ2jp/7LVs83k3vKksFtqXA19YrxFliE+fS/7xxjhqFqC8gfV8eLWpHyIKgVobBj98SpzX6tRTXknjSX2kDpfKG1ECCqYBxGl+EcY3ofgMb9dgxDxdOaB1JU4iP8j0YMHe0vASK6GweE5UjId3SQsH4Qeng09dL1TY2uNr/6ZVhraG1xTMRFHeZNdCZtAWnUddTk6fiDJmF3zxyL7Wvgdc5vmSbfg0rFxTdxZEiGFHJoEQatTaUtv+NOJGQtnOuYzrhs6G59N5Bu3hnsT2Umn6jFryaWwluQaphllqim1VwA12J3iVLQZFZEVBhalhF5GQBDtl4zt6GFlKucztFwPZXIZTYJavPQP2xpvFDInehpuQcHilp3yHcA8+ucs0ani/GPME+nWnxyEDPhfu/FHkheybrXg084bLJG7E+o9XWBTlbISgl/1CuVNeWNj2ph9KIS+TAcq3NucrKast8dNM3bayIymMoemWvEcvuUjoRlABuJKAeAUQ2q5dFWVAZFvlK8de95GljY869ODymzBXnPjMOSCmHwZ51ImNKeIgHybmDkzT72uKyQcN8nty9DJKz0k6Kq5kib65fLCcoAEe/w3d/WVpmBqxU1Uh3yD+z1nEm++DCQTmK1jmwwLT9krps27ULzjOvLuJz2cJnCpSFeB2fBYxH5Wjbp3UZFwDWJWan/9xl9bIREOaZ7mmAz3b7YgA+106K4LV/Y4vBjtitwaM52IcTqvh0m2OKpQSYopXYE7hsG/CXE/MACxmx37ut0KpTFaM7N2GYOE8Z9hIsM53ueQhPuRvk2Hb3E8xbBs3mMtYON2ubkxuPdcQJmCKSHZTgVqD7NVWXIyDL87TjV3YTbdGq6KlIptH7MxMpAvL03xq0ApGXUlF7gt9qwpHG/tuVSmjPBAUAEXRZ3bC+1E0tvaaIPWgP63+hhl5S7970UrDCXrtzeN3l8mbplzeN8BTm9brd+gziF3NKUZgA2yM/OiHjy2jbsu2NmXU8Q3f57Q1MnJglrwSgciwgohkp5Q5XIBOCwyJuIcAxO6LJWzaXB+WOrB+xk7v3h8qxpMdfHMOLFTY8M5Rf6MoGtJPOtFpc1+0Cjg==","layer_level":1},{"id":"f210509a-2381-46fe-8c22-0ed768e6ca70","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"数据库迁移","description":"database-migration","prompt":"创建GEO项目数据库迁移文档。详细说明Alembic迁移框架的配置和使用,包括迁移脚本的生成、版本管理和数据库升级策略。文档化初始迁移脚本的实现,包括表创建、索引建立和约束添加。解释迁移命令的使用方法,如upgrade、downgrade和autogenerate功能。说明迁移过程中的数据保护、回滚机制和版本控制。包含生产环境迁移的最佳实践和风险控制措施。","parent_id":"243a1a45-d31f-405e-a3b9-694d2fe617d5","order":3,"progress_status":"completed","dependent_files":"backend/alembic/,backend/alembic.ini,backend/alembic/versions/488d0bd5ab01_initial_migration.py","gmt_create":"2026-04-22T18:57:14.161329+08:00","gmt_modified":"2026-04-22T19:20:15.066432+08:00","raw_data":"WikiEncrypted:veTYwq2y4io5qXerCTrkkH9ryxDJ0NroguMukGrnBDccbI7FhPTNCbxlVVf68ZQ7vvUzAxXQ43tY1R33KAEW91uvBjnohUVl7Q+D/Ap3SUnHDpWQWBM8qdBbgPmANzeAhinu9R6LqaM1BaUXXk7OeSNamXR7nrg52Su/KTt/eSPCFzeoio7iY3vORVHeaHpWs3y+ipYf26jobCXk1cLVjF9BgaKQ8UIEk4JobP8DZM0dSC9SqfPLDnh2e6k9t39q8JNd3MaV90E75j7KuZKZZJemgTfwdUTe5c8Bn5uNxCf3TK5iuMxVxJXD1PTU+9tadOMcx1qXGJ3cb3nuH7g/03z2UrmsQfIRf/cZLGBqAdGIWhQpJph2OlUELy5WTq8t4R//c0t+IUVTKieR2A1E1U7uGurYXL5ymVtiLnckbHeLMEoxbJYmh7d4xn4mWF5hcIhAZoHvjqh+shIGNwCfXJQGswpnJNML0vWzQNhsJ1YcTUnHC0P8Y6nj9VmXMpUYuJLWuIRuqBS5lkS7ChcQMXO4wfad4N4RMHX9jLYytT/wOoty1KlEalUzriEMahdDn7h2DsLzOJL35SLwpVZ4NVnInvcE89IzYO4wyJIz4NdOfBYseoIv20Qv7qO8B7xhRtTudUyynfaz1jmkT8F9UgZFcdBJqg08MH6VdQSdrlKqUGSGsFAxtB9OC7yv25xznJq5n5SUwpLmFNbQ1evjOqqsogzLg8vClnH52aVuE6TfQWggj1wDjxG7jUj/W7mHSOsDI6AhtMWrP+2OVg2Wx9Bab3iLivdVe+mg93LH2FvF3a8iAdcDRseeNZj2UeJJfYnmzpsRpm+CeJo8Te1ab8UeOeGebDsnVTTILuEg+qe85nTuG8+PmgOs+n4r+781gUSlyoOO2Cde7QwES0X+oENbplkkSZM719jK09dcnbG27vqoeh8rTrzO9ygM48IjQzZWUJCnAIP4Y7VVrcTBiyrZhRLikSrVvSCvWU3K7KW18pnOJh1narIx0e6w+bctledpWsEGZJ9fwk/ae5P5ZvACxfM/2LOdDFqshVbr6grRIeSNNf+tl5nDunlOTUEY8fGNt4lsr35UgKwPwO9TxACZGCsd25DuEtHum9DU/GYli2+rgNaOokcc0Xtw/R8OuN2pa7ohiD6ACjJ82m0kKC0mBBymsNAdo3bDXv3yoyI=","layer_level":1},{"id":"aad61788-1dc9-4682-b743-47188d7aecb6","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"引用检测算法","description":"citation-detection-algorithm","prompt":"创建引用检测算法的详细文档。详细解释引用检测引擎的核心算法实现,包括BrandMatcher品牌匹配策略和CompetitorDetector竞争品牌识别机制。文档化置信度评分系统的计算方法,包括关键词匹配权重、上下文相关性评估和结果排序规则。说明引用上下文提取技术,包括文本片段截取、语义分析和相关性判断。解释算法优化策略,包括性能提升技术和准确性改进方法。提供算法调优指南和实际应用场景示例。","parent_id":"7e66719b-4a8a-484d-889d-10fdc76788bb","order":3,"progress_status":"completed","dependent_files":"backend/app/workers/citation_engine.py","gmt_create":"2026-04-22T18:57:14.593043+08:00","gmt_modified":"2026-04-22T19:21:33.125768+08:00","raw_data":"WikiEncrypted:qByx+WzXalKNnda2aYUs+KheFrHbXoPYZO+RPCaekyWxjKaQvamRZeOm1WgroVS/6iDS9zNWvth+zIYrS27hz/NZLNtt2wOUw9iZG139S+OGMVcZB6KjsnlgG3fSA05ZEdrwDfB531npeEpy2DodlOkcXOSBrgCwkOsVexBDKcWLpthBpfOCieqWsVnTfFkeXE8VvMLROtjojlr+6So18lnYzdEekhgU4Az61W3QEoXC7l+uPBNpRUYZY9z5nLzihT1o3I2bDEfAACTaa8pU8izFltiEd4qID4z3TepI7IuVr7oTmPOaD4MzHULu/4RaMo7/7c9Ql0uGsFrxRb3QFXiiH6QZN++2X9EDTl4UjA5k2E+OTcO2UOZm2dV7vi51lNAZwI50VwaIjtaC4LrPpX7fklk3hQ1qbw4w0FPjYlraJyO5MLseOOQXmURr5BCOhJcWoJmwJadtfh8EAO/9XRK9CRjr2wpAuL9kan2Vkympa3UCszQwVox0j4IkjJNYlG/7UEt2ixgTU4pQi+CAJy+8tZGJxY1gk1MCILniaClaQQImJhi6TfYfWSVywTFVltVcxPd7kMwK116KQmtoiqet/DRC4rzqeEbb6w8I7HZu+VwSR1TXSN8teXJTRMAFEgg9vh+vAOconlX3LzcgvFPohvC+teXJqTADp9XvqcC6Xh41G53xVAvDteT9pJCZHMZsfgh0bErBFzrvnwSObsmJEkvWnlDRN5tdVsRIk9LGcvaflUwWHmIof5SJj7wO9fSm2BN0gW+VA9nbQxyuHt8YqvNR5D0WUpbY1/UDw6IDhAxuTh/6yyVt0HqirNDXslgDardkMaphsQs4xh1fShhK/PcG4y+xX5VsoXIm/tjfGAEXYIeGOHtVuldTaCxG32uSnuT/aFQh7H6df2Hhb7c576oZ6QbZ4HyiG+Qa9iZr6deKWdGhtuuUzj3FBAXLtLont+yuXSCWi/AWM5MOMVyScyci2LKIjH5haWCCgS4nm9tLvifzUgmdeycw/Dhve3nrgdkgO+bIRuUQxXRIxZRUdxEr0DKIa2tEKVeorc5pIX9m1bErC53nDhnrLBj4/ZQjHp33XcgGQ+4jAfmWK/AN+P/SNbyF/K6O0qlKXPqQk/w5bOZWCtcIjrDLhyxZce/pYHOGotrSGaKOK56cJA==","layer_level":1},{"id":"ac0658da-7670-4e41-9e57-02d9d0d50680","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"报告导出接口","description":"reports-api","prompt":"创建报告导出系统的详细API文档。记录CSV格式数据导出的完整流程和参数配置。说明报告生成的触发机制、数据筛选条件和输出格式选项。文档化批量导出、定时导出和手动导出的不同模式。包含导出进度监控、错误处理和文件下载功能。提供报告模板定制、数据格式转换和性能优化的使用指南。","parent_id":"dd12cc44-0c95-45d5-a726-e7b8bcf2531b","order":3,"progress_status":"completed","dependent_files":"backend/app/api/reports.py","gmt_create":"2026-04-22T18:57:37.837258+08:00","gmt_modified":"2026-04-22T19:21:24.246329+08:00","raw_data":"WikiEncrypted:ncgUburcUGIQoFYRn+jCfmA+PbmqRFCE8+U3jYVfh2v8RywptgptFxq5lhwZlmleN1AF4e6ox3Zeepx7xqM72ox5n+mZFIvpPAV03iG0mffmuvwBURuWuzG3zvukYRbxLcpPqC6v5q4GXBz/rMTsxy+K9HHfwtlYbga6fioIcJrpFn0O0GBCxvse/EcV3UFGM+LHRaRVZqk3N16dHYVOsIgwcqfz+E1qQhOc9tSvlN8OuLBl1z0ukshjGXiX/lY4xzl1WSrFXAIsz6WAKGLPlkePgVZg61CHsK9/iXfq1HIs4Mv/RYwTtuMKkyWX9+6LO+AwRjoeHSIVgJsaSwMBS+MqugD6JwGdLsb5/QGcsDSVaN1zVhbjD1WnJ01uK+tBWcULWdYGAkgo7z9A/YQJsV8PUfXfdZnfuydZi59mopfaX1AYtCXeceMgKnzkAIwjWUl72+Pwtvdke5upjMFgEvoy5NrCoYwpZJBePLoPrgu0kURoy/vWGZ77WhOuGQs2/cn/pk4vCFes3r34gglCIF0tHwwh9piyAabHid5VZ3EIuOlhBHL4O9L6zlAgO0opbo23bXt7kIR8MIjEqb8b3SoUIGY7PElOLeOIwJiz1LzOnccT84S/avMIJR7fgzi/me7mJyD+8h7mZ3GY/AsbFhi2oh6bcqc7U1UcO40wTqx7myMlwrMOo9zRr+aAfR/lqH6YwFw89kkxflBfKQ8X7UwPI/vFeOnYkPFjj7XzgHUtclkOUbxztMSSnhxiBMGzbNf6/hnfqT9O5xO2ZF4ufJ0t2Ci/vTK7mqMRvj6sBAzXnGCig4zpnDKbOrVJnB53v6AnqjeFLvqUCGI5Aj9nn+g4LDMtPzzDhfm/HtoxVJjclFmC6FQSLvHlh2FILylIvVxzY7rDDuK3bTiuZFz9Hw==","layer_level":1},{"id":"7cb1d921-44ed-4e22-8bf9-baba7ff8b7c7","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"新功能开发","description":"feature-development","prompt":"创建GEO项目新功能开发指导文档。详细说明功能模块设计原则,包括模块划分、接口定义和依赖管理。文档化API开发流程,包括路由设计、请求响应处理和错误处理。说明前端页面开发规范,包括页面组织、组件设计和状态管理。提供数据库模型设计指导,包括表结构设计、关系映射和索引策略。包含测试驱动开发(TDD)的最佳实践和单元测试编写指南。","parent_id":"2148d7d6-25c4-497f-8894-c4eb7a0d2bd7","order":3,"progress_status":"completed","dependent_files":"backend/app/api/__init__.py,backend/app/models/__init__.py,frontend/app/(dashboard)/layout.tsx,tests/conftest.py","gmt_create":"2026-04-22T18:57:39.375268+08:00","gmt_modified":"2026-04-22T19:21:46.916012+08:00","raw_data":"WikiEncrypted:5RlNBsIi2/3o8ATlHuzaYHdvL7yJfTe6YPwFoSkO/GgZuVYfBQkVBn+1kZzpIDRMGSVFSuoDX3pyax2f9XzBxnZshkSCM7o1L+HEG+sgCns6EUSGCL3KfZi4emTF8vVzG/3m0dhVOWuoQXf3TK1+2Aa07EE3HJ86aWB+sLQgQyR8gNqS+MsRztbE2Am9O9oDis36vAh+tGO64VIsi4ulSBpI8D3+dRXcAI8RsujwrZpp57UaW+DyGg8Jkp+WqqjfbgBGcdkno2KfRFyWKqKLB1g6yKJCePYymOK9DHhXbdBC9mKr7EWc8T394B1klPsqywIZs0i3xy/Pr5FAuzklEn/8jhNkYpmgcVvXaZ43AUVTklSOgSC0cwvfeHd91QuNSlfIbIs9Xh0pfhmz3XAts9WErkdoph3YSvrNDMuXK9CMNhlu9XMkMCQcV7ac8ax69JKW4uVaVHcjbU7PbzOeQ7vSALRtfK0zhIWlbQ3za72G9FvDogDqrLfOBzEXA/cyXMdpeZP/ICE7OsSCRM/i/yU/K2YUAWnRJczSn3cX/8lGIDywmB0jU+IL4l7eteQD1Ea3elS3ne3N6t0WqX/T4jybDWQQZqz0+gOrFuJUKTQ18p+2afWRjcYZnqg0EMvXxpXaT5fmpQAxMA89c70flWUr6l+ZNckhODBS1Uj27vp+ECTFfhbNt2CmqrDWIfdobRz1gXYkZI6LR+xgc598+CJDjc6zizQcychGbsbPqawU+CCQfSVqPCknZLlSyJrMF+FMoe4jm8fpOVyOOfqGN3N04W6++aIiU3eZIMB0F/1pjONP/d5egIYaJhs0Zo+ciWBBR+Me05kVd2tyIK0ldRH8iELZu4XmfrNdcGPMTZsENU4lZZiJxIXbeoKUQF7KbjsDcLTmuXfl4jcPFk48k+LwUEE2fyaAoG6SFrEaDZiZ/yR292cbQegdgcOrF+/QZDnMqVS6yFRaljF5C5+ce7VNxUOs5dzK46Z/0xD4kXHkT4QT5/727yUeQ8KmshnsLpu0XgxdbjIAKa0UpiByR2sen9DI8GblyzqpH/4jM/yMtc2COW+MLDnPw7xho10kjKNljBjsabSa5q/wLnYGofR/pA1CmnrwERR7Cytik91YmtyTb1D+rjh+uOjSVOB5NqjX7dqhFcV0CLE3KfUAkA==","layer_level":1},{"id":"c45e66b9-1ca0-41da-a796-6b98f394faa1","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"运维最佳实践","description":"maintenance-operations","prompt":"创建GEO项目运维最佳实践指南。详细说明日常运维任务,包括定期备份策略、数据库维护和系统更新流程。文档化安全运维实践,包括漏洞扫描、安全补丁管理和访问审计。提供故障恢复流程,包括灾难恢复计划、数据恢复和系统回滚策略。说明容量规划和扩容策略,包括水平扩展和垂直扩展的决策因素。包含运维自动化脚本和CI/CD流水线配置。提供运维团队的职责分工和应急响应流程。包含成本优化建议和资源利用率监控方法。","parent_id":"803bfef4-3985-477e-a61c-915a246d0061","order":3,"progress_status":"completed","dependent_files":"docker-compose.yml,backend/requirements.txt,frontend/package.json","gmt_create":"2026-04-22T18:57:40.355828+08:00","gmt_modified":"2026-04-22T19:22:39.446821+08:00","raw_data":"WikiEncrypted:AymRokkaRBrPd1uk5umiX/dhQHTPPm6nf5mmDPb1IMODwfEt6djM0VBnDWaMwjVsVSuT1AHD1pfVap7WBute6Wsiarqj6ltamY09KvCs0YHxEqOor+0AYSzm2Aa31Dwx0HGTr+fgwTnE6RMJGGceRIs4cV8RBM7Bs4/C9pv4JQQe1wx9fBauJxXtVZgZmkTwsQz1zMKUv/my9/bZ9Q05aHGQVWSs0vQA7fX+eO9Ugt8ztv2KzLkMHjTPQwDUKBMhAsMb47fa/gUJRb4vX0XaRC/0NRwbOvV9kGE8ZhfJSMzck20DTmUNjRs+txGlORGu4UWZsefqLmppB1YdHehQUnSp53vMgJwj0a9BHe2ZU8oB3BBo+Ky3c3OR4uaa4rfHtatz+jzKcC5vq+Oa2OkwFMyKF/rHCf5c9kOD3c9bg/wQwxJpIov1DkWxrbmp2EHHUtHsb07ASQhGLV3SX7POirp4b3urFGRk2MwXKxT5U/gA8wytKMJhKBFtElvFBq2i7nSPeaH2xj0DS3o9rwbrhRJQvLfp/3z63umdp/84RCiI8SwdYgPx4ACqLY3QKXNo0LIi6rsgWkaf5Suyks+dimQcPtAllHZGQA/gcWYidV5oQCnhHJ/meCiKRy7Xb4GttMbIeOA7UNNRQ9IFS7wyprb/n36lYgLOcuQ5Nugly0pl7iFTkl4qWn4pZ+zE4TR9CK3+3oihqJMUeVFdsWHHzgVsh4Vy/4MCPUipHMfRj4T7BabCmkvaTRaf6oRiYEXPGH1mUXCLnQuty4lKx7e8LxdqWP6gciPJOcuRMBYoeBHqUKw/JNmAzN8FuypXsdUryS7GDozcilxOcRE9j3D0JEW+8ONdKF5sp2JAXYX0mhqtfB+RscbqU7E352fF8vZAqHdS0XHCguOUcPuOk1PjzrKK0PJcxoWJPrW1H76CpfhWX9kC1CX6ji8+oMevPaHlwwFIAPnELyRyWOvaAia+6TeiAn8YTup3BXf//p7UweBdBGz//qMDvWoMqMf67cKrFP45gozQjSEYzm8AQ8g0Rqx6ctmJotfnBMpbUoG/k/Br9U3yCwUW5C4ELNIkZ8HMTq1vu6GKzheTjgM5lsZSBhR9qgPwf7cYyU47KLN2oWaoSG9Ke9U5fc+blB461oN7Tb9p1M9jYYAi3IfY13WbWR9kQ09yQOl6zNP4E/TOZ/WG1O8YhDVo6O9b5nQ7Txck2F7a8+Oqzy404YpIRpdXWJvx2sNjxCQXQVXqKKTnxP5lOsLb4vYZqXeHpIw8VawHDzn9M5zowBo/3M96UZSy84F3QEP3JU1nF98Rqg82vqB50gv8dY6wl5RPTzKd+Fi2","layer_level":1},{"id":"243a1a45-d31f-405e-a3b9-694d2fe617d5","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"数据库设计","description":"database-design","prompt":"创建GEO项目的数据库设计文档。详细描述基于PostgreSQL的关系型数据库架构,包括表结构设计、实体关系映射和索引策略。文档化SQLAlchemy ORM模型的实现,包括模型定义、关系配置和查询优化。说明数据库迁移管理、版本控制和部署策略。解释数据完整性约束、事务处理和并发控制机制。包含性能优化方案、查询分析和缓存策略。提供数据备份、恢复和维护的最佳实践。","order":4,"progress_status":"completed","dependent_files":"backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py,backend/app/models/citation_record.py,backend/app/models/,backend/alembic/,backend/alembic.ini,backend/app/database.py","gmt_create":"2026-04-22T18:56:47.082886+08:00","gmt_modified":"2026-04-23T20:35:45.922191+08:00","raw_data":"WikiEncrypted:Zb5TNaG1u/mRrgPr+sDyCqW7t7yX8M+Ha+5tSgGfMUOChQVv8Rc8RrXA+lpSqmcv/gkaDzP81agTYjHvX46erg7PWFncGZ1TOXKqQP7QcGfliH5ak9tnEamgIuPyt7GDe3UrFF7FJ11PUH1Z58Mw6bnSGRnis45ughu6ktQUqaWapao0iwnPJ9Fsi58tcLIrE+5bssE3RJAR6PVUuvqHoUJpdRuEWjfgHbGRXqp1WL9B9GMwvO2ootAw6c9LUKmxTD7C8MfyWJgQTNNG8c7FpDC36VUIX9My6OXVErikRFLHluaSbfIGV4q8CWYg6m/1/FFofujXsddRCB/qyyCcdbZZYID+soppOEtq8yg/zrxCB6KUogCWT7+H7NGIo3+uOeXVy8s4LFPRkxkQ96Vjk4S4USCxT3ihdKfOk+vJZLwc40+sC2A4IzmRtfA9CANQqXF+FzRegSflCG9Q0UZh1Y680UzS4hK6FLEW/oPO48NcjO4sxeUZJNctz5OuERGTyKVGFABvuWL5ieiTcPP4ynyNsyjzgZWR7g1/0CTYhtRbqZgx0XwFfhgNR4ow7nsXysRQEzYqUxrr9Zse49OBfFNIjAij+JxBBOxBRXkQw7QP8Q180RrYO6kRyJLelp3HcOazWKLdUA25RITfLFkFh8NGUvldwDCgtnx1XBATfiRPCRtRdzH5jKJ9KNu4/kmu2mDKgmWwupEXCHBLnsEG+/r7R4PXzp7kotTS2+2np5fyHaibwFNpLk4ylBRBuw3DA6cUXXA9lpeaqJCiFGIEjT+3lNcL6Nx2+kRnVhKE83Ac9zLs0Biq6WXpsOPDqonoUcV/VnfvP9QbFDjghCIl1J0gj8OA+h+M3DD5ZQNUNrdlm3wi/ggwfXKdJsnpupeYggasFkNrOTlWq/MuIpSsdYGE5W0SflBSug0BwksgsPWX36i+7UPtTokrNsSSvr8RepqIGh2uEc9AH3n0Aku0ngg1UONo+GHlPygWc7jq56FZTdqBHnKO3942QSoXfhIP8XRl2fDxP2XUofalVOVsu/keATLIZgDh3IHsF0UG1Yrh1tekIOTVmsbuy0e4zl2leHodGxoOBnYwnfPMOYWxPZXrpojyz+nqw++EBITzrkkECOsTrxTVaHrwwSAPjLtCzU0w/EZRD3m3hE0INsgv5Ble+gZ12K/STHVBzqHPchkz0WW3c+MVUH5PPp+GTFnivGvHtjMYx6UeeU9w9fNs4pks9B8N71j6JB6Pk4OSx3/Ygx9IH04l/gEMoOXrbs9VQ48A8++AK9SRWcfLbcuJiGzapIjOiVzj6KI34o/FEEYnLJIm7DZuVzNS1T+knrXkZibQK9ssAu6dln0lucbXfg+9cqbtXhzwIojhHOv8xBT3jQAqMTbTdiV+8K3qqW6PxA8tIdGWE96msaZpgmQmpf9izCzjbQIp9LL5WN/jRcI="},{"id":"05214c1a-d804-4f3c-9048-20ba4de3be0f","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"引用检测引擎","description":"citation-engine","prompt":"为GEO引用检测引擎创建详细的技术文档。深入解释引用检测算法的实现原理,包括文本预处理、品牌识别和上下文分析。详细说明BrandMatcher类的设计和实现,包括品牌匹配策略、正则表达式规则和模糊匹配算法。文档化CompetitorDetector的竞争品牌识别机制,包括竞争关系定义、相似度计算和过滤规则。解释置信度评分系统,包括评分算法、阈值设置和结果排序。说明异步处理机制和并发控制策略。包含错误处理、日志记录和性能监控。提供算法优化建议和自定义扩展指南。详细描述与AI平台的集成接口和数据流转过程。","parent_id":"7c2ac186-ec90-400a-ac1d-b3b7ca2f01d5","order":4,"progress_status":"completed","dependent_files":"backend/app/workers/citation_engine.py,backend/app/services/citation.py","gmt_create":"2026-04-22T18:57:02.318113+08:00","gmt_modified":"2026-04-23T20:33:37.372717+08:00","raw_data":"WikiEncrypted:5AsZyvafBXiUtsQ5ntd2xSs3ILjH2jK3KRqQeqYdLK3xV++pdLq+4satUA35s4AktJpvtIlBIE91BpoSSxdMIJzlzjcEII8kW/R0EytB/VdNUbQKg1RverfqOp1bPEWLBmM0oXoe7+3qkzPC2Mf1ooT1qY+Wnye4CAfG78TD/q0AMQdykzQydTep7eypfUng3BGXStCcjUkwnitXy9jgftpC0/tEyMhSJIRwfEyHMC8pCZ3uBu05K/kbWJMAVzeN+RbpjqQl/AMRIDLTMg6TBQrvrH5uB7kEmNLnso0k4IwbKjYBfsoAT1f/RhrPR6uEpuyMZCI7868kZ98SRi4JNdev+YK7Ek74Y4AW+/z0d/9fpp2VQ3lDuYYADB2ihvzHrK09yCDPV5DfYbOE+YmgfP/W+1ZayVWcVf5jjw/kQ0+wXXpByj9Bf0MvKeJO8OmWNbW11YKf1Zhr9O9ssfAGhQ61tEWdGwr2vpPRZecLhmP/3vAso3UexUhMF+42ursRQIxusBVhGnBG3395aphiScvidcQ3AWZDt7qWaigup/9WWvvwKEk+gWaJBnO8dib6i/mBuB+XC33fXmvrkk6ESP9afV1Ag2XJnNosrx5wpwCnwwVeYm1+mo2FyjpkCyIesooi9FNVuMYQUiR7o2ORBBXyp8r8l4pab4wvhmQ5F/kvyrDq2IUoSgVwCe1WVokpscxHDzemlRiqQALcb9vHFogShoOIw4NQd8JE6Ciw2NTcEbgq5i0hiaO1w/VhbUyxoqA105/8aSzbEwdAcuMG9ciHKwbMkoyR0UaMKUZLJy6VO02JFFpRtlh3OD72t3VNoDS4lWyWJe4G6NccX+XAohN1rsZU+ROCL8Y63mODms+oacpzuNvCQC0f91XvoRbftpDjven11QkJUdRxC+QBid+X3RB5HjEUZI6amQjQESEX2z28T4td0i5MNlp7IQfJjM00IuaVZmFavGuu+RJfvR7n78hqrcdjNGJE2t3TTozXstxH3HLmjwKzaA1DGdcvjISEAlWpSDq1Z+8ExFSDbevtUFgnb30/rRPe8E/+VsDMR1FqWh+HovxPuOeMpbUi9ijTGv8ynn1DWdoSvT0kIfsNMhReSibvIGRprPdW7oZEiI5y1SQYXU4kMBOpPdNuCyaPRA/3Mx5z0o+l66QqRA2tAMfS5JvFR53tL+M8eEjH5xvgW0VmBTv2+9VGk9aRLHXSHANLk78McmWR3P66okFWF0OhqkaLPqj1lqn8SMDBv297qL/7vaz/5ZMq+1nKCtq/I4rY9/FziNmhBZi9jtXj+845Jyt4Qi7hprnHQYqmX7caLgy44MGdtGDcZ/fxMNY3A2QbuIeQRT767L2gpffBKmqQxLcfEBwxKol5OB8/jdyvVTpGLMdROGD3baQASEk3njuah/PfjZcfuARA6oVvcpj+RhM9HEGKondRlyBHvD2f5p7nK7WyubfWPvcD/iKl45JOn7zLMHQYvIYu5w==","layer_level":1},{"id":"bfca5ffe-8905-4ac2-a0a3-8e4dc43533b1","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"数据可视化","description":"data-visualization","prompt":"创建数据可视化的详细实现文档。说明基于Recharts的图表组件设计和数据绑定机制。文档化趋势图表和平台对比图表的实现原理、数据格式和配置选项。解释图表的交互功能、动画效果和响应式适配。说明数据预处理、格式转换和实时更新机制。包含图表的主题定制、样式配置和可访问性支持。提供图表组件的使用示例、性能优化和调试方法。","parent_id":"d907a8eb-795c-4060-9cdd-50d31cf39be3","order":4,"progress_status":"completed","dependent_files":"frontend/components/charts/trend-chart.tsx,frontend/components/charts/platform-chart.tsx","gmt_create":"2026-04-22T18:57:04.217105+08:00","gmt_modified":"2026-04-22T19:23:03.405364+08:00","raw_data":"WikiEncrypted:LlssVZ/E1BSUywfa50FLlWyGoIcJJpOig8KP9B9gWWZZI8ePi8CsG3BxaOR4OzxCxm2XiNUDCA5f2LMwvnigr2SlxVBiSNHUI0lCgSHHEunmkPytqBjFiqGB9yeyKz3O1rSdq/m6COB07RDEp6Tymfd/Ich7hNqr0ALiJKFBMfTRXbiXa3naRlzgzc5/DA1h/zbAk9yl3yaR4bB4p7xAmyNn8C67e2gxrbHOKN7NK15dfXoIag0XHJMVwFE6SysJ+lA7fykhvt72SHx+Qz58/QamURb9OcCEnEtIYqW1uga1vc2HXP+r8Ud+tutKATUxPch908D2Dm70HjZTkDqV0y1RwdTE86O++EPgx5Sx24CmB2Y9KEs2TsxQBSxas2iX7ajhgIL9xFqjJIMVJWfRNeL/ql2x/OsrzEXUWybjh//bQHE/MIs2lMcn3jl6uggDT3q//Zf/jugKwK1117XAp1NDps6xhJqmTf0/J+uk2DjJwURNZ+f/hL4XNyCoPSOpjPZMIk+ikrqwiBBFy1t5dz/fksmYdzw5H1wSGwFPks461EvwT7SUd3qHg+HDEWwCrMRQLhaalcb+5T4rD4Gg7Aa0Y5Q7v043Oz/0rnmFckpB7QJrcI4yUtnbNxu/HuY+NFZLqpJUrNC6MhZKZ1Nf8HjXwbb7FvRLPTJk/0J2UGgZIuFkHqA398GnAHSj3OegnBaKM+qHr8cVs0wfQ/uFwwYzgoBd9gSGURpkSSDhsDUj2XJMeQPghyYg+au4UrCpUVHdYOyliR8OyttchGTRgDox14AD6X6BPxBueyw2Yb6orKjSBwNfDa9SZQK8dW9S0BehKqK7QLDHIzpglx66chB/QwWwaryM7BrEciDg6cdFeFQSmV+EgDmEePwse6hlzNdSXObTbNXLDwYhtifAxjK0xxhVUCtc7HVAFKLROk36HCFnlzxLpVmtppYzoprXfyXDe6BHU55d+PSdjtYyR7k/tigqJv5jX3TTrH6McF+/v+eR2ZtsTDIjWz+prq1cMVTVPgIB9WoT0+dXP1fMoZ52xLzWjSkgrQ7djAo7jyy1G9plvOx0bdGh5lBGOz+/zY7MTLVaKx8eK6kKS+juFkRK2kCuesUi79TGLidetA+vkruZiHzNPBJWntDodb79","layer_level":1},{"id":"b32b024e-2d06-45c8-94c2-a07fd25ab9b3","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"快速开始","description":"quick-start","prompt":"为GEO项目创建快速开始指南。提供完整的环境搭建步骤,包括Python 3.9+、Node.js、Docker等前置条件的安装和配置。详细说明项目克隆、依赖安装、数据库初始化、环境变量配置等关键步骤。提供docker-compose一键启动的完整流程,包括容器编排、服务启动顺序、端口映射等。说明首次运行后的基本操作,如用户注册、创建查询任务、查看结果等。提供常见问题的解决方案和故障排除提示。确保新用户能够在最短时间内成功运行项目并体验核心功能。包含具体的命令行示例和预期输出结果。","parent_id":"1bb55e12-24c4-42cb-8f59-ddc303460d45","order":4,"progress_status":"completed","dependent_files":"docker-compose.yml,backend/requirements.txt,frontend/package.json,.env.example","gmt_create":"2026-04-22T18:57:13.330281+08:00","gmt_modified":"2026-04-22T19:23:49.7972+08:00","raw_data":"WikiEncrypted:1aHEw3M2aeluf1++NE1n1HTCzLNrSYNKzc2IVp06RQtbuAYcMEXChpU7tJYS1f3O0opR6Xc/vB+l5keQe8PgCR2ncFv/1Td0hCZ2YAOzrKcU9vT19aDXTs2wVsNg8N0rDLvVcTazfsrfReCkGbF3t4KIDlALR7E9k/sBc8Aux87FRnIqhElZnBvZS4Wsv6VYjg+rG70cB28ZbZapx09FwTbE2gyXj7Ck6qNOm9h31VGeQcyIEPfTlQzKWWghd2UuAwraAXbHFeTBwAzBOPZrVi2iMW5N0fiPvrofJe2RpvtWwEWsHguXuXUfXywdpjyOFbnrTokbwQiiwiHpgbktPSypaW3QvBywnGVAjxPBIfRlzbrxj8jlb7w8YznQPbWcNRuYRt3TVMBHR1Ix8UjdR2JwWu4yZQUrLOP4XJ1OVoFdLu5sT3ug3YetVAWSBGUiyUEIQ1U7QoHxxE03qI1ZmrGvC069cAhyU3YQYL0g+PfXWWo86/F20gUXppepBbqg0yRPlCX5asdDuL0vX+i9vl/JI2++deWQKu7cSc8+5tRNcN2AF8Klslhvy5KUEZpxqPaEhxXek/RE8thYcMjT02y2lWMR/WID/CEUm0DZjOC2fQE7kYjogUTC8OhNTBXocpLyn1sbyngxfQ3KsE6+Ysl41LroJ5F7SN8+p5pueRZgBbM32odMU1Dil6T14I/HwltMjiGAjHurPSB8hcX7nNvkuZnVTE2YMjB8ZEhhf76D9Pp1naI3P2d3j0DprvLXRiuPSfO9NBTu6LwZKuMaI2MBEDI2zoV182wdrC1T6AxOiHNcJXYiaF+ZOpMA0vabvcycoioAE6VOZ0mBQ9ZPVSZDf/Dw+VTsC8U1qruh1IAQVYCHsnjY9etX9sTaj6Izd3VrvgQkqP5vAteSDZTy1FOTlTi3X6RzcurXdR3833HqpXa/a0ot8JiRdmjIG0ydOuPYeZPs+Jb0FMN85H71mBziu41udCrikCTPBRTVz6VCG9yBdOgeW4s/iNhPqWCnDibKpfJy1GfSyZ7Jja1d4K91Y+IHVrJxB0+TZPezxY/htgMg4W7MtRoOOPc0eRqst/S2zmEgxMMpU4dfaQIne5zGbUEPNb24qp3HsO9v2un6P17rFQV86RwmPCnyngxtddo0vUNesY0s594GhsGEquA9XlaYa4/KNM14pVDEm4ReIC1JvvqdiQdUAPv3nMXASqe3FxbJmsi93mpWhKWx2q4W+P3ZivXtxhQ5OB4Rs2uXmArlB3MNPKk8TL7wHCUAsFUcCGoPtT2+ov9ntDTLyjKsb0YUGjYUqAceHGdvLCM=","layer_level":1},{"id":"15d6170d-716c-4d2a-833d-81211a59027c","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"平台适配器扩展指南","description":"platform-adapter-extension","prompt":"创建平台适配器扩展指南的详细文档。提供新AI平台接入的完整流程和步骤说明,包括继承BasePlatformAdapter基类、实现必需方法和配置平台参数。详细说明不同类型平台的适配策略,包括基于浏览器的平台和基于API的平台的不同实现方式。提供代码模板和最佳实践示例,包括错误处理、资源管理和性能优化。解释平台适配器的测试方法和验证标准。包含常见问题排查和解决方案指南。","parent_id":"7e66719b-4a8a-484d-889d-10fdc76788bb","order":4,"progress_status":"completed","dependent_files":"backend/app/workers/platforms/base.py,backend/app/workers/platforms/kimi.py,backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-22T18:57:14.593273+08:00","gmt_modified":"2026-04-22T19:25:18.719953+08:00","raw_data":"WikiEncrypted:Djug3Ni1DAZ8Du2qShzHYuqLmnJOyyKhsCPSfayzAMoLf9J+rFBy0LePWIX3b5/HwiLgJX57X2JBlObsW70y9DLEgX5HDr3AAeBC0dRNACFssPk0GwpdFdJeFwRtoB01ZTdr+IpYAK2YG8gaEA/2ysFJOZzxpGWgTq/Xz+KO29a2kcDgYhZKt55uqT/Mo/5Dzr6AN+qXdLL5xSqrvCkpmhYMFmzgIBOUjJM1mUISEtf/X+gK0L0wXSj/tCJnDQtGJqbFK24HEYyVnkon1GdnIvb+Vptmby7Qg9iNT/xb8JEVTTLM92335BfpTwTp+D4fNkMNyZgXv/XW6K5J/dLRulOCKwxJxPROAyvyEc5xLI8vh6BGP2+b8TgKAKILZTXg3SemKVhGrB3MqY5+V6whOOMT57LHnuwJUEMNMJsswFiLp6UbAlqwiICRF/Jnb+bvCliw4xXvKC6xfAJDQ5qAtcTCAm0uGslNVB5T07pzLFy5EaJS00hqRmvac/P3e8UyL84KjzdngtT3yZ95yCL30Ad9SpGXt76JgCgVJoPFcnPYlJZiXneeB39wFX7rogSSye9XkcBSqEt2ZITemhNHF6LmqSUdnA3rX85S/zDmRiN2NjS1Zjvgc63JjB4B8gQhw3rDllzHDLPBIO3PNInvmVsx5zHOjAMZmyIaoVRtB9BQQnUdHn1WvHdRXmZfs3eVA7jNhDQmTtBzdGtJ31XIHAVkP5ul/NXNBKUytIXDS5hE2s/ZR6j60eIWBlCNxNIlj+42vefIOU+e5kJufMVcBv4aXyQHpunohRHMUYteEC24NO2CW1FNZJlH9BEyf8RKg1/0hDEmySMxcj/S/pXTp5i8nevE+JleHdj3zeyWlGqJsJa7arZV/Kj7qPJYtN4VHoDGp7MFHgKvq6W26lje9EuwJEikt3hqjinocemgMjzEx+PMVPovHIBXyCfuSOtygo59bhUm0pvPgdMmml9UgZeVV1GMzDT//kfmf33ZL+aXTl+zEmnw5fZYwccKfmY6Q++ZjfSQLB9eV6u79F0yq3zh7zGb4RqRR5ZeL2vQaNsL3wyqgNppyJMYSC6gX+ce1aAimwDx4Lr/EnY474W0FXvid1Xc6Bg6KdPrwnKJJpi18zMOmECI68RvMpwmM+92oe/m3dj6YGItooug3uasMy8SPsvLi1RV2F0CQD5CqYs=","layer_level":1},{"id":"7e66719b-4a8a-484d-889d-10fdc76788bb","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"AI平台集成","description":"ai-platform-integration","prompt":"创建AI平台集成的详细文档。解释适配器架构设计,包括BasePlatformAdapter抽象基类的实现和扩展机制。详细说明Kimi平台的浏览器自动化集成,包括Playwright配置、页面交互逻辑和错误重试机制。文档化文心平台的API集成实现,包括请求封装、响应解析和配置管理。说明引用检测引擎的工作原理,包括品牌匹配策略、竞争品牌识别和置信度评分机制。提供新AI平台接入的扩展指南和最佳实践。","order":5,"progress_status":"completed","dependent_files":"backend/app/workers/platforms/tongyi.py,backend/app/workers/platforms/doubao.py,backend/app/workers/platforms/qingyan.py,backend/app/workers/platforms/tiangong.py,backend/app/workers/platforms/xinghuo.py,backend/app/workers/platforms/search_engine.py,backend/app/workers/platforms/base.py,backend/app/workers/platforms/kimi.py,backend/app/workers/platforms/wenxin.py,backend/app/workers/citation_engine.py","gmt_create":"2026-04-22T18:56:47.083138+08:00","gmt_modified":"2026-04-23T20:31:36.620063+08:00","raw_data":"WikiEncrypted:wpnkiTiqqfzSOLf9jfRAk0Q6rmj54V4PX4cfdCN1v7vUnV27EqfgO0UCzli2MtUnJ51CgpvG/pn/E3FsASRJX83W5OtoHXDNZ4j26fcGYWMK9zRC5hi8J/dMZoaQzJzzsT8qKvXJnD4D7Bjp4ZqFEme7Smze8hNvF5wytAi0n14HrcR90C0v1NYf6UWM/I1F5Nqo0+3N+pfMTr9vJAv1ZqDstNHpvNePzJyNYVmfwpIE7rezCdxATA1CVuPpwaFA5xsmJ+vkqC26R1ecrjj4kaKngH6RRRDgQhhQ6aRB3vt5nqJTkK/GUHcF5T1XjKaL+a/sKF+40wgULRooeO7uAuC8Zv55v4uHR206FqyBmzQ2n2oL7aEvTlkvDbpN4K4o46nOw6eAh4cC2u+M/6UyRJ/vHl8dGbnZjB21BICs+8mtyY9X8HX95c3q/eXaBcsnPvE/pQo/8Z6wSj7GzmxfueajIQAC0N3PypyM475sPJJAQYRRBk4tB8BeeHAheffcSAiLI86gW5xCar2+kHIHTkRg3pcdkaw1EkhKeqcQw6ew0Z83+q31K2+D+G5Dp7k0yg57Yy+wQYoQpi482aVJTCvTl4DM1GdhaLBYK1/O9ybs6CsHHuhAMGPJeOCtMI8ehbz37vhncd/r5KFUwVm+e8+iVqLPjIA7A6uUm8oef8IZswkzAIcBjZTd0HQmfhdO7p2GfuJKvyAMwWchCj+pryelFxsQ1XiY4QCO1g7ORVxu6x+4/k2PNCOhk6gEBxOjJQzXNM+PjMhiZHJslw5eSbtEAXm+1F5jyhyYY972p9cQQS3iRFts9dQK7qtI8+zm8/UMh2S3rh9y089hgBEUB71Gg5cUb7gaiI0gJYh5HrUXvqt3g6H5zQQs+913IJZ7giMElPAP2Qjbk7hKfAuLl+gm7pG21vEiGBgdafi0W/SeGMfEfargk5rycBiAux4yqzolMzt6ZY1G6bSEdxhBwAL7IPHlaguENQ7PIDWDT1mlEboyeR60e3xngdX3d6vQeuuV5+OWjDecOeZTiBxvDIPgHbMXc4UEzS0YKWD8ao1VsXgT+V+KP4QhvazHdx0dXUhAJlmfrXF13WzadCYVAAlfJ5iNGkT47I5Z7NwqDIF2jO1g5hfgR/LgTwdLyuzF0R79gBMRfYZusLAkvoVjfKdTxjMIrkuXKoXEbgtcZDj99mrJe5eVpoCtl/nL+FDv5U8e1VDikgYWnXY62y5ZnhnOcvlUDLD2mJVlDEbnDBkMkFc2WW6TRTZQAb1pLCRTbsDr+kQD5BLd0YLql1xTFN8IsAKgz3fkhafmSS0hAEBsKC2Ntov35ZpS0cXcMYb1oGIIGPVAMq4Uk43QUUSLac4pkX/xpRkDI/wPdmaebMbCDw83xHKBNY4h9STf5rFicv01m7HLBHfkB3BTFwYsKGhOqxnJPkYnD0ZSz+ia3lw0eV2RoqWx6ITdxEvkaka3zPxNSnqrnTBwjBwTbLz5tXrCmK8Fn5Dd5N9xlYM6+6iveOBt9he/WYkedO6pClHq3NK1RmLgTQWpL532vkJNeI9p8YUcv89XqnwXSi1YhPMe1PKgYTDGoZvsPk66RDWaeTNkfhF/vcZudTvgMmZzQVRfZ/clH6wRHfgZzl1X4HZ6WJ7PKSSwwUBw/jkvMZ2rixaio10OXuEfyOqYqV4EoQ/upbXArnmYKjEbhcULNFk="},{"id":"850fc702-3eb6-45b4-acd2-ae87fec1f4f1","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"工作器系统","description":"worker-system","prompt":"为GEO工作器系统创建全面的架构文档。详细解释APScheduler任务调度器的配置和使用,包括调度策略、并发控制和错误恢复机制。文档化工作器抽象基类(BaseWorker)的设计,包括通用接口定义、生命周期管理和状态跟踪。说明平台适配器架构,包括BasePlatformAdapter抽象基类、接口规范和扩展机制。详细描述Kimi平台适配器的实现,包括Playwright浏览器自动化、页面交互逻辑和错误重试策略。解释文心平台适配器的设计,包括API调用封装、响应解析和配置管理。包含工作器注册、启动和停止流程。提供性能监控、资源管理和故障诊断指南。","parent_id":"7c2ac186-ec90-400a-ac1d-b3b7ca2f01d5","order":5,"progress_status":"completed","dependent_files":"backend/app/workers/scheduler.py,backend/app/workers/platforms/base.py,backend/app/workers/platforms/kimi.py,backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-22T18:57:02.318442+08:00","gmt_modified":"2026-04-22T19:24:30.529121+08:00","raw_data":"WikiEncrypted:NKkj/YX2GdbxYjFllBaf8+HUgx0ecKFsz1U3HC2t2IRMbOkBCmoy+IYbhzuQ50K4pCdPARIwK+MaHbv1MDUXpcbdnvRL12GKezTnD100oXzQKqQkhZdDDC4nIEcp6weWLVGVffqyB7aL/dnt1QlE63XyJfCwizBlecxl1GDUB4J0O7SsTFL5gI6enVYO6hOzx3JrWnEFzirRjA6Llz1iFiFUWxTjxjToT1qkxAdREq2omi39vXL1s84I0XOA1blljfNNIGbpkxXW5uohJBndl6l7Bh23wF8z1LfdAavsFmljavCWqoMvA61Dn4jpJT9oDmaKXZpVSuxfMF2Tu3WOJZwISUGfGBJfdbfxNalhuFff+bhZR8P717nLoM3Do7T26rsqW/pr0NJL6aKxrlPCeIzL0v6Ct+HU3ULHT0EZpG8HfU2NhGWAJd0NhX8RZ8B2ZpfXZKioKtCkLhl4oWV6P8/k5g1nWpnP3wpmDwvp+/pGBeaBcYSenwJWgcGR2s0KgVsEW1niM8+JLaK15wFrmKcxve0hIWBiiPnbZKscAYq+5hj3ecte8h/JevEf+SBNB7ify6uUGU3Eve1jXyPeBrc2FCU5ueeJSFD3wu5pHlkzm7PP8UAbQOfwmENf/Mc1YRNi1FJsujdQuJ67474CyCTkCWFhTC539/6iIa7hN8505GK99PxHcIrsPMMT5LU69r67SizSnWV5bawiMPKGosexCHZfhT1jrScQCKeuld0X/lE1WXXm6ADBbfxZrn/iEFK0zc0WKsnT0X/nQI+ycJaw40Cm+soCO6/KtdYYGEzpzViqi2KxYhRyey+o+yIi8V7nVsxUCbaVRVmYNjnK9yX+3ypdVpJLIJXQ5ywaUWfvqgCrsC7Xxba9P9D+0kmnq6jH6ZdIuubXp0yOtWxe+VC4bHAWoc08RoBdLrlTCGz/hmgi5S83hM8MN0gLdQtc2YDsc0Pxw60+ylnkdlKIefBmb7XPiD8RMRvcbDUCGnrpenbxf5eoWLjLWfyULNQHoYINDdIFvn+skLu10KkfTf8lpRNqd2uHkHVhTTCFh25GlRLAdL7QDHMMQbmwG9OTjjt1tMlW6aYJ/pvYQq95uzmLAiICIsf+nT4xgqoFK+tTBmOst7Z3+bj1YJCPtUNyIzC9a3YYfRwlB1ckjgJaCURcXpImdkDtdpl3GP2mtDp9O52ZDAQVAJFVA3wFFV1G+qjqGRl4cDFK7BlAs04O4fvskn26jrDYiVqgdF0pc6eIiPhAJg/1BabciIggV78rEnEg6jiNJ8AhUmKLo8JOvL/C3m1mfcaUbU2K7oK8damVm8BSmIypHMJfCXzHIt6i+CaJLNlZ+c+MJ4WhqgPWc263/SnxO24wH0vaRtqmZ8g72SSFVa+6E65bdhSUaIejIDvILaBv+73KdUt7LGKPmqKoftErfP4grQZACnS3zQLXmnMfdzurPkKbBI1PkyT/ase2Czwu5/LwHWdWDcRQD2uZmUjndsKpbR6/xVu5Ry5VLB/ds2BrgjUp5pD+Z0U995X4yVwpr9oCNxR5r1sl+2Wv3jotf19l+safw9XwODQoURKcJiGxtJDymJvVEyl3ZEe1Izwl7SF4UqtboIYt9vEoEIilsuPPDtujnpN5pkY=","layer_level":1},{"id":"fda0598d-7e92-4b8b-be52-92ae63c3cd98","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"API客户端","description":"api-client","prompt":"创建API客户端的详细实现文档。说明RESTful API的封装设计、请求配置和响应处理机制。文档化API客户端的错误处理、重试机制和超时控制。解释请求拦截器、响应拦截器和中间件模式。说明API版本管理、URL构建和参数序列化。包含认证头自动添加、状态码处理和错误消息格式化。提供API调用的最佳实践、性能优化和调试技巧。","parent_id":"d907a8eb-795c-4060-9cdd-50d31cf39be3","order":5,"progress_status":"completed","dependent_files":"frontend/lib/api.ts","gmt_create":"2026-04-22T18:57:04.217601+08:00","gmt_modified":"2026-04-22T19:24:50.486294+08:00","raw_data":"WikiEncrypted:/umMwKXdJhL9PqhJYRia9MjBtE8cuBSpJq1+zwyrvadwhOTuxc7+NNlJizkRp6kCDsj6HmsrrrEG2WmrNf4m1kFf/yUci2Hny4otqjfpEsOXzmFIxnq13zAZFe1oDyDiHr+shS0DH1omM5IrOroFuNXfBlFlOGXuTKJ3wXXPweq+qAH9QLU237hwRdKdI1UNXoGFfFF9nN8NzOmkwSQ0cRMvswtunfw+yphm0doFqLjrjc0WUZSar4loGeSR6pOSLU8ebi/JkrnwesaWnoYc/1aUJBPdJqVPSJQzjx/Oupuf/R1ihtrn81TMYOUvEaKLk9wVSfSvjh8RGttelGQzTBNJsssgMeqcDh+Qz6r4RJeFKgaRlhn753ONhpYFsHOA/05biB01p6yVuJUR2A3I4tqTlKZ+Xt5K6nvklSqGfR/asdknv3YOkVZOtQxAjyjg/RmmtnslgrEae+k+pBRvgZU23ZT5nZ82LarvwQLYZlu2F16oJjpKEgT3cw98zGHlLEIanqAXIOhT8iR7Fwk6TTKreGcH+oOkFNmbXHWXAD9ixtGbLqoidjzBlLLSR1++hGoabWTFiJX2LKj3lCJ4z30snHEvEL5ruTnKMF+gXM+truHTDsrO5CuaWyGY3WYVTndJKFLi2PQu5FclItm6ykG7LLkMlOXcKTmOrUqOgQhgDR0R7UuPYneG3+8tP49Gar78dBGx+Da8xGwikj9K9OJYAlHpVo05oKo78qku6h+6J2fHgIvIyJPSC88Whc+HpqTBbVMAIjzOQDzTTafDZnEoLWczvFoR5x2aPLnYwXdjyljOhmpXH/bShHcfo1W4KEEzka0Yp+DMZpTiSyhBpA5iLdjZdU9RnTUPTwMtqSXfdbbf0fdgem+z3CsmiuZJVViFNkOfRqL5f7Np4ITC0v2XwLSWr/bC7gbUZiEQdwEr7jwVO1Bk6/MCzvN1G217W7/RUPA4Up/Iu6PRBPcC4dd2r16kpGY4U68Ud7F6iXnc1Twr1Znb+cuTdO4Fu2DQ","layer_level":1},{"id":"7416db23-312f-478d-8883-2fc3c41ac2e8","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"任务调度系统","description":"task-scheduling-system","prompt":"创建任务调度系统的详细文档。解释基于APScheduler的异步任务调度架构,包括调度器配置、任务队列管理和并发控制机制。详细说明查询任务的生命周期管理,包括任务创建、状态跟踪、执行监控和错误恢复。文档化异步任务处理流程,包括任务分发、执行优先级和资源管理。说明调度系统的性能优化策略、监控指标和故障处理机制。提供任务调度的配置选项、扩展方法和调试技巧。","order":6,"progress_status":"completed","dependent_files":"backend/app/workers/scheduler.py,tests/test_scheduler.py,backend/app/workers/citation_engine.py","gmt_create":"2026-04-22T18:56:47.083393+08:00","gmt_modified":"2026-04-23T15:20:09.061178+08:00","raw_data":"WikiEncrypted:VyywLMbCKto41PC5aDsBo+87rJy1wKhB+t/+dFn1cQKhRzLNGkc+cdUADwdeiVqAIwtiwaq+rwA2WFYQdbiGz8cyKHFmC9lmt3Jas1uZAz4Osy7WTe5xdzE2SEY35xhzdqPvBbNe/p8j0HjSJGFgENGbjEhhukipSO73yvj8CPLzAxa5OEqoQt3uMA0dCSgyFv2LovXFxAXl3U9omZ+jIerOmf0scDYFZ4Cjk4x8Bzb0xm/6wMRJahXUi7eKOQNBfFSlRnxNY+u8u6x0eLR9rZQJsBFNgTapyPe11i341lFAvV8GVMJsgmLfZeTV/A+CJWTGWbc7TTvNnWcbYK7l8zeSZ7dH4rEnOvERyY5kxDrOEwU/Yjdg0OIz0cgmb+dlRmAPiX3OWjxUXJg4aSEFFG16FvCKl2nOFUF8LecaPl1ENKZOzyeeouQpzJp6MwRbCvWKCbKjmM2LofkPlbYC3ljZcmitkM3M0iUQSDo8uwQ71JEBqciChTxdYCFkbs5lTGlaj7NMUVD0hinIuBaEJQ1j0Irfxqf1ncrLdx8ZNQfA0gzLgSYcvydd0BeII/j0Mao27RFzOAqYLYT4lwZn3J2ZefvqYbOF2Sifr+D0ZdG7elOtYhiRAUEHGhPSUWaoI5CpzqRPYnRva8JuLDZi4Kj0EyjpgPrSYN9dp01ryHcTMd7FaHIiskbn258Y9zpaK7mnlVvyKtjxlJL6MtuIV32lhcB+5EW7WH/6QDYQTwSBHw8UP0tyMyNbps8z+8Q5FmgH8vHxFljollei7t8eaPHYkk5rnVsXfTSQ4SjT3Ki6R/yfZ5BEnJidV+OTY4jtwp6TKE+kf6ioudhBQQXHEpufZoZaVaTZXTiIGuNSUBDlZ8hnbIS8ou6QcKMly3uw16qq1jpI+sVrLhWSLFcfRqW774uvsXptcHlY3jyOYYvgNSnLk9DHpURDX2VPzmVnzh4qOFmePV/gjmpSqLQpV1/iNIt9g3DADVd6eBWCjpp7/eefKoA1yLf1v3cLqoz1NFJZDj+xZBAIGNokT1IaiTnENcvwwJWL3xKUl+n4thAe+UgHXKJZ2an3jTF5IKjCZK3wFTIHqnkVBqLbYTnNr8t764mZT1/9wh4OKLf46TVR2knmcx1cuUtGr3Sewy3daul0qF4ixlI8qx00gkAJPhMSgdD9NphN7vd38cFIdIrhJ257ibJH98P6LFTvtBlJtLNk0e8UNLU9gvqtKe+mlotbHy1WlN3l1P02b370hBTcnBA0JVykYqIO2Yux+kvP"},{"id":"dd12cc44-0c95-45d5-a726-e7b8bcf2531b","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"API接口文档","description":"api-documentation","prompt":"创建GEO平台的完整API接口文档。详细记录所有RESTful API端点,包括HTTP方法、URL模式、请求参数和响应格式。文档化认证接口的JWT令牌管理、用户注册登录和权限验证机制。说明查询管理接口的任务创建、编辑、删除和执行功能。详细描述引用数据接口的数据查询、统计分析和上下文提取功能。文档化报告导出接口的CSV格式生成和数据导出流程。包含错误处理、状态码说明和API使用示例。","order":7,"progress_status":"completed","dependent_files":"backend/app/api/auth.py,backend/app/api/queries.py,backend/app/api/citations.py,backend/app/api/reports.py,backend/app/api/deps.py","gmt_create":"2026-04-22T18:56:47.083629+08:00","gmt_modified":"2026-04-23T15:19:45.663556+08:00","raw_data":"WikiEncrypted:rEJA+fDSevRLFPlWlcH+C02eArPzlHQTxpYkpRmh+m+CmPwrZOHSqyEVvpFbcfuzlCdXmMyG1qoekj03JLnUhMCX8p4fjuyWVCjGyWgOqZe7y57duQvm+59HTVelUf5p2zKcXe0BF+QDGoY0B16JqwBxz3Y81Gy9FL/tP9oUSvy1GLFQmo9ALw+6+ZxshNYMaAYjZuIQZmKyZwLkz6Lo7fc4BaK5WrdvEGmFG2VWCEklBP/N4prpXJgdgQa9/TTjsup0wmZKwrmq/DT8e2QPbXwCMPbD761xiGBcOmyriwaS1OsRl5hWA8RDMXy8StAFxKHEso2pOzgFneedAOAryo6BNtK47OjZM6n57D4XO3jjoIpt4db/IEwMD50ud3jyIs83d9/ZQsJP15jAote7wd2NlHC3C6SRJ33bMHWKMdM7RzO/7vsAkmQOdO6kmb0HkP9WWmD0JcBxtbYCUe27HlFKiPGOw7+qNMwW1D5inQAnxNsZFvskmMmNz9EwGwyI8mV1S3fnXxbZ9hYrwdcNQ/Z3kPzrfVlLm8MS1OHXimqvLbhsGxaoJO9kpPYSYVJYZDPkGVCjNOaoNt4rk9ZPU+vJF2fE8vQ3g+mePnvUBXcIT0YPI5q6P/COgOkwr/uNMb/pjjYKK35N8A7Tixh0LajVZ8O6boGN/wP2y743Mmij1WlEfi0U1mxyVLIzU4Hf/16zrZIIvtBk+L5DwQFAOmnB5Wk2SEBt/ckL2avHYwnEU8e44ilJKUDw1J5xsEkBuaZsOszKIzZfKfCaxSHZwwOR8FMAdrXUqkyhDe3xhYPHalzeNvMObnrpOIplGgnWuJXa9FAlm4P1lZAJE9M1Zjzi9GZSJVGRuh7+ab0i29L7Dk+z+KKmk2/FrJyiL2HL5NiiLqxbnAwo0jZt6xZQDNjPOlcrrDoC1rluKxSfQfy7Xyq+jg2XVbGrQg6BZOSIbTKO/0c4mvevvMKnFVtyZznBgOa+aopDSinpVeR5IGtnnCBrKnxOgMY3kdCeR8ZC9CVqYABHInpmZotbBkj2swe05IUifzeo0aYDhoDspnldRmxXikdYCLDExsIWUXmWqZtyRhNrYnROV9uXTHWcuSpm3pQrHjISeX67ERQWcong/q78tHcXNX+/4nKL+f2BswDcOCMEpy+KPlfbfJkQBSyLqYudx1UfpWzgkHhE/gAYoJqNs1CL345d2yImHRHpw2D0WzVjqCx7Ee4GubRt6SAel3qJYKYi1PPm8c++3uhVGbkxmnmaS9K8+VfA/tvH6VpTexttzjw82t0C5JRKQAYiWukBx1q6fQATjTRN0Ew3V1GW4v5ZOamAaBAvm3fewSaKJOLr1aADfGRpSUf/dg=="},{"id":"fc6f24c3-594e-4153-854f-19250834eeb1","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"测试策略","description":"testing-strategy","prompt":"创建GEO项目的测试策略文档。详细说明Pytest测试框架的配置和使用方法,包括测试夹具、模拟对象和测试数据管理。文档化单元测试的实现,包括认证模块、引用引擎、查询处理等功能的测试用例设计。说明集成测试的策略,包括API端到端测试、数据库测试和系统集成测试。提供测试最佳实践,包括测试覆盖率要求、持续集成配置和测试环境管理。包含测试调试技巧和性能测试方法。","order":8,"progress_status":"completed","dependent_files":"tests/test_business_flow.py,tests/test_scheduler.py,tests/,tests/conftest.py,tests/test_auth.py,tests/test_citation_engine.py,tests/test_citations.py,tests/test_queries.py","gmt_create":"2026-04-22T18:56:47.083879+08:00","gmt_modified":"2026-04-23T15:22:16.070672+08:00","raw_data":"WikiEncrypted:Xd2Zu8BM8p49theGlFJHkHqkA5ycuMpwkltd7rjxfkZm5u2F/OCOa2rxC3NxLrZDZf5D15q4Vh8tHCK9cPrOS1FhaLT2kQoV20eRKF5vUqA82s4WqIE/a7BkaNIVq2bBtKDZezWPzAcH1FnzCbj1ziH1tZS8jAddEkcOldPLs3vCtokGRdTKPIZk2KpaXB3VulmLZJgfTmC7+ylbW6Z4X5J5lAKqSBC+5ULcbXOzIi/fdgAPevmCuh7Fl6t6LY4Zqgo+WmuRaHQBGUx5QWz3QvKvUqkX5mcSt+5SMSwZrdgl0Js4mJRZD+wQf/LjxBrE+jspugeswaFDoRmHTwiWEhjM3nwLTG706s2z1Ms21SXh4GgQU0+exIE6wOQkmZzOjT+4VpYuDv1BaNguc2NUGTgzP2xbGYw1/xoktbmvCs8tliFDEPFulre8tNFN9srTT6DEiaUrB1DNbWG/R0DLjwAjEPjVfocI83NtfJuwal9aWYjCyh0Xkz9yQsPOVM96zJAUOMatOKMXGmfvhgv4NLondzol1Fptpclf2Kl7u2g7qSFLfwtK6eq22dk2PAAqixUL9wsroK5P8xd5AG0cDnPKlbhgR3GqCC+3ysph8eWTN1846LBqRara2metcSM8ykSvgvVsUnxWaj2qmEbifbZnI5QrmMEcaxGDGcIFs/DitRERJdedyouzyzSfnYwIhry2+eFPSDaZ1BjSWkfQWailaOxDUj9mRg4MG7HqSqdvC0PkWkmuAZYO01FPBFFUUFG93MTzSyT7vr4lF40UynElg+YxFfq+LjPgZXY483JXp6/S8mtNdMRB5qqwdJ+UkPlV8OzX8SZxmhnr8fx9av615/Tx4HdgFEfctrSkP7jHQwdt3h5XJWmY4lH1u7ORipDi/1MKovQbkRaAR4QFQMwmQw5CnBjKsqtGHl1U5j7VygCGcC81azivE6rD9C49K4rwMJt0N4D6D6SgwCDJJyz8XrIfQX5q1e0ZHq1VzPsIIDHmbOZ/h4rOaRqA6H60xWByOqta+Qz+CRZgs12kY+yWP2R5Y9WTvcPyO/qpCd762zT0/c+IvHlXVlAH1Z5W8k0tzX4Ak4zLSlq7h+Bl/eW9J7g1UX4Mulr6CRUFh+eVexj4nfAgXAOkYZP2+AM4HI4wiAaP5+TkMpzQaTlkCbcKXpS2IvGfgUGcHxTp/yQTTiyst1sr38goyxOM4lo1m82mmHzG4nfGELx9Bln1UW9rkXdMQxKntRaBMs1ezGIRM6juxr/FZjQii+97mIdx49D3CPLEB3N4z9u5XDhbznJ0XjqpasCGsRuf1eMWlJKteTNEbISUk5NlJgAMgR5CqONn5xC4mtVShXyleMe37lhBDW1Eu4lni5eJjVQbtvA="},{"id":"803bfef4-3985-477e-a61c-915a246d0061","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"部署与运维","description":"deployment-operations","prompt":"创建GEO项目的部署与运维文档。详细说明Docker容器化部署的完整流程,包括镜像构建、容器编排和环境配置。文档化生产环境的部署策略,包括Nginx反向代理配置、SSL证书管理和负载均衡设置。说明监控和日志管理方案,包括应用健康检查、错误追踪和性能监控。提供运维最佳实践,包括备份策略、安全配置和故障恢复流程。包含CI/CD流水线配置和自动化部署方法。","order":9,"progress_status":"completed","dependent_files":"docker-compose.yml,backend/Dockerfile,frontend/Dockerfile,backend/requirements.txt,frontend/package.json","gmt_create":"2026-04-22T18:56:47.08417+08:00","gmt_modified":"2026-04-22T19:02:23.851886+08:00","raw_data":"WikiEncrypted:0IKfLNOWe9mZfG1jVts3w2XbjO+yyEmY3ONOjrL5GjA8+3c0QEcD9OcCVHu+1BW/N5NkoQV86wegqQ9ShX8iSWP5bp76U/WBxmHscWo6tU/8QlGuoaRAEg/ev4XsKkgC39pvYnfm60PfrpsE2hL1E2GfNGgG77OCHFDgZXXNbh9eCPmSkW8+YhED55nkyvxbnzr0nBnhsGtTzPUxHW1tar+GAvP539R0R/4mYQI87YJ70yZ7fcsaLwgOXmzP3dVnnmpLv+9t7xJhpCjyQsxfBfLLWBAADnbPD/XDJUZjfKYBtzZr96wOF29GlOAKy0gF60uUu4ldT+fyQn+nYlMXrNBIPA4xv5zs0p3ITXaqvMn5CnUdObefSllD9bB5ZAVzibfAxAovDM6bFfCBg78rOiHHyhVisNUpyQVL18Ac1DA/7UfdJH03ceu0hk7swBM7UlLgBUuU8iZZq8IKLS9Hunf/aF7T2fuFhJB+LGpBGwV+3OqWaT6v4reKhSW8vMM4x8XvLXgDttwPeltWlMknvzqijyjE0V38mue+Fe5fYrBZIK66PxnXrGUJKvZPwyAC/8LX6Hk+M3aBWjL4QkiKpbN2/pXCR6dXuPfbswZ11T0xSYdC8m+8SmC5UAgcryC0PI+ULgqxDhrheiaPIpfOAGnPr19iY2++A+xP/IPZf4L9hg2cNxi5vJ+ws54SmeQDUdbzx15ZECbSbz9xkShlRAYOjuUB9/IpZFt7EqH7sEqsFlbF73qp72JFPp2/QYv9av/WYcw6WVtRJG4TQ/Z9jB+DN6yCeSC6B/CfK05zoF7yrVWkLPiSSVYGDSBndH9EFJEJJvzO27tkS1wZXs4fTTE1StkTjYn8EBSRVvIs3Ywg1+iM2SFYcbn3I6QCeqaXuMJ/yEJikxIeLJGlNjiShYEo2FOMQ/6Xk+TlHkxUTepgnzhxFkPq9S2dqK/ZunroHtiqObkTqfkqta9V4EreMpXtO/FUBsVUrmehzAmO7CQ53L74HnyAqFJYWA/iDUt8rABkFT69QahL9BU4bts3AKhAypInqPXBL+0v0WyatxLd1jURgSq11VX9UBNBi4li3TcoFc9wsZpX3LeH1vNueLQzvssRDfTY9doM+g0rgBXDOO59DyyOKrDDMU5D52k5KI5SJOaWWxEa24TOoTfC79Jpc6tW0zAhdvdLD6u/pfsZd693uN4RM8fMtZPh58w5rcXuEHrhVI/0JThluHDnb6a962K0mt7d1makwsRTPZvpvaTrgiaoByIyOuKY7q1L"},{"id":"2148d7d6-25c4-497f-8894-c4eb7a0d2bd7","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"开发指南","description":"development-guide","prompt":"创建GEO项目的开发指南文档。详细说明代码规范和最佳实践,包括Python代码风格、TypeScript类型规范和命名约定。文档化开发流程和工作流,包括Git分支策略、代码审查流程和版本发布管理。说明开发工具的使用方法,包括IDE配置、调试技巧和性能分析工具。提供新功能开发的指导原则,包括模块设计、接口定义和测试要求。包含常见开发问题的解决方案和故障排查方法。","order":10,"progress_status":"completed","dependent_files":"frontend/tsconfig.json,frontend/tailwind.config.ts,frontend/.eslintrc.json,backend/requirements.txt,CONTRIBUTING.md","gmt_create":"2026-04-22T18:56:47.084469+08:00","gmt_modified":"2026-04-22T19:02:27.521973+08:00","raw_data":"WikiEncrypted:F3QgleoEfoy16cQggYe9C/ucQxiwh0okVA48AmODs5RKNS8ZgNngqmnHSFcG/1UaJxx+3dUn+EkMTpYUsOg40rZn+i8FphtVARmS5F9VbvHFcBiSlQaH+JQdr5mv45kEraKM1ZQU+BmiivHhLeOOFfZaf4wfF+UeGEwIZ5K3xgdlrIWG5cbIQke0aAuN4SwF5zFLobVRGY/vFRQZvRJuhJF3kH8cBQLGOghlzoYuvIMN0Syv8UZ5Bwec8p+VF36mvhOS8eFAksKHI6byEdpfq9UTiqxgtTq5L6Rj+37HpAP6khb++vSf1A0VT9NXevaHHhhVOWEkLrGTB/CHEKIg4VNJ5WWcgiIXY17BHQyXjIl4uJr0Fu2kI3bicD88UqLxf8vvCmO6N7KSm9OpUdXgYZoLSYFkU03TCUpLmPpUmOuHim5SyBdvTcd1cnYN48DrbjjDTnkYFYcHEsyGmIESGqrS8AMGyLqSnm5D5gNd5fcrj2+Nf4lrHZbGPN/GpOP8DVbWL3BxZsuvhmlXDJYDI4GYZU00w/cqWFfsh//f8AWxQksGMwuNq1z/Za4kUhyjJoFRB+vVjaYxJnmtnzHgcUsroK6pk+mnzl2sFRRlQRuMqDEWNhr31C+GITHwnZA+ISXYuGrJRXiyzbB/ICIMnQLKjTSGTJOv0611R7UfXQ9XSW5XcnEevf/xaKUaXyI/FSOb6NOMw9DEXCzTFiCSCqdXV24hyN/2eLMEWGD2d7hFS4CBCFDcKoDoV3UWasymEMLzPGi+O8yZ6SFUM2OFa+CFcm+CAV0glSLkFZMwoXi2vpmFERQ0wQbxo7EHKlZA2r9j8A33xsPpGi2bODYiAqMxjvXIIOSDkeokKHKcG+VglGTbPiYbKMmWb3UJ8LUxQsSFs9woUopss+huIV87sUJ7wqGYZGRktkElcXzByJv0D1LNiX7Zfkeq/DTmo9gY1fGwt8Lmr/ZToeLVUWrBHfDTpNtE8Vk+2HsAY/Q6mMhPpkWFCLXMhVexKYRhZ78g5WrTyG220Cs1UqKJ9EXOzd03j14pvt8XxTGNYB4512t168u5QR3RTob2+A8xvVhOvZ5bq9fUVTu2BMD6+hxnKeBlnxDPMCDB6TQppLI2ylmxd0STP3NVTtVXA7ZqRslddheuyl+fGiDx3YaKfbF9pmFBIcUVgxFDSi77e7ZkIQnP7jQeoaQtgVtuU/xJX5vPDaFWBTY5qcyicSVwBGJWIzfDA1ylBWdzcfOmtz21yOw="},{"id":"b2bb2e3c-5661-497c-97dd-15bf6ee8b7d4","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"扩展与定制","description":"extension-customization","prompt":"创建GEO项目的扩展与定制文档。详细说明系统的扩展机制,包括新增API接口、前端页面扩展和数据模型扩展的方法。文档化配置定制选项,包括环境变量配置、功能开关和性能调优参数。说明第三方集成的扩展方法,包括新AI平台接入、新数据库支持和新认证方式的集成流程。提供插件系统的使用指南和扩展开发的最佳实践。包含系统定制化的案例研究和实施建议。","order":11,"progress_status":"completed","dependent_files":"backend/app/workers/platforms/base.py,backend/app/models/,frontend/components/,backend/app/api/","gmt_create":"2026-04-22T18:56:47.085228+08:00","gmt_modified":"2026-04-22T19:03:46.033162+08:00","raw_data":"WikiEncrypted:9tFZPEMPWdLFkkE2XbXYMuMB8FuOYQ0fj+/JXYKsHGVuXRejugUICkyxL86Ju3MeDs2yZuuby22yn9F5xTbpPvuSC/FoLxV09I2ZpvfpcQFUCVmZyQN67BPwYA36FWIbbHI5AJYWayiJUo+io2WnBda4ESUkmi1Ifq6VpdD6Et8Rw2b8dgDDMxi9XaN9V0JJWAK4CsV0ZYGNAK947J00M9KveVb322Q2MkjA5aw0eylKLH0fzY4qNXNGDmfCOuncuvGiH/5DvAXCDuDLYzVd1AHr/9UgPCvmp017Oo8KijVdD66YD+QM7Rh+24GqNvD5xFbOQGd7ey9Mzs33E6JIrsbUhBvbLJOVlRo0EdScVPZsU4HO6zqDAg0ozD1a5kGX/WxHBvhKBJATucW9vC2XG5g21SjjE6NdebD3z3ZjN+cu8jYHMi1BwWhOmvNRvN8HIGjzntLglg7fNrii0iJXTxpZ8Mbpmu6Tk88oMecsGleuA2xhK1yEWycuQ2dZn5e179BE3mGaSOT0Fvp5yXgL4htvqVTAu4QZ+JFJVk8e4NkI2KaoEgS8vmkD+tvnSal6LUgMzXvRJVj5c7y5LEqxY7QwEbvunmtmHaw9xxVNmfj54tFWSDCSUVCBp+otUfdEq+e6UMOQ64QITUXyYlP+zGW5J0ZWBf9GlU5j70IekNuO3mLp/yU922OD64PhCEL3HOTmAtV1L1vunWchdtvyht6rkYuys0Al1WSGeCmVT23fmJlSuKe++K/qQ/TheLhgA4euY3OnlacLzbia76+B2p4tJY+XvzzDZ5c3M6YdKmW0+iKB+TRJgVz1Q8GpFIzUk/ShBam/TanUxOcC0ci89hjchiYImL1tQeigX4Rgfcn8mXYH956z7eyiSYtqk7uIsQYfiW7tqvcyN0jJpGUVHd9IzvK2NAC+ICHilErsg5hRJ66KFaugTnjd2WoIkU8rktkywDasvD24NZM417z8B8l8uHq9XNcg+2bdPA9hqx5ujEUiGXyWkBNvwCZXg9aL2q+4y5NMoZh6ak8uEjC1kc1S61q2kFyKyIjV7QbCMaHhjnrBnkSg/kV2cGrBPeOqWdtANBw5wZ/OJ38FLWJ5nPOzreTmQ/R6J6YNCfmRPpfpVj0tH0o+0rffNxxXa2TnUbu4OSSLdCljK6CsfuYmBOStwIQtEs8T8/+PsrbQKY9NM1KHqhg5Nk72UNylvGupV/Zccfjg3z78M9uUqtXSOA=="},{"id":"8e3d62e8-ddbe-4820-bc41-7da9e91ea598","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"故障排除与FAQ","description":"troubleshooting-faq","prompt":"创建GEO项目的故障排除与常见问题解答文档。详细列举和解决常见的认证问题、数据库连接问题、API调用问题和性能问题。提供系统监控和诊断的方法,包括健康检查、错误日志分析和性能指标监控。说明调试技巧和工具使用,包括开发环境调试、生产环境问题排查和性能分析方法。包含常见错误代码的含义和解决方案,以及预防性维护的最佳实践。提供紧急情况下的故障恢复流程和应急处理方案。","order":12,"progress_status":"completed","dependent_files":"backend/app/main.py,backend/app/config.py,frontend/lib/api.ts,docker-compose.yml","gmt_create":"2026-04-22T18:56:47.085508+08:00","gmt_modified":"2026-04-22T19:04:06.13183+08:00","raw_data":"WikiEncrypted:CaKOW8OSSWs4aEYk06Hu0tuZET5JxbVXxA/4vFailoRiq8l6SCRMdp2PbHfZPheZXyPTAgE3AT8Ce8j9xPOCdJxNKAOstuOjZEIRRi9OOYwoluR4MUnob24X+IyLHwTgsJGf9uPY1LVFTI9RTQt8aG1cBHibaRNEJ8+DVkXJW/EDypOxFpOxDxlaCscMdiPRLwhr9V4vJqWV9j2rk1LjP2/M8SJJQ8hbaDoeLevKdECB+aEw9JrL9ycGW0dhxKxQLf/ril9zNHrvahlSXbVZSZ39dpBl57NdFcFaOYt+paf3O6hv3bCTAKGLTRnYa/IuAZ6Xa7YnhqaGQ684LKCBz6VySRNYVUCEvZotYHf1IQdWOj0zFzR7LEIEikIlZyKak++yTNYfbQyBEzye3g6YCmlh6VaVmtGIRzjOYpu0K1UftNcRa1mWnIMrB/Pqe9DpNTg+Yxo3ZHrPyv3ZAmrd8MqA+T+P+/NerCmFD3dRf94NLPP8KU7in+VSfEjVmdE0N+3OfntU+uvNL/kkOhyWNRUKYKFxbqdwCTKqv3Nchs73XyhfNRP7gPkR/stgnowCRnKWS4ncUEJDZTWVFID52kE8nH7Kq/yuB5bJxFX9AeUUaNSBgvMc5YNkq3vULFEqC1/N0bpU4r9+0/U/BcMktmNrRr1HnOIPl3QzwjIsT3j2lp4UXS3Qm4BZFJsh8MVLfgOIMbO1jbuGCXHl88T/rZOCNwf4q93vWo2HnOxDkbdICWgZ9dinRr85RkFQjNWlXdAk0XG8lQPotwJLvS+ZASOv1aWyL42jk/mTJcOU53PFT5rf3+WpVmhNWQGguZ0l04eubO4Va39c6h/+DNsl0OEAiozIMohEgz77qsD47Kf0KZMLnqL3o30TYXYamX/CP8+epBqSWgmzX/ETrrRl/1/JPkSDc//0VC8UmWBJAsdUdzyQh9v9iQddyIZ4MV1k4MGTJ6GwrUqVTszShZJVG80wDMLQvJGqJ0T5rH1P7kBaJ5nBnth822MBy7B1IhN6nDqtLhOJcqT8Qt6x8ODGFx1QMNBdS4lHq5IcRy+nZKiPP3V7uMuuFQsNNodTRhmNnuAliJACWS89hPiGroan2VkusxIu2DW8wdQ/3Z31mIn4cE3O3+Aq6lO+BEMAuYh5WkOEmGsF3cjX/zPPiuBSP7Vd2a9o6gPA7MBfneMWyqodMp6PKh7EG26gaKUaIGq6VkQobSAVfbLxmfIMW6cZ5STH4U1/A7gV2PeuWzwwEJz7axGVQIJ6A9geQevZvD/cnX6BQBuOMkdAOB6PApCpQA=="}],"wiki_items":[{"catalog_id":"1bb55e12-24c4-42cb-8f59-ddc303460d45","title":"项目概述","description":"project-overview","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"34e572eb-6fc8-4de7-8061-63783ef8be24","gmt_create":"2026-04-22T18:58:50.323135+08:00","gmt_modified":"2026-04-22T18:58:50.329272+08:00"},{"catalog_id":"e3ae8925-4862-4280-b85a-0b376841b15e","title":"快速开始","description":"getting-started","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"7f028ad1-e989-43ea-b945-c79c33e6f0e3","gmt_create":"2026-04-22T18:58:54.232866+08:00","gmt_modified":"2026-04-22T18:58:54.238013+08:00"},{"catalog_id":"7c2ac186-ec90-400a-ac1d-b3b7ca2f01d5","title":"后端系统架构","description":"backend-architecture","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"c7eb113b-b503-4d83-be7f-9ccf3350c9d9","gmt_create":"2026-04-22T18:59:20.999631+08:00","gmt_modified":"2026-04-22T18:59:21.004772+08:00"},{"catalog_id":"d907a8eb-795c-4060-9cdd-50d31cf39be3","title":"前端系统架构","description":"frontend-architecture","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"3af3bb9e-4d99-4dc3-b1ed-2686db385c26","gmt_create":"2026-04-22T18:59:54.989699+08:00","gmt_modified":"2026-04-22T18:59:54.994419+08:00"},{"catalog_id":"243a1a45-d31f-405e-a3b9-694d2fe617d5","title":"数据库设计","description":"database-design","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","gmt_create":"2026-04-22T19:00:15.762815+08:00","gmt_modified":"2026-04-23T20:35:45.9226+08:00"},{"catalog_id":"7416db23-312f-478d-8883-2fc3c41ac2e8","title":"任务调度系统","description":"task-scheduling-system","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","gmt_create":"2026-04-22T19:01:21.979952+08:00","gmt_modified":"2026-04-23T15:20:09.061378+08:00"},{"catalog_id":"7e66719b-4a8a-484d-889d-10fdc76788bb","title":"AI平台集成","description":"ai-platform-integration","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","gmt_create":"2026-04-22T19:01:25.981164+08:00","gmt_modified":"2026-04-23T20:31:36.620216+08:00"},{"catalog_id":"dd12cc44-0c95-45d5-a726-e7b8bcf2531b","title":"API接口文档","description":"api-documentation","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","gmt_create":"2026-04-22T19:01:28.269494+08:00","gmt_modified":"2026-04-23T15:19:45.663706+08:00"},{"catalog_id":"803bfef4-3985-477e-a61c-915a246d0061","title":"部署与运维","description":"deployment-operations","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"98909ecc-fceb-4ab7-a26f-741838eb2e50","gmt_create":"2026-04-22T19:02:23.847103+08:00","gmt_modified":"2026-04-22T19:02:23.852058+08:00"},{"catalog_id":"2148d7d6-25c4-497f-8894-c4eb7a0d2bd7","title":"开发指南","description":"development-guide","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"643984fc-5a57-498b-8f25-68cc318d9d82","gmt_create":"2026-04-22T19:02:27.517117+08:00","gmt_modified":"2026-04-22T19:02:27.522128+08:00"},{"catalog_id":"fc6f24c3-594e-4153-854f-19250834eeb1","title":"测试策略","description":"testing-strategy","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","gmt_create":"2026-04-22T19:02:30.709013+08:00","gmt_modified":"2026-04-23T15:22:16.070899+08:00"},{"catalog_id":"7c3e3c0b-5d1f-4d64-99be-668041c6cd9d","title":"核心框架配置","description":"core-framework","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"f94da0b4-8a07-4de1-b0b3-d3b32a12c3c1","gmt_create":"2026-04-22T19:03:21.689103+08:00","gmt_modified":"2026-04-22T19:03:21.693211+08:00"},{"catalog_id":"b2bb2e3c-5661-497c-97dd-15bf6ee8b7d4","title":"扩展与定制","description":"extension-customization","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"c5849940-e223-4222-be17-aa0a6cb36bc8","gmt_create":"2026-04-22T19:03:46.027426+08:00","gmt_modified":"2026-04-22T19:03:46.033304+08:00"},{"catalog_id":"8e3d62e8-ddbe-4820-bc41-7da9e91ea598","title":"故障排除与FAQ","description":"troubleshooting-faq","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"85306af2-0edf-42b8-b7ad-c03e769cb1e8","gmt_create":"2026-04-22T19:04:06.127415+08:00","gmt_modified":"2026-04-22T19:04:06.131953+08:00"},{"catalog_id":"bcaa04da-04e3-427f-ba01-847ad657e78a","title":"Next.js应用配置","description":"nextjs-app-config","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"c112a3f4-b0a1-4c4a-a325-e3ede8c90be6","gmt_create":"2026-04-22T19:04:47.356556+08:00","gmt_modified":"2026-04-22T19:04:47.361504+08:00"},{"catalog_id":"9e3d703f-f424-47f4-84df-b99873b93e5a","title":"项目介绍","description":"project-introduction","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"2793782c-91c8-4052-b9db-39513426c736","gmt_create":"2026-04-22T19:05:00.372036+08:00","gmt_modified":"2026-04-22T19:05:00.376145+08:00"},{"catalog_id":"a06436ee-1678-4a51-bbf8-b0d0ac3456b9","title":"数据库架构","description":"database-architecture","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"d5c75004-b01b-416f-850a-4791c5489a32","gmt_create":"2026-04-22T19:05:13.619093+08:00","gmt_modified":"2026-04-22T19:05:13.624074+08:00"},{"catalog_id":"7fea5a24-e6de-4003-bc70-9dae6d8fdb25","title":"适配器架构设计","description":"adapter-architecture","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"37003fc0-1cf5-4264-996b-40807001875f","gmt_create":"2026-04-22T19:06:14.01196+08:00","gmt_modified":"2026-04-22T19:06:14.016291+08:00"},{"catalog_id":"b027f234-4ac5-4d6d-9b38-afc8054325f5","title":"单元测试","description":"unit-testing","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"8150ddbb-7aa9-48d0-9953-2ef55e4bcfd5","gmt_create":"2026-04-22T19:06:55.084551+08:00","gmt_modified":"2026-04-22T19:06:55.090188+08:00"},{"catalog_id":"940e5918-1689-4001-a284-44f2de75b8ee","title":"认证接口","description":"authentication-api","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"7c7564ee-7fe2-4555-8ff0-4ec1b757997a","gmt_create":"2026-04-22T19:07:12.352034+08:00","gmt_modified":"2026-04-22T19:07:12.356599+08:00"},{"catalog_id":"78288302-33bd-44f7-8b29-24f516c8b6bb","title":"调度器设计","description":"scheduler-design","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","gmt_create":"2026-04-22T19:07:22.166733+08:00","gmt_modified":"2026-04-23T20:33:30.132576+08:00"},{"catalog_id":"6406f42a-e10b-4a2b-84a5-0a21c1c759ea","title":"代码规范","description":"code-standards","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"13c568d2-dfa7-4d1b-81c0-dfef247cbb67","gmt_create":"2026-04-22T19:07:51.271116+08:00","gmt_modified":"2026-04-22T19:07:51.274241+08:00"},{"catalog_id":"a91fff3d-ec5e-43df-8176-22f0084109ef","title":"功能扩展","description":"feature-extension","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"d2c7157d-157f-4990-8f76-11f3ea5435f7","gmt_create":"2026-04-22T19:08:25.13644+08:00","gmt_modified":"2026-04-22T19:08:25.14088+08:00"},{"catalog_id":"e8ec6ac6-ad1a-4332-a7be-727b47d71233","title":"Docker容器化部署","description":"docker-containerization","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"1ed0b482-3d6a-4bfd-af40-47a5d1f3e802","gmt_create":"2026-04-22T19:08:34.079807+08:00","gmt_modified":"2026-04-22T19:08:34.084736+08:00"},{"catalog_id":"c19260e2-5163-43d4-b35a-b48aae995f4a","title":"认证系统","description":"authentication-system","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"df661133-efbf-43fe-97c3-f581c81f47a7","gmt_create":"2026-04-22T19:09:25.676813+08:00","gmt_modified":"2026-04-22T19:09:25.682345+08:00"},{"catalog_id":"9b71fe02-5927-4a19-8db8-66eb129ecd9a","title":"认证系统前端实现","description":"auth-system-frontend","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"2b32ec11-d228-42c0-9232-103ba7e44f71","gmt_create":"2026-04-22T19:09:48.743111+08:00","gmt_modified":"2026-04-22T19:09:48.747746+08:00"},{"catalog_id":"b80dc237-1a6a-401f-9f4d-14190edebcdd","title":"技术栈","description":"technology-stack","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"e23bd86e-b4ac-40eb-b1c1-38d929fd5419","gmt_create":"2026-04-22T19:09:54.21211+08:00","gmt_modified":"2026-04-22T19:09:54.216205+08:00"},{"catalog_id":"7e5c3b8e-5aa3-448d-ae52-d5a96a413b0b","title":"表结构设计","description":"table-schema-design","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"c3fa653f-8dd7-41fe-8c2e-8b60adbf70f4","gmt_create":"2026-04-22T19:10:23.573187+08:00","gmt_modified":"2026-04-22T19:10:23.576944+08:00"},{"catalog_id":"cc7a1f1b-c70e-4c61-bfbc-6dc408a12ff2","title":"查询执行流程","description":"query-execution-flow","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"2fc79486-ec65-4533-860a-89c8877c2ea0","gmt_create":"2026-04-22T19:11:29.34722+08:00","gmt_modified":"2026-04-22T19:11:29.353951+08:00"},{"catalog_id":"fec685a0-c9bb-4048-baf4-40b56b2aa29c","title":"集成测试","description":"integration-testing","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"8c17b44f-1586-459b-a83d-c9b961cd2142","gmt_create":"2026-04-22T19:12:37.811472+08:00","gmt_modified":"2026-04-22T19:12:37.820956+08:00"},{"catalog_id":"9fe32b83-3697-4939-8b10-524f5ed3e65e","title":"Kimi平台集成","description":"kimi-platform-integration","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"2126339b-b0f5-4152-924b-cbe028cd0c39","gmt_create":"2026-04-22T19:12:57.009145+08:00","gmt_modified":"2026-04-23T20:35:18.737804+08:00"},{"catalog_id":"b10c2334-a850-471a-9851-a1c698e3a485","title":"查询管理接口","description":"queries-api","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","gmt_create":"2026-04-22T19:13:13.111099+08:00","gmt_modified":"2026-04-23T20:33:57.632097+08:00"},{"catalog_id":"0c1d3542-92cf-4796-8dba-82caf2f7b361","title":"开发流程","description":"development-workflow","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"222a9371-45c1-4e0d-b1da-e8ada1c501c2","gmt_create":"2026-04-22T19:13:23.079488+08:00","gmt_modified":"2026-04-22T19:13:23.082539+08:00"},{"catalog_id":"109a8fb1-6619-4bc7-8481-e28cc2127d24","title":"生产环境部署","description":"production-deployment","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"26f80935-eac2-44ee-bcdb-d6a79c537750","gmt_create":"2026-04-22T19:13:58.693673+08:00","gmt_modified":"2026-04-22T19:13:58.69756+08:00"},{"catalog_id":"4d5ac6d7-8812-414b-b8df-68574cc36d7d","title":"配置定制","description":"configuration-customization","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"e1e0bd0e-01b3-4543-9781-d9beb32b9a57","gmt_create":"2026-04-22T19:14:17.837895+08:00","gmt_modified":"2026-04-22T19:14:17.84356+08:00"},{"catalog_id":"159f2ccf-71b7-4d1b-a4c4-c15b23a4126e","title":"API接口设计","description":"api-design","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"11936bb5-374f-40f4-bb53-b75264fc4b9d","gmt_create":"2026-04-22T19:15:14.073829+08:00","gmt_modified":"2026-04-22T19:15:14.079089+08:00"},{"catalog_id":"9cc59a5a-f597-4707-b994-b6c49514d553","title":"页面组件设计","description":"page-components","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","gmt_create":"2026-04-22T19:15:16.958138+08:00","gmt_modified":"2026-04-23T15:19:43.818584+08:00"},{"catalog_id":"f70f5d9b-d7c7-4dc6-b36a-5f4508e6acaa","title":"系统架构","description":"system-architecture","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"70b3948e-f456-42d2-b7ad-a0097ad5ee5f","gmt_create":"2026-04-22T19:15:17.448445+08:00","gmt_modified":"2026-04-22T19:15:17.452857+08:00"},{"catalog_id":"816a2805-76c9-4f32-a3cf-96428208081e","title":"数据模型","description":"data-models","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"262a3941-fdc6-46b0-b767-be40aa9d5761","gmt_create":"2026-04-22T19:16:35.087998+08:00","gmt_modified":"2026-04-23T15:21:46.785271+08:00"},{"catalog_id":"64cbb894-755f-47b5-854e-c26c7821e9b2","title":"文心平台集成","description":"wenxin-platform-integration","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","gmt_create":"2026-04-22T19:16:36.921828+08:00","gmt_modified":"2026-04-23T20:31:50.506906+08:00"},{"catalog_id":"412f8cb5-54c1-4f32-8966-fa0e5e75bbca","title":"性能优化","description":"performance-optimization","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"d8e2cef5-37e6-44e7-8a7b-9bd365b82a72","gmt_create":"2026-04-22T19:16:37.806188+08:00","gmt_modified":"2026-04-22T19:16:37.81795+08:00"},{"catalog_id":"2f7fa0ab-cd3d-4f45-a1c1-389d5a0c2561","title":"开发工具","description":"development-tools","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"979be617-a83d-4db9-b73e-38581348f8c1","gmt_create":"2026-04-22T19:17:43.348035+08:00","gmt_modified":"2026-04-22T19:17:43.3539+08:00"},{"catalog_id":"40ac97e8-7ef0-4198-82d7-d2e332be9d34","title":"测试最佳实践","description":"test-best-practices","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"05e59a75-d52f-42e1-a924-f6a32f06f2fe","gmt_create":"2026-04-22T19:17:48.811042+08:00","gmt_modified":"2026-04-22T19:17:48.815559+08:00"},{"catalog_id":"41a414d2-e13a-497c-8a03-212624dbf5fe","title":"引用数据接口","description":"citations-api","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"737f8d6c-bd8f-4c11-b142-71a400423323","gmt_create":"2026-04-22T19:18:18.048509+08:00","gmt_modified":"2026-04-22T19:18:18.055466+08:00"},{"catalog_id":"2713d5c6-c6b0-4a38-83f6-56940c2bf695","title":"监控与日志管理","description":"monitoring-logging","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"eb1288f7-5ea1-413a-8f54-4f870306d14d","gmt_create":"2026-04-22T19:18:41.294736+08:00","gmt_modified":"2026-04-22T19:18:41.773932+08:00"},{"catalog_id":"c8a468af-2982-4d9c-82c0-313b5d2ee89c","title":"第三方集成","description":"third-party-integration","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"e9a02c86-236b-49cb-bbed-9462ee123c04","gmt_create":"2026-04-22T19:19:17.34688+08:00","gmt_modified":"2026-04-22T19:19:17.362503+08:00"},{"catalog_id":"9eee7fab-6cd9-4ef3-9415-2f8137f1d199","title":"数据模型设计","description":"data-models","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"23ad3419-5473-4e2c-ac87-d9715090279d","gmt_create":"2026-04-22T19:19:19.260533+08:00","gmt_modified":"2026-04-22T19:19:19.282116+08:00"},{"catalog_id":"f210509a-2381-46fe-8c22-0ed768e6ca70","title":"数据库迁移","description":"database-migration","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"7c0201f7-9e02-4cba-9ee1-81c3477f049a","gmt_create":"2026-04-22T19:20:15.023549+08:00","gmt_modified":"2026-04-22T19:20:15.06665+08:00"},{"catalog_id":"d9e45b2a-6443-4a9b-8ed3-4c3c04773772","title":"UI组件库","description":"ui-component-library","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"760610d4-dff6-4c6d-831f-7c9078db86a6","gmt_create":"2026-04-22T19:20:16.20858+08:00","gmt_modified":"2026-04-23T15:22:23.574113+08:00"},{"catalog_id":"178b681f-d013-44b7-aef8-dee7ca8c22a9","title":"核心功能","description":"core-features","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"1c4316a1-f1d7-46da-bcfc-ea2fa0c56110","gmt_create":"2026-04-22T19:20:37.644038+08:00","gmt_modified":"2026-04-22T19:20:37.649918+08:00"},{"catalog_id":"ac0658da-7670-4e41-9e57-02d9d0d50680","title":"报告导出接口","description":"reports-api","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"ae62f4a8-8840-4c8e-9a42-3373370299ff","gmt_create":"2026-04-22T19:21:24.241821+08:00","gmt_modified":"2026-04-22T19:21:24.246484+08:00"},{"catalog_id":"aad61788-1dc9-4682-b743-47188d7aecb6","title":"引用检测算法","description":"citation-detection-algorithm","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"00359e45-209d-4be3-8795-50dea52bdba1","gmt_create":"2026-04-22T19:21:33.106655+08:00","gmt_modified":"2026-04-22T19:21:33.125906+08:00"},{"catalog_id":"7cb1d921-44ed-4e22-8bf9-baba7ff8b7c7","title":"新功能开发","description":"feature-development","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"422c46b3-e69c-4023-a878-411a48ae182f","gmt_create":"2026-04-22T19:21:46.910999+08:00","gmt_modified":"2026-04-22T19:21:46.916175+08:00"},{"catalog_id":"c45e66b9-1ca0-41da-a796-6b98f394faa1","title":"运维最佳实践","description":"maintenance-operations","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"aa6db9b6-71e1-4497-a0e2-f3ff25358d3a","gmt_create":"2026-04-22T19:22:39.442855+08:00","gmt_modified":"2026-04-22T19:22:39.447035+08:00"},{"catalog_id":"bfca5ffe-8905-4ac2-a0a3-8e4dc43533b1","title":"数据可视化","description":"data-visualization","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"a40267bc-925a-4364-a01f-b96d3df60aea","gmt_create":"2026-04-22T19:23:03.398982+08:00","gmt_modified":"2026-04-22T19:23:03.405853+08:00"},{"catalog_id":"05214c1a-d804-4f3c-9048-20ba4de3be0f","title":"引用检测引擎","description":"citation-engine","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"19e75845-5147-4aeb-90be-16f3aa270465","gmt_create":"2026-04-22T19:23:12.049419+08:00","gmt_modified":"2026-04-23T20:33:37.372858+08:00"},{"catalog_id":"b32b024e-2d06-45c8-94c2-a07fd25ab9b3","title":"快速开始","description":"quick-start","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"7e679d62-c415-4d6a-a7e5-d41d00e0ed69","gmt_create":"2026-04-22T19:23:49.794133+08:00","gmt_modified":"2026-04-22T19:23:49.797304+08:00"},{"catalog_id":"850fc702-3eb6-45b4-acd2-ae87fec1f4f1","title":"工作器系统","description":"worker-system","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"83fe6837-7874-4467-8114-103062f15f58","gmt_create":"2026-04-22T19:24:30.524061+08:00","gmt_modified":"2026-04-22T19:24:30.529283+08:00"},{"catalog_id":"fda0598d-7e92-4b8b-be52-92ae63c3cd98","title":"API客户端","description":"api-client","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"7bd2c461-81b0-48e8-8cb3-b4b14305806d","gmt_create":"2026-04-22T19:24:50.482622+08:00","gmt_modified":"2026-04-22T19:24:50.486476+08:00"},{"catalog_id":"15d6170d-716c-4d2a-833d-81211a59027c","title":"平台适配器扩展指南","description":"platform-adapter-extension","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"2632a6f9-774e-4a91-94da-a984bdb20758","gmt_create":"2026-04-22T19:25:18.714623+08:00","gmt_modified":"2026-04-22T19:25:18.720105+08:00"}],"wiki_overview":{"content":"\u003cblog\u003e\n\n# GEO 平台项目全面分析\n\n## 1. 项目介绍\n\n### 目标与愿景\nGEO 平台是一个基于人工智能技术的学术查询与引用管理系统,旨在为用户提供智能化的品牌引用检测和数据分析服务。该项目通过集成多个AI平台,实现对网络内容中特定品牌引用的自动检测和统计分析。\n\n### 核心目标\n- **智能引用检测**:自动识别网络内容中对特定品牌的引用情况\n- **多平台集成**:支持多个AI平台的数据获取和处理\n- **实时监控**:提供定时查询和实时更新功能\n- **数据可视化**:通过图表展示引用趋势和统计数据\n\n### 目标用户\n- 学术研究人员\n- 市场分析师\n- 品牌监测机构\n- 内容创作者\n\n## 2. 技术架构\n\n### 整体架构设计\n\n```mermaid\ngraph TB\n subgraph \"前端层\"\n FE[Next.js 前端]\n UI[React 组件]\n Auth[认证系统]\n end\n \n subgraph \"后端层\"\n API[FastAPI API]\n WS[工作器]\n SCH[调度器]\n end\n \n subgraph \"数据层\"\n DB[(PostgreSQL)]\n RD[Redis 缓存]\n end\n \n subgraph \"AI平台\"\n WX[Wenxin 平台]\n KM[Kimi 平台]\n end\n \n FE --\u003e API\n UI --\u003e FE\n Auth --\u003e FE\n API --\u003e DB\n API --\u003e RD\n WS --\u003e WX\n WS --\u003e KM\n SCH --\u003e WS\n API --\u003e WS\n```\n\n### 核心设计模式\n- **分层架构**:清晰的前后端分离和业务逻辑分层\n- **异步编程**:基于 asyncio 的高性能异步处理\n- **依赖注入**:通过 FastAPI 的依赖系统管理服务\n- **适配器模式**:统一不同AI平台的接口调用\n\n### 系统关系图\n\n```mermaid\nsequenceDiagram\n participant U as 用户\n participant F as 前端\n participant B as 后端API\n participant S as 调度器\n participant W as 引用引擎\n participant P as AI平台\n \n U-\u003e\u003eF: 发起查询请求\n F-\u003e\u003eB: HTTP请求\n B-\u003e\u003eS: 触发查询任务\n S-\u003e\u003eW: 执行查询\n W-\u003e\u003eP: 调用AI平台\n P--\u003e\u003eW: 返回结果\n W--\u003e\u003eB: 处理后的数据\n B--\u003e\u003eF: 响应结果\n F--\u003e\u003eU: 展示数据\n```\n\n## 3. 关键实现\n\n### 主要入口点\n\n**后端主入口**\n- `backend/app/main.py` - FastAPI 应用主入口,包含路由注册和中间件配置\n\n**前端主入口**\n- `frontend/app/layout.tsx` - Next.js 应用布局组件,包含全局样式和提供者配置\n\n### 核心模块\n\n**数据库配置**\n- `backend/app/database.py` - SQLAlchemy 异步数据库配置和会话管理\n\n**配置管理**\n- `backend/app/config.py` - Pydantic 设置类,管理环境变量和配置参数\n\n**工作器系统**\n- `backend/app/workers/scheduler.py` - APScheduler 定时任务调度器\n- `backend/app/workers/citation_engine.py` - 引用检测引擎核心\n\n**API 路由**\n- `backend/app/api/auth.py` - 用户认证相关接口\n- `backend/app/api/citations.py` - 引用数据相关接口\n- `backend/app/api/queries.py` - 查询任务相关接口\n\n### 配置方法\n\n**Docker 配置**\n- `docker-compose.yml` - 多容器部署配置,包含数据库、缓存和应用服务\n\n**依赖管理**\n- `backend/requirements.txt` - Python 后端依赖包\n- `frontend/package.json` - Node.js 前端依赖包\n\n### 外部依赖\n\n**后端关键技术栈**\n- FastAPI + Uvicorn:高性能异步Web框架\n- SQLAlchemy 2.0:异步ORM框架\n- APScheduler:任务调度框架\n- Redis:缓存和队列存储\n- Playwright:浏览器自动化\n\n**前端关键技术栈**\n- Next.js 14:React 框架\n- Radix UI:可访问性UI组件库\n- Recharts:数据可视化图表\n- Tailwind CSS:CSS框架\n\n### 集成点\n\n**AI平台适配**\n- `backend/app/workers/platforms/kimi.py` - Kimi AI平台适配器\n- `backend/app/workers/platforms/wenxin.py` - 百度文心平台适配器\n\n**认证集成**\n- `frontend/components/providers.tsx` - NextAuth.js 认证提供者\n- `frontend/lib/auth.ts` - 前端认证工具函数\n\n### 组件关系图\n\n```mermaid\ngraph LR\n subgraph \"认证模块\"\n AUTH_API[认证API]\n AUTH_FE[认证前端]\n NEXT_AUTH[NextAuth集成]\n end\n \n subgraph \"查询模块\"\n QUERY_API[查询API]\n QUERY_FE[查询前端]\n SCHEDULER[调度器]\n ENGINE[引用引擎]\n end\n \n subgraph \"数据模块\"\n MODELS[数据模型]\n DB[(数据库)]\n REDIS[(Redis)]\n end\n \n AUTH_API --\u003e MODELS\n QUERY_API --\u003e MODELS\n ENGINE --\u003e MODELS\n AUTH_FE --\u003e AUTH_API\n QUERY_FE --\u003e QUERY_API\n SCHEDULER --\u003e ENGINE\n ENGINE --\u003e DB\n ENGINE --\u003e REDIS\n AUTH_API --\u003e DB\n QUERY_API --\u003e DB\n```\n\n## 4. 核心功能\n\n### 功能概览\n\n**用户管理功能**\n- 用户注册和登录认证\n- JWT 令牌管理和会话维护\n- 用户权限控制\n\n**查询管理功能**\n- 自定义关键词查询\n- 多平台AI数据获取\n- 定时任务调度\n- 查询历史记录\n\n**引用检测功能**\n- 品牌引用自动检测\n- 置信度评分算法\n- 竞争品牌识别\n- 文本上下文提取\n\n**数据分析功能**\n- 引用趋势图表\n- 平台对比分析\n- 统计报表生成\n\n### 实现亮点\n\n**智能匹配算法**\n- `backend/app/workers/citation_engine.py` - 实现精确匹配、别名匹配和模糊匹配三种策略\n- 支持中文和英文混合文本处理\n- 提供置信度评分和位置信息\n\n**异步任务处理**\n- `backend/app/workers/scheduler.py` - 基于 APScheduler 的异步任务调度\n- 支持多平台并发查询\n- 完善的任务状态跟踪\n\n**响应式前端界面**\n- `frontend/app/(dashboard)/` - Next.js App Router 页面组织\n- `frontend/components/charts/` - 数据可视化组件\n- `frontend/components/ui/` - 可复用UI组件库\n\n### 功能架构图\n\n```mermaid\nstateDiagram-v2\n [*] --\u003e 用户认证\n 用户认证 --\u003e 查询管理: 登录成功\n 查询管理 --\u003e 任务调度: 创建查询\n 任务调度 --\u003e 引用检测: 定时触发\n 引用检测 --\u003e 数据处理: 获取AI结果\n 数据处理 --\u003e 结果展示: 处理完成\n 结果展示 --\u003e 查询管理: 新查询\n 结果展示 --\u003e [*]: 退出系统\n \n state 查询管理 {\n [*] --\u003e 创建查询\n 创建查询 --\u003e 编辑查询\n 编辑查询 --\u003e 删除查询\n 删除查询 --\u003e [*]\n }\n \n state 引用检测 {\n [*] --\u003e 平台查询\n 平台查询 --\u003e 品牌匹配\n 品牌匹配 --\u003e 竞争检测\n 竞争检测 --\u003e [*]\n }\n```\n\n## 5. 总结与建议\n\n### 项目架构特点\n\n**架构优势**\n- 清晰的分层设计,前后端职责明确\n- 异步编程模型提升了系统性能\n- 模块化设计便于功能扩展和维护\n- 完善的错误处理和日志记录机制\n\n**技术亮点**\n- 基于现代技术栈的全栈开发\n- 智能算法与工程实践的结合\n- 完整的开发到部署流程\n- 良好的代码组织和文档规范\n\n### 改进建议\n\n**性能优化**\n- 考虑引入连接池优化数据库连接\n- 实现缓存策略减少重复查询\n- 添加限流机制防止API滥用\n\n**功能扩展**\n- 增加更多AI平台支持\n- 实现批量查询功能\n- 添加导出数据功能\n- 增强搜索过滤条件\n\n**代码质量**\n- 完善单元测试覆盖率\n- 添加API文档自动生成\n- 实现更详细的错误处理\n- 优化前端组件复用性\n\n### 下一步发展\n\n**短期目标**\n- 完善用户认证和权限系统\n- 优化引用检测算法准确性\n- 增强前端用户体验\n\n**长期规划**\n- 支持多语言和国际化\n- 实现移动端应用\n- 添加机器学习模型优化\n- 构建开发者API平台\n\nSources:\n- [main.py](backend/app/main.py)\n- [config.py](backend/app/config.py)\n- [database.py](backend/app/database.py)\n- [layout.tsx](frontend/app/layout.tsx)\n- [providers.tsx](frontend/components/providers.tsx)\n- [scheduler.py](backend/app/workers/scheduler.py)\n- [citation_engine.py](backend/app/workers/citation_engine.py)\n- [auth.py](backend/app/api/auth.py)\n- [docker-compose.yml](docker-compose.yml)\n- [requirements.txt](backend/requirements.txt)\n- [package.json](frontend/package.json)\n\n\u003c/blog\u003e","gmt_create":"2026-04-22T18:54:45.079999+08:00","gmt_modified":"2026-04-22T18:54:45.079999+08:00","id":"1e2d007d-9249-436e-8822-c9b1a31580d1","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1"},"wiki_readme":{"content":"No readme file","gmt_create":"2026-04-22T18:53:55.057287+08:00","gmt_modified":"2026-04-22T18:53:55.057287+08:00","id":"354aa9f0-35fb-44a7-98d6-034981f130e6","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1"},"wiki_repo":{"id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"GEO","progress_status":"completed","wiki_present_status":"COMPLETED","optimized_catalog":"\".\\n├── .npm-cache/\\n│ ├── _cacache/\\n│ ├── _logs/\\n│ └── _npx/\\n├── .pytest_cache/\\n├── backend/\\n│ ├── alembic/\\n│ │ ├── __pycache__/\\n│ │ ├── versions/\\n│ │ │ ├── __pycache__/\\n│ │ │ └── 488d0bd5ab01_initial_migration.py\\n│ │ ├── README\\n│ │ ├── env.py\\n│ │ └── script.py.mako\\n│ ├── app/\\n│ │ ├── __pycache__/\\n│ │ ├── api/\\n│ │ │ ├── __pycache__/\\n│ │ │ ├── __init__.py\\n│ │ │ ├── auth.py\\n│ │ │ ├── citations.py\\n│ │ │ ├── deps.py\\n│ │ │ ├── queries.py\\n│ │ │ └── reports.py\\n│ │ ├── models/\\n│ │ │ ├── __pycache__/\\n│ │ │ ├── __init__.py\\n│ │ │ ├── citation_record.py\\n│ │ │ ├── query.py\\n│ │ │ ├── query_task.py\\n│ │ │ ├── subscription.py\\n│ │ │ └── user.py\\n│ │ ├── schemas/\\n│ │ │ ├── __pycache__/\\n│ │ │ ├── auth.py\\n│ │ │ ├── citation.py\\n│ │ │ └── query.py\\n│ │ ├── services/\\n│ │ │ ├── __pycache__/\\n│ │ │ ├── auth.py\\n│ │ │ ├── citation.py\\n│ │ │ └── query.py\\n│ │ ├── utils/\\n│ │ ├── workers/\\n│ │ │ ├── __pycache__/\\n│ │ │ ├── platforms/\\n│ │ │ │ ├── __pycache__/\\n│ │ │ │ ├── base.py\\n│ │ │ │ ├── kimi.py\\n│ │ │ │ └── wenxin.py\\n│ │ │ ├── __init__.py\\n│ │ │ ├── citation_engine.py\\n│ │ │ └── scheduler.py\\n│ │ ├── config.py\\n│ │ ├── database.py\\n│ │ └── main.py\\n│ ├── venv/\\n│ ├── Dockerfile\\n│ ├── alembic.ini\\n│ └── requirements.txt\\n├── docs/\\n├── frontend/\\n│ ├── .next/\\n│ ├── app/\\n│ │ ├── (auth)/\\n│ │ │ ├── login/\\n│ │ │ │ └── page.tsx\\n│ │ │ ├── register/\\n│ │ │ │ └── page.tsx\\n│ │ │ └── layout.tsx\\n│ │ ├── (dashboard)/\\n│ │ │ ├── dashboard/\\n│ │ │ │ ├── citations/\\n│ │ │ │ │ └── page.tsx\\n│ │ │ │ ├── queries/\\n│ │ │ │ │ └── page.tsx\\n│ │ │ │ ├── reports/\\n│ │ │ │ │ └── page.tsx\\n│ │ │ │ ├── settings/\\n│ │ │ │ │ └── page.tsx\\n│ │ │ │ └── page.tsx\\n│ │ │ └── layout.tsx\\n│ │ ├── api/auth/[...nextauth]/\\n│ │ │ └── route.ts\\n│ │ ├── fonts/\\n│ │ ├── globals.css\\n│ │ ├── layout.tsx\\n│ │ └── page.tsx\\n│ ├── components/\\n│ │ ├── charts/\\n│ │ │ ├── platform-chart.tsx\\n│ │ │ └── trend-chart.tsx\\n│ │ ├── layout/\\n│ │ │ ├── header.tsx\\n│ │ │ └── sidebar.tsx\\n│ │ ├── ui/\\n│ │ │ ├── badge.tsx\\n│ │ │ ├── button.tsx\\n│ │ │ ├── card.tsx\\n│ │ │ ├── dialog.tsx\\n│ │ │ ├── dropdown-menu.tsx\\n│ │ │ ├── input.tsx\\n│ │ │ ├── label.tsx\\n│ │ │ ├── select.tsx\\n│ │ │ ├── table.tsx\\n│ │ │ └── tabs.tsx\\n│ │ └── providers.tsx\\n│ ├── lib/\\n│ │ ├── api.ts\\n│ │ ├── auth.ts\\n│ │ ├── platforms.ts\\n│ │ └── utils.ts\\n│ ├── node_modules/\\n│ ├── types/\\n│ │ └── next-auth.d.ts\\n│ ├── .eslintrc.json\\n│ ├── .gitignore\\n│ ├── Dockerfile\\n│ ├── README.md\\n│ ├── next-env.d.ts\\n│ ├── next.config.mjs\\n│ ├── package-lock.json\\n│ ├── package.json\\n│ ├── postcss.config.mjs\\n│ ├── tailwind.config.ts\\n│ ├── tsconfig.json\\n│ └── tsconfig.tsbuildinfo\\n├── tests/\\n│ ├── __pycache__/\\n│ ├── conftest.py\\n│ ├── test_auth.py\\n│ ├── test_citation_engine.py\\n│ ├── test_citations.py\\n│ └── test_queries.py\\n└── docker-compose.yml\\n\"","current_document_structure":"WikiEncrypted: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","catalogue_think_content":"WikiEncrypted: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","recovery_checkpoint":"wiki_generation_completed","last_commit_id":"02cf7a94ac39cb52451c25e73f043e1109d300d7","last_commit_update":"2026-04-23T20:35:47.046201+08:00","gmt_create":"2026-04-22T17:58:32.591608+08:00","gmt_modified":"2026-04-23T20:35:47.046202+08:00","extend_info":"{\"language\":\"zh\",\"active\":true,\"branch\":\"main\",\"shareStatus\":\"\",\"server_error_code\":\"\",\"cosy_version\":\"\"}"}} \ No newline at end of file +{"code_snippets":[{"id":"8a466b0c6eac2ccb54c5da7e13854646","path":"frontend/app/layout.tsx","line_range":"1-37","gmt_create":"2026-04-23T15:19:43.759937+08:00","gmt_modified":"2026-04-23T15:19:43.759937+08:00"},{"id":"3bd4eedea376e3a3d9f9fbff4fe27a65","path":"frontend/components/layout/sidebar.tsx","line_range":"1-54","gmt_create":"2026-04-23T15:19:43.760535+08:00","gmt_modified":"2026-04-23T15:19:43.760535+08:00"},{"id":"0d903468b55bdc63cc7e25a87a89c522","path":"frontend/components/layout/header.tsx","line_range":"1-30","gmt_create":"2026-04-23T15:19:43.760868+08:00","gmt_modified":"2026-04-23T15:19:43.760868+08:00"},{"id":"3bab92a09e9fb456e0303bb1e04afc7e","path":"frontend/components/ui/table.tsx","line_range":"1-118","gmt_create":"2026-04-23T15:19:43.762327+08:00","gmt_modified":"2026-04-23T15:19:43.762327+08:00"},{"id":"0eed9f61572209dd754611fc7c690d5a","path":"frontend/components/ui/dialog.tsx","line_range":"1-123","gmt_create":"2026-04-23T15:19:43.762637+08:00","gmt_modified":"2026-04-23T15:19:43.762637+08:00"},{"id":"b7796fc6197ecce5beb461b9466e54a0","path":"frontend/components/charts/trend-chart.tsx","line_range":"1-60","gmt_create":"2026-04-23T15:19:43.762953+08:00","gmt_modified":"2026-04-23T15:19:43.762953+08:00"},{"id":"6b9f52af0b6d78c17ff9bbc42d760ea2","path":"frontend/components/charts/platform-chart.tsx","line_range":"1-68","gmt_create":"2026-04-23T15:19:43.763292+08:00","gmt_modified":"2026-04-23T15:19:43.763292+08:00"},{"id":"a829403082cc3460c01e0110229c53c4","path":"frontend/lib/platforms.ts","line_range":"1-18","gmt_create":"2026-04-23T15:19:43.763596+08:00","gmt_modified":"2026-04-23T15:19:43.763596+08:00"},{"id":"dcfa308ef4ec368c5a51a17acbfc8e2c","path":"frontend/lib/utils.ts","line_range":"1-7","gmt_create":"2026-04-23T15:19:43.763899+08:00","gmt_modified":"2026-04-23T15:19:43.763899+08:00"},{"id":"0f87c8089f548883d056f0a0d79e273f","path":"frontend/lib/api.ts","line_range":"1-79","gmt_create":"2026-04-23T15:19:43.764207+08:00","gmt_modified":"2026-04-23T15:19:43.764207+08:00"},{"id":"9beee1f41fe8f0750fd97155f9d54bbb","path":"frontend/lib/api.ts","line_range":"67-70","gmt_create":"2026-04-23T15:19:43.7681+08:00","gmt_modified":"2026-04-23T15:19:43.7681+08:00"},{"id":"8fe2e22a963442076e1ce16ab777573c","path":"frontend/lib/api.ts","line_range":"56-66","gmt_create":"2026-04-23T15:19:43.769967+08:00","gmt_modified":"2026-04-23T15:19:43.769967+08:00"},{"id":"3124ad882ca2cf8fecb6b93696c7f233","path":"frontend/lib/api.ts","line_range":"72-77","gmt_create":"2026-04-23T15:19:43.77323+08:00","gmt_modified":"2026-04-23T15:19:43.773231+08:00"},{"id":"17a97b4ac37fb67b8eda7ce2887c38e7","path":"frontend/app/layout.tsx","line_range":"17-20","gmt_create":"2026-04-23T15:19:43.777372+08:00","gmt_modified":"2026-04-23T15:19:43.777372+08:00"},{"id":"84cba1e0d516e8c9859402fd5c1bc83c","path":"frontend/lib/api.ts","line_range":"3-40","gmt_create":"2026-04-23T15:19:43.777696+08:00","gmt_modified":"2026-04-23T15:19:43.777696+08:00"},{"id":"b55a164add5a8fec2ef0e489f7234829","path":"backend/app/main.py","line_range":"24-47","gmt_create":"2026-04-23T15:19:45.591156+08:00","gmt_modified":"2026-04-23T15:19:45.591157+08:00"},{"id":"16d619435094a63740357cd6317b52cb","path":"backend/app/api/auth.py","line_range":"10","gmt_create":"2026-04-23T15:19:45.591538+08:00","gmt_modified":"2026-04-23T15:19:45.591538+08:00"},{"id":"fa1ee5e3822128a37e9d03af74083392","path":"backend/app/api/queries.py","line_range":"12","gmt_create":"2026-04-23T15:19:45.591868+08:00","gmt_modified":"2026-04-23T15:19:45.591868+08:00"},{"id":"7e908f05baccdfcf7f4a3ef3c9cd5c38","path":"backend/app/api/citations.py","line_range":"21","gmt_create":"2026-04-23T15:19:45.592191+08:00","gmt_modified":"2026-04-23T15:19:45.592191+08:00"},{"id":"ffe6df344be81bde3941ad8f0d77910b","path":"backend/app/api/reports.py","line_range":"13","gmt_create":"2026-04-23T15:19:45.592503+08:00","gmt_modified":"2026-04-23T15:19:45.592503+08:00"},{"id":"c71fb14f8866e34c679c94a4e2432bc7","path":"backend/app/api/deps.py","line_range":"13","gmt_create":"2026-04-23T15:19:45.592857+08:00","gmt_modified":"2026-04-23T15:19:45.592857+08:00"},{"id":"3c68f1581d2fd6aa845dd71111a9aa9d","path":"backend/app/main.py","line_range":"1-57","gmt_create":"2026-04-23T15:19:45.593248+08:00","gmt_modified":"2026-04-23T15:19:45.593248+08:00"},{"id":"39afb05755a93800fd685af7274110cb","path":"backend/app/main.py","line_range":"13-57","gmt_create":"2026-04-23T15:19:45.593572+08:00","gmt_modified":"2026-04-23T15:19:45.593572+08:00"},{"id":"87a177f17800991e1ed1fb7be03abdb2","path":"backend/app/api/auth.py","line_range":"13-42","gmt_create":"2026-04-23T15:19:45.594108+08:00","gmt_modified":"2026-04-23T15:19:45.594108+08:00"},{"id":"ae9de874df4a46f4197b6c157c25ec6e","path":"backend/app/api/queries.py","line_range":"15-85","gmt_create":"2026-04-23T15:19:45.594458+08:00","gmt_modified":"2026-04-23T15:19:45.594458+08:00"},{"id":"c066a8d4bffabed87a2e38ccad81c107","path":"backend/app/api/citations.py","line_range":"25-77","gmt_create":"2026-04-23T15:19:45.594783+08:00","gmt_modified":"2026-04-23T15:19:45.594783+08:00"},{"id":"177c73dc4e71186d9eaa1157fc0fe97f","path":"backend/app/api/reports.py","line_range":"16-46","gmt_create":"2026-04-23T15:19:45.595098+08:00","gmt_modified":"2026-04-23T15:19:45.595098+08:00"},{"id":"a0be0cbddb559575861620b5b7579634","path":"backend/app/main.py","line_range":"38-51","gmt_create":"2026-04-23T15:19:45.595425+08:00","gmt_modified":"2026-04-23T15:19:45.595425+08:00"},{"id":"bcdf50f6234651cb9863ab210e6473e5","path":"backend/app/api/deps.py","line_range":"16-42","gmt_create":"2026-04-23T15:19:45.595733+08:00","gmt_modified":"2026-04-23T15:19:45.595733+08:00"},{"id":"6df0277c2486b148fa26c2682dbdaa4c","path":"backend/app/services/auth.py","line_range":"37-68","gmt_create":"2026-04-23T15:19:45.59605+08:00","gmt_modified":"2026-04-23T15:19:45.59605+08:00"},{"id":"5ea5f192d580031ffe57e1582b70c67e","path":"backend/app/services/query.py","line_range":"12-123","gmt_create":"2026-04-23T15:19:45.596359+08:00","gmt_modified":"2026-04-23T15:19:45.596359+08:00"},{"id":"fe4a793f16cd4e12b56253c0a6d53ae0","path":"backend/app/services/citation.py","line_range":"24-359","gmt_create":"2026-04-23T15:19:45.596722+08:00","gmt_modified":"2026-04-23T15:19:45.596723+08:00"},{"id":"9552bd8a528207f18e4f3a1696f26a55","path":"backend/app/api/auth.py","line_range":"13-37","gmt_create":"2026-04-23T15:19:45.597032+08:00","gmt_modified":"2026-04-23T15:19:45.597032+08:00"},{"id":"4aad38dfc00a0877bd965c3d0b3c280c","path":"backend/app/schemas/auth.py","line_range":"7-34","gmt_create":"2026-04-23T15:19:45.598915+08:00","gmt_modified":"2026-04-23T15:19:45.598915+08:00"},{"id":"9b10dac7dbbb1327afc8a525bf4bd0c3","path":"backend/app/services/query.py","line_range":"45-81","gmt_create":"2026-04-23T15:19:45.599689+08:00","gmt_modified":"2026-04-23T15:19:45.599689+08:00"},{"id":"69118807690ef351a9de910414d5e676","path":"backend/app/schemas/query.py","line_range":"11-94","gmt_create":"2026-04-23T15:19:45.6004+08:00","gmt_modified":"2026-04-23T15:19:45.6004+08:00"},{"id":"212d822d207a4c0bd7825bbf20e188e9","path":"backend/app/api/citations.py","line_range":"59-77","gmt_create":"2026-04-23T15:19:45.601069+08:00","gmt_modified":"2026-04-23T15:19:45.601069+08:00"},{"id":"b0777c7da17be89abb333c81c0dcf349","path":"backend/app/services/citation.py","line_range":"204-261","gmt_create":"2026-04-23T15:19:45.601383+08:00","gmt_modified":"2026-04-23T15:19:45.601384+08:00"},{"id":"26288877e8e1f6c4ff5aca12610b0218","path":"backend/app/schemas/citation.py","line_range":"7-50","gmt_create":"2026-04-23T15:19:45.602042+08:00","gmt_modified":"2026-04-23T15:19:45.602042+08:00"},{"id":"dbf5f8a57778cf6363e834081f3d771c","path":"backend/app/services/citation.py","line_range":"327-359","gmt_create":"2026-04-23T15:19:45.60312+08:00","gmt_modified":"2026-04-23T15:19:45.60312+08:00"},{"id":"56e46969bdb790a5e8f333184b878d6d","path":"backend/app/models/user.py","line_range":"11-41","gmt_create":"2026-04-23T15:19:45.605045+08:00","gmt_modified":"2026-04-23T15:19:45.605046+08:00"},{"id":"4fb8856be3a581fe8303d11b2284ca29","path":"backend/app/models/query.py","line_range":"11-55","gmt_create":"2026-04-23T15:19:45.605965+08:00","gmt_modified":"2026-04-23T15:19:45.605965+08:00"},{"id":"fd541971cebf8a7c167d717f5c5d1ff6","path":"backend/app/models/citation_record.py","line_range":"11-42","gmt_create":"2026-04-23T15:19:45.606627+08:00","gmt_modified":"2026-04-23T15:19:45.606627+08:00"},{"id":"b84f46f058847733347974841f613688","path":"backend/app/models/query_task.py","line_range":"11-39","gmt_create":"2026-04-23T15:19:45.607023+08:00","gmt_modified":"2026-04-23T15:19:45.607023+08:00"},{"id":"1a2657244414b5681afded9565a86422","path":"backend/app/models/user.py","line_range":"35-40","gmt_create":"2026-04-23T15:19:45.60817+08:00","gmt_modified":"2026-04-23T15:19:45.60817+08:00"},{"id":"acd5a29be2bdd4ae251e10ca266ffe13","path":"backend/app/models/query.py","line_range":"43-48","gmt_create":"2026-04-23T15:19:45.608565+08:00","gmt_modified":"2026-04-23T15:19:45.608565+08:00"},{"id":"27a5e2dd1d197b2e3a45be41c57a6183","path":"backend/app/models/citation_record.py","line_range":"35","gmt_create":"2026-04-23T15:19:45.609141+08:00","gmt_modified":"2026-04-23T15:19:45.609141+08:00"},{"id":"c43e8fc0c04c5ed2db7798d99c8c77b8","path":"backend/app/models/query_task.py","line_range":"34","gmt_create":"2026-04-23T15:19:45.609534+08:00","gmt_modified":"2026-04-23T15:19:45.609534+08:00"},{"id":"8868ab86034eecf40e80347ef8cbdebd","path":"backend/app/api/auth.py","line_range":"26-30","gmt_create":"2026-04-23T15:19:45.609857+08:00","gmt_modified":"2026-04-23T15:19:45.609857+08:00"},{"id":"a50f983ec39bac67dff5df80f6dad837","path":"backend/app/services/query.py","line_range":"59-60","gmt_create":"2026-04-23T15:19:45.61019+08:00","gmt_modified":"2026-04-23T15:19:45.61019+08:00"},{"id":"55f1628f1ab6f323710e367e12146b1a","path":"backend/app/api/citations.py","line_range":"67-71","gmt_create":"2026-04-23T15:19:45.610496+08:00","gmt_modified":"2026-04-23T15:19:45.610496+08:00"},{"id":"6ef6d32f97d7b50b7a4da541137423c0","path":"backend/app/api/reports.py","line_range":"23-27","gmt_create":"2026-04-23T15:19:45.610807+08:00","gmt_modified":"2026-04-23T15:19:45.610807+08:00"},{"id":"096856da621e23e78422a15e2bfce1f1","path":"backend/app/main.py","line_range":"13-22","gmt_create":"2026-04-23T15:20:08.95664+08:00","gmt_modified":"2026-04-23T15:20:08.95664+08:00"},{"id":"e230904202fcf7a861c6f49b84f9f863","path":"backend/app/workers/scheduler.py","line_range":"25-95","gmt_create":"2026-04-23T15:20:08.956979+08:00","gmt_modified":"2026-04-23T15:20:08.956979+08:00"},{"id":"309607c54b12a6340edc086ffb4737c9","path":"backend/app/workers/citation_engine.py","line_range":"148-309","gmt_create":"2026-04-23T15:20:08.957311+08:00","gmt_modified":"2026-04-23T15:20:08.957311+08:00"},{"id":"d7c319a04abbc6704da53107e07dd8e7","path":"backend/app/services/query.py","line_range":"12-130","gmt_create":"2026-04-23T15:20:08.958773+08:00","gmt_modified":"2026-04-23T15:20:08.958773+08:00"},{"id":"9bfc041fe426da2eb78353827e8d9163","path":"backend/app/database.py","line_range":"1-29","gmt_create":"2026-04-23T15:20:08.95909+08:00","gmt_modified":"2026-04-23T15:20:08.95909+08:00"},{"id":"ad67863041d9eea2b0fb542b5aa33aca","path":"backend/app/workers/platforms/base.py","line_range":"4-18","gmt_create":"2026-04-23T15:20:08.959413+08:00","gmt_modified":"2026-04-23T15:20:08.959413+08:00"},{"id":"eecf9581dbaa0a515cf11514175e7ef9","path":"backend/app/workers/platforms/kimi.py","line_range":"11-206","gmt_create":"2026-04-23T15:20:08.959726+08:00","gmt_modified":"2026-04-23T15:20:08.959726+08:00"},{"id":"5563c29185326a59be61ee0a6eec4463","path":"backend/app/workers/platforms/wenxin.py","line_range":"11-205","gmt_create":"2026-04-23T15:20:08.960155+08:00","gmt_modified":"2026-04-23T15:20:08.960155+08:00"},{"id":"2d35e1345d25020f8e7ac1318db06f7b","path":"backend/app/workers/scheduler.py","line_range":"30-90","gmt_create":"2026-04-23T15:20:08.96886+08:00","gmt_modified":"2026-04-23T15:20:08.968861+08:00"},{"id":"91bda120c0ab69e0e7103a1c89c82424","path":"backend/app/workers/scheduler.py","line_range":"95-172","gmt_create":"2026-04-23T15:20:08.969219+08:00","gmt_modified":"2026-04-23T15:20:08.969219+08:00"},{"id":"160b5326537d25444c40a459a01e79c6","path":"backend/app/workers/citation_engine.py","line_range":"159-234","gmt_create":"2026-04-23T15:20:08.969565+08:00","gmt_modified":"2026-04-23T15:20:08.969565+08:00"},{"id":"6712051c987e10a7c26b089063367398","path":"backend/app/models/query.py","line_range":"24-31","gmt_create":"2026-04-23T15:20:08.970051+08:00","gmt_modified":"2026-04-23T15:20:08.970052+08:00"},{"id":"ac5982063da5f04315f3e82a0d653902","path":"backend/app/models/query_task.py","line_range":"24-32","gmt_create":"2026-04-23T15:20:08.970717+08:00","gmt_modified":"2026-04-23T15:20:08.970717+08:00"},{"id":"06ed912983db33bb8aca162fed68282b","path":"backend/app/models/citation_record.py","line_range":"24-29","gmt_create":"2026-04-23T15:20:08.971135+08:00","gmt_modified":"2026-04-23T15:20:08.971135+08:00"},{"id":"b624be78e3bffd876e403cff2557b088","path":"backend/app/workers/citation_engine.py","line_range":"19-120","gmt_create":"2026-04-23T15:20:08.973448+08:00","gmt_modified":"2026-04-23T15:20:08.973448+08:00"},{"id":"40d0b169aad65c8bb38077deb052fc72","path":"backend/app/workers/platforms/kimi.py","line_range":"33-125","gmt_create":"2026-04-23T15:20:08.97414+08:00","gmt_modified":"2026-04-23T15:20:08.97414+08:00"},{"id":"8b5af998852596e1e08b0e0216bc4b93","path":"backend/app/workers/platforms/wenxin.py","line_range":"33-124","gmt_create":"2026-04-23T15:20:08.974449+08:00","gmt_modified":"2026-04-23T15:20:08.974449+08:00"},{"id":"fe70b1fef9f36e73d26d84987e927c7a","path":"backend/app/api/queries.py","line_range":"15-86","gmt_create":"2026-04-23T15:20:08.978743+08:00","gmt_modified":"2026-04-23T15:20:08.978743+08:00"},{"id":"e1d2b027678118df4d0a50ce9269271d","path":"backend/app/workers/scheduler.py","line_range":"42-90","gmt_create":"2026-04-23T15:20:08.982815+08:00","gmt_modified":"2026-04-23T15:20:08.982815+08:00"},{"id":"e79301a4bc26aa6b49f3f52c3182c3f9","path":"backend/app/workers/citation_engine.py","line_range":"175-234","gmt_create":"2026-04-23T15:20:08.983609+08:00","gmt_modified":"2026-04-23T15:20:08.983609+08:00"},{"id":"1e85186eded8743ff5f231df4aa6df3f","path":"backend/app/workers/platforms/kimi.py","line_range":"21-48","gmt_create":"2026-04-23T15:20:08.98454+08:00","gmt_modified":"2026-04-23T15:20:08.98454+08:00"},{"id":"e2b1718570fb714b2f4342221898ab30","path":"backend/app/workers/platforms/wenxin.py","line_range":"21-48","gmt_create":"2026-04-23T15:20:08.985237+08:00","gmt_modified":"2026-04-23T15:20:08.985237+08:00"},{"id":"e4a49039dae40b7433896c81737fcf8c","path":"backend/app/config.py","line_range":"7-14","gmt_create":"2026-04-23T15:20:08.985763+08:00","gmt_modified":"2026-04-23T15:20:08.985763+08:00"},{"id":"2ee31d68c409e96e951f6cfa7027bca7","path":"backend/app/main.py","line_range":"24-42","gmt_create":"2026-04-23T15:20:08.986265+08:00","gmt_modified":"2026-04-23T15:20:08.986265+08:00"},{"id":"79d6e169e36e6b7493898b5f863e07dc","path":"backend/app/workers/citation_engine.py","line_range":"152-157","gmt_create":"2026-04-23T15:20:08.987693+08:00","gmt_modified":"2026-04-23T15:20:08.987693+08:00"},{"id":"1552315d5fb9f6d7aba5f7e8fa93a975","path":"backend/app/database.py","line_range":"6-10","gmt_create":"2026-04-23T15:20:08.988709+08:00","gmt_modified":"2026-04-23T15:20:08.988709+08:00"},{"id":"599cca7536cae4a7e0ae93043c476a7f","path":"tests/test_queries.py","line_range":"10-154","gmt_create":"2026-04-23T15:20:08.989011+08:00","gmt_modified":"2026-04-23T15:20:08.989011+08:00"},{"id":"2ec3d45edd6221e0cedf7f8887fe090d","path":"tests/test_scheduler.py","line_range":"17-123","gmt_create":"2026-04-23T15:20:08.989312+08:00","gmt_modified":"2026-04-23T15:20:08.989312+08:00"},{"id":"4d323bf0aaf4078f09726dc0890e5955","path":"backend/app/models/subscription.py","line_range":"11-37","gmt_create":"2026-04-23T15:21:46.688165+08:00","gmt_modified":"2026-04-23T15:21:46.688166+08:00"},{"id":"4cef9e740b6feb68c6bd22b660c47320","path":"backend/app/services/query.py","line_range":"1-123","gmt_create":"2026-04-23T15:21:46.688903+08:00","gmt_modified":"2026-04-23T15:21:46.688903+08:00"},{"id":"121203f7f9f539ffb1456c3f5cdfd842","path":"backend/app/services/citation.py","line_range":"1-359","gmt_create":"2026-04-23T15:21:46.689338+08:00","gmt_modified":"2026-04-23T15:21:46.689338+08:00"},{"id":"10d1e37bdc9f353c189b7a2fe79dc85e","path":"backend/app/api/queries.py","line_range":"1-86","gmt_create":"2026-04-23T15:21:46.689691+08:00","gmt_modified":"2026-04-23T15:21:46.689691+08:00"},{"id":"cbd0101fa84d957bcb1baaa623c6b31c","path":"backend/app/api/citations.py","line_range":"1-78","gmt_create":"2026-04-23T15:21:46.690036+08:00","gmt_modified":"2026-04-23T15:21:46.690036+08:00"},{"id":"afe4138895492c26aac5c0120ef46cd8","path":"backend/app/models/__init__.py","line_range":"1-14","gmt_create":"2026-04-23T15:21:46.69035+08:00","gmt_modified":"2026-04-23T15:21:46.69035+08:00"},{"id":"4d11ddf7abb8076d81b30c4315786f9a","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"21-128","gmt_create":"2026-04-23T15:21:46.693035+08:00","gmt_modified":"2026-04-23T15:21:46.693035+08:00"},{"id":"e454b4a54500bd81e7599e6ec97bf12b","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"23-37","gmt_create":"2026-04-23T15:21:46.695671+08:00","gmt_modified":"2026-04-23T15:21:46.695671+08:00"},{"id":"1965adf7cfc65447e3c1ae21fbf6d1c5","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"39-59","gmt_create":"2026-04-23T15:21:46.696432+08:00","gmt_modified":"2026-04-23T15:21:46.696432+08:00"},{"id":"c730faefb34bb87c40c5f636b4ff7f41","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"80-94","gmt_create":"2026-04-23T15:21:46.697413+08:00","gmt_modified":"2026-04-23T15:21:46.697413+08:00"},{"id":"b9978c3eccea3ef566b003216e5047af","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"61-78","gmt_create":"2026-04-23T15:21:46.698274+08:00","gmt_modified":"2026-04-23T15:21:46.698274+08:00"},{"id":"eb6ff4361d7413b57f1f70b1ec2f0c94","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"96-111","gmt_create":"2026-04-23T15:21:46.699021+08:00","gmt_modified":"2026-04-23T15:21:46.699021+08:00"},{"id":"f6c9f1b4e8646c366a31426a4537675d","path":"backend/app/models/query_task.py","line_range":"36-38","gmt_create":"2026-04-23T15:21:46.700462+08:00","gmt_modified":"2026-04-23T15:21:46.700462+08:00"},{"id":"a2adbf02c71e4eb2cf1f120e1a2ff517","path":"backend/app/models/citation_record.py","line_range":"37-41","gmt_create":"2026-04-23T15:21:46.70082+08:00","gmt_modified":"2026-04-23T15:21:46.700821+08:00"},{"id":"0907fc2974ec31c23aaaef02076700a1","path":"backend/app/models/user.py","line_range":"25-33","gmt_create":"2026-04-23T15:21:46.702342+08:00","gmt_modified":"2026-04-23T15:21:46.702342+08:00"},{"id":"842f74e2cc054608242e93fbefd96b45","path":"backend/app/models/query.py","line_range":"32-40","gmt_create":"2026-04-23T15:21:46.702652+08:00","gmt_modified":"2026-04-23T15:21:46.702652+08:00"},{"id":"aed9e839038c45e6ce2023c4e05adb76","path":"backend/app/models/query_task.py","line_range":"27-32","gmt_create":"2026-04-23T15:21:46.702999+08:00","gmt_modified":"2026-04-23T15:21:46.703+08:00"},{"id":"2181318c993526c86458f5eef134aed6","path":"backend/app/services/query.py","line_range":"62-77","gmt_create":"2026-04-23T15:21:46.703419+08:00","gmt_modified":"2026-04-23T15:21:46.703419+08:00"},{"id":"a817488dc968d761a8977fb5bb8d01a2","path":"backend/app/services/query.py","line_range":"45-129","gmt_create":"2026-04-23T15:21:46.703795+08:00","gmt_modified":"2026-04-23T15:21:46.703795+08:00"},{"id":"d20fc729a5d3986b1c077f9e07ece9c4","path":"backend/app/config.py","line_range":"7","gmt_create":"2026-04-23T15:21:46.704958+08:00","gmt_modified":"2026-04-23T15:21:46.704958+08:00"},{"id":"ea655c6d147bc98beb42955d437260cc","path":"backend/app/config.py","line_range":"1-23","gmt_create":"2026-04-23T15:21:46.705746+08:00","gmt_modified":"2026-04-23T15:21:46.705746+08:00"},{"id":"37868a5af96edcdad149caf9a184435a","path":"backend/app/api/queries.py","line_range":"42-85","gmt_create":"2026-04-23T15:21:46.706426+08:00","gmt_modified":"2026-04-23T15:21:46.706426+08:00"},{"id":"601b981b00d93b941843f046a163d5a3","path":"backend/app/schemas/query.py","line_range":"18-33","gmt_create":"2026-04-23T15:21:46.706755+08:00","gmt_modified":"2026-04-23T15:21:46.706755+08:00"},{"id":"290df8332b3d104e5ea8d71dc39315b5","path":"tests/conftest.py","line_range":"1-123","gmt_create":"2026-04-23T15:22:15.985975+08:00","gmt_modified":"2026-04-23T15:22:15.985975+08:00"},{"id":"c2747ca16b879bca0f68955534c3c4fc","path":"backend/app/main.py","line_range":"1-48","gmt_create":"2026-04-23T15:22:15.986592+08:00","gmt_modified":"2026-04-23T15:22:15.986592+08:00"},{"id":"76e6c0abb49fec57cac4892837a143c9","path":"backend/app/api/deps.py","line_range":"1-43","gmt_create":"2026-04-23T15:22:15.987077+08:00","gmt_modified":"2026-04-23T15:22:15.987077+08:00"},{"id":"f66d9907b467b110c638bd527efd95c5","path":"backend/app/api/auth.py","line_range":"1-43","gmt_create":"2026-04-23T15:22:15.987417+08:00","gmt_modified":"2026-04-23T15:22:15.987417+08:00"},{"id":"116584ea9162c1bc05911f39f9ef82b6","path":"backend/app/workers/citation_engine.py","line_range":"1-309","gmt_create":"2026-04-23T15:22:15.988451+08:00","gmt_modified":"2026-04-23T15:22:15.988451+08:00"},{"id":"9630036e63fc15cb81b202cf79671aab","path":"backend/app/workers/scheduler.py","line_range":"1-182","gmt_create":"2026-04-23T15:22:15.988885+08:00","gmt_modified":"2026-04-23T15:22:15.988885+08:00"},{"id":"84fbed7d35f7752e2117a74fcaf5f0e9","path":"backend/app/config.py","line_range":"1-17","gmt_create":"2026-04-23T15:22:15.989594+08:00","gmt_modified":"2026-04-23T15:22:15.989594+08:00"},{"id":"5ddf0c8d7b38e4f6126a5d85da1dfeda","path":"tests/conftest.py","line_range":"19-123","gmt_create":"2026-04-23T15:22:15.990689+08:00","gmt_modified":"2026-04-23T15:22:15.990689+08:00"},{"id":"9df233ef1be4b95068ed91bf01083ae7","path":"tests/conftest.py","line_range":"117-123","gmt_create":"2026-04-23T15:22:15.99106+08:00","gmt_modified":"2026-04-23T15:22:15.99106+08:00"},{"id":"6286d4be455dc058c8be2ee4e0d1175a","path":"backend/app/main.py","line_range":"38-42","gmt_create":"2026-04-23T15:22:15.991399+08:00","gmt_modified":"2026-04-23T15:22:15.991399+08:00"},{"id":"069243fafe60a85cf16a0ca40fa07180","path":"backend/app/api/deps.py","line_range":"16-43","gmt_create":"2026-04-23T15:22:15.991722+08:00","gmt_modified":"2026-04-23T15:22:15.991722+08:00"},{"id":"d5a1fb0bd23ce9240fbf79529ef94a45","path":"backend/app/api/auth.py","line_range":"13-43","gmt_create":"2026-04-23T15:22:15.992045+08:00","gmt_modified":"2026-04-23T15:22:15.992045+08:00"},{"id":"735aef72b4fe6ca4f407e69b7dda8b43","path":"backend/app/api/citations.py","line_range":"25-78","gmt_create":"2026-04-23T15:22:15.992721+08:00","gmt_modified":"2026-04-23T15:22:15.992721+08:00"},{"id":"8128dd67cf376d2cadf7c2d3831c380a","path":"backend/app/database.py","line_range":"23-29","gmt_create":"2026-04-23T15:22:15.993159+08:00","gmt_modified":"2026-04-23T15:22:15.993159+08:00"},{"id":"1721defc3d6206478d3c0692cc821761","path":"tests/test_auth.py","line_range":"25-104","gmt_create":"2026-04-23T15:22:15.9936+08:00","gmt_modified":"2026-04-23T15:22:15.9936+08:00"},{"id":"753a437d837246ead62b0e16c6331284","path":"backend/app/services/auth.py","line_range":"37-69","gmt_create":"2026-04-23T15:22:15.994329+08:00","gmt_modified":"2026-04-23T15:22:15.994329+08:00"},{"id":"d820e2daf2ea133a7aa17cdc475e44a4","path":"tests/test_auth.py","line_range":"1-104","gmt_create":"2026-04-23T15:22:15.99504+08:00","gmt_modified":"2026-04-23T15:22:15.99504+08:00"},{"id":"1a439c5fed6cfd188c646e1614d56371","path":"backend/app/services/auth.py","line_range":"1-69","gmt_create":"2026-04-23T15:22:15.995715+08:00","gmt_modified":"2026-04-23T15:22:15.995715+08:00"},{"id":"5c67e2f70283956b2d29a3c1443eb514","path":"backend/app/workers/citation_engine.py","line_range":"122-146","gmt_create":"2026-04-23T15:22:15.996787+08:00","gmt_modified":"2026-04-23T15:22:15.996787+08:00"},{"id":"a57acd9da5287c915ac823784a409292","path":"tests/test_citation_engine.py","line_range":"1-127","gmt_create":"2026-04-23T15:22:15.99744+08:00","gmt_modified":"2026-04-23T15:22:15.99744+08:00"},{"id":"2a4f741f31f62dce8ad63be2e831f520","path":"tests/test_citations.py","line_range":"23-93","gmt_create":"2026-04-23T15:22:15.998141+08:00","gmt_modified":"2026-04-23T15:22:15.998141+08:00"},{"id":"692ac240965eff7e66945aa3c4c270f7","path":"tests/test_citations.py","line_range":"1-93","gmt_create":"2026-04-23T15:22:15.998797+08:00","gmt_modified":"2026-04-23T15:22:15.998797+08:00"},{"id":"32a0a52faca2d8d488e49c63c86075b1","path":"tests/test_queries.py","line_range":"29-154","gmt_create":"2026-04-23T15:22:15.999443+08:00","gmt_modified":"2026-04-23T15:22:15.999444+08:00"},{"id":"7804331f5f8c1ba5a3b6d9c1ae1c78c1","path":"tests/test_queries.py","line_range":"1-154","gmt_create":"2026-04-23T15:22:16.000539+08:00","gmt_modified":"2026-04-23T15:22:16.000539+08:00"},{"id":"3a6e1b738967bf8cc651e57f48e2e126","path":"tests/test_business_flow.py","line_range":"83-126","gmt_create":"2026-04-23T15:22:16.00171+08:00","gmt_modified":"2026-04-23T15:22:16.00171+08:00"},{"id":"b1afd377757f1d0e9bdf87edfff3ad88","path":"tests/test_business_flow.py","line_range":"131-186","gmt_create":"2026-04-23T15:22:16.002219+08:00","gmt_modified":"2026-04-23T15:22:16.002219+08:00"},{"id":"de05ec7eed033e432991e5a88e1b5a06","path":"tests/test_business_flow.py","line_range":"192-222","gmt_create":"2026-04-23T15:22:16.002653+08:00","gmt_modified":"2026-04-23T15:22:16.002653+08:00"},{"id":"7fd61a451248b6b129299d6246f711c7","path":"tests/test_business_flow.py","line_range":"228-296","gmt_create":"2026-04-23T15:22:16.003121+08:00","gmt_modified":"2026-04-23T15:22:16.003121+08:00"},{"id":"53eedffff456a566fa7b0cecc7169f56","path":"tests/test_business_flow.py","line_range":"1-441","gmt_create":"2026-04-23T15:22:16.003614+08:00","gmt_modified":"2026-04-23T15:22:16.003615+08:00"},{"id":"906f7a8288e38d4244211f3f538fe7b6","path":"backend/app/workers/scheduler.py","line_range":"27-182","gmt_create":"2026-04-23T15:22:16.004044+08:00","gmt_modified":"2026-04-23T15:22:16.004044+08:00"},{"id":"1647ee2066de2ae59ba8cf88e33c5e02","path":"tests/test_scheduler.py","line_range":"1-123","gmt_create":"2026-04-23T15:22:16.004461+08:00","gmt_modified":"2026-04-23T15:22:16.004461+08:00"},{"id":"fd18328b6582e68c30b130b912891992","path":"frontend/components/providers.tsx","line_range":"1-9","gmt_create":"2026-04-23T15:22:23.501815+08:00","gmt_modified":"2026-04-23T15:22:23.501815+08:00"},{"id":"71a37a516437e94fd82a87efc70a3f16","path":"frontend/package.json","line_range":"1-40","gmt_create":"2026-04-23T15:22:23.503888+08:00","gmt_modified":"2026-04-23T15:22:23.503888+08:00"},{"id":"89d70e5f89be23a229e3ee59982b8e6e","path":"frontend/tailwind.config.ts","line_range":"1-57","gmt_create":"2026-04-23T15:22:23.504853+08:00","gmt_modified":"2026-04-23T15:22:23.504853+08:00"},{"id":"95be577a89fbeb02578e4c3718c6ec86","path":"frontend/components/ui/button.tsx","line_range":"1-57","gmt_create":"2026-04-23T15:22:23.505579+08:00","gmt_modified":"2026-04-23T15:22:23.505579+08:00"},{"id":"607bb628918a7a5d54cbf74763f94d07","path":"frontend/components/ui/input.tsx","line_range":"1-23","gmt_create":"2026-04-23T15:22:23.506257+08:00","gmt_modified":"2026-04-23T15:22:23.506257+08:00"},{"id":"325e25d1dda0f7bfd9d7adfe35ecf3b5","path":"frontend/components/ui/select.tsx","line_range":"1-161","gmt_create":"2026-04-23T15:22:23.507044+08:00","gmt_modified":"2026-04-23T15:22:23.507044+08:00"},{"id":"ad6ff021b2126ad5c42323305eb6d8b0","path":"frontend/components/ui/dropdown-menu.tsx","line_range":"1-201","gmt_create":"2026-04-23T15:22:23.507926+08:00","gmt_modified":"2026-04-23T15:22:23.507926+08:00"},{"id":"a85f004dca63614b4e734ba63b45ef9e","path":"frontend/components/ui/card.tsx","line_range":"1-80","gmt_create":"2026-04-23T15:22:23.508411+08:00","gmt_modified":"2026-04-23T15:22:23.508411+08:00"},{"id":"bd3042a8d9b602334720b0d7b4e8ab3d","path":"frontend/components/ui/tabs.tsx","line_range":"1-56","gmt_create":"2026-04-23T15:22:23.509355+08:00","gmt_modified":"2026-04-23T15:22:23.509355+08:00"},{"id":"379443f450513b5492e2d9d5fca94a42","path":"frontend/components/ui/label.tsx","line_range":"1-27","gmt_create":"2026-04-23T15:22:23.509832+08:00","gmt_modified":"2026-04-23T15:22:23.509832+08:00"},{"id":"4aa6ad434a73143bb7a2072124f63be0","path":"frontend/components/ui/badge.tsx","line_range":"1-37","gmt_create":"2026-04-23T15:22:23.510286+08:00","gmt_modified":"2026-04-23T15:22:23.510286+08:00"},{"id":"c45dbdda70a8b9f02b52af4991644d0b","path":"frontend/package.json","line_range":"11-27","gmt_create":"2026-04-23T15:22:23.511056+08:00","gmt_modified":"2026-04-23T15:22:23.511056+08:00"},{"id":"6ac6943c93570294e4fb15a862be2616","path":"frontend/components/ui/button.tsx","line_range":"36-54","gmt_create":"2026-04-23T15:22:23.51229+08:00","gmt_modified":"2026-04-23T15:22:23.51229+08:00"},{"id":"4bfb5059c685e9878aed64cb5347ccec","path":"frontend/components/ui/dialog.tsx","line_range":"9-54","gmt_create":"2026-04-23T15:22:23.513266+08:00","gmt_modified":"2026-04-23T15:22:23.513266+08:00"},{"id":"0af48b69fe8fb9e480fa1656f36a4330","path":"frontend/components/ui/dropdown-menu.tsx","line_range":"21-75","gmt_create":"2026-04-23T15:22:23.514127+08:00","gmt_modified":"2026-04-23T15:22:23.514127+08:00"},{"id":"09971e31ab658e119d4c0ad948282107","path":"frontend/components/ui/select.tsx","line_range":"15-100","gmt_create":"2026-04-23T15:22:23.514956+08:00","gmt_modified":"2026-04-23T15:22:23.514956+08:00"},{"id":"31aa8777de6043883950d2668094e388","path":"frontend/components/ui/table.tsx","line_range":"5-106","gmt_create":"2026-04-23T15:22:23.515769+08:00","gmt_modified":"2026-04-23T15:22:23.515769+08:00"},{"id":"28baf3cedb89a21c6d542b7ce2439b24","path":"frontend/components/ui/tabs.tsx","line_range":"8-53","gmt_create":"2026-04-23T15:22:23.516573+08:00","gmt_modified":"2026-04-23T15:22:23.516573+08:00"},{"id":"28b0f4797c6084272244175a24b961cb","path":"frontend/components/ui/card.tsx","line_range":"5-77","gmt_create":"2026-04-23T15:22:23.518527+08:00","gmt_modified":"2026-04-23T15:22:23.518527+08:00"},{"id":"a6e0b3fa65906c3c3cd88707e1d40059","path":"frontend/components/ui/label.tsx","line_range":"9-23","gmt_create":"2026-04-23T15:22:23.520181+08:00","gmt_modified":"2026-04-23T15:22:23.520181+08:00"},{"id":"9a909775022010b4686c2b00cdf1c165","path":"frontend/components/ui/badge.tsx","line_range":"6-34","gmt_create":"2026-04-23T15:22:23.521343+08:00","gmt_modified":"2026-04-23T15:22:23.521343+08:00"},{"id":"ce1cd184945ae56cf63f55168afd8050","path":"frontend/components/ui/dialog.tsx","line_range":"47-50","gmt_create":"2026-04-23T15:22:23.523823+08:00","gmt_modified":"2026-04-23T15:22:23.523823+08:00"},{"id":"4a2a06e1efcbc85deaa013dca155f20c","path":"frontend/tailwind.config.ts","line_range":"10-54","gmt_create":"2026-04-23T15:22:23.524333+08:00","gmt_modified":"2026-04-23T15:22:23.524333+08:00"},{"id":"8b00ea4aba57ea6ed982287fb7840805","path":"frontend/lib/utils.ts","line_range":"4-6","gmt_create":"2026-04-23T15:22:23.524876+08:00","gmt_modified":"2026-04-23T15:22:23.524876+08:00"},{"id":"7c0831c17e8c65eaed9511e17ed2a2ef","path":"backend/app/services/citation.py","line_range":"1-269","gmt_create":"2026-04-23T20:31:36.482111+08:00","gmt_modified":"2026-04-23T20:31:36.482111+08:00"},{"id":"71f98c8993fb42b108e34a554247869b","path":"backend/app/workers/scheduler.py","line_range":"1-95","gmt_create":"2026-04-23T20:31:36.482732+08:00","gmt_modified":"2026-04-23T20:31:36.482732+08:00"},{"id":"8d5aac2ae0671f05d7c0807ba9296cdf","path":"backend/app/workers/citation_engine.py","line_range":"1-330","gmt_create":"2026-04-23T20:31:36.4831+08:00","gmt_modified":"2026-04-23T20:31:36.4831+08:00"},{"id":"debd789847d1eed2d54198772edf68a2","path":"backend/app/workers/platforms/tongyi.py","line_range":"1-38","gmt_create":"2026-04-23T20:31:36.483423+08:00","gmt_modified":"2026-04-23T20:31:36.483423+08:00"},{"id":"3bde521d18cc7221ae2f14637e163aac","path":"backend/app/workers/platforms/doubao.py","line_range":"1-38","gmt_create":"2026-04-23T20:31:36.483821+08:00","gmt_modified":"2026-04-23T20:31:36.483821+08:00"},{"id":"c26862d9e0fc878b51a2668cfd2ec827","path":"backend/app/workers/platforms/qingyan.py","line_range":"1-38","gmt_create":"2026-04-23T20:31:36.484113+08:00","gmt_modified":"2026-04-23T20:31:36.484114+08:00"},{"id":"0fcc9c2e0d33b887c5f18a3807b64a1e","path":"backend/app/workers/platforms/tiangong.py","line_range":"1-38","gmt_create":"2026-04-23T20:31:36.484512+08:00","gmt_modified":"2026-04-23T20:31:36.484512+08:00"},{"id":"a4baa2444208b3f9a3f42bc492038207","path":"backend/app/workers/platforms/xinghuo.py","line_range":"1-38","gmt_create":"2026-04-23T20:31:36.485041+08:00","gmt_modified":"2026-04-23T20:31:36.485041+08:00"},{"id":"9f82f6d82bf914a608d6afa3d9854abf","path":"backend/app/workers/platforms/search_engine.py","line_range":"1-174","gmt_create":"2026-04-23T20:31:36.485492+08:00","gmt_modified":"2026-04-23T20:31:36.485492+08:00"},{"id":"6281fff17a86ec1895c64d87c2ae7fb1","path":"backend/app/models/query.py","line_range":"1-55","gmt_create":"2026-04-23T20:31:36.486251+08:00","gmt_modified":"2026-04-23T20:31:36.486251+08:00"},{"id":"943c18db69a04b3137fba4cebcfea87e","path":"backend/app/models/citation_record.py","line_range":"1-42","gmt_create":"2026-04-23T20:31:36.48687+08:00","gmt_modified":"2026-04-23T20:31:36.48687+08:00"},{"id":"6628e006b8e5ca16160743528b6b0506","path":"backend/app/models/query_task.py","line_range":"1-39","gmt_create":"2026-04-23T20:31:36.487305+08:00","gmt_modified":"2026-04-23T20:31:36.487305+08:00"},{"id":"72a110dca58d8152758e2fdab4e94761","path":"backend/app/workers/platforms/base.py","line_range":"1-18","gmt_create":"2026-04-23T20:31:36.490327+08:00","gmt_modified":"2026-04-23T20:31:36.490328+08:00"},{"id":"300e43c7a648440163f81039eaa47b5a","path":"frontend/lib/platforms.ts","line_range":"1-24","gmt_create":"2026-04-23T20:31:36.494718+08:00","gmt_modified":"2026-04-23T20:31:36.494718+08:00"},{"id":"caf1970ded8fc5d3921005e166e2100b","path":"backend/app/api/citations.py","line_range":"59-78","gmt_create":"2026-04-23T20:31:36.499676+08:00","gmt_modified":"2026-04-23T20:31:36.499677+08:00"},{"id":"4ded871d02b8119cdd985de8b220b084","path":"backend/app/services/citation.py","line_range":"204-234","gmt_create":"2026-04-23T20:31:36.500626+08:00","gmt_modified":"2026-04-23T20:31:36.500626+08:00"},{"id":"448970b02d89d5e1576f70bdb0063363","path":"backend/app/workers/scheduler.py","line_range":"51-84","gmt_create":"2026-04-23T20:31:36.501136+08:00","gmt_modified":"2026-04-23T20:31:36.501136+08:00"},{"id":"362d22f423631cda39404660b3317a2f","path":"backend/app/workers/citation_engine.py","line_range":"177-254","gmt_create":"2026-04-23T20:31:36.501596+08:00","gmt_modified":"2026-04-23T20:31:36.501596+08:00"},{"id":"b475ff5225ac403c7fcf3dd7e14cbac6","path":"backend/app/workers/platforms/tongyi.py","line_range":"16-33","gmt_create":"2026-04-23T20:31:36.502032+08:00","gmt_modified":"2026-04-23T20:31:36.502032+08:00"},{"id":"557ae34b57a5dd8e8fa3bb2a6ce178a7","path":"backend/app/workers/platforms/search_engine.py","line_range":"163-174","gmt_create":"2026-04-23T20:31:36.502504+08:00","gmt_modified":"2026-04-23T20:31:36.502504+08:00"},{"id":"75c6ab0599d304bf36d290d4143d3d2f","path":"backend/app/models/query.py","line_range":"29-31","gmt_create":"2026-04-23T20:31:36.502934+08:00","gmt_modified":"2026-04-23T20:31:36.502934+08:00"},{"id":"2a6780838f1415dcb7d0fa611f64cee7","path":"backend/app/workers/platforms/base.py","line_range":"4-17","gmt_create":"2026-04-23T20:31:36.504228+08:00","gmt_modified":"2026-04-23T20:31:36.504228+08:00"},{"id":"c5ae7697193b2b93425ff25d2d7d54a9","path":"backend/app/workers/platforms/tongyi.py","line_range":"10-38","gmt_create":"2026-04-23T20:31:36.505069+08:00","gmt_modified":"2026-04-23T20:31:36.505069+08:00"},{"id":"aa8c3fa3bc509dafe64d113bdd09eafa","path":"backend/app/workers/platforms/doubao.py","line_range":"10-38","gmt_create":"2026-04-23T20:31:36.505502+08:00","gmt_modified":"2026-04-23T20:31:36.505503+08:00"},{"id":"eabb031e538ea62cab69b01368740d20","path":"backend/app/workers/platforms/qingyan.py","line_range":"10-38","gmt_create":"2026-04-23T20:31:36.505932+08:00","gmt_modified":"2026-04-23T20:31:36.505932+08:00"},{"id":"b1c09e372a63e9854886adaea1663bea","path":"backend/app/workers/platforms/tiangong.py","line_range":"10-38","gmt_create":"2026-04-23T20:31:36.50633+08:00","gmt_modified":"2026-04-23T20:31:36.50633+08:00"},{"id":"79793bcd507f9d287d19014b60d963d3","path":"backend/app/workers/platforms/xinghuo.py","line_range":"10-38","gmt_create":"2026-04-23T20:31:36.506717+08:00","gmt_modified":"2026-04-23T20:31:36.506717+08:00"},{"id":"102223dd13475177a1ade8b9be14fbd1","path":"backend/app/workers/platforms/search_engine.py","line_range":"79-144","gmt_create":"2026-04-23T20:31:36.509667+08:00","gmt_modified":"2026-04-23T20:31:36.509667+08:00"},{"id":"8565f299083b4dcba5a328c947f06fee","path":"backend/app/workers/citation_engine.py","line_range":"256-287","gmt_create":"2026-04-23T20:31:36.512515+08:00","gmt_modified":"2026-04-23T20:31:36.512515+08:00"},{"id":"8af91caf063c12c8236f9675769ce4a1","path":"tests/test_citation_engine.py","line_range":"1-54","gmt_create":"2026-04-23T20:31:36.51401+08:00","gmt_modified":"2026-04-23T20:31:36.51401+08:00"},{"id":"005172b71dc742cf6803c5eb0185091e","path":"backend/requirements.txt","line_range":"1-36","gmt_create":"2026-04-23T20:31:36.516249+08:00","gmt_modified":"2026-04-23T20:31:36.516249+08:00"},{"id":"b55cc5936c299f819b57b899858438e6","path":"backend/app/workers/platforms/search_engine.py","line_range":"139-144","gmt_create":"2026-04-23T20:31:36.518228+08:00","gmt_modified":"2026-04-23T20:31:36.518228+08:00"},{"id":"384b1939e53970ce7ae75d241a49da5f","path":"backend/app/workers/platforms/tongyi.py","line_range":"22-29","gmt_create":"2026-04-23T20:31:36.518493+08:00","gmt_modified":"2026-04-23T20:31:36.518493+08:00"},{"id":"f096aa3ea82e9fa625a9acb1309b4c50","path":"backend/app/workers/citation_engine.py","line_range":"231-247","gmt_create":"2026-04-23T20:31:36.518795+08:00","gmt_modified":"2026-04-23T20:31:36.518795+08:00"},{"id":"15b8ebf74b0a5dfac58024d323ca8d0a","path":"backend/app/workers/citation_engine.py","line_range":"164-175","gmt_create":"2026-04-23T20:31:36.519395+08:00","gmt_modified":"2026-04-23T20:31:36.519395+08:00"},{"id":"bcfade20d923c8efa713808ca9af94ca","path":"backend/app/workers/platforms/wenxin.py","line_range":"10-38","gmt_create":"2026-04-23T20:31:50.45294+08:00","gmt_modified":"2026-04-23T20:31:50.45294+08:00"},{"id":"ca7e1232fbba5fb75e04ab8e491bfbd1","path":"backend/app/workers/platforms/kimi.py","line_range":"10-38","gmt_create":"2026-04-23T20:31:50.453339+08:00","gmt_modified":"2026-04-23T20:31:50.453339+08:00"},{"id":"9720b93ed7247efb685e2825e5f964bf","path":"backend/app/workers/citation_engine.py","line_range":"161-176","gmt_create":"2026-04-23T20:31:50.454207+08:00","gmt_modified":"2026-04-23T20:31:50.454207+08:00"},{"id":"0d226400124ba891a46f59c36781ccd8","path":"backend/app/config.py","line_range":"9-23","gmt_create":"2026-04-23T20:31:50.454503+08:00","gmt_modified":"2026-04-23T20:31:50.454503+08:00"},{"id":"412695e5de2014514a8f62f98c573656","path":"backend/Dockerfile","line_range":"1-41","gmt_create":"2026-04-23T20:31:50.454798+08:00","gmt_modified":"2026-04-23T20:31:50.454798+08:00"},{"id":"485e15eb30a5b08da38a628c9dd5053e","path":"backend/app/workers/platforms/search_engine.py","line_range":"16-77","gmt_create":"2026-04-23T20:31:50.459138+08:00","gmt_modified":"2026-04-23T20:31:50.459138+08:00"},{"id":"77158a6f887e224a03552893bfec7c92","path":"backend/app/workers/platforms/wenxin.py","line_range":"16-33","gmt_create":"2026-04-23T20:31:50.461662+08:00","gmt_modified":"2026-04-23T20:31:50.461662+08:00"},{"id":"5c3f336b5a7b4af4cc2f2ac183539218","path":"backend/app/workers/platforms/search_engine.py","line_range":"79-145","gmt_create":"2026-04-23T20:31:50.464823+08:00","gmt_modified":"2026-04-23T20:31:50.464823+08:00"},{"id":"3894c1ed9dca2ebf2359f40ebdb1959e","path":"backend/app/workers/platforms/search_engine.py","line_range":"147-174","gmt_create":"2026-04-23T20:31:50.465221+08:00","gmt_modified":"2026-04-23T20:31:50.465221+08:00"},{"id":"e27bcba24aaadeec1922d2b4e5b8386b","path":"backend/app/api/queries.py","line_range":"1-109","gmt_create":"2026-04-23T20:31:50.46721+08:00","gmt_modified":"2026-04-23T20:31:50.46721+08:00"},{"id":"5f893f5078aa8e549284feb057aa45da","path":"backend/app/workers/platforms/wenxin.py","line_range":"16-29","gmt_create":"2026-04-23T20:31:50.469467+08:00","gmt_modified":"2026-04-23T20:31:50.469467+08:00"},{"id":"e0b68d2d24760689a0f4f00dfee5f9f2","path":"backend/app/workers/platforms/search_engine.py","line_range":"28-76","gmt_create":"2026-04-23T20:31:50.470319+08:00","gmt_modified":"2026-04-23T20:31:50.470319+08:00"},{"id":"e9b98ae83632342d8e06cde39e9c9462","path":"backend/app/workers/platforms/search_engine.py","line_range":"105-137","gmt_create":"2026-04-23T20:31:50.470672+08:00","gmt_modified":"2026-04-23T20:31:50.470672+08:00"},{"id":"c86edb7a95fbe4b431ac65a0e2b8636e","path":"backend/app/api/queries.py","line_range":"90-109","gmt_create":"2026-04-23T20:31:50.471824+08:00","gmt_modified":"2026-04-23T20:31:50.471825+08:00"},{"id":"6e054d9a78c0c8c9da8dec4c4bda62ab","path":"backend/app/database.py","line_range":"6-28","gmt_create":"2026-04-23T20:33:29.972803+08:00","gmt_modified":"2026-04-23T20:33:29.972803+08:00"},{"id":"9c16a069e5154660bfdfa48f3518fc6a","path":"backend/app/models/query_task.py","line_range":"11-38","gmt_create":"2026-04-23T20:33:29.980385+08:00","gmt_modified":"2026-04-23T20:33:29.980385+08:00"},{"id":"a4918fcbd21492ad996d7f5496f03a4b","path":"backend/app/workers/platforms/kimi.py","line_range":"33-48","gmt_create":"2026-04-23T20:33:29.982795+08:00","gmt_modified":"2026-04-23T20:33:29.982795+08:00"},{"id":"bc38d046b4b1410ae2165cee2272839e","path":"backend/app/workers/platforms/wenxin.py","line_range":"33-48","gmt_create":"2026-04-23T20:33:29.983597+08:00","gmt_modified":"2026-04-23T20:33:29.983597+08:00"},{"id":"72f6d334026866e8a61d2ffb1d83370a","path":"backend/app/workers/citation_engine.py","line_range":"19-100","gmt_create":"2026-04-23T20:33:29.986927+08:00","gmt_modified":"2026-04-23T20:33:29.986928+08:00"},{"id":"1d84b9a7eb013882953a2d1d948299e4","path":"backend/app/workers/platforms/kimi.py","line_range":"126-197","gmt_create":"2026-04-23T20:33:29.990308+08:00","gmt_modified":"2026-04-23T20:33:29.990308+08:00"},{"id":"ba687f2c64aff92b3906658359ed953a","path":"backend/app/workers/platforms/wenxin.py","line_range":"124-195","gmt_create":"2026-04-23T20:33:29.991213+08:00","gmt_modified":"2026-04-23T20:33:29.991213+08:00"},{"id":"52ee729b02c992c689522c7956c14128","path":"backend/app/workers/scheduler.py","line_range":"57-62","gmt_create":"2026-04-23T20:33:29.992799+08:00","gmt_modified":"2026-04-23T20:33:29.992799+08:00"},{"id":"c9e32b7324cce60c8887deb8404ee759","path":"backend/app/workers/scheduler.py","line_range":"107-112","gmt_create":"2026-04-23T20:33:29.99333+08:00","gmt_modified":"2026-04-23T20:33:29.99333+08:00"},{"id":"8355d3821337334caee57a75dc8c8865","path":"backend/app/services/query.py","line_range":"116-130","gmt_create":"2026-04-23T20:33:29.994505+08:00","gmt_modified":"2026-04-23T20:33:29.994505+08:00"},{"id":"4fe27d4d1323b500e72d870aa6212a1a","path":"backend/app/workers/scheduler.py","line_range":"13-20","gmt_create":"2026-04-23T20:33:29.996199+08:00","gmt_modified":"2026-04-23T20:33:29.996199+08:00"},{"id":"3729543092bccad8926c5ea852db1e69","path":"backend/app/workers/citation_engine.py","line_range":"148-157","gmt_create":"2026-04-23T20:33:29.996517+08:00","gmt_modified":"2026-04-23T20:33:29.996517+08:00"},{"id":"1ee5153c867fc6e9d277a3067963a1fc","path":"backend/app/workers/scheduler.py","line_range":"32-38","gmt_create":"2026-04-23T20:33:29.997154+08:00","gmt_modified":"2026-04-23T20:33:29.997154+08:00"},{"id":"ed527c7a549ec333c2b30b59614343df","path":"backend/app/models/query.py","line_range":"50-54","gmt_create":"2026-04-23T20:33:29.997453+08:00","gmt_modified":"2026-04-23T20:33:29.997453+08:00"},{"id":"1a3351698ecc7cd4e508b7a792804fc4","path":"backend/app/workers/citation_engine.py","line_range":"302-309","gmt_create":"2026-04-23T20:33:29.999284+08:00","gmt_modified":"2026-04-23T20:33:29.999284+08:00"},{"id":"e3e9710c7eead933c936519395f792e0","path":"backend/app/workers/scheduler.py","line_range":"44-49","gmt_create":"2026-04-23T20:33:30.00043+08:00","gmt_modified":"2026-04-23T20:33:30.000431+08:00"},{"id":"a4143cc29b14f1f5bc75a5e021690666","path":"backend/app/workers/platforms/kimi.py","line_range":"23-31","gmt_create":"2026-04-23T20:33:30.001466+08:00","gmt_modified":"2026-04-23T20:33:30.001466+08:00"},{"id":"7192cfda5508e7587efd91d26cf1f018","path":"backend/app/workers/platforms/wenxin.py","line_range":"23-31","gmt_create":"2026-04-23T20:33:30.002099+08:00","gmt_modified":"2026-04-23T20:33:30.002099+08:00"},{"id":"38142b7d7016c5590e638fafcdcb1a19","path":"backend/app/workers/citation_engine.py","line_range":"211-227","gmt_create":"2026-04-23T20:33:30.002775+08:00","gmt_modified":"2026-04-23T20:33:30.002775+08:00"},{"id":"fb5276346dcc4e7044d8765a8572e7a8","path":"backend/app/config.py","line_range":"4-16","gmt_create":"2026-04-23T20:33:30.003374+08:00","gmt_modified":"2026-04-23T20:33:30.003377+08:00"},{"id":"482d573f97b482b99bcde1c399eceb73","path":"backend/app/api/queries.py","line_range":"90-108","gmt_create":"2026-04-23T20:33:37.21132+08:00","gmt_modified":"2026-04-23T20:33:37.21132+08:00"},{"id":"56f44cc97867cee3e5663424134d6072","path":"backend/app/workers/platforms/kimi.py","line_range":"1-37","gmt_create":"2026-04-23T20:33:37.212923+08:00","gmt_modified":"2026-04-23T20:33:37.212923+08:00"},{"id":"2e326ef8322619f1e8b3873022cb0437","path":"backend/app/workers/platforms/wenxin.py","line_range":"1-37","gmt_create":"2026-04-23T20:33:37.213348+08:00","gmt_modified":"2026-04-23T20:33:37.213348+08:00"},{"id":"4cac57dbc530f0335c913ec5725dfa4f","path":"backend/app/workers/scheduler.py","line_range":"1-121","gmt_create":"2026-04-23T20:33:37.215373+08:00","gmt_modified":"2026-04-23T20:33:37.215373+08:00"},{"id":"db174cfe219fc84d0dd26529f047b1d0","path":"backend/app/workers/citation_engine.py","line_range":"161-330","gmt_create":"2026-04-23T20:33:37.22028+08:00","gmt_modified":"2026-04-23T20:33:37.22028+08:00"},{"id":"f36452f78aabfb0c46da03bbe25dff06","path":"backend/app/services/citation.py","line_range":"219-295","gmt_create":"2026-04-23T20:33:37.223165+08:00","gmt_modified":"2026-04-23T20:33:37.223165+08:00"},{"id":"52c01d7b9c17aa16944cbfcf8885be61","path":"backend/app/workers/platforms/kimi.py","line_range":"16-33","gmt_create":"2026-04-23T20:33:37.227954+08:00","gmt_modified":"2026-04-23T20:33:37.227954+08:00"},{"id":"9d352899554ab41b65b2e9f32558d811","path":"backend/app/workers/citation_engine.py","line_range":"39-113","gmt_create":"2026-04-23T20:33:37.229053+08:00","gmt_modified":"2026-04-23T20:33:37.229053+08:00"},{"id":"b1ee5a992230844ba898765be63f7b27","path":"backend/app/workers/citation_engine.py","line_range":"32-133","gmt_create":"2026-04-23T20:33:37.229555+08:00","gmt_modified":"2026-04-23T20:33:37.229555+08:00"},{"id":"cb098a3cd32339e99f755dfd0fc35b5c","path":"tests/test_citation_engine.py","line_range":"6-127","gmt_create":"2026-04-23T20:33:37.230048+08:00","gmt_modified":"2026-04-23T20:33:37.230049+08:00"},{"id":"3d2dab79f7a3fedf24f0212cc9ef7aa1","path":"backend/app/workers/citation_engine.py","line_range":"145-158","gmt_create":"2026-04-23T20:33:37.230491+08:00","gmt_modified":"2026-04-23T20:33:37.230491+08:00"},{"id":"4e9b3d0e94282f4bc6fa500f4eed61a1","path":"backend/app/workers/citation_engine.py","line_range":"135-159","gmt_create":"2026-04-23T20:33:37.231003+08:00","gmt_modified":"2026-04-23T20:33:37.231003+08:00"},{"id":"8e3201561a9dd9a06ee3bf68ffdb3f99","path":"tests/test_citation_engine.py","line_range":"39-109","gmt_create":"2026-04-23T20:33:37.231501+08:00","gmt_modified":"2026-04-23T20:33:37.231501+08:00"},{"id":"c3a417be3d61f5bcd3fbf976e0c4f15a","path":"backend/app/workers/scheduler.py","line_range":"33-121","gmt_create":"2026-04-23T20:33:37.238099+08:00","gmt_modified":"2026-04-23T20:33:37.238099+08:00"},{"id":"7ce954ed7d3bc4dcf78630124cc0dd88","path":"backend/app/services/citation.py","line_range":"264-295","gmt_create":"2026-04-23T20:33:37.244499+08:00","gmt_modified":"2026-04-23T20:33:37.244499+08:00"},{"id":"7289a3568c137c8a671fc8c963bb8d28","path":"backend/requirements.txt","line_range":"1-35","gmt_create":"2026-04-23T20:33:37.24795+08:00","gmt_modified":"2026-04-23T20:33:37.24795+08:00"},{"id":"ef82ce4377c549013c200e19701a6805","path":"backend/app/workers/platforms/kimi.py","line_range":"21-32","gmt_create":"2026-04-23T20:33:37.254004+08:00","gmt_modified":"2026-04-23T20:33:37.254004+08:00"},{"id":"c7986eb1be0ffdd9ec4e243be4270119","path":"backend/app/workers/platforms/wenxin.py","line_range":"21-32","gmt_create":"2026-04-23T20:33:37.254558+08:00","gmt_modified":"2026-04-23T20:33:37.254558+08:00"},{"id":"5563b3bd56550648dc70302c1762ce5a","path":"backend/app/workers/platforms/tongyi.py","line_range":"18-29","gmt_create":"2026-04-23T20:33:37.255643+08:00","gmt_modified":"2026-04-23T20:33:37.255643+08:00"},{"id":"91852ef8dcc844a2f85e9fce0227ab74","path":"backend/app/workers/platforms/doubao.py","line_range":"18-29","gmt_create":"2026-04-23T20:33:37.25603+08:00","gmt_modified":"2026-04-23T20:33:37.25603+08:00"},{"id":"1b46fab9e22f53db30ead5677d03e3e2","path":"backend/app/workers/citation_engine.py","line_range":"11-16","gmt_create":"2026-04-23T20:33:37.256413+08:00","gmt_modified":"2026-04-23T20:33:37.256413+08:00"},{"id":"4a2fa09aa3a948dec5ef8ba873b0e716","path":"backend/app/services/citation.py","line_range":"14-42","gmt_create":"2026-04-23T20:33:37.257057+08:00","gmt_modified":"2026-04-23T20:33:37.257057+08:00"},{"id":"e7afbab5932c93c3469f1a225e6c7156","path":"backend/app/api/citations.py","line_range":"1-55","gmt_create":"2026-04-23T20:33:57.479092+08:00","gmt_modified":"2026-04-23T20:33:57.479092+08:00"},{"id":"a0eac56d622a2fff529bc2b796064bcd","path":"backend/app/schemas/query.py","line_range":"1-94","gmt_create":"2026-04-23T20:33:57.479659+08:00","gmt_modified":"2026-04-23T20:33:57.479659+08:00"},{"id":"174be58163b6f72b4cd4a493f3463ce4","path":"backend/app/schemas/citation.py","line_range":"1-52","gmt_create":"2026-04-23T20:33:57.480222+08:00","gmt_modified":"2026-04-23T20:33:57.480222+08:00"},{"id":"136f172c732d0cc130532a4f0df475a4","path":"backend/app/models/user.py","line_range":"1-41","gmt_create":"2026-04-23T20:33:57.481714+08:00","gmt_modified":"2026-04-23T20:33:57.481714+08:00"},{"id":"916551131bd9ac8c9f9c8bb762af1fa4","path":"backend/app/services/query.py","line_range":"1-130","gmt_create":"2026-04-23T20:33:57.482172+08:00","gmt_modified":"2026-04-23T20:33:57.482172+08:00"},{"id":"5d2836286eb7d4eb6039b004a9744d26","path":"backend/app/services/citation.py","line_range":"1-429","gmt_create":"2026-04-23T20:33:57.482643+08:00","gmt_modified":"2026-04-23T20:33:57.482643+08:00"},{"id":"39a3b2d9301fa4eff7bef0fda3352790","path":"backend/app/workers/platforms/kimi.py","line_range":"1-206","gmt_create":"2026-04-23T20:33:57.484464+08:00","gmt_modified":"2026-04-23T20:33:57.484464+08:00"},{"id":"fbcfae3b1238b3da5329ebafe4294861","path":"backend/app/workers/platforms/wenxin.py","line_range":"1-205","gmt_create":"2026-04-23T20:33:57.484977+08:00","gmt_modified":"2026-04-23T20:33:57.484977+08:00"},{"id":"c4273407c88f470df7daf6a8ad5ce969","path":"backend/app/api/queries.py","line_range":"15-109","gmt_create":"2026-04-23T20:33:57.485748+08:00","gmt_modified":"2026-04-23T20:33:57.485748+08:00"},{"id":"35774e0a09ac5459c868914d7182ca95","path":"backend/app/api/citations.py","line_range":"19-55","gmt_create":"2026-04-23T20:33:57.486195+08:00","gmt_modified":"2026-04-23T20:33:57.486195+08:00"},{"id":"f639b566c26dfd18b24e3dfd2e9853ac","path":"backend/app/schemas/citation.py","line_range":"7-52","gmt_create":"2026-04-23T20:33:57.486916+08:00","gmt_modified":"2026-04-23T20:33:57.486916+08:00"},{"id":"b46654006178160f12897e2c5baac8fa","path":"backend/app/services/citation.py","line_range":"219-429","gmt_create":"2026-04-23T20:33:57.488934+08:00","gmt_modified":"2026-04-23T20:33:57.488934+08:00"},{"id":"82265d393c20d0af96beec6b9c657c27","path":"backend/app/api/queries.py","line_range":"28-41","gmt_create":"2026-04-23T20:33:57.49175+08:00","gmt_modified":"2026-04-23T20:33:57.49175+08:00"},{"id":"93e5c95b1691bb81a36bf9a0ac889030","path":"backend/app/services/citation.py","line_range":"219-261","gmt_create":"2026-04-23T20:33:57.493276+08:00","gmt_modified":"2026-04-23T20:33:57.493276+08:00"},{"id":"374200f0bf946f0399351756977d0495","path":"backend/app/workers/citation_engine.py","line_range":"176-234","gmt_create":"2026-04-23T20:33:57.498134+08:00","gmt_modified":"2026-04-23T20:33:57.498134+08:00"},{"id":"9a8d9100a6bc34ebae9ee065def7e88a","path":"backend/app/schemas/query.py","line_range":"44-72","gmt_create":"2026-04-23T20:33:57.500036+08:00","gmt_modified":"2026-04-23T20:33:57.500036+08:00"},{"id":"93c23bcc3456826af17e26a6d4c32116","path":"backend/app/schemas/query.py","line_range":"6-9","gmt_create":"2026-04-23T20:33:57.500633+08:00","gmt_modified":"2026-04-23T20:33:57.500633+08:00"},{"id":"c17eeb8726297096cd5542283f11494f","path":"backend/app/api/queries.py","line_range":"17-109","gmt_create":"2026-04-23T20:33:57.5019+08:00","gmt_modified":"2026-04-23T20:33:57.5019+08:00"},{"id":"08fec4718be6991260c00ca532f9173a","path":"backend/app/api/citations.py","line_range":"22-55","gmt_create":"2026-04-23T20:33:57.502347+08:00","gmt_modified":"2026-04-23T20:33:57.502347+08:00"},{"id":"08007199eea846dd14f15f7dc70419e2","path":"backend/app/schemas/citation.py","line_range":"48-52","gmt_create":"2026-04-23T20:33:57.50265+08:00","gmt_modified":"2026-04-23T20:33:57.50265+08:00"},{"id":"4caff756fd4da029bd64cd16e7ef5960","path":"backend/app/api/queries.py","line_range":"32-39","gmt_create":"2026-04-23T20:33:57.50293+08:00","gmt_modified":"2026-04-23T20:33:57.50293+08:00"},{"id":"b0220895f66f1273966ad5b2c3266952","path":"backend/app/api/queries.py","line_range":"49-53","gmt_create":"2026-04-23T20:33:57.503622+08:00","gmt_modified":"2026-04-23T20:33:57.503622+08:00"},{"id":"44f88f9664fdf6e84ffb7e0675a86a28","path":"backend/app/api/queries.py","line_range":"64-69","gmt_create":"2026-04-23T20:33:57.504188+08:00","gmt_modified":"2026-04-23T20:33:57.504188+08:00"},{"id":"91f280f51389bd1cf711dcf33a4da681","path":"backend/app/api/queries.py","line_range":"79-84","gmt_create":"2026-04-23T20:33:57.504712+08:00","gmt_modified":"2026-04-23T20:33:57.504712+08:00"},{"id":"ab50466a57c77659d7b469d3a8a04ddb","path":"backend/app/api/queries.py","line_range":"96-103","gmt_create":"2026-04-23T20:33:57.505025+08:00","gmt_modified":"2026-04-23T20:33:57.505025+08:00"},{"id":"572c2dece1fbc13aa2bb7d6b61b0fd5c","path":"backend/app/api/citations.py","line_range":"65-71","gmt_create":"2026-04-23T20:33:57.505311+08:00","gmt_modified":"2026-04-23T20:33:57.505311+08:00"},{"id":"82386bc7ca57d9ccc94b656e52bc89f6","path":"backend/app/api/queries.py","line_range":"1-14","gmt_create":"2026-04-23T20:33:57.506573+08:00","gmt_modified":"2026-04-23T20:33:57.506573+08:00"},{"id":"7ab79ab21d7d6e4dbcb224572516f6f6","path":"backend/app/api/citations.py","line_range":"1-19","gmt_create":"2026-04-23T20:33:57.507421+08:00","gmt_modified":"2026-04-23T20:33:57.507422+08:00"},{"id":"8433204d7a82a1f480e57df9ceee5581","path":"backend/app/services/query.py","line_range":"1-10","gmt_create":"2026-04-23T20:33:57.507906+08:00","gmt_modified":"2026-04-23T20:33:57.507906+08:00"},{"id":"3957ee6f15a01b7b541490438ef18684","path":"backend/app/services/citation.py","line_range":"1-17","gmt_create":"2026-04-23T20:33:57.508376+08:00","gmt_modified":"2026-04-23T20:33:57.508376+08:00"},{"id":"fcae8d1d281ad7186999cc4ca8e43db7","path":"backend/app/workers/scheduler.py","line_range":"25-39","gmt_create":"2026-04-23T20:33:57.509666+08:00","gmt_modified":"2026-04-23T20:33:57.509666+08:00"},{"id":"ee12a84ac6334b13e20132181454488b","path":"backend/app/workers/scheduler.py","line_range":"13-19","gmt_create":"2026-04-23T20:33:57.510112+08:00","gmt_modified":"2026-04-23T20:33:57.510112+08:00"},{"id":"897e047b94772e5a0ff57cf773a7f965","path":"backend/app/workers/platforms/kimi.py","line_range":"17-32","gmt_create":"2026-04-23T20:33:57.510534+08:00","gmt_modified":"2026-04-23T20:33:57.510534+08:00"},{"id":"53e8ec81b4d2dbb13c831048e5897036","path":"backend/app/workers/platforms/wenxin.py","line_range":"17-32","gmt_create":"2026-04-23T20:33:57.510845+08:00","gmt_modified":"2026-04-23T20:33:57.510845+08:00"},{"id":"fd3145047b9c813cc8e64b9322e531f9","path":"backend/app/services/citation.py","line_range":"219-327","gmt_create":"2026-04-23T20:33:57.516693+08:00","gmt_modified":"2026-04-23T20:33:57.516693+08:00"},{"id":"b09a0f415030d91b25e6cabd8a0a93fc","path":"backend/app/models/query_task.py","line_range":"176-289","gmt_create":"2026-04-23T20:33:57.51758+08:00","gmt_modified":"2026-04-23T20:33:57.51758+08:00"},{"id":"e2168959b26c386940370b5f1bf48d7d","path":"backend/app/models/citation_record.py","line_range":"194-204","gmt_create":"2026-04-23T20:33:57.517939+08:00","gmt_modified":"2026-04-23T20:33:57.517939+08:00"},{"id":"129573d2bbcde48697ed0e75dea12396","path":"backend/app/workers/scheduler.py","line_range":"25-40","gmt_create":"2026-04-23T20:35:18.586153+08:00","gmt_modified":"2026-04-23T20:35:18.586153+08:00"},{"id":"cf18c97a9be6c78aa43cc229ed3dad20","path":"backend/app/workers/citation_engine.py","line_range":"164-173","gmt_create":"2026-04-23T20:35:18.586656+08:00","gmt_modified":"2026-04-23T20:35:18.586656+08:00"},{"id":"3c7ca5d582dca31c2530b1ce9c058e95","path":"backend/app/workers/platforms/kimi.py","line_range":"10-37","gmt_create":"2026-04-23T20:35:18.587239+08:00","gmt_modified":"2026-04-23T20:35:18.587239+08:00"},{"id":"27047f868643e5457d4f242b4298a9f6","path":"frontend/lib/platforms.ts","line_range":"1-23","gmt_create":"2026-04-23T20:35:18.590782+08:00","gmt_modified":"2026-04-23T20:35:18.590782+08:00"},{"id":"1526e4e02133a48eac04befb74ec5bd1","path":"backend/app/workers/citation_engine.py","line_range":"161-173","gmt_create":"2026-04-23T20:35:18.592183+08:00","gmt_modified":"2026-04-23T20:35:18.592183+08:00"},{"id":"98c02d9bb7aa6e2b6be5f7381e64fd99","path":"backend/app/api/queries.py","line_range":"26-39","gmt_create":"2026-04-23T20:35:18.594026+08:00","gmt_modified":"2026-04-23T20:35:18.594026+08:00"},{"id":"2a971cb83924013902324eceeab22559","path":"backend/app/workers/platforms/kimi.py","line_range":"16-29","gmt_create":"2026-04-23T20:35:18.596805+08:00","gmt_modified":"2026-04-23T20:35:18.596805+08:00"},{"id":"99326fedad9275392719105b5b6782d6","path":"backend/app/workers/platforms/kimi.py","line_range":"31-33","gmt_create":"2026-04-23T20:35:18.597389+08:00","gmt_modified":"2026-04-23T20:35:18.597389+08:00"},{"id":"5e5dacc623918c0f1eba234154c99291","path":"backend/app/workers/platforms/search_engine.py","line_range":"16-76","gmt_create":"2026-04-23T20:35:18.598978+08:00","gmt_modified":"2026-04-23T20:35:18.598978+08:00"},{"id":"5be7e6cf82d6359efddaf131aaf92615","path":"backend/app/workers/citation_engine.py","line_range":"323-330","gmt_create":"2026-04-23T20:35:18.604342+08:00","gmt_modified":"2026-04-23T20:35:18.604342+08:00"},{"id":"129b746e71a9013ceb1b0fcc59942b39","path":"backend/app/workers/scheduler.py","line_range":"86-90","gmt_create":"2026-04-23T20:35:18.611167+08:00","gmt_modified":"2026-04-23T20:35:18.611167+08:00"},{"id":"d780e807ee751f39f331a658b47c4ed3","path":"backend/app/services/citation.py","line_range":"24-269","gmt_create":"2026-04-23T20:35:18.619146+08:00","gmt_modified":"2026-04-23T20:35:18.619146+08:00"},{"id":"8eea43550951387ac740b5e3e64c7691","path":"backend/app/workers/platforms/search_engine.py","line_range":"94-96","gmt_create":"2026-04-23T20:35:18.629044+08:00","gmt_modified":"2026-04-23T20:35:18.629044+08:00"},{"id":"37769b7e6b5588be0065681dedf514ed","path":"backend/app/workers/platforms/search_engine.py","line_range":"140-144","gmt_create":"2026-04-23T20:35:18.631486+08:00","gmt_modified":"2026-04-23T20:35:18.631486+08:00"},{"id":"518d184988b97ebc7ef0c0bf5c10f42c","path":"backend/app/workers/platforms/kimi.py","line_range":"24-29","gmt_create":"2026-04-23T20:35:18.631835+08:00","gmt_modified":"2026-04-23T20:35:18.631835+08:00"},{"id":"818504ee2e17d2f9cc8fe115ca321138","path":"backend/app/api/queries.py","line_range":"34-38","gmt_create":"2026-04-23T20:35:18.632132+08:00","gmt_modified":"2026-04-23T20:35:18.632132+08:00"},{"id":"8a1a0ffd82ac6ff54d3410e4ce59a6b8","path":"backend/app/api/citations.py","line_range":"25-56","gmt_create":"2026-04-23T20:35:18.633686+08:00","gmt_modified":"2026-04-23T20:35:18.633686+08:00"},{"id":"d4f99d3dd9fe489c354edf5fe2f8803d","path":"backend/app/models/citation_record.py","line_range":"1-44","gmt_create":"2026-04-23T20:35:45.581649+08:00","gmt_modified":"2026-04-23T20:35:45.58165+08:00"},{"id":"86e37040be1aeb400fab9b529f5404c8","path":"backend/app/models/subscription.py","line_range":"1-37","gmt_create":"2026-04-23T20:35:45.583254+08:00","gmt_modified":"2026-04-23T20:35:45.583254+08:00"},{"id":"211463f5b49610f09594c40c0a235943","path":"backend/alembic/env.py","line_range":"1-89","gmt_create":"2026-04-23T20:35:45.584058+08:00","gmt_modified":"2026-04-23T20:35:45.584058+08:00"},{"id":"48d22eaee09e364a293ad6c4750f5c5a","path":"docker-compose.yml","line_range":"1-71","gmt_create":"2026-04-23T20:35:45.587653+08:00","gmt_modified":"2026-04-23T20:35:45.587653+08:00"},{"id":"98cc82f62b83678f06a33cf9231ecdf8","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"1-128","gmt_create":"2026-04-23T20:35:45.597037+08:00","gmt_modified":"2026-04-23T20:35:45.597037+08:00"},{"id":"e1aabd52989e47806fb997157381e1cf","path":"backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py","line_range":"1-37","gmt_create":"2026-04-23T20:35:45.597747+08:00","gmt_modified":"2026-04-23T20:35:45.597747+08:00"},{"id":"ac77e4875817616194b7b5997d4fb1ae","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"57-94","gmt_create":"2026-04-23T20:35:45.611901+08:00","gmt_modified":"2026-04-23T20:35:45.611901+08:00"},{"id":"0e57efd98dacc85da21f995980371ee4","path":"backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py","line_range":"21-37","gmt_create":"2026-04-23T20:35:45.61338+08:00","gmt_modified":"2026-04-23T20:35:45.61338+08:00"},{"id":"717eb27184726e4f78d694984d29420c","path":"backend/app/models/citation_record.py","line_range":"37-44","gmt_create":"2026-04-23T20:35:45.615494+08:00","gmt_modified":"2026-04-23T20:35:45.615495+08:00"},{"id":"bfdf3479f244dc6794628d9df10ab6d0","path":"backend/app/models/query.py","line_range":"11-48","gmt_create":"2026-04-23T20:35:45.618458+08:00","gmt_modified":"2026-04-23T20:35:45.618458+08:00"},{"id":"f5f9f0d96263ae84631c7a8d7e9b3648","path":"backend/app/models/citation_record.py","line_range":"11-44","gmt_create":"2026-04-23T20:35:45.61929+08:00","gmt_modified":"2026-04-23T20:35:45.619291+08:00"},{"id":"818d1354dc0665798f3d91a2ca5153d6","path":"backend/app/models/query_task.py","line_range":"11-34","gmt_create":"2026-04-23T20:35:45.620036+08:00","gmt_modified":"2026-04-23T20:35:45.620036+08:00"},{"id":"24aade4c34609a8ab28e4643a3692201","path":"backend/app/models/subscription.py","line_range":"11-36","gmt_create":"2026-04-23T20:35:45.62075+08:00","gmt_modified":"2026-04-23T20:35:45.62075+08:00"},{"id":"d34337b9ff77246979252d2fd8fb8018","path":"backend/alembic/env.py","line_range":"33-88","gmt_create":"2026-04-23T20:35:45.628352+08:00","gmt_modified":"2026-04-23T20:35:45.628353+08:00"},{"id":"eb63042f04a22f9a67bd498df1684d20","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","line_range":"36-111","gmt_create":"2026-04-23T20:35:45.634829+08:00","gmt_modified":"2026-04-23T20:35:45.634829+08:00"},{"id":"c651c7ad6747a92ee96eabb2eb82afdd","path":"backend/app/database.py","line_range":"12-18","gmt_create":"2026-04-23T20:35:45.637195+08:00","gmt_modified":"2026-04-23T20:35:45.637195+08:00"},{"id":"dd01eee487298a28e950f6345196f1d4","path":"backend/app/services/citation.py","line_range":"30-79","gmt_create":"2026-04-23T20:35:45.637815+08:00","gmt_modified":"2026-04-23T20:35:45.637815+08:00"},{"id":"7dae7237f11c5100bf7889c105193cf6","path":"backend/app/services/query.py","line_range":"12-32","gmt_create":"2026-04-23T20:35:45.638422+08:00","gmt_modified":"2026-04-23T20:35:45.638422+08:00"},{"id":"cc64cf609f5ff218f618e0664ffa7cc7","path":"backend/app/services/citation.py","line_range":"298-308","gmt_create":"2026-04-23T20:35:45.641905+08:00","gmt_modified":"2026-04-23T20:35:45.641905+08:00"},{"id":"ce7e334595a4ce912e0d116314db9a35","path":"backend/app/services/citation.py","line_range":"342-429","gmt_create":"2026-04-23T20:35:45.6442+08:00","gmt_modified":"2026-04-23T20:35:45.6442+08:00"},{"id":"2f46f212597e3c245b9e5dcc5dbc863d","path":"backend/app/schemas/citation.py","line_range":"7-18","gmt_create":"2026-04-23T20:35:45.64501+08:00","gmt_modified":"2026-04-23T20:35:45.64501+08:00"},{"id":"dc40f1dd3e59ee7f046019201068bea1","path":"backend/app/services/citation.py","line_range":"14-22","gmt_create":"2026-04-23T20:35:45.659571+08:00","gmt_modified":"2026-04-23T20:35:45.659571+08:00"},{"id":"01a0c4b40819965823b56e9da858c024","path":"frontend/Dockerfile","line_range":"1-15","gmt_create":"2026-04-23T21:00:59.634151+08:00","gmt_modified":"2026-04-23T21:00:59.634151+08:00"},{"id":"13f6ca76349ef86ae756bb519f122bc5","path":"backend/alembic.ini","line_range":"1-150","gmt_create":"2026-04-23T21:00:59.636129+08:00","gmt_modified":"2026-04-23T21:00:59.636129+08:00"},{"id":"74abd6612105c29b67178fa9dbd04b61","path":"frontend/tsconfig.json","line_range":"1-27","gmt_create":"2026-04-23T21:00:59.639808+08:00","gmt_modified":"2026-04-23T21:00:59.639808+08:00"},{"id":"5bdaabf085a7c3eb6e87c5ad7479e25d","path":"frontend/.eslintrc.json","line_range":"1-4","gmt_create":"2026-04-23T21:00:59.640082+08:00","gmt_modified":"2026-04-23T21:00:59.640082+08:00"},{"id":"9482f4f6279a4f636b77e69b8273b996","path":"backend/alembic.ini","line_range":"86-114","gmt_create":"2026-04-23T21:00:59.64068+08:00","gmt_modified":"2026-04-23T21:00:59.64068+08:00"},{"id":"397b266f19a1addebdf6c32db71ae77f","path":"tests/conftest.py","line_range":"1-71","gmt_create":"2026-04-23T21:00:59.640958+08:00","gmt_modified":"2026-04-23T21:00:59.640958+08:00"},{"id":"eb603ec2611957de67af00756f4b1efa","path":"backend/app/config.py","line_range":"7-13","gmt_create":"2026-04-23T21:00:59.64236+08:00","gmt_modified":"2026-04-23T21:00:59.64236+08:00"},{"id":"c25b39830f3b7734da975acc7f214666","path":"backend/Dockerfile","line_range":"31-33","gmt_create":"2026-04-23T21:00:59.642682+08:00","gmt_modified":"2026-04-23T21:00:59.642682+08:00"},{"id":"4c9d362ecce8e796e6f14850def049b0","path":"docker-compose.yml","line_range":"4-20","gmt_create":"2026-04-23T21:00:59.642976+08:00","gmt_modified":"2026-04-23T21:00:59.642976+08:00"},{"id":"d5827be2cfbe41c8177660ae877e93a4","path":"docker-compose.yml","line_range":"22-34","gmt_create":"2026-04-23T21:00:59.643262+08:00","gmt_modified":"2026-04-23T21:00:59.643262+08:00"},{"id":"03a65cdcfc173217d12ad8a417f8f033","path":"backend/app/main.py","line_range":"13-21","gmt_create":"2026-04-23T21:00:59.643535+08:00","gmt_modified":"2026-04-23T21:00:59.643535+08:00"},{"id":"3365fa8db33d43bab1d0a614e8af3a70","path":"backend/app/main.py","line_range":"45-47","gmt_create":"2026-04-23T21:00:59.644124+08:00","gmt_modified":"2026-04-23T21:00:59.644124+08:00"},{"id":"6f637c2b0796ec533aafb3b865c11cf0","path":"backend/app/schemas/auth.py","line_range":"1-34","gmt_create":"2026-04-23T21:00:59.646408+08:00","gmt_modified":"2026-04-23T21:00:59.646408+08:00"},{"id":"a698e13bfada239280fc9354ff9e2331","path":"backend/app/config.py","line_range":"7-8","gmt_create":"2026-04-23T21:00:59.64811+08:00","gmt_modified":"2026-04-23T21:00:59.64811+08:00"},{"id":"37bbab6e4f16db7eac6eee9d05e80e46","path":"README.md","line_range":"1-3","gmt_create":"2026-04-23T21:00:59.649625+08:00","gmt_modified":"2026-04-23T21:00:59.649625+08:00"},{"id":"63ecbf5e72a0354028b84eb531a58977","path":"frontend/package.json","line_range":"11-38","gmt_create":"2026-04-23T21:00:59.650192+08:00","gmt_modified":"2026-04-23T21:00:59.650193+08:00"},{"id":"bf363deac5ef38c8dc80c73b862e730b","path":"docker-compose.yml","line_range":"4-34","gmt_create":"2026-04-23T21:00:59.651828+08:00","gmt_modified":"2026-04-23T21:00:59.651828+08:00"},{"id":"c6e94075e5f689bfa2fe16f8cf965203","path":"tests/conftest.py","line_range":"19-50","gmt_create":"2026-04-23T21:00:59.65241+08:00","gmt_modified":"2026-04-23T21:00:59.65241+08:00"},{"id":"1a78f5574add6d07a1d7c947dba3f23d","path":"backend/alembic.ini","line_range":"115-150","gmt_create":"2026-04-23T21:00:59.652679+08:00","gmt_modified":"2026-04-23T21:00:59.652679+08:00"},{"id":"f6810849c947471a4b45d7ca01ec8c5f","path":"frontend/tailwind.config.ts","line_range":"5-9","gmt_create":"2026-04-23T21:00:59.653659+08:00","gmt_modified":"2026-04-23T21:00:59.653659+08:00"},{"id":"9f6d9941f3b93e29d714bfec7e83434c","path":"backend/app/main.py","line_range":"30-36","gmt_create":"2026-04-23T21:00:59.653983+08:00","gmt_modified":"2026-04-23T21:00:59.653984+08:00"},{"id":"669d67125dcddb0756f4ff50a43512c6","path":"backend/app/config.py","line_range":"9-13","gmt_create":"2026-04-23T21:00:59.654266+08:00","gmt_modified":"2026-04-23T21:00:59.654266+08:00"},{"id":"85792f0b1e34b5b48b0300aa606ed6e6","path":"backend/app/main.py","line_range":"1-56","gmt_create":"2026-04-23T21:02:44.159246+08:00","gmt_modified":"2026-04-23T21:02:44.159246+08:00"}],"knowledge_relations":[{"id":1,"source_id":"34e572eb-6fc8-4de7-8061-63783ef8be24","target_id":"2793782c-91c8-4052-b9db-39513426c736","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 34e572eb-6fc8-4de7-8061-63783ef8be24 -\u003e 2793782c-91c8-4052-b9db-39513426c736","gmt_create":"2026-04-22T19:25:18.918463+08:00","gmt_modified":"2026-04-22T19:25:18.918463+08:00"},{"id":2,"source_id":"34e572eb-6fc8-4de7-8061-63783ef8be24","target_id":"e23bd86e-b4ac-40eb-b1c1-38d929fd5419","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 34e572eb-6fc8-4de7-8061-63783ef8be24 -\u003e e23bd86e-b4ac-40eb-b1c1-38d929fd5419","gmt_create":"2026-04-22T19:25:18.919833+08:00","gmt_modified":"2026-04-22T19:25:18.919833+08:00"},{"id":3,"source_id":"34e572eb-6fc8-4de7-8061-63783ef8be24","target_id":"70b3948e-f456-42d2-b7ad-a0097ad5ee5f","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 34e572eb-6fc8-4de7-8061-63783ef8be24 -\u003e 70b3948e-f456-42d2-b7ad-a0097ad5ee5f","gmt_create":"2026-04-22T19:25:18.92034+08:00","gmt_modified":"2026-04-22T19:25:18.92034+08:00"},{"id":4,"source_id":"34e572eb-6fc8-4de7-8061-63783ef8be24","target_id":"1c4316a1-f1d7-46da-bcfc-ea2fa0c56110","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 34e572eb-6fc8-4de7-8061-63783ef8be24 -\u003e 1c4316a1-f1d7-46da-bcfc-ea2fa0c56110","gmt_create":"2026-04-22T19:25:18.920778+08:00","gmt_modified":"2026-04-22T19:25:18.920778+08:00"},{"id":5,"source_id":"34e572eb-6fc8-4de7-8061-63783ef8be24","target_id":"7e679d62-c415-4d6a-a7e5-d41d00e0ed69","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 34e572eb-6fc8-4de7-8061-63783ef8be24 -\u003e 7e679d62-c415-4d6a-a7e5-d41d00e0ed69","gmt_create":"2026-04-22T19:25:18.921203+08:00","gmt_modified":"2026-04-22T19:25:18.921204+08:00"},{"id":6,"source_id":"c7eb113b-b503-4d83-be7f-9ccf3350c9d9","target_id":"f94da0b4-8a07-4de1-b0b3-d3b32a12c3c1","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c7eb113b-b503-4d83-be7f-9ccf3350c9d9 -\u003e f94da0b4-8a07-4de1-b0b3-d3b32a12c3c1","gmt_create":"2026-04-22T19:25:18.921638+08:00","gmt_modified":"2026-04-22T19:25:18.921638+08:00"},{"id":7,"source_id":"c7eb113b-b503-4d83-be7f-9ccf3350c9d9","target_id":"df661133-efbf-43fe-97c3-f581c81f47a7","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c7eb113b-b503-4d83-be7f-9ccf3350c9d9 -\u003e df661133-efbf-43fe-97c3-f581c81f47a7","gmt_create":"2026-04-22T19:25:18.922154+08:00","gmt_modified":"2026-04-22T19:25:18.922154+08:00"},{"id":8,"source_id":"c7eb113b-b503-4d83-be7f-9ccf3350c9d9","target_id":"11936bb5-374f-40f4-bb53-b75264fc4b9d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c7eb113b-b503-4d83-be7f-9ccf3350c9d9 -\u003e 11936bb5-374f-40f4-bb53-b75264fc4b9d","gmt_create":"2026-04-22T19:25:18.922617+08:00","gmt_modified":"2026-04-22T19:25:18.922617+08:00"},{"id":9,"source_id":"c7eb113b-b503-4d83-be7f-9ccf3350c9d9","target_id":"23ad3419-5473-4e2c-ac87-d9715090279d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c7eb113b-b503-4d83-be7f-9ccf3350c9d9 -\u003e 23ad3419-5473-4e2c-ac87-d9715090279d","gmt_create":"2026-04-22T19:25:18.923059+08:00","gmt_modified":"2026-04-22T19:25:18.923059+08:00"},{"id":11,"source_id":"c7eb113b-b503-4d83-be7f-9ccf3350c9d9","target_id":"83fe6837-7874-4467-8114-103062f15f58","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c7eb113b-b503-4d83-be7f-9ccf3350c9d9 -\u003e 83fe6837-7874-4467-8114-103062f15f58","gmt_create":"2026-04-22T19:25:18.924565+08:00","gmt_modified":"2026-04-22T19:25:18.924565+08:00"},{"id":12,"source_id":"3af3bb9e-4d99-4dc3-b1ed-2686db385c26","target_id":"c112a3f4-b0a1-4c4a-a325-e3ede8c90be6","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3af3bb9e-4d99-4dc3-b1ed-2686db385c26 -\u003e c112a3f4-b0a1-4c4a-a325-e3ede8c90be6","gmt_create":"2026-04-22T19:25:18.925143+08:00","gmt_modified":"2026-04-22T19:25:18.925143+08:00"},{"id":13,"source_id":"3af3bb9e-4d99-4dc3-b1ed-2686db385c26","target_id":"2b32ec11-d228-42c0-9232-103ba7e44f71","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3af3bb9e-4d99-4dc3-b1ed-2686db385c26 -\u003e 2b32ec11-d228-42c0-9232-103ba7e44f71","gmt_create":"2026-04-22T19:25:18.925589+08:00","gmt_modified":"2026-04-22T19:25:18.925589+08:00"},{"id":16,"source_id":"3af3bb9e-4d99-4dc3-b1ed-2686db385c26","target_id":"a40267bc-925a-4364-a01f-b96d3df60aea","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3af3bb9e-4d99-4dc3-b1ed-2686db385c26 -\u003e a40267bc-925a-4364-a01f-b96d3df60aea","gmt_create":"2026-04-22T19:25:18.927133+08:00","gmt_modified":"2026-04-22T19:25:18.927133+08:00"},{"id":17,"source_id":"3af3bb9e-4d99-4dc3-b1ed-2686db385c26","target_id":"7bd2c461-81b0-48e8-8cb3-b4b14305806d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3af3bb9e-4d99-4dc3-b1ed-2686db385c26 -\u003e 7bd2c461-81b0-48e8-8cb3-b4b14305806d","gmt_create":"2026-04-22T19:25:18.927624+08:00","gmt_modified":"2026-04-22T19:25:18.927625+08:00"},{"id":34,"source_id":"98909ecc-fceb-4ab7-a26f-741838eb2e50","target_id":"1ed0b482-3d6a-4bfd-af40-47a5d1f3e802","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 98909ecc-fceb-4ab7-a26f-741838eb2e50 -\u003e 1ed0b482-3d6a-4bfd-af40-47a5d1f3e802","gmt_create":"2026-04-22T19:25:18.934991+08:00","gmt_modified":"2026-04-22T19:25:18.934991+08:00"},{"id":35,"source_id":"98909ecc-fceb-4ab7-a26f-741838eb2e50","target_id":"26f80935-eac2-44ee-bcdb-d6a79c537750","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 98909ecc-fceb-4ab7-a26f-741838eb2e50 -\u003e 26f80935-eac2-44ee-bcdb-d6a79c537750","gmt_create":"2026-04-22T19:25:18.935426+08:00","gmt_modified":"2026-04-22T19:25:18.935426+08:00"},{"id":36,"source_id":"98909ecc-fceb-4ab7-a26f-741838eb2e50","target_id":"eb1288f7-5ea1-413a-8f54-4f870306d14d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 98909ecc-fceb-4ab7-a26f-741838eb2e50 -\u003e eb1288f7-5ea1-413a-8f54-4f870306d14d","gmt_create":"2026-04-22T19:25:18.935875+08:00","gmt_modified":"2026-04-22T19:25:18.935875+08:00"},{"id":37,"source_id":"98909ecc-fceb-4ab7-a26f-741838eb2e50","target_id":"aa6db9b6-71e1-4497-a0e2-f3ff25358d3a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 98909ecc-fceb-4ab7-a26f-741838eb2e50 -\u003e aa6db9b6-71e1-4497-a0e2-f3ff25358d3a","gmt_create":"2026-04-22T19:25:18.936315+08:00","gmt_modified":"2026-04-22T19:25:18.936316+08:00"},{"id":45,"source_id":"c5849940-e223-4222-be17-aa0a6cb36bc8","target_id":"d2c7157d-157f-4990-8f76-11f3ea5435f7","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c5849940-e223-4222-be17-aa0a6cb36bc8 -\u003e d2c7157d-157f-4990-8f76-11f3ea5435f7","gmt_create":"2026-04-22T19:25:18.939978+08:00","gmt_modified":"2026-04-22T19:25:18.939978+08:00"},{"id":46,"source_id":"c5849940-e223-4222-be17-aa0a6cb36bc8","target_id":"e1e0bd0e-01b3-4543-9781-d9beb32b9a57","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c5849940-e223-4222-be17-aa0a6cb36bc8 -\u003e e1e0bd0e-01b3-4543-9781-d9beb32b9a57","gmt_create":"2026-04-22T19:25:18.940415+08:00","gmt_modified":"2026-04-22T19:25:18.940415+08:00"},{"id":47,"source_id":"c5849940-e223-4222-be17-aa0a6cb36bc8","target_id":"e9a02c86-236b-49cb-bbed-9462ee123c04","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c5849940-e223-4222-be17-aa0a6cb36bc8 -\u003e e9a02c86-236b-49cb-bbed-9462ee123c04","gmt_create":"2026-04-22T19:25:18.941227+08:00","gmt_modified":"2026-04-22T19:25:18.941227+08:00"},{"id":48,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"12e2c3d7b9a92dc44a6ee29b85e10df6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/app/layout.tsx","gmt_create":"2026-04-23T15:19:43.777831+08:00","gmt_modified":"2026-04-23T15:19:43.777831+08:00"},{"id":49,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"2a1c745c7b3fb7f600596be3d979bba1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/app/(dashboard","gmt_create":"2026-04-23T15:19:43.778774+08:00","gmt_modified":"2026-04-23T15:19:43.778774+08:00"},{"id":50,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"eca13a610badfc5ffc6210827fb96991","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/layout/header.tsx","gmt_create":"2026-04-23T15:19:43.779153+08:00","gmt_modified":"2026-04-23T15:19:43.779154+08:00"},{"id":51,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"18a0651d895fba9bb4e0c0229459efdc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/layout/sidebar.tsx","gmt_create":"2026-04-23T15:19:43.779524+08:00","gmt_modified":"2026-04-23T15:19:43.779524+08:00"},{"id":52,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"5d7886d0dc99f81073a578b8aefdd375","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/lib/api.ts","gmt_create":"2026-04-23T15:19:43.779869+08:00","gmt_modified":"2026-04-23T15:19:43.779869+08:00"},{"id":53,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"0c0b0f4e2cf44facd9d5b57de0d0bf0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/table.tsx","gmt_create":"2026-04-23T15:19:43.780775+08:00","gmt_modified":"2026-04-23T15:19:43.780775+08:00"},{"id":54,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"108b0c4b4dcfb6aa39a5eb138225c148","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/dialog.tsx","gmt_create":"2026-04-23T15:19:43.781767+08:00","gmt_modified":"2026-04-23T15:19:43.781767+08:00"},{"id":55,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"ef72f0c3cedb9fd9a87352fe493053dc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/lib/platforms.ts","gmt_create":"2026-04-23T15:19:43.782177+08:00","gmt_modified":"2026-04-23T15:19:43.782177+08:00"},{"id":56,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"f93ae024fe0a2e69698037dff6df205f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/lib/utils.ts","gmt_create":"2026-04-23T15:19:43.782527+08:00","gmt_modified":"2026-04-23T15:19:43.782527+08:00"},{"id":57,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"d5f2266643d2011c66e86af088ec637f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/charts/trend-chart.tsx","gmt_create":"2026-04-23T15:19:43.782861+08:00","gmt_modified":"2026-04-23T15:19:43.782861+08:00"},{"id":58,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"f1a7d61831cc0a45ac6220294f15c21d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/charts/platform-chart.tsx","gmt_create":"2026-04-23T15:19:43.783164+08:00","gmt_modified":"2026-04-23T15:19:43.783165+08:00"},{"id":59,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"8a466b0c6eac2ccb54c5da7e13854646","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/app/layout.tsx#1-37","gmt_create":"2026-04-23T15:19:43.783668+08:00","gmt_modified":"2026-04-23T15:19:43.783668+08:00"},{"id":60,"source_id":"12e2c3d7b9a92dc44a6ee29b85e10df6","target_id":"8a466b0c6eac2ccb54c5da7e13854646","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-04-23T15:19:43.783987+08:00","gmt_modified":"2026-04-23T15:19:43.783987+08:00"},{"id":61,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"3bd4eedea376e3a3d9f9fbff4fe27a65","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/layout/sidebar.tsx#1-54","gmt_create":"2026-04-23T15:19:43.784455+08:00","gmt_modified":"2026-04-23T15:19:43.784455+08:00"},{"id":62,"source_id":"18a0651d895fba9bb4e0c0229459efdc","target_id":"3bd4eedea376e3a3d9f9fbff4fe27a65","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-54","gmt_create":"2026-04-23T15:19:43.784807+08:00","gmt_modified":"2026-04-23T15:19:43.784807+08:00"},{"id":63,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"0d903468b55bdc63cc7e25a87a89c522","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/layout/header.tsx#1-30","gmt_create":"2026-04-23T15:19:43.785303+08:00","gmt_modified":"2026-04-23T15:19:43.785303+08:00"},{"id":64,"source_id":"eca13a610badfc5ffc6210827fb96991","target_id":"0d903468b55bdc63cc7e25a87a89c522","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-30","gmt_create":"2026-04-23T15:19:43.785622+08:00","gmt_modified":"2026-04-23T15:19:43.785622+08:00"},{"id":65,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"3bab92a09e9fb456e0303bb1e04afc7e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/table.tsx#1-118","gmt_create":"2026-04-23T15:19:43.78727+08:00","gmt_modified":"2026-04-23T15:19:43.787271+08:00"},{"id":66,"source_id":"0c0b0f4e2cf44facd9d5b57de0d0bf0c","target_id":"3bab92a09e9fb456e0303bb1e04afc7e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-118","gmt_create":"2026-04-23T15:19:43.788224+08:00","gmt_modified":"2026-04-23T15:19:43.788224+08:00"},{"id":67,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"0eed9f61572209dd754611fc7c690d5a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/dialog.tsx#1-123","gmt_create":"2026-04-23T15:19:43.789533+08:00","gmt_modified":"2026-04-23T15:19:43.789533+08:00"},{"id":68,"source_id":"108b0c4b4dcfb6aa39a5eb138225c148","target_id":"0eed9f61572209dd754611fc7c690d5a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-123","gmt_create":"2026-04-23T15:19:43.790255+08:00","gmt_modified":"2026-04-23T15:19:43.790255+08:00"},{"id":69,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"b7796fc6197ecce5beb461b9466e54a0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/charts/trend-chart.tsx#1-60","gmt_create":"2026-04-23T15:19:43.790795+08:00","gmt_modified":"2026-04-23T15:19:43.790795+08:00"},{"id":70,"source_id":"d5f2266643d2011c66e86af088ec637f","target_id":"b7796fc6197ecce5beb461b9466e54a0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-60","gmt_create":"2026-04-23T15:19:43.791134+08:00","gmt_modified":"2026-04-23T15:19:43.791134+08:00"},{"id":71,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"6b9f52af0b6d78c17ff9bbc42d760ea2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/charts/platform-chart.tsx#1-68","gmt_create":"2026-04-23T15:19:43.791601+08:00","gmt_modified":"2026-04-23T15:19:43.791601+08:00"},{"id":72,"source_id":"f1a7d61831cc0a45ac6220294f15c21d","target_id":"6b9f52af0b6d78c17ff9bbc42d760ea2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-68","gmt_create":"2026-04-23T15:19:43.791902+08:00","gmt_modified":"2026-04-23T15:19:43.791902+08:00"},{"id":73,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"a829403082cc3460c01e0110229c53c4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/platforms.ts#1-18","gmt_create":"2026-04-23T15:19:43.792356+08:00","gmt_modified":"2026-04-23T15:19:43.792356+08:00"},{"id":74,"source_id":"ef72f0c3cedb9fd9a87352fe493053dc","target_id":"a829403082cc3460c01e0110229c53c4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-18","gmt_create":"2026-04-23T15:19:43.79267+08:00","gmt_modified":"2026-04-23T15:19:43.79267+08:00"},{"id":75,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"dcfa308ef4ec368c5a51a17acbfc8e2c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/utils.ts#1-7","gmt_create":"2026-04-23T15:19:43.79312+08:00","gmt_modified":"2026-04-23T15:19:43.79312+08:00"},{"id":76,"source_id":"f93ae024fe0a2e69698037dff6df205f","target_id":"dcfa308ef4ec368c5a51a17acbfc8e2c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-7","gmt_create":"2026-04-23T15:19:43.793455+08:00","gmt_modified":"2026-04-23T15:19:43.793455+08:00"},{"id":77,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"0f87c8089f548883d056f0a0d79e273f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/api.ts#1-79","gmt_create":"2026-04-23T15:19:43.793866+08:00","gmt_modified":"2026-04-23T15:19:43.793866+08:00"},{"id":78,"source_id":"5d7886d0dc99f81073a578b8aefdd375","target_id":"0f87c8089f548883d056f0a0d79e273f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-79","gmt_create":"2026-04-23T15:19:43.794158+08:00","gmt_modified":"2026-04-23T15:19:43.794158+08:00"},{"id":79,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"9beee1f41fe8f0750fd97155f9d54bbb","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/api.ts#67-70","gmt_create":"2026-04-23T15:19:43.797877+08:00","gmt_modified":"2026-04-23T15:19:43.797877+08:00"},{"id":80,"source_id":"5d7886d0dc99f81073a578b8aefdd375","target_id":"9beee1f41fe8f0750fd97155f9d54bbb","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 67-70","gmt_create":"2026-04-23T15:19:43.798244+08:00","gmt_modified":"2026-04-23T15:19:43.798244+08:00"},{"id":81,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"8fe2e22a963442076e1ce16ab777573c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/api.ts#56-66","gmt_create":"2026-04-23T15:19:43.799319+08:00","gmt_modified":"2026-04-23T15:19:43.799319+08:00"},{"id":82,"source_id":"5d7886d0dc99f81073a578b8aefdd375","target_id":"8fe2e22a963442076e1ce16ab777573c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 56-66","gmt_create":"2026-04-23T15:19:43.799625+08:00","gmt_modified":"2026-04-23T15:19:43.799625+08:00"},{"id":83,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"3124ad882ca2cf8fecb6b93696c7f233","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/api.ts#72-77","gmt_create":"2026-04-23T15:19:43.801555+08:00","gmt_modified":"2026-04-23T15:19:43.801555+08:00"},{"id":84,"source_id":"5d7886d0dc99f81073a578b8aefdd375","target_id":"3124ad882ca2cf8fecb6b93696c7f233","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 72-77","gmt_create":"2026-04-23T15:19:43.801939+08:00","gmt_modified":"2026-04-23T15:19:43.801939+08:00"},{"id":85,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"17a97b4ac37fb67b8eda7ce2887c38e7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/app/layout.tsx#17-20","gmt_create":"2026-04-23T15:19:43.806186+08:00","gmt_modified":"2026-04-23T15:19:43.806186+08:00"},{"id":86,"source_id":"12e2c3d7b9a92dc44a6ee29b85e10df6","target_id":"17a97b4ac37fb67b8eda7ce2887c38e7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 17-20","gmt_create":"2026-04-23T15:19:43.80664+08:00","gmt_modified":"2026-04-23T15:19:43.80664+08:00"},{"id":87,"source_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","target_id":"84cba1e0d516e8c9859402fd5c1bc83c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/api.ts#3-40","gmt_create":"2026-04-23T15:19:43.815637+08:00","gmt_modified":"2026-04-23T15:19:43.815637+08:00"},{"id":88,"source_id":"5d7886d0dc99f81073a578b8aefdd375","target_id":"84cba1e0d516e8c9859402fd5c1bc83c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-40","gmt_create":"2026-04-23T15:19:43.817147+08:00","gmt_modified":"2026-04-23T15:19:43.817147+08:00"},{"id":89,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"9228ff67d4c757a85d9421b71f4b29f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/main.py","gmt_create":"2026-04-23T15:19:45.610941+08:00","gmt_modified":"2026-04-23T15:19:45.610941+08:00"},{"id":90,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"93022c8938ce318f167277cfa65c29a7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/auth.py","gmt_create":"2026-04-23T15:19:45.611315+08:00","gmt_modified":"2026-04-23T15:19:45.611315+08:00"},{"id":91,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"6b3d903205941aa9391dd90016e1102c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/queries.py","gmt_create":"2026-04-23T15:19:45.611638+08:00","gmt_modified":"2026-04-23T15:19:45.611638+08:00"},{"id":92,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T15:19:45.611969+08:00","gmt_modified":"2026-04-23T15:19:45.611969+08:00"},{"id":93,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"58901c94d975d87e652a4dc6c8dda656","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/reports.py","gmt_create":"2026-04-23T15:19:45.612281+08:00","gmt_modified":"2026-04-23T15:19:45.612282+08:00"},{"id":94,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"9d08667997a868fc07c9b4e328e44224","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/deps.py","gmt_create":"2026-04-23T15:19:45.612634+08:00","gmt_modified":"2026-04-23T15:19:45.612634+08:00"},{"id":95,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"e0c0ca66b8b81cf66e078a7ab162c07f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/schemas/auth.py","gmt_create":"2026-04-23T15:19:45.612995+08:00","gmt_modified":"2026-04-23T15:19:45.612995+08:00"},{"id":96,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"f301b79d833233ce39d350e82a71c938","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/schemas/query.py","gmt_create":"2026-04-23T15:19:45.613329+08:00","gmt_modified":"2026-04-23T15:19:45.613329+08:00"},{"id":97,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"1a3336b4af8a39a055e912724338580c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/schemas/citation.py","gmt_create":"2026-04-23T15:19:45.613646+08:00","gmt_modified":"2026-04-23T15:19:45.613647+08:00"},{"id":98,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"4d2f3847b7c10634733118b70a1aea0b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/auth.py","gmt_create":"2026-04-23T15:19:45.613962+08:00","gmt_modified":"2026-04-23T15:19:45.613962+08:00"},{"id":99,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"88d22de3b2a7419868e8ae19130d860c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/query.py","gmt_create":"2026-04-23T15:19:45.614276+08:00","gmt_modified":"2026-04-23T15:19:45.614276+08:00"},{"id":100,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"04e3926c080e795713bff683e7dc9d3e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/citation.py","gmt_create":"2026-04-23T15:19:45.614712+08:00","gmt_modified":"2026-04-23T15:19:45.614712+08:00"},{"id":101,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T15:19:45.61522+08:00","gmt_modified":"2026-04-23T15:19:45.61522+08:00"},{"id":102,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"c59f8c276697a070dffc581fe94d809c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/user.py","gmt_create":"2026-04-23T15:19:45.615619+08:00","gmt_modified":"2026-04-23T15:19:45.615619+08:00"},{"id":103,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T15:19:45.615972+08:00","gmt_modified":"2026-04-23T15:19:45.615972+08:00"},{"id":104,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"b4a81ef789630d0af6a8d50859d01bf3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/citation_record.py","gmt_create":"2026-04-23T15:19:45.616295+08:00","gmt_modified":"2026-04-23T15:19:45.616295+08:00"},{"id":105,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T15:19:45.616638+08:00","gmt_modified":"2026-04-23T15:19:45.616638+08:00"},{"id":106,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"b55a164add5a8fec2ef0e489f7234829","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#24-47","gmt_create":"2026-04-23T15:19:45.61708+08:00","gmt_modified":"2026-04-23T15:19:45.61708+08:00"},{"id":107,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"b55a164add5a8fec2ef0e489f7234829","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-47","gmt_create":"2026-04-23T15:19:45.617445+08:00","gmt_modified":"2026-04-23T15:19:45.617445+08:00"},{"id":108,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"16d619435094a63740357cd6317b52cb","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/auth.py#10","gmt_create":"2026-04-23T15:19:45.617883+08:00","gmt_modified":"2026-04-23T15:19:45.617883+08:00"},{"id":109,"source_id":"93022c8938ce318f167277cfa65c29a7","target_id":"16d619435094a63740357cd6317b52cb","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10","gmt_create":"2026-04-23T15:19:45.618177+08:00","gmt_modified":"2026-04-23T15:19:45.618177+08:00"},{"id":110,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"fa1ee5e3822128a37e9d03af74083392","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#12","gmt_create":"2026-04-23T15:19:45.61874+08:00","gmt_modified":"2026-04-23T15:19:45.61874+08:00"},{"id":111,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"fa1ee5e3822128a37e9d03af74083392","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12","gmt_create":"2026-04-23T15:19:45.619215+08:00","gmt_modified":"2026-04-23T15:19:45.619215+08:00"},{"id":112,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"7e908f05baccdfcf7f4a3ef3c9cd5c38","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#21","gmt_create":"2026-04-23T15:19:45.619736+08:00","gmt_modified":"2026-04-23T15:19:45.619736+08:00"},{"id":113,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"7e908f05baccdfcf7f4a3ef3c9cd5c38","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 21","gmt_create":"2026-04-23T15:19:45.620246+08:00","gmt_modified":"2026-04-23T15:19:45.620246+08:00"},{"id":114,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"ffe6df344be81bde3941ad8f0d77910b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/reports.py#13","gmt_create":"2026-04-23T15:19:45.622123+08:00","gmt_modified":"2026-04-23T15:19:45.622124+08:00"},{"id":115,"source_id":"58901c94d975d87e652a4dc6c8dda656","target_id":"ffe6df344be81bde3941ad8f0d77910b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13","gmt_create":"2026-04-23T15:19:45.623067+08:00","gmt_modified":"2026-04-23T15:19:45.623067+08:00"},{"id":116,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"c71fb14f8866e34c679c94a4e2432bc7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/deps.py#13","gmt_create":"2026-04-23T15:19:45.624216+08:00","gmt_modified":"2026-04-23T15:19:45.624217+08:00"},{"id":117,"source_id":"9d08667997a868fc07c9b4e328e44224","target_id":"c71fb14f8866e34c679c94a4e2432bc7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13","gmt_create":"2026-04-23T15:19:45.624846+08:00","gmt_modified":"2026-04-23T15:19:45.624846+08:00"},{"id":118,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"3c68f1581d2fd6aa845dd71111a9aa9d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#1-57","gmt_create":"2026-04-23T15:19:45.62545+08:00","gmt_modified":"2026-04-23T15:19:45.62545+08:00"},{"id":119,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"3c68f1581d2fd6aa845dd71111a9aa9d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-57","gmt_create":"2026-04-23T15:19:45.625985+08:00","gmt_modified":"2026-04-23T15:19:45.625985+08:00"},{"id":120,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"39afb05755a93800fd685af7274110cb","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#13-57","gmt_create":"2026-04-23T15:19:45.626544+08:00","gmt_modified":"2026-04-23T15:19:45.626544+08:00"},{"id":121,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"39afb05755a93800fd685af7274110cb","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-57","gmt_create":"2026-04-23T15:19:45.626917+08:00","gmt_modified":"2026-04-23T15:19:45.626917+08:00"},{"id":122,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"87a177f17800991e1ed1fb7be03abdb2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/auth.py#13-42","gmt_create":"2026-04-23T15:19:45.627469+08:00","gmt_modified":"2026-04-23T15:19:45.62747+08:00"},{"id":123,"source_id":"93022c8938ce318f167277cfa65c29a7","target_id":"87a177f17800991e1ed1fb7be03abdb2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-42","gmt_create":"2026-04-23T15:19:45.627772+08:00","gmt_modified":"2026-04-23T15:19:45.627772+08:00"},{"id":124,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"ae9de874df4a46f4197b6c157c25ec6e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#15-85","gmt_create":"2026-04-23T15:19:45.628226+08:00","gmt_modified":"2026-04-23T15:19:45.628226+08:00"},{"id":125,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"ae9de874df4a46f4197b6c157c25ec6e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 15-85","gmt_create":"2026-04-23T15:19:45.628538+08:00","gmt_modified":"2026-04-23T15:19:45.628538+08:00"},{"id":126,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"c066a8d4bffabed87a2e38ccad81c107","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#25-77","gmt_create":"2026-04-23T15:19:45.629104+08:00","gmt_modified":"2026-04-23T15:19:45.629104+08:00"},{"id":127,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"c066a8d4bffabed87a2e38ccad81c107","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-77","gmt_create":"2026-04-23T15:19:45.629465+08:00","gmt_modified":"2026-04-23T15:19:45.629465+08:00"},{"id":128,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"177c73dc4e71186d9eaa1157fc0fe97f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/reports.py#16-46","gmt_create":"2026-04-23T15:19:45.629913+08:00","gmt_modified":"2026-04-23T15:19:45.629913+08:00"},{"id":129,"source_id":"58901c94d975d87e652a4dc6c8dda656","target_id":"177c73dc4e71186d9eaa1157fc0fe97f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-46","gmt_create":"2026-04-23T15:19:45.630333+08:00","gmt_modified":"2026-04-23T15:19:45.630333+08:00"},{"id":130,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"a0be0cbddb559575861620b5b7579634","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#38-51","gmt_create":"2026-04-23T15:19:45.630817+08:00","gmt_modified":"2026-04-23T15:19:45.630817+08:00"},{"id":131,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"a0be0cbddb559575861620b5b7579634","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 38-51","gmt_create":"2026-04-23T15:19:45.631178+08:00","gmt_modified":"2026-04-23T15:19:45.631178+08:00"},{"id":132,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"bcdf50f6234651cb9863ab210e6473e5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/deps.py#16-42","gmt_create":"2026-04-23T15:19:45.631734+08:00","gmt_modified":"2026-04-23T15:19:45.631735+08:00"},{"id":133,"source_id":"9d08667997a868fc07c9b4e328e44224","target_id":"bcdf50f6234651cb9863ab210e6473e5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-42","gmt_create":"2026-04-23T15:19:45.632177+08:00","gmt_modified":"2026-04-23T15:19:45.632177+08:00"},{"id":134,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"6df0277c2486b148fa26c2682dbdaa4c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/auth.py#37-68","gmt_create":"2026-04-23T15:19:45.632731+08:00","gmt_modified":"2026-04-23T15:19:45.632731+08:00"},{"id":135,"source_id":"4d2f3847b7c10634733118b70a1aea0b","target_id":"6df0277c2486b148fa26c2682dbdaa4c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 37-68","gmt_create":"2026-04-23T15:19:45.63307+08:00","gmt_modified":"2026-04-23T15:19:45.63307+08:00"},{"id":136,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"5ea5f192d580031ffe57e1582b70c67e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#12-123","gmt_create":"2026-04-23T15:19:45.633593+08:00","gmt_modified":"2026-04-23T15:19:45.633593+08:00"},{"id":137,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"5ea5f192d580031ffe57e1582b70c67e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-123","gmt_create":"2026-04-23T15:19:45.633929+08:00","gmt_modified":"2026-04-23T15:19:45.633929+08:00"},{"id":138,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"fe4a793f16cd4e12b56253c0a6d53ae0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#24-359","gmt_create":"2026-04-23T15:19:45.634408+08:00","gmt_modified":"2026-04-23T15:19:45.634408+08:00"},{"id":139,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"fe4a793f16cd4e12b56253c0a6d53ae0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-359","gmt_create":"2026-04-23T15:19:45.634775+08:00","gmt_modified":"2026-04-23T15:19:45.634775+08:00"},{"id":140,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"9552bd8a528207f18e4f3a1696f26a55","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/auth.py#13-37","gmt_create":"2026-04-23T15:19:45.635318+08:00","gmt_modified":"2026-04-23T15:19:45.635318+08:00"},{"id":141,"source_id":"93022c8938ce318f167277cfa65c29a7","target_id":"9552bd8a528207f18e4f3a1696f26a55","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-37","gmt_create":"2026-04-23T15:19:45.635763+08:00","gmt_modified":"2026-04-23T15:19:45.635763+08:00"},{"id":142,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"4aad38dfc00a0877bd965c3d0b3c280c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/auth.py#7-34","gmt_create":"2026-04-23T15:19:45.638941+08:00","gmt_modified":"2026-04-23T15:19:45.638941+08:00"},{"id":143,"source_id":"e0c0ca66b8b81cf66e078a7ab162c07f","target_id":"4aad38dfc00a0877bd965c3d0b3c280c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 7-34","gmt_create":"2026-04-23T15:19:45.639659+08:00","gmt_modified":"2026-04-23T15:19:45.63966+08:00"},{"id":144,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"9b10dac7dbbb1327afc8a525bf4bd0c3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#45-81","gmt_create":"2026-04-23T15:19:45.641388+08:00","gmt_modified":"2026-04-23T15:19:45.641388+08:00"},{"id":145,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"9b10dac7dbbb1327afc8a525bf4bd0c3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 45-81","gmt_create":"2026-04-23T15:19:45.641965+08:00","gmt_modified":"2026-04-23T15:19:45.641965+08:00"},{"id":146,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"69118807690ef351a9de910414d5e676","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/query.py#11-94","gmt_create":"2026-04-23T15:19:45.642904+08:00","gmt_modified":"2026-04-23T15:19:45.642904+08:00"},{"id":147,"source_id":"f301b79d833233ce39d350e82a71c938","target_id":"69118807690ef351a9de910414d5e676","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-94","gmt_create":"2026-04-23T15:19:45.643362+08:00","gmt_modified":"2026-04-23T15:19:45.643362+08:00"},{"id":148,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"212d822d207a4c0bd7825bbf20e188e9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#59-77","gmt_create":"2026-04-23T15:19:45.644135+08:00","gmt_modified":"2026-04-23T15:19:45.644135+08:00"},{"id":149,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"212d822d207a4c0bd7825bbf20e188e9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 59-77","gmt_create":"2026-04-23T15:19:45.644457+08:00","gmt_modified":"2026-04-23T15:19:45.644457+08:00"},{"id":150,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"b0777c7da17be89abb333c81c0dcf349","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#204-261","gmt_create":"2026-04-23T15:19:45.644935+08:00","gmt_modified":"2026-04-23T15:19:45.644935+08:00"},{"id":151,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"b0777c7da17be89abb333c81c0dcf349","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 204-261","gmt_create":"2026-04-23T15:19:45.645243+08:00","gmt_modified":"2026-04-23T15:19:45.645243+08:00"},{"id":152,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"26288877e8e1f6c4ff5aca12610b0218","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/citation.py#7-50","gmt_create":"2026-04-23T15:19:45.646072+08:00","gmt_modified":"2026-04-23T15:19:45.646072+08:00"},{"id":153,"source_id":"1a3336b4af8a39a055e912724338580c","target_id":"26288877e8e1f6c4ff5aca12610b0218","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 7-50","gmt_create":"2026-04-23T15:19:45.646445+08:00","gmt_modified":"2026-04-23T15:19:45.646445+08:00"},{"id":154,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"dbf5f8a57778cf6363e834081f3d771c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#327-359","gmt_create":"2026-04-23T15:19:45.647596+08:00","gmt_modified":"2026-04-23T15:19:45.647596+08:00"},{"id":155,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"dbf5f8a57778cf6363e834081f3d771c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 327-359","gmt_create":"2026-04-23T15:19:45.647935+08:00","gmt_modified":"2026-04-23T15:19:45.647935+08:00"},{"id":156,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"56e46969bdb790a5e8f333184b878d6d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#11-41","gmt_create":"2026-04-23T15:19:45.64941+08:00","gmt_modified":"2026-04-23T15:19:45.64941+08:00"},{"id":157,"source_id":"c59f8c276697a070dffc581fe94d809c","target_id":"56e46969bdb790a5e8f333184b878d6d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-41","gmt_create":"2026-04-23T15:19:45.649807+08:00","gmt_modified":"2026-04-23T15:19:45.649807+08:00"},{"id":158,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"4fb8856be3a581fe8303d11b2284ca29","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#11-55","gmt_create":"2026-04-23T15:19:45.650287+08:00","gmt_modified":"2026-04-23T15:19:45.650287+08:00"},{"id":159,"source_id":"b74caccb06844efcdb14d8324cff65c2","target_id":"4fb8856be3a581fe8303d11b2284ca29","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-55","gmt_create":"2026-04-23T15:19:45.650642+08:00","gmt_modified":"2026-04-23T15:19:45.650642+08:00"},{"id":160,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"fd541971cebf8a7c167d717f5c5d1ff6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#11-42","gmt_create":"2026-04-23T15:19:45.651088+08:00","gmt_modified":"2026-04-23T15:19:45.651088+08:00"},{"id":161,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"fd541971cebf8a7c167d717f5c5d1ff6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-42","gmt_create":"2026-04-23T15:19:45.651529+08:00","gmt_modified":"2026-04-23T15:19:45.651529+08:00"},{"id":162,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"b84f46f058847733347974841f613688","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#11-39","gmt_create":"2026-04-23T15:19:45.652087+08:00","gmt_modified":"2026-04-23T15:19:45.652087+08:00"},{"id":163,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"b84f46f058847733347974841f613688","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-39","gmt_create":"2026-04-23T15:19:45.65251+08:00","gmt_modified":"2026-04-23T15:19:45.65251+08:00"},{"id":164,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"1a2657244414b5681afded9565a86422","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#35-40","gmt_create":"2026-04-23T15:19:45.653858+08:00","gmt_modified":"2026-04-23T15:19:45.653858+08:00"},{"id":165,"source_id":"c59f8c276697a070dffc581fe94d809c","target_id":"1a2657244414b5681afded9565a86422","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 35-40","gmt_create":"2026-04-23T15:19:45.655814+08:00","gmt_modified":"2026-04-23T15:19:45.655814+08:00"},{"id":166,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"acd5a29be2bdd4ae251e10ca266ffe13","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#43-48","gmt_create":"2026-04-23T15:19:45.657411+08:00","gmt_modified":"2026-04-23T15:19:45.657411+08:00"},{"id":167,"source_id":"b74caccb06844efcdb14d8324cff65c2","target_id":"acd5a29be2bdd4ae251e10ca266ffe13","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 43-48","gmt_create":"2026-04-23T15:19:45.657941+08:00","gmt_modified":"2026-04-23T15:19:45.657942+08:00"},{"id":168,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"27a5e2dd1d197b2e3a45be41c57a6183","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#35","gmt_create":"2026-04-23T15:19:45.658596+08:00","gmt_modified":"2026-04-23T15:19:45.658596+08:00"},{"id":169,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"27a5e2dd1d197b2e3a45be41c57a6183","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 35","gmt_create":"2026-04-23T15:19:45.658966+08:00","gmt_modified":"2026-04-23T15:19:45.658966+08:00"},{"id":170,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"c43e8fc0c04c5ed2db7798d99c8c77b8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#34","gmt_create":"2026-04-23T15:19:45.659429+08:00","gmt_modified":"2026-04-23T15:19:45.659429+08:00"},{"id":171,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"c43e8fc0c04c5ed2db7798d99c8c77b8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 34","gmt_create":"2026-04-23T15:19:45.659763+08:00","gmt_modified":"2026-04-23T15:19:45.659763+08:00"},{"id":172,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"8868ab86034eecf40e80347ef8cbdebd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/auth.py#26-30","gmt_create":"2026-04-23T15:19:45.660181+08:00","gmt_modified":"2026-04-23T15:19:45.660181+08:00"},{"id":173,"source_id":"93022c8938ce318f167277cfa65c29a7","target_id":"8868ab86034eecf40e80347ef8cbdebd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 26-30","gmt_create":"2026-04-23T15:19:45.660491+08:00","gmt_modified":"2026-04-23T15:19:45.660491+08:00"},{"id":174,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"a50f983ec39bac67dff5df80f6dad837","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#59-60","gmt_create":"2026-04-23T15:19:45.660943+08:00","gmt_modified":"2026-04-23T15:19:45.660943+08:00"},{"id":175,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"a50f983ec39bac67dff5df80f6dad837","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 59-60","gmt_create":"2026-04-23T15:19:45.661271+08:00","gmt_modified":"2026-04-23T15:19:45.661271+08:00"},{"id":176,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"55f1628f1ab6f323710e367e12146b1a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#67-71","gmt_create":"2026-04-23T15:19:45.661702+08:00","gmt_modified":"2026-04-23T15:19:45.661702+08:00"},{"id":177,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"55f1628f1ab6f323710e367e12146b1a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 67-71","gmt_create":"2026-04-23T15:19:45.662055+08:00","gmt_modified":"2026-04-23T15:19:45.662055+08:00"},{"id":178,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"6ef6d32f97d7b50b7a4da541137423c0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/reports.py#23-27","gmt_create":"2026-04-23T15:19:45.662628+08:00","gmt_modified":"2026-04-23T15:19:45.662628+08:00"},{"id":179,"source_id":"58901c94d975d87e652a4dc6c8dda656","target_id":"6ef6d32f97d7b50b7a4da541137423c0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-27","gmt_create":"2026-04-23T15:19:45.662999+08:00","gmt_modified":"2026-04-23T15:19:45.662999+08:00"},{"id":180,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/scheduler.py","gmt_create":"2026-04-23T15:20:08.989793+08:00","gmt_modified":"2026-04-23T15:20:08.989793+08:00"},{"id":181,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"74040de652d5e57f548bb5c4adc3e1a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/citation_engine.py","gmt_create":"2026-04-23T15:20:08.990186+08:00","gmt_modified":"2026-04-23T15:20:08.990186+08:00"},{"id":182,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"8f973791233c698b3e64a4fb28a93d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/kimi.py","gmt_create":"2026-04-23T15:20:08.990539+08:00","gmt_modified":"2026-04-23T15:20:08.990539+08:00"},{"id":183,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"f642fc1c2f34e15572d9d98aa6c18813","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-23T15:20:08.990851+08:00","gmt_modified":"2026-04-23T15:20:08.990851+08:00"},{"id":184,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"a16cf42e9559523c4f96ca4c79f9488d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/base.py","gmt_create":"2026-04-23T15:20:08.991166+08:00","gmt_modified":"2026-04-23T15:20:08.991166+08:00"},{"id":185,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T15:20:08.991471+08:00","gmt_modified":"2026-04-23T15:20:08.991472+08:00"},{"id":186,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T15:20:08.991772+08:00","gmt_modified":"2026-04-23T15:20:08.991772+08:00"},{"id":187,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"b4a81ef789630d0af6a8d50859d01bf3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/citation_record.py","gmt_create":"2026-04-23T15:20:08.992186+08:00","gmt_modified":"2026-04-23T15:20:08.992186+08:00"},{"id":188,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"88d22de3b2a7419868e8ae19130d860c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/query.py","gmt_create":"2026-04-23T15:20:08.992542+08:00","gmt_modified":"2026-04-23T15:20:08.992542+08:00"},{"id":189,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"6b3d903205941aa9391dd90016e1102c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/queries.py","gmt_create":"2026-04-23T15:20:08.992879+08:00","gmt_modified":"2026-04-23T15:20:08.992879+08:00"},{"id":190,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"b0c428683c8a3e6922d90ca0d8c2736d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/database.py","gmt_create":"2026-04-23T15:20:08.997487+08:00","gmt_modified":"2026-04-23T15:20:08.997487+08:00"},{"id":191,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T15:20:08.998695+08:00","gmt_modified":"2026-04-23T15:20:08.998696+08:00"},{"id":192,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"9228ff67d4c757a85d9421b71f4b29f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/main.py","gmt_create":"2026-04-23T15:20:08.999402+08:00","gmt_modified":"2026-04-23T15:20:08.999402+08:00"},{"id":193,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"b2f0d46a31a5441594f2e777365fc156","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_scheduler.py","gmt_create":"2026-04-23T15:20:09.000067+08:00","gmt_modified":"2026-04-23T15:20:09.000067+08:00"},{"id":194,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"0613e76b9679be7f998fb8fd8056e686","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_queries.py","gmt_create":"2026-04-23T15:20:09.000413+08:00","gmt_modified":"2026-04-23T15:20:09.000413+08:00"},{"id":195,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"096856da621e23e78422a15e2bfce1f1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#13-22","gmt_create":"2026-04-23T15:20:09.000893+08:00","gmt_modified":"2026-04-23T15:20:09.000893+08:00"},{"id":196,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"096856da621e23e78422a15e2bfce1f1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-22","gmt_create":"2026-04-23T15:20:09.00176+08:00","gmt_modified":"2026-04-23T15:20:09.00176+08:00"},{"id":197,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"e230904202fcf7a861c6f49b84f9f863","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#25-95","gmt_create":"2026-04-23T15:20:09.003004+08:00","gmt_modified":"2026-04-23T15:20:09.003004+08:00"},{"id":198,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"e230904202fcf7a861c6f49b84f9f863","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-95","gmt_create":"2026-04-23T15:20:09.003771+08:00","gmt_modified":"2026-04-23T15:20:09.003771+08:00"},{"id":199,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"309607c54b12a6340edc086ffb4737c9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#148-309","gmt_create":"2026-04-23T15:20:09.005186+08:00","gmt_modified":"2026-04-23T15:20:09.005186+08:00"},{"id":200,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"309607c54b12a6340edc086ffb4737c9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 148-309","gmt_create":"2026-04-23T15:20:09.00622+08:00","gmt_modified":"2026-04-23T15:20:09.00622+08:00"},{"id":201,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"4fb8856be3a581fe8303d11b2284ca29","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#11-55","gmt_create":"2026-04-23T15:20:09.006997+08:00","gmt_modified":"2026-04-23T15:20:09.006997+08:00"},{"id":202,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"b84f46f058847733347974841f613688","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#11-39","gmt_create":"2026-04-23T15:20:09.007995+08:00","gmt_modified":"2026-04-23T15:20:09.007995+08:00"},{"id":203,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"fd541971cebf8a7c167d717f5c5d1ff6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#11-42","gmt_create":"2026-04-23T15:20:09.009222+08:00","gmt_modified":"2026-04-23T15:20:09.009222+08:00"},{"id":204,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"d7c319a04abbc6704da53107e07dd8e7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#12-130","gmt_create":"2026-04-23T15:20:09.010245+08:00","gmt_modified":"2026-04-23T15:20:09.010245+08:00"},{"id":205,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"d7c319a04abbc6704da53107e07dd8e7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-130","gmt_create":"2026-04-23T15:20:09.011044+08:00","gmt_modified":"2026-04-23T15:20:09.011044+08:00"},{"id":206,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"9bfc041fe426da2eb78353827e8d9163","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#1-29","gmt_create":"2026-04-23T15:20:09.012195+08:00","gmt_modified":"2026-04-23T15:20:09.012195+08:00"},{"id":207,"source_id":"b0c428683c8a3e6922d90ca0d8c2736d","target_id":"9bfc041fe426da2eb78353827e8d9163","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-29","gmt_create":"2026-04-23T15:20:09.01291+08:00","gmt_modified":"2026-04-23T15:20:09.012911+08:00"},{"id":208,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"ad67863041d9eea2b0fb542b5aa33aca","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#4-18","gmt_create":"2026-04-23T15:20:09.013886+08:00","gmt_modified":"2026-04-23T15:20:09.013886+08:00"},{"id":209,"source_id":"a16cf42e9559523c4f96ca4c79f9488d","target_id":"ad67863041d9eea2b0fb542b5aa33aca","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 4-18","gmt_create":"2026-04-23T15:20:09.014746+08:00","gmt_modified":"2026-04-23T15:20:09.014746+08:00"},{"id":210,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"eecf9581dbaa0a515cf11514175e7ef9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#11-206","gmt_create":"2026-04-23T15:20:09.015594+08:00","gmt_modified":"2026-04-23T15:20:09.015594+08:00"},{"id":211,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"eecf9581dbaa0a515cf11514175e7ef9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-206","gmt_create":"2026-04-23T15:20:09.016313+08:00","gmt_modified":"2026-04-23T15:20:09.016313+08:00"},{"id":212,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"5563c29185326a59be61ee0a6eec4463","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#11-205","gmt_create":"2026-04-23T15:20:09.017693+08:00","gmt_modified":"2026-04-23T15:20:09.017693+08:00"},{"id":213,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"5563c29185326a59be61ee0a6eec4463","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-205","gmt_create":"2026-04-23T15:20:09.018896+08:00","gmt_modified":"2026-04-23T15:20:09.018896+08:00"},{"id":214,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"2d35e1345d25020f8e7ac1318db06f7b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#30-90","gmt_create":"2026-04-23T15:20:09.025147+08:00","gmt_modified":"2026-04-23T15:20:09.025147+08:00"},{"id":215,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"2d35e1345d25020f8e7ac1318db06f7b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 30-90","gmt_create":"2026-04-23T15:20:09.02579+08:00","gmt_modified":"2026-04-23T15:20:09.02579+08:00"},{"id":216,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"91bda120c0ab69e0e7103a1c89c82424","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#95-172","gmt_create":"2026-04-23T15:20:09.026853+08:00","gmt_modified":"2026-04-23T15:20:09.026853+08:00"},{"id":217,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"91bda120c0ab69e0e7103a1c89c82424","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 95-172","gmt_create":"2026-04-23T15:20:09.027566+08:00","gmt_modified":"2026-04-23T15:20:09.027566+08:00"},{"id":218,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"160b5326537d25444c40a459a01e79c6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#159-234","gmt_create":"2026-04-23T15:20:09.028202+08:00","gmt_modified":"2026-04-23T15:20:09.028202+08:00"},{"id":219,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"160b5326537d25444c40a459a01e79c6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 159-234","gmt_create":"2026-04-23T15:20:09.028744+08:00","gmt_modified":"2026-04-23T15:20:09.028744+08:00"},{"id":220,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"6712051c987e10a7c26b089063367398","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#24-31","gmt_create":"2026-04-23T15:20:09.029494+08:00","gmt_modified":"2026-04-23T15:20:09.029494+08:00"},{"id":221,"source_id":"b74caccb06844efcdb14d8324cff65c2","target_id":"6712051c987e10a7c26b089063367398","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-31","gmt_create":"2026-04-23T15:20:09.030084+08:00","gmt_modified":"2026-04-23T15:20:09.030084+08:00"},{"id":222,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"ac5982063da5f04315f3e82a0d653902","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#24-32","gmt_create":"2026-04-23T15:20:09.030828+08:00","gmt_modified":"2026-04-23T15:20:09.030828+08:00"},{"id":223,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"ac5982063da5f04315f3e82a0d653902","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-32","gmt_create":"2026-04-23T15:20:09.031632+08:00","gmt_modified":"2026-04-23T15:20:09.031632+08:00"},{"id":224,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"06ed912983db33bb8aca162fed68282b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#24-29","gmt_create":"2026-04-23T15:20:09.032417+08:00","gmt_modified":"2026-04-23T15:20:09.032417+08:00"},{"id":225,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"06ed912983db33bb8aca162fed68282b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-29","gmt_create":"2026-04-23T15:20:09.032976+08:00","gmt_modified":"2026-04-23T15:20:09.032976+08:00"},{"id":226,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"b624be78e3bffd876e403cff2557b088","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#19-120","gmt_create":"2026-04-23T15:20:09.037331+08:00","gmt_modified":"2026-04-23T15:20:09.037331+08:00"},{"id":227,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"b624be78e3bffd876e403cff2557b088","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 19-120","gmt_create":"2026-04-23T15:20:09.038413+08:00","gmt_modified":"2026-04-23T15:20:09.038413+08:00"},{"id":228,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"40d0b169aad65c8bb38077deb052fc72","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#33-125","gmt_create":"2026-04-23T15:20:09.040261+08:00","gmt_modified":"2026-04-23T15:20:09.040261+08:00"},{"id":229,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"40d0b169aad65c8bb38077deb052fc72","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-125","gmt_create":"2026-04-23T15:20:09.04098+08:00","gmt_modified":"2026-04-23T15:20:09.04098+08:00"},{"id":230,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"8b5af998852596e1e08b0e0216bc4b93","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#33-124","gmt_create":"2026-04-23T15:20:09.041526+08:00","gmt_modified":"2026-04-23T15:20:09.041526+08:00"},{"id":231,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"8b5af998852596e1e08b0e0216bc4b93","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-124","gmt_create":"2026-04-23T15:20:09.041834+08:00","gmt_modified":"2026-04-23T15:20:09.041834+08:00"},{"id":232,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"fe70b1fef9f36e73d26d84987e927c7a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#15-86","gmt_create":"2026-04-23T15:20:09.04598+08:00","gmt_modified":"2026-04-23T15:20:09.04598+08:00"},{"id":233,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"fe70b1fef9f36e73d26d84987e927c7a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 15-86","gmt_create":"2026-04-23T15:20:09.046352+08:00","gmt_modified":"2026-04-23T15:20:09.046352+08:00"},{"id":234,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"e1d2b027678118df4d0a50ce9269271d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#42-90","gmt_create":"2026-04-23T15:20:09.050041+08:00","gmt_modified":"2026-04-23T15:20:09.050041+08:00"},{"id":235,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"e1d2b027678118df4d0a50ce9269271d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 42-90","gmt_create":"2026-04-23T15:20:09.050351+08:00","gmt_modified":"2026-04-23T15:20:09.050351+08:00"},{"id":236,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"e79301a4bc26aa6b49f3f52c3182c3f9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#175-234","gmt_create":"2026-04-23T15:20:09.051815+08:00","gmt_modified":"2026-04-23T15:20:09.051815+08:00"},{"id":237,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"e79301a4bc26aa6b49f3f52c3182c3f9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 175-234","gmt_create":"2026-04-23T15:20:09.052165+08:00","gmt_modified":"2026-04-23T15:20:09.052166+08:00"},{"id":238,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"1e85186eded8743ff5f231df4aa6df3f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#21-48","gmt_create":"2026-04-23T15:20:09.052615+08:00","gmt_modified":"2026-04-23T15:20:09.052615+08:00"},{"id":239,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"1e85186eded8743ff5f231df4aa6df3f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 21-48","gmt_create":"2026-04-23T15:20:09.052947+08:00","gmt_modified":"2026-04-23T15:20:09.052947+08:00"},{"id":240,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"e2b1718570fb714b2f4342221898ab30","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#21-48","gmt_create":"2026-04-23T15:20:09.053449+08:00","gmt_modified":"2026-04-23T15:20:09.053449+08:00"},{"id":241,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"e2b1718570fb714b2f4342221898ab30","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 21-48","gmt_create":"2026-04-23T15:20:09.053892+08:00","gmt_modified":"2026-04-23T15:20:09.053892+08:00"},{"id":242,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"e4a49039dae40b7433896c81737fcf8c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#7-14","gmt_create":"2026-04-23T15:20:09.05437+08:00","gmt_modified":"2026-04-23T15:20:09.05437+08:00"},{"id":243,"source_id":"9ff19022ef915615911280e3c49ed44b","target_id":"e4a49039dae40b7433896c81737fcf8c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 7-14","gmt_create":"2026-04-23T15:20:09.054841+08:00","gmt_modified":"2026-04-23T15:20:09.054841+08:00"},{"id":244,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"2ee31d68c409e96e951f6cfa7027bca7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#24-42","gmt_create":"2026-04-23T15:20:09.055328+08:00","gmt_modified":"2026-04-23T15:20:09.055328+08:00"},{"id":245,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"2ee31d68c409e96e951f6cfa7027bca7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-42","gmt_create":"2026-04-23T15:20:09.055781+08:00","gmt_modified":"2026-04-23T15:20:09.055781+08:00"},{"id":246,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"79d6e169e36e6b7493898b5f863e07dc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#152-157","gmt_create":"2026-04-23T15:20:09.056898+08:00","gmt_modified":"2026-04-23T15:20:09.056898+08:00"},{"id":247,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"79d6e169e36e6b7493898b5f863e07dc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 152-157","gmt_create":"2026-04-23T15:20:09.057188+08:00","gmt_modified":"2026-04-23T15:20:09.057188+08:00"},{"id":248,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"1552315d5fb9f6d7aba5f7e8fa93a975","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#6-10","gmt_create":"2026-04-23T15:20:09.058217+08:00","gmt_modified":"2026-04-23T15:20:09.058217+08:00"},{"id":249,"source_id":"b0c428683c8a3e6922d90ca0d8c2736d","target_id":"1552315d5fb9f6d7aba5f7e8fa93a975","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 6-10","gmt_create":"2026-04-23T15:20:09.058503+08:00","gmt_modified":"2026-04-23T15:20:09.058503+08:00"},{"id":250,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"599cca7536cae4a7e0ae93043c476a7f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_queries.py#10-154","gmt_create":"2026-04-23T15:20:09.058947+08:00","gmt_modified":"2026-04-23T15:20:09.058947+08:00"},{"id":251,"source_id":"0613e76b9679be7f998fb8fd8056e686","target_id":"599cca7536cae4a7e0ae93043c476a7f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-154","gmt_create":"2026-04-23T15:20:09.059242+08:00","gmt_modified":"2026-04-23T15:20:09.059242+08:00"},{"id":252,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"2ec3d45edd6221e0cedf7f8887fe090d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_scheduler.py#17-123","gmt_create":"2026-04-23T15:20:09.059776+08:00","gmt_modified":"2026-04-23T15:20:09.059776+08:00"},{"id":253,"source_id":"b2f0d46a31a5441594f2e777365fc156","target_id":"2ec3d45edd6221e0cedf7f8887fe090d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 17-123","gmt_create":"2026-04-23T15:20:09.060064+08:00","gmt_modified":"2026-04-23T15:20:09.060064+08:00"},{"id":254,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"99fe1b288fd41daa86c2dfbab819abf0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/__init__.py","gmt_create":"2026-04-23T15:21:46.707277+08:00","gmt_modified":"2026-04-23T15:21:46.707277+08:00"},{"id":255,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"c59f8c276697a070dffc581fe94d809c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/user.py","gmt_create":"2026-04-23T15:21:46.707879+08:00","gmt_modified":"2026-04-23T15:21:46.707879+08:00"},{"id":256,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T15:21:46.708322+08:00","gmt_modified":"2026-04-23T15:21:46.708322+08:00"},{"id":257,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T15:21:46.708702+08:00","gmt_modified":"2026-04-23T15:21:46.708702+08:00"},{"id":258,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"b4a81ef789630d0af6a8d50859d01bf3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/citation_record.py","gmt_create":"2026-04-23T15:21:46.709093+08:00","gmt_modified":"2026-04-23T15:21:46.709093+08:00"},{"id":259,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"bceca00463fe55d3bcafda728f97f723","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/subscription.py","gmt_create":"2026-04-23T15:21:46.709712+08:00","gmt_modified":"2026-04-23T15:21:46.709713+08:00"},{"id":260,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"b0c428683c8a3e6922d90ca0d8c2736d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/database.py","gmt_create":"2026-04-23T15:21:46.710101+08:00","gmt_modified":"2026-04-23T15:21:46.710101+08:00"},{"id":261,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"d4f95fcf50683b5bf6167c7d2a6b126d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/alembic/versions/488d0bd5ab01_initial_migration.py","gmt_create":"2026-04-23T15:21:46.710429+08:00","gmt_modified":"2026-04-23T15:21:46.710429+08:00"},{"id":262,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"f301b79d833233ce39d350e82a71c938","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/schemas/query.py","gmt_create":"2026-04-23T15:21:46.710829+08:00","gmt_modified":"2026-04-23T15:21:46.710829+08:00"},{"id":263,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"1a3336b4af8a39a055e912724338580c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/schemas/citation.py","gmt_create":"2026-04-23T15:21:46.711181+08:00","gmt_modified":"2026-04-23T15:21:46.711181+08:00"},{"id":264,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"88d22de3b2a7419868e8ae19130d860c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/query.py","gmt_create":"2026-04-23T15:21:46.711568+08:00","gmt_modified":"2026-04-23T15:21:46.711568+08:00"},{"id":265,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"6b3d903205941aa9391dd90016e1102c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/queries.py","gmt_create":"2026-04-23T15:21:46.711965+08:00","gmt_modified":"2026-04-23T15:21:46.711965+08:00"},{"id":266,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"04e3926c080e795713bff683e7dc9d3e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/citation.py","gmt_create":"2026-04-23T15:21:46.712296+08:00","gmt_modified":"2026-04-23T15:21:46.712296+08:00"},{"id":267,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T15:21:46.712792+08:00","gmt_modified":"2026-04-23T15:21:46.712792+08:00"},{"id":268,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T15:21:46.713121+08:00","gmt_modified":"2026-04-23T15:21:46.713121+08:00"},{"id":269,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"9d08667997a868fc07c9b4e328e44224","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/deps.py","gmt_create":"2026-04-23T15:21:46.713538+08:00","gmt_modified":"2026-04-23T15:21:46.713538+08:00"},{"id":270,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"56e46969bdb790a5e8f333184b878d6d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#11-41","gmt_create":"2026-04-23T15:21:46.71408+08:00","gmt_modified":"2026-04-23T15:21:46.71408+08:00"},{"id":271,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"4fb8856be3a581fe8303d11b2284ca29","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#11-55","gmt_create":"2026-04-23T15:21:46.714746+08:00","gmt_modified":"2026-04-23T15:21:46.714746+08:00"},{"id":272,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"b84f46f058847733347974841f613688","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#11-39","gmt_create":"2026-04-23T15:21:46.715399+08:00","gmt_modified":"2026-04-23T15:21:46.7154+08:00"},{"id":273,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"fd541971cebf8a7c167d717f5c5d1ff6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#11-42","gmt_create":"2026-04-23T15:21:46.716178+08:00","gmt_modified":"2026-04-23T15:21:46.716178+08:00"},{"id":274,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"4d323bf0aaf4078f09726dc0890e5955","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/subscription.py#11-37","gmt_create":"2026-04-23T15:21:46.717324+08:00","gmt_modified":"2026-04-23T15:21:46.717324+08:00"},{"id":275,"source_id":"bceca00463fe55d3bcafda728f97f723","target_id":"4d323bf0aaf4078f09726dc0890e5955","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-37","gmt_create":"2026-04-23T15:21:46.718049+08:00","gmt_modified":"2026-04-23T15:21:46.71805+08:00"},{"id":276,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"9bfc041fe426da2eb78353827e8d9163","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#1-29","gmt_create":"2026-04-23T15:21:46.718816+08:00","gmt_modified":"2026-04-23T15:21:46.718816+08:00"},{"id":277,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"4cef9e740b6feb68c6bd22b660c47320","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#1-123","gmt_create":"2026-04-23T15:21:46.719468+08:00","gmt_modified":"2026-04-23T15:21:46.719468+08:00"},{"id":278,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"4cef9e740b6feb68c6bd22b660c47320","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-123","gmt_create":"2026-04-23T15:21:46.720008+08:00","gmt_modified":"2026-04-23T15:21:46.720008+08:00"},{"id":279,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"121203f7f9f539ffb1456c3f5cdfd842","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#1-359","gmt_create":"2026-04-23T15:21:46.720615+08:00","gmt_modified":"2026-04-23T15:21:46.720615+08:00"},{"id":280,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"121203f7f9f539ffb1456c3f5cdfd842","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-359","gmt_create":"2026-04-23T15:21:46.721095+08:00","gmt_modified":"2026-04-23T15:21:46.721095+08:00"},{"id":281,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"10d1e37bdc9f353c189b7a2fe79dc85e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#1-86","gmt_create":"2026-04-23T15:21:46.721634+08:00","gmt_modified":"2026-04-23T15:21:46.721634+08:00"},{"id":282,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"10d1e37bdc9f353c189b7a2fe79dc85e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-86","gmt_create":"2026-04-23T15:21:46.722019+08:00","gmt_modified":"2026-04-23T15:21:46.722019+08:00"},{"id":283,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"cbd0101fa84d957bcb1baaa623c6b31c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#1-78","gmt_create":"2026-04-23T15:21:46.722621+08:00","gmt_modified":"2026-04-23T15:21:46.722621+08:00"},{"id":284,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"cbd0101fa84d957bcb1baaa623c6b31c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-78","gmt_create":"2026-04-23T15:21:46.723064+08:00","gmt_modified":"2026-04-23T15:21:46.723064+08:00"},{"id":285,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"afe4138895492c26aac5c0120ef46cd8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/__init__.py#1-14","gmt_create":"2026-04-23T15:21:46.72357+08:00","gmt_modified":"2026-04-23T15:21:46.72357+08:00"},{"id":286,"source_id":"99fe1b288fd41daa86c2dfbab819abf0","target_id":"afe4138895492c26aac5c0120ef46cd8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-14","gmt_create":"2026-04-23T15:21:46.723873+08:00","gmt_modified":"2026-04-23T15:21:46.723873+08:00"},{"id":287,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"4d11ddf7abb8076d81b30c4315786f9a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#21-128","gmt_create":"2026-04-23T15:21:46.726415+08:00","gmt_modified":"2026-04-23T15:21:46.726416+08:00"},{"id":288,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"4d11ddf7abb8076d81b30c4315786f9a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 21-128","gmt_create":"2026-04-23T15:21:46.726829+08:00","gmt_modified":"2026-04-23T15:21:46.726829+08:00"},{"id":289,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"e454b4a54500bd81e7599e6ec97bf12b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#23-37","gmt_create":"2026-04-23T15:21:46.735019+08:00","gmt_modified":"2026-04-23T15:21:46.735019+08:00"},{"id":290,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"e454b4a54500bd81e7599e6ec97bf12b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-37","gmt_create":"2026-04-23T15:21:46.735734+08:00","gmt_modified":"2026-04-23T15:21:46.735734+08:00"},{"id":291,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"1965adf7cfc65447e3c1ae21fbf6d1c5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#39-59","gmt_create":"2026-04-23T15:21:46.737007+08:00","gmt_modified":"2026-04-23T15:21:46.737007+08:00"},{"id":292,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"1965adf7cfc65447e3c1ae21fbf6d1c5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 39-59","gmt_create":"2026-04-23T15:21:46.744358+08:00","gmt_modified":"2026-04-23T15:21:46.744358+08:00"},{"id":293,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"c730faefb34bb87c40c5f636b4ff7f41","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#80-94","gmt_create":"2026-04-23T15:21:46.747533+08:00","gmt_modified":"2026-04-23T15:21:46.747534+08:00"},{"id":294,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"c730faefb34bb87c40c5f636b4ff7f41","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 80-94","gmt_create":"2026-04-23T15:21:46.748811+08:00","gmt_modified":"2026-04-23T15:21:46.748811+08:00"},{"id":295,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"b9978c3eccea3ef566b003216e5047af","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#61-78","gmt_create":"2026-04-23T15:21:46.751629+08:00","gmt_modified":"2026-04-23T15:21:46.751629+08:00"},{"id":296,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"b9978c3eccea3ef566b003216e5047af","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 61-78","gmt_create":"2026-04-23T15:21:46.752497+08:00","gmt_modified":"2026-04-23T15:21:46.752497+08:00"},{"id":297,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"eb6ff4361d7413b57f1f70b1ec2f0c94","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#96-111","gmt_create":"2026-04-23T15:21:46.753732+08:00","gmt_modified":"2026-04-23T15:21:46.753732+08:00"},{"id":298,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"eb6ff4361d7413b57f1f70b1ec2f0c94","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-111","gmt_create":"2026-04-23T15:21:46.754523+08:00","gmt_modified":"2026-04-23T15:21:46.754523+08:00"},{"id":299,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"1a2657244414b5681afded9565a86422","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#35-40","gmt_create":"2026-04-23T15:21:46.755683+08:00","gmt_modified":"2026-04-23T15:21:46.755683+08:00"},{"id":300,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"acd5a29be2bdd4ae251e10ca266ffe13","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#43-48","gmt_create":"2026-04-23T15:21:46.756979+08:00","gmt_modified":"2026-04-23T15:21:46.756979+08:00"},{"id":301,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"f6c9f1b4e8646c366a31426a4537675d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#36-38","gmt_create":"2026-04-23T15:21:46.75809+08:00","gmt_modified":"2026-04-23T15:21:46.75809+08:00"},{"id":302,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"f6c9f1b4e8646c366a31426a4537675d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 36-38","gmt_create":"2026-04-23T15:21:46.759234+08:00","gmt_modified":"2026-04-23T15:21:46.759234+08:00"},{"id":303,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"a2adbf02c71e4eb2cf1f120e1a2ff517","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#37-41","gmt_create":"2026-04-23T15:21:46.760054+08:00","gmt_modified":"2026-04-23T15:21:46.760054+08:00"},{"id":304,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"a2adbf02c71e4eb2cf1f120e1a2ff517","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 37-41","gmt_create":"2026-04-23T15:21:46.761257+08:00","gmt_modified":"2026-04-23T15:21:46.761257+08:00"},{"id":305,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"69118807690ef351a9de910414d5e676","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/query.py#11-94","gmt_create":"2026-04-23T15:21:46.76204+08:00","gmt_modified":"2026-04-23T15:21:46.762041+08:00"},{"id":306,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"26288877e8e1f6c4ff5aca12610b0218","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/citation.py#7-50","gmt_create":"2026-04-23T15:21:46.763512+08:00","gmt_modified":"2026-04-23T15:21:46.763512+08:00"},{"id":307,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"0907fc2974ec31c23aaaef02076700a1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#25-33","gmt_create":"2026-04-23T15:21:46.764956+08:00","gmt_modified":"2026-04-23T15:21:46.764956+08:00"},{"id":308,"source_id":"c59f8c276697a070dffc581fe94d809c","target_id":"0907fc2974ec31c23aaaef02076700a1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-33","gmt_create":"2026-04-23T15:21:46.766604+08:00","gmt_modified":"2026-04-23T15:21:46.766605+08:00"},{"id":309,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"842f74e2cc054608242e93fbefd96b45","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#32-40","gmt_create":"2026-04-23T15:21:46.767787+08:00","gmt_modified":"2026-04-23T15:21:46.767787+08:00"},{"id":310,"source_id":"b74caccb06844efcdb14d8324cff65c2","target_id":"842f74e2cc054608242e93fbefd96b45","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 32-40","gmt_create":"2026-04-23T15:21:46.769407+08:00","gmt_modified":"2026-04-23T15:21:46.769407+08:00"},{"id":311,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"aed9e839038c45e6ce2023c4e05adb76","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#27-32","gmt_create":"2026-04-23T15:21:46.770612+08:00","gmt_modified":"2026-04-23T15:21:46.770612+08:00"},{"id":312,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"aed9e839038c45e6ce2023c4e05adb76","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 27-32","gmt_create":"2026-04-23T15:21:46.771344+08:00","gmt_modified":"2026-04-23T15:21:46.771345+08:00"},{"id":313,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"2181318c993526c86458f5eef134aed6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#62-77","gmt_create":"2026-04-23T15:21:46.77237+08:00","gmt_modified":"2026-04-23T15:21:46.77237+08:00"},{"id":314,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"2181318c993526c86458f5eef134aed6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 62-77","gmt_create":"2026-04-23T15:21:46.773284+08:00","gmt_modified":"2026-04-23T15:21:46.773284+08:00"},{"id":315,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"a817488dc968d761a8977fb5bb8d01a2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#45-129","gmt_create":"2026-04-23T15:21:46.774203+08:00","gmt_modified":"2026-04-23T15:21:46.774203+08:00"},{"id":316,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"a817488dc968d761a8977fb5bb8d01a2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 45-129","gmt_create":"2026-04-23T15:21:46.775081+08:00","gmt_modified":"2026-04-23T15:21:46.775081+08:00"},{"id":317,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"fe70b1fef9f36e73d26d84987e927c7a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#15-86","gmt_create":"2026-04-23T15:21:46.775898+08:00","gmt_modified":"2026-04-23T15:21:46.775898+08:00"},{"id":318,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"d20fc729a5d3986b1c077f9e07ece9c4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#7","gmt_create":"2026-04-23T15:21:46.777494+08:00","gmt_modified":"2026-04-23T15:21:46.777494+08:00"},{"id":319,"source_id":"9ff19022ef915615911280e3c49ed44b","target_id":"d20fc729a5d3986b1c077f9e07ece9c4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 7","gmt_create":"2026-04-23T15:21:46.778103+08:00","gmt_modified":"2026-04-23T15:21:46.778103+08:00"},{"id":320,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"ea655c6d147bc98beb42955d437260cc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#1-23","gmt_create":"2026-04-23T15:21:46.779313+08:00","gmt_modified":"2026-04-23T15:21:46.779314+08:00"},{"id":321,"source_id":"9ff19022ef915615911280e3c49ed44b","target_id":"ea655c6d147bc98beb42955d437260cc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-23","gmt_create":"2026-04-23T15:21:46.780075+08:00","gmt_modified":"2026-04-23T15:21:46.780075+08:00"},{"id":322,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"37868a5af96edcdad149caf9a184435a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#42-85","gmt_create":"2026-04-23T15:21:46.781141+08:00","gmt_modified":"2026-04-23T15:21:46.781141+08:00"},{"id":323,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"37868a5af96edcdad149caf9a184435a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 42-85","gmt_create":"2026-04-23T15:21:46.781803+08:00","gmt_modified":"2026-04-23T15:21:46.781803+08:00"},{"id":324,"source_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","target_id":"601b981b00d93b941843f046a163d5a3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/query.py#18-33","gmt_create":"2026-04-23T15:21:46.783498+08:00","gmt_modified":"2026-04-23T15:21:46.783498+08:00"},{"id":325,"source_id":"f301b79d833233ce39d350e82a71c938","target_id":"601b981b00d93b941843f046a163d5a3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 18-33","gmt_create":"2026-04-23T15:21:46.784342+08:00","gmt_modified":"2026-04-23T15:21:46.784343+08:00"},{"id":344,"source_id":"0ef1efea889dba3e1f299626df479571","target_id":"290df8332b3d104e5ea8d71dc39315b5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-123","gmt_create":"2026-04-23T15:22:16.017503+08:00","gmt_modified":"2026-04-23T15:22:16.017503+08:00"},{"id":346,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"c2747ca16b879bca0f68955534c3c4fc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-48","gmt_create":"2026-04-23T15:22:16.019099+08:00","gmt_modified":"2026-04-23T15:22:16.019099+08:00"},{"id":348,"source_id":"9d08667997a868fc07c9b4e328e44224","target_id":"76e6c0abb49fec57cac4892837a143c9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-43","gmt_create":"2026-04-23T15:22:16.020577+08:00","gmt_modified":"2026-04-23T15:22:16.020577+08:00"},{"id":350,"source_id":"93022c8938ce318f167277cfa65c29a7","target_id":"f66d9907b467b110c638bd527efd95c5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-43","gmt_create":"2026-04-23T15:22:16.021841+08:00","gmt_modified":"2026-04-23T15:22:16.021841+08:00"},{"id":354,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"116584ea9162c1bc05911f39f9ef82b6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-309","gmt_create":"2026-04-23T15:22:16.023827+08:00","gmt_modified":"2026-04-23T15:22:16.023827+08:00"},{"id":356,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"9630036e63fc15cb81b202cf79671aab","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-182","gmt_create":"2026-04-23T15:22:16.024606+08:00","gmt_modified":"2026-04-23T15:22:16.024606+08:00"},{"id":359,"source_id":"9ff19022ef915615911280e3c49ed44b","target_id":"84fbed7d35f7752e2117a74fcaf5f0e9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-17","gmt_create":"2026-04-23T15:22:16.026089+08:00","gmt_modified":"2026-04-23T15:22:16.02609+08:00"},{"id":361,"source_id":"0ef1efea889dba3e1f299626df479571","target_id":"5ddf0c8d7b38e4f6126a5d85da1dfeda","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 19-123","gmt_create":"2026-04-23T15:22:16.02774+08:00","gmt_modified":"2026-04-23T15:22:16.02774+08:00"},{"id":363,"source_id":"0ef1efea889dba3e1f299626df479571","target_id":"9df233ef1be4b95068ed91bf01083ae7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 117-123","gmt_create":"2026-04-23T15:22:16.028504+08:00","gmt_modified":"2026-04-23T15:22:16.028504+08:00"},{"id":365,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"6286d4be455dc058c8be2ee4e0d1175a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 38-42","gmt_create":"2026-04-23T15:22:16.029449+08:00","gmt_modified":"2026-04-23T15:22:16.029449+08:00"},{"id":367,"source_id":"9d08667997a868fc07c9b4e328e44224","target_id":"069243fafe60a85cf16a0ca40fa07180","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-43","gmt_create":"2026-04-23T15:22:16.030648+08:00","gmt_modified":"2026-04-23T15:22:16.030648+08:00"},{"id":369,"source_id":"93022c8938ce318f167277cfa65c29a7","target_id":"d5a1fb0bd23ce9240fbf79529ef94a45","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-43","gmt_create":"2026-04-23T15:22:16.03168+08:00","gmt_modified":"2026-04-23T15:22:16.03168+08:00"},{"id":372,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"735aef72b4fe6ca4f407e69b7dda8b43","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-78","gmt_create":"2026-04-23T15:22:16.03298+08:00","gmt_modified":"2026-04-23T15:22:16.03298+08:00"},{"id":374,"source_id":"b0c428683c8a3e6922d90ca0d8c2736d","target_id":"8128dd67cf376d2cadf7c2d3831c380a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-29","gmt_create":"2026-04-23T15:22:16.035564+08:00","gmt_modified":"2026-04-23T15:22:16.035564+08:00"},{"id":376,"source_id":"389d631bc6c7111ba411b0b79fca455e","target_id":"1721defc3d6206478d3c0692cc821761","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-104","gmt_create":"2026-04-23T15:22:16.036753+08:00","gmt_modified":"2026-04-23T15:22:16.036753+08:00"},{"id":378,"source_id":"4d2f3847b7c10634733118b70a1aea0b","target_id":"753a437d837246ead62b0e16c6331284","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 37-69","gmt_create":"2026-04-23T15:22:16.038261+08:00","gmt_modified":"2026-04-23T15:22:16.038261+08:00"},{"id":380,"source_id":"389d631bc6c7111ba411b0b79fca455e","target_id":"d820e2daf2ea133a7aa17cdc475e44a4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-104","gmt_create":"2026-04-23T15:22:16.039369+08:00","gmt_modified":"2026-04-23T15:22:16.039369+08:00"},{"id":382,"source_id":"4d2f3847b7c10634733118b70a1aea0b","target_id":"1a439c5fed6cfd188c646e1614d56371","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-69","gmt_create":"2026-04-23T15:22:16.040483+08:00","gmt_modified":"2026-04-23T15:22:16.040483+08:00"},{"id":385,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"5c67e2f70283956b2d29a3c1443eb514","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 122-146","gmt_create":"2026-04-23T15:22:16.042829+08:00","gmt_modified":"2026-04-23T15:22:16.042829+08:00"},{"id":388,"source_id":"b07a4fb9cecbbd66a6910ccbc7651f19","target_id":"a57acd9da5287c915ac823784a409292","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-127","gmt_create":"2026-04-23T15:22:16.045132+08:00","gmt_modified":"2026-04-23T15:22:16.045132+08:00"},{"id":390,"source_id":"42ff5383133d176cec9eb88682483be3","target_id":"2a4f741f31f62dce8ad63be2e831f520","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-93","gmt_create":"2026-04-23T15:22:16.046367+08:00","gmt_modified":"2026-04-23T15:22:16.046367+08:00"},{"id":392,"source_id":"42ff5383133d176cec9eb88682483be3","target_id":"692ac240965eff7e66945aa3c4c270f7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-93","gmt_create":"2026-04-23T15:22:16.047995+08:00","gmt_modified":"2026-04-23T15:22:16.047995+08:00"},{"id":394,"source_id":"0613e76b9679be7f998fb8fd8056e686","target_id":"32a0a52faca2d8d488e49c63c86075b1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 29-154","gmt_create":"2026-04-23T15:22:16.049251+08:00","gmt_modified":"2026-04-23T15:22:16.049251+08:00"},{"id":396,"source_id":"0613e76b9679be7f998fb8fd8056e686","target_id":"7804331f5f8c1ba5a3b6d9c1ae1c78c1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-154","gmt_create":"2026-04-23T15:22:16.051952+08:00","gmt_modified":"2026-04-23T15:22:16.051952+08:00"},{"id":398,"source_id":"80a0429cc47931de27ddb17a62b8dd9c","target_id":"3a6e1b738967bf8cc651e57f48e2e126","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 83-126","gmt_create":"2026-04-23T15:22:16.053692+08:00","gmt_modified":"2026-04-23T15:22:16.053693+08:00"},{"id":400,"source_id":"80a0429cc47931de27ddb17a62b8dd9c","target_id":"b1afd377757f1d0e9bdf87edfff3ad88","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 131-186","gmt_create":"2026-04-23T15:22:16.054533+08:00","gmt_modified":"2026-04-23T15:22:16.054533+08:00"},{"id":402,"source_id":"80a0429cc47931de27ddb17a62b8dd9c","target_id":"de05ec7eed033e432991e5a88e1b5a06","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 192-222","gmt_create":"2026-04-23T15:22:16.055495+08:00","gmt_modified":"2026-04-23T15:22:16.055495+08:00"},{"id":404,"source_id":"80a0429cc47931de27ddb17a62b8dd9c","target_id":"7fd61a451248b6b129299d6246f711c7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 228-296","gmt_create":"2026-04-23T15:22:16.056294+08:00","gmt_modified":"2026-04-23T15:22:16.056294+08:00"},{"id":406,"source_id":"80a0429cc47931de27ddb17a62b8dd9c","target_id":"53eedffff456a566fa7b0cecc7169f56","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-441","gmt_create":"2026-04-23T15:22:16.05703+08:00","gmt_modified":"2026-04-23T15:22:16.05703+08:00"},{"id":408,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"906f7a8288e38d4244211f3f538fe7b6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 27-182","gmt_create":"2026-04-23T15:22:16.062545+08:00","gmt_modified":"2026-04-23T15:22:16.062545+08:00"},{"id":410,"source_id":"b2f0d46a31a5441594f2e777365fc156","target_id":"1647ee2066de2ae59ba8cf88e33c5e02","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-123","gmt_create":"2026-04-23T15:22:16.064587+08:00","gmt_modified":"2026-04-23T15:22:16.064587+08:00"},{"id":411,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"aaf5bce6be82d2f947bfa5c1806de452","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/package.json","gmt_create":"2026-04-23T15:22:23.52554+08:00","gmt_modified":"2026-04-23T15:22:23.52554+08:00"},{"id":412,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"01056dad8851d3e9bd532eb4cab33792","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/tailwind.config.ts","gmt_create":"2026-04-23T15:22:23.52643+08:00","gmt_modified":"2026-04-23T15:22:23.526431+08:00"},{"id":413,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"f93ae024fe0a2e69698037dff6df205f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/lib/utils.ts","gmt_create":"2026-04-23T15:22:23.527272+08:00","gmt_modified":"2026-04-23T15:22:23.527272+08:00"},{"id":414,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"ac1acbc54c49ee1de13369f6c6827568","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/button.tsx","gmt_create":"2026-04-23T15:22:23.528155+08:00","gmt_modified":"2026-04-23T15:22:23.528155+08:00"},{"id":415,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"108b0c4b4dcfb6aa39a5eb138225c148","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/dialog.tsx","gmt_create":"2026-04-23T15:22:23.529196+08:00","gmt_modified":"2026-04-23T15:22:23.529196+08:00"},{"id":416,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"0186dc8a89340139a84e1e3c5571a57f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/dropdown-menu.tsx","gmt_create":"2026-04-23T15:22:23.530077+08:00","gmt_modified":"2026-04-23T15:22:23.530077+08:00"},{"id":417,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"3cf787fa77a15b2b1783560c6d83ed21","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/input.tsx","gmt_create":"2026-04-23T15:22:23.530977+08:00","gmt_modified":"2026-04-23T15:22:23.530977+08:00"},{"id":418,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"3c56e1c079959bfcc985183805e5874f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/select.tsx","gmt_create":"2026-04-23T15:22:23.531664+08:00","gmt_modified":"2026-04-23T15:22:23.531664+08:00"},{"id":419,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"0d5ef537f7c0b8c390f8b31d7cf47b56","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/card.tsx","gmt_create":"2026-04-23T15:22:23.532588+08:00","gmt_modified":"2026-04-23T15:22:23.532588+08:00"},{"id":420,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"51821ca9ec2a1c972f3c9d111e19db8a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/badge.tsx","gmt_create":"2026-04-23T15:22:23.53409+08:00","gmt_modified":"2026-04-23T15:22:23.53409+08:00"},{"id":421,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"0c0b0f4e2cf44facd9d5b57de0d0bf0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/table.tsx","gmt_create":"2026-04-23T15:22:23.535512+08:00","gmt_modified":"2026-04-23T15:22:23.535512+08:00"},{"id":422,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"beb87ab5aad9532647e9dbd2db7ef587","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/tabs.tsx","gmt_create":"2026-04-23T15:22:23.536664+08:00","gmt_modified":"2026-04-23T15:22:23.536665+08:00"},{"id":423,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"792b8e2c16c9ff2095d83b8972313be4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/ui/label.tsx","gmt_create":"2026-04-23T15:22:23.537365+08:00","gmt_modified":"2026-04-23T15:22:23.537365+08:00"},{"id":424,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"546e01c5f73aaf5140eee922f4b9a441","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/components/providers.tsx","gmt_create":"2026-04-23T15:22:23.538246+08:00","gmt_modified":"2026-04-23T15:22:23.538246+08:00"},{"id":425,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"12e2c3d7b9a92dc44a6ee29b85e10df6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/app/layout.tsx","gmt_create":"2026-04-23T15:22:23.53929+08:00","gmt_modified":"2026-04-23T15:22:23.53929+08:00"},{"id":426,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"2a1c745c7b3fb7f600596be3d979bba1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/app/(dashboard","gmt_create":"2026-04-23T15:22:23.540469+08:00","gmt_modified":"2026-04-23T15:22:23.540469+08:00"},{"id":427,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"8a466b0c6eac2ccb54c5da7e13854646","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/app/layout.tsx#1-37","gmt_create":"2026-04-23T15:22:23.541484+08:00","gmt_modified":"2026-04-23T15:22:23.541484+08:00"},{"id":428,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"fd18328b6582e68c30b130b912891992","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/providers.tsx#1-9","gmt_create":"2026-04-23T15:22:23.542098+08:00","gmt_modified":"2026-04-23T15:22:23.542098+08:00"},{"id":429,"source_id":"546e01c5f73aaf5140eee922f4b9a441","target_id":"fd18328b6582e68c30b130b912891992","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-9","gmt_create":"2026-04-23T15:22:23.542482+08:00","gmt_modified":"2026-04-23T15:22:23.542482+08:00"},{"id":430,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"dcfa308ef4ec368c5a51a17acbfc8e2c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/utils.ts#1-7","gmt_create":"2026-04-23T15:22:23.542958+08:00","gmt_modified":"2026-04-23T15:22:23.542958+08:00"},{"id":431,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"71a37a516437e94fd82a87efc70a3f16","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/package.json#1-40","gmt_create":"2026-04-23T15:22:23.54348+08:00","gmt_modified":"2026-04-23T15:22:23.54348+08:00"},{"id":432,"source_id":"aaf5bce6be82d2f947bfa5c1806de452","target_id":"71a37a516437e94fd82a87efc70a3f16","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-40","gmt_create":"2026-04-23T15:22:23.543767+08:00","gmt_modified":"2026-04-23T15:22:23.543768+08:00"},{"id":433,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"89d70e5f89be23a229e3ee59982b8e6e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/tailwind.config.ts#1-57","gmt_create":"2026-04-23T15:22:23.544176+08:00","gmt_modified":"2026-04-23T15:22:23.544176+08:00"},{"id":434,"source_id":"01056dad8851d3e9bd532eb4cab33792","target_id":"89d70e5f89be23a229e3ee59982b8e6e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-57","gmt_create":"2026-04-23T15:22:23.544513+08:00","gmt_modified":"2026-04-23T15:22:23.544513+08:00"},{"id":435,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"95be577a89fbeb02578e4c3718c6ec86","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/button.tsx#1-57","gmt_create":"2026-04-23T15:22:23.545023+08:00","gmt_modified":"2026-04-23T15:22:23.545023+08:00"},{"id":436,"source_id":"ac1acbc54c49ee1de13369f6c6827568","target_id":"95be577a89fbeb02578e4c3718c6ec86","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-57","gmt_create":"2026-04-23T15:22:23.545376+08:00","gmt_modified":"2026-04-23T15:22:23.545376+08:00"},{"id":437,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"607bb628918a7a5d54cbf74763f94d07","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/input.tsx#1-23","gmt_create":"2026-04-23T15:22:23.545898+08:00","gmt_modified":"2026-04-23T15:22:23.545899+08:00"},{"id":438,"source_id":"3cf787fa77a15b2b1783560c6d83ed21","target_id":"607bb628918a7a5d54cbf74763f94d07","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-23","gmt_create":"2026-04-23T15:22:23.546272+08:00","gmt_modified":"2026-04-23T15:22:23.546272+08:00"},{"id":439,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"325e25d1dda0f7bfd9d7adfe35ecf3b5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/select.tsx#1-161","gmt_create":"2026-04-23T15:22:23.546653+08:00","gmt_modified":"2026-04-23T15:22:23.546653+08:00"},{"id":440,"source_id":"3c56e1c079959bfcc985183805e5874f","target_id":"325e25d1dda0f7bfd9d7adfe35ecf3b5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-161","gmt_create":"2026-04-23T15:22:23.546906+08:00","gmt_modified":"2026-04-23T15:22:23.546907+08:00"},{"id":441,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"0eed9f61572209dd754611fc7c690d5a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/dialog.tsx#1-123","gmt_create":"2026-04-23T15:22:23.547243+08:00","gmt_modified":"2026-04-23T15:22:23.547244+08:00"},{"id":442,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"ad6ff021b2126ad5c42323305eb6d8b0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/dropdown-menu.tsx#1-201","gmt_create":"2026-04-23T15:22:23.547645+08:00","gmt_modified":"2026-04-23T15:22:23.547645+08:00"},{"id":443,"source_id":"0186dc8a89340139a84e1e3c5571a57f","target_id":"ad6ff021b2126ad5c42323305eb6d8b0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-201","gmt_create":"2026-04-23T15:22:23.547892+08:00","gmt_modified":"2026-04-23T15:22:23.547892+08:00"},{"id":444,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"a85f004dca63614b4e734ba63b45ef9e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/card.tsx#1-80","gmt_create":"2026-04-23T15:22:23.548296+08:00","gmt_modified":"2026-04-23T15:22:23.548296+08:00"},{"id":445,"source_id":"0d5ef537f7c0b8c390f8b31d7cf47b56","target_id":"a85f004dca63614b4e734ba63b45ef9e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-80","gmt_create":"2026-04-23T15:22:23.548561+08:00","gmt_modified":"2026-04-23T15:22:23.548561+08:00"},{"id":446,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"3bab92a09e9fb456e0303bb1e04afc7e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/table.tsx#1-118","gmt_create":"2026-04-23T15:22:23.548946+08:00","gmt_modified":"2026-04-23T15:22:23.548946+08:00"},{"id":447,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"bd3042a8d9b602334720b0d7b4e8ab3d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/tabs.tsx#1-56","gmt_create":"2026-04-23T15:22:23.549383+08:00","gmt_modified":"2026-04-23T15:22:23.549383+08:00"},{"id":448,"source_id":"beb87ab5aad9532647e9dbd2db7ef587","target_id":"bd3042a8d9b602334720b0d7b4e8ab3d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-56","gmt_create":"2026-04-23T15:22:23.549652+08:00","gmt_modified":"2026-04-23T15:22:23.549653+08:00"},{"id":449,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"379443f450513b5492e2d9d5fca94a42","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/label.tsx#1-27","gmt_create":"2026-04-23T15:22:23.550013+08:00","gmt_modified":"2026-04-23T15:22:23.550014+08:00"},{"id":450,"source_id":"792b8e2c16c9ff2095d83b8972313be4","target_id":"379443f450513b5492e2d9d5fca94a42","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-27","gmt_create":"2026-04-23T15:22:23.550267+08:00","gmt_modified":"2026-04-23T15:22:23.550267+08:00"},{"id":451,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"4aa6ad434a73143bb7a2072124f63be0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/badge.tsx#1-37","gmt_create":"2026-04-23T15:22:23.551155+08:00","gmt_modified":"2026-04-23T15:22:23.551155+08:00"},{"id":452,"source_id":"51821ca9ec2a1c972f3c9d111e19db8a","target_id":"4aa6ad434a73143bb7a2072124f63be0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-04-23T15:22:23.551858+08:00","gmt_modified":"2026-04-23T15:22:23.551858+08:00"},{"id":453,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"c45dbdda70a8b9f02b52af4991644d0b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/package.json#11-27","gmt_create":"2026-04-23T15:22:23.552353+08:00","gmt_modified":"2026-04-23T15:22:23.552353+08:00"},{"id":454,"source_id":"aaf5bce6be82d2f947bfa5c1806de452","target_id":"c45dbdda70a8b9f02b52af4991644d0b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-27","gmt_create":"2026-04-23T15:22:23.552845+08:00","gmt_modified":"2026-04-23T15:22:23.552845+08:00"},{"id":455,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"6ac6943c93570294e4fb15a862be2616","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/button.tsx#36-54","gmt_create":"2026-04-23T15:22:23.553797+08:00","gmt_modified":"2026-04-23T15:22:23.553797+08:00"},{"id":456,"source_id":"ac1acbc54c49ee1de13369f6c6827568","target_id":"6ac6943c93570294e4fb15a862be2616","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 36-54","gmt_create":"2026-04-23T15:22:23.554077+08:00","gmt_modified":"2026-04-23T15:22:23.554077+08:00"},{"id":457,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"4bfb5059c685e9878aed64cb5347ccec","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/dialog.tsx#9-54","gmt_create":"2026-04-23T15:22:23.554645+08:00","gmt_modified":"2026-04-23T15:22:23.554645+08:00"},{"id":458,"source_id":"108b0c4b4dcfb6aa39a5eb138225c148","target_id":"4bfb5059c685e9878aed64cb5347ccec","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 9-54","gmt_create":"2026-04-23T15:22:23.554875+08:00","gmt_modified":"2026-04-23T15:22:23.554875+08:00"},{"id":459,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"0af48b69fe8fb9e480fa1656f36a4330","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/dropdown-menu.tsx#21-75","gmt_create":"2026-04-23T15:22:23.555418+08:00","gmt_modified":"2026-04-23T15:22:23.555418+08:00"},{"id":460,"source_id":"0186dc8a89340139a84e1e3c5571a57f","target_id":"0af48b69fe8fb9e480fa1656f36a4330","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 21-75","gmt_create":"2026-04-23T15:22:23.55574+08:00","gmt_modified":"2026-04-23T15:22:23.55574+08:00"},{"id":461,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"09971e31ab658e119d4c0ad948282107","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/select.tsx#15-100","gmt_create":"2026-04-23T15:22:23.556401+08:00","gmt_modified":"2026-04-23T15:22:23.556401+08:00"},{"id":462,"source_id":"3c56e1c079959bfcc985183805e5874f","target_id":"09971e31ab658e119d4c0ad948282107","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 15-100","gmt_create":"2026-04-23T15:22:23.556634+08:00","gmt_modified":"2026-04-23T15:22:23.556634+08:00"},{"id":463,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"31aa8777de6043883950d2668094e388","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/table.tsx#5-106","gmt_create":"2026-04-23T15:22:23.55717+08:00","gmt_modified":"2026-04-23T15:22:23.55717+08:00"},{"id":464,"source_id":"0c0b0f4e2cf44facd9d5b57de0d0bf0c","target_id":"31aa8777de6043883950d2668094e388","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-106","gmt_create":"2026-04-23T15:22:23.557428+08:00","gmt_modified":"2026-04-23T15:22:23.557429+08:00"},{"id":465,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"28baf3cedb89a21c6d542b7ce2439b24","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/tabs.tsx#8-53","gmt_create":"2026-04-23T15:22:23.558002+08:00","gmt_modified":"2026-04-23T15:22:23.558002+08:00"},{"id":466,"source_id":"beb87ab5aad9532647e9dbd2db7ef587","target_id":"28baf3cedb89a21c6d542b7ce2439b24","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 8-53","gmt_create":"2026-04-23T15:22:23.558316+08:00","gmt_modified":"2026-04-23T15:22:23.558316+08:00"},{"id":467,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"28b0f4797c6084272244175a24b961cb","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/card.tsx#5-77","gmt_create":"2026-04-23T15:22:23.558858+08:00","gmt_modified":"2026-04-23T15:22:23.558858+08:00"},{"id":468,"source_id":"0d5ef537f7c0b8c390f8b31d7cf47b56","target_id":"28b0f4797c6084272244175a24b961cb","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-77","gmt_create":"2026-04-23T15:22:23.559082+08:00","gmt_modified":"2026-04-23T15:22:23.559082+08:00"},{"id":469,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"a6e0b3fa65906c3c3cd88707e1d40059","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/label.tsx#9-23","gmt_create":"2026-04-23T15:22:23.559653+08:00","gmt_modified":"2026-04-23T15:22:23.559653+08:00"},{"id":470,"source_id":"792b8e2c16c9ff2095d83b8972313be4","target_id":"a6e0b3fa65906c3c3cd88707e1d40059","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 9-23","gmt_create":"2026-04-23T15:22:23.560391+08:00","gmt_modified":"2026-04-23T15:22:23.560392+08:00"},{"id":471,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"9a909775022010b4686c2b00cdf1c165","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/badge.tsx#6-34","gmt_create":"2026-04-23T15:22:23.562216+08:00","gmt_modified":"2026-04-23T15:22:23.562216+08:00"},{"id":472,"source_id":"51821ca9ec2a1c972f3c9d111e19db8a","target_id":"9a909775022010b4686c2b00cdf1c165","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 6-34","gmt_create":"2026-04-23T15:22:23.562602+08:00","gmt_modified":"2026-04-23T15:22:23.562602+08:00"},{"id":473,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"ce1cd184945ae56cf63f55168afd8050","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/components/ui/dialog.tsx#47-50","gmt_create":"2026-04-23T15:22:23.565009+08:00","gmt_modified":"2026-04-23T15:22:23.565009+08:00"},{"id":474,"source_id":"108b0c4b4dcfb6aa39a5eb138225c148","target_id":"ce1cd184945ae56cf63f55168afd8050","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 47-50","gmt_create":"2026-04-23T15:22:23.565469+08:00","gmt_modified":"2026-04-23T15:22:23.565469+08:00"},{"id":475,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"4a2a06e1efcbc85deaa013dca155f20c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/tailwind.config.ts#10-54","gmt_create":"2026-04-23T15:22:23.57102+08:00","gmt_modified":"2026-04-23T15:22:23.57102+08:00"},{"id":476,"source_id":"01056dad8851d3e9bd532eb4cab33792","target_id":"4a2a06e1efcbc85deaa013dca155f20c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-54","gmt_create":"2026-04-23T15:22:23.571491+08:00","gmt_modified":"2026-04-23T15:22:23.571491+08:00"},{"id":477,"source_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","target_id":"8b00ea4aba57ea6ed982287fb7840805","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/utils.ts#4-6","gmt_create":"2026-04-23T15:22:23.572188+08:00","gmt_modified":"2026-04-23T15:22:23.572188+08:00"},{"id":478,"source_id":"f93ae024fe0a2e69698037dff6df205f","target_id":"8b00ea4aba57ea6ed982287fb7840805","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 4-6","gmt_create":"2026-04-23T15:22:23.572722+08:00","gmt_modified":"2026-04-23T15:22:23.572722+08:00"},{"id":479,"source_id":"3af3bb9e-4d99-4dc3-b1ed-2686db385c26","target_id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3af3bb9e-4d99-4dc3-b1ed-2686db385c26 -\u003e ba0390b3-c249-4e92-a3c8-6820343aeda9","gmt_create":"2026-04-23T15:22:24.554964+08:00","gmt_modified":"2026-04-23T15:22:24.554964+08:00"},{"id":480,"source_id":"3af3bb9e-4d99-4dc3-b1ed-2686db385c26","target_id":"760610d4-dff6-4c6d-831f-7c9078db86a6","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3af3bb9e-4d99-4dc3-b1ed-2686db385c26 -\u003e 760610d4-dff6-4c6d-831f-7c9078db86a6","gmt_create":"2026-04-23T15:22:24.558512+08:00","gmt_modified":"2026-04-23T15:22:24.558512+08:00"},{"id":483,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"2fc79486-ec65-4533-860a-89c8877c2ea0","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: deb919cc-9541-4ed7-a581-ae2876ea67c2 -\u003e 2fc79486-ec65-4533-860a-89c8877c2ea0","gmt_create":"2026-04-23T15:22:24.563092+08:00","gmt_modified":"2026-04-23T15:22:24.563092+08:00"},{"id":484,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"d8e2cef5-37e6-44e7-8a7b-9bd365b82a72","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: deb919cc-9541-4ed7-a581-ae2876ea67c2 -\u003e d8e2cef5-37e6-44e7-8a7b-9bd365b82a72","gmt_create":"2026-04-23T15:22:24.564188+08:00","gmt_modified":"2026-04-23T15:22:24.564188+08:00"},{"id":485,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"7c7564ee-7fe2-4555-8ff0-4ec1b757997a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 49915365-e38e-43b5-beac-6aa7d5a74cbb -\u003e 7c7564ee-7fe2-4555-8ff0-4ec1b757997a","gmt_create":"2026-04-23T15:22:24.570327+08:00","gmt_modified":"2026-04-23T15:22:24.570327+08:00"},{"id":487,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"737f8d6c-bd8f-4c11-b142-71a400423323","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 49915365-e38e-43b5-beac-6aa7d5a74cbb -\u003e 737f8d6c-bd8f-4c11-b142-71a400423323","gmt_create":"2026-04-23T15:22:24.572325+08:00","gmt_modified":"2026-04-23T15:22:24.572325+08:00"},{"id":488,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"ae62f4a8-8840-4c8e-9a42-3373370299ff","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 49915365-e38e-43b5-beac-6aa7d5a74cbb -\u003e ae62f4a8-8840-4c8e-9a42-3373370299ff","gmt_create":"2026-04-23T15:22:24.573991+08:00","gmt_modified":"2026-04-23T15:22:24.573991+08:00"},{"id":492,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"a16cf42e9559523c4f96ca4c79f9488d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/base.py","gmt_create":"2026-04-23T20:31:36.520458+08:00","gmt_modified":"2026-04-23T20:31:36.520458+08:00"},{"id":493,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"8f973791233c698b3e64a4fb28a93d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/kimi.py","gmt_create":"2026-04-23T20:31:36.521676+08:00","gmt_modified":"2026-04-23T20:31:36.521677+08:00"},{"id":494,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"f642fc1c2f34e15572d9d98aa6c18813","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-23T20:31:36.522472+08:00","gmt_modified":"2026-04-23T20:31:36.522472+08:00"},{"id":495,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"e68ad5186f1e47610ab3d9f14a794393","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/tongyi.py","gmt_create":"2026-04-23T20:31:36.522898+08:00","gmt_modified":"2026-04-23T20:31:36.522898+08:00"},{"id":496,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"404f6d0765a8c6e77e33b7fc21b377a4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/doubao.py","gmt_create":"2026-04-23T20:31:36.523305+08:00","gmt_modified":"2026-04-23T20:31:36.523305+08:00"},{"id":497,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"303e80519e946904d1cb3ac32cbb0814","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/qingyan.py","gmt_create":"2026-04-23T20:31:36.524292+08:00","gmt_modified":"2026-04-23T20:31:36.524292+08:00"},{"id":498,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"5af7301fe056fc3d10820d820e8ad777","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/tiangong.py","gmt_create":"2026-04-23T20:31:36.525283+08:00","gmt_modified":"2026-04-23T20:31:36.525283+08:00"},{"id":499,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"0e38ad5d2d3daaad08c9302df8805b15","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/xinghuo.py","gmt_create":"2026-04-23T20:31:36.52736+08:00","gmt_modified":"2026-04-23T20:31:36.52736+08:00"},{"id":500,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"6a63f048c16c60c5d2d57012c810ee0e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/search_engine.py","gmt_create":"2026-04-23T20:31:36.527985+08:00","gmt_modified":"2026-04-23T20:31:36.527985+08:00"},{"id":501,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"74040de652d5e57f548bb5c4adc3e1a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/citation_engine.py","gmt_create":"2026-04-23T20:31:36.530076+08:00","gmt_modified":"2026-04-23T20:31:36.530076+08:00"},{"id":502,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T20:31:36.531496+08:00","gmt_modified":"2026-04-23T20:31:36.531496+08:00"},{"id":503,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T20:31:36.532308+08:00","gmt_modified":"2026-04-23T20:31:36.532308+08:00"},{"id":504,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"b4a81ef789630d0af6a8d50859d01bf3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/citation_record.py","gmt_create":"2026-04-23T20:31:36.533202+08:00","gmt_modified":"2026-04-23T20:31:36.533203+08:00"},{"id":505,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T20:31:36.533733+08:00","gmt_modified":"2026-04-23T20:31:36.533733+08:00"},{"id":506,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/scheduler.py","gmt_create":"2026-04-23T20:31:36.534166+08:00","gmt_modified":"2026-04-23T20:31:36.534166+08:00"},{"id":507,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T20:31:36.535208+08:00","gmt_modified":"2026-04-23T20:31:36.535208+08:00"},{"id":508,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"04e3926c080e795713bff683e7dc9d3e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/citation.py","gmt_create":"2026-04-23T20:31:36.536177+08:00","gmt_modified":"2026-04-23T20:31:36.536177+08:00"},{"id":509,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"ef72f0c3cedb9fd9a87352fe493053dc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/lib/platforms.ts","gmt_create":"2026-04-23T20:31:36.536784+08:00","gmt_modified":"2026-04-23T20:31:36.536784+08:00"},{"id":510,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"b07a4fb9cecbbd66a6910ccbc7651f19","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_citation_engine.py","gmt_create":"2026-04-23T20:31:36.537249+08:00","gmt_modified":"2026-04-23T20:31:36.537249+08:00"},{"id":511,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"a26ee01cf41da3b956e1650448c156fa","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/requirements.txt","gmt_create":"2026-04-23T20:31:36.53817+08:00","gmt_modified":"2026-04-23T20:31:36.538171+08:00"},{"id":512,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"cbd0101fa84d957bcb1baaa623c6b31c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#1-78","gmt_create":"2026-04-23T20:31:36.53929+08:00","gmt_modified":"2026-04-23T20:31:36.53929+08:00"},{"id":513,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"7c0831c17e8c65eaed9511e17ed2a2ef","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#1-269","gmt_create":"2026-04-23T20:31:36.540413+08:00","gmt_modified":"2026-04-23T20:31:36.540413+08:00"},{"id":514,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"7c0831c17e8c65eaed9511e17ed2a2ef","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-269","gmt_create":"2026-04-23T20:31:36.541301+08:00","gmt_modified":"2026-04-23T20:31:36.541301+08:00"},{"id":515,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"71f98c8993fb42b108e34a554247869b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#1-95","gmt_create":"2026-04-23T20:31:36.541996+08:00","gmt_modified":"2026-04-23T20:31:36.541996+08:00"},{"id":516,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"71f98c8993fb42b108e34a554247869b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-95","gmt_create":"2026-04-23T20:31:36.542269+08:00","gmt_modified":"2026-04-23T20:31:36.542269+08:00"},{"id":517,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"8d5aac2ae0671f05d7c0807ba9296cdf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#1-330","gmt_create":"2026-04-23T20:31:36.543463+08:00","gmt_modified":"2026-04-23T20:31:36.543463+08:00"},{"id":518,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"8d5aac2ae0671f05d7c0807ba9296cdf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-330","gmt_create":"2026-04-23T20:31:36.543912+08:00","gmt_modified":"2026-04-23T20:31:36.543912+08:00"},{"id":519,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"debd789847d1eed2d54198772edf68a2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tongyi.py#1-38","gmt_create":"2026-04-23T20:31:36.545278+08:00","gmt_modified":"2026-04-23T20:31:36.545279+08:00"},{"id":520,"source_id":"e68ad5186f1e47610ab3d9f14a794393","target_id":"debd789847d1eed2d54198772edf68a2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-38","gmt_create":"2026-04-23T20:31:36.545752+08:00","gmt_modified":"2026-04-23T20:31:36.545752+08:00"},{"id":521,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"3bde521d18cc7221ae2f14637e163aac","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/doubao.py#1-38","gmt_create":"2026-04-23T20:31:36.546456+08:00","gmt_modified":"2026-04-23T20:31:36.546457+08:00"},{"id":522,"source_id":"404f6d0765a8c6e77e33b7fc21b377a4","target_id":"3bde521d18cc7221ae2f14637e163aac","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-38","gmt_create":"2026-04-23T20:31:36.546804+08:00","gmt_modified":"2026-04-23T20:31:36.546804+08:00"},{"id":523,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"c26862d9e0fc878b51a2668cfd2ec827","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/qingyan.py#1-38","gmt_create":"2026-04-23T20:31:36.547594+08:00","gmt_modified":"2026-04-23T20:31:36.547594+08:00"},{"id":524,"source_id":"303e80519e946904d1cb3ac32cbb0814","target_id":"c26862d9e0fc878b51a2668cfd2ec827","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-38","gmt_create":"2026-04-23T20:31:36.548009+08:00","gmt_modified":"2026-04-23T20:31:36.548009+08:00"},{"id":525,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"0fcc9c2e0d33b887c5f18a3807b64a1e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tiangong.py#1-38","gmt_create":"2026-04-23T20:31:36.548333+08:00","gmt_modified":"2026-04-23T20:31:36.548333+08:00"},{"id":526,"source_id":"5af7301fe056fc3d10820d820e8ad777","target_id":"0fcc9c2e0d33b887c5f18a3807b64a1e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-38","gmt_create":"2026-04-23T20:31:36.548917+08:00","gmt_modified":"2026-04-23T20:31:36.548917+08:00"},{"id":527,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"a4baa2444208b3f9a3f42bc492038207","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/xinghuo.py#1-38","gmt_create":"2026-04-23T20:31:36.549296+08:00","gmt_modified":"2026-04-23T20:31:36.549296+08:00"},{"id":528,"source_id":"0e38ad5d2d3daaad08c9302df8805b15","target_id":"a4baa2444208b3f9a3f42bc492038207","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-38","gmt_create":"2026-04-23T20:31:36.54956+08:00","gmt_modified":"2026-04-23T20:31:36.54956+08:00"},{"id":529,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"9f82f6d82bf914a608d6afa3d9854abf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#1-174","gmt_create":"2026-04-23T20:31:36.549907+08:00","gmt_modified":"2026-04-23T20:31:36.549907+08:00"},{"id":530,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"9f82f6d82bf914a608d6afa3d9854abf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-174","gmt_create":"2026-04-23T20:31:36.55085+08:00","gmt_modified":"2026-04-23T20:31:36.55085+08:00"},{"id":531,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"84fbed7d35f7752e2117a74fcaf5f0e9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#1-17","gmt_create":"2026-04-23T20:31:36.551428+08:00","gmt_modified":"2026-04-23T20:31:36.551428+08:00"},{"id":532,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"6281fff17a86ec1895c64d87c2ae7fb1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#1-55","gmt_create":"2026-04-23T20:31:36.552386+08:00","gmt_modified":"2026-04-23T20:31:36.552386+08:00"},{"id":533,"source_id":"b74caccb06844efcdb14d8324cff65c2","target_id":"6281fff17a86ec1895c64d87c2ae7fb1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-55","gmt_create":"2026-04-23T20:31:36.553134+08:00","gmt_modified":"2026-04-23T20:31:36.553134+08:00"},{"id":534,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"943c18db69a04b3137fba4cebcfea87e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#1-42","gmt_create":"2026-04-23T20:31:36.553656+08:00","gmt_modified":"2026-04-23T20:31:36.553656+08:00"},{"id":535,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"943c18db69a04b3137fba4cebcfea87e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-42","gmt_create":"2026-04-23T20:31:36.554174+08:00","gmt_modified":"2026-04-23T20:31:36.554174+08:00"},{"id":536,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"6628e006b8e5ca16160743528b6b0506","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#1-39","gmt_create":"2026-04-23T20:31:36.555503+08:00","gmt_modified":"2026-04-23T20:31:36.555503+08:00"},{"id":537,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"6628e006b8e5ca16160743528b6b0506","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-39","gmt_create":"2026-04-23T20:31:36.556658+08:00","gmt_modified":"2026-04-23T20:31:36.556658+08:00"},{"id":538,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"72a110dca58d8152758e2fdab4e94761","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#1-18","gmt_create":"2026-04-23T20:31:36.558991+08:00","gmt_modified":"2026-04-23T20:31:36.558991+08:00"},{"id":539,"source_id":"a16cf42e9559523c4f96ca4c79f9488d","target_id":"72a110dca58d8152758e2fdab4e94761","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-18","gmt_create":"2026-04-23T20:31:36.559781+08:00","gmt_modified":"2026-04-23T20:31:36.559781+08:00"},{"id":540,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"300e43c7a648440163f81039eaa47b5a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/platforms.ts#1-24","gmt_create":"2026-04-23T20:31:36.563289+08:00","gmt_modified":"2026-04-23T20:31:36.563289+08:00"},{"id":541,"source_id":"ef72f0c3cedb9fd9a87352fe493053dc","target_id":"300e43c7a648440163f81039eaa47b5a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-24","gmt_create":"2026-04-23T20:31:36.563813+08:00","gmt_modified":"2026-04-23T20:31:36.563813+08:00"},{"id":542,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"caf1970ded8fc5d3921005e166e2100b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#59-78","gmt_create":"2026-04-23T20:31:36.567359+08:00","gmt_modified":"2026-04-23T20:31:36.567359+08:00"},{"id":543,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"caf1970ded8fc5d3921005e166e2100b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 59-78","gmt_create":"2026-04-23T20:31:36.567845+08:00","gmt_modified":"2026-04-23T20:31:36.567845+08:00"},{"id":544,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"4ded871d02b8119cdd985de8b220b084","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#204-234","gmt_create":"2026-04-23T20:31:36.568622+08:00","gmt_modified":"2026-04-23T20:31:36.568622+08:00"},{"id":545,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"4ded871d02b8119cdd985de8b220b084","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 204-234","gmt_create":"2026-04-23T20:31:36.569217+08:00","gmt_modified":"2026-04-23T20:31:36.569217+08:00"},{"id":546,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"448970b02d89d5e1576f70bdb0063363","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#51-84","gmt_create":"2026-04-23T20:31:36.569785+08:00","gmt_modified":"2026-04-23T20:31:36.569785+08:00"},{"id":547,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"448970b02d89d5e1576f70bdb0063363","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 51-84","gmt_create":"2026-04-23T20:31:36.570169+08:00","gmt_modified":"2026-04-23T20:31:36.570169+08:00"},{"id":548,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"362d22f423631cda39404660b3317a2f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#177-254","gmt_create":"2026-04-23T20:31:36.570576+08:00","gmt_modified":"2026-04-23T20:31:36.570576+08:00"},{"id":549,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"362d22f423631cda39404660b3317a2f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 177-254","gmt_create":"2026-04-23T20:31:36.571472+08:00","gmt_modified":"2026-04-23T20:31:36.571472+08:00"},{"id":550,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"b475ff5225ac403c7fcf3dd7e14cbac6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tongyi.py#16-33","gmt_create":"2026-04-23T20:31:36.572484+08:00","gmt_modified":"2026-04-23T20:31:36.572484+08:00"},{"id":551,"source_id":"e68ad5186f1e47610ab3d9f14a794393","target_id":"b475ff5225ac403c7fcf3dd7e14cbac6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-33","gmt_create":"2026-04-23T20:31:36.573312+08:00","gmt_modified":"2026-04-23T20:31:36.573312+08:00"},{"id":552,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"557ae34b57a5dd8e8fa3bb2a6ce178a7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#163-174","gmt_create":"2026-04-23T20:31:36.574111+08:00","gmt_modified":"2026-04-23T20:31:36.574112+08:00"},{"id":553,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"557ae34b57a5dd8e8fa3bb2a6ce178a7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 163-174","gmt_create":"2026-04-23T20:31:36.574746+08:00","gmt_modified":"2026-04-23T20:31:36.574746+08:00"},{"id":554,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"75c6ab0599d304bf36d290d4143d3d2f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#29-31","gmt_create":"2026-04-23T20:31:36.590144+08:00","gmt_modified":"2026-04-23T20:31:36.590144+08:00"},{"id":555,"source_id":"b74caccb06844efcdb14d8324cff65c2","target_id":"75c6ab0599d304bf36d290d4143d3d2f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 29-31","gmt_create":"2026-04-23T20:31:36.591214+08:00","gmt_modified":"2026-04-23T20:31:36.591214+08:00"},{"id":556,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"fd541971cebf8a7c167d717f5c5d1ff6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#11-42","gmt_create":"2026-04-23T20:31:36.591664+08:00","gmt_modified":"2026-04-23T20:31:36.591664+08:00"},{"id":557,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"b84f46f058847733347974841f613688","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#11-39","gmt_create":"2026-04-23T20:31:36.592665+08:00","gmt_modified":"2026-04-23T20:31:36.592666+08:00"},{"id":558,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"2a6780838f1415dcb7d0fa611f64cee7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#4-17","gmt_create":"2026-04-23T20:31:36.593186+08:00","gmt_modified":"2026-04-23T20:31:36.593186+08:00"},{"id":559,"source_id":"a16cf42e9559523c4f96ca4c79f9488d","target_id":"2a6780838f1415dcb7d0fa611f64cee7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 4-17","gmt_create":"2026-04-23T20:31:36.59372+08:00","gmt_modified":"2026-04-23T20:31:36.59372+08:00"},{"id":560,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"c5ae7697193b2b93425ff25d2d7d54a9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tongyi.py#10-38","gmt_create":"2026-04-23T20:31:36.595227+08:00","gmt_modified":"2026-04-23T20:31:36.595227+08:00"},{"id":561,"source_id":"e68ad5186f1e47610ab3d9f14a794393","target_id":"c5ae7697193b2b93425ff25d2d7d54a9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-38","gmt_create":"2026-04-23T20:31:36.596503+08:00","gmt_modified":"2026-04-23T20:31:36.596503+08:00"},{"id":562,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"aa8c3fa3bc509dafe64d113bdd09eafa","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/doubao.py#10-38","gmt_create":"2026-04-23T20:31:36.597069+08:00","gmt_modified":"2026-04-23T20:31:36.597069+08:00"},{"id":563,"source_id":"404f6d0765a8c6e77e33b7fc21b377a4","target_id":"aa8c3fa3bc509dafe64d113bdd09eafa","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-38","gmt_create":"2026-04-23T20:31:36.597765+08:00","gmt_modified":"2026-04-23T20:31:36.597765+08:00"},{"id":564,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"eabb031e538ea62cab69b01368740d20","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/qingyan.py#10-38","gmt_create":"2026-04-23T20:31:36.598445+08:00","gmt_modified":"2026-04-23T20:31:36.598445+08:00"},{"id":565,"source_id":"303e80519e946904d1cb3ac32cbb0814","target_id":"eabb031e538ea62cab69b01368740d20","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-38","gmt_create":"2026-04-23T20:31:36.599093+08:00","gmt_modified":"2026-04-23T20:31:36.599093+08:00"},{"id":566,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"b1c09e372a63e9854886adaea1663bea","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tiangong.py#10-38","gmt_create":"2026-04-23T20:31:36.599896+08:00","gmt_modified":"2026-04-23T20:31:36.599896+08:00"},{"id":567,"source_id":"5af7301fe056fc3d10820d820e8ad777","target_id":"b1c09e372a63e9854886adaea1663bea","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-38","gmt_create":"2026-04-23T20:31:36.600604+08:00","gmt_modified":"2026-04-23T20:31:36.600604+08:00"},{"id":568,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"79793bcd507f9d287d19014b60d963d3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/xinghuo.py#10-38","gmt_create":"2026-04-23T20:31:36.601204+08:00","gmt_modified":"2026-04-23T20:31:36.601204+08:00"},{"id":569,"source_id":"0e38ad5d2d3daaad08c9302df8805b15","target_id":"79793bcd507f9d287d19014b60d963d3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-38","gmt_create":"2026-04-23T20:31:36.60148+08:00","gmt_modified":"2026-04-23T20:31:36.60148+08:00"},{"id":570,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"102223dd13475177a1ade8b9be14fbd1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#79-144","gmt_create":"2026-04-23T20:31:36.603752+08:00","gmt_modified":"2026-04-23T20:31:36.603752+08:00"},{"id":571,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"102223dd13475177a1ade8b9be14fbd1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 79-144","gmt_create":"2026-04-23T20:31:36.606514+08:00","gmt_modified":"2026-04-23T20:31:36.606514+08:00"},{"id":572,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"8565f299083b4dcba5a328c947f06fee","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#256-287","gmt_create":"2026-04-23T20:31:36.609013+08:00","gmt_modified":"2026-04-23T20:31:36.609013+08:00"},{"id":573,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"8565f299083b4dcba5a328c947f06fee","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 256-287","gmt_create":"2026-04-23T20:31:36.609501+08:00","gmt_modified":"2026-04-23T20:31:36.609501+08:00"},{"id":574,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"8af91caf063c12c8236f9675769ce4a1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_citation_engine.py#1-54","gmt_create":"2026-04-23T20:31:36.610558+08:00","gmt_modified":"2026-04-23T20:31:36.610558+08:00"},{"id":575,"source_id":"b07a4fb9cecbbd66a6910ccbc7651f19","target_id":"8af91caf063c12c8236f9675769ce4a1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-54","gmt_create":"2026-04-23T20:31:36.610946+08:00","gmt_modified":"2026-04-23T20:31:36.610946+08:00"},{"id":576,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"005172b71dc742cf6803c5eb0185091e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/requirements.txt#1-36","gmt_create":"2026-04-23T20:31:36.612653+08:00","gmt_modified":"2026-04-23T20:31:36.612653+08:00"},{"id":577,"source_id":"a26ee01cf41da3b956e1650448c156fa","target_id":"005172b71dc742cf6803c5eb0185091e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-36","gmt_create":"2026-04-23T20:31:36.613263+08:00","gmt_modified":"2026-04-23T20:31:36.613263+08:00"},{"id":578,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"b55cc5936c299f819b57b899858438e6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#139-144","gmt_create":"2026-04-23T20:31:36.614861+08:00","gmt_modified":"2026-04-23T20:31:36.614861+08:00"},{"id":579,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"b55cc5936c299f819b57b899858438e6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 139-144","gmt_create":"2026-04-23T20:31:36.615692+08:00","gmt_modified":"2026-04-23T20:31:36.615692+08:00"},{"id":580,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"384b1939e53970ce7ae75d241a49da5f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tongyi.py#22-29","gmt_create":"2026-04-23T20:31:36.615996+08:00","gmt_modified":"2026-04-23T20:31:36.615996+08:00"},{"id":581,"source_id":"e68ad5186f1e47610ab3d9f14a794393","target_id":"384b1939e53970ce7ae75d241a49da5f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 22-29","gmt_create":"2026-04-23T20:31:36.61682+08:00","gmt_modified":"2026-04-23T20:31:36.61682+08:00"},{"id":582,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"f096aa3ea82e9fa625a9acb1309b4c50","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#231-247","gmt_create":"2026-04-23T20:31:36.617171+08:00","gmt_modified":"2026-04-23T20:31:36.617171+08:00"},{"id":583,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"f096aa3ea82e9fa625a9acb1309b4c50","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 231-247","gmt_create":"2026-04-23T20:31:36.617385+08:00","gmt_modified":"2026-04-23T20:31:36.617385+08:00"},{"id":584,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"15b8ebf74b0a5dfac58024d323ca8d0a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#164-175","gmt_create":"2026-04-23T20:31:36.618327+08:00","gmt_modified":"2026-04-23T20:31:36.618327+08:00"},{"id":585,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"15b8ebf74b0a5dfac58024d323ca8d0a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 164-175","gmt_create":"2026-04-23T20:31:36.618609+08:00","gmt_modified":"2026-04-23T20:31:36.618609+08:00"},{"id":586,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"f642fc1c2f34e15572d9d98aa6c18813","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-23T20:31:50.473102+08:00","gmt_modified":"2026-04-23T20:31:50.473102+08:00"},{"id":587,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"a16cf42e9559523c4f96ca4c79f9488d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/base.py","gmt_create":"2026-04-23T20:31:50.473614+08:00","gmt_modified":"2026-04-23T20:31:50.473614+08:00"},{"id":588,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"6a63f048c16c60c5d2d57012c810ee0e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/search_engine.py","gmt_create":"2026-04-23T20:31:50.474171+08:00","gmt_modified":"2026-04-23T20:31:50.474171+08:00"},{"id":589,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"74040de652d5e57f548bb5c4adc3e1a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/citation_engine.py","gmt_create":"2026-04-23T20:31:50.474429+08:00","gmt_modified":"2026-04-23T20:31:50.474429+08:00"},{"id":590,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T20:31:50.474658+08:00","gmt_modified":"2026-04-23T20:31:50.474658+08:00"},{"id":591,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T20:31:50.474883+08:00","gmt_modified":"2026-04-23T20:31:50.474883+08:00"},{"id":592,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"6b3d903205941aa9391dd90016e1102c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/queries.py","gmt_create":"2026-04-23T20:31:50.475158+08:00","gmt_modified":"2026-04-23T20:31:50.475158+08:00"},{"id":593,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"e9b52adbec3c07cf021e488dd3f99ab4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/Dockerfile","gmt_create":"2026-04-23T20:31:50.475559+08:00","gmt_modified":"2026-04-23T20:31:50.475559+08:00"},{"id":594,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"8f973791233c698b3e64a4fb28a93d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/kimi.py","gmt_create":"2026-04-23T20:31:50.475799+08:00","gmt_modified":"2026-04-23T20:31:50.475799+08:00"},{"id":595,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"e68ad5186f1e47610ab3d9f14a794393","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/tongyi.py","gmt_create":"2026-04-23T20:31:50.47602+08:00","gmt_modified":"2026-04-23T20:31:50.47602+08:00"},{"id":596,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"42ff5383133d176cec9eb88682483be3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_citations.py","gmt_create":"2026-04-23T20:31:50.476237+08:00","gmt_modified":"2026-04-23T20:31:50.476237+08:00"},{"id":597,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"72a110dca58d8152758e2fdab4e94761","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#1-18","gmt_create":"2026-04-23T20:31:50.476528+08:00","gmt_modified":"2026-04-23T20:31:50.476528+08:00"},{"id":598,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"bcfade20d923c8efa713808ca9af94ca","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#10-38","gmt_create":"2026-04-23T20:31:50.476982+08:00","gmt_modified":"2026-04-23T20:31:50.476982+08:00"},{"id":599,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"bcfade20d923c8efa713808ca9af94ca","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-38","gmt_create":"2026-04-23T20:31:50.477216+08:00","gmt_modified":"2026-04-23T20:31:50.477216+08:00"},{"id":600,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"ca7e1232fbba5fb75e04ab8e491bfbd1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#10-38","gmt_create":"2026-04-23T20:31:50.477565+08:00","gmt_modified":"2026-04-23T20:31:50.477565+08:00"},{"id":601,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"ca7e1232fbba5fb75e04ab8e491bfbd1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-38","gmt_create":"2026-04-23T20:31:50.477978+08:00","gmt_modified":"2026-04-23T20:31:50.477978+08:00"},{"id":602,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"c5ae7697193b2b93425ff25d2d7d54a9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tongyi.py#10-38","gmt_create":"2026-04-23T20:31:50.478592+08:00","gmt_modified":"2026-04-23T20:31:50.478592+08:00"},{"id":603,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"557ae34b57a5dd8e8fa3bb2a6ce178a7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#163-174","gmt_create":"2026-04-23T20:31:50.479311+08:00","gmt_modified":"2026-04-23T20:31:50.479311+08:00"},{"id":604,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"9720b93ed7247efb685e2825e5f964bf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#161-176","gmt_create":"2026-04-23T20:31:50.479856+08:00","gmt_modified":"2026-04-23T20:31:50.479856+08:00"},{"id":605,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"9720b93ed7247efb685e2825e5f964bf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 161-176","gmt_create":"2026-04-23T20:31:50.48037+08:00","gmt_modified":"2026-04-23T20:31:50.48037+08:00"},{"id":606,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"0d226400124ba891a46f59c36781ccd8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#9-23","gmt_create":"2026-04-23T20:31:50.481311+08:00","gmt_modified":"2026-04-23T20:31:50.481311+08:00"},{"id":607,"source_id":"9ff19022ef915615911280e3c49ed44b","target_id":"0d226400124ba891a46f59c36781ccd8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 9-23","gmt_create":"2026-04-23T20:31:50.481625+08:00","gmt_modified":"2026-04-23T20:31:50.481625+08:00"},{"id":608,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"412695e5de2014514a8f62f98c573656","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/Dockerfile#1-41","gmt_create":"2026-04-23T20:31:50.482236+08:00","gmt_modified":"2026-04-23T20:31:50.482236+08:00"},{"id":609,"source_id":"e9b52adbec3c07cf021e488dd3f99ab4","target_id":"412695e5de2014514a8f62f98c573656","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-41","gmt_create":"2026-04-23T20:31:50.483281+08:00","gmt_modified":"2026-04-23T20:31:50.483281+08:00"},{"id":610,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"4fb8856be3a581fe8303d11b2284ca29","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#11-55","gmt_create":"2026-04-23T20:31:50.483853+08:00","gmt_modified":"2026-04-23T20:31:50.483854+08:00"},{"id":611,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"485e15eb30a5b08da38a628c9dd5053e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#16-77","gmt_create":"2026-04-23T20:31:50.48646+08:00","gmt_modified":"2026-04-23T20:31:50.48646+08:00"},{"id":612,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"485e15eb30a5b08da38a628c9dd5053e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-77","gmt_create":"2026-04-23T20:31:50.486841+08:00","gmt_modified":"2026-04-23T20:31:50.486841+08:00"},{"id":613,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"ad67863041d9eea2b0fb542b5aa33aca","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#4-18","gmt_create":"2026-04-23T20:31:50.487399+08:00","gmt_modified":"2026-04-23T20:31:50.487399+08:00"},{"id":614,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"8565f299083b4dcba5a328c947f06fee","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#256-287","gmt_create":"2026-04-23T20:31:50.488281+08:00","gmt_modified":"2026-04-23T20:31:50.488281+08:00"},{"id":615,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"77158a6f887e224a03552893bfec7c92","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#16-33","gmt_create":"2026-04-23T20:31:50.488807+08:00","gmt_modified":"2026-04-23T20:31:50.488807+08:00"},{"id":616,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"77158a6f887e224a03552893bfec7c92","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-33","gmt_create":"2026-04-23T20:31:50.489038+08:00","gmt_modified":"2026-04-23T20:31:50.489038+08:00"},{"id":617,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"5c3f336b5a7b4af4cc2f2ac183539218","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#79-145","gmt_create":"2026-04-23T20:31:50.491706+08:00","gmt_modified":"2026-04-23T20:31:50.491706+08:00"},{"id":618,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"5c3f336b5a7b4af4cc2f2ac183539218","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 79-145","gmt_create":"2026-04-23T20:31:50.492445+08:00","gmt_modified":"2026-04-23T20:31:50.492445+08:00"},{"id":619,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"3894c1ed9dca2ebf2359f40ebdb1959e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#147-174","gmt_create":"2026-04-23T20:31:50.493129+08:00","gmt_modified":"2026-04-23T20:31:50.493129+08:00"},{"id":620,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"3894c1ed9dca2ebf2359f40ebdb1959e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 147-174","gmt_create":"2026-04-23T20:31:50.493716+08:00","gmt_modified":"2026-04-23T20:31:50.493716+08:00"},{"id":621,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"362d22f423631cda39404660b3317a2f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#177-254","gmt_create":"2026-04-23T20:31:50.494347+08:00","gmt_modified":"2026-04-23T20:31:50.494348+08:00"},{"id":622,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"e27bcba24aaadeec1922d2b4e5b8386b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#1-109","gmt_create":"2026-04-23T20:31:50.496521+08:00","gmt_modified":"2026-04-23T20:31:50.496521+08:00"},{"id":623,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"e27bcba24aaadeec1922d2b4e5b8386b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-109","gmt_create":"2026-04-23T20:31:50.496915+08:00","gmt_modified":"2026-04-23T20:31:50.496915+08:00"},{"id":624,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"5f893f5078aa8e549284feb057aa45da","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#16-29","gmt_create":"2026-04-23T20:31:50.499115+08:00","gmt_modified":"2026-04-23T20:31:50.499115+08:00"},{"id":625,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"5f893f5078aa8e549284feb057aa45da","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-29","gmt_create":"2026-04-23T20:31:50.49944+08:00","gmt_modified":"2026-04-23T20:31:50.49944+08:00"},{"id":626,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"b55cc5936c299f819b57b899858438e6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#139-144","gmt_create":"2026-04-23T20:31:50.50016+08:00","gmt_modified":"2026-04-23T20:31:50.50016+08:00"},{"id":627,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"e0b68d2d24760689a0f4f00dfee5f9f2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#28-76","gmt_create":"2026-04-23T20:31:50.500908+08:00","gmt_modified":"2026-04-23T20:31:50.500908+08:00"},{"id":628,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"e0b68d2d24760689a0f4f00dfee5f9f2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 28-76","gmt_create":"2026-04-23T20:31:50.501388+08:00","gmt_modified":"2026-04-23T20:31:50.501388+08:00"},{"id":629,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"e9b98ae83632342d8e06cde39e9c9462","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#105-137","gmt_create":"2026-04-23T20:31:50.502229+08:00","gmt_modified":"2026-04-23T20:31:50.502229+08:00"},{"id":630,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"e9b98ae83632342d8e06cde39e9c9462","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 105-137","gmt_create":"2026-04-23T20:31:50.502758+08:00","gmt_modified":"2026-04-23T20:31:50.502758+08:00"},{"id":631,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"f096aa3ea82e9fa625a9acb1309b4c50","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#231-247","gmt_create":"2026-04-23T20:31:50.503532+08:00","gmt_modified":"2026-04-23T20:31:50.503532+08:00"},{"id":632,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"2a4f741f31f62dce8ad63be2e831f520","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_citations.py#23-93","gmt_create":"2026-04-23T20:31:50.504205+08:00","gmt_modified":"2026-04-23T20:31:50.504206+08:00"},{"id":633,"source_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","target_id":"c86edb7a95fbe4b431ac65a0e2b8636e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#90-109","gmt_create":"2026-04-23T20:31:50.504719+08:00","gmt_modified":"2026-04-23T20:31:50.504719+08:00"},{"id":634,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"c86edb7a95fbe4b431ac65a0e2b8636e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 90-109","gmt_create":"2026-04-23T20:31:50.505358+08:00","gmt_modified":"2026-04-23T20:31:50.505358+08:00"},{"id":635,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/scheduler.py","gmt_create":"2026-04-23T20:33:30.005285+08:00","gmt_modified":"2026-04-23T20:33:30.005285+08:00"},{"id":636,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"74040de652d5e57f548bb5c4adc3e1a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/citation_engine.py","gmt_create":"2026-04-23T20:33:30.006785+08:00","gmt_modified":"2026-04-23T20:33:30.006785+08:00"},{"id":637,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T20:33:30.008852+08:00","gmt_modified":"2026-04-23T20:33:30.008852+08:00"},{"id":638,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T20:33:30.010802+08:00","gmt_modified":"2026-04-23T20:33:30.010803+08:00"},{"id":639,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"9228ff67d4c757a85d9421b71f4b29f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/main.py","gmt_create":"2026-04-23T20:33:30.011496+08:00","gmt_modified":"2026-04-23T20:33:30.011496+08:00"},{"id":640,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"b0c428683c8a3e6922d90ca0d8c2736d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/database.py","gmt_create":"2026-04-23T20:33:30.012521+08:00","gmt_modified":"2026-04-23T20:33:30.012521+08:00"},{"id":641,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T20:33:30.013288+08:00","gmt_modified":"2026-04-23T20:33:30.013288+08:00"},{"id":642,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"8f973791233c698b3e64a4fb28a93d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/kimi.py","gmt_create":"2026-04-23T20:33:30.014048+08:00","gmt_modified":"2026-04-23T20:33:30.014048+08:00"},{"id":643,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"f642fc1c2f34e15572d9d98aa6c18813","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-23T20:33:30.014998+08:00","gmt_modified":"2026-04-23T20:33:30.014998+08:00"},{"id":644,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"a16cf42e9559523c4f96ca4c79f9488d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/base.py","gmt_create":"2026-04-23T20:33:30.015593+08:00","gmt_modified":"2026-04-23T20:33:30.015593+08:00"},{"id":645,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T20:33:30.016186+08:00","gmt_modified":"2026-04-23T20:33:30.016187+08:00"},{"id":646,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"88d22de3b2a7419868e8ae19130d860c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/query.py","gmt_create":"2026-04-23T20:33:30.017118+08:00","gmt_modified":"2026-04-23T20:33:30.017118+08:00"},{"id":647,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"b2f0d46a31a5441594f2e777365fc156","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_scheduler.py","gmt_create":"2026-04-23T20:33:30.017481+08:00","gmt_modified":"2026-04-23T20:33:30.017481+08:00"},{"id":648,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"096856da621e23e78422a15e2bfce1f1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#13-22","gmt_create":"2026-04-23T20:33:30.018279+08:00","gmt_modified":"2026-04-23T20:33:30.018279+08:00"},{"id":649,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"e230904202fcf7a861c6f49b84f9f863","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#25-95","gmt_create":"2026-04-23T20:33:30.019076+08:00","gmt_modified":"2026-04-23T20:33:30.019076+08:00"},{"id":650,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"309607c54b12a6340edc086ffb4737c9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#148-309","gmt_create":"2026-04-23T20:33:30.020384+08:00","gmt_modified":"2026-04-23T20:33:30.020384+08:00"},{"id":651,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"6e054d9a78c0c8c9da8dec4c4bda62ab","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#6-28","gmt_create":"2026-04-23T20:33:30.021894+08:00","gmt_modified":"2026-04-23T20:33:30.021895+08:00"},{"id":652,"source_id":"b0c428683c8a3e6922d90ca0d8c2736d","target_id":"6e054d9a78c0c8c9da8dec4c4bda62ab","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 6-28","gmt_create":"2026-04-23T20:33:30.022319+08:00","gmt_modified":"2026-04-23T20:33:30.022319+08:00"},{"id":653,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"4fb8856be3a581fe8303d11b2284ca29","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#11-55","gmt_create":"2026-04-23T20:33:30.039084+08:00","gmt_modified":"2026-04-23T20:33:30.039085+08:00"},{"id":654,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"c2747ca16b879bca0f68955534c3c4fc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#1-48","gmt_create":"2026-04-23T20:33:30.042279+08:00","gmt_modified":"2026-04-23T20:33:30.042279+08:00"},{"id":655,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"71f98c8993fb42b108e34a554247869b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#1-95","gmt_create":"2026-04-23T20:33:30.043781+08:00","gmt_modified":"2026-04-23T20:33:30.043781+08:00"},{"id":656,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"9bfc041fe426da2eb78353827e8d9163","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#1-29","gmt_create":"2026-04-23T20:33:30.048591+08:00","gmt_modified":"2026-04-23T20:33:30.048591+08:00"},{"id":657,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"6281fff17a86ec1895c64d87c2ae7fb1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#1-55","gmt_create":"2026-04-23T20:33:30.049875+08:00","gmt_modified":"2026-04-23T20:33:30.049875+08:00"},{"id":658,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"eecf9581dbaa0a515cf11514175e7ef9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#11-206","gmt_create":"2026-04-23T20:33:30.052505+08:00","gmt_modified":"2026-04-23T20:33:30.052505+08:00"},{"id":659,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"5563c29185326a59be61ee0a6eec4463","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#11-205","gmt_create":"2026-04-23T20:33:30.054452+08:00","gmt_modified":"2026-04-23T20:33:30.054452+08:00"},{"id":660,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"9c16a069e5154660bfdfa48f3518fc6a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#11-38","gmt_create":"2026-04-23T20:33:30.056033+08:00","gmt_modified":"2026-04-23T20:33:30.056033+08:00"},{"id":661,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"9c16a069e5154660bfdfa48f3518fc6a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-38","gmt_create":"2026-04-23T20:33:30.056759+08:00","gmt_modified":"2026-04-23T20:33:30.056759+08:00"},{"id":662,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"2d35e1345d25020f8e7ac1318db06f7b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#30-90","gmt_create":"2026-04-23T20:33:30.060127+08:00","gmt_modified":"2026-04-23T20:33:30.060127+08:00"},{"id":663,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"160b5326537d25444c40a459a01e79c6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#159-234","gmt_create":"2026-04-23T20:33:30.06165+08:00","gmt_modified":"2026-04-23T20:33:30.06165+08:00"},{"id":664,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"a4918fcbd21492ad996d7f5496f03a4b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#33-48","gmt_create":"2026-04-23T20:33:30.063084+08:00","gmt_modified":"2026-04-23T20:33:30.063084+08:00"},{"id":665,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"a4918fcbd21492ad996d7f5496f03a4b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-48","gmt_create":"2026-04-23T20:33:30.063941+08:00","gmt_modified":"2026-04-23T20:33:30.063941+08:00"},{"id":666,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"bc38d046b4b1410ae2165cee2272839e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#33-48","gmt_create":"2026-04-23T20:33:30.065013+08:00","gmt_modified":"2026-04-23T20:33:30.065013+08:00"},{"id":667,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"bc38d046b4b1410ae2165cee2272839e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-48","gmt_create":"2026-04-23T20:33:30.066091+08:00","gmt_modified":"2026-04-23T20:33:30.066091+08:00"},{"id":668,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"72f6d334026866e8a61d2ffb1d83370a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#19-100","gmt_create":"2026-04-23T20:33:30.06977+08:00","gmt_modified":"2026-04-23T20:33:30.06977+08:00"},{"id":669,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"72f6d334026866e8a61d2ffb1d83370a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 19-100","gmt_create":"2026-04-23T20:33:30.070839+08:00","gmt_modified":"2026-04-23T20:33:30.070839+08:00"},{"id":670,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"5c67e2f70283956b2d29a3c1443eb514","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#122-146","gmt_create":"2026-04-23T20:33:30.07226+08:00","gmt_modified":"2026-04-23T20:33:30.07226+08:00"},{"id":671,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"ad67863041d9eea2b0fb542b5aa33aca","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#4-18","gmt_create":"2026-04-23T20:33:30.076075+08:00","gmt_modified":"2026-04-23T20:33:30.076076+08:00"},{"id":672,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"1e85186eded8743ff5f231df4aa6df3f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#21-48","gmt_create":"2026-04-23T20:33:30.080882+08:00","gmt_modified":"2026-04-23T20:33:30.080882+08:00"},{"id":673,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"1d84b9a7eb013882953a2d1d948299e4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#126-197","gmt_create":"2026-04-23T20:33:30.082996+08:00","gmt_modified":"2026-04-23T20:33:30.082997+08:00"},{"id":674,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"1d84b9a7eb013882953a2d1d948299e4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 126-197","gmt_create":"2026-04-23T20:33:30.084021+08:00","gmt_modified":"2026-04-23T20:33:30.084021+08:00"},{"id":675,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"e2b1718570fb714b2f4342221898ab30","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#21-48","gmt_create":"2026-04-23T20:33:30.08518+08:00","gmt_modified":"2026-04-23T20:33:30.085181+08:00"},{"id":676,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"ba687f2c64aff92b3906658359ed953a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#124-195","gmt_create":"2026-04-23T20:33:30.086912+08:00","gmt_modified":"2026-04-23T20:33:30.086913+08:00"},{"id":677,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"ba687f2c64aff92b3906658359ed953a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 124-195","gmt_create":"2026-04-23T20:33:30.087917+08:00","gmt_modified":"2026-04-23T20:33:30.087917+08:00"},{"id":678,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"52ee729b02c992c689522c7956c14128","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#57-62","gmt_create":"2026-04-23T20:33:30.090606+08:00","gmt_modified":"2026-04-23T20:33:30.090606+08:00"},{"id":679,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"52ee729b02c992c689522c7956c14128","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 57-62","gmt_create":"2026-04-23T20:33:30.092747+08:00","gmt_modified":"2026-04-23T20:33:30.092747+08:00"},{"id":680,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"c9e32b7324cce60c8887deb8404ee759","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#107-112","gmt_create":"2026-04-23T20:33:30.094246+08:00","gmt_modified":"2026-04-23T20:33:30.094246+08:00"},{"id":681,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"c9e32b7324cce60c8887deb8404ee759","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 107-112","gmt_create":"2026-04-23T20:33:30.095189+08:00","gmt_modified":"2026-04-23T20:33:30.095189+08:00"},{"id":682,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"212d822d207a4c0bd7825bbf20e188e9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#59-77","gmt_create":"2026-04-23T20:33:30.096673+08:00","gmt_modified":"2026-04-23T20:33:30.096673+08:00"},{"id":683,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"8355d3821337334caee57a75dc8c8865","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#116-130","gmt_create":"2026-04-23T20:33:30.098422+08:00","gmt_modified":"2026-04-23T20:33:30.098422+08:00"},{"id":684,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"8355d3821337334caee57a75dc8c8865","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 116-130","gmt_create":"2026-04-23T20:33:30.099427+08:00","gmt_modified":"2026-04-23T20:33:30.099427+08:00"},{"id":685,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"4fe27d4d1323b500e72d870aa6212a1a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#13-20","gmt_create":"2026-04-23T20:33:30.101771+08:00","gmt_modified":"2026-04-23T20:33:30.101771+08:00"},{"id":686,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"4fe27d4d1323b500e72d870aa6212a1a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-20","gmt_create":"2026-04-23T20:33:30.102515+08:00","gmt_modified":"2026-04-23T20:33:30.102515+08:00"},{"id":687,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"3729543092bccad8926c5ea852db1e69","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#148-157","gmt_create":"2026-04-23T20:33:30.103598+08:00","gmt_modified":"2026-04-23T20:33:30.103599+08:00"},{"id":688,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"3729543092bccad8926c5ea852db1e69","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 148-157","gmt_create":"2026-04-23T20:33:30.104105+08:00","gmt_modified":"2026-04-23T20:33:30.104105+08:00"},{"id":689,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"1ee5153c867fc6e9d277a3067963a1fc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#32-38","gmt_create":"2026-04-23T20:33:30.105113+08:00","gmt_modified":"2026-04-23T20:33:30.105113+08:00"},{"id":690,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"1ee5153c867fc6e9d277a3067963a1fc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 32-38","gmt_create":"2026-04-23T20:33:30.105627+08:00","gmt_modified":"2026-04-23T20:33:30.105627+08:00"},{"id":691,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"ed527c7a549ec333c2b30b59614343df","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#50-54","gmt_create":"2026-04-23T20:33:30.106672+08:00","gmt_modified":"2026-04-23T20:33:30.106672+08:00"},{"id":692,"source_id":"b74caccb06844efcdb14d8324cff65c2","target_id":"ed527c7a549ec333c2b30b59614343df","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 50-54","gmt_create":"2026-04-23T20:33:30.107651+08:00","gmt_modified":"2026-04-23T20:33:30.107651+08:00"},{"id":693,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"f6c9f1b4e8646c366a31426a4537675d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#36-38","gmt_create":"2026-04-23T20:33:30.109238+08:00","gmt_modified":"2026-04-23T20:33:30.109238+08:00"},{"id":694,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"1a3351698ecc7cd4e508b7a792804fc4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#302-309","gmt_create":"2026-04-23T20:33:30.111966+08:00","gmt_modified":"2026-04-23T20:33:30.111966+08:00"},{"id":695,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"1a3351698ecc7cd4e508b7a792804fc4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 302-309","gmt_create":"2026-04-23T20:33:30.112959+08:00","gmt_modified":"2026-04-23T20:33:30.11296+08:00"},{"id":696,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"e3e9710c7eead933c936519395f792e0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#44-49","gmt_create":"2026-04-23T20:33:30.114604+08:00","gmt_modified":"2026-04-23T20:33:30.114605+08:00"},{"id":697,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"e3e9710c7eead933c936519395f792e0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 44-49","gmt_create":"2026-04-23T20:33:30.115247+08:00","gmt_modified":"2026-04-23T20:33:30.115247+08:00"},{"id":698,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"d20fc729a5d3986b1c077f9e07ece9c4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#7","gmt_create":"2026-04-23T20:33:30.116587+08:00","gmt_modified":"2026-04-23T20:33:30.116587+08:00"},{"id":699,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"a4143cc29b14f1f5bc75a5e021690666","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#23-31","gmt_create":"2026-04-23T20:33:30.117646+08:00","gmt_modified":"2026-04-23T20:33:30.117646+08:00"},{"id":700,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"a4143cc29b14f1f5bc75a5e021690666","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-31","gmt_create":"2026-04-23T20:33:30.118764+08:00","gmt_modified":"2026-04-23T20:33:30.118764+08:00"},{"id":701,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"7192cfda5508e7587efd91d26cf1f018","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#23-31","gmt_create":"2026-04-23T20:33:30.120253+08:00","gmt_modified":"2026-04-23T20:33:30.120253+08:00"},{"id":702,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"7192cfda5508e7587efd91d26cf1f018","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-31","gmt_create":"2026-04-23T20:33:30.121853+08:00","gmt_modified":"2026-04-23T20:33:30.121853+08:00"},{"id":703,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"38142b7d7016c5590e638fafcdcb1a19","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#211-227","gmt_create":"2026-04-23T20:33:30.1234+08:00","gmt_modified":"2026-04-23T20:33:30.1234+08:00"},{"id":704,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"38142b7d7016c5590e638fafcdcb1a19","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 211-227","gmt_create":"2026-04-23T20:33:30.125433+08:00","gmt_modified":"2026-04-23T20:33:30.125433+08:00"},{"id":705,"source_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","target_id":"fb5276346dcc4e7044d8765a8572e7a8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#4-16","gmt_create":"2026-04-23T20:33:30.128657+08:00","gmt_modified":"2026-04-23T20:33:30.128657+08:00"},{"id":706,"source_id":"9ff19022ef915615911280e3c49ed44b","target_id":"fb5276346dcc4e7044d8765a8572e7a8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 4-16","gmt_create":"2026-04-23T20:33:30.129814+08:00","gmt_modified":"2026-04-23T20:33:30.129814+08:00"},{"id":707,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"74040de652d5e57f548bb5c4adc3e1a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/citation_engine.py","gmt_create":"2026-04-23T20:33:37.259749+08:00","gmt_modified":"2026-04-23T20:33:37.259749+08:00"},{"id":708,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"a16cf42e9559523c4f96ca4c79f9488d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/base.py","gmt_create":"2026-04-23T20:33:37.26107+08:00","gmt_modified":"2026-04-23T20:33:37.26107+08:00"},{"id":709,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"8f973791233c698b3e64a4fb28a93d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/kimi.py","gmt_create":"2026-04-23T20:33:37.261714+08:00","gmt_modified":"2026-04-23T20:33:37.261714+08:00"},{"id":710,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"f642fc1c2f34e15572d9d98aa6c18813","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-23T20:33:37.262532+08:00","gmt_modified":"2026-04-23T20:33:37.262532+08:00"},{"id":711,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"e68ad5186f1e47610ab3d9f14a794393","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/tongyi.py","gmt_create":"2026-04-23T20:33:37.263665+08:00","gmt_modified":"2026-04-23T20:33:37.263665+08:00"},{"id":712,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"404f6d0765a8c6e77e33b7fc21b377a4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/doubao.py","gmt_create":"2026-04-23T20:33:37.26425+08:00","gmt_modified":"2026-04-23T20:33:37.26425+08:00"},{"id":713,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"303e80519e946904d1cb3ac32cbb0814","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/qingyan.py","gmt_create":"2026-04-23T20:33:37.265278+08:00","gmt_modified":"2026-04-23T20:33:37.265278+08:00"},{"id":714,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"5af7301fe056fc3d10820d820e8ad777","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/tiangong.py","gmt_create":"2026-04-23T20:33:37.265809+08:00","gmt_modified":"2026-04-23T20:33:37.265809+08:00"},{"id":715,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"0e38ad5d2d3daaad08c9302df8805b15","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/xinghuo.py","gmt_create":"2026-04-23T20:33:37.266496+08:00","gmt_modified":"2026-04-23T20:33:37.266496+08:00"},{"id":716,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"6a63f048c16c60c5d2d57012c810ee0e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/search_engine.py","gmt_create":"2026-04-23T20:33:37.267203+08:00","gmt_modified":"2026-04-23T20:33:37.267203+08:00"},{"id":717,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/scheduler.py","gmt_create":"2026-04-23T20:33:37.268722+08:00","gmt_modified":"2026-04-23T20:33:37.268722+08:00"},{"id":718,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"04e3926c080e795713bff683e7dc9d3e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/citation.py","gmt_create":"2026-04-23T20:33:37.269288+08:00","gmt_modified":"2026-04-23T20:33:37.269288+08:00"},{"id":719,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T20:33:37.270139+08:00","gmt_modified":"2026-04-23T20:33:37.270139+08:00"},{"id":720,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"b4a81ef789630d0af6a8d50859d01bf3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/citation_record.py","gmt_create":"2026-04-23T20:33:37.273632+08:00","gmt_modified":"2026-04-23T20:33:37.273632+08:00"},{"id":721,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T20:33:37.275218+08:00","gmt_modified":"2026-04-23T20:33:37.275218+08:00"},{"id":722,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T20:33:37.276269+08:00","gmt_modified":"2026-04-23T20:33:37.27627+08:00"},{"id":723,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T20:33:37.277294+08:00","gmt_modified":"2026-04-23T20:33:37.277294+08:00"},{"id":724,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"9228ff67d4c757a85d9421b71f4b29f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/main.py","gmt_create":"2026-04-23T20:33:37.278423+08:00","gmt_modified":"2026-04-23T20:33:37.278423+08:00"},{"id":725,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"b07a4fb9cecbbd66a6910ccbc7651f19","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_citation_engine.py","gmt_create":"2026-04-23T20:33:37.279079+08:00","gmt_modified":"2026-04-23T20:33:37.279079+08:00"},{"id":726,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"a26ee01cf41da3b956e1650448c156fa","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/requirements.txt","gmt_create":"2026-04-23T20:33:37.279629+08:00","gmt_modified":"2026-04-23T20:33:37.27963+08:00"},{"id":727,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"cbd0101fa84d957bcb1baaa623c6b31c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#1-78","gmt_create":"2026-04-23T20:33:37.280454+08:00","gmt_modified":"2026-04-23T20:33:37.280454+08:00"},{"id":728,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"6b3d903205941aa9391dd90016e1102c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/queries.py","gmt_create":"2026-04-23T20:33:37.281512+08:00","gmt_modified":"2026-04-23T20:33:37.281513+08:00"},{"id":729,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"482d573f97b482b99bcde1c399eceb73","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#90-108","gmt_create":"2026-04-23T20:33:37.281875+08:00","gmt_modified":"2026-04-23T20:33:37.281876+08:00"},{"id":730,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"482d573f97b482b99bcde1c399eceb73","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 90-108","gmt_create":"2026-04-23T20:33:37.28285+08:00","gmt_modified":"2026-04-23T20:33:37.28285+08:00"},{"id":731,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"7c0831c17e8c65eaed9511e17ed2a2ef","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#1-269","gmt_create":"2026-04-23T20:33:37.283208+08:00","gmt_modified":"2026-04-23T20:33:37.283208+08:00"},{"id":732,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"88d22de3b2a7419868e8ae19130d860c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/query.py","gmt_create":"2026-04-23T20:33:37.283598+08:00","gmt_modified":"2026-04-23T20:33:37.283598+08:00"},{"id":733,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"4cef9e740b6feb68c6bd22b660c47320","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#1-123","gmt_create":"2026-04-23T20:33:37.284031+08:00","gmt_modified":"2026-04-23T20:33:37.284031+08:00"},{"id":734,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"8d5aac2ae0671f05d7c0807ba9296cdf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#1-330","gmt_create":"2026-04-23T20:33:37.284881+08:00","gmt_modified":"2026-04-23T20:33:37.284881+08:00"},{"id":735,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"72a110dca58d8152758e2fdab4e94761","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#1-18","gmt_create":"2026-04-23T20:33:37.285439+08:00","gmt_modified":"2026-04-23T20:33:37.285439+08:00"},{"id":736,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"56f44cc97867cee3e5663424134d6072","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#1-37","gmt_create":"2026-04-23T20:33:37.285889+08:00","gmt_modified":"2026-04-23T20:33:37.285889+08:00"},{"id":737,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"56f44cc97867cee3e5663424134d6072","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-04-23T20:33:37.286195+08:00","gmt_modified":"2026-04-23T20:33:37.286195+08:00"},{"id":738,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"2e326ef8322619f1e8b3873022cb0437","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#1-37","gmt_create":"2026-04-23T20:33:37.286846+08:00","gmt_modified":"2026-04-23T20:33:37.286846+08:00"},{"id":739,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"2e326ef8322619f1e8b3873022cb0437","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-04-23T20:33:37.287299+08:00","gmt_modified":"2026-04-23T20:33:37.287299+08:00"},{"id":740,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"debd789847d1eed2d54198772edf68a2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tongyi.py#1-38","gmt_create":"2026-04-23T20:33:37.28771+08:00","gmt_modified":"2026-04-23T20:33:37.287711+08:00"},{"id":741,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"3bde521d18cc7221ae2f14637e163aac","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/doubao.py#1-38","gmt_create":"2026-04-23T20:33:37.288659+08:00","gmt_modified":"2026-04-23T20:33:37.288659+08:00"},{"id":742,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"c26862d9e0fc878b51a2668cfd2ec827","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/qingyan.py#1-38","gmt_create":"2026-04-23T20:33:37.290497+08:00","gmt_modified":"2026-04-23T20:33:37.290498+08:00"},{"id":743,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"0fcc9c2e0d33b887c5f18a3807b64a1e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tiangong.py#1-38","gmt_create":"2026-04-23T20:33:37.292345+08:00","gmt_modified":"2026-04-23T20:33:37.292345+08:00"},{"id":744,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"a4baa2444208b3f9a3f42bc492038207","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/xinghuo.py#1-38","gmt_create":"2026-04-23T20:33:37.293708+08:00","gmt_modified":"2026-04-23T20:33:37.293708+08:00"},{"id":745,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"9f82f6d82bf914a608d6afa3d9854abf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#1-174","gmt_create":"2026-04-23T20:33:37.2944+08:00","gmt_modified":"2026-04-23T20:33:37.2944+08:00"},{"id":746,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"4cac57dbc530f0335c913ec5725dfa4f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#1-121","gmt_create":"2026-04-23T20:33:37.295331+08:00","gmt_modified":"2026-04-23T20:33:37.295331+08:00"},{"id":747,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"4cac57dbc530f0335c913ec5725dfa4f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-121","gmt_create":"2026-04-23T20:33:37.296239+08:00","gmt_modified":"2026-04-23T20:33:37.296239+08:00"},{"id":748,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"6281fff17a86ec1895c64d87c2ae7fb1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#1-55","gmt_create":"2026-04-23T20:33:37.296858+08:00","gmt_modified":"2026-04-23T20:33:37.296858+08:00"},{"id":749,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"6628e006b8e5ca16160743528b6b0506","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#1-39","gmt_create":"2026-04-23T20:33:37.297624+08:00","gmt_modified":"2026-04-23T20:33:37.297624+08:00"},{"id":750,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"943c18db69a04b3137fba4cebcfea87e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#1-42","gmt_create":"2026-04-23T20:33:37.298765+08:00","gmt_modified":"2026-04-23T20:33:37.298765+08:00"},{"id":751,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"84fbed7d35f7752e2117a74fcaf5f0e9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#1-17","gmt_create":"2026-04-23T20:33:37.299752+08:00","gmt_modified":"2026-04-23T20:33:37.299752+08:00"},{"id":752,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"c2747ca16b879bca0f68955534c3c4fc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#1-48","gmt_create":"2026-04-23T20:33:37.30067+08:00","gmt_modified":"2026-04-23T20:33:37.30067+08:00"},{"id":753,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"db174cfe219fc84d0dd26529f047b1d0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#161-330","gmt_create":"2026-04-23T20:33:37.304109+08:00","gmt_modified":"2026-04-23T20:33:37.304109+08:00"},{"id":754,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"db174cfe219fc84d0dd26529f047b1d0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 161-330","gmt_create":"2026-04-23T20:33:37.304836+08:00","gmt_modified":"2026-04-23T20:33:37.304836+08:00"},{"id":755,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"f36452f78aabfb0c46da03bbe25dff06","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#219-295","gmt_create":"2026-04-23T20:33:37.307629+08:00","gmt_modified":"2026-04-23T20:33:37.307629+08:00"},{"id":756,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"f36452f78aabfb0c46da03bbe25dff06","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 219-295","gmt_create":"2026-04-23T20:33:37.308258+08:00","gmt_modified":"2026-04-23T20:33:37.308258+08:00"},{"id":757,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"362d22f423631cda39404660b3317a2f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#177-254","gmt_create":"2026-04-23T20:33:37.310127+08:00","gmt_modified":"2026-04-23T20:33:37.310127+08:00"},{"id":758,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"b475ff5225ac403c7fcf3dd7e14cbac6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tongyi.py#16-33","gmt_create":"2026-04-23T20:33:37.31061+08:00","gmt_modified":"2026-04-23T20:33:37.31061+08:00"},{"id":759,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"557ae34b57a5dd8e8fa3bb2a6ce178a7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#163-174","gmt_create":"2026-04-23T20:33:37.311106+08:00","gmt_modified":"2026-04-23T20:33:37.311106+08:00"},{"id":760,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"52c01d7b9c17aa16944cbfcf8885be61","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#16-33","gmt_create":"2026-04-23T20:33:37.311558+08:00","gmt_modified":"2026-04-23T20:33:37.311558+08:00"},{"id":761,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"52c01d7b9c17aa16944cbfcf8885be61","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-33","gmt_create":"2026-04-23T20:33:37.319146+08:00","gmt_modified":"2026-04-23T20:33:37.319146+08:00"},{"id":762,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"77158a6f887e224a03552893bfec7c92","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#16-33","gmt_create":"2026-04-23T20:33:37.320166+08:00","gmt_modified":"2026-04-23T20:33:37.320166+08:00"},{"id":763,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"9d352899554ab41b65b2e9f32558d811","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#39-113","gmt_create":"2026-04-23T20:33:37.321322+08:00","gmt_modified":"2026-04-23T20:33:37.321322+08:00"},{"id":764,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"9d352899554ab41b65b2e9f32558d811","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 39-113","gmt_create":"2026-04-23T20:33:37.322276+08:00","gmt_modified":"2026-04-23T20:33:37.322276+08:00"},{"id":765,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"b1ee5a992230844ba898765be63f7b27","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#32-133","gmt_create":"2026-04-23T20:33:37.323119+08:00","gmt_modified":"2026-04-23T20:33:37.323119+08:00"},{"id":766,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"b1ee5a992230844ba898765be63f7b27","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 32-133","gmt_create":"2026-04-23T20:33:37.323615+08:00","gmt_modified":"2026-04-23T20:33:37.323615+08:00"},{"id":767,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"cb098a3cd32339e99f755dfd0fc35b5c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_citation_engine.py#6-127","gmt_create":"2026-04-23T20:33:37.324259+08:00","gmt_modified":"2026-04-23T20:33:37.324259+08:00"},{"id":768,"source_id":"b07a4fb9cecbbd66a6910ccbc7651f19","target_id":"cb098a3cd32339e99f755dfd0fc35b5c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 6-127","gmt_create":"2026-04-23T20:33:37.32508+08:00","gmt_modified":"2026-04-23T20:33:37.32508+08:00"},{"id":769,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"3d2dab79f7a3fedf24f0212cc9ef7aa1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#145-158","gmt_create":"2026-04-23T20:33:37.325915+08:00","gmt_modified":"2026-04-23T20:33:37.325915+08:00"},{"id":770,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"3d2dab79f7a3fedf24f0212cc9ef7aa1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 145-158","gmt_create":"2026-04-23T20:33:37.327012+08:00","gmt_modified":"2026-04-23T20:33:37.327012+08:00"},{"id":771,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"4e9b3d0e94282f4bc6fa500f4eed61a1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#135-159","gmt_create":"2026-04-23T20:33:37.327853+08:00","gmt_modified":"2026-04-23T20:33:37.327853+08:00"},{"id":772,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"4e9b3d0e94282f4bc6fa500f4eed61a1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 135-159","gmt_create":"2026-04-23T20:33:37.328872+08:00","gmt_modified":"2026-04-23T20:33:37.328872+08:00"},{"id":773,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"8e3201561a9dd9a06ee3bf68ffdb3f99","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_citation_engine.py#39-109","gmt_create":"2026-04-23T20:33:37.32989+08:00","gmt_modified":"2026-04-23T20:33:37.32989+08:00"},{"id":774,"source_id":"b07a4fb9cecbbd66a6910ccbc7651f19","target_id":"8e3201561a9dd9a06ee3bf68ffdb3f99","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 39-109","gmt_create":"2026-04-23T20:33:37.33132+08:00","gmt_modified":"2026-04-23T20:33:37.33132+08:00"},{"id":775,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"c3a417be3d61f5bcd3fbf976e0c4f15a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#33-121","gmt_create":"2026-04-23T20:33:37.336944+08:00","gmt_modified":"2026-04-23T20:33:37.336944+08:00"},{"id":776,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"c3a417be3d61f5bcd3fbf976e0c4f15a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-121","gmt_create":"2026-04-23T20:33:37.337655+08:00","gmt_modified":"2026-04-23T20:33:37.337655+08:00"},{"id":777,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"096856da621e23e78422a15e2bfce1f1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#13-22","gmt_create":"2026-04-23T20:33:37.339169+08:00","gmt_modified":"2026-04-23T20:33:37.339169+08:00"},{"id":778,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"7ce954ed7d3bc4dcf78630124cc0dd88","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#264-295","gmt_create":"2026-04-23T20:33:37.34124+08:00","gmt_modified":"2026-04-23T20:33:37.34124+08:00"},{"id":779,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"7ce954ed7d3bc4dcf78630124cc0dd88","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 264-295","gmt_create":"2026-04-23T20:33:37.342433+08:00","gmt_modified":"2026-04-23T20:33:37.342433+08:00"},{"id":780,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"7289a3568c137c8a671fc8c963bb8d28","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/requirements.txt#1-35","gmt_create":"2026-04-23T20:33:37.346038+08:00","gmt_modified":"2026-04-23T20:33:37.346038+08:00"},{"id":781,"source_id":"a26ee01cf41da3b956e1650448c156fa","target_id":"7289a3568c137c8a671fc8c963bb8d28","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-35","gmt_create":"2026-04-23T20:33:37.346577+08:00","gmt_modified":"2026-04-23T20:33:37.346577+08:00"},{"id":782,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"ef82ce4377c549013c200e19701a6805","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#21-32","gmt_create":"2026-04-23T20:33:37.352671+08:00","gmt_modified":"2026-04-23T20:33:37.352671+08:00"},{"id":783,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"ef82ce4377c549013c200e19701a6805","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 21-32","gmt_create":"2026-04-23T20:33:37.354355+08:00","gmt_modified":"2026-04-23T20:33:37.354355+08:00"},{"id":784,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"c7986eb1be0ffdd9ec4e243be4270119","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#21-32","gmt_create":"2026-04-23T20:33:37.355472+08:00","gmt_modified":"2026-04-23T20:33:37.355472+08:00"},{"id":785,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"c7986eb1be0ffdd9ec4e243be4270119","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 21-32","gmt_create":"2026-04-23T20:33:37.357613+08:00","gmt_modified":"2026-04-23T20:33:37.357613+08:00"},{"id":786,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"b55cc5936c299f819b57b899858438e6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#139-144","gmt_create":"2026-04-23T20:33:37.358273+08:00","gmt_modified":"2026-04-23T20:33:37.358273+08:00"},{"id":787,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"5563b3bd56550648dc70302c1762ce5a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/tongyi.py#18-29","gmt_create":"2026-04-23T20:33:37.360657+08:00","gmt_modified":"2026-04-23T20:33:37.360657+08:00"},{"id":788,"source_id":"e68ad5186f1e47610ab3d9f14a794393","target_id":"5563b3bd56550648dc70302c1762ce5a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 18-29","gmt_create":"2026-04-23T20:33:37.361776+08:00","gmt_modified":"2026-04-23T20:33:37.361776+08:00"},{"id":789,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"91852ef8dcc844a2f85e9fce0227ab74","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/doubao.py#18-29","gmt_create":"2026-04-23T20:33:37.363109+08:00","gmt_modified":"2026-04-23T20:33:37.363109+08:00"},{"id":790,"source_id":"404f6d0765a8c6e77e33b7fc21b377a4","target_id":"91852ef8dcc844a2f85e9fce0227ab74","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 18-29","gmt_create":"2026-04-23T20:33:37.363811+08:00","gmt_modified":"2026-04-23T20:33:37.363811+08:00"},{"id":791,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"1b46fab9e22f53db30ead5677d03e3e2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#11-16","gmt_create":"2026-04-23T20:33:37.364819+08:00","gmt_modified":"2026-04-23T20:33:37.364819+08:00"},{"id":792,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"1b46fab9e22f53db30ead5677d03e3e2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-16","gmt_create":"2026-04-23T20:33:37.365554+08:00","gmt_modified":"2026-04-23T20:33:37.365554+08:00"},{"id":793,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"f096aa3ea82e9fa625a9acb1309b4c50","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#231-247","gmt_create":"2026-04-23T20:33:37.36634+08:00","gmt_modified":"2026-04-23T20:33:37.366341+08:00"},{"id":794,"source_id":"19e75845-5147-4aeb-90be-16f3aa270465","target_id":"4a2fa09aa3a948dec5ef8ba873b0e716","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#14-42","gmt_create":"2026-04-23T20:33:37.367379+08:00","gmt_modified":"2026-04-23T20:33:37.367379+08:00"},{"id":795,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"4a2fa09aa3a948dec5ef8ba873b0e716","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 14-42","gmt_create":"2026-04-23T20:33:37.368233+08:00","gmt_modified":"2026-04-23T20:33:37.368233+08:00"},{"id":796,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"6b3d903205941aa9391dd90016e1102c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/queries.py","gmt_create":"2026-04-23T20:33:57.518077+08:00","gmt_modified":"2026-04-23T20:33:57.518077+08:00"},{"id":797,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"f301b79d833233ce39d350e82a71c938","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/schemas/query.py","gmt_create":"2026-04-23T20:33:57.518453+08:00","gmt_modified":"2026-04-23T20:33:57.518454+08:00"},{"id":798,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"1a3336b4af8a39a055e912724338580c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/schemas/citation.py","gmt_create":"2026-04-23T20:33:57.519644+08:00","gmt_modified":"2026-04-23T20:33:57.519644+08:00"},{"id":799,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T20:33:57.521079+08:00","gmt_modified":"2026-04-23T20:33:57.521079+08:00"},{"id":800,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T20:33:57.522061+08:00","gmt_modified":"2026-04-23T20:33:57.522061+08:00"},{"id":801,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"b4a81ef789630d0af6a8d50859d01bf3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/citation_record.py","gmt_create":"2026-04-23T20:33:57.523189+08:00","gmt_modified":"2026-04-23T20:33:57.523189+08:00"},{"id":802,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"c59f8c276697a070dffc581fe94d809c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/user.py","gmt_create":"2026-04-23T20:33:57.52383+08:00","gmt_modified":"2026-04-23T20:33:57.52383+08:00"},{"id":803,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"88d22de3b2a7419868e8ae19130d860c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/query.py","gmt_create":"2026-04-23T20:33:57.524563+08:00","gmt_modified":"2026-04-23T20:33:57.524563+08:00"},{"id":804,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"04e3926c080e795713bff683e7dc9d3e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/citation.py","gmt_create":"2026-04-23T20:33:57.525774+08:00","gmt_modified":"2026-04-23T20:33:57.525774+08:00"},{"id":805,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/scheduler.py","gmt_create":"2026-04-23T20:33:57.526492+08:00","gmt_modified":"2026-04-23T20:33:57.526492+08:00"},{"id":806,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"74040de652d5e57f548bb5c4adc3e1a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/citation_engine.py","gmt_create":"2026-04-23T20:33:57.527326+08:00","gmt_modified":"2026-04-23T20:33:57.527326+08:00"},{"id":807,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"a16cf42e9559523c4f96ca4c79f9488d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/base.py","gmt_create":"2026-04-23T20:33:57.527983+08:00","gmt_modified":"2026-04-23T20:33:57.527983+08:00"},{"id":808,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"8f973791233c698b3e64a4fb28a93d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/kimi.py","gmt_create":"2026-04-23T20:33:57.529144+08:00","gmt_modified":"2026-04-23T20:33:57.529144+08:00"},{"id":809,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"f642fc1c2f34e15572d9d98aa6c18813","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-23T20:33:57.529998+08:00","gmt_modified":"2026-04-23T20:33:57.529998+08:00"},{"id":810,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T20:33:57.530659+08:00","gmt_modified":"2026-04-23T20:33:57.530659+08:00"},{"id":811,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"9228ff67d4c757a85d9421b71f4b29f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/main.py","gmt_create":"2026-04-23T20:33:57.531953+08:00","gmt_modified":"2026-04-23T20:33:57.531953+08:00"},{"id":812,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"0613e76b9679be7f998fb8fd8056e686","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_queries.py","gmt_create":"2026-04-23T20:33:57.532681+08:00","gmt_modified":"2026-04-23T20:33:57.532681+08:00"},{"id":813,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"80a0429cc47931de27ddb17a62b8dd9c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_business_flow.py","gmt_create":"2026-04-23T20:33:57.533708+08:00","gmt_modified":"2026-04-23T20:33:57.533708+08:00"},{"id":814,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"e27bcba24aaadeec1922d2b4e5b8386b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#1-109","gmt_create":"2026-04-23T20:33:57.534482+08:00","gmt_modified":"2026-04-23T20:33:57.534482+08:00"},{"id":815,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"e7afbab5932c93c3469f1a225e6c7156","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#1-55","gmt_create":"2026-04-23T20:33:57.535515+08:00","gmt_modified":"2026-04-23T20:33:57.535515+08:00"},{"id":816,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"e7afbab5932c93c3469f1a225e6c7156","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-55","gmt_create":"2026-04-23T20:33:57.536318+08:00","gmt_modified":"2026-04-23T20:33:57.536318+08:00"},{"id":817,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"a0eac56d622a2fff529bc2b796064bcd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/query.py#1-94","gmt_create":"2026-04-23T20:33:57.537094+08:00","gmt_modified":"2026-04-23T20:33:57.537094+08:00"},{"id":818,"source_id":"f301b79d833233ce39d350e82a71c938","target_id":"a0eac56d622a2fff529bc2b796064bcd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-94","gmt_create":"2026-04-23T20:33:57.537769+08:00","gmt_modified":"2026-04-23T20:33:57.53777+08:00"},{"id":819,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"174be58163b6f72b4cd4a493f3463ce4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/citation.py#1-52","gmt_create":"2026-04-23T20:33:57.53855+08:00","gmt_modified":"2026-04-23T20:33:57.53855+08:00"},{"id":820,"source_id":"1a3336b4af8a39a055e912724338580c","target_id":"174be58163b6f72b4cd4a493f3463ce4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-52","gmt_create":"2026-04-23T20:33:57.53965+08:00","gmt_modified":"2026-04-23T20:33:57.53965+08:00"},{"id":821,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"6281fff17a86ec1895c64d87c2ae7fb1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#1-55","gmt_create":"2026-04-23T20:33:57.54057+08:00","gmt_modified":"2026-04-23T20:33:57.54057+08:00"},{"id":822,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"6628e006b8e5ca16160743528b6b0506","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#1-39","gmt_create":"2026-04-23T20:33:57.541654+08:00","gmt_modified":"2026-04-23T20:33:57.541654+08:00"},{"id":823,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"943c18db69a04b3137fba4cebcfea87e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#1-42","gmt_create":"2026-04-23T20:33:57.543056+08:00","gmt_modified":"2026-04-23T20:33:57.543056+08:00"},{"id":824,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"136f172c732d0cc130532a4f0df475a4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#1-41","gmt_create":"2026-04-23T20:33:57.543958+08:00","gmt_modified":"2026-04-23T20:33:57.543958+08:00"},{"id":825,"source_id":"c59f8c276697a070dffc581fe94d809c","target_id":"136f172c732d0cc130532a4f0df475a4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-41","gmt_create":"2026-04-23T20:33:57.544974+08:00","gmt_modified":"2026-04-23T20:33:57.544974+08:00"},{"id":826,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"916551131bd9ac8c9f9c8bb762af1fa4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#1-130","gmt_create":"2026-04-23T20:33:57.545482+08:00","gmt_modified":"2026-04-23T20:33:57.545482+08:00"},{"id":827,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"916551131bd9ac8c9f9c8bb762af1fa4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-130","gmt_create":"2026-04-23T20:33:57.545785+08:00","gmt_modified":"2026-04-23T20:33:57.545785+08:00"},{"id":828,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"5d2836286eb7d4eb6039b004a9744d26","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#1-429","gmt_create":"2026-04-23T20:33:57.546196+08:00","gmt_modified":"2026-04-23T20:33:57.546196+08:00"},{"id":829,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"5d2836286eb7d4eb6039b004a9744d26","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-429","gmt_create":"2026-04-23T20:33:57.546517+08:00","gmt_modified":"2026-04-23T20:33:57.546517+08:00"},{"id":830,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"71f98c8993fb42b108e34a554247869b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#1-95","gmt_create":"2026-04-23T20:33:57.547004+08:00","gmt_modified":"2026-04-23T20:33:57.547005+08:00"},{"id":831,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"116584ea9162c1bc05911f39f9ef82b6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#1-309","gmt_create":"2026-04-23T20:33:57.5475+08:00","gmt_modified":"2026-04-23T20:33:57.5475+08:00"},{"id":832,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"72a110dca58d8152758e2fdab4e94761","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#1-18","gmt_create":"2026-04-23T20:33:57.548046+08:00","gmt_modified":"2026-04-23T20:33:57.548046+08:00"},{"id":833,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"39a3b2d9301fa4eff7bef0fda3352790","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#1-206","gmt_create":"2026-04-23T20:33:57.548538+08:00","gmt_modified":"2026-04-23T20:33:57.548538+08:00"},{"id":834,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"39a3b2d9301fa4eff7bef0fda3352790","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-206","gmt_create":"2026-04-23T20:33:57.548868+08:00","gmt_modified":"2026-04-23T20:33:57.548868+08:00"},{"id":835,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"fbcfae3b1238b3da5329ebafe4294861","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#1-205","gmt_create":"2026-04-23T20:33:57.549268+08:00","gmt_modified":"2026-04-23T20:33:57.549268+08:00"},{"id":836,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"fbcfae3b1238b3da5329ebafe4294861","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-205","gmt_create":"2026-04-23T20:33:57.549553+08:00","gmt_modified":"2026-04-23T20:33:57.549553+08:00"},{"id":837,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"c2747ca16b879bca0f68955534c3c4fc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#1-48","gmt_create":"2026-04-23T20:33:57.550006+08:00","gmt_modified":"2026-04-23T20:33:57.550006+08:00"},{"id":838,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"c4273407c88f470df7daf6a8ad5ce969","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#15-109","gmt_create":"2026-04-23T20:33:57.550496+08:00","gmt_modified":"2026-04-23T20:33:57.550496+08:00"},{"id":839,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"c4273407c88f470df7daf6a8ad5ce969","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 15-109","gmt_create":"2026-04-23T20:33:57.551777+08:00","gmt_modified":"2026-04-23T20:33:57.551777+08:00"},{"id":840,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"35774e0a09ac5459c868914d7182ca95","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#19-55","gmt_create":"2026-04-23T20:33:57.552775+08:00","gmt_modified":"2026-04-23T20:33:57.552775+08:00"},{"id":841,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"35774e0a09ac5459c868914d7182ca95","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 19-55","gmt_create":"2026-04-23T20:33:57.553082+08:00","gmt_modified":"2026-04-23T20:33:57.553082+08:00"},{"id":842,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"69118807690ef351a9de910414d5e676","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/query.py#11-94","gmt_create":"2026-04-23T20:33:57.553571+08:00","gmt_modified":"2026-04-23T20:33:57.553571+08:00"},{"id":843,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"f639b566c26dfd18b24e3dfd2e9853ac","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/citation.py#7-52","gmt_create":"2026-04-23T20:33:57.554164+08:00","gmt_modified":"2026-04-23T20:33:57.554164+08:00"},{"id":844,"source_id":"1a3336b4af8a39a055e912724338580c","target_id":"f639b566c26dfd18b24e3dfd2e9853ac","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 7-52","gmt_create":"2026-04-23T20:33:57.554458+08:00","gmt_modified":"2026-04-23T20:33:57.554458+08:00"},{"id":845,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"4fb8856be3a581fe8303d11b2284ca29","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#11-55","gmt_create":"2026-04-23T20:33:57.55511+08:00","gmt_modified":"2026-04-23T20:33:57.55511+08:00"},{"id":846,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"b84f46f058847733347974841f613688","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#11-39","gmt_create":"2026-04-23T20:33:57.557064+08:00","gmt_modified":"2026-04-23T20:33:57.557064+08:00"},{"id":847,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"fd541971cebf8a7c167d717f5c5d1ff6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#11-42","gmt_create":"2026-04-23T20:33:57.558255+08:00","gmt_modified":"2026-04-23T20:33:57.558255+08:00"},{"id":848,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"56e46969bdb790a5e8f333184b878d6d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#11-41","gmt_create":"2026-04-23T20:33:57.558894+08:00","gmt_modified":"2026-04-23T20:33:57.558894+08:00"},{"id":849,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"d7c319a04abbc6704da53107e07dd8e7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#12-130","gmt_create":"2026-04-23T20:33:57.560321+08:00","gmt_modified":"2026-04-23T20:33:57.560321+08:00"},{"id":850,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"b46654006178160f12897e2c5baac8fa","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#219-429","gmt_create":"2026-04-23T20:33:57.561417+08:00","gmt_modified":"2026-04-23T20:33:57.561417+08:00"},{"id":851,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"b46654006178160f12897e2c5baac8fa","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 219-429","gmt_create":"2026-04-23T20:33:57.561724+08:00","gmt_modified":"2026-04-23T20:33:57.561724+08:00"},{"id":852,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"e230904202fcf7a861c6f49b84f9f863","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#25-95","gmt_create":"2026-04-23T20:33:57.562679+08:00","gmt_modified":"2026-04-23T20:33:57.562679+08:00"},{"id":853,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"309607c54b12a6340edc086ffb4737c9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#148-309","gmt_create":"2026-04-23T20:33:57.563303+08:00","gmt_modified":"2026-04-23T20:33:57.563303+08:00"},{"id":854,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"ad67863041d9eea2b0fb542b5aa33aca","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/base.py#4-18","gmt_create":"2026-04-23T20:33:57.563842+08:00","gmt_modified":"2026-04-23T20:33:57.563842+08:00"},{"id":855,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"82265d393c20d0af96beec6b9c657c27","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#28-41","gmt_create":"2026-04-23T20:33:57.564486+08:00","gmt_modified":"2026-04-23T20:33:57.564486+08:00"},{"id":856,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"82265d393c20d0af96beec6b9c657c27","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 28-41","gmt_create":"2026-04-23T20:33:57.564788+08:00","gmt_modified":"2026-04-23T20:33:57.564788+08:00"},{"id":857,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"c86edb7a95fbe4b431ac65a0e2b8636e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#90-109","gmt_create":"2026-04-23T20:33:57.565285+08:00","gmt_modified":"2026-04-23T20:33:57.565285+08:00"},{"id":858,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"9b10dac7dbbb1327afc8a525bf4bd0c3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#45-81","gmt_create":"2026-04-23T20:33:57.565809+08:00","gmt_modified":"2026-04-23T20:33:57.565809+08:00"},{"id":859,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"93e5c95b1691bb81a36bf9a0ac889030","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#219-261","gmt_create":"2026-04-23T20:33:57.566399+08:00","gmt_modified":"2026-04-23T20:33:57.566399+08:00"},{"id":860,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"93e5c95b1691bb81a36bf9a0ac889030","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 219-261","gmt_create":"2026-04-23T20:33:57.578474+08:00","gmt_modified":"2026-04-23T20:33:57.578474+08:00"},{"id":861,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"448970b02d89d5e1576f70bdb0063363","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#51-84","gmt_create":"2026-04-23T20:33:57.580464+08:00","gmt_modified":"2026-04-23T20:33:57.580464+08:00"},{"id":862,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"160b5326537d25444c40a459a01e79c6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#159-234","gmt_create":"2026-04-23T20:33:57.581421+08:00","gmt_modified":"2026-04-23T20:33:57.581422+08:00"},{"id":863,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"a4918fcbd21492ad996d7f5496f03a4b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#33-48","gmt_create":"2026-04-23T20:33:57.58279+08:00","gmt_modified":"2026-04-23T20:33:57.58279+08:00"},{"id":864,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"bc38d046b4b1410ae2165cee2272839e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#33-48","gmt_create":"2026-04-23T20:33:57.583676+08:00","gmt_modified":"2026-04-23T20:33:57.583676+08:00"},{"id":865,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"374200f0bf946f0399351756977d0495","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#176-234","gmt_create":"2026-04-23T20:33:57.588601+08:00","gmt_modified":"2026-04-23T20:33:57.588601+08:00"},{"id":866,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"374200f0bf946f0399351756977d0495","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 176-234","gmt_create":"2026-04-23T20:33:57.589609+08:00","gmt_modified":"2026-04-23T20:33:57.589609+08:00"},{"id":867,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"ac5982063da5f04315f3e82a0d653902","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#24-32","gmt_create":"2026-04-23T20:33:57.590732+08:00","gmt_modified":"2026-04-23T20:33:57.590732+08:00"},{"id":868,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"601b981b00d93b941843f046a163d5a3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/query.py#18-33","gmt_create":"2026-04-23T20:33:57.592508+08:00","gmt_modified":"2026-04-23T20:33:57.592508+08:00"},{"id":869,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"9a8d9100a6bc34ebae9ee065def7e88a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/query.py#44-72","gmt_create":"2026-04-23T20:33:57.593647+08:00","gmt_modified":"2026-04-23T20:33:57.593647+08:00"},{"id":870,"source_id":"f301b79d833233ce39d350e82a71c938","target_id":"9a8d9100a6bc34ebae9ee065def7e88a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 44-72","gmt_create":"2026-04-23T20:33:57.594757+08:00","gmt_modified":"2026-04-23T20:33:57.594757+08:00"},{"id":871,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"93c23bcc3456826af17e26a6d4c32116","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/query.py#6-9","gmt_create":"2026-04-23T20:33:57.595474+08:00","gmt_modified":"2026-04-23T20:33:57.595474+08:00"},{"id":872,"source_id":"f301b79d833233ce39d350e82a71c938","target_id":"93c23bcc3456826af17e26a6d4c32116","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 6-9","gmt_create":"2026-04-23T20:33:57.596276+08:00","gmt_modified":"2026-04-23T20:33:57.596276+08:00"},{"id":873,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"c17eeb8726297096cd5542283f11494f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#17-109","gmt_create":"2026-04-23T20:33:57.597516+08:00","gmt_modified":"2026-04-23T20:33:57.597516+08:00"},{"id":874,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"c17eeb8726297096cd5542283f11494f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 17-109","gmt_create":"2026-04-23T20:33:57.598386+08:00","gmt_modified":"2026-04-23T20:33:57.598386+08:00"},{"id":875,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"08fec4718be6991260c00ca532f9173a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#22-55","gmt_create":"2026-04-23T20:33:57.599188+08:00","gmt_modified":"2026-04-23T20:33:57.599188+08:00"},{"id":876,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"08fec4718be6991260c00ca532f9173a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 22-55","gmt_create":"2026-04-23T20:33:57.600043+08:00","gmt_modified":"2026-04-23T20:33:57.600043+08:00"},{"id":877,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"08007199eea846dd14f15f7dc70419e2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/citation.py#48-52","gmt_create":"2026-04-23T20:33:57.600852+08:00","gmt_modified":"2026-04-23T20:33:57.600852+08:00"},{"id":878,"source_id":"1a3336b4af8a39a055e912724338580c","target_id":"08007199eea846dd14f15f7dc70419e2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 48-52","gmt_create":"2026-04-23T20:33:57.601489+08:00","gmt_modified":"2026-04-23T20:33:57.601489+08:00"},{"id":879,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"4caff756fd4da029bd64cd16e7ef5960","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#32-39","gmt_create":"2026-04-23T20:33:57.602322+08:00","gmt_modified":"2026-04-23T20:33:57.602323+08:00"},{"id":880,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"4caff756fd4da029bd64cd16e7ef5960","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 32-39","gmt_create":"2026-04-23T20:33:57.602918+08:00","gmt_modified":"2026-04-23T20:33:57.602918+08:00"},{"id":881,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"b0220895f66f1273966ad5b2c3266952","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#49-53","gmt_create":"2026-04-23T20:33:57.603881+08:00","gmt_modified":"2026-04-23T20:33:57.603881+08:00"},{"id":882,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"b0220895f66f1273966ad5b2c3266952","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 49-53","gmt_create":"2026-04-23T20:33:57.604555+08:00","gmt_modified":"2026-04-23T20:33:57.604555+08:00"},{"id":883,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"44f88f9664fdf6e84ffb7e0675a86a28","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#64-69","gmt_create":"2026-04-23T20:33:57.605262+08:00","gmt_modified":"2026-04-23T20:33:57.605262+08:00"},{"id":884,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"44f88f9664fdf6e84ffb7e0675a86a28","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 64-69","gmt_create":"2026-04-23T20:33:57.606324+08:00","gmt_modified":"2026-04-23T20:33:57.606324+08:00"},{"id":885,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"91f280f51389bd1cf711dcf33a4da681","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#79-84","gmt_create":"2026-04-23T20:33:57.607055+08:00","gmt_modified":"2026-04-23T20:33:57.607055+08:00"},{"id":886,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"91f280f51389bd1cf711dcf33a4da681","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 79-84","gmt_create":"2026-04-23T20:33:57.608388+08:00","gmt_modified":"2026-04-23T20:33:57.608388+08:00"},{"id":887,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"ab50466a57c77659d7b469d3a8a04ddb","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#96-103","gmt_create":"2026-04-23T20:33:57.609206+08:00","gmt_modified":"2026-04-23T20:33:57.609206+08:00"},{"id":888,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"ab50466a57c77659d7b469d3a8a04ddb","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-103","gmt_create":"2026-04-23T20:33:57.609975+08:00","gmt_modified":"2026-04-23T20:33:57.609975+08:00"},{"id":889,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"572c2dece1fbc13aa2bb7d6b61b0fd5c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#65-71","gmt_create":"2026-04-23T20:33:57.61104+08:00","gmt_modified":"2026-04-23T20:33:57.611041+08:00"},{"id":890,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"572c2dece1fbc13aa2bb7d6b61b0fd5c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 65-71","gmt_create":"2026-04-23T20:33:57.611833+08:00","gmt_modified":"2026-04-23T20:33:57.611833+08:00"},{"id":891,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"82386bc7ca57d9ccc94b656e52bc89f6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#1-14","gmt_create":"2026-04-23T20:33:57.612865+08:00","gmt_modified":"2026-04-23T20:33:57.612865+08:00"},{"id":892,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"82386bc7ca57d9ccc94b656e52bc89f6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-14","gmt_create":"2026-04-23T20:33:57.613537+08:00","gmt_modified":"2026-04-23T20:33:57.613537+08:00"},{"id":893,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"7ab79ab21d7d6e4dbcb224572516f6f6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#1-19","gmt_create":"2026-04-23T20:33:57.613967+08:00","gmt_modified":"2026-04-23T20:33:57.613968+08:00"},{"id":894,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"7ab79ab21d7d6e4dbcb224572516f6f6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-19","gmt_create":"2026-04-23T20:33:57.61426+08:00","gmt_modified":"2026-04-23T20:33:57.61426+08:00"},{"id":895,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"8433204d7a82a1f480e57df9ceee5581","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#1-10","gmt_create":"2026-04-23T20:33:57.614658+08:00","gmt_modified":"2026-04-23T20:33:57.614658+08:00"},{"id":896,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"8433204d7a82a1f480e57df9ceee5581","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-10","gmt_create":"2026-04-23T20:33:57.614988+08:00","gmt_modified":"2026-04-23T20:33:57.614988+08:00"},{"id":897,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"3957ee6f15a01b7b541490438ef18684","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#1-17","gmt_create":"2026-04-23T20:33:57.615388+08:00","gmt_modified":"2026-04-23T20:33:57.615388+08:00"},{"id":898,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"3957ee6f15a01b7b541490438ef18684","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-17","gmt_create":"2026-04-23T20:33:57.615908+08:00","gmt_modified":"2026-04-23T20:33:57.615908+08:00"},{"id":899,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"3729543092bccad8926c5ea852db1e69","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#148-157","gmt_create":"2026-04-23T20:33:57.61673+08:00","gmt_modified":"2026-04-23T20:33:57.61673+08:00"},{"id":900,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"fcae8d1d281ad7186999cc4ca8e43db7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#25-39","gmt_create":"2026-04-23T20:33:57.617716+08:00","gmt_modified":"2026-04-23T20:33:57.617716+08:00"},{"id":901,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"fcae8d1d281ad7186999cc4ca8e43db7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-39","gmt_create":"2026-04-23T20:33:57.618148+08:00","gmt_modified":"2026-04-23T20:33:57.618148+08:00"},{"id":902,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"ee12a84ac6334b13e20132181454488b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#13-19","gmt_create":"2026-04-23T20:33:57.6192+08:00","gmt_modified":"2026-04-23T20:33:57.6192+08:00"},{"id":903,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"ee12a84ac6334b13e20132181454488b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-19","gmt_create":"2026-04-23T20:33:57.619587+08:00","gmt_modified":"2026-04-23T20:33:57.619587+08:00"},{"id":904,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"897e047b94772e5a0ff57cf773a7f965","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#17-32","gmt_create":"2026-04-23T20:33:57.620024+08:00","gmt_modified":"2026-04-23T20:33:57.620024+08:00"},{"id":905,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"897e047b94772e5a0ff57cf773a7f965","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 17-32","gmt_create":"2026-04-23T20:33:57.620315+08:00","gmt_modified":"2026-04-23T20:33:57.620315+08:00"},{"id":906,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"53e8ec81b4d2dbb13c831048e5897036","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#17-32","gmt_create":"2026-04-23T20:33:57.620909+08:00","gmt_modified":"2026-04-23T20:33:57.620909+08:00"},{"id":907,"source_id":"f642fc1c2f34e15572d9d98aa6c18813","target_id":"53e8ec81b4d2dbb13c831048e5897036","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 17-32","gmt_create":"2026-04-23T20:33:57.621267+08:00","gmt_modified":"2026-04-23T20:33:57.621267+08:00"},{"id":908,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"096856da621e23e78422a15e2bfce1f1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#13-22","gmt_create":"2026-04-23T20:33:57.621687+08:00","gmt_modified":"2026-04-23T20:33:57.621687+08:00"},{"id":909,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"ef82ce4377c549013c200e19701a6805","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#21-32","gmt_create":"2026-04-23T20:33:57.62216+08:00","gmt_modified":"2026-04-23T20:33:57.62216+08:00"},{"id":910,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"c7986eb1be0ffdd9ec4e243be4270119","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#21-32","gmt_create":"2026-04-23T20:33:57.623241+08:00","gmt_modified":"2026-04-23T20:33:57.623241+08:00"},{"id":911,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"eecf9581dbaa0a515cf11514175e7ef9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#11-206","gmt_create":"2026-04-23T20:33:57.627555+08:00","gmt_modified":"2026-04-23T20:33:57.627555+08:00"},{"id":912,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"5563c29185326a59be61ee0a6eec4463","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/wenxin.py#11-205","gmt_create":"2026-04-23T20:33:57.62809+08:00","gmt_modified":"2026-04-23T20:33:57.62809+08:00"},{"id":913,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"fd3145047b9c813cc8e64b9322e531f9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#219-327","gmt_create":"2026-04-23T20:33:57.62931+08:00","gmt_modified":"2026-04-23T20:33:57.62931+08:00"},{"id":914,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"fd3145047b9c813cc8e64b9322e531f9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 219-327","gmt_create":"2026-04-23T20:33:57.629745+08:00","gmt_modified":"2026-04-23T20:33:57.629745+08:00"},{"id":915,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"b09a0f415030d91b25e6cabd8a0a93fc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#176-289","gmt_create":"2026-04-23T20:33:57.630458+08:00","gmt_modified":"2026-04-23T20:33:57.630458+08:00"},{"id":916,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"b09a0f415030d91b25e6cabd8a0a93fc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 176-289","gmt_create":"2026-04-23T20:33:57.630748+08:00","gmt_modified":"2026-04-23T20:33:57.630748+08:00"},{"id":917,"source_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","target_id":"e2168959b26c386940370b5f1bf48d7d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#194-204","gmt_create":"2026-04-23T20:33:57.631184+08:00","gmt_modified":"2026-04-23T20:33:57.631184+08:00"},{"id":918,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"e2168959b26c386940370b5f1bf48d7d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 194-204","gmt_create":"2026-04-23T20:33:57.63147+08:00","gmt_modified":"2026-04-23T20:33:57.63147+08:00"},{"id":919,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"8f973791233c698b3e64a4fb28a93d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/kimi.py","gmt_create":"2026-04-23T20:35:18.634061+08:00","gmt_modified":"2026-04-23T20:35:18.634062+08:00"},{"id":920,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"a16cf42e9559523c4f96ca4c79f9488d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/base.py","gmt_create":"2026-04-23T20:35:18.634886+08:00","gmt_modified":"2026-04-23T20:35:18.634886+08:00"},{"id":921,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"6a63f048c16c60c5d2d57012c810ee0e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/search_engine.py","gmt_create":"2026-04-23T20:35:18.635377+08:00","gmt_modified":"2026-04-23T20:35:18.635377+08:00"},{"id":922,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"4a56ef5fca60bc63480b457cab3832f0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/platforms/__init__.py","gmt_create":"2026-04-23T20:35:18.63595+08:00","gmt_modified":"2026-04-23T20:35:18.63595+08:00"},{"id":923,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"74040de652d5e57f548bb5c4adc3e1a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/citation_engine.py","gmt_create":"2026-04-23T20:35:18.636363+08:00","gmt_modified":"2026-04-23T20:35:18.636363+08:00"},{"id":924,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/scheduler.py","gmt_create":"2026-04-23T20:35:18.636753+08:00","gmt_modified":"2026-04-23T20:35:18.636753+08:00"},{"id":925,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"36dd0ad3ee6bc75a480ad8a62268e80e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/models/query.py","gmt_create":"2026-04-23T20:35:18.6372+08:00","gmt_modified":"2026-04-23T20:35:18.6372+08:00"},{"id":926,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"b4a81ef789630d0af6a8d50859d01bf3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/citation_record.py","gmt_create":"2026-04-23T20:35:18.637558+08:00","gmt_modified":"2026-04-23T20:35:18.637558+08:00"},{"id":927,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T20:35:18.637924+08:00","gmt_modified":"2026-04-23T20:35:18.637924+08:00"},{"id":928,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"88d22de3b2a7419868e8ae19130d860c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/query.py","gmt_create":"2026-04-23T20:35:18.638407+08:00","gmt_modified":"2026-04-23T20:35:18.638407+08:00"},{"id":929,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"04e3926c080e795713bff683e7dc9d3e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/citation.py","gmt_create":"2026-04-23T20:35:18.638942+08:00","gmt_modified":"2026-04-23T20:35:18.638942+08:00"},{"id":930,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"6b3d903205941aa9391dd90016e1102c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/queries.py","gmt_create":"2026-04-23T20:35:18.641162+08:00","gmt_modified":"2026-04-23T20:35:18.641162+08:00"},{"id":931,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T20:35:18.642251+08:00","gmt_modified":"2026-04-23T20:35:18.642251+08:00"},{"id":932,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"9228ff67d4c757a85d9421b71f4b29f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/main.py","gmt_create":"2026-04-23T20:35:18.642925+08:00","gmt_modified":"2026-04-23T20:35:18.642925+08:00"},{"id":933,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"ef72f0c3cedb9fd9a87352fe493053dc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/lib/platforms.ts","gmt_create":"2026-04-23T20:35:18.643414+08:00","gmt_modified":"2026-04-23T20:35:18.643415+08:00"},{"id":934,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"096856da621e23e78422a15e2bfce1f1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#13-22","gmt_create":"2026-04-23T20:35:18.643912+08:00","gmt_modified":"2026-04-23T20:35:18.643912+08:00"},{"id":935,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"129573d2bbcde48697ed0e75dea12396","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#25-40","gmt_create":"2026-04-23T20:35:18.645078+08:00","gmt_modified":"2026-04-23T20:35:18.645078+08:00"},{"id":936,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"129573d2bbcde48697ed0e75dea12396","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-40","gmt_create":"2026-04-23T20:35:18.646964+08:00","gmt_modified":"2026-04-23T20:35:18.646965+08:00"},{"id":937,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"cf18c97a9be6c78aa43cc229ed3dad20","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#164-173","gmt_create":"2026-04-23T20:35:18.647598+08:00","gmt_modified":"2026-04-23T20:35:18.647598+08:00"},{"id":938,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"cf18c97a9be6c78aa43cc229ed3dad20","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 164-173","gmt_create":"2026-04-23T20:35:18.647972+08:00","gmt_modified":"2026-04-23T20:35:18.647972+08:00"},{"id":939,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"3c7ca5d582dca31c2530b1ce9c058e95","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#10-37","gmt_create":"2026-04-23T20:35:18.648459+08:00","gmt_modified":"2026-04-23T20:35:18.64846+08:00"},{"id":940,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"3c7ca5d582dca31c2530b1ce9c058e95","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-37","gmt_create":"2026-04-23T20:35:18.648785+08:00","gmt_modified":"2026-04-23T20:35:18.648785+08:00"},{"id":941,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"9f82f6d82bf914a608d6afa3d9854abf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#1-174","gmt_create":"2026-04-23T20:35:18.649264+08:00","gmt_modified":"2026-04-23T20:35:18.649264+08:00"},{"id":942,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T20:35:18.650358+08:00","gmt_modified":"2026-04-23T20:35:18.650358+08:00"},{"id":943,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"4fb8856be3a581fe8303d11b2284ca29","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#11-55","gmt_create":"2026-04-23T20:35:18.650954+08:00","gmt_modified":"2026-04-23T20:35:18.650954+08:00"},{"id":944,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"fd541971cebf8a7c167d717f5c5d1ff6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#11-42","gmt_create":"2026-04-23T20:35:18.652232+08:00","gmt_modified":"2026-04-23T20:35:18.652232+08:00"},{"id":945,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"b84f46f058847733347974841f613688","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#11-39","gmt_create":"2026-04-23T20:35:18.653511+08:00","gmt_modified":"2026-04-23T20:35:18.653511+08:00"},{"id":946,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"27047f868643e5457d4f242b4298a9f6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/lib/platforms.ts#1-23","gmt_create":"2026-04-23T20:35:18.654994+08:00","gmt_modified":"2026-04-23T20:35:18.654994+08:00"},{"id":947,"source_id":"ef72f0c3cedb9fd9a87352fe493053dc","target_id":"27047f868643e5457d4f242b4298a9f6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-23","gmt_create":"2026-04-23T20:35:18.6556+08:00","gmt_modified":"2026-04-23T20:35:18.6556+08:00"},{"id":948,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"557ae34b57a5dd8e8fa3bb2a6ce178a7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#163-174","gmt_create":"2026-04-23T20:35:18.657485+08:00","gmt_modified":"2026-04-23T20:35:18.657486+08:00"},{"id":949,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"1526e4e02133a48eac04befb74ec5bd1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#161-173","gmt_create":"2026-04-23T20:35:18.65887+08:00","gmt_modified":"2026-04-23T20:35:18.65887+08:00"},{"id":950,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"1526e4e02133a48eac04befb74ec5bd1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 161-173","gmt_create":"2026-04-23T20:35:18.659265+08:00","gmt_modified":"2026-04-23T20:35:18.659265+08:00"},{"id":951,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"98c02d9bb7aa6e2b6be5f7381e64fd99","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#26-39","gmt_create":"2026-04-23T20:35:18.661103+08:00","gmt_modified":"2026-04-23T20:35:18.661103+08:00"},{"id":952,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"98c02d9bb7aa6e2b6be5f7381e64fd99","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 26-39","gmt_create":"2026-04-23T20:35:18.661433+08:00","gmt_modified":"2026-04-23T20:35:18.661433+08:00"},{"id":953,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"212d822d207a4c0bd7825bbf20e188e9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#59-77","gmt_create":"2026-04-23T20:35:18.661922+08:00","gmt_modified":"2026-04-23T20:35:18.661922+08:00"},{"id":954,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"9b10dac7dbbb1327afc8a525bf4bd0c3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#45-81","gmt_create":"2026-04-23T20:35:18.662781+08:00","gmt_modified":"2026-04-23T20:35:18.662781+08:00"},{"id":955,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"4ded871d02b8119cdd985de8b220b084","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#204-234","gmt_create":"2026-04-23T20:35:18.680675+08:00","gmt_modified":"2026-04-23T20:35:18.680675+08:00"},{"id":956,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"448970b02d89d5e1576f70bdb0063363","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#51-84","gmt_create":"2026-04-23T20:35:18.68314+08:00","gmt_modified":"2026-04-23T20:35:18.68314+08:00"},{"id":957,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"8565f299083b4dcba5a328c947f06fee","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#256-287","gmt_create":"2026-04-23T20:35:18.685341+08:00","gmt_modified":"2026-04-23T20:35:18.685341+08:00"},{"id":958,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"52c01d7b9c17aa16944cbfcf8885be61","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#16-33","gmt_create":"2026-04-23T20:35:18.686894+08:00","gmt_modified":"2026-04-23T20:35:18.686894+08:00"},{"id":959,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"2a971cb83924013902324eceeab22559","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#16-29","gmt_create":"2026-04-23T20:35:18.689849+08:00","gmt_modified":"2026-04-23T20:35:18.689849+08:00"},{"id":960,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"2a971cb83924013902324eceeab22559","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-29","gmt_create":"2026-04-23T20:35:18.69154+08:00","gmt_modified":"2026-04-23T20:35:18.69154+08:00"},{"id":961,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"99326fedad9275392719105b5b6782d6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#31-33","gmt_create":"2026-04-23T20:35:18.692776+08:00","gmt_modified":"2026-04-23T20:35:18.692776+08:00"},{"id":962,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"99326fedad9275392719105b5b6782d6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 31-33","gmt_create":"2026-04-23T20:35:18.693945+08:00","gmt_modified":"2026-04-23T20:35:18.693945+08:00"},{"id":963,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"102223dd13475177a1ade8b9be14fbd1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#79-144","gmt_create":"2026-04-23T20:35:18.695323+08:00","gmt_modified":"2026-04-23T20:35:18.695324+08:00"},{"id":964,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"5e5dacc623918c0f1eba234154c99291","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#16-76","gmt_create":"2026-04-23T20:35:18.696341+08:00","gmt_modified":"2026-04-23T20:35:18.696341+08:00"},{"id":965,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"5e5dacc623918c0f1eba234154c99291","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-76","gmt_create":"2026-04-23T20:35:18.697266+08:00","gmt_modified":"2026-04-23T20:35:18.697267+08:00"},{"id":966,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"5be7e6cf82d6359efddaf131aaf92615","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#323-330","gmt_create":"2026-04-23T20:35:18.701473+08:00","gmt_modified":"2026-04-23T20:35:18.701473+08:00"},{"id":967,"source_id":"74040de652d5e57f548bb5c4adc3e1a0","target_id":"5be7e6cf82d6359efddaf131aaf92615","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 323-330","gmt_create":"2026-04-23T20:35:18.7021+08:00","gmt_modified":"2026-04-23T20:35:18.7021+08:00"},{"id":968,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"129b746e71a9013ceb1b0fcc59942b39","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#86-90","gmt_create":"2026-04-23T20:35:18.703871+08:00","gmt_modified":"2026-04-23T20:35:18.703871+08:00"},{"id":969,"source_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","target_id":"129b746e71a9013ceb1b0fcc59942b39","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 86-90","gmt_create":"2026-04-23T20:35:18.709231+08:00","gmt_modified":"2026-04-23T20:35:18.709231+08:00"},{"id":970,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"fe70b1fef9f36e73d26d84987e927c7a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#15-86","gmt_create":"2026-04-23T20:35:18.712574+08:00","gmt_modified":"2026-04-23T20:35:18.712574+08:00"},{"id":971,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"c066a8d4bffabed87a2e38ccad81c107","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#25-77","gmt_create":"2026-04-23T20:35:18.713529+08:00","gmt_modified":"2026-04-23T20:35:18.713529+08:00"},{"id":972,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"d7c319a04abbc6704da53107e07dd8e7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#12-130","gmt_create":"2026-04-23T20:35:18.714412+08:00","gmt_modified":"2026-04-23T20:35:18.714412+08:00"},{"id":973,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"d780e807ee751f39f331a658b47c4ed3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#24-269","gmt_create":"2026-04-23T20:35:18.715261+08:00","gmt_modified":"2026-04-23T20:35:18.715261+08:00"},{"id":974,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"d780e807ee751f39f331a658b47c4ed3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-269","gmt_create":"2026-04-23T20:35:18.716135+08:00","gmt_modified":"2026-04-23T20:35:18.716135+08:00"},{"id":975,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"8eea43550951387ac740b5e3e64c7691","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#94-96","gmt_create":"2026-04-23T20:35:18.720519+08:00","gmt_modified":"2026-04-23T20:35:18.720519+08:00"},{"id":976,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"8eea43550951387ac740b5e3e64c7691","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 94-96","gmt_create":"2026-04-23T20:35:18.72132+08:00","gmt_modified":"2026-04-23T20:35:18.72132+08:00"},{"id":977,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"ed527c7a549ec333c2b30b59614343df","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#50-54","gmt_create":"2026-04-23T20:35:18.72244+08:00","gmt_modified":"2026-04-23T20:35:18.72244+08:00"},{"id":978,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"a2adbf02c71e4eb2cf1f120e1a2ff517","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#37-41","gmt_create":"2026-04-23T20:35:18.725156+08:00","gmt_modified":"2026-04-23T20:35:18.725157+08:00"},{"id":979,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"b55cc5936c299f819b57b899858438e6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#139-144","gmt_create":"2026-04-23T20:35:18.727146+08:00","gmt_modified":"2026-04-23T20:35:18.727146+08:00"},{"id":980,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"37769b7e6b5588be0065681dedf514ed","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/search_engine.py#140-144","gmt_create":"2026-04-23T20:35:18.728033+08:00","gmt_modified":"2026-04-23T20:35:18.728033+08:00"},{"id":981,"source_id":"6a63f048c16c60c5d2d57012c810ee0e","target_id":"37769b7e6b5588be0065681dedf514ed","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 140-144","gmt_create":"2026-04-23T20:35:18.728855+08:00","gmt_modified":"2026-04-23T20:35:18.728855+08:00"},{"id":982,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"518d184988b97ebc7ef0c0bf5c10f42c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/platforms/kimi.py#24-29","gmt_create":"2026-04-23T20:35:18.72968+08:00","gmt_modified":"2026-04-23T20:35:18.72968+08:00"},{"id":983,"source_id":"8f973791233c698b3e64a4fb28a93d4b","target_id":"518d184988b97ebc7ef0c0bf5c10f42c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-29","gmt_create":"2026-04-23T20:35:18.730545+08:00","gmt_modified":"2026-04-23T20:35:18.730546+08:00"},{"id":984,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"818504ee2e17d2f9cc8fe115ca321138","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#34-38","gmt_create":"2026-04-23T20:35:18.73162+08:00","gmt_modified":"2026-04-23T20:35:18.73162+08:00"},{"id":985,"source_id":"6b3d903205941aa9391dd90016e1102c","target_id":"818504ee2e17d2f9cc8fe115ca321138","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 34-38","gmt_create":"2026-04-23T20:35:18.732614+08:00","gmt_modified":"2026-04-23T20:35:18.732614+08:00"},{"id":986,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"55f1628f1ab6f323710e367e12146b1a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#67-71","gmt_create":"2026-04-23T20:35:18.733467+08:00","gmt_modified":"2026-04-23T20:35:18.733467+08:00"},{"id":987,"source_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","target_id":"8a1a0ffd82ac6ff54d3410e4ce59a6b8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#25-56","gmt_create":"2026-04-23T20:35:18.735579+08:00","gmt_modified":"2026-04-23T20:35:18.735579+08:00"},{"id":988,"source_id":"7538ffe4902ab6041adb28b19844962a","target_id":"8a1a0ffd82ac6ff54d3410e4ce59a6b8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-56","gmt_create":"2026-04-23T20:35:18.73663+08:00","gmt_modified":"2026-04-23T20:35:18.73663+08:00"},{"id":989,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"b0c428683c8a3e6922d90ca0d8c2736d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/database.py","gmt_create":"2026-04-23T20:35:45.660646+08:00","gmt_modified":"2026-04-23T20:35:45.660646+08:00"},{"id":990,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"c59f8c276697a070dffc581fe94d809c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/user.py","gmt_create":"2026-04-23T20:35:45.661843+08:00","gmt_modified":"2026-04-23T20:35:45.661843+08:00"},{"id":991,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"b74caccb06844efcdb14d8324cff65c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query.py","gmt_create":"2026-04-23T20:35:45.662817+08:00","gmt_modified":"2026-04-23T20:35:45.662818+08:00"},{"id":992,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"b4a81ef789630d0af6a8d50859d01bf3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/citation_record.py","gmt_create":"2026-04-23T20:35:45.663785+08:00","gmt_modified":"2026-04-23T20:35:45.663785+08:00"},{"id":993,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"069738f21ac2da7349d22683e8c36929","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/query_task.py","gmt_create":"2026-04-23T20:35:45.665202+08:00","gmt_modified":"2026-04-23T20:35:45.665202+08:00"},{"id":994,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"bceca00463fe55d3bcafda728f97f723","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/subscription.py","gmt_create":"2026-04-23T20:35:45.667209+08:00","gmt_modified":"2026-04-23T20:35:45.667209+08:00"},{"id":995,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"99fe1b288fd41daa86c2dfbab819abf0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/__init__.py","gmt_create":"2026-04-23T20:35:45.669525+08:00","gmt_modified":"2026-04-23T20:35:45.669526+08:00"},{"id":996,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"a680d4819f5da57fe9fa0e6bc708f380","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/alembic/env.py","gmt_create":"2026-04-23T20:35:45.670438+08:00","gmt_modified":"2026-04-23T20:35:45.670438+08:00"},{"id":997,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"d4f95fcf50683b5bf6167c7d2a6b126d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/alembic/versions/488d0bd5ab01_initial_migration.py","gmt_create":"2026-04-23T20:35:45.671423+08:00","gmt_modified":"2026-04-23T20:35:45.671424+08:00"},{"id":998,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"f6e6948dd0cdd3894bd9928b21feb979","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py","gmt_create":"2026-04-23T20:35:45.672124+08:00","gmt_modified":"2026-04-23T20:35:45.672124+08:00"},{"id":999,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"50f2e6bdc4a79e69bd43ea8d6fec67fe","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/alembic.ini","gmt_create":"2026-04-23T20:35:45.676799+08:00","gmt_modified":"2026-04-23T20:35:45.676799+08:00"},{"id":1000,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T20:35:45.678551+08:00","gmt_modified":"2026-04-23T20:35:45.678551+08:00"},{"id":1001,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"fc6242433ae9506bcc0bf4cb0dce1413","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: docker-compose.yml","gmt_create":"2026-04-23T20:35:45.680906+08:00","gmt_modified":"2026-04-23T20:35:45.680906+08:00"},{"id":1002,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"88d22de3b2a7419868e8ae19130d860c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/query.py","gmt_create":"2026-04-23T20:35:45.682494+08:00","gmt_modified":"2026-04-23T20:35:45.682494+08:00"},{"id":1003,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"04e3926c080e795713bff683e7dc9d3e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/citation.py","gmt_create":"2026-04-23T20:35:45.684758+08:00","gmt_modified":"2026-04-23T20:35:45.684758+08:00"},{"id":1004,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"1a3336b4af8a39a055e912724338580c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/schemas/citation.py","gmt_create":"2026-04-23T20:35:45.687229+08:00","gmt_modified":"2026-04-23T20:35:45.687229+08:00"},{"id":1005,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T20:35:45.69372+08:00","gmt_modified":"2026-04-23T20:35:45.69372+08:00"},{"id":1006,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"58901c94d975d87e652a4dc6c8dda656","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/reports.py","gmt_create":"2026-04-23T20:35:45.696657+08:00","gmt_modified":"2026-04-23T20:35:45.696657+08:00"},{"id":1007,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"84fbed7d35f7752e2117a74fcaf5f0e9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#1-17","gmt_create":"2026-04-23T20:35:45.698676+08:00","gmt_modified":"2026-04-23T20:35:45.698677+08:00"},{"id":1008,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"9bfc041fe426da2eb78353827e8d9163","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#1-29","gmt_create":"2026-04-23T20:35:45.700125+08:00","gmt_modified":"2026-04-23T20:35:45.700125+08:00"},{"id":1009,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"136f172c732d0cc130532a4f0df475a4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#1-41","gmt_create":"2026-04-23T20:35:45.701888+08:00","gmt_modified":"2026-04-23T20:35:45.701888+08:00"},{"id":1010,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"6281fff17a86ec1895c64d87c2ae7fb1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#1-55","gmt_create":"2026-04-23T20:35:45.704398+08:00","gmt_modified":"2026-04-23T20:35:45.704399+08:00"},{"id":1011,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"d4f99d3dd9fe489c354edf5fe2f8803d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#1-44","gmt_create":"2026-04-23T20:35:45.711611+08:00","gmt_modified":"2026-04-23T20:35:45.711611+08:00"},{"id":1012,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"d4f99d3dd9fe489c354edf5fe2f8803d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-44","gmt_create":"2026-04-23T20:35:45.713712+08:00","gmt_modified":"2026-04-23T20:35:45.713713+08:00"},{"id":1013,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"6628e006b8e5ca16160743528b6b0506","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#1-39","gmt_create":"2026-04-23T20:35:45.716382+08:00","gmt_modified":"2026-04-23T20:35:45.716382+08:00"},{"id":1014,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"86e37040be1aeb400fab9b529f5404c8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/subscription.py#1-37","gmt_create":"2026-04-23T20:35:45.719041+08:00","gmt_modified":"2026-04-23T20:35:45.719041+08:00"},{"id":1015,"source_id":"bceca00463fe55d3bcafda728f97f723","target_id":"86e37040be1aeb400fab9b529f5404c8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-04-23T20:35:45.722046+08:00","gmt_modified":"2026-04-23T20:35:45.722047+08:00"},{"id":1016,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"211463f5b49610f09594c40c0a235943","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/env.py#1-89","gmt_create":"2026-04-23T20:35:45.733734+08:00","gmt_modified":"2026-04-23T20:35:45.733735+08:00"},{"id":1017,"source_id":"a680d4819f5da57fe9fa0e6bc708f380","target_id":"211463f5b49610f09594c40c0a235943","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-89","gmt_create":"2026-04-23T20:35:45.736063+08:00","gmt_modified":"2026-04-23T20:35:45.736064+08:00"},{"id":1018,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"48d22eaee09e364a293ad6c4750f5c5a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: docker-compose.yml#1-71","gmt_create":"2026-04-23T20:35:45.738707+08:00","gmt_modified":"2026-04-23T20:35:45.738707+08:00"},{"id":1019,"source_id":"fc6242433ae9506bcc0bf4cb0dce1413","target_id":"48d22eaee09e364a293ad6c4750f5c5a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-71","gmt_create":"2026-04-23T20:35:45.743112+08:00","gmt_modified":"2026-04-23T20:35:45.743112+08:00"},{"id":1020,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"afe4138895492c26aac5c0120ef46cd8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/__init__.py#1-14","gmt_create":"2026-04-23T20:35:45.763731+08:00","gmt_modified":"2026-04-23T20:35:45.763731+08:00"},{"id":1021,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"98cc82f62b83678f06a33cf9231ecdf8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#1-128","gmt_create":"2026-04-23T20:35:45.768447+08:00","gmt_modified":"2026-04-23T20:35:45.768447+08:00"},{"id":1022,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"98cc82f62b83678f06a33cf9231ecdf8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-128","gmt_create":"2026-04-23T20:35:45.771158+08:00","gmt_modified":"2026-04-23T20:35:45.771158+08:00"},{"id":1023,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"e1aabd52989e47806fb997157381e1cf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py#1-37","gmt_create":"2026-04-23T20:35:45.780749+08:00","gmt_modified":"2026-04-23T20:35:45.780749+08:00"},{"id":1024,"source_id":"f6e6948dd0cdd3894bd9928b21feb979","target_id":"e1aabd52989e47806fb997157381e1cf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-04-23T20:35:45.782446+08:00","gmt_modified":"2026-04-23T20:35:45.782446+08:00"},{"id":1025,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"916551131bd9ac8c9f9c8bb762af1fa4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#1-130","gmt_create":"2026-04-23T20:35:45.783981+08:00","gmt_modified":"2026-04-23T20:35:45.783981+08:00"},{"id":1026,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"5d2836286eb7d4eb6039b004a9744d26","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#1-429","gmt_create":"2026-04-23T20:35:45.792834+08:00","gmt_modified":"2026-04-23T20:35:45.792834+08:00"},{"id":1027,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"ac77e4875817616194b7b5997d4fb1ae","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#57-94","gmt_create":"2026-04-23T20:35:45.806492+08:00","gmt_modified":"2026-04-23T20:35:45.806492+08:00"},{"id":1028,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"ac77e4875817616194b7b5997d4fb1ae","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 57-94","gmt_create":"2026-04-23T20:35:45.808076+08:00","gmt_modified":"2026-04-23T20:35:45.808076+08:00"},{"id":1029,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"0e57efd98dacc85da21f995980371ee4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py#21-37","gmt_create":"2026-04-23T20:35:45.813468+08:00","gmt_modified":"2026-04-23T20:35:45.813468+08:00"},{"id":1030,"source_id":"f6e6948dd0cdd3894bd9928b21feb979","target_id":"0e57efd98dacc85da21f995980371ee4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 21-37","gmt_create":"2026-04-23T20:35:45.81891+08:00","gmt_modified":"2026-04-23T20:35:45.81891+08:00"},{"id":1031,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"ed527c7a549ec333c2b30b59614343df","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#50-54","gmt_create":"2026-04-23T20:35:45.821047+08:00","gmt_modified":"2026-04-23T20:35:45.821047+08:00"},{"id":1032,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"717eb27184726e4f78d694984d29420c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#37-44","gmt_create":"2026-04-23T20:35:45.829709+08:00","gmt_modified":"2026-04-23T20:35:45.829709+08:00"},{"id":1033,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"717eb27184726e4f78d694984d29420c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 37-44","gmt_create":"2026-04-23T20:35:45.831123+08:00","gmt_modified":"2026-04-23T20:35:45.831123+08:00"},{"id":1034,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"f6c9f1b4e8646c366a31426a4537675d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#36-38","gmt_create":"2026-04-23T20:35:45.832035+08:00","gmt_modified":"2026-04-23T20:35:45.832035+08:00"},{"id":1035,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"56e46969bdb790a5e8f333184b878d6d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#11-41","gmt_create":"2026-04-23T20:35:45.839744+08:00","gmt_modified":"2026-04-23T20:35:45.839744+08:00"},{"id":1036,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"bfdf3479f244dc6794628d9df10ab6d0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query.py#11-48","gmt_create":"2026-04-23T20:35:45.841136+08:00","gmt_modified":"2026-04-23T20:35:45.841136+08:00"},{"id":1037,"source_id":"b74caccb06844efcdb14d8324cff65c2","target_id":"bfdf3479f244dc6794628d9df10ab6d0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-48","gmt_create":"2026-04-23T20:35:45.842187+08:00","gmt_modified":"2026-04-23T20:35:45.842187+08:00"},{"id":1038,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"f5f9f0d96263ae84631c7a8d7e9b3648","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/citation_record.py#11-44","gmt_create":"2026-04-23T20:35:45.843279+08:00","gmt_modified":"2026-04-23T20:35:45.843279+08:00"},{"id":1039,"source_id":"b4a81ef789630d0af6a8d50859d01bf3","target_id":"f5f9f0d96263ae84631c7a8d7e9b3648","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-44","gmt_create":"2026-04-23T20:35:45.84404+08:00","gmt_modified":"2026-04-23T20:35:45.84404+08:00"},{"id":1040,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"818d1354dc0665798f3d91a2ca5153d6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/query_task.py#11-34","gmt_create":"2026-04-23T20:35:45.845215+08:00","gmt_modified":"2026-04-23T20:35:45.845215+08:00"},{"id":1041,"source_id":"069738f21ac2da7349d22683e8c36929","target_id":"818d1354dc0665798f3d91a2ca5153d6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-34","gmt_create":"2026-04-23T20:35:45.845935+08:00","gmt_modified":"2026-04-23T20:35:45.845935+08:00"},{"id":1042,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"24aade4c34609a8ab28e4643a3692201","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/subscription.py#11-36","gmt_create":"2026-04-23T20:35:45.848681+08:00","gmt_modified":"2026-04-23T20:35:45.848681+08:00"},{"id":1043,"source_id":"bceca00463fe55d3bcafda728f97f723","target_id":"24aade4c34609a8ab28e4643a3692201","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-36","gmt_create":"2026-04-23T20:35:45.853262+08:00","gmt_modified":"2026-04-23T20:35:45.853263+08:00"},{"id":1044,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"d34337b9ff77246979252d2fd8fb8018","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/env.py#33-88","gmt_create":"2026-04-23T20:35:45.861311+08:00","gmt_modified":"2026-04-23T20:35:45.861311+08:00"},{"id":1045,"source_id":"a680d4819f5da57fe9fa0e6bc708f380","target_id":"d34337b9ff77246979252d2fd8fb8018","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-88","gmt_create":"2026-04-23T20:35:45.866334+08:00","gmt_modified":"2026-04-23T20:35:45.866335+08:00"},{"id":1046,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"4d11ddf7abb8076d81b30c4315786f9a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#21-128","gmt_create":"2026-04-23T20:35:45.871459+08:00","gmt_modified":"2026-04-23T20:35:45.871459+08:00"},{"id":1047,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"eb63042f04a22f9a67bd498df1684d20","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic/versions/488d0bd5ab01_initial_migration.py#36-111","gmt_create":"2026-04-23T20:35:45.882867+08:00","gmt_modified":"2026-04-23T20:35:45.882867+08:00"},{"id":1048,"source_id":"d4f95fcf50683b5bf6167c7d2a6b126d","target_id":"eb63042f04a22f9a67bd498df1684d20","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 36-111","gmt_create":"2026-04-23T20:35:45.883763+08:00","gmt_modified":"2026-04-23T20:35:45.883763+08:00"},{"id":1049,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"9b10dac7dbbb1327afc8a525bf4bd0c3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#45-81","gmt_create":"2026-04-23T20:35:45.886934+08:00","gmt_modified":"2026-04-23T20:35:45.886934+08:00"},{"id":1050,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"c651c7ad6747a92ee96eabb2eb82afdd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#12-18","gmt_create":"2026-04-23T20:35:45.888179+08:00","gmt_modified":"2026-04-23T20:35:45.888179+08:00"},{"id":1051,"source_id":"b0c428683c8a3e6922d90ca0d8c2736d","target_id":"c651c7ad6747a92ee96eabb2eb82afdd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-18","gmt_create":"2026-04-23T20:35:45.891674+08:00","gmt_modified":"2026-04-23T20:35:45.891674+08:00"},{"id":1052,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"dd01eee487298a28e950f6345196f1d4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#30-79","gmt_create":"2026-04-23T20:35:45.892903+08:00","gmt_modified":"2026-04-23T20:35:45.892903+08:00"},{"id":1053,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"dd01eee487298a28e950f6345196f1d4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 30-79","gmt_create":"2026-04-23T20:35:45.895814+08:00","gmt_modified":"2026-04-23T20:35:45.895814+08:00"},{"id":1054,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"7dae7237f11c5100bf7889c105193cf6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/query.py#12-32","gmt_create":"2026-04-23T20:35:45.897237+08:00","gmt_modified":"2026-04-23T20:35:45.897237+08:00"},{"id":1055,"source_id":"88d22de3b2a7419868e8ae19130d860c","target_id":"7dae7237f11c5100bf7889c105193cf6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-32","gmt_create":"2026-04-23T20:35:45.901349+08:00","gmt_modified":"2026-04-23T20:35:45.901349+08:00"},{"id":1056,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"cc64cf609f5ff218f618e0664ffa7cc7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#298-308","gmt_create":"2026-04-23T20:35:45.903364+08:00","gmt_modified":"2026-04-23T20:35:45.903364+08:00"},{"id":1057,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"cc64cf609f5ff218f618e0664ffa7cc7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 298-308","gmt_create":"2026-04-23T20:35:45.904411+08:00","gmt_modified":"2026-04-23T20:35:45.904411+08:00"},{"id":1058,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"ce7e334595a4ce912e0d116314db9a35","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#342-429","gmt_create":"2026-04-23T20:35:45.905854+08:00","gmt_modified":"2026-04-23T20:35:45.905854+08:00"},{"id":1059,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"ce7e334595a4ce912e0d116314db9a35","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 342-429","gmt_create":"2026-04-23T20:35:45.906963+08:00","gmt_modified":"2026-04-23T20:35:45.906964+08:00"},{"id":1060,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"2f46f212597e3c245b9e5dcc5dbc863d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/citation.py#7-18","gmt_create":"2026-04-23T20:35:45.90882+08:00","gmt_modified":"2026-04-23T20:35:45.90882+08:00"},{"id":1061,"source_id":"1a3336b4af8a39a055e912724338580c","target_id":"2f46f212597e3c245b9e5dcc5dbc863d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 7-18","gmt_create":"2026-04-23T20:35:45.909475+08:00","gmt_modified":"2026-04-23T20:35:45.909476+08:00"},{"id":1062,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"dc40f1dd3e59ee7f046019201068bea1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/citation.py#14-22","gmt_create":"2026-04-23T20:35:45.919758+08:00","gmt_modified":"2026-04-23T20:35:45.919759+08:00"},{"id":1063,"source_id":"04e3926c080e795713bff683e7dc9d3e","target_id":"dc40f1dd3e59ee7f046019201068bea1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 14-22","gmt_create":"2026-04-23T20:35:45.920772+08:00","gmt_modified":"2026-04-23T20:35:45.920772+08:00"},{"id":1064,"source_id":"c7eb113b-b503-4d83-be7f-9ccf3350c9d9","target_id":"19e75845-5147-4aeb-90be-16f3aa270465","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c7eb113b-b503-4d83-be7f-9ccf3350c9d9 -\u003e 19e75845-5147-4aeb-90be-16f3aa270465","gmt_create":"2026-04-23T20:35:46.934281+08:00","gmt_modified":"2026-04-23T20:35:46.934281+08:00"},{"id":1065,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"d5c75004-b01b-416f-850a-4791c5489a32","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ffbb970e-56e0-40ad-bd88-1a1e55482d96 -\u003e d5c75004-b01b-416f-850a-4791c5489a32","gmt_create":"2026-04-23T20:35:46.942283+08:00","gmt_modified":"2026-04-23T20:35:46.942284+08:00"},{"id":1066,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"c3fa653f-8dd7-41fe-8c2e-8b60adbf70f4","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ffbb970e-56e0-40ad-bd88-1a1e55482d96 -\u003e c3fa653f-8dd7-41fe-8c2e-8b60adbf70f4","gmt_create":"2026-04-23T20:35:46.944556+08:00","gmt_modified":"2026-04-23T20:35:46.944556+08:00"},{"id":1067,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"262a3941-fdc6-46b0-b767-be40aa9d5761","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ffbb970e-56e0-40ad-bd88-1a1e55482d96 -\u003e 262a3941-fdc6-46b0-b767-be40aa9d5761","gmt_create":"2026-04-23T20:35:46.946394+08:00","gmt_modified":"2026-04-23T20:35:46.946394+08:00"},{"id":1068,"source_id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","target_id":"7c0201f7-9e02-4cba-9ee1-81c3477f049a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ffbb970e-56e0-40ad-bd88-1a1e55482d96 -\u003e 7c0201f7-9e02-4cba-9ee1-81c3477f049a","gmt_create":"2026-04-23T20:35:46.948347+08:00","gmt_modified":"2026-04-23T20:35:46.948347+08:00"},{"id":1069,"source_id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","target_id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: deb919cc-9541-4ed7-a581-ae2876ea67c2 -\u003e a1cc822d-5382-431c-8c49-cf398fb5eb3c","gmt_create":"2026-04-23T20:35:46.950364+08:00","gmt_modified":"2026-04-23T20:35:46.950364+08:00"},{"id":1070,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"37003fc0-1cf5-4264-996b-40807001875f","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69 -\u003e 37003fc0-1cf5-4264-996b-40807001875f","gmt_create":"2026-04-23T20:35:46.957122+08:00","gmt_modified":"2026-04-23T20:35:46.957122+08:00"},{"id":1071,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"2126339b-b0f5-4152-924b-cbe028cd0c39","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69 -\u003e 2126339b-b0f5-4152-924b-cbe028cd0c39","gmt_create":"2026-04-23T20:35:46.959782+08:00","gmt_modified":"2026-04-23T20:35:46.959782+08:00"},{"id":1072,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69 -\u003e fab60eaf-9652-4cb5-9f9e-0525caa62d63","gmt_create":"2026-04-23T20:35:46.965729+08:00","gmt_modified":"2026-04-23T20:35:46.965729+08:00"},{"id":1073,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"00359e45-209d-4be3-8795-50dea52bdba1","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69 -\u003e 00359e45-209d-4be3-8795-50dea52bdba1","gmt_create":"2026-04-23T20:35:46.970985+08:00","gmt_modified":"2026-04-23T20:35:46.970985+08:00"},{"id":1074,"source_id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","target_id":"2632a6f9-774e-4a91-94da-a984bdb20758","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69 -\u003e 2632a6f9-774e-4a91-94da-a984bdb20758","gmt_create":"2026-04-23T20:35:46.974435+08:00","gmt_modified":"2026-04-23T20:35:46.974435+08:00"},{"id":1075,"source_id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","target_id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 49915365-e38e-43b5-beac-6aa7d5a74cbb -\u003e 74d3018f-4e23-4687-8bf4-7fb403f479f7","gmt_create":"2026-04-23T20:35:46.980653+08:00","gmt_modified":"2026-04-23T20:35:46.980653+08:00"},{"id":1076,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"a26ee01cf41da3b956e1650448c156fa","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/requirements.txt","gmt_create":"2026-04-23T21:00:59.656249+08:00","gmt_modified":"2026-04-23T21:00:59.656249+08:00"},{"id":1077,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"aaf5bce6be82d2f947bfa5c1806de452","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/package.json","gmt_create":"2026-04-23T21:00:59.656613+08:00","gmt_modified":"2026-04-23T21:00:59.656613+08:00"},{"id":1078,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"9228ff67d4c757a85d9421b71f4b29f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/main.py","gmt_create":"2026-04-23T21:00:59.656928+08:00","gmt_modified":"2026-04-23T21:00:59.656928+08:00"},{"id":1079,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"e9b52adbec3c07cf021e488dd3f99ab4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/Dockerfile","gmt_create":"2026-04-23T21:00:59.657229+08:00","gmt_modified":"2026-04-23T21:00:59.657229+08:00"},{"id":1080,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"5e414f2ef9b69e55e00ab15f85b9291a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/Dockerfile","gmt_create":"2026-04-23T21:00:59.657778+08:00","gmt_modified":"2026-04-23T21:00:59.657779+08:00"},{"id":1081,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"fc6242433ae9506bcc0bf4cb0dce1413","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: docker-compose.yml","gmt_create":"2026-04-23T21:00:59.658783+08:00","gmt_modified":"2026-04-23T21:00:59.658783+08:00"},{"id":1082,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"50f2e6bdc4a79e69bd43ea8d6fec67fe","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/alembic.ini","gmt_create":"2026-04-23T21:00:59.659121+08:00","gmt_modified":"2026-04-23T21:00:59.659121+08:00"},{"id":1083,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T21:00:59.659433+08:00","gmt_modified":"2026-04-23T21:00:59.659433+08:00"},{"id":1084,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"fb8af100a06778e1fbdac4790a3ed0a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/tsconfig.json","gmt_create":"2026-04-23T21:00:59.659973+08:00","gmt_modified":"2026-04-23T21:00:59.659973+08:00"},{"id":1085,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"01056dad8851d3e9bd532eb4cab33792","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/tailwind.config.ts","gmt_create":"2026-04-23T21:00:59.660739+08:00","gmt_modified":"2026-04-23T21:00:59.660739+08:00"},{"id":1086,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"4d9b59c294a0aac5e300b3de715eb226","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/.eslintrc.json","gmt_create":"2026-04-23T21:00:59.661096+08:00","gmt_modified":"2026-04-23T21:00:59.661097+08:00"},{"id":1087,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"0ef1efea889dba3e1f299626df479571","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/conftest.py","gmt_create":"2026-04-23T21:00:59.661386+08:00","gmt_modified":"2026-04-23T21:00:59.661386+08:00"},{"id":1088,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"93022c8938ce318f167277cfa65c29a7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/auth.py","gmt_create":"2026-04-23T21:00:59.661691+08:00","gmt_modified":"2026-04-23T21:00:59.661691+08:00"},{"id":1089,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"e0c0ca66b8b81cf66e078a7ab162c07f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/schemas/auth.py","gmt_create":"2026-04-23T21:00:59.661989+08:00","gmt_modified":"2026-04-23T21:00:59.661989+08:00"},{"id":1090,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"c59f8c276697a070dffc581fe94d809c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/models/user.py","gmt_create":"2026-04-23T21:00:59.662317+08:00","gmt_modified":"2026-04-23T21:00:59.662317+08:00"},{"id":1091,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"48a560c49d2b21da327c036ec2934b96","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: README.md","gmt_create":"2026-04-23T21:00:59.662608+08:00","gmt_modified":"2026-04-23T21:00:59.662608+08:00"},{"id":1092,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"48d22eaee09e364a293ad6c4750f5c5a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: docker-compose.yml#1-71","gmt_create":"2026-04-23T21:00:59.663719+08:00","gmt_modified":"2026-04-23T21:00:59.663719+08:00"},{"id":1093,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"01a0c4b40819965823b56e9da858c024","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/Dockerfile#1-15","gmt_create":"2026-04-23T21:00:59.66424+08:00","gmt_modified":"2026-04-23T21:00:59.66424+08:00"},{"id":1094,"source_id":"5e414f2ef9b69e55e00ab15f85b9291a","target_id":"01a0c4b40819965823b56e9da858c024","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-15","gmt_create":"2026-04-23T21:00:59.664546+08:00","gmt_modified":"2026-04-23T21:00:59.664546+08:00"},{"id":1095,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"412695e5de2014514a8f62f98c573656","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/Dockerfile#1-41","gmt_create":"2026-04-23T21:00:59.66492+08:00","gmt_modified":"2026-04-23T21:00:59.66492+08:00"},{"id":1096,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"71a37a516437e94fd82a87efc70a3f16","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/package.json#1-40","gmt_create":"2026-04-23T21:00:59.665702+08:00","gmt_modified":"2026-04-23T21:00:59.665702+08:00"},{"id":1097,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"7289a3568c137c8a671fc8c963bb8d28","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/requirements.txt#1-35","gmt_create":"2026-04-23T21:00:59.688277+08:00","gmt_modified":"2026-04-23T21:00:59.688278+08:00"},{"id":1098,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"c2747ca16b879bca0f68955534c3c4fc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#1-48","gmt_create":"2026-04-23T21:00:59.689553+08:00","gmt_modified":"2026-04-23T21:00:59.689553+08:00"},{"id":1099,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"84fbed7d35f7752e2117a74fcaf5f0e9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#1-17","gmt_create":"2026-04-23T21:00:59.690337+08:00","gmt_modified":"2026-04-23T21:00:59.690337+08:00"},{"id":1100,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"13f6ca76349ef86ae756bb519f122bc5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic.ini#1-150","gmt_create":"2026-04-23T21:00:59.691229+08:00","gmt_modified":"2026-04-23T21:00:59.691229+08:00"},{"id":1101,"source_id":"50f2e6bdc4a79e69bd43ea8d6fec67fe","target_id":"13f6ca76349ef86ae756bb519f122bc5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-150","gmt_create":"2026-04-23T21:00:59.691641+08:00","gmt_modified":"2026-04-23T21:00:59.691641+08:00"},{"id":1102,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"74abd6612105c29b67178fa9dbd04b61","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/tsconfig.json#1-27","gmt_create":"2026-04-23T21:00:59.696048+08:00","gmt_modified":"2026-04-23T21:00:59.696048+08:00"},{"id":1103,"source_id":"fb8af100a06778e1fbdac4790a3ed0a9","target_id":"74abd6612105c29b67178fa9dbd04b61","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-27","gmt_create":"2026-04-23T21:00:59.696535+08:00","gmt_modified":"2026-04-23T21:00:59.696535+08:00"},{"id":1104,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"5bdaabf085a7c3eb6e87c5ad7479e25d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/.eslintrc.json#1-4","gmt_create":"2026-04-23T21:00:59.697248+08:00","gmt_modified":"2026-04-23T21:00:59.697248+08:00"},{"id":1105,"source_id":"4d9b59c294a0aac5e300b3de715eb226","target_id":"5bdaabf085a7c3eb6e87c5ad7479e25d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-4","gmt_create":"2026-04-23T21:00:59.697778+08:00","gmt_modified":"2026-04-23T21:00:59.697778+08:00"},{"id":1106,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"89d70e5f89be23a229e3ee59982b8e6e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/tailwind.config.ts#1-57","gmt_create":"2026-04-23T21:00:59.69854+08:00","gmt_modified":"2026-04-23T21:00:59.69854+08:00"},{"id":1107,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"9482f4f6279a4f636b77e69b8273b996","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic.ini#86-114","gmt_create":"2026-04-23T21:00:59.700127+08:00","gmt_modified":"2026-04-23T21:00:59.700127+08:00"},{"id":1108,"source_id":"50f2e6bdc4a79e69bd43ea8d6fec67fe","target_id":"9482f4f6279a4f636b77e69b8273b996","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 86-114","gmt_create":"2026-04-23T21:00:59.700939+08:00","gmt_modified":"2026-04-23T21:00:59.70094+08:00"},{"id":1109,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"397b266f19a1addebdf6c32db71ae77f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/conftest.py#1-71","gmt_create":"2026-04-23T21:00:59.70244+08:00","gmt_modified":"2026-04-23T21:00:59.70244+08:00"},{"id":1110,"source_id":"0ef1efea889dba3e1f299626df479571","target_id":"397b266f19a1addebdf6c32db71ae77f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-71","gmt_create":"2026-04-23T21:00:59.703412+08:00","gmt_modified":"2026-04-23T21:00:59.703413+08:00"},{"id":1111,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"b55a164add5a8fec2ef0e489f7234829","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#24-47","gmt_create":"2026-04-23T21:00:59.707909+08:00","gmt_modified":"2026-04-23T21:00:59.707909+08:00"},{"id":1112,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"eb603ec2611957de67af00756f4b1efa","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#7-13","gmt_create":"2026-04-23T21:00:59.708942+08:00","gmt_modified":"2026-04-23T21:00:59.708942+08:00"},{"id":1113,"source_id":"9ff19022ef915615911280e3c49ed44b","target_id":"eb603ec2611957de67af00756f4b1efa","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 7-13","gmt_create":"2026-04-23T21:00:59.713128+08:00","gmt_modified":"2026-04-23T21:00:59.713128+08:00"},{"id":1114,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"c25b39830f3b7734da975acc7f214666","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/Dockerfile#31-33","gmt_create":"2026-04-23T21:00:59.714181+08:00","gmt_modified":"2026-04-23T21:00:59.714181+08:00"},{"id":1115,"source_id":"e9b52adbec3c07cf021e488dd3f99ab4","target_id":"c25b39830f3b7734da975acc7f214666","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 31-33","gmt_create":"2026-04-23T21:00:59.71645+08:00","gmt_modified":"2026-04-23T21:00:59.71645+08:00"},{"id":1116,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"4c9d362ecce8e796e6f14850def049b0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: docker-compose.yml#4-20","gmt_create":"2026-04-23T21:00:59.717301+08:00","gmt_modified":"2026-04-23T21:00:59.717301+08:00"},{"id":1117,"source_id":"fc6242433ae9506bcc0bf4cb0dce1413","target_id":"4c9d362ecce8e796e6f14850def049b0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 4-20","gmt_create":"2026-04-23T21:00:59.718148+08:00","gmt_modified":"2026-04-23T21:00:59.718148+08:00"},{"id":1118,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"d5827be2cfbe41c8177660ae877e93a4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: docker-compose.yml#22-34","gmt_create":"2026-04-23T21:00:59.719092+08:00","gmt_modified":"2026-04-23T21:00:59.719092+08:00"},{"id":1119,"source_id":"fc6242433ae9506bcc0bf4cb0dce1413","target_id":"d5827be2cfbe41c8177660ae877e93a4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 22-34","gmt_create":"2026-04-23T21:00:59.719965+08:00","gmt_modified":"2026-04-23T21:00:59.719965+08:00"},{"id":1120,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"03a65cdcfc173217d12ad8a417f8f033","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#13-21","gmt_create":"2026-04-23T21:00:59.720372+08:00","gmt_modified":"2026-04-23T21:00:59.720372+08:00"},{"id":1121,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"03a65cdcfc173217d12ad8a417f8f033","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-21","gmt_create":"2026-04-23T21:00:59.721352+08:00","gmt_modified":"2026-04-23T21:00:59.721353+08:00"},{"id":1122,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"6286d4be455dc058c8be2ee4e0d1175a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#38-42","gmt_create":"2026-04-23T21:00:59.722016+08:00","gmt_modified":"2026-04-23T21:00:59.722016+08:00"},{"id":1123,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"3365fa8db33d43bab1d0a614e8af3a70","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#45-47","gmt_create":"2026-04-23T21:00:59.722511+08:00","gmt_modified":"2026-04-23T21:00:59.722511+08:00"},{"id":1124,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"3365fa8db33d43bab1d0a614e8af3a70","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 45-47","gmt_create":"2026-04-23T21:00:59.724292+08:00","gmt_modified":"2026-04-23T21:00:59.724292+08:00"},{"id":1125,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"4aad38dfc00a0877bd965c3d0b3c280c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/auth.py#7-34","gmt_create":"2026-04-23T21:00:59.725223+08:00","gmt_modified":"2026-04-23T21:00:59.725223+08:00"},{"id":1126,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"56e46969bdb790a5e8f333184b878d6d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#11-41","gmt_create":"2026-04-23T21:00:59.725972+08:00","gmt_modified":"2026-04-23T21:00:59.725972+08:00"},{"id":1127,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"f66d9907b467b110c638bd527efd95c5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/auth.py#1-43","gmt_create":"2026-04-23T21:00:59.727037+08:00","gmt_modified":"2026-04-23T21:00:59.727038+08:00"},{"id":1128,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"6f637c2b0796ec533aafb3b865c11cf0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/schemas/auth.py#1-34","gmt_create":"2026-04-23T21:00:59.728108+08:00","gmt_modified":"2026-04-23T21:00:59.728108+08:00"},{"id":1129,"source_id":"e0c0ca66b8b81cf66e078a7ab162c07f","target_id":"6f637c2b0796ec533aafb3b865c11cf0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-34","gmt_create":"2026-04-23T21:00:59.728891+08:00","gmt_modified":"2026-04-23T21:00:59.728891+08:00"},{"id":1130,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"136f172c732d0cc130532a4f0df475a4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/models/user.py#1-41","gmt_create":"2026-04-23T21:00:59.729618+08:00","gmt_modified":"2026-04-23T21:00:59.729618+08:00"},{"id":1131,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"a698e13bfada239280fc9354ff9e2331","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#7-8","gmt_create":"2026-04-23T21:00:59.731437+08:00","gmt_modified":"2026-04-23T21:00:59.731438+08:00"},{"id":1132,"source_id":"9ff19022ef915615911280e3c49ed44b","target_id":"a698e13bfada239280fc9354ff9e2331","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 7-8","gmt_create":"2026-04-23T21:00:59.731927+08:00","gmt_modified":"2026-04-23T21:00:59.731927+08:00"},{"id":1133,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"37bbab6e4f16db7eac6eee9d05e80e46","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: README.md#1-3","gmt_create":"2026-04-23T21:00:59.737212+08:00","gmt_modified":"2026-04-23T21:00:59.737212+08:00"},{"id":1134,"source_id":"48a560c49d2b21da327c036ec2934b96","target_id":"37bbab6e4f16db7eac6eee9d05e80e46","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-3","gmt_create":"2026-04-23T21:00:59.737807+08:00","gmt_modified":"2026-04-23T21:00:59.737807+08:00"},{"id":1135,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"63ecbf5e72a0354028b84eb531a58977","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/package.json#11-38","gmt_create":"2026-04-23T21:00:59.738706+08:00","gmt_modified":"2026-04-23T21:00:59.738706+08:00"},{"id":1136,"source_id":"aaf5bce6be82d2f947bfa5c1806de452","target_id":"63ecbf5e72a0354028b84eb531a58977","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-38","gmt_create":"2026-04-23T21:00:59.738981+08:00","gmt_modified":"2026-04-23T21:00:59.738981+08:00"},{"id":1137,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"bf363deac5ef38c8dc80c73b862e730b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: docker-compose.yml#4-34","gmt_create":"2026-04-23T21:00:59.740313+08:00","gmt_modified":"2026-04-23T21:00:59.740313+08:00"},{"id":1138,"source_id":"fc6242433ae9506bcc0bf4cb0dce1413","target_id":"bf363deac5ef38c8dc80c73b862e730b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 4-34","gmt_create":"2026-04-23T21:00:59.740555+08:00","gmt_modified":"2026-04-23T21:00:59.740555+08:00"},{"id":1139,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"c6e94075e5f689bfa2fe16f8cf965203","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/conftest.py#19-50","gmt_create":"2026-04-23T21:00:59.741293+08:00","gmt_modified":"2026-04-23T21:00:59.741294+08:00"},{"id":1140,"source_id":"0ef1efea889dba3e1f299626df479571","target_id":"c6e94075e5f689bfa2fe16f8cf965203","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 19-50","gmt_create":"2026-04-23T21:00:59.742478+08:00","gmt_modified":"2026-04-23T21:00:59.742478+08:00"},{"id":1141,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"1a78f5574add6d07a1d7c947dba3f23d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/alembic.ini#115-150","gmt_create":"2026-04-23T21:00:59.743043+08:00","gmt_modified":"2026-04-23T21:00:59.743043+08:00"},{"id":1142,"source_id":"50f2e6bdc4a79e69bd43ea8d6fec67fe","target_id":"1a78f5574add6d07a1d7c947dba3f23d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 115-150","gmt_create":"2026-04-23T21:00:59.743435+08:00","gmt_modified":"2026-04-23T21:00:59.743435+08:00"},{"id":1143,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"f6810849c947471a4b45d7ca01ec8c5f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/tailwind.config.ts#5-9","gmt_create":"2026-04-23T21:00:59.744058+08:00","gmt_modified":"2026-04-23T21:00:59.744059+08:00"},{"id":1144,"source_id":"01056dad8851d3e9bd532eb4cab33792","target_id":"f6810849c947471a4b45d7ca01ec8c5f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-9","gmt_create":"2026-04-23T21:00:59.744873+08:00","gmt_modified":"2026-04-23T21:00:59.744873+08:00"},{"id":1145,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"9f6d9941f3b93e29d714bfec7e83434c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#30-36","gmt_create":"2026-04-23T21:00:59.745431+08:00","gmt_modified":"2026-04-23T21:00:59.745431+08:00"},{"id":1146,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"9f6d9941f3b93e29d714bfec7e83434c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 30-36","gmt_create":"2026-04-23T21:00:59.745747+08:00","gmt_modified":"2026-04-23T21:00:59.745747+08:00"},{"id":1147,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"669d67125dcddb0756f4ff50a43512c6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#9-13","gmt_create":"2026-04-23T21:00:59.746227+08:00","gmt_modified":"2026-04-23T21:00:59.746227+08:00"},{"id":1148,"source_id":"9ff19022ef915615911280e3c49ed44b","target_id":"669d67125dcddb0756f4ff50a43512c6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 9-13","gmt_create":"2026-04-23T21:00:59.746456+08:00","gmt_modified":"2026-04-23T21:00:59.746456+08:00"},{"id":1149,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"0ef1efea889dba3e1f299626df479571","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/conftest.py","gmt_create":"2026-04-23T21:02:44.176751+08:00","gmt_modified":"2026-04-23T21:02:44.176752+08:00"},{"id":1150,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"389d631bc6c7111ba411b0b79fca455e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_auth.py","gmt_create":"2026-04-23T21:02:44.178412+08:00","gmt_modified":"2026-04-23T21:02:44.178412+08:00"},{"id":1151,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"80a0429cc47931de27ddb17a62b8dd9c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_business_flow.py","gmt_create":"2026-04-23T21:02:44.178822+08:00","gmt_modified":"2026-04-23T21:02:44.178822+08:00"},{"id":1152,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"b07a4fb9cecbbd66a6910ccbc7651f19","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_citation_engine.py","gmt_create":"2026-04-23T21:02:44.179239+08:00","gmt_modified":"2026-04-23T21:02:44.179239+08:00"},{"id":1153,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"42ff5383133d176cec9eb88682483be3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_citations.py","gmt_create":"2026-04-23T21:02:44.180317+08:00","gmt_modified":"2026-04-23T21:02:44.180317+08:00"},{"id":1154,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"0613e76b9679be7f998fb8fd8056e686","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_queries.py","gmt_create":"2026-04-23T21:02:44.181814+08:00","gmt_modified":"2026-04-23T21:02:44.181814+08:00"},{"id":1155,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"b2f0d46a31a5441594f2e777365fc156","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: tests/test_scheduler.py","gmt_create":"2026-04-23T21:02:44.182497+08:00","gmt_modified":"2026-04-23T21:02:44.182497+08:00"},{"id":1156,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"9228ff67d4c757a85d9421b71f4b29f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/main.py","gmt_create":"2026-04-23T21:02:44.183181+08:00","gmt_modified":"2026-04-23T21:02:44.183181+08:00"},{"id":1157,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"9d08667997a868fc07c9b4e328e44224","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/deps.py","gmt_create":"2026-04-23T21:02:44.18439+08:00","gmt_modified":"2026-04-23T21:02:44.184391+08:00"},{"id":1158,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"4d2f3847b7c10634733118b70a1aea0b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/services/auth.py","gmt_create":"2026-04-23T21:02:44.185381+08:00","gmt_modified":"2026-04-23T21:02:44.185381+08:00"},{"id":1159,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"74040de652d5e57f548bb5c4adc3e1a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/citation_engine.py","gmt_create":"2026-04-23T21:02:44.186205+08:00","gmt_modified":"2026-04-23T21:02:44.186205+08:00"},{"id":1160,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"5cbb1e3f112aeba62a14b0b8999fc0f5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/workers/scheduler.py","gmt_create":"2026-04-23T21:02:44.186821+08:00","gmt_modified":"2026-04-23T21:02:44.186821+08:00"},{"id":1161,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"93022c8938ce318f167277cfa65c29a7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/auth.py","gmt_create":"2026-04-23T21:02:44.187337+08:00","gmt_modified":"2026-04-23T21:02:44.187337+08:00"},{"id":1162,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"7538ffe4902ab6041adb28b19844962a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/citations.py","gmt_create":"2026-04-23T21:02:44.187931+08:00","gmt_modified":"2026-04-23T21:02:44.187931+08:00"},{"id":1163,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"6b3d903205941aa9391dd90016e1102c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/api/queries.py","gmt_create":"2026-04-23T21:02:44.189534+08:00","gmt_modified":"2026-04-23T21:02:44.189534+08:00"},{"id":1164,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"b0c428683c8a3e6922d90ca0d8c2736d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/database.py","gmt_create":"2026-04-23T21:02:44.190082+08:00","gmt_modified":"2026-04-23T21:02:44.190082+08:00"},{"id":1165,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"9ff19022ef915615911280e3c49ed44b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/app/config.py","gmt_create":"2026-04-23T21:02:44.191061+08:00","gmt_modified":"2026-04-23T21:02:44.191061+08:00"},{"id":1166,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"290df8332b3d104e5ea8d71dc39315b5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/conftest.py#1-123","gmt_create":"2026-04-23T21:02:44.191818+08:00","gmt_modified":"2026-04-23T21:02:44.191818+08:00"},{"id":1167,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"85792f0b1e34b5b48b0300aa606ed6e6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#1-56","gmt_create":"2026-04-23T21:02:44.193519+08:00","gmt_modified":"2026-04-23T21:02:44.193519+08:00"},{"id":1168,"source_id":"9228ff67d4c757a85d9421b71f4b29f5","target_id":"85792f0b1e34b5b48b0300aa606ed6e6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-56","gmt_create":"2026-04-23T21:02:44.193893+08:00","gmt_modified":"2026-04-23T21:02:44.193893+08:00"},{"id":1169,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"76e6c0abb49fec57cac4892837a143c9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/deps.py#1-43","gmt_create":"2026-04-23T21:02:44.19465+08:00","gmt_modified":"2026-04-23T21:02:44.19465+08:00"},{"id":1170,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"f66d9907b467b110c638bd527efd95c5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/auth.py#1-43","gmt_create":"2026-04-23T21:02:44.196035+08:00","gmt_modified":"2026-04-23T21:02:44.196035+08:00"},{"id":1171,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"10d1e37bdc9f353c189b7a2fe79dc85e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#1-86","gmt_create":"2026-04-23T21:02:44.196664+08:00","gmt_modified":"2026-04-23T21:02:44.196664+08:00"},{"id":1172,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"cbd0101fa84d957bcb1baaa623c6b31c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#1-78","gmt_create":"2026-04-23T21:02:44.197331+08:00","gmt_modified":"2026-04-23T21:02:44.197331+08:00"},{"id":1173,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"116584ea9162c1bc05911f39f9ef82b6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#1-309","gmt_create":"2026-04-23T21:02:44.198546+08:00","gmt_modified":"2026-04-23T21:02:44.198546+08:00"},{"id":1174,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"9630036e63fc15cb81b202cf79671aab","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#1-182","gmt_create":"2026-04-23T21:02:44.201418+08:00","gmt_modified":"2026-04-23T21:02:44.201418+08:00"},{"id":1175,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"9bfc041fe426da2eb78353827e8d9163","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#1-29","gmt_create":"2026-04-23T21:02:44.204845+08:00","gmt_modified":"2026-04-23T21:02:44.204845+08:00"},{"id":1176,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"ea655c6d147bc98beb42955d437260cc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/config.py#1-23","gmt_create":"2026-04-23T21:02:44.206431+08:00","gmt_modified":"2026-04-23T21:02:44.206431+08:00"},{"id":1177,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"5ddf0c8d7b38e4f6126a5d85da1dfeda","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/conftest.py#19-123","gmt_create":"2026-04-23T21:02:44.209024+08:00","gmt_modified":"2026-04-23T21:02:44.209024+08:00"},{"id":1178,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"9df233ef1be4b95068ed91bf01083ae7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/conftest.py#117-123","gmt_create":"2026-04-23T21:02:44.210394+08:00","gmt_modified":"2026-04-23T21:02:44.210394+08:00"},{"id":1179,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"6286d4be455dc058c8be2ee4e0d1175a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/main.py#38-42","gmt_create":"2026-04-23T21:02:44.211434+08:00","gmt_modified":"2026-04-23T21:02:44.211434+08:00"},{"id":1180,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"069243fafe60a85cf16a0ca40fa07180","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/deps.py#16-43","gmt_create":"2026-04-23T21:02:44.21293+08:00","gmt_modified":"2026-04-23T21:02:44.21293+08:00"},{"id":1181,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"d5a1fb0bd23ce9240fbf79529ef94a45","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/auth.py#13-43","gmt_create":"2026-04-23T21:02:44.214312+08:00","gmt_modified":"2026-04-23T21:02:44.214312+08:00"},{"id":1182,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"fe70b1fef9f36e73d26d84987e927c7a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/queries.py#15-86","gmt_create":"2026-04-23T21:02:44.214737+08:00","gmt_modified":"2026-04-23T21:02:44.214737+08:00"},{"id":1183,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"735aef72b4fe6ca4f407e69b7dda8b43","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/api/citations.py#25-78","gmt_create":"2026-04-23T21:02:44.215146+08:00","gmt_modified":"2026-04-23T21:02:44.215146+08:00"},{"id":1184,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"8128dd67cf376d2cadf7c2d3831c380a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/database.py#23-29","gmt_create":"2026-04-23T21:02:44.215569+08:00","gmt_modified":"2026-04-23T21:02:44.215569+08:00"},{"id":1185,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"1721defc3d6206478d3c0692cc821761","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_auth.py#25-104","gmt_create":"2026-04-23T21:02:44.216343+08:00","gmt_modified":"2026-04-23T21:02:44.216343+08:00"},{"id":1186,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"753a437d837246ead62b0e16c6331284","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/auth.py#37-69","gmt_create":"2026-04-23T21:02:44.217942+08:00","gmt_modified":"2026-04-23T21:02:44.217942+08:00"},{"id":1187,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"d820e2daf2ea133a7aa17cdc475e44a4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_auth.py#1-104","gmt_create":"2026-04-23T21:02:44.218781+08:00","gmt_modified":"2026-04-23T21:02:44.218781+08:00"},{"id":1188,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"1a439c5fed6cfd188c646e1614d56371","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/services/auth.py#1-69","gmt_create":"2026-04-23T21:02:44.219529+08:00","gmt_modified":"2026-04-23T21:02:44.219529+08:00"},{"id":1189,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"b624be78e3bffd876e403cff2557b088","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#19-120","gmt_create":"2026-04-23T21:02:44.220324+08:00","gmt_modified":"2026-04-23T21:02:44.220324+08:00"},{"id":1190,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"5c67e2f70283956b2d29a3c1443eb514","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#122-146","gmt_create":"2026-04-23T21:02:44.220747+08:00","gmt_modified":"2026-04-23T21:02:44.220748+08:00"},{"id":1191,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"309607c54b12a6340edc086ffb4737c9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/citation_engine.py#148-309","gmt_create":"2026-04-23T21:02:44.221252+08:00","gmt_modified":"2026-04-23T21:02:44.221252+08:00"},{"id":1192,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"a57acd9da5287c915ac823784a409292","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_citation_engine.py#1-127","gmt_create":"2026-04-23T21:02:44.221767+08:00","gmt_modified":"2026-04-23T21:02:44.221767+08:00"},{"id":1193,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"2a4f741f31f62dce8ad63be2e831f520","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_citations.py#23-93","gmt_create":"2026-04-23T21:02:44.222579+08:00","gmt_modified":"2026-04-23T21:02:44.222579+08:00"},{"id":1194,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"692ac240965eff7e66945aa3c4c270f7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_citations.py#1-93","gmt_create":"2026-04-23T21:02:44.22325+08:00","gmt_modified":"2026-04-23T21:02:44.22325+08:00"},{"id":1195,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"32a0a52faca2d8d488e49c63c86075b1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_queries.py#29-154","gmt_create":"2026-04-23T21:02:44.224171+08:00","gmt_modified":"2026-04-23T21:02:44.224171+08:00"},{"id":1196,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"7804331f5f8c1ba5a3b6d9c1ae1c78c1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_queries.py#1-154","gmt_create":"2026-04-23T21:02:44.224941+08:00","gmt_modified":"2026-04-23T21:02:44.224941+08:00"},{"id":1197,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"3a6e1b738967bf8cc651e57f48e2e126","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_business_flow.py#83-126","gmt_create":"2026-04-23T21:02:44.225635+08:00","gmt_modified":"2026-04-23T21:02:44.225635+08:00"},{"id":1198,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"b1afd377757f1d0e9bdf87edfff3ad88","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_business_flow.py#131-186","gmt_create":"2026-04-23T21:02:44.226111+08:00","gmt_modified":"2026-04-23T21:02:44.226111+08:00"},{"id":1199,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"de05ec7eed033e432991e5a88e1b5a06","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_business_flow.py#192-222","gmt_create":"2026-04-23T21:02:44.22649+08:00","gmt_modified":"2026-04-23T21:02:44.22649+08:00"},{"id":1200,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"7fd61a451248b6b129299d6246f711c7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_business_flow.py#228-296","gmt_create":"2026-04-23T21:02:44.226892+08:00","gmt_modified":"2026-04-23T21:02:44.226892+08:00"},{"id":1201,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"53eedffff456a566fa7b0cecc7169f56","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_business_flow.py#1-441","gmt_create":"2026-04-23T21:02:44.227356+08:00","gmt_modified":"2026-04-23T21:02:44.227356+08:00"},{"id":1202,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"906f7a8288e38d4244211f3f538fe7b6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/app/workers/scheduler.py#27-182","gmt_create":"2026-04-23T21:02:44.227899+08:00","gmt_modified":"2026-04-23T21:02:44.227899+08:00"},{"id":1203,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"1647ee2066de2ae59ba8cf88e33c5e02","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: tests/test_scheduler.py#1-123","gmt_create":"2026-04-23T21:02:44.228365+08:00","gmt_modified":"2026-04-23T21:02:44.228365+08:00"},{"id":1204,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"13c568d2-dfa7-4d1b-81c0-dfef247cbb67","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 643984fc-5a57-498b-8f25-68cc318d9d82 -\u003e 13c568d2-dfa7-4d1b-81c0-dfef247cbb67","gmt_create":"2026-04-23T21:02:45.18694+08:00","gmt_modified":"2026-04-23T21:02:45.18694+08:00"},{"id":1205,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"222a9371-45c1-4e0d-b1da-e8ada1c501c2","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 643984fc-5a57-498b-8f25-68cc318d9d82 -\u003e 222a9371-45c1-4e0d-b1da-e8ada1c501c2","gmt_create":"2026-04-23T21:02:45.187426+08:00","gmt_modified":"2026-04-23T21:02:45.187426+08:00"},{"id":1206,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"979be617-a83d-4db9-b73e-38581348f8c1","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 643984fc-5a57-498b-8f25-68cc318d9d82 -\u003e 979be617-a83d-4db9-b73e-38581348f8c1","gmt_create":"2026-04-23T21:02:45.187832+08:00","gmt_modified":"2026-04-23T21:02:45.187832+08:00"},{"id":1207,"source_id":"643984fc-5a57-498b-8f25-68cc318d9d82","target_id":"422c46b3-e69c-4023-a878-411a48ae182f","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 643984fc-5a57-498b-8f25-68cc318d9d82 -\u003e 422c46b3-e69c-4023-a878-411a48ae182f","gmt_create":"2026-04-23T21:02:45.188275+08:00","gmt_modified":"2026-04-23T21:02:45.188275+08:00"},{"id":1208,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"8150ddbb-7aa9-48d0-9953-2ef55e4bcfd5","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b0c36b2b-bb03-4624-933d-c1f6a320b7ca -\u003e 8150ddbb-7aa9-48d0-9953-2ef55e4bcfd5","gmt_create":"2026-04-23T21:02:45.190159+08:00","gmt_modified":"2026-04-23T21:02:45.190159+08:00"},{"id":1209,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"8c17b44f-1586-459b-a83d-c9b961cd2142","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b0c36b2b-bb03-4624-933d-c1f6a320b7ca -\u003e 8c17b44f-1586-459b-a83d-c9b961cd2142","gmt_create":"2026-04-23T21:02:45.191275+08:00","gmt_modified":"2026-04-23T21:02:45.191275+08:00"},{"id":1210,"source_id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","target_id":"05e59a75-d52f-42e1-a924-f6a32f06f2fe","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b0c36b2b-bb03-4624-933d-c1f6a320b7ca -\u003e 05e59a75-d52f-42e1-a924-f6a32f06f2fe","gmt_create":"2026-04-23T21:02:45.191685+08:00","gmt_modified":"2026-04-23T21:02:45.191685+08:00"}],"source_files":[{"id":"12e2c3d7b9a92dc44a6ee29b85e10df6","path":"frontend/app/layout.tsx","filename":"layout.tsx","gmt_create":"2026-04-23T15:19:43.754128+08:00","gmt_modified":"2026-04-23T15:19:43.754129+08:00"},{"id":"2a1c745c7b3fb7f600596be3d979bba1","path":"frontend/app/(dashboard","filename":"(dashboard","gmt_create":"2026-04-23T15:19:43.756075+08:00","gmt_modified":"2026-04-23T15:19:43.756075+08:00"},{"id":"eca13a610badfc5ffc6210827fb96991","path":"frontend/components/layout/header.tsx","filename":"header.tsx","gmt_create":"2026-04-23T15:19:43.756308+08:00","gmt_modified":"2026-04-23T15:19:43.756308+08:00"},{"id":"18a0651d895fba9bb4e0c0229459efdc","path":"frontend/components/layout/sidebar.tsx","filename":"sidebar.tsx","gmt_create":"2026-04-23T15:19:43.756496+08:00","gmt_modified":"2026-04-23T15:19:43.756496+08:00"},{"id":"5d7886d0dc99f81073a578b8aefdd375","path":"frontend/lib/api.ts","filename":"api.ts","gmt_create":"2026-04-23T15:19:43.756648+08:00","gmt_modified":"2026-04-23T15:19:43.756648+08:00"},{"id":"0c0b0f4e2cf44facd9d5b57de0d0bf0c","path":"frontend/components/ui/table.tsx","filename":"table.tsx","gmt_create":"2026-04-23T15:19:43.758184+08:00","gmt_modified":"2026-04-23T15:19:43.758184+08:00"},{"id":"108b0c4b4dcfb6aa39a5eb138225c148","path":"frontend/components/ui/dialog.tsx","filename":"dialog.tsx","gmt_create":"2026-04-23T15:19:43.75905+08:00","gmt_modified":"2026-04-23T15:19:43.75905+08:00"},{"id":"ef72f0c3cedb9fd9a87352fe493053dc","path":"frontend/lib/platforms.ts","filename":"platforms.ts","gmt_create":"2026-04-23T15:19:43.759223+08:00","gmt_modified":"2026-04-23T15:19:43.759223+08:00"},{"id":"f93ae024fe0a2e69698037dff6df205f","path":"frontend/lib/utils.ts","filename":"utils.ts","gmt_create":"2026-04-23T15:19:43.759351+08:00","gmt_modified":"2026-04-23T15:19:43.759351+08:00"},{"id":"d5f2266643d2011c66e86af088ec637f","path":"frontend/components/charts/trend-chart.tsx","filename":"trend-chart.tsx","gmt_create":"2026-04-23T15:19:43.759489+08:00","gmt_modified":"2026-04-23T15:19:43.759489+08:00"},{"id":"f1a7d61831cc0a45ac6220294f15c21d","path":"frontend/components/charts/platform-chart.tsx","filename":"platform-chart.tsx","gmt_create":"2026-04-23T15:19:43.759606+08:00","gmt_modified":"2026-04-23T15:19:43.759606+08:00"},{"id":"9228ff67d4c757a85d9421b71f4b29f5","path":"backend/app/main.py","filename":"main.py","gmt_create":"2026-04-23T15:19:45.5873+08:00","gmt_modified":"2026-04-23T15:19:45.5873+08:00"},{"id":"93022c8938ce318f167277cfa65c29a7","path":"backend/app/api/auth.py","filename":"auth.py","gmt_create":"2026-04-23T15:19:45.587785+08:00","gmt_modified":"2026-04-23T15:19:45.587786+08:00"},{"id":"6b3d903205941aa9391dd90016e1102c","path":"backend/app/api/queries.py","filename":"queries.py","gmt_create":"2026-04-23T15:19:45.588167+08:00","gmt_modified":"2026-04-23T15:19:45.588167+08:00"},{"id":"7538ffe4902ab6041adb28b19844962a","path":"backend/app/api/citations.py","filename":"citations.py","gmt_create":"2026-04-23T15:19:45.588473+08:00","gmt_modified":"2026-04-23T15:19:45.588473+08:00"},{"id":"58901c94d975d87e652a4dc6c8dda656","path":"backend/app/api/reports.py","filename":"reports.py","gmt_create":"2026-04-23T15:19:45.588695+08:00","gmt_modified":"2026-04-23T15:19:45.588695+08:00"},{"id":"9d08667997a868fc07c9b4e328e44224","path":"backend/app/api/deps.py","filename":"deps.py","gmt_create":"2026-04-23T15:19:45.588857+08:00","gmt_modified":"2026-04-23T15:19:45.588857+08:00"},{"id":"e0c0ca66b8b81cf66e078a7ab162c07f","path":"backend/app/schemas/auth.py","filename":"auth.py","gmt_create":"2026-04-23T15:19:45.589011+08:00","gmt_modified":"2026-04-23T15:19:45.589011+08:00"},{"id":"f301b79d833233ce39d350e82a71c938","path":"backend/app/schemas/query.py","filename":"query.py","gmt_create":"2026-04-23T15:19:45.589202+08:00","gmt_modified":"2026-04-23T15:19:45.589202+08:00"},{"id":"1a3336b4af8a39a055e912724338580c","path":"backend/app/schemas/citation.py","filename":"citation.py","gmt_create":"2026-04-23T15:19:45.589399+08:00","gmt_modified":"2026-04-23T15:19:45.589399+08:00"},{"id":"4d2f3847b7c10634733118b70a1aea0b","path":"backend/app/services/auth.py","filename":"auth.py","gmt_create":"2026-04-23T15:19:45.589591+08:00","gmt_modified":"2026-04-23T15:19:45.589591+08:00"},{"id":"88d22de3b2a7419868e8ae19130d860c","path":"backend/app/services/query.py","filename":"query.py","gmt_create":"2026-04-23T15:19:45.589732+08:00","gmt_modified":"2026-04-23T15:19:45.589732+08:00"},{"id":"04e3926c080e795713bff683e7dc9d3e","path":"backend/app/services/citation.py","filename":"citation.py","gmt_create":"2026-04-23T15:19:45.589852+08:00","gmt_modified":"2026-04-23T15:19:45.589852+08:00"},{"id":"9ff19022ef915615911280e3c49ed44b","path":"backend/app/config.py","filename":"config.py","gmt_create":"2026-04-23T15:19:45.589987+08:00","gmt_modified":"2026-04-23T15:19:45.589987+08:00"},{"id":"c59f8c276697a070dffc581fe94d809c","path":"backend/app/models/user.py","filename":"user.py","gmt_create":"2026-04-23T15:19:45.590197+08:00","gmt_modified":"2026-04-23T15:19:45.590198+08:00"},{"id":"b74caccb06844efcdb14d8324cff65c2","path":"backend/app/models/query.py","filename":"query.py","gmt_create":"2026-04-23T15:19:45.590343+08:00","gmt_modified":"2026-04-23T15:19:45.590344+08:00"},{"id":"b4a81ef789630d0af6a8d50859d01bf3","path":"backend/app/models/citation_record.py","filename":"citation_record.py","gmt_create":"2026-04-23T15:19:45.590489+08:00","gmt_modified":"2026-04-23T15:19:45.590489+08:00"},{"id":"069738f21ac2da7349d22683e8c36929","path":"backend/app/models/query_task.py","filename":"query_task.py","gmt_create":"2026-04-23T15:19:45.59062+08:00","gmt_modified":"2026-04-23T15:19:45.59062+08:00"},{"id":"5cbb1e3f112aeba62a14b0b8999fc0f5","path":"backend/app/workers/scheduler.py","filename":"scheduler.py","gmt_create":"2026-04-23T15:20:08.953491+08:00","gmt_modified":"2026-04-23T15:20:08.953491+08:00"},{"id":"74040de652d5e57f548bb5c4adc3e1a0","path":"backend/app/workers/citation_engine.py","filename":"citation_engine.py","gmt_create":"2026-04-23T15:20:08.953836+08:00","gmt_modified":"2026-04-23T15:20:08.953837+08:00"},{"id":"8f973791233c698b3e64a4fb28a93d4b","path":"backend/app/workers/platforms/kimi.py","filename":"kimi.py","gmt_create":"2026-04-23T15:20:08.954103+08:00","gmt_modified":"2026-04-23T15:20:08.954103+08:00"},{"id":"f642fc1c2f34e15572d9d98aa6c18813","path":"backend/app/workers/platforms/wenxin.py","filename":"wenxin.py","gmt_create":"2026-04-23T15:20:08.954273+08:00","gmt_modified":"2026-04-23T15:20:08.954273+08:00"},{"id":"a16cf42e9559523c4f96ca4c79f9488d","path":"backend/app/workers/platforms/base.py","filename":"base.py","gmt_create":"2026-04-23T15:20:08.954406+08:00","gmt_modified":"2026-04-23T15:20:08.954406+08:00"},{"id":"b0c428683c8a3e6922d90ca0d8c2736d","path":"backend/app/database.py","filename":"database.py","gmt_create":"2026-04-23T15:20:08.955702+08:00","gmt_modified":"2026-04-23T15:20:08.955702+08:00"},{"id":"b2f0d46a31a5441594f2e777365fc156","path":"tests/test_scheduler.py","filename":"test_scheduler.py","gmt_create":"2026-04-23T15:20:08.95621+08:00","gmt_modified":"2026-04-23T15:20:08.95621+08:00"},{"id":"0613e76b9679be7f998fb8fd8056e686","path":"tests/test_queries.py","filename":"test_queries.py","gmt_create":"2026-04-23T15:20:08.956336+08:00","gmt_modified":"2026-04-23T15:20:08.956336+08:00"},{"id":"99fe1b288fd41daa86c2dfbab819abf0","path":"backend/app/models/__init__.py","filename":"__init__.py","gmt_create":"2026-04-23T15:21:46.682639+08:00","gmt_modified":"2026-04-23T15:21:46.682639+08:00"},{"id":"bceca00463fe55d3bcafda728f97f723","path":"backend/app/models/subscription.py","filename":"subscription.py","gmt_create":"2026-04-23T15:21:46.684259+08:00","gmt_modified":"2026-04-23T15:21:46.684259+08:00"},{"id":"d4f95fcf50683b5bf6167c7d2a6b126d","path":"backend/alembic/versions/488d0bd5ab01_initial_migration.py","filename":"488d0bd5ab01_initial_migration.py","gmt_create":"2026-04-23T15:21:46.684619+08:00","gmt_modified":"2026-04-23T15:21:46.684619+08:00"},{"id":"0ef1efea889dba3e1f299626df479571","path":"tests/conftest.py","filename":"conftest.py","gmt_create":"2026-04-23T15:22:15.981194+08:00","gmt_modified":"2026-04-23T15:22:15.981194+08:00"},{"id":"389d631bc6c7111ba411b0b79fca455e","path":"tests/test_auth.py","filename":"test_auth.py","gmt_create":"2026-04-23T15:22:15.98141+08:00","gmt_modified":"2026-04-23T15:22:15.98141+08:00"},{"id":"80a0429cc47931de27ddb17a62b8dd9c","path":"tests/test_business_flow.py","filename":"test_business_flow.py","gmt_create":"2026-04-23T15:22:15.981566+08:00","gmt_modified":"2026-04-23T15:22:15.981567+08:00"},{"id":"b07a4fb9cecbbd66a6910ccbc7651f19","path":"tests/test_citation_engine.py","filename":"test_citation_engine.py","gmt_create":"2026-04-23T15:22:15.981715+08:00","gmt_modified":"2026-04-23T15:22:15.981715+08:00"},{"id":"42ff5383133d176cec9eb88682483be3","path":"tests/test_citations.py","filename":"test_citations.py","gmt_create":"2026-04-23T15:22:15.981831+08:00","gmt_modified":"2026-04-23T15:22:15.981831+08:00"},{"id":"aaf5bce6be82d2f947bfa5c1806de452","path":"frontend/package.json","filename":"package.json","gmt_create":"2026-04-23T15:22:23.492837+08:00","gmt_modified":"2026-04-23T15:22:23.492837+08:00"},{"id":"01056dad8851d3e9bd532eb4cab33792","path":"frontend/tailwind.config.ts","filename":"tailwind.config.ts","gmt_create":"2026-04-23T15:22:23.495792+08:00","gmt_modified":"2026-04-23T15:22:23.495792+08:00"},{"id":"ac1acbc54c49ee1de13369f6c6827568","path":"frontend/components/ui/button.tsx","filename":"button.tsx","gmt_create":"2026-04-23T15:22:23.496353+08:00","gmt_modified":"2026-04-23T15:22:23.496353+08:00"},{"id":"0186dc8a89340139a84e1e3c5571a57f","path":"frontend/components/ui/dropdown-menu.tsx","filename":"dropdown-menu.tsx","gmt_create":"2026-04-23T15:22:23.496869+08:00","gmt_modified":"2026-04-23T15:22:23.496869+08:00"},{"id":"3cf787fa77a15b2b1783560c6d83ed21","path":"frontend/components/ui/input.tsx","filename":"input.tsx","gmt_create":"2026-04-23T15:22:23.497127+08:00","gmt_modified":"2026-04-23T15:22:23.497128+08:00"},{"id":"3c56e1c079959bfcc985183805e5874f","path":"frontend/components/ui/select.tsx","filename":"select.tsx","gmt_create":"2026-04-23T15:22:23.497457+08:00","gmt_modified":"2026-04-23T15:22:23.497457+08:00"},{"id":"0d5ef537f7c0b8c390f8b31d7cf47b56","path":"frontend/components/ui/card.tsx","filename":"card.tsx","gmt_create":"2026-04-23T15:22:23.497745+08:00","gmt_modified":"2026-04-23T15:22:23.497745+08:00"},{"id":"51821ca9ec2a1c972f3c9d111e19db8a","path":"frontend/components/ui/badge.tsx","filename":"badge.tsx","gmt_create":"2026-04-23T15:22:23.498034+08:00","gmt_modified":"2026-04-23T15:22:23.498034+08:00"},{"id":"beb87ab5aad9532647e9dbd2db7ef587","path":"frontend/components/ui/tabs.tsx","filename":"tabs.tsx","gmt_create":"2026-04-23T15:22:23.498711+08:00","gmt_modified":"2026-04-23T15:22:23.498711+08:00"},{"id":"792b8e2c16c9ff2095d83b8972313be4","path":"frontend/components/ui/label.tsx","filename":"label.tsx","gmt_create":"2026-04-23T15:22:23.499031+08:00","gmt_modified":"2026-04-23T15:22:23.499031+08:00"},{"id":"546e01c5f73aaf5140eee922f4b9a441","path":"frontend/components/providers.tsx","filename":"providers.tsx","gmt_create":"2026-04-23T15:22:23.499298+08:00","gmt_modified":"2026-04-23T15:22:23.499298+08:00"},{"id":"e68ad5186f1e47610ab3d9f14a794393","path":"backend/app/workers/platforms/tongyi.py","filename":"tongyi.py","gmt_create":"2026-04-23T20:31:36.476814+08:00","gmt_modified":"2026-04-23T20:31:36.476814+08:00"},{"id":"404f6d0765a8c6e77e33b7fc21b377a4","path":"backend/app/workers/platforms/doubao.py","filename":"doubao.py","gmt_create":"2026-04-23T20:31:36.477414+08:00","gmt_modified":"2026-04-23T20:31:36.477414+08:00"},{"id":"303e80519e946904d1cb3ac32cbb0814","path":"backend/app/workers/platforms/qingyan.py","filename":"qingyan.py","gmt_create":"2026-04-23T20:31:36.477731+08:00","gmt_modified":"2026-04-23T20:31:36.477731+08:00"},{"id":"5af7301fe056fc3d10820d820e8ad777","path":"backend/app/workers/platforms/tiangong.py","filename":"tiangong.py","gmt_create":"2026-04-23T20:31:36.477969+08:00","gmt_modified":"2026-04-23T20:31:36.477969+08:00"},{"id":"0e38ad5d2d3daaad08c9302df8805b15","path":"backend/app/workers/platforms/xinghuo.py","filename":"xinghuo.py","gmt_create":"2026-04-23T20:31:36.47825+08:00","gmt_modified":"2026-04-23T20:31:36.47825+08:00"},{"id":"6a63f048c16c60c5d2d57012c810ee0e","path":"backend/app/workers/platforms/search_engine.py","filename":"search_engine.py","gmt_create":"2026-04-23T20:31:36.478564+08:00","gmt_modified":"2026-04-23T20:31:36.478564+08:00"},{"id":"a26ee01cf41da3b956e1650448c156fa","path":"backend/requirements.txt","filename":"requirements.txt","gmt_create":"2026-04-23T20:31:36.48051+08:00","gmt_modified":"2026-04-23T20:31:36.48051+08:00"},{"id":"e9b52adbec3c07cf021e488dd3f99ab4","path":"backend/Dockerfile","filename":"Dockerfile","gmt_create":"2026-04-23T20:31:50.452043+08:00","gmt_modified":"2026-04-23T20:31:50.452043+08:00"},{"id":"4a56ef5fca60bc63480b457cab3832f0","path":"backend/app/workers/platforms/__init__.py","filename":"__init__.py","gmt_create":"2026-04-23T20:35:18.583102+08:00","gmt_modified":"2026-04-23T20:35:18.583102+08:00"},{"id":"36dd0ad3ee6bc75a480ad8a62268e80e","path":"backend/app/workers/models/query.py","filename":"query.py","gmt_create":"2026-04-23T20:35:18.58383+08:00","gmt_modified":"2026-04-23T20:35:18.58383+08:00"},{"id":"a680d4819f5da57fe9fa0e6bc708f380","path":"backend/alembic/env.py","filename":"env.py","gmt_create":"2026-04-23T20:35:45.568869+08:00","gmt_modified":"2026-04-23T20:35:45.56887+08:00"},{"id":"f6e6948dd0cdd3894bd9928b21feb979","path":"backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py","filename":"b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py","gmt_create":"2026-04-23T20:35:45.569946+08:00","gmt_modified":"2026-04-23T20:35:45.569946+08:00"},{"id":"50f2e6bdc4a79e69bd43ea8d6fec67fe","path":"backend/alembic.ini","filename":"alembic.ini","gmt_create":"2026-04-23T20:35:45.570621+08:00","gmt_modified":"2026-04-23T20:35:45.570621+08:00"},{"id":"fc6242433ae9506bcc0bf4cb0dce1413","path":"docker-compose.yml","filename":"docker-compose.yml","gmt_create":"2026-04-23T20:35:45.574312+08:00","gmt_modified":"2026-04-23T20:35:45.574314+08:00"},{"id":"5e414f2ef9b69e55e00ab15f85b9291a","path":"frontend/Dockerfile","filename":"Dockerfile","gmt_create":"2026-04-23T21:00:59.630269+08:00","gmt_modified":"2026-04-23T21:00:59.630269+08:00"},{"id":"fb8af100a06778e1fbdac4790a3ed0a9","path":"frontend/tsconfig.json","filename":"tsconfig.json","gmt_create":"2026-04-23T21:00:59.630887+08:00","gmt_modified":"2026-04-23T21:00:59.630888+08:00"},{"id":"4d9b59c294a0aac5e300b3de715eb226","path":"frontend/.eslintrc.json","filename":".eslintrc.json","gmt_create":"2026-04-23T21:00:59.631396+08:00","gmt_modified":"2026-04-23T21:00:59.631396+08:00"},{"id":"48a560c49d2b21da327c036ec2934b96","path":"README.md","filename":"README.md","gmt_create":"2026-04-23T21:00:59.633061+08:00","gmt_modified":"2026-04-23T21:00:59.633061+08:00"}],"wiki_catalogs":[{"id":"1bb55e12-24c4-42cb-8f59-ddc303460d45","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"项目概述","description":"project-overview","prompt":"为GEO项目创建全面的项目概述内容。详细介绍GEO平台的核心目标、主要功能特性和技术架构。解释项目作为智能学术查询与引用管理系统的设计理念,包括多AI平台集成、定时查询任务调度、数据可视化展示等核心功能。说明前后端技术栈的选择原因和整体架构设计思路。提供项目背景、应用场景和价值主张。包含系统边界、核心组件关系图和数据流向说明。面向初学者提供概念性理解,同时为经验丰富的开发者提供技术决策的背景信息。","progress_status":"completed","dependent_files":"backend/app/main.py,backend/app/config.py,docker-compose.yml,README.md","gmt_create":"2026-04-22T18:56:47.080895+08:00","gmt_modified":"2026-04-22T18:58:50.329037+08:00","raw_data":"WikiEncrypted:0MI1/XkBoMl0lTbK6t0Cn/+8FdvqrJ62ianMLvZj02elJtBUgH0Ns0veIx1WPtM9wwkxI+/XAqHLxJLlHB8wVx/ob+gHrWfBRFOXtNWHzmTEJrNEttrYXRV2niAmjrnc6VwXmKYktKqbX8suWQzVig0VjADoZYGObEeg0k6UmhPkxkWTv0CFbAx+cDhkRVaksYUcZryJYvMvtyIQASEjZKRRtKwti+2pbfHzXGaF917ir8bLf35/8ERIvyLM91k6J7WrkQWQzCSMouoCq7SDEG2Mf9UPmNoJ04sS8RtxbiiFeHu6NAI8L7L1EfxY3DDdg47NhHU1wH7bOT2u9DuFl4zIbaVNsenyjEzRQZrcsq9OLnl8yWNKJf21GOA6ESfKQqN6mlowI6I1W8qLXaH+z7qnaPWhOyo4mje7g8hCZG4S41ZGWOkatECxYDASI4FIduNeEVW9aCmI7PB7nSnpPSwQE5aC5VqWoMBShuC18DGj8AvqVxfjw6b7bxR8HDUKjzXB/K7KmXdVGCcJNb3tgApQuSTsYxQ2jHsSoUECE/BEAaW7oLRxWD3c3uNNvgrgdfQuFT+k7Ko5zOXJ006KKVxWcThwPsColn6fIwGOPrS7ncbwW0n28B2g2hw91A5Hzpgm/Dy0+YIlPQM8anuTom0Oj0p1Y2g2Nbp2PLaPBGGPUa6bDoCNqzoUs1784Rwjp+aLG05lN7onsW7Z7C9feQ4P5Ry0h8YnKKl/dR4mKs1k+dkOeMPFUpWt/qlFcHAMSoVy+O+Xu+reQzwoCKYlSwgFgjiZzs3p+kL1LWvbxSvArAOemC7uu5lEzWdggi+MLrSVpB7hLalHKGdJv8NlK4SmNaadctIMUQvY+5PZwitnGdyyjjlS7/wScj8Uv3/EZk3ITEUlIvWPJ15U6QBNxHy2DbosENNEgp0lDni/UFPduUos6SlLo5L0WKgfv72BnFY4lZfB3LChbEu2eBhM8AALCKaUIhj7t/oEI+9I9qqfPimBNi6FyH0jllt2yllX04VJRxl32uuWOFcZnm/WuJgw/BbrZCR++fefrA1l6s02TJzhZ0Y5XWJsKulCubVCF9tUQ4UJbnnU1nI5rTahkANjI7mTWIpkPHp+GUXL8Q3UpSwYl2BshG/kyfJIyFu26CIJnX5HtHezPZNWAwBQVebhTaSURWwish62V3jO/gRkcmDJHlE8YC2bAo62/asrgniVM+qniMotIgbt1nopX3ishgnMYYmFqKU8+YXUiE9/z243TcTEzltDGAWj5YN10RF/Mx3dT+62D1cwhO1486VYAZpYZtOjHjPeP2/4TW7FbMhub9iGFZ8FNqneYJyWZBa+udx1oyHzyo3YHrDcFGJPXi9ido7nGq53tKEM64A="},{"id":"7c3e3c0b-5d1f-4d64-99be-668041c6cd9d","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"核心框架配置","description":"core-framework","prompt":"为GEO后端核心框架创建详细的配置文档。深入解释FastAPI应用实例的初始化过程,包括应用名称、版本管理和生命周期管理。详细说明CORS中间件配置、路由注册机制和健康检查端点。文档化配置管理系统的实现,包括环境变量读取、配置验证和默认值设置。解释数据库连接池配置、异步会话管理和连接超时设置。包含应用启动和关闭流程的详细说明,以及资源清理机制。提供配置最佳实践和常见问题解决方案。","parent_id":"7c2ac186-ec90-400a-ac1d-b3b7ca2f01d5","progress_status":"completed","dependent_files":"backend/app/main.py,backend/app/config.py,backend/app/database.py","gmt_create":"2026-04-22T18:57:02.316945+08:00","gmt_modified":"2026-04-22T19:03:21.69307+08:00","raw_data":"WikiEncrypted:luoNp8LvFa7zGThvIT9T4rhp6COPRJpm3tT/kftARqFq4dg1cG/8M10NcCrCelp/LC8SV6McSk0Sx9xEgJV/YmEmjfMmlukALh9v7ZKLxT8XDDYkBCrff2Ia9KfGFRdlfVmmQUGfhQARTeykGZh6O8/4GECBHUYLS0F6NXI7fSS3R+/I5c/HIjI7F17mVNpZDQZcc2HmM4zhdyIinOGyErSf3vIPcfVVobPB4D/wCUvMWxl+jpvktykHTIgH9ze7f4fTCC02xK5vRnt1RlMdAQ3d1Km7OOGjAga30OGvRdp9UtT48gdhzPQH5FEbfzn7K6TnuPzqQRf4GuS2kVTRSUFbSnmj5d5HqHmgx7D9iQYR/XxRRVbv+GeFwINvVa+UX9cnanYU19zazOGWG2rcdDk8jqu5MwAhVZsT28hykyuLfKeTf7xuM6Li86T1mZ18SROCJHe4LXYEaH94K6CHjZLCyEl10xBk02/CkW4aTW29TIgrponrmnrvV6bShQ+ZitR1TcivPsNN5t6TCaHMnlaLlOpznSGNpMyf4S51cRPxl2cwZrqJbrdFxehIoPrUyOvtRvtEsLhpo30456ihrInvbVXgJMwZIcDaKHSu0Bf7ma8y+UCWH61+VBIqW44KzA9zmKcXU9hiiwL+gjwiNcV7JDcgg43Un4qvjEzeJiBRBMGGzc8Oc05dWgRs1K6QUdS1kZTjI/JKiGS8zFYKz0mvQqLwc6/xe1/MDhMyU1QUXSqpcNNU6aFmY7te5kENN2aSPZqigqID+RwvIV8k8JETdmHaxJUzCSrNEpbpUukFuVQKz419athf4kMeQH2fKsLMZABn10WnnmY9HGGqBx+gpNOTU9AiSz1l4b0Ej8XoQcwIn1lqw49qdJ6+PRuuFBv6OcjxgJSMNSQzm4c/eyl7yv6J4vXceT7Ul+ySMAGRnSpDUehmOuw1DT4dV0n05Rcrx5gBjuztOAexxUhLwMUK/v+8qdn/0OcciISCZ/U1GhzhWFYiVKRBfNuNkuRjwmc4zg5Zc97TPRBXYs2q2e0/3cT+Dr7lqeGnXWL3X4iTjTygXMekhDQBjc0NbF6cdDOJcPAUnOg6jDkreBiEkTJ7hZg3J9ho2RYDaHuPvyMlkW4YWTpGRODtXIs4aLG0KFbNr6uOG31hOPZsgnHmoNwcPwRUO4G89Nkl2M6ZTMiNHWtsSwES+gLmCLPunm7R2zQNtdei+K3lzSg0bQgUvg==","layer_level":1},{"id":"bcaa04da-04e3-427f-ba01-847ad657e78a","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"Next.js应用配置","description":"nextjs-app-config","prompt":"创建Next.js 14应用配置的详细文档。说明App Router的页面组织结构,包括路由规则、嵌套路由和页面布局设计。文档化全局样式配置、字体系统和主题定制。解释Tailwind CSS的配置选项、自定义样式和响应式设计原则。说明TypeScript配置、类型定义和开发工具设置。包含性能优化配置、构建优化和生产环境部署设置。提供配置最佳实践和常见问题解决方案。","parent_id":"d907a8eb-795c-4060-9cdd-50d31cf39be3","progress_status":"completed","dependent_files":"frontend/app/layout.tsx,frontend/app/globals.css,frontend/next.config.mjs,frontend/tailwind.config.ts,frontend/tsconfig.json","gmt_create":"2026-04-22T18:57:04.216045+08:00","gmt_modified":"2026-04-22T19:04:47.361369+08:00","raw_data":"WikiEncrypted:MoQ9U2rERvJfHcC2U9f5yo5PrhAUeAY0OH9kgPk99cOGQSyTenUDM+krr5XcMxqj+FSA7CYnuq8hz8eS8Pvzc8yZuRRHbRPExvPpdrOEr8fRtUXkjnECv8NVvFPloo2fonxY9Q2vmL0x2O1UsV1O6L6tkraG28x1o504hsBitow5XMWkk8uSk+sDbyHo/y9/SBDWpcEOXVqeU4nwD/UU+7N90n5i5T89nz6b4M+31tkvffIuZRigZ+1+IJqlsqFgRt9PNrxL9ZUsD2D/Yvh8EJ0sCr9z7AI+D3z+JYM2kgFT/3ugS/EnEzwByGZk/e2EsOY4D+NkRBas836JX++o61ZH5GPQBXTHnVa8h5B1LAVlbA5zBuJHHY3V2XS4X1cTo9Hj76mg9Ha+jWvX2A9fv4vnscE6cVxnM+WjWnSfN8N7Vtla2YRDrNXZRAL50+PNfhUKpb48d0hKFyzf1Av1T4WBKgaYEo2znphEy99ViuG+oOFS6D5pVQ/w5yoPe5MpZCDk4aNsO/owrJkILcGc3+qHfld4Yd4HtYM6madWmmOvHIIuCy5CPGojBzKDcTTSPP6ZjuY1EC/RG3lBkYCQtQj889+80GZpaSbrqWjTmMI1DX1KLNXJkoI3dFk5Tx+w4TqiKICJ8q9KJhOX+mEVk+ECXqrc2Qz787D34zY5UlwsaA44ziBvWDZuwfPWmtelAq4KjqfWTFWYqdY6D0fUvetLh3/VEqH/o5Nh4HrlGvy/faZbU9FKOBZPkAy8c0J24rW5p2pKmRq6+2IicNTgufRROtiY87GKfbfmqpDYBEn3Dogv/Q3i5beVavuD1tJWhRsewhAZAUi1jWdiK3LyS0QI7dMFXVJw3cm2FnegeXA8CNlWnjUVSOY/OfLFqJJqYrfcj57f3nAU4a88w4h10+iFBLh0yZkX50llRxgUjV0fnjyEFUDoinC1xDA9ip9IOosTI+avZPhLTC0Yn4ZGnJi4NCD5cD88+KIdRUnVZJ5Sqf4ZcCCQamtYBT8NJ+PlByYxpqJpGtLyV9BuexYC86YnD3PJau0oXazcytuXMYh/TTaEo89ZzW4jpsqDM1G/gBUq7R+QDzLElNZfw3Ov0E0+Pvfm89W+v2iSsJ2JI2Yq7wrml7FiTN0KoP5KVEBCEzDLwebnJFqa7GBaghwADYcgoZ2VX2Xtin82a3oqlX2WNfur2DIr4YURiSmE8g8O","layer_level":1},{"id":"9e3d703f-f424-47f4-84df-b99873b93e5a","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"项目介绍","description":"project-introduction","prompt":"为GEO项目创建详细的项目介绍内容。解释GEO平台作为智能学术查询与引用管理系统的核心使命和价值主张。详细描述项目解决的实际问题,包括传统学术研究中品牌引用检测的痛点、多平台数据整合的需求等。说明项目的目标用户群体和应用场景,如研究人员、市场分析师、品牌监测团队等。介绍项目的发展历程、设计理念和创新点。提供系统的功能概览,包括智能引用检测、多AI平台集成、定时查询调度等核心能力。面向初学者解释项目的基本概念和使用价值,为后续技术文档奠定基础。","parent_id":"1bb55e12-24c4-42cb-8f59-ddc303460d45","progress_status":"completed","dependent_files":"backend/app/main.py,backend/app/config.py,README.md","gmt_create":"2026-04-22T18:57:13.329466+08:00","gmt_modified":"2026-04-22T19:05:00.376007+08:00","raw_data":"WikiEncrypted:0MI1/XkBoMl0lTbK6t0CnyIiRc/FeBluVaO5vMjpi7GJDj6RYPJBK8z3pvJGG/q2Umz028dfdXdKirGdHRY2lrn0erk9nv1ZHCzuughhzuFHwcxdCPIpZdrZtQpPh6bsxkWiwYzSScq7WGo0sBeTvyoiisiPXNkFNbSjUGQOu0M9zOwZAcknYWqtf16nUcOV3lRfAFHfNSt77Nc0IUQGl1zM4BWFjitEsa6cq/jjGIh7XC2gcTvm2eWRaWDDr5n6IcJZtD0ODJYzhH9IJVk4uIXlKksbQcuIrmEWEkZBxeh+DAIp0tmgXr52zuL9uRxapFuSlOq3BlU5N3I+Iu8Fg/rBAnNcvKEwSk/71gIbFlwaxLvik5gposBrfcD4U1+MJLRTPhgg/HJwljnpTC13NERk70aJg2/SCvFZcO+86xWuLwvNjWRxc2K8yOeJggfWG6S/Dt0dGaFl5F44u6XDbQV0GKiDfNOzo5CtzO7CrkSRJ+zErGQOEEoF6UhVmmpA6ONf2YDr/z3Z5bIP5z605qNZZWUDPVLjU5elINOMi4fsEw3OYaerNp6aoSHA1eXnOJoJIMsU0KM3eGAO9QNhHE2PlkwXulCEX5l1tkohbwthcv94cBVsn64CtaMMgjrgUkflNYnfEM1djmP2iJFEG/MjNMntZCrVRGXdjjqR4Q+lRe3ELhXuHjqeU5RS+KdYLASsYBDzti2T8foSfBxxXcpMIz/lS8+Qx3pTLW3ktH5AaEtSdclWCF2HLc1/03O/gdv070KOck/8TXbyZsJ6g3fzThY7xASttVsW1IITTaX9XE52YkNOe7KOrjJwkSbUgOU1Rv3Aa7x3VJ/ac9nDL4AgS+TlYNxfYBlGkbesL+sqDgWrL268y38MyK0DRqEQVjCxV9+7aAkxLvaUXVMYIwxqAM9Id66zRb0pJB3uwgpOAIRzOCskNEghjp17p4BK3lgehkRcM9RAGb7WqgeNfl/+ox2b25Pj+nvbWN3XghNZwNzoTW+kBZxXhOTRvIyAne7IPRpmtD1XD6ZBx/C6ucQ7kTUL/7LqFXE66g3Zey3hiaiQihueSMCFVer6F+BIMSBpV+9cmAczdqYvXRnKIjQg15zwVGz7mKE4D7caiDjkAQeMUSqziw+i/S26Ont/JBHIsLpYISQJErTAl2rGwC+7ADw+H6jg0rn+nE5s5u9fxUPMsWodcWi5oGIFRRTyGeIZYSTNveEwN8h0LGwXhUlHR6RxBAIpbiwKVUcOFOKc7mojhJEN36mXsQdRyCUjV3YdNzj2Tw5tG4exPzStsjDxSn98XK42QisGde126iI=","layer_level":1},{"id":"a06436ee-1678-4a51-bbf8-b0d0ac3456b9","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"数据库架构","description":"database-architecture","prompt":"创建GEO项目数据库架构文档。详细说明基于PostgreSQL的异步数据库连接配置,包括SQLAlchemy异步引擎设置、连接池管理和会话生命周期。文档化数据库连接字符串配置、环境变量管理和安全考虑。解释异步数据库操作的优势、性能特点和最佳实践。包含数据库连接监控、错误处理和故障恢复机制。提供生产环境配置建议和性能调优指南。","parent_id":"243a1a45-d31f-405e-a3b9-694d2fe617d5","progress_status":"completed","dependent_files":"backend/app/database.py,backend/app/config.py,backend/alembic.ini","gmt_create":"2026-04-22T18:57:14.160162+08:00","gmt_modified":"2026-04-22T19:05:13.623934+08:00","raw_data":"WikiEncrypted:veTYwq2y4io5qXerCTrkkJxdCaPVm76qYvPs0DmFrBYr++cWSoBpsZCop64XjnmZv6vHv8URIJAqohtlaw1HFotKc3mK0aD3tk5jmFWmTjGEd9iSTEcB45Yccg7p5eggZzqexWRLP1afxRQPau2t5uy1dZIlExyu+lyiNQI9/hXf1UppgfCjo4u6akBIZtYhzgcUSoYY4jCjv0naBAT/PyevZQctOpKPIBwMdeB86h71UT0hKB1hXxbyQoljBYZmATJaRjmlQzZf/Ka1gnDj1s1WVsGMpSoA7jyNRPH+Ra6hR+5N8Ba5vkjxM/HcRFq282Jnr/TnidF4MF5HpD5Piye73QZ3zAvIbu8+iOSvpQee/FTzkrUQBy0xOA5lsfFOy5OFOKtQh0mHybuNqe6H5squ2Tge+K4+RKXbDCt0wptrSV+BVQ+OkAJJEtLNRpJElsQ5bw1UU6CuzbgnnEYrMXB5TMBI5N2/J6hmlqt978t04N3zVI9JnnFKK0H2og6TVu1Hrxq/xEB8RFWTf/WNN1p4Akee5r1uOuUry6hsO2yQUTlmHq74QnJz4o4YJodWkhwAmcyzPIlMeSFg/Kr/EvsQJN4UprhudCTvNitnPaBesVkucYDYQiVAhxyNSAqCzZUYXbyuLD4r5DKxKzvHjkhRugm73yBM7wzbxB2lABMiGM9p90FASIxS0SfzIl4qrFbO/oQGRIFaYfUCnQF8h0YDi40UX4/LVmnlT/L8y/d+hU00P5j5PI0qOyoRDqsfQZFaze+qtibkMnJ//iy0Awl0wqQ47SxaB0jhTc07lPFBLSHFSoVUaKDs1DPGiwKjpWZRzAw7rbv9NFuV+irKc0l8qDNCaK6Rk0rRd0ukFuszcaE9n92URbvv0Fk8XTHLr8sFAh/xMm63r5hUAuqEYN6z/Si5Isq52UmJ1/TvnLYIUK58JHTuDsVn3MKJ2fTgUw/U3g+N61WpDIgGvaHO75crgWZbS9qQyDoSSj4wNdxWR+wtmKjwZdRK44kWRBS1QebMTLNYDBgHD5hPnmOa5W/Rx4Y0QBw6UFjCy/GOmDI=","layer_level":1},{"id":"7fea5a24-e6de-4003-bc70-9dae6d8fdb25","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"适配器架构设计","description":"adapter-architecture","prompt":"创建适配器架构设计的详细文档。详细解释BasePlatformAdapter抽象基类的设计理念和实现细节,包括平台名称、平台URL等核心属性的定义。说明抽象方法query()的设计目的和参数规范,以及close()方法的资源清理机制。文档化适配器模式在AI平台集成中的应用价值,包括如何通过统一接口实现不同平台的无缝切换。提供适配器扩展的最佳实践和代码示例,帮助开发者理解如何为新平台创建适配器。","parent_id":"7e66719b-4a8a-484d-889d-10fdc76788bb","progress_status":"completed","dependent_files":"backend/app/workers/platforms/base.py","gmt_create":"2026-04-22T18:57:14.592407+08:00","gmt_modified":"2026-04-22T19:06:14.01609+08:00","raw_data":"WikiEncrypted:mEeeU1uNqYKn4jkG2zPtuGBVTFJMKL8+aALSFPkyoEYifQL2Z+klmgmPGyzF3YlP0xw/C/hG8jzgXcVjqaWbA8lOQYPPvd4qFK8fszqAYs/fYEHXvWBVaOTbFhjNiT5k+li1MqVRx7SiaRze/N6NV4j39o5dfNAouxnCXgLyBZdG5QXj6JAfhJ1mTHsYQFDmrIU+nOtrQvRh3bruUOURVd64c13kwbBISJKHVwByRrfqWLRTsCLXPYfsgZF4rkL+Iz9x27Nl0VXvNcIIoMXj9B7hg2PPcQlmup4U8y2LhUHmKrdiKpW1t+XZ8rpO2aPKpzr47rn+3n2axWoQIDjWKlHAwi5AhxgPysB/i5EGv0pvgo/mNNIfsZlmSYgXASM6bgCzH5W4O4oJVqOi+gaLuI5+i7N8/+s+FKb63H9ZNvwClw5jXJe2Xm1YUwVGLG8KX5beKRTmBgnyDPmOW17/OXwsWMWQSQKrgpiv+2C7VQqI8X/agBVWawLJAc8VloY281S3ZH5LTa/6ajeGUVXiwpWSD/YWzo9sxLdws1ZXCInzLYy5vX7YflgBOlw+pn6Z901TBktq5jxrG3CFTbRLGxaeG1aJ06sLEFoPzLSXIIiEIuAROC6lPr6XpYAKESgWGOG0GdM3BinxdkriGn21ZZjENIJ436aZjsOiE5M20/kJAnjWIBPEJ/sv3nsi7u5iLfYFvkus4GfnKXJyto9LWiTgqrwHoEUQy4+pnVW+ce//iLlM/t0ZknimuBfzgYSWx/jPc8o9ZU5OIserDAYGaE4sDZIDQas1jOq8HGN/q4wJR7sW7Fw1jKyl4suQZE6QSfYx6molnJ1cSVKcsGrf7AHDKM5x+uGRmLWXqMMUZXXtbbCw0mwqfxAUPiRLUdVyzot8dh/NIWX6B1KABd/kKs+L+vVuCmMen1XVfP72Uy91fYOkBj/xPkA6GYrempnrB6zh6INdvGw5dEKlvNARMnZZLCA64Xw4h2TBjbkIjsBawvJtT+wEGkfkPk5z99jbaaGS65e/JDF/g5WNnKSX0B1Xo+frM1AFwnKR4dIJXZ8=","layer_level":1},{"id":"78288302-33bd-44f7-8b29-24f516c8b6bb","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"调度器设计","description":"scheduler-design","prompt":"创建调度器设计的详细文档。解释基于APScheduler的AsyncIOScheduler架构选择和配置,包括调度器初始化、触发器设置和任务注册机制。详细说明调度器的核心组件,包括QueryScheduler类的设计模式、事件循环管理和异步任务包装。文档化调度器的启动和关闭流程,包括资源清理和优雅停机机制。提供调度器配置参数、性能调优选项和扩展方法。包含实际代码示例展示调度器的使用模式和最佳实践。","parent_id":"7416db23-312f-478d-8883-2fc3c41ac2e8","progress_status":"completed","dependent_files":"backend/app/workers/scheduler.py","gmt_create":"2026-04-22T18:57:25.383156+08:00","gmt_modified":"2026-04-23T20:33:30.132403+08:00","raw_data":"WikiEncrypted:z5m818jdZZHs9QqQTrTafQ5BuN3hUq8ojqzL8SUBUvazzYVUu4EVEqQ8I56QCaxYSTvxoxfSrvjJk5zRU5X7dcnw4Xa3OBhn3OLehoT3E+tyMxhlJSbJpOfp1afGCLyH7k587Ud4I355IvboUvSoBViL1WL1yQq+6Tus1CsKPq1yHjNiWT35OfV9g7bRu5xE+1nSxjPu58jZpFKuN1x9oqF5OJmckHxf5sVFqKlGPU2yyeGdpzKRagbQGUkBdw72yxzSyevTXJ4y+UPCQLh2FLZ8RgYP0OD705z2xIGb7KSeQocLcW5FoxR79ySiibc+AmzE0OBKZqbcm/aw8K5lAK1GP31LdhjrndMTmXrsf9CYBNRIir1QOJsuCh6zPtpsvQVmrX7DpqXiWsaqnK2GVOkKPtnYAJnGsEQhaoX24/64eSYeSnJ7KIsQxP0MHUrRG85VVGF2ADUGh6L8qzexe7uE+lnaqgC8HBQ7CnQ3Ugnj5hcO7vnwQl67NHMOQ5yaL1SpfURVWAx3jjUBU4xjHfmUNcBC2VM6ie9C6Ulelai8Pg0+gFL0A+pfN/Mkzzh05wcgnmFbWfjabZ4Ofv/w+UlG5qhMsEJQAgag4tXHgP/86pheTsfyefYhWEkow983vJf6mYl4lgRaFHeOZ/JBTmM0sxmg1PMZ8wgClMSC0a9SKcsAyWOh0yMuBn/Ckhx4HqGoPAP1rx/k9TkBiHFEoEAXeTNoeg/Wn7tVimdgZvAjW79z7lbcRV1cvlKMSjhRyO2s6n6N3Z6xTlKtLrqHBbXZcrjNQqJVgW91Xk78+a1haDNngswufhJkTJcH8hp3hSUCJeU/Cpx3RYRRf7E3bGmj4sV/+yXAybUvCOhs1s89mYVFThdpDifMbvN5C8a9xrjKJNfjzijlVZwx+cGy5aj+ZQFSDCRCBHvCCIBd76w8uxi+VR8VhbsIryP2KUNpudqIY4V56Jx3DB+dznNJMasPFZZ2ZttlKIAV7oqWrreoweIqeEIugrIM4TdE4EWmokDP5wr0tBdyerPnkaCgJLQj3X2K/xjY6ony3F4svfG1pk2jd5JwTLnudwS4dnGY/1b//vEDGI668cQtR5fW7+APXXb8qjOLlzM4Enze4mw=","layer_level":1},{"id":"b027f234-4ac5-4d6d-9b38-afc8054325f5","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"单元测试","description":"unit-testing","prompt":"创建GEO项目单元测试的详细文档。说明各个模块的单元测试实现,包括认证模块测试、引用引擎测试、查询处理测试和引用数据测试的具体用例设计。文档化测试夹具的使用方法,包括mock_user、auth_token、auth_headers等测试辅助对象的创建和配置。详细说明测试断言的编写方法和测试覆盖率要求。提供具体的测试代码示例,展示如何测试异步函数、依赖注入和错误处理。包含测试数据准备和清理的最佳实践。","parent_id":"fc6f24c3-594e-4153-854f-19250834eeb1","progress_status":"completed","dependent_files":"tests/test_auth.py,tests/test_citation_engine.py,tests/test_citations.py,tests/test_queries.py","gmt_create":"2026-04-22T18:57:25.616384+08:00","gmt_modified":"2026-04-22T19:06:55.090058+08:00","raw_data":"WikiEncrypted:oQ7VNoYBl3ApU4O5/TGa/YEO9ObmRNw6knddpSF6M+qfBokxpt9FAn5Oh9wXkjVweu6TpLk0XawcRFRcQ09Zi+YnQyN8+4Ep9fANKzHyAxzcnhkI4VZF35j3DwTbhekUFTKQ+71fms4SP6LGrVw+8IP/eqJC2TH96LJR1oxckQk//yfvKqFHsMLgziXy6zrXuQO8PIu5U/WbkKUkJHWSkLkoTtPteU+WKljSMapCS60e0RUDWZEPuFD2uupr2PJxT8AoOXx358C9XEj8tQ+OwHpsBiR7NdmO0D3GmcgVUcuU7WWxnToWu1UM1d/t4u+x7bIQvHQIDjLWR40nTrvBZJBSSiui0he3T03jLkIB7r9kxCpm9mFUx0fkmUSWp7FRfs7MfJkuoQYVU0YHf6/FF6g/PoQ8ieyqr4YaNjM3kk8GirHkmKjfdQt9YmQtuzMWnzUQ6COtN+BG3STyOvO+12YQAYi5LWe7u7oP4D7TJRReg7FeLDQ60Y8KEoKBJKM051F7pgHlorthWz42brF5tF7oa0tjB4AtWaEwXdCvH278kzwHNEW9E5zeERzX3hlHYL+mKpTbemJlfuHuRugCRy4EKFRP0RYiIUecBK82Pi4Vi9MGjB7cQxIEutHQ/3D0JNLGwEo5TCsk4W3isoF+mJDFy6/IDwgW/+5FIo7V/G18dTg9YbFRwMecdvBfJU5QZV4R993bdx+kH6qB5IoJrA0AzBOCn99YQ/xgAd3w/82Z5vR8syeNZjHYmcx8P/XrYDk4UZTwaacEHfn7tcq+tL5qJDbxdY95wjaWRo9giFE8woDfoLWstvKA1/q+YOyDsIHC/uHjNP1L0ELPZ9ssFuHcwLVrqDwlcblya4+oXlPEOH2ar22uXNRmFyd8Mf8MmEWVZklodBHSKiGUlj8eSWqtR+Cw5Am1gmeUcOxqan5YwzpyXet6g5ll12dnu6ItLby6qm+kjET3rsjaJag7UBlMXWV9xn9Vj4QDK8USPTTWkRUEAj4WH9QqECQzUtYJ6+GsIE7LGx/5tzApMdX3BThIiG8C2k5ry3z310nAMX/pTSrGFGjy8tWFf+KH95sJ6aG4CDyxSPHT/3ivhXAnKDesNYTVgSIKNmAUcj5hRjTfJeGyljB7NEs6Gxz0tf5k+GQLwvRX6PxSnMGkm+q0yx0MNDRBYJNlPCFKUR74ZAU=","layer_level":1},{"id":"940e5918-1689-4001-a284-44f2de75b8ee","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"认证接口","description":"authentication-api","prompt":"创建认证系统的完整API文档。详细记录用户注册接口(/api/v1/auth/register)的请求参数、响应格式和错误处理。说明用户登录接口(/api/v1/auth/login)的JWT令牌生成机制、认证流程和安全考虑。文档化用户信息接口(/api/v1/auth/me)的权限验证和当前用户获取功能。包含完整的请求示例、响应示例、状态码说明和常见错误处理。提供认证中间件的使用指南和最佳实践。","parent_id":"dd12cc44-0c95-45d5-a726-e7b8bcf2531b","progress_status":"completed","dependent_files":"backend/app/api/auth.py,backend/app/schemas/auth.py,backend/app/services/auth.py","gmt_create":"2026-04-22T18:57:37.836287+08:00","gmt_modified":"2026-04-22T19:07:12.356456+08:00","raw_data":"WikiEncrypted:uxAckj1IXK2TQH//kEdeBPmScopsydAsQUjZb8Fs6jI7ezX3WnM5wMv74LMiw55tL2+YKxETbMgwkBQYqIg1VTja5IjBYqljlAzD5l6SrkKU835vZQoOKlYgIFEEXj5PMURu9+2Om7SDVgjbSQ05vLa2aVIBV6PiVswRGc5EGTGtYnV+DJs4BxHzYpH0Ac7KkyHUCGgH6w5QDaOxWt6c5gftFmsRwr8WVKANmqlNU9uhDjmWzjTtSqZ39EVbLd++OjVbpLbTtijQ6gOF0KBBS4B0N5k+Xm2/gDv+HNK9kZ0BphZE1Si3NfV0+cu27HLJ2XV9w357rte4pplU0wYG5oC6cuO7eBFxQdCR6e+ejXIvKGahQOce8d/jWexjfdWnUzvQ18PU4+bUZmiP+YD1dJVBFgxggbCIHG8VFTQBqMaYwc3NLWogjXnczII+Z3sLLneLkVAQEdQ381GeRKdaD4PrtAWp1Ss2QpGHWUKDdaNSLcfm5NXEe6GeECxXH96p6BvyegD3twPfZmY9WKG8YOhXqbpzae/+DXnUTfldYKnMfbonSav0nUBYt8JA0L3oceaNs03211fvlSgE8L9vtUDtNF5lHkhOLMLbu000pe/VWc8WVQRbCKd8KPd4TUxMkB61vQNIcvlRKLMJLNSnE1VftRTpdEpWKhm5qkLfOfikgsp2qp1iSw5Idpu/TLQPIGN/sYpTJ1eACeXt/A3qrlITHFV8by4utTXDT1gRQQ7j7n51fQHHEIbpU+6CRhSBBQfa5IlWAqkarenBmr5RY74jeX7tlhDhvFojQGHYyMaDsZO8G/H93/20YG/li4iihHLIYmsN+2YRP/KWCNaopBGp7tRyZi//RKVXdHGteWxP7vse7URwPhfmHDUB6dMExCT5PwgsYoDwD32k19Eauv4c6OogAMMUN3I9rhSo3V0cde7/xSOhJ34SUY3w9VpPAu1I4zTqhY649YmBnNEjtGLZGTnEJWSdneSPsudvl1HJKg6faq1dMy0dVkMqbHaqMCooFDhiYVS1AM1cG07y9rQisvQP8Ic3NTPAA7BhH0nrPnLc615Jg+XEAjs3brkNXEVZlxNvX5ZqMCoMqsiZrA==","layer_level":1},{"id":"6406f42a-e10b-4a2b-84a5-0a21c1c759ea","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"代码规范","description":"code-standards","prompt":"创建GEO项目的代码规范文档。详细说明Python代码风格指南,包括PEP8标准、命名约定、导入顺序和注释规范。文档化TypeScript/JavaScript代码规范,包括类型定义、接口设计、模块组织和错误处理模式。说明前后端代码风格差异和一致性要求。提供具体的代码示例展示正确和错误的编码方式。包含自动化代码检查工具的配置和使用方法。","parent_id":"2148d7d6-25c4-497f-8894-c4eb7a0d2bd7","progress_status":"completed","dependent_files":"backend/requirements.txt,frontend/tsconfig.json,frontend/.eslintrc.json,backend/app/__init__.py","gmt_create":"2026-04-22T18:57:39.373374+08:00","gmt_modified":"2026-04-22T19:07:51.274139+08:00","raw_data":"WikiEncrypted:Gw00+yNdsAXvNpUHE0sZ2+QbHW33I6XBnIRt1QjI/FW/5OIgpgiMvU/f+bhXrxoZK5Mgo6YrGuAKhtZ2BPutU1EdQeDFUnQQxxqSupe1WUkFgEECvCkbZOAHimRWBeUutq2qKCfVhu1+US1y8n87OZXUUvVSAksZOa8lbb2AHyiKTMdzzPThS0D+8uOalkBg1mvJCS9fqVoZzY5BYYpuH5eZJBglHbA4uMbdFVTSKVFfHaJ8nlm6uYjaY0sJCSg+dhEAIiMfOTXP5Bh59kxWfLSdZU6b8oPvLV0btsiS22/oEJZI4rWjJ0YTxfQ4jRv348P+GQ6oi1pvwveiJyOxLq8QcVKSiDxO55Ovd76PhOgpOp2WJcUsKoKBoxs817utm+Ld0htpPBS3V90Rw+suMSPCU0mCa80FTrBNn6PnXemH7lH1ozQIu3Y/AGNYBN93acBxtiZ09sGFh2sO9mbbCU0iRuNe9nwWa4MsA5rJMLGdRbyv6jk03+sAvuKwZHXyTWxqeXvMatOUKXzTNfmhXsE+Bexe1vaukG22SWhsXu7FhIaH4Rt7CdpMW0jjbZOf4CwKY36ucVBRwft6ymuED4ihzikPz7pJ5IEuxLGtCyt5QDqT7kbv5ITx4NM/Q2IMMTRZf9bAZyN64PV2TJVCNK11yU+cE7y8HFBNFSzPfDBGFmxijKjTL9MvlElogPp0+qckxGclnip/IOFc6/WAbPNK0qXq98Jq5DsZwLsx4//8yOyRyaQGmOVaOWxb3Aum4RIf933X/hzoTFpV2uSLSznRyCwLpKqjp2zMS7lCj9aDhWLcx5J9NxXfdxFVxBsapMeDDl5xR5nfTFJcOFylsdPxEdxf5J8ULB77F3OmE8Hff/40adNMxJHMyBmju99HNnMZkGLjC68HEPNMZ/6T0+m/Sq1yHOrakYMiw6vnQvmLW4cBIhsTFbhbgpkazGFTk8xsKH3pGySrLXL4xmadfs/g2X/lRrLbSonWaQehTqHYrhz4HIxrTUDn4kdxaPPDhH4fHdEu/69Dri0DSzmSF2m8W3hh1gbAbUO/mbHob1eJg0yKGzyh8AmvUlwXIRGrOwQA5dUZNPSo+oCcv1qlrQ==","layer_level":1},{"id":"e8ec6ac6-ad1a-4332-a7be-727b47d71233","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"Docker容器化部署","description":"docker-containerization","prompt":"创建GEO项目Docker容器化部署的详细文档。说明Docker Compose配置文件的结构和各个服务的配置参数,包括数据库(PostgreSQL)、Redis缓存、后端(FastAPI)和前端(Next.js)服务的容器设置。详细解释容器间的依赖关系、网络配置和数据卷挂载。文档化Dockerfile的构建过程,包括多阶段构建策略、依赖安装和运行时配置。提供完整的容器编排流程,从镜像构建到服务启动的完整步骤。包含环境变量配置、健康检查设置和故障排查方法。","parent_id":"803bfef4-3985-477e-a61c-915a246d0061","progress_status":"completed","dependent_files":"docker-compose.yml,backend/Dockerfile,frontend/Dockerfile,.env","gmt_create":"2026-04-22T18:57:40.354835+08:00","gmt_modified":"2026-04-22T19:08:34.084609+08:00","raw_data":"WikiEncrypted:h7ADvj4WLJHyulzCl+z7kNgZWY+r5P000yRKX1NQnlv1Xv3Dqgu5Ve8V72HxPVQrbKK8WU/ipQ1PAqV6SDrNgrc1Neea6KoTKr95imYAh3dYgIt/lZ1sndBbQCFqOF87dQsUIEKQgwrsicAeQ0zdudUWh6EW2nyIF0NGa50xffbgEr1mm/MThBZjOua+YnCRogCbgtirEO/6HGlC+I33w/bfFI+rREYKdumqUEia0kUP0pWSpwWjOQp06I7cUoSrx/LuJJ4in5YsZetdjzxdbA3ZvGMjeyI/VVF6UC/QUOgE2csP9z42v6XdOOngM/coBHI3DiUrroBGTPa6BVxJdngItCJ9XcNvXPbo0xMAkAoUKnNPA72B2pRuk4F1sTiOaSCQ1jaMiCTFvbj7+VleaodRFLDFsYa8f1w2FkiW7cEBhFpFgB7Qfru+Yi11rpkjnM2def+Sqq2PSHQ+Ji83jPoQXFl935rDQbNUy28wOIE3BdWN5jjM3nyoXcqKjPVjLf3cxGvg/sbdWk1FYPMIsbK/DUWayyTHt6L/fYkDQYjY5h0H6Q0jBxlhNQ34GG8kEcvrZ6Dy/jtCtE149pi/ToeMbpPq21c5KUhs9OHcEHgMjxWMaEVjQXMjFCpKyJIPfC984tfoZhAHi9WupzyEi37/igcgVJnvIdtadpX7uRxW2JCdfoHn1H87nGQj4eAeI3kMhtJ3EIPd/D6STxUcgtyLdTIZu9kgvnBIN4OyZeI1ygNZfawwQMmbDxHZ1pPcyZDHFlz1HZ0NFX+7VnN2b25TJP2hxMCZ/5OdYeSLozIbM/azA8QMHofESSdxDX9ZDdhvENDlngxUBmxM8+yCAWHENGYqWDL0gZMMDwe89n48Xy9qnKNLX0ROfG4FAtoXsEgLlPQM3AWFETnzr7Kvuma+8sY1iaMVIXJ/MWoy1zLwuY/oOZhVqGLX+DOEupKhk1oQmiqzciCeV8my5Q6LQeriSBww4jA3r6VQMPzBVzKJYz+TLizB6Esf//9+ilsgUVUc6GjD41Ml4fb1GZO3PzxGWrcX1RUE6RKllUBVNffxzE2WCirEX4e4YprntsHu6SAb9TLIInCx7aZnlVnaDQE5BCiHLjIQJnsHHJzlBm+8jtzE4zi7ljHLfbJwhtZ9W6S9KGUqjjNryjTVnVyYQlumOT8HCAkz3fSM6MpXwQr1qz/gHyDrQanmM1O9B/0ox5O2NWcOm5qtsteiyxwKACdyxrsUx0X9BaU8xygDL75XcTfcaOTcICRwaRZF3/UQW+zhbJo9LnHxq30JzTbxU7wEdjpWZQHZ+tu5BMrIqi4=","layer_level":1},{"id":"a91fff3d-ec5e-43df-8176-22f0084109ef","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"功能扩展","description":"feature-extension","prompt":"创建GEO项目功能扩展的详细文档。说明如何新增API接口,包括后端路由添加、数据模型扩展和业务逻辑实现的具体步骤。详细介绍前端页面扩展方法,包括Next.js页面路由添加、组件开发和状态管理集成。文档化引用检测引擎的扩展机制,包括新品牌匹配策略添加和竞争品牌识别算法的实现。提供UI组件库的扩展指南,包括新组件开发、样式定制和响应式设计。包含完整的代码示例和最佳实践建议。","parent_id":"b2bb2e3c-5661-497c-97dd-15bf6ee8b7d4","progress_status":"completed","dependent_files":"backend/app/api/,frontend/app/(dashboard)/,backend/app/workers/citation_engine.py,frontend/components/ui/","gmt_create":"2026-04-22T18:57:48.684421+08:00","gmt_modified":"2026-04-22T19:08:25.140739+08:00","raw_data":"WikiEncrypted:5RlNBsIi2/3o8ATlHuzaYD9/6k0SjLB2nW/cTN9Sp7ydYLe7mauzXPQFm5pYVoY1D1K/aULghB4g32vyxSUIsHV6NsxwYA/5+FQ8w/4xsQc3urcx9OEKeSC0hGU52WXucdAGjiEq/f4wJ2c9FdJEeALD6eX7MltcooFsxAVRWIKzHsMdBiy0RQN6s7vv4sb8vpV3b1ET27D9QlTUiTPU7RgtJLMui8iYiwJIirfL1TgdGRSx0Rr3tY/JvS3/6/L6VU/69BKglW8DnLwDkWKuthI/2sfWQa+lb+uTuixXL/VbltWQnzwjMVYghhTizEEC0xTpFGcDY/ajvLcjy5+wSleNEr9AFy/ytJKkpqEO8Zt5qyVJ4eANJMSXYcoKrZEskjVpnrPEHGdOzaEaCqcl2sQYkXde8LWM29fWmwlMjwJzucGwhudoQLXgkIwJnD+jb1r2SdjjafTI76MM53AnSfD4aj8K26yrOkVtoD6nWG1A1fG6F22pPBhJdezNJCYuKBaSDxJDES5486L5Gm5RvjYDq4r6RZ5CheGPgxl29XjCimgWuxXKVX0jPLUawteo/Vo5D7AHzucx2dX4mKr4rSSSHpD4HGdbwnxZ717DkRG01vTOnue6gSQ7pceMjSZ6TnB7dvtwwarHBKQMKwJXrpqxc83aZQjW4sRTAJs2Gc9+11c7qT9fQnGK54JJjEARaQZVaDmTpKmme4SKKxCB7V8yUqR+D+swVuSjIpYdL1m7THJtbWSSLaKkWmYiom1C6qb4GIgO4CT/IiFSyQ0Sz8MUIJi/dK0l/vVmpp5p3IF5K1m6NHDX94yEPWEHsWIS8eC2B74AyX6PG1fWSt7HpiBAzq8nu8n+IrXPqDege5sXbjfNrbvkRot94AvLF2aqMbteOUGOZxMLASQYyfRQBlaEEFMiKEVNTRSaHqiS8mS3pG6XLcV7TkWJIyMzhcT93hKXrSB2+jLa/rrxxrZwfp6lddgEcV+XZzQU3KsJf8blNUd+UkA4TcwFugu0um1Kr6Hro8EHAR34+FGMbPskEPPX2yd42YXx6qfmcFrI1xvHIQfnc7QuxZwO6GHR0G5LiPtuV4ZSxklXCwgnGWy1lpC13xANNvM1UKqAuhpuV2qU+xayK5IQv7kQaDOJpnMzFj/dSxtRgL2Xm20nH4BA2lhBCQMqeM5OxJ5vzwVlgVMZxDbhwrRaDU6cudgNfRJDFh2lGQqE2flEkvSF7g87Hc5H3qDQxUv56qpdOPJcgugKJtT3Jz4dNt3+eojvEwrTUc7d2Kq4KDTFUa5jDr5uo9PZhNR2TDJazpNIdl1x/64=","layer_level":1},{"id":"e3ae8925-4862-4280-b85a-0b376841b15e","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"快速开始","description":"getting-started","prompt":"创建GEO项目的快速开始指南。提供详细的环境要求、依赖安装步骤和本地开发环境配置说明。包含Docker容器化部署的完整流程,从环境准备到应用启动的每一步操作。提供基本的使用示例,包括用户注册登录、创建查询任务、查看引用数据等核心功能演示。说明开发环境的调试方法和常见问题解决方案。确保新开发者能够在最短时间内成功运行项目并理解基本使用流程。","order":1,"progress_status":"completed","dependent_files":"docker-compose.yml,backend/requirements.txt,frontend/package.json,.env.example","gmt_create":"2026-04-22T18:56:47.081987+08:00","gmt_modified":"2026-04-22T18:58:54.237875+08:00","raw_data":"WikiEncrypted:qfgbutC7oyxR6nMxrwk1ODnNMBEQ3/sG78fQT1yXWju83LC7H/jAM8CEAvWT8huE5OClmQiIfNYNxHQ9s7RRS/GGSwI5DTgXTPiPdxvdU9tU52Y4wj4FfVrOtqmH0nMPa+EBKH1Wo4HibSewimTkeCuJVAAjyygiPePcftR4ud09LKmopy1NSgZrtHMoDFDwUOcNJQad4OVgxMnOi6B6z6s2Oh2aPWNJX5EvE5xGkLAc6XvhE2T7MU40VJ4lUOoKlCNZNdI06grEqwyizBqt13Hg20wonqeQ1uPs49UbF84IJecH3DmE6KW3oqmqvQY6tztk79eE1bKZmBtQKXz8WhEMWZwALTsVk+hkk4dH/fcDoLteR1iuO4FaxDwAOaD71KF79AaYxDZiM/8RER9YsajjGSI+sfpJALuiQbqqfKbYFSgliiUcf4gTM20Ey5rtfBkcvBY6yOBPpqdKg7/ls7jdggNEWDJfN+DPVzV4SGAYRD4g/kDzPa5vaNZ6USRa7hVIR0SJufX0DGSdzX5BMh5DQEEyd9svxV+bs4KPZphBIeqAOzvo6zyF9l9LjPPdEook/uTIBHjGgx+8Ck1NQEeNOs61Zqr5EfISope1Au8dYCrzwpr02s4XAb/6bYsMSkfVqETlSSUkipDodGoLJU8QiYr5Pjv63Bb9Qb7SZ+i7NrGp6UJNVT0etywEMKSQn+73I8e9AYrAxlN5ST6K5b3W7cOPzFQMCVRfzvdd/FbuN30u7JXlFCnm6Ee8LDHW6nteOxBP1D6JxbrQirCQE0cSuk+d8OR5tR/DJiRDcjbsG38KVBEqWnIek8KlMGxEt6N3oq2ceUCCLe4jVURPc/2G/6gNiyVq0dPPAVwjaNKNwtiyaDhhBu4T21k9NUfhdQNz9DJWD0wXuaZc89RoqLNlCHJ6TtxEHJ/Sv4cgvm3QUierIBIqUawkCMEDn3ZEo7L2fUS4fMlzfpHSgTvxB43ta+H1m6syFUmAyh1yqfXVxKZY0f4JtmBbQpNzpT+aRHMKKQ9UVvtjvNcpupzO5aNkyclJVWis66DMtfA1H4am2gseXSfgHHtXiLfOnGoELSM1fLS+T9oPt48v+RPafJQpahtNeKtZc4dbTcsc4qlS1krenNSBbkKac4Zsosjv8xHuD1aqYvAS476XT3gjLfV7YUCF/+i3PiovD9NGzhA="},{"id":"c19260e2-5163-43d4-b35a-b48aae995f4a","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"认证系统","description":"authentication-system","prompt":"为GEO认证系统创建全面的实现文档。详细解释用户模型设计,包括字段定义、数据类型和约束条件。文档化JWT令牌生成和验证机制,包括令牌签名算法、过期时间和刷新策略。说明用户注册流程,包括密码加密、邮箱验证和用户激活。解释登录认证过程,包括凭据验证、会话管理和权限分配。详细描述依赖注入系统在认证中的应用,包括当前用户获取和权限检查。包含安全最佳实践、令牌存储策略和会话管理。提供认证错误处理和调试指南。","parent_id":"7c2ac186-ec90-400a-ac1d-b3b7ca2f01d5","order":1,"progress_status":"completed","dependent_files":"backend/app/api/auth.py,backend/app/api/deps.py,backend/app/services/auth.py,backend/app/models/user.py","gmt_create":"2026-04-22T18:57:02.317252+08:00","gmt_modified":"2026-04-22T19:09:25.682207+08:00","raw_data":"WikiEncrypted:uxAckj1IXK2TQH//kEdeBLXlO/kfAAqZjShpoDF/LwxGtmBqx1/zAvbXhqcBr9eSVupk3ShQQ44G7JWTygjRc5A2FkInV0uhQsYps0bWsiMbDrwt2AOB/ePL1uIbGoc5ApUbCip0mBf0CwqN0REsh6d830HtteEtKfMMtm5qouIOd2wK9DTeKNNZzGx8w4gSMIpsP5p3aZ18VwD5MWsgk0ypEVodI1RvEcxesO+ct8/yxvAtUoplWhOhExXvEaKsye33rOjbpp30RA+c4dB7CLQLITqpn+wxBlXockOukSc1TbsfdPYx7aBemMwYLdSg5BxjQI88UeuXoj57ax7r3FRkTkIghjXxbpJjAP34rD/Nr6kFlE1ffpnhtqKEcaewGDTam7t2tBNXaqUA5N8gM7qLaJb9G77n5LNWkW3BEI+mzLUgjH8bKerBwqmGZaXckRqWq434EkgNrsUu66RE0kG2tkjy/QgzBqBI70QGpe3lzfJc/eka8Ylgo33DJxnT2gK0imqLhTVjYuKhn/Tj7eKXmEAK+3ddYoLe7Zd1+mAieLK3NzZderogxHrbMIurgTqPWwKg7jvj9pWgT91c7lOpX0hic2OLS+T+g3bMEZOwerdtpByP9pFeu8mniiEJ0k85mEf3l3mL4Y92IJrF7wXc4Sj901JsHKGYyqErz9wUOQ0O5F2grtL3fzSQmJGrEjFXWDpUtGhM2ModNzXCBvm89cgaXU5e9PgQuweMNqPDDcnHhTYQk2uYXAKqGQ81DjmEhEn1M7KEi6FAfh9PIUmxY5Mjw/rUqRvzp8qW9ZC5i0A7VS2KF1YEati0DISkzNcusWc09yOCp3XQ2psLue8MbeIv/A7KoM+FFCX6VwfVIMZmoD9LlpO9Aguy8ZHr+wBKAarcZthLZKxBzgWwddU4ksDMPljtM00iT9LUvs4bU1kSB1rYQcsNJTlTvnl5q0giQTn8gAPr9eNv5ugyPpOxhcSiu6sLYwt1avmvC/pShZjizRD3Ao2wDAzZD48iyoPVc4yu/0J8HjBd56+9MV3mwWW9UGW9js6s1nyrzdsxZAnh9QT5dzYdPRh1EGz7MFqLA5huIrW73zkECwjcRtve3x0tGptO+D2RRvzbYfGJJtVYIJXEA9o2uRs/E57K+wAIXK8oxDXI9+kFys6eoRpHLIduIlmPUm26QJC3WoRx7H6SRfEzvJ8H5b9wYPnjpi0imunk+Lp0qDYT0aSxv1e7BPBJtAxVo4ztOJiTlGapy636dj/I3BWq8Cy3+srfaCykZ/0NCI0cyYtyk/4smftd0/fapjicm/RDEG/o6VGqlhrNuAYuG79wZ140mKvixWDJv+djOQlfglxDlqgsuA==","layer_level":1},{"id":"9b71fe02-5927-4a19-8db8-66eb129ecd9a","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"认证系统前端实现","description":"auth-system-frontend","prompt":"创建前端认证系统的详细实现文档。说明NextAuth.js的集成配置、会话管理和用户状态同步机制。文档化认证提供者配置、OAuth流程和JWT令牌处理。解释路由保护机制、权限验证和用户状态持久化。说明API客户端的认证头设置、请求拦截和错误处理。包含用户登录状态管理、会话过期处理和安全最佳实践。提供认证流程的调试方法和常见问题排查指南。","parent_id":"d907a8eb-795c-4060-9cdd-50d31cf39be3","order":1,"progress_status":"completed","dependent_files":"frontend/components/providers.tsx,frontend/lib/auth.ts,frontend/lib/api.ts,frontend/types/next-auth.d.ts","gmt_create":"2026-04-22T18:57:04.21635+08:00","gmt_modified":"2026-04-22T19:09:48.747579+08:00","raw_data":"WikiEncrypted:BenkIlLPgjbiADCpekIm2LnLFWkzmPKE+C+tunEqC7EVMaC4hkq7YX8EJXa9qt893SobX5KrGOKV9QEeDplCQkFx4neCRj4kZkvt/lObxAfDgMBruR7HQAasniGfUhUjW5KYXC16w7brsqCWR8CWKDQGEZiduwEsaDjAZy9TEu7PlK6Cp8RhkPZ9jhN/YjqaxTAq5i4xHmQz4VuuV2SO1LedFcTlV12iJH/vTW0vFyXgJqY/Ql6+bTZO2yMaEWan9rB7e+IsErvp40JaC2xqL7fRnfroIwQssGEvaqckwf2qyNjjNCcewd62C6FVDnxJOLjQbizlBKmbb8XVzuRLkECZVB1edGJKnDV6FkOkP9y2Al2Qtpbx/1Uhx1Lo92eRd57kA0Icc/KGcHKRjNsW0HfYWAtLctTH3fNIwtmND/J/6zKK4UdDJ8sXiTnjiU4JhX/fqW8bl4FVo8F+kJYUIhbJCQkl+qlYh/MkTCmyG8XukvSZGbvWMPUxyU1gMjDxUnyVdcJmFFt15oXI+X1CL6ukGEn1cRRDiB4yRAq2GR4/iUPUFC0d3aqeRj+ryjr6Cp8YqrHfONdwZyWd4hS8RPEP7NeRuD64yNRSDFTju1oPvBfROcmunn1GaAmw8dV6KtXSJnM9SaiqnYutX51ah9psTgX+UxTu7EU/ijnQYUnDLg26m2/bX4Rhm4MRyE/fAwzxOKEI3uIaqyun0W3lgdaF4bWTwTblet2a9rBOwbVP1xtJ5M095JzboruOAhl29fAT9iO2jeqpZBoO7zBim2s8cpkCt/Zf2Edu2CeUkS180PzKCBtnq0FpPLD9hjXPsn0GjtTEbwO6lSl9JdJ1+J03tiLVJjRTZffLUlA2gM3tucbJOfyGdAom4yffwP8hjrhTBeEyLwKmLISNARiKuE2Cm671yMn1pmt85Vu1rajq9L/GeJdoPPL+4pw0dk8/Oydx0+kOg8/Jyb/8D+XobOK98UfLB6gCaeqZV/2EBEumn1xdhcDpP8cx/kijjzPmOg+tlXa5VzG6SpcY1zw1kYgyEbLZMts5EHUFYp+UCNixZleiG2HvEN5v2iuXOdcZiguCFkQLt9TkzO1v99jj08p64LxUkxY7ovJoeanwleMMBEAI0vWrt1+8nf065/WLA+s6zQWMP7nlMloMXAfMybSF/he7s2xGsrnFXqR0XBU9qRnrLY/9IcroEnKTvicyEUylh+wG8KUQcIJj+fOEVqPGITla0i+36wx46XgzdRw=","layer_level":1},{"id":"b80dc237-1a6a-401f-9f4d-14190edebcdd","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"技术栈","description":"technology-stack","prompt":"为GEO项目创建全面的技术栈文档。详细介绍前后端采用的核心技术和框架选择,包括后端的FastAPI + Python 3.9+、前端的Next.js 14 + TypeScript、数据库的PostgreSQL、Redis缓存等。解释每个技术选型的原因和优势,如FastAPI的高性能异步特性、Next.js的App Router架构、SQLAlchemy的异步ORM支持等。说明容器化部署方案,包括Docker镜像构建和多阶段部署策略。介绍开发工具链,如TypeScript配置、Tailwind CSS样式框架、ESLint代码规范等。提供技术兼容性信息和版本要求,帮助开发者快速了解项目的技术基础。","parent_id":"1bb55e12-24c4-42cb-8f59-ddc303460d45","order":1,"progress_status":"completed","dependent_files":"backend/requirements.txt,frontend/package.json,backend/Dockerfile,frontend/Dockerfile","gmt_create":"2026-04-22T18:57:13.329718+08:00","gmt_modified":"2026-04-22T19:09:54.216074+08:00","raw_data":"WikiEncrypted:w0CkdCdnXCcvlN5xOpiEhEX3U68GI0Ngj6azFMJo9xRSxuOblJXg8Gncvj5vankATp2aJeXH/Zz4LVKH2Ep+cABEA0J7OIJMnt/ZJc7uvMtWJKS6+i5aGsUhX9BZcr1SC4TqdgwXb2je+DFK+fLZJVkri1Ne9BkEqmtSaV5CijFytJ/VSKFHzj8+7gC5Jd3CbEASojclHovCufD4dAVhlK2qcIuY3RBxMsvfRAlLyMLZEWg/gD7LEj0JaChWWR8vRaEtX0LtMoYIgSfbY/nUjR+3xHFig+m0qclK8Q01S5GJH99paLVqVkmt12iwMMiqNZypY1W2gRvZNsT8eanIKu0tq5HqvmbN0y9+nnuwnz/Tg6nUBlKIIS40jp2oYca9ak9bIwBm0TqkMe+M3Ara03+x9PgGRUuYwCt9d0PwpPG5/vOAkZtP8talqqwhn7Qom1nVkhmExMfsXTYsM+Fn2bQFXKIT/rAyT5rY6hwokrvghKwOb9pH7V8+4XckeKWV6L1rNcccOb6Inp4WcVBTcTvGbdy4Wj5Z1VETFwMnDdpOGFWc0jZRJpjrRSGgDuEW8IXpMvVYk3FV5ZyUXZcNyEWZ0Fp/s84guMC21/RYF67/9jD7eJYMeCsU92nWm6QkdVB13XQBOvYGFSu1QejQCgDMWpPz4kkt4yz9mgOtH7HsH8ZUDIml7Vci6pCcEIzS2Sy+BoXxSxcOzrqxD+PbGcH8A/BafN1771WuNzprCCTqbZd5MVXBKiY+qrlRCD1ug+pKS075xfWh/Y2Sjz4p1aJuyVplvOfNUKTlbZVBzQu5DBO+yhXj4b8Amf7OLydq0Avaf0gJhYhX3HpFNqi6aqT9OzPBIPohOUi9RWffBwHMJii2/NZj4GbgeXsWU5+EKE6sGFRGtUiBZGzf8FnB6rW16EA6in7Vd7Ls3pJrra3z6b/k9gqlh8eAVDoZhCPuxtA6yNlXm+RYWLDYeWiRDZoavKVj13rXtaqtX3j1/e1zFPMBZlDPVHyBqCZRiZjlKnty9cj2ASgpu7idyh8jDQSALGu814Wb55H1q08bvFxJf6pxn0JfbRJZMHqCEgInivdDUTcCCPOteDT0O2pwMmyHuq3mI3VzFPnYLM3aYzgJQsNIVztV/dIEJu2UGF/cyjIeROHaxvWYLNXRJZ05iMp8oelEwNe58eAvWt2KOuahqQl6xKUctm90QLv8QR9hr7PjiNAMVH3WsMxkqLcIUPuboMElVq3ErUqd4qE7W5l5Uxi2I9bVcnq4qiRtbCnRY32uC43wILTgq6KrBaO6dehB3eW4drPWqtmcU8rP1DJEatUWEvhpDNrI7T7wG6F+","layer_level":1},{"id":"7e5c3b8e-5aa3-448d-ae52-d5a96a413b0b","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"表结构设计","description":"table-schema-design","prompt":"创建GEO项目表结构设计文档。详细描述所有数据库表的设计,包括users、queries、citation_records、query_tasks和subscriptions表的字段定义、数据类型和约束条件。说明主键、外键关系和索引策略。文档化表之间的关联关系,包括一对一、一对多和多对多关系。解释业务规则在数据库层面的实现,如数据完整性约束和业务逻辑验证。提供表结构图和ER关系图,帮助理解数据模型的整体架构。","parent_id":"243a1a45-d31f-405e-a3b9-694d2fe617d5","order":1,"progress_status":"completed","dependent_files":"backend/app/models/user.py,backend/app/models/query.py,backend/app/models/citation_record.py,backend/app/models/query_task.py,backend/app/models/subscription.py","gmt_create":"2026-04-22T18:57:14.160671+08:00","gmt_modified":"2026-04-22T19:10:23.576798+08:00","raw_data":"WikiEncrypted:TWtD9cYU/QQHU+vD+ojNNl24L1Ao0zI5Y2mk07u9ZlXGce4CUXsGNCSRaLrvDZHw4OUpuZEJrmJBXEQX8GmxRc1IXLTgRlqUGmpzfcUAx8VrQijBe+unqg1mWTkYnMlYOqKWSJdISHyD5K3kBL2cL5pXF+f+lPHzSbWtqMnNnMKbqnSl/TkKh6cr7PM1YBR4IYmE21gHSR5XoQjbtYmg5qNyKF1kMdcAd0LHw6p7zHBaF9cNt++5GyFKLK0zjN2L8YiFsuFBSrn/M48QW3WyTrvDvqdOuR/Slfv+gUsKgbkt6+NEpuY9HPcRdvVJHvG9FZedomH4DrKuI0fUXgICXotXbrcEe5dOkLKgfn+gXmS6sPSZ1XgrSNO5gy2QNJaW+oKBuEPzfuKsNr3X19FZTz+x620YmL1Ccv/5uvf0Zxl6fyQb3qP+lsh2kaMdhWVKyoBv37oNKF7MO+fy+TWHFEwlVnxgmQREyQva5qxLyYzu1GtDpGp79IemnumltTAAzQ7LRs/RsaNcU3BZdYfQspjnhukylPJpNZtmKNN//XWvj023bGiaLyy805c71DcyqZNUs+EdlXmRTABeq9QkVU5wq/gkO4RFSgsWao/8f2i9FLeEZolKQXzoLnX7GxaY3BMcynG+DlwKFEolVOw07cpddYEWzmVKgJUokX/eiMbrokbcv9bLXJpHl2aP27B2FXy5Q2Ot11b2WbuT532RndBI+S9HQpfMmZ2z2Fc3VrWAbk03DwChHEbNHpmQvJpjKtLweVEpClahV8iTSwCkwd43jJdW+tR00iSdjt5vbl1cU7Dciah/B/9B7CDr9sUyZMjly7kzyWZqTkdXde3tO6tu6tWhTigIMXmZVqhW/pgVifH0R72VuM+sdMw57m7Z89ibQ7o2LewlMzJ4GsV90DdDhHQtUr++aRhcZp/669o8mijOQKj8MPHY+xjhZ2oiS6RHiCYxpibVfauiaXA3swWKIQrVCVE1x+jB07pieI3wHrmZf875mdp9rhfrz96+y4zJ464iINUdTQinm/zI4CnhXE3inFBgr8bD3pop0oYr2X5f8Gn2iKyvByc+w5r8HKV/7dd4GrdAosqVWpQweVEYR+MHRZ3AxiW+TCpRWz/PsHgunD4m+AQv5lxwoHVqF0Tqw7fmmxTqA/zC+dxlIJVD/R2WF4sFpA6femHOwqniwaowQerg8bGe7mz3BCSqiobqGSZQ5jQdh34TRP7qUg6PGkJx2NJ6AVIZVYBg9JNOQI67+2PN5AKq6WiT7Rojgo1r8lEx8SORaVptbL4YEEeD8Ec4g2l7Aqkhdxd43uw=","layer_level":1},{"id":"9fe32b83-3697-4939-8b10-524f5ed3e65e","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"Kimi平台集成","description":"kimi-platform-integration","prompt":"创建Kimi平台集成的详细文档。详细说明Kimi平台适配器的实现,包括Playwright浏览器自动化配置和初始化过程。文档化页面交互逻辑,包括搜索框定位、输入处理、搜索按钮点击和结果页面解析。解释错误重试机制的实现,包括网络异常处理、页面加载超时和重试策略。说明浏览器会话管理和资源清理机制。提供Kimi平台API调用的具体示例和常见问题解决方案。包含性能优化建议和调试技巧。","parent_id":"7e66719b-4a8a-484d-889d-10fdc76788bb","order":1,"progress_status":"completed","dependent_files":"backend/app/workers/platforms/kimi.py","gmt_create":"2026-04-22T18:57:14.59267+08:00","gmt_modified":"2026-04-23T20:35:18.737652+08:00","raw_data":"WikiEncrypted:0zvMywNpoUVtx5LPNkwYYfwlM/Ie9jv+tKyKKcv1AxRC9mVBYjtaMmDbjB4bi6R3DoFVGOgv6ErdxCywJprEc4/FOXSuinoLipOBEjS1SoLvIuIvglY6l/IjgeQW61Rm7d1YcswwpmQZIzWMvqp6xJswdQOA6I4OCWZyyoaPa/2lETrzZcBW9ssD16KyXFVp96WbqY4mZhPFxSQEDiT4cUJ/clUzKx+oT4S+pSOYSGl6/5YsuAOA3Rc1HhY9Ow5FK9FlKsVMaFmxyJU/KLHcwZslXi8yzFzIWcnJQnRmMQlz6Zzz6mhJvkfg/s1TIOTiz3ZX906YG6DBXgZ66UywONJCeYpSAmTL6PJmP5z+lNRhuD0CzfmDGhErgZhLtvoyUfFoVruQmx/x9Rgy1lFnhKmvH60xIEg1eXiVjrQ/yktlr5ioCPigx1TWbcHspNlPAbDuKqqBhQtNOIgnlpoGgyEogad7Il1hkawUxt/TaiS3Lh0SN+zWs028ewgjO9gdWMB7xsAiB1+L5jMFCCJP/mhbPEfqnGC/VyxfevmgulrRD5A2EPR0QF4D/XNbc/vqSGqnIgkBngdxV4ibQlp1HO+Av79lh88FpVteFuEf6bsCL5SSHLDhJ8seJm0aoD1e6f+DtutdT3mVHaMcrEbMYz3AaNJhbNq0bEuElJ/ANz3eN0m5PPDjjnZto+CQ9o7K0C3DeRqKx2P0uRlrzhuBWIwJMzcC944SPjxYEUXHfT4C4vryztUifweDRw3eil4eFCrCBpGf/6gsdtqLoTPs1uBBVkxVh2UFoypvq5jwW2g9IkwMSHN/sAbNIITH2bRVDR7Z/pJay1eQSTjF1pz3NWcM6kQpB22XVAiOhiWPjJRQuWDtpRh+kOxWUSLaNkXSsf98tkydtHAPkMfUhalyLYFO/66PWyHJDWdFPECqtsOy5mpoJdYD0O/20+xc08z7liVDDgIlSocFXHWG35upSCjW6JWCIiphXqsI3He/dWHuwvTBamA9XB7Q44hTbQY3lKiTRjkbjuNfX8cmxcX7Hq21kTW6OBbxTVR55HSW1znrOe12b0sUz6V4Sk1zI5OB","layer_level":1},{"id":"cc7a1f1b-c70e-4c61-bfbc-6dc408a12ff2","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"查询执行流程","description":"query-execution-flow","prompt":"创建查询执行流程的详细文档。解释从任务检查到执行完成的完整生命周期,包括查询状态检查、数据库事务处理和异常处理机制。详细说明check_and_execute_queries方法的工作原理,包括查询条件筛选、批量执行策略和错误隔离机制。文档化单个查询执行过程,包括CitationEngine的集成、异步调用模式和状态更新流程。提供执行流程的时序图、状态转换图和错误处理策略。包含性能监控指标和调试技巧。","parent_id":"7416db23-312f-478d-8883-2fc3c41ac2e8","order":1,"progress_status":"completed","dependent_files":"backend/app/workers/scheduler.py,backend/app/workers/citation_engine.py","gmt_create":"2026-04-22T18:57:25.383473+08:00","gmt_modified":"2026-04-22T19:11:29.353795+08:00","raw_data":"WikiEncrypted:l9Ho0Yh0r5bYH9QEePEhka2UMFH582eHsB+P+EaGE/r7Zj5gVUJmL6923rRlAt7h2uvHOVtef4s71D/S/eYpYYgI+wRFyPq+fQZYOCmVnMBRyypO5m8WqfyrsSGvviugw2fw2oH6ruNX2ul1LjPKkntbj4o015R9XwHG0oDdyJlipxqNUbh66IV2c2DO1besCA/q2yTeLh6EiHD+vYeG3HO5H+y8kykMbBuh9eydnmoXBTCsTlNBHH8gzmZWEBBSL7DETM0lYCiNr6WpRCoeZEo9ewLagGq1ammmMjcMg+7fO/xo+ZkkACRTnG2vnKh3if5fBjzo9tY4tGmtF7Fevx+yjLRfhpPsg8vSRZeaggRPgub5zBIulo/4qZhAvIVsyYuAQCqrwq6mBxAEjgWWrWjOThUEQOntbugUY0DitRui7XGp7tDjAIWw570xWzTTUWe0CMoHIPghfvhItcnYfjKK+fapnQTnz159jVJarLbBdjZT5JJfw9a+jlkVyF5RIKu3J03cjGFJeBf74DiMxFIMQkKzgL8jg5YiLQTisI4X0BBQrKHQvHzsD5+VzHGwCsz7IIfcdZuhkg3PIA4z4V7eZP9tOBUJdh7iE4fjhOk6fVDG5iZME72OxpBtFkmfrhwM52swaToCosj1eQ5m6V2GjsYY/+ZvaNf2aWn8vBJHI4IEO+Ua1mLHkPRT9bhDGS+Td2r1R2fmSEEvNQ+PTuhnRAyzRASTsjfWljzNWGNmcbCtClwcIuTSwPWLAoL+ANl303UlvxObHa9udiJcH3pZ86+A7iBLoCg6JxZQuCSqD0W6bPR/vozpiCvGs1TvMR5tx6AtfZGWw4JYl9wN5iPPaP8sPsz40D4PWkYIb4fIYY/X3r2iAnbjpV+/8+h3DQCWEdqRNnkZ4Do+XZGOi1yH7QaPOf/RN00+bcNtR36PnzENY47tg8VfPkbt47YTWHf+qvWfMFPwco2hLzXvNFmYN4dVMld5V+9mzCPJSIb+JOcDoVkoGuNq7aXnOVFdERnypgzvjryBt3W2LgPNlD3k6jR7pJAE1gKKrl00VSdDN9npu4QXyT49p+YMv9m8Jbf9xo1Jn2dqM/cJiKZi1FLR0clZHZ7nh7/7WxoEqbKnLWbboi/qyuTABO07nyQfmyXR/24bRp3AIRiM+7Bq8KL9ZFZs05JmFBtaRCAzWdBdM3TElVkfFOyZRZeKaBlk","layer_level":1},{"id":"fec685a0-c9bb-4048-baf4-40b56b2aa29c","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"集成测试","description":"integration-testing","prompt":"创建GEO项目集成测试的综合文档。详细说明API端到端测试的实现方法,包括FastAPI应用测试、数据库连接测试和外部服务集成测试。文档化测试环境的配置,包括测试数据库设置、异步客户端配置和依赖注入覆盖。说明如何测试完整的用户工作流,从认证到查询执行再到结果返回的端到端流程。提供数据库事务管理和测试数据隔离的策略。包含性能测试和负载测试的方法。","parent_id":"fc6f24c3-594e-4153-854f-19250834eeb1","order":1,"progress_status":"completed","dependent_files":"tests/conftest.py,backend/app/main.py,backend/app/database.py","gmt_create":"2026-04-22T18:57:25.616681+08:00","gmt_modified":"2026-04-22T19:12:37.820526+08:00","raw_data":"WikiEncrypted:0j4RRfWJQdenLQLpT+DwLTyjMVG5sQffpuJQoSG8tbOVCukW9eq2bqobYYACR3zRn/N/FP6n0t+ZzbrLBFIDPbiPv5CjhNbth11wsRap1Da2YyKifcvwg7uyuWtSILKRIkP8wIVHX2/TkxRFQi9/m+9Qz3xVjYcNeOD0G8UWxzsSDqYGS90xX9MVwW3N24hbwwcJUE/TAMETdbhwrekpr33ej8R6IT6aBvn7m0Y93BRItueF5HJcUtKCizqJqcsG+BIQ1fodLPAsUiqvYW5dwymM89ASYiZXVbCOJq19yL9K4p1ZW1LsAc2J+6D8SR9RJ//D4gGwBmMTqxyP9bgn5eNt3ILeVMXWLXI9oxaDrdVs2Y4dXNC4AK1j0pegZkiNREUo54kWHFqCuQ6dG8dZB7BmnFEIYjwEeU29KdF6i0dyUH3/h5QjdLfc0OV75zuHQPaMs1p5fn3vo6ubXz/uWtxEF/IoVhph+AyY0Gci8TxdouTw4RZOm9I6mo5m4Y+TBsxUb9RO0WCrD/U7tRgIZcrxFfkORsKadNWm60Q4SRJeImUzxIVCUGBjr4km9AMwVsl94KSXmkBCNOFppeijE4N4Dl0n+RekVA2NBOau2woOIr/GwJ7b2h0jV/5/3x5hihxUSqZJ/q4RJmV/8aP30XRdYwZ6qiLcaF6Ic8kwpaS+9cvzGsPMcUF4GCS6ZSZoq4tuGj1ZY/iFI0w6Wj7rJHWbeBhsF/fHqFm2ijbrvn2nz+lH8Gxb3FM+re81hKNVU3BaZ3fxOAldPPvUxDw9tttWR+oH3F/gRkqefOIsw95LNYf2vIq/HXfNygn6mUw4aYidP1SY8flPcCMl0mDm7y7W6l+DKUJuok11v6h2AM09f0VV9JnGBMgwCic1FjQmfF2FWdqlsEaB0X4+aPne0DgPyIivgCLEq1dyneDm4TxA3CEVODVKHIu4fxPjmDtwbXUvPQe5sWkG7AEkp1Vuul8T/GLjJc/DHgUFe51MPFk3+8i0FCKo0x0fS8Mqm3spHB5W1tKYAIyexOgSkHzqgRdgERCTqUW461c4lKbFO2WIJqWgt/seMgxHr02Yk/pvMU08AaMRC974SfB7kP0lEQ==","layer_level":1},{"id":"b10c2334-a850-471a-9851-a1c698e3a485","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"查询管理接口","description":"queries-api","prompt":"创建查询管理系统的详细API文档。记录查询任务的创建、读取、更新、删除和执行操作的完整流程。详细说明查询任务的数据模型、字段定义和验证规则。文档化查询任务的状态管理、调度机制和执行监控功能。包含查询参数配置、定时任务设置和批量操作接口。提供查询任务生命周期管理的最佳实践和错误处理策略。","parent_id":"dd12cc44-0c95-45d5-a726-e7b8bcf2531b","order":1,"progress_status":"completed","dependent_files":"backend/app/api/queries.py,backend/app/schemas/query.py,backend/app/models/query.py","gmt_create":"2026-04-22T18:57:37.836674+08:00","gmt_modified":"2026-04-23T20:33:57.631967+08:00","raw_data":"WikiEncrypted:pNRlLcrWPaMbqj3wxGubppFNc0/AzaZuAQDxEKkb9fgIpRlV367n+a2PWiIY8g+kSLtBeyylocxMvW4jGcb79BLGGixlb4O6TPBIJc7v8GgK1UB+nLdmTHx/nT1JfKtrcPOkDjQ/yPHvw+ykuXomGaA2hiHzzBxAe+PbZILYbxYpQjnTqh7v4SGaGQ9U1E2EOXJ0RFpwna+s0NYfvBk+YvwkzRYPMiKcr+F4pcD5xTUWKMHZO3NuijnbDIE02fzYXvZ/xDBLubLxQ9Byx2dgdWxmi+xwo+gspb4v/DcrNll6qDWKwDnHGuyOQzDJJ1vXg3AaxwF5c2JyyQLNPUM7YV2kwxweQA08sFkJHAJ2yA0z4XM/DvAPZRdQf54LPlDB1zuFh8c3Ih5WaEO7+aTJM4YSmIYUbqjIjbqsMea3+cY2bIHXq2kdRT7uLikCktC9Lakrz0fFKLoJLovY3S1UBP3i7tCt6cmtMlN5g5hyHGqIVTT/fqAVUAc7wSZumMs4rr4uyEizs6t12KohwD2SqiCePMC+kbUpHV0fEBuzGlnYqPbW0yjiiVQlmIe8wTDNiNNa88JmcXkQB1pYhkAYrBUvBUN4Nrdf7lGBTIbQkQwvVoHuFah0MmoLuRQtoBqISkKJ9PMN0EOofu4pUNKyxmmcY87ZVbUNrwkgbvahp01NhzlsOLdxEa7d/74gFI+6MOrPY/6TcJqttksCQEkme4HWeJgRl5S2bCy3hlU9qcZyk6WAGPjVZg4JXdq2UbvBokHzB7KA7421mWkKGQALuZcUApNvwsvF1ZHjVau13wxP02WvaOzt+udwhgw2PXdNi26RDqwLhRL+GIjkpNfVngOcLfk1ULiMS87NXS9kHRTdXxu5W6PqAzyrgByrL3G+nPHL+XmMw6ntgsJdmtYmNWV0VijOOQGxSJGQHtaif6ZhBP+ckr+OXJ4GlkTF3jvGcfRkfx/eox+BaoxWI06xuXbFfImPuNqqa6odgzQzWv4CkvAnjcFq7umhE9Iri8xw/PDlUzBnr4HGnUPnAVvdomeMasz/oiPVTaI0O6tO3+I=","layer_level":1},{"id":"0c1d3542-92cf-4796-8dba-82caf2f7b361","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"开发流程","description":"development-workflow","prompt":"创建GEO项目的开发流程文档。详细说明Git分支策略和工作流,包括feature分支、develop分支和release分支的管理。文档化代码审查流程,包括Pull Request模板、审查标准和合并要求。说明版本发布管理,包括语义化版本控制、变更日志维护和发布标签。提供持续集成/持续部署(CI/CD)配置说明。包含开发环境搭建和团队协作的最佳实践。","parent_id":"2148d7d6-25c4-497f-8894-c4eb7a0d2bd7","order":1,"progress_status":"completed","dependent_files":"docker-compose.yml,backend/Dockerfile,frontend/Dockerfile,backend/requirements.txt,frontend/package.json","gmt_create":"2026-04-22T18:57:39.374243+08:00","gmt_modified":"2026-04-22T19:13:23.08237+08:00","raw_data":"WikiEncrypted:F3QgleoEfoy16cQggYe9Czfqaqo1gAmvHQcnSrNK3eg3bg6SLp6Qtm0Hd5JwzGY3jDj+dSShAoxbjZ6YvxA0ahjJ7+4npTrro/p0OlyQfTnVZ5PYAZZMMXhJM063eUYiuQW88+rNBbc3mKbsAdZboYndBnd6/wybElFnP7TORa5qWxWMveWf6U7O01ocA+ZnrQqoPWB5xrRfSzD1p3yGFA3fzKobYoxAAA3xE1ALEY0vjLN7vajgFVllC2Z6uKZOE4Q6v+W+r18Pr7pLXGDJM7b6pEfFCqcEMw2fWzUAFYSUOjSyg7j9TjP6Lae0AWOmmxIDmJIIiaY0BCv/iOXgg4F6QSChC8bZFyWJATWTNhfmHAMU6tYpDXqDsfLmRpczznZ5nzTtcX+87Ndpqchh+NWU4y5OYvzEeMRCh3HcCUDs5KrOoCJgRneV8BzAxfk4gCwSo2t2D/FYg1XWGfb6hPdmWzePBCYhhIGeDQRyAdApe2Js8UhXUOD3TM7yzFPMX9q5U9ZBfejCp8TyW2thbRzOL4s5Fto9PpXg38HbnE59l0BmptA7z5bTKTp4DHA8d4NhgCeDbfNLfSJXbyYaD3RqsQt8szzbxB2Q8mvEi8iUZUARZR0lyq0oEw3cYkZRo7Dcb1n5az2OJRZwHmvRYAm7KceVqa92aKeBUlVrfA7nOuwsVH+cEXyzE8ApglbJiQfTJshljzVBvYPkz0BxhBcYrnRIjy9TlqfTs67adZyWc0wqEVZeZhuYHwwN5yID2imZ/nq7cqiZCbV1dtBUUM6ayhVX2h/cBSLpHKAwVHAg9bb9V+RxXgtSYWYKCHsAD0ymmu/Fzk3/QBvrrFiVqL4b/5CKqk6Qi2dh4pN4tZg3zJZDuyx6xzWSrsHeYGnLunZQWtHn2lr2vR6+RqzRTDiOC8SizuAjeZP72IbQf5Xyyf65hS6yls8xztLA9oDCNnSDgJ/RiNDOspfgUyj2xemyoNqf2eJ/kCDdo4/VXxMiKVfg3MHY+Vi4dVlRcSEJYLU4AYuGqtqVhTIi2ESpnPXgDPAIT+ZZPqg0hLIIPx+HNqo5qz0qqxvliLlcAhizNT4MG3p3dBRI2IkylW4gHg==","layer_level":1},{"id":"109a8fb1-6619-4bc7-8481-e28cc2127d24","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"生产环境部署","description":"production-deployment","prompt":"创建GEO项目生产环境部署的综合指南。详细说明生产环境的部署架构,包括Nginx反向代理配置、SSL证书管理和负载均衡设置。文档化环境变量的安全配置,包括数据库连接、Redis配置和API密钥管理。说明生产环境的性能优化策略,包括静态资源缓存、Gzip压缩和CDN集成。提供安全加固措施,包括防火墙配置、访问控制和数据加密。包含域名配置、DNS设置和HTTPS证书申请流程。提供部署后的验证步骤和性能基准测试方法。","parent_id":"803bfef4-3985-477e-a61c-915a246d0061","order":1,"progress_status":"completed","dependent_files":"docker-compose.yml,backend/Dockerfile,frontend/Dockerfile,backend/requirements.txt,frontend/package.json","gmt_create":"2026-04-22T18:57:40.355193+08:00","gmt_modified":"2026-04-22T19:13:58.697418+08:00","raw_data":"WikiEncrypted:1PcQ+NupkgQiLQ506NXlaizhNZeqS8C1INCZPnjb6ozpR9JAOMhzbAgtECu8k4VbH9zFlJ7iHctHtUva/hpzUaHUxVuG/rnK2RrcCUGVfbG0WKRpjG+EsQheC10ihbe51Rb+uXm+ciY+/SOxWBmrtK9m9jwSBQZQx2vXLOPvachfZTksEB+Ak0/Y5DF+vjL4WN+ym2SAYi7dW98iM9YCG0AepSeRm5DxENKRvtPR7m+w+vL7F2oISKi67pFiAATpFXSSgbkKjENZIgPfqc+pJfUREOrnHANiCx/oVaX2aOb68pluM8RGtAgyOfMp097D2Nt4PR/HN691JphbIyyeHPc82yGTjeuFPfg5XqFkhM4gvd9EdBLE3/6bh/MJhYjEwmN2RRhz7EYgLjSss8gEdDu+YLIEbHIaIC5fFS7gss/cJULC0/i3v4nnobE2Iqh3WdeIMAmynsin0sjO60LhvRmXlecODQ7+1EeQpMWju5LwTuVyX3dnr4CO4rJJxEBNYA4gaJuef2xo/ZXoun6cEIHjUq7qVNVOBZw2QtqBD2CyY3NULBP+nDD/NwjH/Gh98gl2Q0am/gLAHHoKcZfkSub1o1m1ZWTFgYn6MqyYv95NuqxR5+MSPb9C6/rwkYduPmovFsS2Alznry8TjsLdD5iSNz9MdRTR9iNV/A/TIIovgVogXlgCwnIz6EXZUgDnTeBTfTHxC+gwTrSKXUigRlIxEGksBJkzktpQA8y9mwnIfHgRDI4c8WEQRGEcKm2N3/ZPVOyBHSOHNpXK/BX8MCQqGoj0x6jusO9pJehw7KRprktlMbB0LmAuc5i0RYf9SnhsGs23W7ktzhS+uTjRB4kviSWZdHs+hgh1Pu0HsyBZxX7pemalNElQsWbvLwFNsJY1L1yjHNbBDYyXC7gZZqdb2l9GqKVgozQuK+qUUA0Vj2o6Cr4CxL01vBYMFpHALv8KnmAI2CuprX0c6PmsXV20FAFF8tIxoGfh7qcvquq/d4ONxZ5FZ1hJPYzi2xeCU0p8gFYEYYlbGMXdLCk0L5Tu0aDmTVkkrZlOHSIneYJDGZ1W/q+U6W18i48iBLvFBHD19jGHBgdzRuX551rbt4axStOcEGuyFrivbWK9R2zdcffHbiRtxe9wSFXxthLGe23JR42EF5PmZmMtlUhpV6alxUZNxguf+q/ouSz7Xn8+o6amnO60N57RyJjJO7O6+TgfHeroxL7CpABxkru/vXEJ5XTLqZBiECMMi4keQOqUbNZX8Ioct03e1YG7OgHtDSayZFtZf3kwN2ToVkxIRpLHTUHxSWLZu0YiAI2MONU=","layer_level":1},{"id":"4d5ac6d7-8812-414b-b8df-68574cc36d7d","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"配置定制","description":"configuration-customization","prompt":"创建GEO项目配置定制的综合文档。详细说明环境变量配置管理,包括数据库连接配置、AI平台API密钥管理和Redis缓存配置。文档化功能开关的实现机制,包括动态配置加载、运行时功能启用/禁用和配置热更新。说明性能调优参数的配置方法,包括数据库连接池大小、异步任务并发数和缓存策略参数。提供前端主题定制指南,包括Tailwind CSS配置、颜色方案定制和响应式断点调整。包含生产环境配置最佳实践和安全配置建议。","parent_id":"b2bb2e3c-5661-497c-97dd-15bf6ee8b7d4","order":1,"progress_status":"completed","dependent_files":"backend/app/config.py,backend/alembic.ini,frontend/tailwind.config.ts,frontend/next.config.mjs","gmt_create":"2026-04-22T18:57:48.684725+08:00","gmt_modified":"2026-04-22T19:14:17.843426+08:00","raw_data":"WikiEncrypted:aC5ZtUyEKPSxjzg//aVllKOp167MIMMk/Juev/hVoGY4+Uz0exYT+x+CbyScHHV/Mh1WUG25XsdoZThZQEtO0sLOn9+hGddmRIK1DWfKa/hxxPvnViNvXvltvNYiLNOIbKgkBxtXovEsADGNyhZh4ndOp+a/upcB9NJ4f0miwJacx2Kc2MyCkDCgUM/gJEjyoB9tRPRJVPFRvprzmaiPXJ1K8jd+KuXwrM12ogUA9iPZOtJJQTeEXQVIItOZYzY5bzAZ/mnRyVIB11vegQ+E6Lzm7D1Nza2QOZ2893Bzu61StECZsNlfecc+xEh82aNHrbFip7Fg2I3E3fqBs5EgoNXO5Wnvkcd9fHCw9vI9kMJucTIPcthOyWAFiP56zu6Hzknqy5N0o2gSAJQdhzzEvIUUKeeGDZKSY2EjFsH531gWa+Q9m0FsYWFcErqBlQXG8K06rnNNeMwR71GloOifAK0ySuik/7BjJ7xIR7HF8FOfSaOhI011z3GaEBxZsMfPc13v0joKHld4p4PRBXAfExWLlfuM6cmB/77U4xdBrHVyMcS8NPKuT+TQCTzjr2uUKzxUcjbz+yGbjVFGKMaVzKH0UQfLKeSDUnb1JNBrQWR0PFAuZsPZt730dAHdElNx9MenV8/GY+XPklTXdGMUtflT6CKf3fLy6ppMVbMDph2Ov+1Xh3z35Y5Mz3rufJasyOE0rZQMNsUu3wHtnjYprxfzvmpP9En5z4KoGEa/282c8xoLp+n3+etuGCN2aor1BSrro/ZpPTduyQtqj2WdfXDnZo1In/RRAh0TwqPze8Cd244OFfKDDAEICSSoZl0S/2l15QyTbqDNVnRzLndJswfAi2yfaVOEkBHvZuDQZXmmlf4VGsJYihVUwG8Y8bvegjLxgcD3LFGNKjzuKP1eAYLcotF84HRaFwNG3hz8Mv8puFMKyrHVKIC3UxzBVaialQqdO3oFRcrLdcSIx1JlY2qhK3BsrUtj0OLURUs0dBnCQS4ndq4NTLSQECFIifA9l7GSPXyOkGkp0+H5QCfjOl7L/3EJ2o+lTisAZggIZSZ57Ig3WxOGp4tgBh18ubr0TRNi0u/VccTbFyT97irQVq+9KNBKwPZZazaWvJEuqNSsdX3WGjh17VTbbZgmTkAwLyuCf+nyKkGUkq6MtRYwX17XkQuhceFpBmYkoxlfSWr4odGaspQ3c/AJ5zFNMigymGGpxOynWRWD5Abo/3R67eqZ9rZbmCqQbF0fkFPxdi1prJr87dubXtG1Zkj8AE/ZGXYjwas/l8NeDYxLFeir/ic+yR2tcU34lFAY/B86IHf+EBSbBYigErIEadb9gw81","layer_level":1},{"id":"7c2ac186-ec90-400a-ac1d-b3b7ca2f01d5","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"后端系统架构","description":"backend-architecture","prompt":"为GEO后端系统创建全面的架构文档。详细描述基于FastAPI的后端架构设计,包括应用配置、中间件设置、路由组织和生命周期管理。解释数据库连接、ORM配置和异步处理机制。文档化认证系统的实现,包括JWT令牌管理、权限控制和用户会话处理。说明API接口设计原则、错误处理机制和响应格式规范。包含系统监控、日志记录和性能优化策略。提供架构决策的技术背景和权衡考虑。","order":2,"progress_status":"completed","dependent_files":"backend/app/main.py,backend/app/database.py,backend/app/config.py,backend/app/api/,backend/app/models/,backend/app/workers/","gmt_create":"2026-04-22T18:56:47.08233+08:00","gmt_modified":"2026-04-22T18:59:21.004588+08:00","raw_data":"WikiEncrypted:N3UbzwGjCC3xD6BrTM0cq8Y9ccVoDb9n1FwE8c3MNy0X5y4Ej4ZnP3KnXAR2aRWtzrMaJkrDRdDMkztKRYWc3Wk1Jzwnfsgqt59so9pKRU5JZY61Wzqd2PzzDU1e10OntPwETdHfAXsLLggvksYCugHgi1fhnyRiDR3C7ABv3U/j9Z+xFbLaU1X2+FqXtTpJMe0gZJ2yDe8YIV05/f1NdFiyt5NDWdtbC4Ib9Y2H52fXoe2qIveG8dUmBzkwbHVu2VM4E9bT7go9y9+pSOyoRwO8iQIgfY0dKsQcvDtHpO5T2plEfrmFKSlwMCiiivasNoz+7ylsz8JGo5nnlfBqTtNbVZX+TrC9x539RAxL6rEZvRxbFucfobivfqV9UKh//2yYFcZ/44GbNjqNQxfF5WXJxxR5cl6crLZO089slohFwSj4xFVRarnzEA+wA45v8N+WhlaCWCr9D3DeX84ssYvMnAzwz5wUApwFIB0+dzG6CyO1yNQOBdcUhAFEHAZDzWi4UMgnwXCHBvsXx9keqXfSQYdPjZC06gegy0IfbeW2XdHsznPqPyE0TNk7R2EJ7Xm+Ky8I65Fbs56g/2k/ETmTt8ja8RfGpRbQpjW231dxIdRNdTNH2W7VkpjSFNJ2KD74a+UFY5G8eSFAvJWuEMLVCQB69C+TO9ML3zzNA5YE6/MzhYsbd5Vz6YyvCBTjMSVufoTPK3n1k/ioOdDzRFEZc8mucNTJBrEu9OGgb0gUFQFXMEsabcloQaO6ZbOBLefSgrAdlSolWRG7Bu4XyCzXOYvqrGKNPsTZQOTbVkOP9Mg6xRN/8jkyY8z/5TEh3lWnKh8ZkLlumG4QfdLnF2LHVp0IX+d/5HvT3GBtoXN+zJ3hMVEVumiVT7qCJz1afiTQZhPERVAirDX6cZ51CSo1FkRWS55AvnICqVpP+fpNLl8zLWvuuOLeA6Ab3x/0rI6b0LNf/UAqeSW64LGHL0YDWwB+G2c5oNp+bYuOVfgmngSUmDdDFHHL0k/KEoU9VN/+5f6KypjM2MYUKMLz9pwbX0qvUZadQCg/thD3v31zZ8ZroTFTEa6tAyAfqojuUXtJ/SI2l+VlpvP6dNjUfsudg8Hr7AQQescm0CN0tOYTOJZ0P+2/RmPTHviifKR/54LVuaTLEJGhd+3K5IhDTvIOhayZi6E4ARpakMmWdVfsGPv6ETkH819SOX3alS7vHgV/auGWsJcRLJinONhxTppcAf3MFf2nq8AGZR91LDCZPwV0hO8YTxygvxX/+uNJhqe5oMGvUjJvTo6xoBkb3JATSdHKXM+lEG2lbnbFjUN+bVRcAH+Qw5FdSl1cHbm/QJnwQ32GeGmAZmQ2TTHE+tdQgZ6yA5dDsvSJGTsAPieIDKEvIql2j+9eoR1X2j1mD0T1D4APKUfgD0zkNE9QeQ=="},{"id":"159f2ccf-71b7-4d1b-a4c4-c15b23a4126e","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"API接口设计","description":"api-design","prompt":"为GEO API接口设计创建详细的规范文档。解释RESTful API设计原则和路由组织结构,包括URL命名规范、HTTP方法使用和状态码标准。详细说明API版本控制策略和路由前缀管理。文档化请求和响应数据模型,包括Pydantic模型定义、字段验证和序列化规则。解释错误处理机制,包括异常类型分类、错误响应格式和HTTP状态码映射。说明API文档生成和测试策略。包含认证和授权在API层的实现,包括权限检查和访问控制。提供API使用示例和最佳实践指南。","parent_id":"7c2ac186-ec90-400a-ac1d-b3b7ca2f01d5","order":2,"progress_status":"completed","dependent_files":"backend/app/api/auth.py,backend/app/api/queries.py,backend/app/api/citations.py,backend/app/api/reports.py","gmt_create":"2026-04-22T18:57:02.317509+08:00","gmt_modified":"2026-04-22T19:15:14.078939+08:00","raw_data":"WikiEncrypted:xKp6XrvgQ6yDy/qZb6DBAyzRhY9oY9wND++XWs8abaIu3G2LITgI+Z0UQBWYGKhuTqBsuTOr5OLyKixlekyR1Xfq7usrLYQyUqykz50fvTC/eHiVp24qJjGIE/yM/QXCeZCQ0Io9avqxwyMLsy7oz+0kRVW2WjLzRO6OrvbiUY+8yPMkSPi3UCtyM0GVLTpD/1yhEPFlJimDIuMsn1U/6MxjS0vcd+yEDjCBtrAoR40VIxrMz5v+dKD/pjfzoR1p6GEjf7b6zpzZGPhEtFmhzIahThZIdAaGShFz2YepbNwjns9s+2XJPvMdDYb5mBTcQCjoCHeUfqpQ5eRpjJ47qGFAfFw7lpv7GfOixRgEasUkVhJaX2fS+R0bGg3mmJFfg8tK9XXCm0OvNdgj+aJ6EUKT7GWXDkWLJd4NWEHKvqO9jfXu7YBJxM5tfR1i4e7CPz16fSaCPJtKsI+HgIoTf1JQ+3TrBqGncHko/5j2BznPg08EvIvKnECTrZEH1ATf3+Dpz7cY5x5f+D+oBDxG88V899fkfZSrXbY4YZJnhO691mRZPnKUgr3TsGO4kK0/eZw19HvuCyKxuqWlpHvV2nWGiFCyQpLul9lskV53bxNE6LCdF4LpQgsnxp3NRkXRo9kqVcTFEVZX1D65nknWMQHMOr91wEbFu5y7eHBY/M1mlvT+FpX/uzM6NvEAUkyKHsIpLihbh/obM0dUOwFr/y/hUOLfs5gw3aMosXT7+uwJRXkzxJlNzCyzWUQoMQbw19Mq53uhogOLGeVQNV9+lYZlsF9DEbUg7pWX1HOTZw0qj0G50JKHtiM0mGIwmRxZy7HDNhqrMGXboadds7LRAL8up6y1uZya4V4Y43X61XVoJJrERnU6caJROOJ+2I5yEbNYOvo/g+dDZf6DLrj/5IPInHUF/rwxMPX3V17obui48Yk9OOgLp3s7TEAU+t97lkEPo58h2oDARfsbxrnrVd0I9z2/IJSBouFoAA5+wGUVU3BH0Wdc9bwTyjJg6t+iiz5Z14RRB6hnBI45qD3U9a5fIJ1mWWGl2mBaOfvJck5hTbq7v+Au4iOMprm6m9SIq8C9D5w/PtHslYGeBDUYeIOWciDfxj90/WlNjcdIpE8qX8PqRFKdnwDCBOD0xewCH5Cw+MxNEuc6RRDsFu6vhFjjYe/vtb6bNc674kCJn5eQOGFAo6+v5wfkkZhG1S1q5EY8GJf+H3HgtucPikTjpKAbpBkkiorIBJ4n6Gdi9Jof2lYe1Ina6yJPsnNyd1MyQgdpEg7sStrvevt6IaMoeIe0vQ+WPecPhqsIm9X4wS4nI7Knd7q8WUsBQfphwlTzUb0igehWxKagmMc8N3x64Q==","layer_level":1},{"id":"9cc59a5a-f597-4707-b994-b6c49514d553","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"页面组件设计","description":"page-components","prompt":"创建页面组件设计的综合文档。详细说明仪表板、查询管理、引用数据、报告导出和设置页面的组件结构和实现。文档化页面布局设计、导航结构和用户体验流程。解释页面级数据获取策略、状态管理和错误边界处理。说明页面间的导航逻辑、路由参数传递和页面生命周期管理。包含页面性能优化、懒加载策略和SEO配置。提供页面组件的开发规范和最佳实践。","parent_id":"d907a8eb-795c-4060-9cdd-50d31cf39be3","order":2,"progress_status":"completed","dependent_files":"frontend/app/(dashboard)/dashboard/page.tsx,frontend/app/(dashboard)/dashboard/queries/page.tsx,frontend/app/(dashboard)/dashboard/citations/page.tsx,frontend/app/(dashboard)/dashboard/reports/page.tsx,frontend/app/(dashboard)/queries/page.tsx,frontend/app/(dashboard)/citations/page.tsx,frontend/app/(dashboard)/reports/page.tsx,frontend/app/(dashboard)/settings/page.tsx,frontend/app/(auth)/login/page.tsx,frontend/app/(auth)/register/page.tsx","gmt_create":"2026-04-22T18:57:04.216604+08:00","gmt_modified":"2026-04-23T15:19:43.818179+08:00","raw_data":"WikiEncrypted:5oI5y1yTFbg14yVSXHYDGFeITEbIkjmdES7qr/P4na8TrPHqKZDCV0OwvONxgczey0MsZEE95T/q1IqTn1MDXDe+zweBCSZSlefgNsHwrtPEnyqFrV2NhO5nKlcD6tYwGnW5Ag8vX/svtjfAjl//gRYZD89hOQGnlYrcSU5a6FC1LQaaD4KqNgrn7yYxshfLveO4k610B0mb5BrOdyTpLLBcuNmEgY9/GKvdoyt0cfpZPwN5J+wPoYjAnGjm9LDIkL9L02r9Lvvq1mhN88A7yKU49c6lU6S75IzcT+OFjTd7OXXastuPBLJRb1A0sFMKjZVshweginUNg6fhc3vFQ08Hthoizv1Pjm4qNnloa7P3w/rnuQrvCJk3Nt1PWn+ouHeenTb9bsV/KwF6BGJ4HGDSDyFcd0YmY4CDfW5aSBFP1QYneJUBxux4dxgw1GbBsa6R2o+cDCB4DqSA14RqNvsI4r16PlAraoYSaQRYj8NQzY5dRbzpEnhmyPsBmgzcW1gLo067XcLiF0DJvlouezCyJW+Y9YA0fmJslQSYvcMhcI8mYdAfGDi1EoXoUiQYMnvlYq8J8ktBwLbIskG3FgeWvmoAFZE08E9APByPtLjDcHHan03Nwy7CPZqb6FtXLeHH6H4TK+WRnxyWWUCCGwQxVYXq0SDxaUvHuhZ4XUr7+Q1U42rlW6cND/0kiOhqZxe5qp/7PBom2IrcPdORh4lVv3RCQrIDCkHcBzCV+1WIwFeaxUaSDNJMmZ500JhDl+ECx+6dgbMAMTRPh+SxHxLd/OJMI9dD9eWQZMj4RwDxTbqlVp8cpoAEGPNvmweo2JApNndlNo1gDMJ++de+I8cKsyCdEsPfQ8ikJHY3R/UaPh/mPp8pQaKIBBP/nvMsT8jYMtdv59ejwQy6+/9dplr/mqdQCkRA4B/maZQ57aFmnsw8HZM9ukvo0Ni9KpUFM7iFAVdZy3NGVf8DX4J0jwAjd643HXH9I6+6dP2Jfs7ezsKz1T5yAHvocFPqxtbC3b6WrwrjPWf32N1a/qM1RiZdPyUNGE5ij+CTm9PUzcQxUcatfkjdDGnwRIAJMmmrtYVTBvCP+xUKuAp2UmXU9xfTYxlU6rdp5LyGQS9dHP0x7KBg+yOWNzECNEzMiCgE7gOqv+X75WA7D/sSBMaO52H6f4qtJovvnkwq4r67A/ByroGz4ctZ/wSVqTHti+gzlXIxgHKWr8VVq1HUFUCSRdZH3Q8PaR08vmQcapIQHpDRW13nUf7saKZh3N6R63lREJu04Ie+fQ8i7VUsNE4QclcrUsdj7eUxv5xtz7xrCEBDZooPT3RW8OM08MJ2Qe9sU6bdCvHTPE21OkEYFD1tWzWH7149QZPhOzkXIQ7qGdKQlmRvyOnd4uL20k58I3p/q9ktqLxBCy5s9Ac6PYODpXPLAelkYzhV3TcJAzxphaGjCmR8goNGJJWsqw3FOOCjGqWliL0JmW23Xo4emXDMUU50N9Ru8dM6NBIs6o8Hy3YcM2dj4t5RwlVejQhCn9gwtm742VYEdCEYKq+8FJtp49Xm01KPOtgTyFN0lF+HOQG6LCrIBY8cXRQtkck1aTvxD+KmKoVxp09guujaDutV+eyhyb5dYSytjq2ptL1FsYHLS14Xa+GW6DEvniGGnCzP2LTzntbqIVzx3J6F7gquTfsiDTTPkIijyYxWvkSseJc=","layer_level":1},{"id":"f70f5d9b-d7c7-4dc6-b36a-5f4508e6acaa","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"系统架构","description":"system-architecture","prompt":"为GEO项目创建系统架构文档。描述整体的分层架构设计,包括表现层(Next.js前端)、业务逻辑层(FastAPI后端)、数据访问层(SQLAlchemy ORM)和基础设施层(Docker容器)。详细说明核心组件之间的交互关系,如前端通过API与后端通信、后端通过工作器调用AI平台、数据库存储业务数据等。解释数据流向和处理流程,从用户请求到AI平台查询再到结果返回的完整链路。介绍关键的设计模式,如适配器模式用于AI平台集成、依赖注入用于服务管理等。提供系统拓扑图和组件关系图,帮助开发者理解系统的整体结构和各部分职责。","parent_id":"1bb55e12-24c4-42cb-8f59-ddc303460d45","order":2,"progress_status":"completed","dependent_files":"backend/app/main.py,backend/app/database.py,docker-compose.yml,backend/app/workers/scheduler.py","gmt_create":"2026-04-22T18:57:13.329904+08:00","gmt_modified":"2026-04-22T19:15:17.452724+08:00","raw_data":"WikiEncrypted:gWB8HBj+8+/15rQhXgtMjCy7qJxJBEw3w9EAqc5Otte14+SfcEK3DSbmZRhW2TgD6BlsxDXHpLcSijck/Nymh09xxwlFe9hXY5fsIsj1IZW9egIbof/vmRQ/HkxJSvNy7WDeHEuuU7TDae+7kls5UELL0/oUUiCC4fjizzoaOlqMuOvW/DImO8fA0xbQ2wAt6L3bqB1pcGWvnB10d6EKKhQYmUj8xv/2M3cUBtDMkUdyKbAuduBIInt+jZnOGnXKcr1w3W66u8elz0iqgWhMCsMFd54QokMhn1Uyguz3NcIfEVH6IlKil0ufINdb2d/QV+9aukLvJ4Mq4YDlUjQ2iJ8oxAYYUb8eIjBnsLHPfBnMUyXVAo0tbyNB7wUmRb/L1VR7ipOMMKd9mEohzKGpsTxHpM8my7x8Ryc9N1guO/H766qiiNij1HNCu4rWVW12oeTTjAoEKdLzLyn59Fc4QjYVkS/I+r/lwRtMNN0OGjWXGXea+HUaIHwW1088PW3eZj3FlyGEsTiYb6ysJAWanY2qoIhASm31o8s9DekhdxTRbWeBCNzGN2ufTYGM9ygKNDHF5dCbVW0/Vtc6FC/TDiflhIaDY44Gvuu84O4l7SRBl0jKM8uCFHOgx/NzDlnUdNFaSOdjUBxQ7vVyi0Q5X6P4H/ERPzJQvOa0gmXW7S1ry0P4/CRjOCzq0Afw+mAf2j4PHM/4MWFkvrFkycbEkHWoWnPY+DWYI00TVSdTWjj4n4l9wbj1XDhXavLdg00qHVjv0dTq1ghcZKv3C04T5MfvVQjMXCKPQaK0KzwZDfXydWnlyLPgM8t95lTETMkjjEpIMtiv2w1gJda4ChFrJq27oPmVlEoVzGPuuk2B4YN3z6A5y3ehJpejis1/EuBjd0vXHhwghZeUv8mMD4smRPUMA8GcEeKVs9TQgBHqVuuVDdEAQfE7w1ILarmq3trYAuc+LH1KMUyPD0aZEbhKZdMRkFYWLhfyYeuazm9SfO1BqtEuTVoAXdLD86TCQNmxxTZPgU9OB9JluopAMt1oszBwKK/88UqwBqgUZle95RTKVR6QPn7zAGZaDbfsbYvsGUfNBSH08o6nnraxB0Vpj+r6WaoZLCcxhqSWoTp60YlMt7BDsla0Lt8r6D+a89AtCqZOHLJbrEx6T4wsmiykEi1uC/9XhtcsTHuytq/rHeDWR/bTToB+mGjBipoGscvIFMgUJonYCOjLDyBPGpeWispYZV21bIJQtFIYv06NKYU/IV9ZISLel9AttowTEXv/Y/U1xRtmaTp3BgGI4iRdwXYMJICv7Jyr5kYd2CrLJQPzEBdkJi7+q3WNdTCWBPd3B3hL/tTL2lFNDOc1sqMga78PcdWWHQfheORW9OfH3cDRiq85LJziojysfwkQVqHY7niPkDyphAwn9F2xZZl9ZfahAaU07CgK26wyavgkYOAU0dlWI6WrAKE2gQOzOxBL","layer_level":1},{"id":"816a2805-76c9-4f32-a3cf-96428208081e","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"数据模型","description":"data-models","prompt":"创建GEO项目数据模型文档。详细说明SQLAlchemy ORM模型的实现,包括模型类定义、字段映射和关系配置。文档化每个模型的属性、方法和业务逻辑。解释模型之间的关系映射,包括级联操作和外键约束。说明模型的序列化、反序列化和数据验证机制。包含模型的生命周期管理、事件钩子和自定义行为。提供模型使用示例和最佳实践指南。","parent_id":"243a1a45-d31f-405e-a3b9-694d2fe617d5","order":2,"progress_status":"completed","dependent_files":"backend/app/models/user.py,backend/app/models/query.py,backend/app/models/citation_record.py,backend/app/models/query_task.py,backend/app/models/subscription.py,backend/app/models/__init__.py","gmt_create":"2026-04-22T18:57:14.161024+08:00","gmt_modified":"2026-04-23T15:21:46.785144+08:00","raw_data":"WikiEncrypted:Zb5TNaG1u/mRrgPr+sDyCr47uD+4y/GruMCqF9C9nxStxKZi2OWvk4ViC2NJmWUO/Jxugi7iel+AeINiHAz9c7erlmOh78DEPvZI5zcQaIYzm9l0e6yLGbMS64gON4GYqx4TUizeLGAIntFG405vTATENZMylmwR0jTbWx2uP/KlAPch72o8TGREvPTy7FGikY773VIwNZq0MXKYxjbwvld1ADWYjtxMoKmZ7pixx5LeZM3O+bfisD7UTqLobS2VvR5Ic2ynsAkEEzef+Rh5O85TXra/uluSuAOST9W65TENzfEzwHe+CNAQmUp47/vG6d7I14WPEipc0/aKbh43AhJkclnRjpR0bYFPJrW/HuN6chk1uhxzBK9sKpOUOLZ5MffdIttkTAOz4Ny5MxnUwt0zj4hDsVOevpasy4FZ/3pVx07fb7SlIDC18p+OUYQIk9JqBxZmgeMslhOBSkmRTAwqir6PN/GuLEeeC0mPlAMNhsvDrklfLlJmLY8MuSQHqteqYJryoZ1cp1yeqxATnDfeigUr8eSSaFqZc5S/AlgSIrvr+7XJWk/Oz0wKPLRXNUcG9yDweys2pdDb/hV5hiTmLYjgvYvnDLMMjrFgR6Fogz3U5ItD0xLC3lt09GJfm8jhS9E4AJd36iPN2WMeHsM0ctdvzYB/MKtWIIrBkWuRD7CZeGJepiGO/GJprp9HK9m+APjZQ4oc5d43tgDModdepglAEgNklY7IzUAPW0Qls3DhfUUHq/Zuf5AxAfUAAg1JOW2qEQWV+btkeoRPEiHjZXFDLGsC226d9yUlnYcTkFOeVbL2gomt13MPt6c4EQ3y4BSoG1CYqO0q6IgkX6a4g9QE7OKjdE3RX8rNGixxNJzfx3oeGtcne/lDvhO9/U5SlpNgbkkemAIPu+eZw1zMpknFdRwUdwOwgyVNxR/tt9AEktJ2gcaxRGfG3xTSa0JHoniO9otA8VI+Paw/il8qAI4Z1kf2w+L8LavGt05hchhlzWcrGbBjXF/VkCoYxFvM6JX9FafcLjoT3FtVTSorVysHodJyR1nHB1TL6/SH9v5IZMlZeQ6/Gm87g4SquVaVgvEBMuFPA6c7BBhWUqGw48UIBxfB3Ri4l8HYfRBiqrPSIuldaD+xTVL8F5XsVhczS4JXDnX3RLtvjOuBZRcejVO0ubg+syCfBhf+6CtYOyDTTQDGgwdiNg0MjJnmjy5TMmMdynOGSm2oF6wS+tUuWG8lMMBtredaLHdyVb455+OY2oQ5hJZGo7eyzchNabr+Xous+Ve/4cM2FOoHdQ==","layer_level":1},{"id":"64cbb894-755f-47b5-854e-c26c7821e9b2","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"文心平台集成","description":"wenxin-platform-integration","prompt":"创建文心平台集成的详细文档。详细说明文心平台适配器的实现,包括API调用封装和HTTP请求处理。文档化请求参数构建,包括关键词处理、请求头设置和认证机制。解释响应解析逻辑,包括JSON数据提取、错误码处理和异常情况处理。说明配置管理机制,包括API密钥管理、请求超时设置和重试配置。提供文心平台API调用的具体示例和错误处理方案。包含安全注意事项和最佳实践建议。","parent_id":"7e66719b-4a8a-484d-889d-10fdc76788bb","order":2,"progress_status":"completed","dependent_files":"backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-22T18:57:14.59287+08:00","gmt_modified":"2026-04-23T20:31:50.506814+08:00","raw_data":"WikiEncrypted:2Sm2Oxxfu6PsmMr2pZflRJ0uQ9gYQuPnIUHmJotOVM3YPmWq0HSDTQGvIE8WdDGtHlaemWXQzS6Ra6mdo6lkRL4Slh8EfpKUg4wigWPN0r3GaSXHkkAIs0wgET5OjWqYvTL1QooFFzxPhX1ZTdHcTpcp7CVvRNSVGiTu93qzZloeLF1EwOxsLvQ8hFf9SuWGjeOUYDGh7ktNwrMbeUIV32VkQlqsqQ1HqoKoqjAh2d6Xou7+peaCdxzJOhMf14e/vNiC12p6PfM2oyBY8gR9sMPKd1zgEepWsc+ePSazz3RO+zy9fbc5pJTLZdtswhL0xGhZKuYgYlctRId70DLeyiJHlvEQzEE8KB7QJqULfiB4lgMO84A+DhPeslR4F9Edbm+5P11/ycz4y8kzZQwnt5F4iIOC7HOPRSdGTYTxO53cEcqSfBI/wH7enb6Zt49h8mK4UyYW0fUuKBE7dPAjxC6IxbdabWdu8WefhxUR1oFx6BkdGWLLmj9ZOLMReTwnsJdK5xmoA8wQvV8MMlYiCgBuPj7mYce5s5hpglFxtJdEeDq6P2Mtusvj9uegGeFmCJSn1nbBhJr2r+WxLk/WpDO5lwhggW6V/wdvqcmRvaGHCFspVdzbC2qx104c8i+2wum6kMLHVTGAM9kTy4M5vHtvBELFl/qfldVQ8BK9hUvE9jdUbNQkoiBwFpPt2NNFYvz94CAxqbObxiZ7C1VhKWPH2AMX330wwjiHjh0eshve8e+pjBsDeM4/nTh3PH0P2XNUsomNEDxCQpXG7qngeiMXljTWmyGsLk56SzHFqfCgQX8fLlxv3PzSHXpCkAdymDxnJlcuK6WZIMj0AjQydGVSLgItD0boSI0YfvyDXhrO57OoFuwUU5Enq0do/w+quy8Qt0Qc9Q0afMg0GVUksiDfURVugssB75pqSqdNSrJy3wxM+kSBndgaiKYIakZ1idHkzpiGUshjyAr3V8/N1vW7VGyY2wnoquEclltaRAO6V+O8ymywFWL+/RrPEn4DKy8ul6EmHuryCQh1dfEPk5ZAgYg1K9ecbb2dLwTfMgXIhD/ar0ZfRO5OdwADW376","layer_level":1},{"id":"412f8cb5-54c1-4f32-8966-fa0e5e75bbca","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"性能优化","description":"performance-optimization","prompt":"创建性能优化的详细文档。解释调度系统的性能瓶颈识别和优化策略,包括并发控制、资源管理和内存优化。详细说明异步任务的并发限制、数据库连接池配置和事件循环优化。文档化调度频率调优、批量处理策略和缓存机制。提供性能监控指标、基准测试方法和性能分析工具使用指南。包含实际的性能优化案例、配置参数调整和故障排查技巧。说明如何在高负载情况下保持系统的稳定性和响应性。","parent_id":"7416db23-312f-478d-8883-2fc3c41ac2e8","order":2,"progress_status":"completed","dependent_files":"backend/app/workers/scheduler.py","gmt_create":"2026-04-22T18:57:25.383759+08:00","gmt_modified":"2026-04-22T19:16:37.81704+08:00","raw_data":"WikiEncrypted:9uOBpMbLX4DyZqW4us3Wm3Q7klXxmeD+JMMoGiSO2oNryWBo1gw9kLkawvxQIW9CASZSiyAjiA/zeT5DwD4S8PDqEsVNE73i6DrCAWvPET3MMPQasVfJTaLge2tk6gbYlx3R6JKZcUoi06jS7okoLDzJAFru3F6zguqySliKZSG/00oFVcDHXlZZc0L7hiq11k1jOD8uBl6n35lAvst/AgFv9MUzrhf43XDwtHiMAxjCAkwKnrWOow44Lwzy5fG3nWKZLSHE3/CUmZ17U3GmEqfG43ai1yloAkMou+sTRIk73sRdXPDze0HhNdNfNXTaOHTxW0gT2TwKGHgG9Jt0Y+1qWq4Nxj/oJTP/hztBLy5SEPndXXqeZTkBaesRTr0adQv49fH0QoFV6D6dxlEOodMiFhvvYd1rvR+HwbQbqU3W5UDVnKfPlMXHsz0a9NPu4aGgk5yevh/s0AP/v2R8mgz3N41lETHxk6Q71f35L04S7u7P6MlorIwKzkeijhFf8sPrChMYX7dwf8dWba+Nwm6fgb+9AbSZ4VczhQInnbiv+GUKiFnezNVSHUUXqTCvRIuhF52jqnOqjPei/1oeS7xAMmB67o3v2so8T17xg94F9FoEl2XuuwA+RFDarVZKACDTPxjt70OXdAoxoERTZ3ivU93OANsuuWx1x0HgFdBj0q6seNC8cbySc3ZuQBWGu1YWMmyIYGL5l6L7CNSmkkl9/pkb1TSfkyM+Hk3VLXy8VIvtgHxGX2OU8yX1nX0DCGS9Yt3dK17lAVH2XF2mo39noQPG2nxjOc+lO/O9cL/CC1Bqzd51YLHapcRLPPbuaMT4ljyLvQ3GMvKHB6c0sjdaKjykN96LhXpO5PAqs3N2edkVKVMC6lg5fTBMZi6B8r4rup3M9CPDs4ehmVYTtnZpt5zKxyXP8QfTO1FfDyNQRpbXj8TyLOwwqEFvZPQlV7Iupj3lpi6crQhtpXBtU9M+vjP31rOrdFpBHXCckE4T9QryVWvQuNDjsc1+tYKLgF6S8ixDQFCHEAfzctdMM3iiLCeBy1szBZEZTE+OS0ERSbgqusmZBkz3ouKp6suUgXLJp3Kystu+dAVWhA6BAD2WHT76h+Hbazixj8F2qAoxmUb+P8Z7u0grbWJksg6u","layer_level":1},{"id":"40ac97e8-7ef0-4198-82d7-d2e332be9d34","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"测试最佳实践","description":"test-best-practices","prompt":"创建GEO项目测试最佳实践的指导文档。详细说明测试代码的编写规范,包括命名约定、测试结构和注释标准。文档化测试覆盖率的要求和测量方法,包括行覆盖率、分支覆盖率和功能覆盖率。说明持续集成配置,包括GitHub Actions或类似CI/CD工具的设置。提供测试调试技巧,包括pytest调试选项、日志配置和错误排查方法。包含测试环境管理、测试数据管理和测试报告生成的实践指南。","parent_id":"fc6f24c3-594e-4153-854f-19250834eeb1","order":2,"progress_status":"completed","dependent_files":"tests/conftest.py,.pytest_cache/,backend/app/config.py","gmt_create":"2026-04-22T18:57:25.616954+08:00","gmt_modified":"2026-04-22T19:17:48.81542+08:00","raw_data":"WikiEncrypted:3lrOgsvw7LaJXRS/Bz00iEsb4RzJUAxxpmqaBblS/51b52WVRQtf4YGBQ9MC2MYcYNyKxRGZljd03HKmm078aoRU+suxjG3HIqwkvM6ruyPxwlLdBEn6ogbrhm8eOKuGWjiEso+PrOqSXW0boT4qGE+/L4MkPiyeOB9YnDB49/ByvDHsjeesTQqGwpa9FmIQtVqpqDZA3Sx+x8TB+MSqT5PMZ4egRgCW1ODcidZrTriWvseFNQDFLzo8g2H/HF5CFLcVsZVK+kWI7b7oWLmNlIKz2SyVJuYqvCblPzw+/773Wv4RVHYdK/pxISCon/L1KjPyfZjddr5sDjJO7rNFbBshPxUIQhtXnnAEqLOpzZwHm2a0bA3vSR42bZZoSAY0v3aZxXQ5IvxNT/aNAmiFzd4SkTlz0okDXnBsArnOUpLLRfjLhxt5ueRUi9Dl2edsdycd6XznT6/oAUHTf05zhhKC6JR1OsKiFQyoo0il7LYjDxXJM0dZycDlENYwZ3Bd/82Qr+7VNmgpLdnB/7z9DPG9iou6TIpztKrdSRYqWBcl75qs2L/R2Sy6MOyfSwALTRUi5udf8sNlsHOk5y2qY0h7vd1GzYwtxKQ63ypJLL/8fAcPKmH3FCwKvrN3zuEu0Meyq+y2v8eYeXNozeOa2zum6fI5sw7hnzX9Jqy7fyQD2yBFqyylQ1ZW3nwFd9liZLnWfm7zbLDlqSgzGYGxvNIe0X2rhwsthMZTLEXOZVDW1/NqHg2E9qXOfg7XhQRHKZz6Wu8eZ6MGyCvq6ft2SJI2vltHD0M4somneHGSMo4jKY8rMeGl7qkW1V7aaurBnh0xp6cOJ25IdbN4VEDYm1Oj5nlM4wnEQzWiVyEqA+3oU2k2k9Plm/xs6g846/lBJxHL9ztsKmm0BnrUFR1ttgTVRAFvHpfkmSgLGGB/9824DJpxXMiWnExCaZzWbFYPhXnDF6Kh3SB6P3NyVwVdC9/pkf4/UQ4Em3rvbVuWICjGSScoDtOu5MrHDaUSbtN/XtqOptA1ApGbnTSKxOm0KAck4ApFPdk6aRLdC4eRf9XWsWUaOFjkqAoU0Kp035pHaGrCrx4KmgoKBNFNbS55CA==","layer_level":1},{"id":"41a414d2-e13a-497c-8a03-212624dbf5fe","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"引用数据接口","description":"citations-api","prompt":"创建引用数据查询和分析的完整API文档。详细记录引用数据的查询接口、统计分析功能和上下文提取机制。说明引用检测结果的数据结构、置信度评分和品牌识别算法。文档化引用趋势分析、平台对比和竞争品牌识别的API端点。包含数据过滤、排序和分页查询的参数说明。提供引用数据可视化和报告生成功能的接口使用指南。","parent_id":"dd12cc44-0c95-45d5-a726-e7b8bcf2531b","order":2,"progress_status":"completed","dependent_files":"backend/app/api/citations.py,backend/app/schemas/citation.py,backend/app/models/citation_record.py","gmt_create":"2026-04-22T18:57:37.836961+08:00","gmt_modified":"2026-04-22T19:18:18.055339+08:00","raw_data":"WikiEncrypted:qByx+WzXalKNnda2aYUs+Mi+kQm14b3+m7dy1helFRbYWzECOnPEzHl0ufCZlQvKjQqSxHIwqppPXSdvXYc/8Z7buvJqBV/Q/faiP/SBsAH3RrfF2Ppti6QanNvcAtBLcojqJkmfYWFej1OYdagzBcSAu0xIIA7qBG1LwkdNG8crxSwebM8is42SnI+aRvlbF4UdAqHHPdfUvnzs7zIODnildIoR60AvLFeNEWO4prQkFyS16p1YH96SousrFgBu2YZZYrNOOhDXyrRoW3TE6990oaIi3Xe0B7jFtC4pce8JamwzT8B33FAJ6utCOBMUkFKq6l0kD5rN2owZaBtGc4Q66Xcb62y3arqrvxcgE1ox1nAp2D9pNqRy3W1ePW2fWZk4+3co4z2+ANQ1JO8q5eAFI6Q6zG7hM4rvNlL07iD+hZeqd5+vGw0KmjkN4VMqJC5ypFf5UCF4qHgB6TS9ToQUAWk6HWlwBR1DVpCcK1kyGcunn6EiivJyjJLRYUXI66AmajxIzRHtyhxBnA5Q4hZNgr40jHMoUbWHmiQTQr7Ca4/VDS2V5FWlm6K1fN8xWRIUCI3VtH0A/wG+QBnJmF5YeqDZ37Nx9vkiaO+hutXsGHsjwj8+IZO/gpn6UT6QpOGaeqGl37HW+lMZSRUqFFaLg7jxlzSa3IliOyZI7N6xjFFFTrLV1ShVsDcWDg4eXL2IjJ7QfXjmD0vq5mH8mkZK6HbhpNH5kFXDuMYWPIHAXUk39ttNvut9r22RLpkXYWtxE7XoqXW+k+Edmt2eNvZImq/e7mUwa82Cae86WiRtz7B7TJeOf96EvN6EQBg8E8KT5Ckd1exHhFtySkw3tYfChBZfD75zY7tUcZcC+McO1Kf0ORqTZtnNjVnot7wirysiS6WKQ3O2L0CeBUUV7DlmFd8xAgJ8YhtHJKulJ2B0yCCswfb+PR6u9GKFVK1EcspZe5BsT22vlhQyAJxlqiAi9xRk+XaCWoUT5ymT+KMOXdLoB4EvD2ftgXy5GMxZIK2q1QtLAYEu7nOBsq2aNAg9i9IsVJ6OlCN7VMzDinzkoC1IAWKxKE67ZeLq/VfPmCqLKGl0z1JfkfC/kU8KFA==","layer_level":1},{"id":"2f7fa0ab-cd3d-4f45-a1c1-389d5a0c2561","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"开发工具","description":"development-tools","prompt":"创建GEO项目开发工具使用文档。详细说明IDE配置和推荐插件,包括VS Code配置、Python和TypeScript扩展。文档化调试工具的使用方法,包括断点调试、日志分析和性能分析。说明开发辅助工具,如API测试工具、数据库管理工具和Docker容器管理。提供命令行工具和脚本的使用指南。包含开发环境的优化配置和故障排查方法。","parent_id":"2148d7d6-25c4-497f-8894-c4eb7a0d2bd7","order":2,"progress_status":"completed","dependent_files":"frontend/tsconfig.json,frontend/tailwind.config.ts,backend/requirements.txt,frontend/.eslintrc.json","gmt_create":"2026-04-22T18:57:39.374817+08:00","gmt_modified":"2026-04-22T19:17:43.353691+08:00","raw_data":"WikiEncrypted:F3QgleoEfoy16cQggYe9CzRj7niAsR4WPU/tuSJ2vBrZ49vjzLlsqusYQAR0/FVC/Mfa58hrglY/tUSn8LBYDGZlVr/UyLd9/U09SEPTjzLPzOXWOffceGYhaM8E9Cx6c+FHZRQ0fYUDQXxWM6dQF6WQbUmiZISlUpgtOkT5wX0oc/n1YeDUxEpgiCWnOdIBH6SDoRDdGUFrWdqF66bEdplp0Yy3VYVBKKwUy1XVXtLbdv1T5/0TVJO7EtkHdoheIwKCPIYHsaJqBv4U8cMNegSJ1Ti8bsgUakd6FM/X0ybfTay+IyTIqYXj/dS0tWMm22zjLqYmw59+s8gJ7AlgwXhqYhM5Ycwh/PNrDHHFbgQdt45DjAaMWjrjXrbIvM+kXuSiwxW0dEvQtouckPTVohVcRWEPbg2o02/8Y5DzmxpceOC7KgybfaaCQeJHbg9C91itVc+0NvorhivJt105EYs1ndSOla9hoFppywKIbIM61cvqgHjsJF5DrN1pneGmTtYxijl3J/QpJHn5QuIBR8ugoHdJ3EVjUR38vQReVBeDxI/VMe8k/l3EI/Zk7paXexGeTrJmmnZI1I6WbPN1TPS4nLFZWwkA5ZA7wMkdHiHdnt/FZGccFyq8X9Okog2xv6uqH6Kwz3hseWlrSygNPzDr0cFj2EQqDH7+xZDEkAvTuFLHn+HzUfBv0vfZFa/FRg+5/agC9EcMHM+75jEvtSeeHXHOLpuuFcyOcZ0IQP99QdzSEsLaISCINs5SKkzKAMQnJv4PEDo/vFAKBulCSqjXmLeyhcKmCGqafN7IMWUWF5pmZuXe7wL1F6n+x3+RvScmsWND74hQhn0/Sn8kpFHJ5xV/5t0GDZxWybDFRRuFC8oImKyB+6h8CstsERuFeiIjMv2TS5lz8+eb1/yCUkGO9X5mUpJZXfZ+0vu2SkEN3WR92tM5Di/78rDlulwZ4oykT8NzYMTzpX4WlgUfazNKLyIhSoFZcWUyOFcU8IWCoOdrBFn5CSpe0VXbOlP3pAU1Lz6Y016JUHo1t1YE9xU/m7OTxhMexA8jCoSswgGT+Cjs9u+KP1ji2RSyZHQ6","layer_level":1},{"id":"2713d5c6-c6b0-4a38-83f6-56940c2bf695","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"监控与日志管理","description":"monitoring-logging","prompt":"创建GEO项目监控与日志管理的完整方案。说明应用健康检查的实现,包括服务可用性监控、响应时间监控和错误率统计。文档化日志收集和管理策略,包括结构化日志格式、日志轮转和存储策略。详细解释错误追踪机制,包括异常捕获、堆栈跟踪和告警通知。提供性能监控指标,包括CPU使用率、内存占用、数据库连接数和API响应时间。说明监控工具的选择和配置,如Prometheus、Grafana或云监控服务。包含日志分析和故障诊断的最佳实践。","parent_id":"803bfef4-3985-477e-a61c-915a246d0061","order":2,"progress_status":"completed","dependent_files":"docker-compose.yml,backend/app/main.py,frontend/app/layout.tsx","gmt_create":"2026-04-22T18:57:40.355514+08:00","gmt_modified":"2026-04-22T19:18:41.773778+08:00","raw_data":"WikiEncrypted:HL3VqGjXq8A3aGeLxAjVPg+lnGgkT5PNghnzp51sgLDjuJwvzPZp6KDp64sXTqk/PvlUYRCEe6pgM8WKdtus6ThN6y8bzS650UmrWXRgW48k0tbm2PEPd8NIqpzEYwRwyuzLECVz8rV+mgvy+OHzvrt+wEQeT7z1uljirnxeLZWJjIrFBr8Q1T8WQ9InM3Ttnvm7OYO+YH2Mqi6IC38bW7w4WGqApS+Byn7/ZrJhR3B/XWh91FPwq0GRUJ9cqrNuIcYtnWAfVIHWOe3iET8Jw+Un5x7ZRepcJlINGIIMBE2hO7UsbC/K3z8rkz7mx6uoPTPpxkKkgoQQ1OAsShE/wpHpRYSOJEnV26GFo4bXBTk6xJYw7daKnJVIYDSqSrtJQI4yPlTR0OtJescXSLobznoVSBo+L+PU/nRvotp5KzX0SUpbkqNzGychqcBuJhpS1eaEP0cTBjvjC4MJ5Lsye51X6aOdYYC7tBWHxtgBO93tkpcIRlHk8Dfmzh8nKcD0rPHYGnaeFpzXgGH7ZfabAwxiMhej6OXWsfnbHGg4gheWhXfokxCMKkFnzrsYcuFtB0BqUeadjP5LArbJJGeyVEZovmPxtzQ5z/ayxJs+oyc0oH2SMXCFtIQv2h03ZSOCkohVRs2oTJnMI2p41dY59B5qiSOp+0qwxTWL9NnpqM2gjlLZhcgwF//R7ag4ndECWejInOcA9Ayvx6cPAuH6uEoFTcUOCLaOZ/u9T8890S5KHS7PcNM8dEewoFviz/mRiernAhd08l7a9lR6zck842Ywi5H8+fuuHyt64Pwco/+52MhD01pkK+HWSR0EqPc8URlkOKjQSW0jd8E/9ow54aZA0+1Vto3d+Lqi/tAOlhRF34rIJgTEN3f/udCEVycON9KNtssYzZVNPdvTkvzPYdUHIcnYmz3jbQhnYnrYvuaWNvO0cPISLZI9szxLP8IhmUc9xT4U3OvoRfFka8TABGicEUAF6vpH6H2rCqnWdBydaTpRTa3VAR7QJ+M0aPlzeKov93eljMa/djYoQo+w8Rm3A9vGmGXJKfWdZobh+fQgc38Z/0yRCHnIPnY8o6CDBfwbANfjDRpjyVkqWq1cuqYNnMul/jpzDS9vMSbMnefISRuF0kH8XS5C7pIB+WFn1vxeYFBYED7ZI4FD9pxxS6GWGcYOXEoFcqtR+lEiMdj0Q09jo1nEuMKJbPQre/RG08O0boFCzF9KOSnS0UA09/82vFQyQZKHNwpz7OkZZa2cX5X1L/pdsDlDRoIdp2lzyAEOidStaIWywEj11EYVNbG7sK562p96Sr15ueIXP0s=","layer_level":1},{"id":"c8a468af-2982-4d9c-82c0-313b5d2ee89c","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"第三方集成","description":"third-party-integration","prompt":"创建GEO项目第三方集成的详细指南。说明新AI平台接入的完整流程,包括适配器接口实现、平台认证配置和查询逻辑适配。详细介绍新数据库支持的集成方法,包括SQLAlchemy模型扩展、迁移脚本编写和连接配置。文档化新认证方式的集成步骤,包括OAuth提供商配置、JWT令牌处理和权限系统扩展。提供插件系统的使用指南,包括插件注册机制、生命周期管理和错误处理。包含具体的集成示例和常见问题解决方案。","parent_id":"b2bb2e3c-5661-497c-97dd-15bf6ee8b7d4","order":2,"progress_status":"completed","dependent_files":"backend/app/workers/platforms/base.py,backend/app/workers/platforms/kimi.py,backend/app/workers/platforms/wenxin.py,backend/app/services/auth.py","gmt_create":"2026-04-22T18:57:48.68499+08:00","gmt_modified":"2026-04-22T19:19:17.361215+08:00","raw_data":"WikiEncrypted:WxCGFGSl9zR6IDeUdkqKNACFcGLyx5HNn0UQzHtkOJVoVN2BLrMtPbbNkfhYYzEQGaeK3o4fBODff6YTXKxAV6HYhCHjmdXJqBaBsEPBB205lzDAllfBZL4/6ljz+/HZSgaWAxPECD1m2GUFvjlKHTSXEb0x5iVOg9R3VDjYQgKl1SF3S/AuJj7QBbGiwmkyPrqO8+NXDlKH7pI3G6me5ulZrK6M85KSH8nVAnqY/Mvjc6UGQJBwS1QyKJVzzK2JwKGhQSSLemxD887b22bSe7q1IEDRYcpqkbfyICB0zF1Gg1h/cAfQgzjiG0+MQiC5CF3QwkFteFbN4KZDEjCTcbIR+HqI+yCs8Wue/MwdoTYQQKpR9FyClONZn5T/UqHQaVT8SemYF0QC/kawyEZFH5Tkj/6RwS+taTWw1fx2QC69xQlW04ManahzsBDwfz2W4RkufM3ZfW8HAN7SorY7oYr1Vam2p2u/93jzHmi7PO/Y6VphQNACzUlfRYsPALVBkiqpN4TIiicrjOvhgATUxqpku2MrAtbXTkiuiiQBamK/XrF4JNlh+79VGoHKWniah1nvo+dzl7jll4j0woKwWKIzmfPXLS68HekW9h5BH9SUeuyAEW/pvnGAUw8Od3CgsEmap86k42Tg9pRZC/sT9bCWUbjO6ijJ9IPAgWE6bkLCu68L2BD1yKE3gfLg0hJmELn79lHaFCUc5jlRdJ4HEsalAFGS62beLGkude98NvSY5pQoO9jbTj3Da8t6Yj8p97WtE73vmWW9Pu/YyAtxJH7Cdwvv9mbvLYVnLzUWGwsaiaXmDJiqfSHiOrHQNyonHQa8N/LYrbB8qBSUmLyBUhgI1YfYMa+zNfCaeHvRLlmVZpui5MOegWen1Z61WhPc6WoFYHyFAdgS7k21cC9jVay3u87SjSzooFT3MJjN+yMIjrQ5U+tVFbiBQK7IGPLFHRmvFBrBwSFVBI5VnCxn4piz7VBp7mm3e6N3CJUKShQWQT9tmUIRXLmmzsKTit/kRAUrycFjixIK8Hm4kSwtVBREbX3opXE6clXKGVB0bpSDUzB8Ae7wOPE8Gqo/ewy3kh2mdNnvI3+MfOOgPc+Ovqu3KGFBH/MYKl2xIUGdYtEHfHRCIFFVVknX8+Q+tfbkmo/Tw+kJfq67IQO6VT1WjP/q1G3rOhp0Ah5h1wmxVfdIaHSUOT03yQTBm/tqCXlgUW7rZbTc2wF0zdUUWleQoq9pc14c0F2SNFCSaQNLhxvfeC2aH8O9nuZi+kVb+GVV4vWcxcz/7dfTkXpogDwy6uqVHySe/TAn04uWlCabYSrA3ahnl0VpBmalBU1dtaTG5apgcCJ9PULyHWKf+iW0vle9pOVgZQ4oUv0vXxDpZQkO1SOBCfKG20swUEItxbAxIVoMowR52maIRnCKh3g18NF3JUZX2ptDny7A2gmsYWU=","layer_level":1},{"id":"d907a8eb-795c-4060-9cdd-50d31cf39be3","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"前端系统架构","description":"frontend-architecture","prompt":"创建GEO前端系统的架构文档。详细说明基于Next.js 14的应用架构设计,包括App Router的页面组织、服务器组件和客户端组件的混合使用模式。文档化认证系统的前端实现,包括NextAuth.js集成、会话管理和路由保护机制。解释UI组件库的设计理念、组件复用策略和样式系统配置。说明数据获取策略、状态管理和错误处理机制。包含响应式设计、可访问性支持和性能优化方案。提供前端开发的最佳实践和代码组织规范。","order":3,"progress_status":"completed","dependent_files":"frontend/app/layout.tsx,frontend/components/,frontend/lib/api.ts,frontend/lib/auth.ts,frontend/next.config.mjs,frontend/tailwind.config.ts","gmt_create":"2026-04-22T18:56:47.082624+08:00","gmt_modified":"2026-04-22T18:59:54.994275+08:00","raw_data":"WikiEncrypted:rJ/rIw0gVau8jPGqKFBAsMR2XDSFypkKHZQ6YBOgiEA0UOTwucBLEBMXoN0zA9Bs5lWPUuoWW2QeM8S5V6dxWDHhuxV1hyEK1ZWidiLWXQ0Ty3myBMpAD2c6K4k+WBXTzbB/LSiT+eBspY4JDrFCERTHesMlZxmLkXoBxHhs1tNBUepc5vLakFhznlq0LnlxeL4rgh3sn4K3X8SUOtyfPLTTiHiYFX1izFe8OECB2IMK18WRZ6wEf8jE07MjvB84altM8K2LDZJuJzb9sVMHScnXdK5tj0h0e6umXrJaGJBmvoTYNrHRS8X5aG6wxHFk2++zjoVcgl0sn/xqIsLYfqvsbh5vyhZbve/rnSnstsC+sb3Y37uzU9GHpU8FurekIf2vv+ay2i8fI8+VjXnE+QwD5CCdilkDU/9HH3AB7DhbDIwtq4BCfsOfZ43Y2qHzi2YQIjEXtFPC1VmHGRHr8xER65CLZAA8mbMjuchuGtp3BACUF1qd4eAqJ/FgbGOAK91hIqJ5RCKNCK94pbyxdxHrk0LQZ5Rf4snzR04i3q8QgjkGVcb5g567ADjq1S0CD6cj02MH90QJKtQxxq3S77qC5VvUfuqb6qSVzyBIHgjg5XOY4yyA7M2hklmuVlFPgpiCV+xb2G0p91QgoWdUnfUvJ1jeyMVi7sTqisb6pzW4v+DOhMfQ9U1z47f5h41KqZU+i+xLwpeOZYvm0UNtd49SW9uxOloegNujRtGRYoooiPmjed11BdUxZfPR4zr4ZOqMq4zjmz5Enx6kM+9X8hZOPnVQ5CnZpK/WSKI32z3A9cFhmwVRLL2c8w/4XKbLREhUc7DBaViUi8oFpl9P987cnlqqptMKQmCIZ0tOKbkICKr7JfWGIAsxT81oc8qS9qUIeXlBpE5JdUQp1Ie1EoaX5wxX22DELkU75cKmIBHu+67dOrltjMRSKY3ZBmjzGuNgpHMZ1/9X8mFHbppwoTxTgbfBeYCWbgKe7rOhN5mO0h9XscRtoFe1djDYATYo7A09YiS7rQ2wP+FA0m7wEbLvAesiRZYI8ZDzVOgGqdkP7olIYqRcgjkJ3ZEYVOP/YwXprUfvhj40s5uHRQgN1DkVo4GaV9bQFpSHYyuVvJxLpzL4PIa1TC6wa8n9zFrUoUr+93RnWxM9L4G2oS4S54a+tIpxJWsI5jaKT05KwrFYm9u3iOaXy2gZsoxdtiHRE/Esu3FvYkFxZpCgJXBU0L5PL5lgpfZGzQxP6184e3cD5E7zrBWnFpTCdgoFMXl1q6lBqJQVQcpijAleq0R2Amj2pwxLHge4ttMUkLwDlNK5xdQgith4x1GgzvXgndvlRn+E0U5SY5IpqM88QcfH0T3V7T0CEYhYBCSGHolS/i2X7yPjY7JlhGmEgHh7D0ZXq/+GRLa6y+jz0mq+BjNauuMGqTkhaZbR/M85ZNbyJ+s="},{"id":"9eee7fab-6cd9-4ef3-9415-2f8137f1d199","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"数据模型设计","description":"data-models","prompt":"为GEO数据模型创建全面的设计文档。详细解释SQLAlchemy ORM模型定义,包括类结构设计、字段类型选择和关系映射。文档化用户模型(User),包括用户属性、权限字段和关联关系。说明查询模型(Query)的设计,包括查询参数、执行状态和时间戳字段。解释引用记录模型(CitationRecord),包括品牌信息、置信度评分和上下文数据。详细描述查询任务模型(QueryTask),包括调度状态、执行历史和错误信息。包含订阅模型(Subscription)的设计和用途。提供模型间关系图、索引策略和性能优化建议。说明数据验证规则和业务约束。","parent_id":"7c2ac186-ec90-400a-ac1d-b3b7ca2f01d5","order":3,"progress_status":"completed","dependent_files":"backend/app/models/user.py,backend/app/models/query.py,backend/app/models/citation_record.py,backend/app/models/query_task.py,backend/app/models/subscription.py","gmt_create":"2026-04-22T18:57:02.317816+08:00","gmt_modified":"2026-04-22T19:19:19.281909+08:00","raw_data":"WikiEncrypted:klcgW2PbPxJambbKMzvFtzxL0nPpsuPMPxr5hj83lS7k/WfePQWgQNKbEysjyVqFS8lXlJL069Py2sSf8yXxHJzOE+5qAqcKClz711a5h2iXkF0al3mIdEvPGsZtmu7Tz91D+nYN6P20/dGDD6jbfsmIRXLEv3fpccmaTd5XoNj9Y/QT7a0xg+LkG6A8bzQONV8mQsFJZMj512PXdrzG8bSiiAdWa7PEbotJVKJRklAdLNFr4FCsLXLsdS/G2RlAo97zi5J4mpx26Q7SGM1kx14TxsQYatCIUYP+iZ14NDPPPp8tQ+HGPLEonVbYiRiktzJo8Iaqbcsh59qHBoGZBndXEwalDBXzD3sIbYrhxlOU509HDe43hiq+M5eC2SEeTfGdYZ412t/aAJFPEfq3dRl0wa6Oiw4t4rox0s/f+rCg9Sr5yX/vsXrADGwowbhqt/EdTudfsdha7MXN3Kn9e9TckQ+HOqdgqW3+RnY3B08ijVPZchn/Y7XZvx8GujUHSuM3x7EDAXegqkPwkfR+hl4yb4BuuY5AC17g3hvn9yDvBN3m/Ky7mJ4Q9qvXfFaUqDE/FxwPWjugAnVOgAmWns1elVLUS/2nol2BUAuyt1w821y7+N79TkQ07amTWILYvO7I/5v6hStaHk5+ftwpaWSLofuk3Nwbuab8ULq6lj/Tz3uWkEg5/nIIYGVDSN2y9JKgkNta0J9Y4C25DpKnPb2HPfbnD/315IEyxKddS9DpOHC92uT3Ad5v/X0LgVsefqUUep4D2mVUeevDE2o9NuUqYyWYu16AL2UaQOWH86Q97+Accmt37g5580pjdVyzcgVL6Lat1P4W42Nk0vOIncIdM8Bt+iWUIOjmIWDK6nUytRrluJ6RAGeewol6Eb8eMy65WkJ8SsDWFj936G3imq6uoKEsmn9kHznKIfsvt/p4IAv+IbkliuuV7/VNQdN4jgfgKyRp8b4aQd35Qrv1ypuTdf2HQS3w/t3nb8hBriaZZc8a93LekZYaGpvrws/aq3ESXMU+csJKfWhEGhH4VT4cjy6j+jHgihUuUWhO1X/Kpm8iseqreG85CZeU9woTd/nPIayXO14kUEfNVL1ih3p7GtsFGDYpr4EcPU7JpPp61gLhfdpHydKVDLW4eaaCuTR4REP2Vs2BxiwN8GCpJcCbpPeF52n9qB1DE3uIVBITabqC0jiIHeVfb8caysKpddelqqLNn4GGL7BeUFq4RKhlVTmCGuBRWABBDEhDRHXsScje6Av8bOxE/QFVlZmFE8EkDM/WhG9hB5BQ+8u4pKPxsL3/n7xyMyrBnO2n+nTEGscgwlEnpxknYpBTrtZQgU5YB8KRGG+VnvSlbM95vPmdiXS5y7JM9ftKUbdxgnxOVrM2ydbK+5IGvaNB27szvHBbvqtxiY8lXfLRhMYcQEIcD0AM4Xl1qH90xIrHF3lHogdPgwXR/UWGRDWDXKVUEXGRLQHTlRTCJ2oRBGig4FvIztUbBVqouwtJBqoGXoMET7JbuNkxdHs7pfsL8sV5FksVAyNxvV7rRG5QAMaIvUMdDT+XAhtcrNagCHcb53sPxuz9ldlj9adP1H+FxOw7","layer_level":1},{"id":"d9e45b2a-6443-4a9b-8ed3-4c3c04773772","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"UI组件库","description":"ui-component-library","prompt":"创建UI组件库的详细文档。说明基于Radix UI的组件设计原则、可访问性和一致性保证。文档化基础UI组件的功能特性、属性配置和使用示例。解释组件的样式定制、主题支持和响应式行为。说明组件组合模式、状态管理和事件处理机制。包含组件的无障碍支持、键盘导航和屏幕阅读器兼容性。提供组件使用规范、最佳实践和自定义扩展指南。","parent_id":"d907a8eb-795c-4060-9cdd-50d31cf39be3","order":3,"progress_status":"completed","dependent_files":"frontend/components/ui/button.tsx,frontend/components/ui/input.tsx,frontend/components/ui/select.tsx,frontend/components/ui/dialog.tsx,frontend/components/ui/table.tsx,frontend/components/ui/card.tsx,frontend/components/ui/tabs.tsx,frontend/components/ui/dropdown-menu.tsx","gmt_create":"2026-04-22T18:57:04.216865+08:00","gmt_modified":"2026-04-23T15:22:23.573963+08:00","raw_data":"WikiEncrypted:mOhGqVhKXtp0S+QeVzok74WypWJ7klGHRH+KdUSnimLTYfyBjBDRPAzXT+gcOXfQVvcrNlnW0hq9eH7zZFCqkZsBgmYKEU+paWYmItwEmPFSm8j97/vwvs9ugP1aTV0WKgu1SgAg9UjbHTpC/aH+MMWl8IEcuuqWfI5XbGaUR87WXcEDmdrb3wUoUJRDu/cGjCf/fvmakwSGbuyVnUxAKC0b89qWigFSx7MqlY8I3hXqAtSNiskE28duoh2j488f5d1qN4KsTvxvRe26wRYqlD4qzi7WQGBZQUoeoyVRA8PrJFhxeH6clcVYO0kStx160hPPrlpF93ul/lDmdVwrTZfpWh5RRY5u02+lOo2Vcl73yz1ixYzt/OXYaenA0jUTFVdPJ2OcTZGDQV7xMOPFPX3iFNKxuHY9aks8ARFEUs2BtyH+KlyKfPdKqDAlklqIVzP4MH2E6uDcvYMSORu7S1T+53+R9br9Cfu1PSZkuVdmHNqUuKSLA7pMI1QiVYXtwk2GYmRGYUH7geeQddC61wxpCG1rXcVzBMSS8LxtR3SSj/9VQ0v2YyrqKzRh44BKjm+ojKbz8rNcf69UZ5Fu4dU5kGqXy/XWbFbSmoUmrWXnZ2zWPhMIgHAIsTe/iX6JC5Q3L70XVbXk4S/ffk/sKKtdV7XrQVmVPhSquUc7x1RcfMyLVgxyoFEOwwk9LfQIPE9n16lNCvDWX3UuK2TDcqDbwJQ/FMmjaZDilRQFs+8MA5I/UUtC5CyzoOiLRXvPqQQiqXjBs6jefxc0cpGAJwUkaISOvQum6WtKWK3y1CphRMH2hkB4bF7NgyOm8z/0JXMSpcPR8nMUY4M8pW9MZYQEL76sWcQAD/oiWlgAUccgiRPnCiU0Xz7/MplIj0jTRwXXzc8arUGle1DmiJFEVmztGZOQsIGDqSwKGG5XHEdLyKe2hWHqBGRWkqZrsBqS8KrFUWk5lefvdDZvi8ci+S4wdZQX8IDx0siYw5cfdMlilWuaptf6qf/qEVaIO5DX+MMGPmGBz7jnyaQfo2QWlpybbe/uLTvhZTe75uY9Revd+DPo+zgmDUmGj4hSliiZx0smUxDq2wMZmKLx3x7N8m1jdGgqT+LVQAhdUcmE1Qx3W7e51K9wB4PN3L8k8bDewzE25kuU6a7QpDLdn5lSa8n0E0Yug9cp3wgllhZVFVmyjVr/oC3c0I5z3elvtrYub9jPeRtR4AmW7w2RPcUt/8f7j8aMH/1lUBQk+GL6OhXAEnzmav2Q2smdsQqWS4cVj/FV1lrfoV+peL4fo5CxYMv/ZJSvbJaFSpBOPzf09qJBxUptVeosUyAUDv7YsJdUo02ZE8B3ZXZGcpKGKSRiBeLQKjuqkck1rBeJK4PnEEXZ5vtz2ONe8tddj5qna0a3","layer_level":1},{"id":"178b681f-d013-44b7-aef8-dee7ca8c22a9","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"核心功能","description":"core-features","prompt":"为GEO项目创建核心功能概览文档。详细介绍GEO平台的主要功能模块,包括用户认证与权限管理、智能查询任务管理、品牌引用检测引擎、多AI平台数据集成、数据分析与可视化、报告导出等。解释每个功能模块的核心价值和使用场景,如查询任务的定时执行、引用检测的置信度评分、趋势图表的数据可视化等。说明功能模块之间的协作关系和数据流转。提供典型使用流程和操作示例,帮助用户快速理解如何使用各项功能。面向不同角色用户提供功能介绍,如管理员的系统管理、研究人员的查询分析等。","parent_id":"1bb55e12-24c4-42cb-8f59-ddc303460d45","order":3,"progress_status":"completed","dependent_files":"backend/app/api/queries.py,backend/app/api/citations.py,backend/app/workers/citation_engine.py,frontend/app/(dashboard)/dashboard/page.tsx","gmt_create":"2026-04-22T18:57:13.330097+08:00","gmt_modified":"2026-04-22T19:20:37.649775+08:00","raw_data":"WikiEncrypted:luoNp8LvFa7zGThvIT9T4gfD6KbzJyTAydbcRfVv0b4BXBAF9G/unmbHb0x4cm5f5JJeO16NqGe5C5EiggSB7moDpXZy5USSfpQ0OUKuil4F/RTioDPMtSUudIqxEjBd5ipsj1OYjuKwvCZDE5FVOSWKxyx9ABPAcj2ixa32ZPlrgZPKHD2EYG0qdFR1nrcOheMbdmmK/1DGPMM99yCcIRnhsKb5QMmqrZbFGo/SPCSXi/Ykr/zd7+VtVKLrPmeZHpaF0yafvwU0Sk0I8ne8YmfwUGC+cOZoDCI+UsE8IukB5R7bnolQRLXvVZdnHXG3b2DA0X4DxManWdKVUyJxI0KTcxcdI8DrpJB05TyoF/regQH6cLt9xm5r6oC5exXEvwhmfMoZVqZ2jp/7LVs83k3vKksFtqXA19YrxFliE+fS/7xxjhqFqC8gfV8eLWpHyIKgVobBj98SpzX6tRTXknjSX2kDpfKG1ECCqYBxGl+EcY3ofgMb9dgxDxdOaB1JU4iP8j0YMHe0vASK6GweE5UjId3SQsH4Qeng09dL1TY2uNr/6ZVhraG1xTMRFHeZNdCZtAWnUddTk6fiDJmF3zxyL7Wvgdc5vmSbfg0rFxTdxZEiGFHJoEQatTaUtv+NOJGQtnOuYzrhs6G59N5Bu3hnsT2Umn6jFryaWwluQaphllqim1VwA12J3iVLQZFZEVBhalhF5GQBDtl4zt6GFlKucztFwPZXIZTYJavPQP2xpvFDInehpuQcHilp3yHcA8+ucs0ani/GPME+nWnxyEDPhfu/FHkheybrXg084bLJG7E+o9XWBTlbISgl/1CuVNeWNj2ph9KIS+TAcq3NucrKast8dNM3bayIymMoemWvEcvuUjoRlABuJKAeAUQ2q5dFWVAZFvlK8de95GljY869ODymzBXnPjMOSCmHwZ51ImNKeIgHybmDkzT72uKyQcN8nty9DJKz0k6Kq5kib65fLCcoAEe/w3d/WVpmBqxU1Uh3yD+z1nEm++DCQTmK1jmwwLT9krps27ULzjOvLuJz2cJnCpSFeB2fBYxH5Wjbp3UZFwDWJWan/9xl9bIREOaZ7mmAz3b7YgA+106K4LV/Y4vBjtitwaM52IcTqvh0m2OKpQSYopXYE7hsG/CXE/MACxmx37ut0KpTFaM7N2GYOE8Z9hIsM53ueQhPuRvk2Hb3E8xbBs3mMtYON2ubkxuPdcQJmCKSHZTgVqD7NVWXIyDL87TjV3YTbdGq6KlIptH7MxMpAvL03xq0ApGXUlF7gt9qwpHG/tuVSmjPBAUAEXRZ3bC+1E0tvaaIPWgP63+hhl5S7970UrDCXrtzeN3l8mbplzeN8BTm9brd+gziF3NKUZgA2yM/OiHjy2jbsu2NmXU8Q3f57Q1MnJglrwSgciwgohkp5Q5XIBOCwyJuIcAxO6LJWzaXB+WOrB+xk7v3h8qxpMdfHMOLFTY8M5Rf6MoGtJPOtFpc1+0Cjg==","layer_level":1},{"id":"f210509a-2381-46fe-8c22-0ed768e6ca70","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"数据库迁移","description":"database-migration","prompt":"创建GEO项目数据库迁移文档。详细说明Alembic迁移框架的配置和使用,包括迁移脚本的生成、版本管理和数据库升级策略。文档化初始迁移脚本的实现,包括表创建、索引建立和约束添加。解释迁移命令的使用方法,如upgrade、downgrade和autogenerate功能。说明迁移过程中的数据保护、回滚机制和版本控制。包含生产环境迁移的最佳实践和风险控制措施。","parent_id":"243a1a45-d31f-405e-a3b9-694d2fe617d5","order":3,"progress_status":"completed","dependent_files":"backend/alembic/,backend/alembic.ini,backend/alembic/versions/488d0bd5ab01_initial_migration.py","gmt_create":"2026-04-22T18:57:14.161329+08:00","gmt_modified":"2026-04-22T19:20:15.066432+08:00","raw_data":"WikiEncrypted:veTYwq2y4io5qXerCTrkkH9ryxDJ0NroguMukGrnBDccbI7FhPTNCbxlVVf68ZQ7vvUzAxXQ43tY1R33KAEW91uvBjnohUVl7Q+D/Ap3SUnHDpWQWBM8qdBbgPmANzeAhinu9R6LqaM1BaUXXk7OeSNamXR7nrg52Su/KTt/eSPCFzeoio7iY3vORVHeaHpWs3y+ipYf26jobCXk1cLVjF9BgaKQ8UIEk4JobP8DZM0dSC9SqfPLDnh2e6k9t39q8JNd3MaV90E75j7KuZKZZJemgTfwdUTe5c8Bn5uNxCf3TK5iuMxVxJXD1PTU+9tadOMcx1qXGJ3cb3nuH7g/03z2UrmsQfIRf/cZLGBqAdGIWhQpJph2OlUELy5WTq8t4R//c0t+IUVTKieR2A1E1U7uGurYXL5ymVtiLnckbHeLMEoxbJYmh7d4xn4mWF5hcIhAZoHvjqh+shIGNwCfXJQGswpnJNML0vWzQNhsJ1YcTUnHC0P8Y6nj9VmXMpUYuJLWuIRuqBS5lkS7ChcQMXO4wfad4N4RMHX9jLYytT/wOoty1KlEalUzriEMahdDn7h2DsLzOJL35SLwpVZ4NVnInvcE89IzYO4wyJIz4NdOfBYseoIv20Qv7qO8B7xhRtTudUyynfaz1jmkT8F9UgZFcdBJqg08MH6VdQSdrlKqUGSGsFAxtB9OC7yv25xznJq5n5SUwpLmFNbQ1evjOqqsogzLg8vClnH52aVuE6TfQWggj1wDjxG7jUj/W7mHSOsDI6AhtMWrP+2OVg2Wx9Bab3iLivdVe+mg93LH2FvF3a8iAdcDRseeNZj2UeJJfYnmzpsRpm+CeJo8Te1ab8UeOeGebDsnVTTILuEg+qe85nTuG8+PmgOs+n4r+781gUSlyoOO2Cde7QwES0X+oENbplkkSZM719jK09dcnbG27vqoeh8rTrzO9ygM48IjQzZWUJCnAIP4Y7VVrcTBiyrZhRLikSrVvSCvWU3K7KW18pnOJh1narIx0e6w+bctledpWsEGZJ9fwk/ae5P5ZvACxfM/2LOdDFqshVbr6grRIeSNNf+tl5nDunlOTUEY8fGNt4lsr35UgKwPwO9TxACZGCsd25DuEtHum9DU/GYli2+rgNaOokcc0Xtw/R8OuN2pa7ohiD6ACjJ82m0kKC0mBBymsNAdo3bDXv3yoyI=","layer_level":1},{"id":"aad61788-1dc9-4682-b743-47188d7aecb6","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"引用检测算法","description":"citation-detection-algorithm","prompt":"创建引用检测算法的详细文档。详细解释引用检测引擎的核心算法实现,包括BrandMatcher品牌匹配策略和CompetitorDetector竞争品牌识别机制。文档化置信度评分系统的计算方法,包括关键词匹配权重、上下文相关性评估和结果排序规则。说明引用上下文提取技术,包括文本片段截取、语义分析和相关性判断。解释算法优化策略,包括性能提升技术和准确性改进方法。提供算法调优指南和实际应用场景示例。","parent_id":"7e66719b-4a8a-484d-889d-10fdc76788bb","order":3,"progress_status":"completed","dependent_files":"backend/app/workers/citation_engine.py","gmt_create":"2026-04-22T18:57:14.593043+08:00","gmt_modified":"2026-04-22T19:21:33.125768+08:00","raw_data":"WikiEncrypted:qByx+WzXalKNnda2aYUs+KheFrHbXoPYZO+RPCaekyWxjKaQvamRZeOm1WgroVS/6iDS9zNWvth+zIYrS27hz/NZLNtt2wOUw9iZG139S+OGMVcZB6KjsnlgG3fSA05ZEdrwDfB531npeEpy2DodlOkcXOSBrgCwkOsVexBDKcWLpthBpfOCieqWsVnTfFkeXE8VvMLROtjojlr+6So18lnYzdEekhgU4Az61W3QEoXC7l+uPBNpRUYZY9z5nLzihT1o3I2bDEfAACTaa8pU8izFltiEd4qID4z3TepI7IuVr7oTmPOaD4MzHULu/4RaMo7/7c9Ql0uGsFrxRb3QFXiiH6QZN++2X9EDTl4UjA5k2E+OTcO2UOZm2dV7vi51lNAZwI50VwaIjtaC4LrPpX7fklk3hQ1qbw4w0FPjYlraJyO5MLseOOQXmURr5BCOhJcWoJmwJadtfh8EAO/9XRK9CRjr2wpAuL9kan2Vkympa3UCszQwVox0j4IkjJNYlG/7UEt2ixgTU4pQi+CAJy+8tZGJxY1gk1MCILniaClaQQImJhi6TfYfWSVywTFVltVcxPd7kMwK116KQmtoiqet/DRC4rzqeEbb6w8I7HZu+VwSR1TXSN8teXJTRMAFEgg9vh+vAOconlX3LzcgvFPohvC+teXJqTADp9XvqcC6Xh41G53xVAvDteT9pJCZHMZsfgh0bErBFzrvnwSObsmJEkvWnlDRN5tdVsRIk9LGcvaflUwWHmIof5SJj7wO9fSm2BN0gW+VA9nbQxyuHt8YqvNR5D0WUpbY1/UDw6IDhAxuTh/6yyVt0HqirNDXslgDardkMaphsQs4xh1fShhK/PcG4y+xX5VsoXIm/tjfGAEXYIeGOHtVuldTaCxG32uSnuT/aFQh7H6df2Hhb7c576oZ6QbZ4HyiG+Qa9iZr6deKWdGhtuuUzj3FBAXLtLont+yuXSCWi/AWM5MOMVyScyci2LKIjH5haWCCgS4nm9tLvifzUgmdeycw/Dhve3nrgdkgO+bIRuUQxXRIxZRUdxEr0DKIa2tEKVeorc5pIX9m1bErC53nDhnrLBj4/ZQjHp33XcgGQ+4jAfmWK/AN+P/SNbyF/K6O0qlKXPqQk/w5bOZWCtcIjrDLhyxZce/pYHOGotrSGaKOK56cJA==","layer_level":1},{"id":"ac0658da-7670-4e41-9e57-02d9d0d50680","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"报告导出接口","description":"reports-api","prompt":"创建报告导出系统的详细API文档。记录CSV格式数据导出的完整流程和参数配置。说明报告生成的触发机制、数据筛选条件和输出格式选项。文档化批量导出、定时导出和手动导出的不同模式。包含导出进度监控、错误处理和文件下载功能。提供报告模板定制、数据格式转换和性能优化的使用指南。","parent_id":"dd12cc44-0c95-45d5-a726-e7b8bcf2531b","order":3,"progress_status":"completed","dependent_files":"backend/app/api/reports.py","gmt_create":"2026-04-22T18:57:37.837258+08:00","gmt_modified":"2026-04-22T19:21:24.246329+08:00","raw_data":"WikiEncrypted:ncgUburcUGIQoFYRn+jCfmA+PbmqRFCE8+U3jYVfh2v8RywptgptFxq5lhwZlmleN1AF4e6ox3Zeepx7xqM72ox5n+mZFIvpPAV03iG0mffmuvwBURuWuzG3zvukYRbxLcpPqC6v5q4GXBz/rMTsxy+K9HHfwtlYbga6fioIcJrpFn0O0GBCxvse/EcV3UFGM+LHRaRVZqk3N16dHYVOsIgwcqfz+E1qQhOc9tSvlN8OuLBl1z0ukshjGXiX/lY4xzl1WSrFXAIsz6WAKGLPlkePgVZg61CHsK9/iXfq1HIs4Mv/RYwTtuMKkyWX9+6LO+AwRjoeHSIVgJsaSwMBS+MqugD6JwGdLsb5/QGcsDSVaN1zVhbjD1WnJ01uK+tBWcULWdYGAkgo7z9A/YQJsV8PUfXfdZnfuydZi59mopfaX1AYtCXeceMgKnzkAIwjWUl72+Pwtvdke5upjMFgEvoy5NrCoYwpZJBePLoPrgu0kURoy/vWGZ77WhOuGQs2/cn/pk4vCFes3r34gglCIF0tHwwh9piyAabHid5VZ3EIuOlhBHL4O9L6zlAgO0opbo23bXt7kIR8MIjEqb8b3SoUIGY7PElOLeOIwJiz1LzOnccT84S/avMIJR7fgzi/me7mJyD+8h7mZ3GY/AsbFhi2oh6bcqc7U1UcO40wTqx7myMlwrMOo9zRr+aAfR/lqH6YwFw89kkxflBfKQ8X7UwPI/vFeOnYkPFjj7XzgHUtclkOUbxztMSSnhxiBMGzbNf6/hnfqT9O5xO2ZF4ufJ0t2Ci/vTK7mqMRvj6sBAzXnGCig4zpnDKbOrVJnB53v6AnqjeFLvqUCGI5Aj9nn+g4LDMtPzzDhfm/HtoxVJjclFmC6FQSLvHlh2FILylIvVxzY7rDDuK3bTiuZFz9Hw==","layer_level":1},{"id":"7cb1d921-44ed-4e22-8bf9-baba7ff8b7c7","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"新功能开发","description":"feature-development","prompt":"创建GEO项目新功能开发指导文档。详细说明功能模块设计原则,包括模块划分、接口定义和依赖管理。文档化API开发流程,包括路由设计、请求响应处理和错误处理。说明前端页面开发规范,包括页面组织、组件设计和状态管理。提供数据库模型设计指导,包括表结构设计、关系映射和索引策略。包含测试驱动开发(TDD)的最佳实践和单元测试编写指南。","parent_id":"2148d7d6-25c4-497f-8894-c4eb7a0d2bd7","order":3,"progress_status":"completed","dependent_files":"backend/app/api/__init__.py,backend/app/models/__init__.py,frontend/app/(dashboard)/layout.tsx,tests/conftest.py","gmt_create":"2026-04-22T18:57:39.375268+08:00","gmt_modified":"2026-04-22T19:21:46.916012+08:00","raw_data":"WikiEncrypted:5RlNBsIi2/3o8ATlHuzaYHdvL7yJfTe6YPwFoSkO/GgZuVYfBQkVBn+1kZzpIDRMGSVFSuoDX3pyax2f9XzBxnZshkSCM7o1L+HEG+sgCns6EUSGCL3KfZi4emTF8vVzG/3m0dhVOWuoQXf3TK1+2Aa07EE3HJ86aWB+sLQgQyR8gNqS+MsRztbE2Am9O9oDis36vAh+tGO64VIsi4ulSBpI8D3+dRXcAI8RsujwrZpp57UaW+DyGg8Jkp+WqqjfbgBGcdkno2KfRFyWKqKLB1g6yKJCePYymOK9DHhXbdBC9mKr7EWc8T394B1klPsqywIZs0i3xy/Pr5FAuzklEn/8jhNkYpmgcVvXaZ43AUVTklSOgSC0cwvfeHd91QuNSlfIbIs9Xh0pfhmz3XAts9WErkdoph3YSvrNDMuXK9CMNhlu9XMkMCQcV7ac8ax69JKW4uVaVHcjbU7PbzOeQ7vSALRtfK0zhIWlbQ3za72G9FvDogDqrLfOBzEXA/cyXMdpeZP/ICE7OsSCRM/i/yU/K2YUAWnRJczSn3cX/8lGIDywmB0jU+IL4l7eteQD1Ea3elS3ne3N6t0WqX/T4jybDWQQZqz0+gOrFuJUKTQ18p+2afWRjcYZnqg0EMvXxpXaT5fmpQAxMA89c70flWUr6l+ZNckhODBS1Uj27vp+ECTFfhbNt2CmqrDWIfdobRz1gXYkZI6LR+xgc598+CJDjc6zizQcychGbsbPqawU+CCQfSVqPCknZLlSyJrMF+FMoe4jm8fpOVyOOfqGN3N04W6++aIiU3eZIMB0F/1pjONP/d5egIYaJhs0Zo+ciWBBR+Me05kVd2tyIK0ldRH8iELZu4XmfrNdcGPMTZsENU4lZZiJxIXbeoKUQF7KbjsDcLTmuXfl4jcPFk48k+LwUEE2fyaAoG6SFrEaDZiZ/yR292cbQegdgcOrF+/QZDnMqVS6yFRaljF5C5+ce7VNxUOs5dzK46Z/0xD4kXHkT4QT5/727yUeQ8KmshnsLpu0XgxdbjIAKa0UpiByR2sen9DI8GblyzqpH/4jM/yMtc2COW+MLDnPw7xho10kjKNljBjsabSa5q/wLnYGofR/pA1CmnrwERR7Cytik91YmtyTb1D+rjh+uOjSVOB5NqjX7dqhFcV0CLE3KfUAkA==","layer_level":1},{"id":"c45e66b9-1ca0-41da-a796-6b98f394faa1","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"运维最佳实践","description":"maintenance-operations","prompt":"创建GEO项目运维最佳实践指南。详细说明日常运维任务,包括定期备份策略、数据库维护和系统更新流程。文档化安全运维实践,包括漏洞扫描、安全补丁管理和访问审计。提供故障恢复流程,包括灾难恢复计划、数据恢复和系统回滚策略。说明容量规划和扩容策略,包括水平扩展和垂直扩展的决策因素。包含运维自动化脚本和CI/CD流水线配置。提供运维团队的职责分工和应急响应流程。包含成本优化建议和资源利用率监控方法。","parent_id":"803bfef4-3985-477e-a61c-915a246d0061","order":3,"progress_status":"completed","dependent_files":"docker-compose.yml,backend/requirements.txt,frontend/package.json","gmt_create":"2026-04-22T18:57:40.355828+08:00","gmt_modified":"2026-04-22T19:22:39.446821+08:00","raw_data":"WikiEncrypted:AymRokkaRBrPd1uk5umiX/dhQHTPPm6nf5mmDPb1IMODwfEt6djM0VBnDWaMwjVsVSuT1AHD1pfVap7WBute6Wsiarqj6ltamY09KvCs0YHxEqOor+0AYSzm2Aa31Dwx0HGTr+fgwTnE6RMJGGceRIs4cV8RBM7Bs4/C9pv4JQQe1wx9fBauJxXtVZgZmkTwsQz1zMKUv/my9/bZ9Q05aHGQVWSs0vQA7fX+eO9Ugt8ztv2KzLkMHjTPQwDUKBMhAsMb47fa/gUJRb4vX0XaRC/0NRwbOvV9kGE8ZhfJSMzck20DTmUNjRs+txGlORGu4UWZsefqLmppB1YdHehQUnSp53vMgJwj0a9BHe2ZU8oB3BBo+Ky3c3OR4uaa4rfHtatz+jzKcC5vq+Oa2OkwFMyKF/rHCf5c9kOD3c9bg/wQwxJpIov1DkWxrbmp2EHHUtHsb07ASQhGLV3SX7POirp4b3urFGRk2MwXKxT5U/gA8wytKMJhKBFtElvFBq2i7nSPeaH2xj0DS3o9rwbrhRJQvLfp/3z63umdp/84RCiI8SwdYgPx4ACqLY3QKXNo0LIi6rsgWkaf5Suyks+dimQcPtAllHZGQA/gcWYidV5oQCnhHJ/meCiKRy7Xb4GttMbIeOA7UNNRQ9IFS7wyprb/n36lYgLOcuQ5Nugly0pl7iFTkl4qWn4pZ+zE4TR9CK3+3oihqJMUeVFdsWHHzgVsh4Vy/4MCPUipHMfRj4T7BabCmkvaTRaf6oRiYEXPGH1mUXCLnQuty4lKx7e8LxdqWP6gciPJOcuRMBYoeBHqUKw/JNmAzN8FuypXsdUryS7GDozcilxOcRE9j3D0JEW+8ONdKF5sp2JAXYX0mhqtfB+RscbqU7E352fF8vZAqHdS0XHCguOUcPuOk1PjzrKK0PJcxoWJPrW1H76CpfhWX9kC1CX6ji8+oMevPaHlwwFIAPnELyRyWOvaAia+6TeiAn8YTup3BXf//p7UweBdBGz//qMDvWoMqMf67cKrFP45gozQjSEYzm8AQ8g0Rqx6ctmJotfnBMpbUoG/k/Br9U3yCwUW5C4ELNIkZ8HMTq1vu6GKzheTjgM5lsZSBhR9qgPwf7cYyU47KLN2oWaoSG9Ke9U5fc+blB461oN7Tb9p1M9jYYAi3IfY13WbWR9kQ09yQOl6zNP4E/TOZ/WG1O8YhDVo6O9b5nQ7Txck2F7a8+Oqzy404YpIRpdXWJvx2sNjxCQXQVXqKKTnxP5lOsLb4vYZqXeHpIw8VawHDzn9M5zowBo/3M96UZSy84F3QEP3JU1nF98Rqg82vqB50gv8dY6wl5RPTzKd+Fi2","layer_level":1},{"id":"243a1a45-d31f-405e-a3b9-694d2fe617d5","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"数据库设计","description":"database-design","prompt":"创建GEO项目的数据库设计文档。详细描述基于PostgreSQL的关系型数据库架构,包括表结构设计、实体关系映射和索引策略。文档化SQLAlchemy ORM模型的实现,包括模型定义、关系配置和查询优化。说明数据库迁移管理、版本控制和部署策略。解释数据完整性约束、事务处理和并发控制机制。包含性能优化方案、查询分析和缓存策略。提供数据备份、恢复和维护的最佳实践。","order":4,"progress_status":"completed","dependent_files":"backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py,backend/app/models/citation_record.py,backend/app/models/,backend/alembic/,backend/alembic.ini,backend/app/database.py","gmt_create":"2026-04-22T18:56:47.082886+08:00","gmt_modified":"2026-04-23T20:35:45.922191+08:00","raw_data":"WikiEncrypted:Zb5TNaG1u/mRrgPr+sDyCqW7t7yX8M+Ha+5tSgGfMUOChQVv8Rc8RrXA+lpSqmcv/gkaDzP81agTYjHvX46erg7PWFncGZ1TOXKqQP7QcGfliH5ak9tnEamgIuPyt7GDe3UrFF7FJ11PUH1Z58Mw6bnSGRnis45ughu6ktQUqaWapao0iwnPJ9Fsi58tcLIrE+5bssE3RJAR6PVUuvqHoUJpdRuEWjfgHbGRXqp1WL9B9GMwvO2ootAw6c9LUKmxTD7C8MfyWJgQTNNG8c7FpDC36VUIX9My6OXVErikRFLHluaSbfIGV4q8CWYg6m/1/FFofujXsddRCB/qyyCcdbZZYID+soppOEtq8yg/zrxCB6KUogCWT7+H7NGIo3+uOeXVy8s4LFPRkxkQ96Vjk4S4USCxT3ihdKfOk+vJZLwc40+sC2A4IzmRtfA9CANQqXF+FzRegSflCG9Q0UZh1Y680UzS4hK6FLEW/oPO48NcjO4sxeUZJNctz5OuERGTyKVGFABvuWL5ieiTcPP4ynyNsyjzgZWR7g1/0CTYhtRbqZgx0XwFfhgNR4ow7nsXysRQEzYqUxrr9Zse49OBfFNIjAij+JxBBOxBRXkQw7QP8Q180RrYO6kRyJLelp3HcOazWKLdUA25RITfLFkFh8NGUvldwDCgtnx1XBATfiRPCRtRdzH5jKJ9KNu4/kmu2mDKgmWwupEXCHBLnsEG+/r7R4PXzp7kotTS2+2np5fyHaibwFNpLk4ylBRBuw3DA6cUXXA9lpeaqJCiFGIEjT+3lNcL6Nx2+kRnVhKE83Ac9zLs0Biq6WXpsOPDqonoUcV/VnfvP9QbFDjghCIl1J0gj8OA+h+M3DD5ZQNUNrdlm3wi/ggwfXKdJsnpupeYggasFkNrOTlWq/MuIpSsdYGE5W0SflBSug0BwksgsPWX36i+7UPtTokrNsSSvr8RepqIGh2uEc9AH3n0Aku0ngg1UONo+GHlPygWc7jq56FZTdqBHnKO3942QSoXfhIP8XRl2fDxP2XUofalVOVsu/keATLIZgDh3IHsF0UG1Yrh1tekIOTVmsbuy0e4zl2leHodGxoOBnYwnfPMOYWxPZXrpojyz+nqw++EBITzrkkECOsTrxTVaHrwwSAPjLtCzU0w/EZRD3m3hE0INsgv5Ble+gZ12K/STHVBzqHPchkz0WW3c+MVUH5PPp+GTFnivGvHtjMYx6UeeU9w9fNs4pks9B8N71j6JB6Pk4OSx3/Ygx9IH04l/gEMoOXrbs9VQ48A8++AK9SRWcfLbcuJiGzapIjOiVzj6KI34o/FEEYnLJIm7DZuVzNS1T+knrXkZibQK9ssAu6dln0lucbXfg+9cqbtXhzwIojhHOv8xBT3jQAqMTbTdiV+8K3qqW6PxA8tIdGWE96msaZpgmQmpf9izCzjbQIp9LL5WN/jRcI="},{"id":"05214c1a-d804-4f3c-9048-20ba4de3be0f","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"引用检测引擎","description":"citation-engine","prompt":"为GEO引用检测引擎创建详细的技术文档。深入解释引用检测算法的实现原理,包括文本预处理、品牌识别和上下文分析。详细说明BrandMatcher类的设计和实现,包括品牌匹配策略、正则表达式规则和模糊匹配算法。文档化CompetitorDetector的竞争品牌识别机制,包括竞争关系定义、相似度计算和过滤规则。解释置信度评分系统,包括评分算法、阈值设置和结果排序。说明异步处理机制和并发控制策略。包含错误处理、日志记录和性能监控。提供算法优化建议和自定义扩展指南。详细描述与AI平台的集成接口和数据流转过程。","parent_id":"7c2ac186-ec90-400a-ac1d-b3b7ca2f01d5","order":4,"progress_status":"completed","dependent_files":"backend/app/workers/citation_engine.py,backend/app/services/citation.py","gmt_create":"2026-04-22T18:57:02.318113+08:00","gmt_modified":"2026-04-23T20:33:37.372717+08:00","raw_data":"WikiEncrypted:5AsZyvafBXiUtsQ5ntd2xSs3ILjH2jK3KRqQeqYdLK3xV++pdLq+4satUA35s4AktJpvtIlBIE91BpoSSxdMIJzlzjcEII8kW/R0EytB/VdNUbQKg1RverfqOp1bPEWLBmM0oXoe7+3qkzPC2Mf1ooT1qY+Wnye4CAfG78TD/q0AMQdykzQydTep7eypfUng3BGXStCcjUkwnitXy9jgftpC0/tEyMhSJIRwfEyHMC8pCZ3uBu05K/kbWJMAVzeN+RbpjqQl/AMRIDLTMg6TBQrvrH5uB7kEmNLnso0k4IwbKjYBfsoAT1f/RhrPR6uEpuyMZCI7868kZ98SRi4JNdev+YK7Ek74Y4AW+/z0d/9fpp2VQ3lDuYYADB2ihvzHrK09yCDPV5DfYbOE+YmgfP/W+1ZayVWcVf5jjw/kQ0+wXXpByj9Bf0MvKeJO8OmWNbW11YKf1Zhr9O9ssfAGhQ61tEWdGwr2vpPRZecLhmP/3vAso3UexUhMF+42ursRQIxusBVhGnBG3395aphiScvidcQ3AWZDt7qWaigup/9WWvvwKEk+gWaJBnO8dib6i/mBuB+XC33fXmvrkk6ESP9afV1Ag2XJnNosrx5wpwCnwwVeYm1+mo2FyjpkCyIesooi9FNVuMYQUiR7o2ORBBXyp8r8l4pab4wvhmQ5F/kvyrDq2IUoSgVwCe1WVokpscxHDzemlRiqQALcb9vHFogShoOIw4NQd8JE6Ciw2NTcEbgq5i0hiaO1w/VhbUyxoqA105/8aSzbEwdAcuMG9ciHKwbMkoyR0UaMKUZLJy6VO02JFFpRtlh3OD72t3VNoDS4lWyWJe4G6NccX+XAohN1rsZU+ROCL8Y63mODms+oacpzuNvCQC0f91XvoRbftpDjven11QkJUdRxC+QBid+X3RB5HjEUZI6amQjQESEX2z28T4td0i5MNlp7IQfJjM00IuaVZmFavGuu+RJfvR7n78hqrcdjNGJE2t3TTozXstxH3HLmjwKzaA1DGdcvjISEAlWpSDq1Z+8ExFSDbevtUFgnb30/rRPe8E/+VsDMR1FqWh+HovxPuOeMpbUi9ijTGv8ynn1DWdoSvT0kIfsNMhReSibvIGRprPdW7oZEiI5y1SQYXU4kMBOpPdNuCyaPRA/3Mx5z0o+l66QqRA2tAMfS5JvFR53tL+M8eEjH5xvgW0VmBTv2+9VGk9aRLHXSHANLk78McmWR3P66okFWF0OhqkaLPqj1lqn8SMDBv297qL/7vaz/5ZMq+1nKCtq/I4rY9/FziNmhBZi9jtXj+845Jyt4Qi7hprnHQYqmX7caLgy44MGdtGDcZ/fxMNY3A2QbuIeQRT767L2gpffBKmqQxLcfEBwxKol5OB8/jdyvVTpGLMdROGD3baQASEk3njuah/PfjZcfuARA6oVvcpj+RhM9HEGKondRlyBHvD2f5p7nK7WyubfWPvcD/iKl45JOn7zLMHQYvIYu5w==","layer_level":1},{"id":"bfca5ffe-8905-4ac2-a0a3-8e4dc43533b1","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"数据可视化","description":"data-visualization","prompt":"创建数据可视化的详细实现文档。说明基于Recharts的图表组件设计和数据绑定机制。文档化趋势图表和平台对比图表的实现原理、数据格式和配置选项。解释图表的交互功能、动画效果和响应式适配。说明数据预处理、格式转换和实时更新机制。包含图表的主题定制、样式配置和可访问性支持。提供图表组件的使用示例、性能优化和调试方法。","parent_id":"d907a8eb-795c-4060-9cdd-50d31cf39be3","order":4,"progress_status":"completed","dependent_files":"frontend/components/charts/trend-chart.tsx,frontend/components/charts/platform-chart.tsx","gmt_create":"2026-04-22T18:57:04.217105+08:00","gmt_modified":"2026-04-22T19:23:03.405364+08:00","raw_data":"WikiEncrypted:LlssVZ/E1BSUywfa50FLlWyGoIcJJpOig8KP9B9gWWZZI8ePi8CsG3BxaOR4OzxCxm2XiNUDCA5f2LMwvnigr2SlxVBiSNHUI0lCgSHHEunmkPytqBjFiqGB9yeyKz3O1rSdq/m6COB07RDEp6Tymfd/Ich7hNqr0ALiJKFBMfTRXbiXa3naRlzgzc5/DA1h/zbAk9yl3yaR4bB4p7xAmyNn8C67e2gxrbHOKN7NK15dfXoIag0XHJMVwFE6SysJ+lA7fykhvt72SHx+Qz58/QamURb9OcCEnEtIYqW1uga1vc2HXP+r8Ud+tutKATUxPch908D2Dm70HjZTkDqV0y1RwdTE86O++EPgx5Sx24CmB2Y9KEs2TsxQBSxas2iX7ajhgIL9xFqjJIMVJWfRNeL/ql2x/OsrzEXUWybjh//bQHE/MIs2lMcn3jl6uggDT3q//Zf/jugKwK1117XAp1NDps6xhJqmTf0/J+uk2DjJwURNZ+f/hL4XNyCoPSOpjPZMIk+ikrqwiBBFy1t5dz/fksmYdzw5H1wSGwFPks461EvwT7SUd3qHg+HDEWwCrMRQLhaalcb+5T4rD4Gg7Aa0Y5Q7v043Oz/0rnmFckpB7QJrcI4yUtnbNxu/HuY+NFZLqpJUrNC6MhZKZ1Nf8HjXwbb7FvRLPTJk/0J2UGgZIuFkHqA398GnAHSj3OegnBaKM+qHr8cVs0wfQ/uFwwYzgoBd9gSGURpkSSDhsDUj2XJMeQPghyYg+au4UrCpUVHdYOyliR8OyttchGTRgDox14AD6X6BPxBueyw2Yb6orKjSBwNfDa9SZQK8dW9S0BehKqK7QLDHIzpglx66chB/QwWwaryM7BrEciDg6cdFeFQSmV+EgDmEePwse6hlzNdSXObTbNXLDwYhtifAxjK0xxhVUCtc7HVAFKLROk36HCFnlzxLpVmtppYzoprXfyXDe6BHU55d+PSdjtYyR7k/tigqJv5jX3TTrH6McF+/v+eR2ZtsTDIjWz+prq1cMVTVPgIB9WoT0+dXP1fMoZ52xLzWjSkgrQ7djAo7jyy1G9plvOx0bdGh5lBGOz+/zY7MTLVaKx8eK6kKS+juFkRK2kCuesUi79TGLidetA+vkruZiHzNPBJWntDodb79","layer_level":1},{"id":"b32b024e-2d06-45c8-94c2-a07fd25ab9b3","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"快速开始","description":"quick-start","prompt":"为GEO项目创建快速开始指南。提供完整的环境搭建步骤,包括Python 3.9+、Node.js、Docker等前置条件的安装和配置。详细说明项目克隆、依赖安装、数据库初始化、环境变量配置等关键步骤。提供docker-compose一键启动的完整流程,包括容器编排、服务启动顺序、端口映射等。说明首次运行后的基本操作,如用户注册、创建查询任务、查看结果等。提供常见问题的解决方案和故障排除提示。确保新用户能够在最短时间内成功运行项目并体验核心功能。包含具体的命令行示例和预期输出结果。","parent_id":"1bb55e12-24c4-42cb-8f59-ddc303460d45","order":4,"progress_status":"completed","dependent_files":"docker-compose.yml,backend/requirements.txt,frontend/package.json,.env.example","gmt_create":"2026-04-22T18:57:13.330281+08:00","gmt_modified":"2026-04-22T19:23:49.7972+08:00","raw_data":"WikiEncrypted:1aHEw3M2aeluf1++NE1n1HTCzLNrSYNKzc2IVp06RQtbuAYcMEXChpU7tJYS1f3O0opR6Xc/vB+l5keQe8PgCR2ncFv/1Td0hCZ2YAOzrKcU9vT19aDXTs2wVsNg8N0rDLvVcTazfsrfReCkGbF3t4KIDlALR7E9k/sBc8Aux87FRnIqhElZnBvZS4Wsv6VYjg+rG70cB28ZbZapx09FwTbE2gyXj7Ck6qNOm9h31VGeQcyIEPfTlQzKWWghd2UuAwraAXbHFeTBwAzBOPZrVi2iMW5N0fiPvrofJe2RpvtWwEWsHguXuXUfXywdpjyOFbnrTokbwQiiwiHpgbktPSypaW3QvBywnGVAjxPBIfRlzbrxj8jlb7w8YznQPbWcNRuYRt3TVMBHR1Ix8UjdR2JwWu4yZQUrLOP4XJ1OVoFdLu5sT3ug3YetVAWSBGUiyUEIQ1U7QoHxxE03qI1ZmrGvC069cAhyU3YQYL0g+PfXWWo86/F20gUXppepBbqg0yRPlCX5asdDuL0vX+i9vl/JI2++deWQKu7cSc8+5tRNcN2AF8Klslhvy5KUEZpxqPaEhxXek/RE8thYcMjT02y2lWMR/WID/CEUm0DZjOC2fQE7kYjogUTC8OhNTBXocpLyn1sbyngxfQ3KsE6+Ysl41LroJ5F7SN8+p5pueRZgBbM32odMU1Dil6T14I/HwltMjiGAjHurPSB8hcX7nNvkuZnVTE2YMjB8ZEhhf76D9Pp1naI3P2d3j0DprvLXRiuPSfO9NBTu6LwZKuMaI2MBEDI2zoV182wdrC1T6AxOiHNcJXYiaF+ZOpMA0vabvcycoioAE6VOZ0mBQ9ZPVSZDf/Dw+VTsC8U1qruh1IAQVYCHsnjY9etX9sTaj6Izd3VrvgQkqP5vAteSDZTy1FOTlTi3X6RzcurXdR3833HqpXa/a0ot8JiRdmjIG0ydOuPYeZPs+Jb0FMN85H71mBziu41udCrikCTPBRTVz6VCG9yBdOgeW4s/iNhPqWCnDibKpfJy1GfSyZ7Jja1d4K91Y+IHVrJxB0+TZPezxY/htgMg4W7MtRoOOPc0eRqst/S2zmEgxMMpU4dfaQIne5zGbUEPNb24qp3HsO9v2un6P17rFQV86RwmPCnyngxtddo0vUNesY0s594GhsGEquA9XlaYa4/KNM14pVDEm4ReIC1JvvqdiQdUAPv3nMXASqe3FxbJmsi93mpWhKWx2q4W+P3ZivXtxhQ5OB4Rs2uXmArlB3MNPKk8TL7wHCUAsFUcCGoPtT2+ov9ntDTLyjKsb0YUGjYUqAceHGdvLCM=","layer_level":1},{"id":"15d6170d-716c-4d2a-833d-81211a59027c","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"平台适配器扩展指南","description":"platform-adapter-extension","prompt":"创建平台适配器扩展指南的详细文档。提供新AI平台接入的完整流程和步骤说明,包括继承BasePlatformAdapter基类、实现必需方法和配置平台参数。详细说明不同类型平台的适配策略,包括基于浏览器的平台和基于API的平台的不同实现方式。提供代码模板和最佳实践示例,包括错误处理、资源管理和性能优化。解释平台适配器的测试方法和验证标准。包含常见问题排查和解决方案指南。","parent_id":"7e66719b-4a8a-484d-889d-10fdc76788bb","order":4,"progress_status":"completed","dependent_files":"backend/app/workers/platforms/base.py,backend/app/workers/platforms/kimi.py,backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-22T18:57:14.593273+08:00","gmt_modified":"2026-04-22T19:25:18.719953+08:00","raw_data":"WikiEncrypted:Djug3Ni1DAZ8Du2qShzHYuqLmnJOyyKhsCPSfayzAMoLf9J+rFBy0LePWIX3b5/HwiLgJX57X2JBlObsW70y9DLEgX5HDr3AAeBC0dRNACFssPk0GwpdFdJeFwRtoB01ZTdr+IpYAK2YG8gaEA/2ysFJOZzxpGWgTq/Xz+KO29a2kcDgYhZKt55uqT/Mo/5Dzr6AN+qXdLL5xSqrvCkpmhYMFmzgIBOUjJM1mUISEtf/X+gK0L0wXSj/tCJnDQtGJqbFK24HEYyVnkon1GdnIvb+Vptmby7Qg9iNT/xb8JEVTTLM92335BfpTwTp+D4fNkMNyZgXv/XW6K5J/dLRulOCKwxJxPROAyvyEc5xLI8vh6BGP2+b8TgKAKILZTXg3SemKVhGrB3MqY5+V6whOOMT57LHnuwJUEMNMJsswFiLp6UbAlqwiICRF/Jnb+bvCliw4xXvKC6xfAJDQ5qAtcTCAm0uGslNVB5T07pzLFy5EaJS00hqRmvac/P3e8UyL84KjzdngtT3yZ95yCL30Ad9SpGXt76JgCgVJoPFcnPYlJZiXneeB39wFX7rogSSye9XkcBSqEt2ZITemhNHF6LmqSUdnA3rX85S/zDmRiN2NjS1Zjvgc63JjB4B8gQhw3rDllzHDLPBIO3PNInvmVsx5zHOjAMZmyIaoVRtB9BQQnUdHn1WvHdRXmZfs3eVA7jNhDQmTtBzdGtJ31XIHAVkP5ul/NXNBKUytIXDS5hE2s/ZR6j60eIWBlCNxNIlj+42vefIOU+e5kJufMVcBv4aXyQHpunohRHMUYteEC24NO2CW1FNZJlH9BEyf8RKg1/0hDEmySMxcj/S/pXTp5i8nevE+JleHdj3zeyWlGqJsJa7arZV/Kj7qPJYtN4VHoDGp7MFHgKvq6W26lje9EuwJEikt3hqjinocemgMjzEx+PMVPovHIBXyCfuSOtygo59bhUm0pvPgdMmml9UgZeVV1GMzDT//kfmf33ZL+aXTl+zEmnw5fZYwccKfmY6Q++ZjfSQLB9eV6u79F0yq3zh7zGb4RqRR5ZeL2vQaNsL3wyqgNppyJMYSC6gX+ce1aAimwDx4Lr/EnY474W0FXvid1Xc6Bg6KdPrwnKJJpi18zMOmECI68RvMpwmM+92oe/m3dj6YGItooug3uasMy8SPsvLi1RV2F0CQD5CqYs=","layer_level":1},{"id":"7e66719b-4a8a-484d-889d-10fdc76788bb","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"AI平台集成","description":"ai-platform-integration","prompt":"创建AI平台集成的详细文档。解释适配器架构设计,包括BasePlatformAdapter抽象基类的实现和扩展机制。详细说明Kimi平台的浏览器自动化集成,包括Playwright配置、页面交互逻辑和错误重试机制。文档化文心平台的API集成实现,包括请求封装、响应解析和配置管理。说明引用检测引擎的工作原理,包括品牌匹配策略、竞争品牌识别和置信度评分机制。提供新AI平台接入的扩展指南和最佳实践。","order":5,"progress_status":"completed","dependent_files":"backend/app/workers/platforms/tongyi.py,backend/app/workers/platforms/doubao.py,backend/app/workers/platforms/qingyan.py,backend/app/workers/platforms/tiangong.py,backend/app/workers/platforms/xinghuo.py,backend/app/workers/platforms/search_engine.py,backend/app/workers/platforms/base.py,backend/app/workers/platforms/kimi.py,backend/app/workers/platforms/wenxin.py,backend/app/workers/citation_engine.py","gmt_create":"2026-04-22T18:56:47.083138+08:00","gmt_modified":"2026-04-23T20:31:36.620063+08:00","raw_data":"WikiEncrypted:wpnkiTiqqfzSOLf9jfRAk0Q6rmj54V4PX4cfdCN1v7vUnV27EqfgO0UCzli2MtUnJ51CgpvG/pn/E3FsASRJX83W5OtoHXDNZ4j26fcGYWMK9zRC5hi8J/dMZoaQzJzzsT8qKvXJnD4D7Bjp4ZqFEme7Smze8hNvF5wytAi0n14HrcR90C0v1NYf6UWM/I1F5Nqo0+3N+pfMTr9vJAv1ZqDstNHpvNePzJyNYVmfwpIE7rezCdxATA1CVuPpwaFA5xsmJ+vkqC26R1ecrjj4kaKngH6RRRDgQhhQ6aRB3vt5nqJTkK/GUHcF5T1XjKaL+a/sKF+40wgULRooeO7uAuC8Zv55v4uHR206FqyBmzQ2n2oL7aEvTlkvDbpN4K4o46nOw6eAh4cC2u+M/6UyRJ/vHl8dGbnZjB21BICs+8mtyY9X8HX95c3q/eXaBcsnPvE/pQo/8Z6wSj7GzmxfueajIQAC0N3PypyM475sPJJAQYRRBk4tB8BeeHAheffcSAiLI86gW5xCar2+kHIHTkRg3pcdkaw1EkhKeqcQw6ew0Z83+q31K2+D+G5Dp7k0yg57Yy+wQYoQpi482aVJTCvTl4DM1GdhaLBYK1/O9ybs6CsHHuhAMGPJeOCtMI8ehbz37vhncd/r5KFUwVm+e8+iVqLPjIA7A6uUm8oef8IZswkzAIcBjZTd0HQmfhdO7p2GfuJKvyAMwWchCj+pryelFxsQ1XiY4QCO1g7ORVxu6x+4/k2PNCOhk6gEBxOjJQzXNM+PjMhiZHJslw5eSbtEAXm+1F5jyhyYY972p9cQQS3iRFts9dQK7qtI8+zm8/UMh2S3rh9y089hgBEUB71Gg5cUb7gaiI0gJYh5HrUXvqt3g6H5zQQs+913IJZ7giMElPAP2Qjbk7hKfAuLl+gm7pG21vEiGBgdafi0W/SeGMfEfargk5rycBiAux4yqzolMzt6ZY1G6bSEdxhBwAL7IPHlaguENQ7PIDWDT1mlEboyeR60e3xngdX3d6vQeuuV5+OWjDecOeZTiBxvDIPgHbMXc4UEzS0YKWD8ao1VsXgT+V+KP4QhvazHdx0dXUhAJlmfrXF13WzadCYVAAlfJ5iNGkT47I5Z7NwqDIF2jO1g5hfgR/LgTwdLyuzF0R79gBMRfYZusLAkvoVjfKdTxjMIrkuXKoXEbgtcZDj99mrJe5eVpoCtl/nL+FDv5U8e1VDikgYWnXY62y5ZnhnOcvlUDLD2mJVlDEbnDBkMkFc2WW6TRTZQAb1pLCRTbsDr+kQD5BLd0YLql1xTFN8IsAKgz3fkhafmSS0hAEBsKC2Ntov35ZpS0cXcMYb1oGIIGPVAMq4Uk43QUUSLac4pkX/xpRkDI/wPdmaebMbCDw83xHKBNY4h9STf5rFicv01m7HLBHfkB3BTFwYsKGhOqxnJPkYnD0ZSz+ia3lw0eV2RoqWx6ITdxEvkaka3zPxNSnqrnTBwjBwTbLz5tXrCmK8Fn5Dd5N9xlYM6+6iveOBt9he/WYkedO6pClHq3NK1RmLgTQWpL532vkJNeI9p8YUcv89XqnwXSi1YhPMe1PKgYTDGoZvsPk66RDWaeTNkfhF/vcZudTvgMmZzQVRfZ/clH6wRHfgZzl1X4HZ6WJ7PKSSwwUBw/jkvMZ2rixaio10OXuEfyOqYqV4EoQ/upbXArnmYKjEbhcULNFk="},{"id":"850fc702-3eb6-45b4-acd2-ae87fec1f4f1","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"工作器系统","description":"worker-system","prompt":"为GEO工作器系统创建全面的架构文档。详细解释APScheduler任务调度器的配置和使用,包括调度策略、并发控制和错误恢复机制。文档化工作器抽象基类(BaseWorker)的设计,包括通用接口定义、生命周期管理和状态跟踪。说明平台适配器架构,包括BasePlatformAdapter抽象基类、接口规范和扩展机制。详细描述Kimi平台适配器的实现,包括Playwright浏览器自动化、页面交互逻辑和错误重试策略。解释文心平台适配器的设计,包括API调用封装、响应解析和配置管理。包含工作器注册、启动和停止流程。提供性能监控、资源管理和故障诊断指南。","parent_id":"7c2ac186-ec90-400a-ac1d-b3b7ca2f01d5","order":5,"progress_status":"completed","dependent_files":"backend/app/workers/scheduler.py,backend/app/workers/platforms/base.py,backend/app/workers/platforms/kimi.py,backend/app/workers/platforms/wenxin.py","gmt_create":"2026-04-22T18:57:02.318442+08:00","gmt_modified":"2026-04-22T19:24:30.529121+08:00","raw_data":"WikiEncrypted:NKkj/YX2GdbxYjFllBaf8+HUgx0ecKFsz1U3HC2t2IRMbOkBCmoy+IYbhzuQ50K4pCdPARIwK+MaHbv1MDUXpcbdnvRL12GKezTnD100oXzQKqQkhZdDDC4nIEcp6weWLVGVffqyB7aL/dnt1QlE63XyJfCwizBlecxl1GDUB4J0O7SsTFL5gI6enVYO6hOzx3JrWnEFzirRjA6Llz1iFiFUWxTjxjToT1qkxAdREq2omi39vXL1s84I0XOA1blljfNNIGbpkxXW5uohJBndl6l7Bh23wF8z1LfdAavsFmljavCWqoMvA61Dn4jpJT9oDmaKXZpVSuxfMF2Tu3WOJZwISUGfGBJfdbfxNalhuFff+bhZR8P717nLoM3Do7T26rsqW/pr0NJL6aKxrlPCeIzL0v6Ct+HU3ULHT0EZpG8HfU2NhGWAJd0NhX8RZ8B2ZpfXZKioKtCkLhl4oWV6P8/k5g1nWpnP3wpmDwvp+/pGBeaBcYSenwJWgcGR2s0KgVsEW1niM8+JLaK15wFrmKcxve0hIWBiiPnbZKscAYq+5hj3ecte8h/JevEf+SBNB7ify6uUGU3Eve1jXyPeBrc2FCU5ueeJSFD3wu5pHlkzm7PP8UAbQOfwmENf/Mc1YRNi1FJsujdQuJ67474CyCTkCWFhTC539/6iIa7hN8505GK99PxHcIrsPMMT5LU69r67SizSnWV5bawiMPKGosexCHZfhT1jrScQCKeuld0X/lE1WXXm6ADBbfxZrn/iEFK0zc0WKsnT0X/nQI+ycJaw40Cm+soCO6/KtdYYGEzpzViqi2KxYhRyey+o+yIi8V7nVsxUCbaVRVmYNjnK9yX+3ypdVpJLIJXQ5ywaUWfvqgCrsC7Xxba9P9D+0kmnq6jH6ZdIuubXp0yOtWxe+VC4bHAWoc08RoBdLrlTCGz/hmgi5S83hM8MN0gLdQtc2YDsc0Pxw60+ylnkdlKIefBmb7XPiD8RMRvcbDUCGnrpenbxf5eoWLjLWfyULNQHoYINDdIFvn+skLu10KkfTf8lpRNqd2uHkHVhTTCFh25GlRLAdL7QDHMMQbmwG9OTjjt1tMlW6aYJ/pvYQq95uzmLAiICIsf+nT4xgqoFK+tTBmOst7Z3+bj1YJCPtUNyIzC9a3YYfRwlB1ckjgJaCURcXpImdkDtdpl3GP2mtDp9O52ZDAQVAJFVA3wFFV1G+qjqGRl4cDFK7BlAs04O4fvskn26jrDYiVqgdF0pc6eIiPhAJg/1BabciIggV78rEnEg6jiNJ8AhUmKLo8JOvL/C3m1mfcaUbU2K7oK8damVm8BSmIypHMJfCXzHIt6i+CaJLNlZ+c+MJ4WhqgPWc263/SnxO24wH0vaRtqmZ8g72SSFVa+6E65bdhSUaIejIDvILaBv+73KdUt7LGKPmqKoftErfP4grQZACnS3zQLXmnMfdzurPkKbBI1PkyT/ase2Czwu5/LwHWdWDcRQD2uZmUjndsKpbR6/xVu5Ry5VLB/ds2BrgjUp5pD+Z0U995X4yVwpr9oCNxR5r1sl+2Wv3jotf19l+safw9XwODQoURKcJiGxtJDymJvVEyl3ZEe1Izwl7SF4UqtboIYt9vEoEIilsuPPDtujnpN5pkY=","layer_level":1},{"id":"fda0598d-7e92-4b8b-be52-92ae63c3cd98","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"API客户端","description":"api-client","prompt":"创建API客户端的详细实现文档。说明RESTful API的封装设计、请求配置和响应处理机制。文档化API客户端的错误处理、重试机制和超时控制。解释请求拦截器、响应拦截器和中间件模式。说明API版本管理、URL构建和参数序列化。包含认证头自动添加、状态码处理和错误消息格式化。提供API调用的最佳实践、性能优化和调试技巧。","parent_id":"d907a8eb-795c-4060-9cdd-50d31cf39be3","order":5,"progress_status":"completed","dependent_files":"frontend/lib/api.ts","gmt_create":"2026-04-22T18:57:04.217601+08:00","gmt_modified":"2026-04-22T19:24:50.486294+08:00","raw_data":"WikiEncrypted:/umMwKXdJhL9PqhJYRia9MjBtE8cuBSpJq1+zwyrvadwhOTuxc7+NNlJizkRp6kCDsj6HmsrrrEG2WmrNf4m1kFf/yUci2Hny4otqjfpEsOXzmFIxnq13zAZFe1oDyDiHr+shS0DH1omM5IrOroFuNXfBlFlOGXuTKJ3wXXPweq+qAH9QLU237hwRdKdI1UNXoGFfFF9nN8NzOmkwSQ0cRMvswtunfw+yphm0doFqLjrjc0WUZSar4loGeSR6pOSLU8ebi/JkrnwesaWnoYc/1aUJBPdJqVPSJQzjx/Oupuf/R1ihtrn81TMYOUvEaKLk9wVSfSvjh8RGttelGQzTBNJsssgMeqcDh+Qz6r4RJeFKgaRlhn753ONhpYFsHOA/05biB01p6yVuJUR2A3I4tqTlKZ+Xt5K6nvklSqGfR/asdknv3YOkVZOtQxAjyjg/RmmtnslgrEae+k+pBRvgZU23ZT5nZ82LarvwQLYZlu2F16oJjpKEgT3cw98zGHlLEIanqAXIOhT8iR7Fwk6TTKreGcH+oOkFNmbXHWXAD9ixtGbLqoidjzBlLLSR1++hGoabWTFiJX2LKj3lCJ4z30snHEvEL5ruTnKMF+gXM+truHTDsrO5CuaWyGY3WYVTndJKFLi2PQu5FclItm6ykG7LLkMlOXcKTmOrUqOgQhgDR0R7UuPYneG3+8tP49Gar78dBGx+Da8xGwikj9K9OJYAlHpVo05oKo78qku6h+6J2fHgIvIyJPSC88Whc+HpqTBbVMAIjzOQDzTTafDZnEoLWczvFoR5x2aPLnYwXdjyljOhmpXH/bShHcfo1W4KEEzka0Yp+DMZpTiSyhBpA5iLdjZdU9RnTUPTwMtqSXfdbbf0fdgem+z3CsmiuZJVViFNkOfRqL5f7Np4ITC0v2XwLSWr/bC7gbUZiEQdwEr7jwVO1Bk6/MCzvN1G217W7/RUPA4Up/Iu6PRBPcC4dd2r16kpGY4U68Ud7F6iXnc1Twr1Znb+cuTdO4Fu2DQ","layer_level":1},{"id":"7416db23-312f-478d-8883-2fc3c41ac2e8","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"任务调度系统","description":"task-scheduling-system","prompt":"创建任务调度系统的详细文档。解释基于APScheduler的异步任务调度架构,包括调度器配置、任务队列管理和并发控制机制。详细说明查询任务的生命周期管理,包括任务创建、状态跟踪、执行监控和错误恢复。文档化异步任务处理流程,包括任务分发、执行优先级和资源管理。说明调度系统的性能优化策略、监控指标和故障处理机制。提供任务调度的配置选项、扩展方法和调试技巧。","order":6,"progress_status":"completed","dependent_files":"backend/app/workers/scheduler.py,tests/test_scheduler.py,backend/app/workers/citation_engine.py","gmt_create":"2026-04-22T18:56:47.083393+08:00","gmt_modified":"2026-04-23T15:20:09.061178+08:00","raw_data":"WikiEncrypted:VyywLMbCKto41PC5aDsBo+87rJy1wKhB+t/+dFn1cQKhRzLNGkc+cdUADwdeiVqAIwtiwaq+rwA2WFYQdbiGz8cyKHFmC9lmt3Jas1uZAz4Osy7WTe5xdzE2SEY35xhzdqPvBbNe/p8j0HjSJGFgENGbjEhhukipSO73yvj8CPLzAxa5OEqoQt3uMA0dCSgyFv2LovXFxAXl3U9omZ+jIerOmf0scDYFZ4Cjk4x8Bzb0xm/6wMRJahXUi7eKOQNBfFSlRnxNY+u8u6x0eLR9rZQJsBFNgTapyPe11i341lFAvV8GVMJsgmLfZeTV/A+CJWTGWbc7TTvNnWcbYK7l8zeSZ7dH4rEnOvERyY5kxDrOEwU/Yjdg0OIz0cgmb+dlRmAPiX3OWjxUXJg4aSEFFG16FvCKl2nOFUF8LecaPl1ENKZOzyeeouQpzJp6MwRbCvWKCbKjmM2LofkPlbYC3ljZcmitkM3M0iUQSDo8uwQ71JEBqciChTxdYCFkbs5lTGlaj7NMUVD0hinIuBaEJQ1j0Irfxqf1ncrLdx8ZNQfA0gzLgSYcvydd0BeII/j0Mao27RFzOAqYLYT4lwZn3J2ZefvqYbOF2Sifr+D0ZdG7elOtYhiRAUEHGhPSUWaoI5CpzqRPYnRva8JuLDZi4Kj0EyjpgPrSYN9dp01ryHcTMd7FaHIiskbn258Y9zpaK7mnlVvyKtjxlJL6MtuIV32lhcB+5EW7WH/6QDYQTwSBHw8UP0tyMyNbps8z+8Q5FmgH8vHxFljollei7t8eaPHYkk5rnVsXfTSQ4SjT3Ki6R/yfZ5BEnJidV+OTY4jtwp6TKE+kf6ioudhBQQXHEpufZoZaVaTZXTiIGuNSUBDlZ8hnbIS8ou6QcKMly3uw16qq1jpI+sVrLhWSLFcfRqW774uvsXptcHlY3jyOYYvgNSnLk9DHpURDX2VPzmVnzh4qOFmePV/gjmpSqLQpV1/iNIt9g3DADVd6eBWCjpp7/eefKoA1yLf1v3cLqoz1NFJZDj+xZBAIGNokT1IaiTnENcvwwJWL3xKUl+n4thAe+UgHXKJZ2an3jTF5IKjCZK3wFTIHqnkVBqLbYTnNr8t764mZT1/9wh4OKLf46TVR2knmcx1cuUtGr3Sewy3daul0qF4ixlI8qx00gkAJPhMSgdD9NphN7vd38cFIdIrhJ257ibJH98P6LFTvtBlJtLNk0e8UNLU9gvqtKe+mlotbHy1WlN3l1P02b370hBTcnBA0JVykYqIO2Yux+kvP"},{"id":"dd12cc44-0c95-45d5-a726-e7b8bcf2531b","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"API接口文档","description":"api-documentation","prompt":"创建GEO平台的完整API接口文档。详细记录所有RESTful API端点,包括HTTP方法、URL模式、请求参数和响应格式。文档化认证接口的JWT令牌管理、用户注册登录和权限验证机制。说明查询管理接口的任务创建、编辑、删除和执行功能。详细描述引用数据接口的数据查询、统计分析和上下文提取功能。文档化报告导出接口的CSV格式生成和数据导出流程。包含错误处理、状态码说明和API使用示例。","order":7,"progress_status":"completed","dependent_files":"backend/app/api/auth.py,backend/app/api/queries.py,backend/app/api/citations.py,backend/app/api/reports.py,backend/app/api/deps.py","gmt_create":"2026-04-22T18:56:47.083629+08:00","gmt_modified":"2026-04-23T15:19:45.663556+08:00","raw_data":"WikiEncrypted:rEJA+fDSevRLFPlWlcH+C02eArPzlHQTxpYkpRmh+m+CmPwrZOHSqyEVvpFbcfuzlCdXmMyG1qoekj03JLnUhMCX8p4fjuyWVCjGyWgOqZe7y57duQvm+59HTVelUf5p2zKcXe0BF+QDGoY0B16JqwBxz3Y81Gy9FL/tP9oUSvy1GLFQmo9ALw+6+ZxshNYMaAYjZuIQZmKyZwLkz6Lo7fc4BaK5WrdvEGmFG2VWCEklBP/N4prpXJgdgQa9/TTjsup0wmZKwrmq/DT8e2QPbXwCMPbD761xiGBcOmyriwaS1OsRl5hWA8RDMXy8StAFxKHEso2pOzgFneedAOAryo6BNtK47OjZM6n57D4XO3jjoIpt4db/IEwMD50ud3jyIs83d9/ZQsJP15jAote7wd2NlHC3C6SRJ33bMHWKMdM7RzO/7vsAkmQOdO6kmb0HkP9WWmD0JcBxtbYCUe27HlFKiPGOw7+qNMwW1D5inQAnxNsZFvskmMmNz9EwGwyI8mV1S3fnXxbZ9hYrwdcNQ/Z3kPzrfVlLm8MS1OHXimqvLbhsGxaoJO9kpPYSYVJYZDPkGVCjNOaoNt4rk9ZPU+vJF2fE8vQ3g+mePnvUBXcIT0YPI5q6P/COgOkwr/uNMb/pjjYKK35N8A7Tixh0LajVZ8O6boGN/wP2y743Mmij1WlEfi0U1mxyVLIzU4Hf/16zrZIIvtBk+L5DwQFAOmnB5Wk2SEBt/ckL2avHYwnEU8e44ilJKUDw1J5xsEkBuaZsOszKIzZfKfCaxSHZwwOR8FMAdrXUqkyhDe3xhYPHalzeNvMObnrpOIplGgnWuJXa9FAlm4P1lZAJE9M1Zjzi9GZSJVGRuh7+ab0i29L7Dk+z+KKmk2/FrJyiL2HL5NiiLqxbnAwo0jZt6xZQDNjPOlcrrDoC1rluKxSfQfy7Xyq+jg2XVbGrQg6BZOSIbTKO/0c4mvevvMKnFVtyZznBgOa+aopDSinpVeR5IGtnnCBrKnxOgMY3kdCeR8ZC9CVqYABHInpmZotbBkj2swe05IUifzeo0aYDhoDspnldRmxXikdYCLDExsIWUXmWqZtyRhNrYnROV9uXTHWcuSpm3pQrHjISeX67ERQWcong/q78tHcXNX+/4nKL+f2BswDcOCMEpy+KPlfbfJkQBSyLqYudx1UfpWzgkHhE/gAYoJqNs1CL345d2yImHRHpw2D0WzVjqCx7Ee4GubRt6SAel3qJYKYi1PPm8c++3uhVGbkxmnmaS9K8+VfA/tvH6VpTexttzjw82t0C5JRKQAYiWukBx1q6fQATjTRN0Ew3V1GW4v5ZOamAaBAvm3fewSaKJOLr1aADfGRpSUf/dg=="},{"id":"fc6f24c3-594e-4153-854f-19250834eeb1","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"测试策略","description":"testing-strategy","prompt":"创建GEO项目的测试策略文档。详细说明Pytest测试框架的配置和使用方法,包括测试夹具、模拟对象和测试数据管理。文档化单元测试的实现,包括认证模块、引用引擎、查询处理等功能的测试用例设计。说明集成测试的策略,包括API端到端测试、数据库测试和系统集成测试。提供测试最佳实践,包括测试覆盖率要求、持续集成配置和测试环境管理。包含测试调试技巧和性能测试方法。","order":8,"progress_status":"completed","dependent_files":"test_output.txt,tests/test_business_flow.py,tests/test_scheduler.py,tests/,tests/conftest.py,tests/test_auth.py,tests/test_citation_engine.py,tests/test_citations.py,tests/test_queries.py","gmt_create":"2026-04-22T18:56:47.083879+08:00","gmt_modified":"2026-04-23T21:02:44.23225+08:00","raw_data":"WikiEncrypted:Xd2Zu8BM8p49theGlFJHkHqkA5ycuMpwkltd7rjxfkZm5u2F/OCOa2rxC3NxLrZDZf5D15q4Vh8tHCK9cPrOS/yjJEFoGKYx888+pCfJVQGvOvV8lbxJ/fNWDqo3ccIMDBY5poew3y/74L1tz0L9vjHRBLPVQADCR3UfTk94UBhlYGXamKDS74D8TgPqiuz1dVhmkX95unpFQiGQxCgxeV/sDgwTl7DYpnPy4VqFJbcPHD2Xvv828icOoxqz7hWaOp/65B5Vcn9P4LVk7dQmHzrLBdrDLBe+5Rv6mDD3+Rqrv3ZX+1v7tJ1dnmaQ2ZF8tE9ttI6ENeaFys0BrcucTSrsbSDtmFINzGh/aW0G3Q/YRtNfmkC9t+R8wRSnAgYadYSkUuNTVWQRRs4JxAcn+cHODObsEdp79EwDCqcLktVlpNaLJ//B0sOyLQA741MiLH5iM6tglYaOoQ48Ydyw7Fp5U9agWwgK7yZO7REk4ZB9U+juDzjf+qUHyjIVlXUxJXg7ATsy4euCmDpjyxJGRH7Z89wWkOotsSC3igqSM391kOqbzl9P5ZiruYliru20PndDwtXbJQ0jcvvKJsK3RkIYX0ml7BOL9H7Y16TL1Jwc6DVcRkwWQ4IEKG1fJhqYcb4WI/vPDD1jIhHBe6O5VAZtPPA+SIpYJg8+/qf0FQY73EPqWe0jPuc6I2jyN7UbjUMHRAeb0sVvj18qVYb4E+KKwNZyuAs+0SvTk/nTgqFPdNrOZ923/jnJTNt2Df1p89NDS0NGeHobiC4XD8koxe9vshUUdeDjXIopttcYBg4LcWAudoq8OO07eB6xiqn/MwXPaZySdWrqr3bh2xxxaQPR/NTrfrBkN+81NO784cJEkYHfSfUzIqhLhTTNEQpfl12WDM+GnbHWCcyWuN2dvZ6Op/ZCpLO+cQhZnXFPILnCzFf8DyNrbD3niQYcOC6H1nFlaGSmx57lswjyX14vwqOB+yNR8n+xG1a7JwxscBYaNQG5kvfLaJJKpxIdSB2YIKrIwImPHtzTI1Qahh3MfLtqI99aH9p/1LMaKJQsASKr1Ja1X3dO+ZpIiQRTeDR/jdWnzBA7Hk9SjB6ALHJhLYTutqKVkeIL08U9HNeWn3BFwCthEXMHapg0Vh/guoIq1j28UwzPkqMcSynuv98uyhHfUgRbOWQ9WTDis8gPn2jxpoCZyVCAxOTfF+67GDoTn6smJmqHIkQkMjrxLVZE3FfMtXHAcZ2kG9DC1aLVFNm64bP9X/W11dT6vm5SkabIiu1AzYuZDce+Rbg73WaCMrv4sXmBpNYhYUkLRj4gwNEFSd+eOJ/GS6MZSkA7p6A73OY1PHXlRnFrcLN10/XzFaPAM8L3h4WmqYoxFNJPTx5hRuwX2MfiwZgZlaICfBuO"},{"id":"803bfef4-3985-477e-a61c-915a246d0061","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"部署与运维","description":"deployment-operations","prompt":"创建GEO项目的部署与运维文档。详细说明Docker容器化部署的完整流程,包括镜像构建、容器编排和环境配置。文档化生产环境的部署策略,包括Nginx反向代理配置、SSL证书管理和负载均衡设置。说明监控和日志管理方案,包括应用健康检查、错误追踪和性能监控。提供运维最佳实践,包括备份策略、安全配置和故障恢复流程。包含CI/CD流水线配置和自动化部署方法。","order":9,"progress_status":"completed","dependent_files":"docker-compose.yml,backend/Dockerfile,frontend/Dockerfile,backend/requirements.txt,frontend/package.json","gmt_create":"2026-04-22T18:56:47.08417+08:00","gmt_modified":"2026-04-22T19:02:23.851886+08:00","raw_data":"WikiEncrypted:0IKfLNOWe9mZfG1jVts3w2XbjO+yyEmY3ONOjrL5GjA8+3c0QEcD9OcCVHu+1BW/N5NkoQV86wegqQ9ShX8iSWP5bp76U/WBxmHscWo6tU/8QlGuoaRAEg/ev4XsKkgC39pvYnfm60PfrpsE2hL1E2GfNGgG77OCHFDgZXXNbh9eCPmSkW8+YhED55nkyvxbnzr0nBnhsGtTzPUxHW1tar+GAvP539R0R/4mYQI87YJ70yZ7fcsaLwgOXmzP3dVnnmpLv+9t7xJhpCjyQsxfBfLLWBAADnbPD/XDJUZjfKYBtzZr96wOF29GlOAKy0gF60uUu4ldT+fyQn+nYlMXrNBIPA4xv5zs0p3ITXaqvMn5CnUdObefSllD9bB5ZAVzibfAxAovDM6bFfCBg78rOiHHyhVisNUpyQVL18Ac1DA/7UfdJH03ceu0hk7swBM7UlLgBUuU8iZZq8IKLS9Hunf/aF7T2fuFhJB+LGpBGwV+3OqWaT6v4reKhSW8vMM4x8XvLXgDttwPeltWlMknvzqijyjE0V38mue+Fe5fYrBZIK66PxnXrGUJKvZPwyAC/8LX6Hk+M3aBWjL4QkiKpbN2/pXCR6dXuPfbswZ11T0xSYdC8m+8SmC5UAgcryC0PI+ULgqxDhrheiaPIpfOAGnPr19iY2++A+xP/IPZf4L9hg2cNxi5vJ+ws54SmeQDUdbzx15ZECbSbz9xkShlRAYOjuUB9/IpZFt7EqH7sEqsFlbF73qp72JFPp2/QYv9av/WYcw6WVtRJG4TQ/Z9jB+DN6yCeSC6B/CfK05zoF7yrVWkLPiSSVYGDSBndH9EFJEJJvzO27tkS1wZXs4fTTE1StkTjYn8EBSRVvIs3Ywg1+iM2SFYcbn3I6QCeqaXuMJ/yEJikxIeLJGlNjiShYEo2FOMQ/6Xk+TlHkxUTepgnzhxFkPq9S2dqK/ZunroHtiqObkTqfkqta9V4EreMpXtO/FUBsVUrmehzAmO7CQ53L74HnyAqFJYWA/iDUt8rABkFT69QahL9BU4bts3AKhAypInqPXBL+0v0WyatxLd1jURgSq11VX9UBNBi4li3TcoFc9wsZpX3LeH1vNueLQzvssRDfTY9doM+g0rgBXDOO59DyyOKrDDMU5D52k5KI5SJOaWWxEa24TOoTfC79Jpc6tW0zAhdvdLD6u/pfsZd693uN4RM8fMtZPh58w5rcXuEHrhVI/0JThluHDnb6a962K0mt7d1makwsRTPZvpvaTrgiaoByIyOuKY7q1L"},{"id":"2148d7d6-25c4-497f-8894-c4eb7a0d2bd7","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"开发指南","description":"development-guide","prompt":"创建GEO项目的开发指南文档。详细说明代码规范和最佳实践,包括Python代码风格、TypeScript类型规范和命名约定。文档化开发流程和工作流,包括Git分支策略、代码审查流程和版本发布管理。说明开发工具的使用方法,包括IDE配置、调试技巧和性能分析工具。提供新功能开发的指导原则,包括模块设计、接口定义和测试要求。包含常见开发问题的解决方案和故障排查方法。","order":10,"progress_status":"completed","dependent_files":"push_script.sh,frontend/tsconfig.json,frontend/tailwind.config.ts,frontend/.eslintrc.json,backend/requirements.txt,CONTRIBUTING.md","gmt_create":"2026-04-22T18:56:47.084469+08:00","gmt_modified":"2026-04-23T21:00:59.749127+08:00","raw_data":"WikiEncrypted:9b1XqHriaqPGsMtQmhzV28eiWwL8soWZUx4jD7Lpj1ZvEeRHqDXnLB57Wv0GJdW0bSai+es/AGcSLV4r5Y1zXQCgYNssGUbbdn66dv22fGk42xijVyio7TzEJPm2vZsrwpJe+/yfqkj5uigIlIv06GRfmEvdn6T8ivaGf4o8qPrbbaCqfb656Ecihx7i5F1ZXK+etNk5HJeheOAvl/WoiZD0TchF59yuuB06Rl/W0/sfm7xUtkC5QYYoo6qYsIuOIE9ynhoHFI2junjkQwS3m3E/W3kKHTNe57a56kaMBo2fa1in+LuWr0jPxfsXJWHwwN47eEs+neAYXoxz+AHzJxrd+FTvW8o+Jr7hmJjODk/1u5VGWqquek2DS33JHThmmD3ant8C85SI0QDd2Rez4xia2mCq+kIzwnOuORyodpDeIHYWrwbL0X6Q4KzwwZKXYBlWZH+PqiovtlIQpZ+FrabfOImECKTIsdYECFDGwvOvZdH09Kmi2TqBszsArbv/apEc8HtRyn3MbxlOmBZ3C86pepDzntKeY8OsRhZv1/EHc12+zlfgBxkzS7g3sZhf01vr2xPsYdFU6Zpts9eWNmMJAthuG+wyeYrGDXuGHQFbXa7Rhz/mWmDKqcUZcrGo2ScQwNuk19uCmQ5x7ZTM1iNSbKYWaJwW4jn9gG8sw9+saye/tFTCyDoaqyyumHT8s/aE3bvalg4fA4AE8RigKIlwzLKW7sZmL8sY6b3PBgIJB054DRRSUF/jEW24wPDgcW29SEG6MwyqEVCpBGvI1t7zhmmM6IRklQNvVzGaoQ5GkTDxAaMh5ULEbqPdmjMJkyTP8xtyLhrJz/UJRuvvFOpf2zyyHg8Do9zNEP/FNUbq2sjjMPwMUwZAVcU2jQvNyiUYJXLvzaYk7fSEr74I3YbU9XE+/dofBpCd8tPG/BmV09UZCVgI3UrSRYd+GcgziKhnbDf/UVR691bhj4lUBtNzyNM2AnUWoQN9IMyjpMEo6EDlTrIL6wqn36aRNqPibx1vbsAdFAwmJQbf0oVZ43AGDJde58EOtIh6QzXdY5yj+UYIl8iCXO0VtnMm79ouguB3g59SOTIbv6X/iFjQ3rvERX6pFPBI9GyKfhKQTwib98D+9pkHnU2n625WeukHx67ieQLvZ7pZLfqMYTEQvo80N0JfbAP4FNz4Mtuc7jpXm2JyV/tAI/Y4Lbx1KMUq2mDsZRamD6HWF61GEGr94VsrM8kFcf2RHb9C6Lt3EuKlasgwJqSnr8iO5oONILiT"},{"id":"b2bb2e3c-5661-497c-97dd-15bf6ee8b7d4","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"扩展与定制","description":"extension-customization","prompt":"创建GEO项目的扩展与定制文档。详细说明系统的扩展机制,包括新增API接口、前端页面扩展和数据模型扩展的方法。文档化配置定制选项,包括环境变量配置、功能开关和性能调优参数。说明第三方集成的扩展方法,包括新AI平台接入、新数据库支持和新认证方式的集成流程。提供插件系统的使用指南和扩展开发的最佳实践。包含系统定制化的案例研究和实施建议。","order":11,"progress_status":"completed","dependent_files":"backend/app/workers/platforms/base.py,backend/app/models/,frontend/components/,backend/app/api/","gmt_create":"2026-04-22T18:56:47.085228+08:00","gmt_modified":"2026-04-22T19:03:46.033162+08:00","raw_data":"WikiEncrypted:9tFZPEMPWdLFkkE2XbXYMuMB8FuOYQ0fj+/JXYKsHGVuXRejugUICkyxL86Ju3MeDs2yZuuby22yn9F5xTbpPvuSC/FoLxV09I2ZpvfpcQFUCVmZyQN67BPwYA36FWIbbHI5AJYWayiJUo+io2WnBda4ESUkmi1Ifq6VpdD6Et8Rw2b8dgDDMxi9XaN9V0JJWAK4CsV0ZYGNAK947J00M9KveVb322Q2MkjA5aw0eylKLH0fzY4qNXNGDmfCOuncuvGiH/5DvAXCDuDLYzVd1AHr/9UgPCvmp017Oo8KijVdD66YD+QM7Rh+24GqNvD5xFbOQGd7ey9Mzs33E6JIrsbUhBvbLJOVlRo0EdScVPZsU4HO6zqDAg0ozD1a5kGX/WxHBvhKBJATucW9vC2XG5g21SjjE6NdebD3z3ZjN+cu8jYHMi1BwWhOmvNRvN8HIGjzntLglg7fNrii0iJXTxpZ8Mbpmu6Tk88oMecsGleuA2xhK1yEWycuQ2dZn5e179BE3mGaSOT0Fvp5yXgL4htvqVTAu4QZ+JFJVk8e4NkI2KaoEgS8vmkD+tvnSal6LUgMzXvRJVj5c7y5LEqxY7QwEbvunmtmHaw9xxVNmfj54tFWSDCSUVCBp+otUfdEq+e6UMOQ64QITUXyYlP+zGW5J0ZWBf9GlU5j70IekNuO3mLp/yU922OD64PhCEL3HOTmAtV1L1vunWchdtvyht6rkYuys0Al1WSGeCmVT23fmJlSuKe++K/qQ/TheLhgA4euY3OnlacLzbia76+B2p4tJY+XvzzDZ5c3M6YdKmW0+iKB+TRJgVz1Q8GpFIzUk/ShBam/TanUxOcC0ci89hjchiYImL1tQeigX4Rgfcn8mXYH956z7eyiSYtqk7uIsQYfiW7tqvcyN0jJpGUVHd9IzvK2NAC+ICHilErsg5hRJ66KFaugTnjd2WoIkU8rktkywDasvD24NZM417z8B8l8uHq9XNcg+2bdPA9hqx5ujEUiGXyWkBNvwCZXg9aL2q+4y5NMoZh6ak8uEjC1kc1S61q2kFyKyIjV7QbCMaHhjnrBnkSg/kV2cGrBPeOqWdtANBw5wZ/OJ38FLWJ5nPOzreTmQ/R6J6YNCfmRPpfpVj0tH0o+0rffNxxXa2TnUbu4OSSLdCljK6CsfuYmBOStwIQtEs8T8/+PsrbQKY9NM1KHqhg5Nk72UNylvGupV/Zccfjg3z78M9uUqtXSOA=="},{"id":"8e3d62e8-ddbe-4820-bc41-7da9e91ea598","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"故障排除与FAQ","description":"troubleshooting-faq","prompt":"创建GEO项目的故障排除与常见问题解答文档。详细列举和解决常见的认证问题、数据库连接问题、API调用问题和性能问题。提供系统监控和诊断的方法,包括健康检查、错误日志分析和性能指标监控。说明调试技巧和工具使用,包括开发环境调试、生产环境问题排查和性能分析方法。包含常见错误代码的含义和解决方案,以及预防性维护的最佳实践。提供紧急情况下的故障恢复流程和应急处理方案。","order":12,"progress_status":"completed","dependent_files":"backend/app/main.py,backend/app/config.py,frontend/lib/api.ts,docker-compose.yml","gmt_create":"2026-04-22T18:56:47.085508+08:00","gmt_modified":"2026-04-22T19:04:06.13183+08:00","raw_data":"WikiEncrypted:CaKOW8OSSWs4aEYk06Hu0tuZET5JxbVXxA/4vFailoRiq8l6SCRMdp2PbHfZPheZXyPTAgE3AT8Ce8j9xPOCdJxNKAOstuOjZEIRRi9OOYwoluR4MUnob24X+IyLHwTgsJGf9uPY1LVFTI9RTQt8aG1cBHibaRNEJ8+DVkXJW/EDypOxFpOxDxlaCscMdiPRLwhr9V4vJqWV9j2rk1LjP2/M8SJJQ8hbaDoeLevKdECB+aEw9JrL9ycGW0dhxKxQLf/ril9zNHrvahlSXbVZSZ39dpBl57NdFcFaOYt+paf3O6hv3bCTAKGLTRnYa/IuAZ6Xa7YnhqaGQ684LKCBz6VySRNYVUCEvZotYHf1IQdWOj0zFzR7LEIEikIlZyKak++yTNYfbQyBEzye3g6YCmlh6VaVmtGIRzjOYpu0K1UftNcRa1mWnIMrB/Pqe9DpNTg+Yxo3ZHrPyv3ZAmrd8MqA+T+P+/NerCmFD3dRf94NLPP8KU7in+VSfEjVmdE0N+3OfntU+uvNL/kkOhyWNRUKYKFxbqdwCTKqv3Nchs73XyhfNRP7gPkR/stgnowCRnKWS4ncUEJDZTWVFID52kE8nH7Kq/yuB5bJxFX9AeUUaNSBgvMc5YNkq3vULFEqC1/N0bpU4r9+0/U/BcMktmNrRr1HnOIPl3QzwjIsT3j2lp4UXS3Qm4BZFJsh8MVLfgOIMbO1jbuGCXHl88T/rZOCNwf4q93vWo2HnOxDkbdICWgZ9dinRr85RkFQjNWlXdAk0XG8lQPotwJLvS+ZASOv1aWyL42jk/mTJcOU53PFT5rf3+WpVmhNWQGguZ0l04eubO4Va39c6h/+DNsl0OEAiozIMohEgz77qsD47Kf0KZMLnqL3o30TYXYamX/CP8+epBqSWgmzX/ETrrRl/1/JPkSDc//0VC8UmWBJAsdUdzyQh9v9iQddyIZ4MV1k4MGTJ6GwrUqVTszShZJVG80wDMLQvJGqJ0T5rH1P7kBaJ5nBnth822MBy7B1IhN6nDqtLhOJcqT8Qt6x8ODGFx1QMNBdS4lHq5IcRy+nZKiPP3V7uMuuFQsNNodTRhmNnuAliJACWS89hPiGroan2VkusxIu2DW8wdQ/3Z31mIn4cE3O3+Aq6lO+BEMAuYh5WkOEmGsF3cjX/zPPiuBSP7Vd2a9o6gPA7MBfneMWyqodMp6PKh7EG26gaKUaIGq6VkQobSAVfbLxmfIMW6cZ5STH4U1/A7gV2PeuWzwwEJz7axGVQIJ6A9geQevZvD/cnX6BQBuOMkdAOB6PApCpQA=="}],"wiki_items":[{"catalog_id":"1bb55e12-24c4-42cb-8f59-ddc303460d45","title":"项目概述","description":"project-overview","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"34e572eb-6fc8-4de7-8061-63783ef8be24","gmt_create":"2026-04-22T18:58:50.323135+08:00","gmt_modified":"2026-04-22T18:58:50.329272+08:00"},{"catalog_id":"e3ae8925-4862-4280-b85a-0b376841b15e","title":"快速开始","description":"getting-started","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"7f028ad1-e989-43ea-b945-c79c33e6f0e3","gmt_create":"2026-04-22T18:58:54.232866+08:00","gmt_modified":"2026-04-22T18:58:54.238013+08:00"},{"catalog_id":"7c2ac186-ec90-400a-ac1d-b3b7ca2f01d5","title":"后端系统架构","description":"backend-architecture","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"c7eb113b-b503-4d83-be7f-9ccf3350c9d9","gmt_create":"2026-04-22T18:59:20.999631+08:00","gmt_modified":"2026-04-22T18:59:21.004772+08:00"},{"catalog_id":"d907a8eb-795c-4060-9cdd-50d31cf39be3","title":"前端系统架构","description":"frontend-architecture","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"3af3bb9e-4d99-4dc3-b1ed-2686db385c26","gmt_create":"2026-04-22T18:59:54.989699+08:00","gmt_modified":"2026-04-22T18:59:54.994419+08:00"},{"catalog_id":"243a1a45-d31f-405e-a3b9-694d2fe617d5","title":"数据库设计","description":"database-design","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"ffbb970e-56e0-40ad-bd88-1a1e55482d96","gmt_create":"2026-04-22T19:00:15.762815+08:00","gmt_modified":"2026-04-23T20:35:45.9226+08:00"},{"catalog_id":"7416db23-312f-478d-8883-2fc3c41ac2e8","title":"任务调度系统","description":"task-scheduling-system","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"deb919cc-9541-4ed7-a581-ae2876ea67c2","gmt_create":"2026-04-22T19:01:21.979952+08:00","gmt_modified":"2026-04-23T15:20:09.061378+08:00"},{"catalog_id":"7e66719b-4a8a-484d-889d-10fdc76788bb","title":"AI平台集成","description":"ai-platform-integration","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"cfc48cde-e1c3-47f6-afe2-a6d7a8f4ab69","gmt_create":"2026-04-22T19:01:25.981164+08:00","gmt_modified":"2026-04-23T20:31:36.620216+08:00"},{"catalog_id":"dd12cc44-0c95-45d5-a726-e7b8bcf2531b","title":"API接口文档","description":"api-documentation","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"49915365-e38e-43b5-beac-6aa7d5a74cbb","gmt_create":"2026-04-22T19:01:28.269494+08:00","gmt_modified":"2026-04-23T15:19:45.663706+08:00"},{"catalog_id":"803bfef4-3985-477e-a61c-915a246d0061","title":"部署与运维","description":"deployment-operations","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"98909ecc-fceb-4ab7-a26f-741838eb2e50","gmt_create":"2026-04-22T19:02:23.847103+08:00","gmt_modified":"2026-04-22T19:02:23.852058+08:00"},{"catalog_id":"2148d7d6-25c4-497f-8894-c4eb7a0d2bd7","title":"开发指南","description":"development-guide","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"643984fc-5a57-498b-8f25-68cc318d9d82","gmt_create":"2026-04-22T19:02:27.517117+08:00","gmt_modified":"2026-04-23T21:00:59.749244+08:00"},{"catalog_id":"fc6f24c3-594e-4153-854f-19250834eeb1","title":"测试策略","description":"testing-strategy","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"b0c36b2b-bb03-4624-933d-c1f6a320b7ca","gmt_create":"2026-04-22T19:02:30.709013+08:00","gmt_modified":"2026-04-23T21:02:44.232375+08:00"},{"catalog_id":"7c3e3c0b-5d1f-4d64-99be-668041c6cd9d","title":"核心框架配置","description":"core-framework","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"f94da0b4-8a07-4de1-b0b3-d3b32a12c3c1","gmt_create":"2026-04-22T19:03:21.689103+08:00","gmt_modified":"2026-04-22T19:03:21.693211+08:00"},{"catalog_id":"b2bb2e3c-5661-497c-97dd-15bf6ee8b7d4","title":"扩展与定制","description":"extension-customization","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"c5849940-e223-4222-be17-aa0a6cb36bc8","gmt_create":"2026-04-22T19:03:46.027426+08:00","gmt_modified":"2026-04-22T19:03:46.033304+08:00"},{"catalog_id":"8e3d62e8-ddbe-4820-bc41-7da9e91ea598","title":"故障排除与FAQ","description":"troubleshooting-faq","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"85306af2-0edf-42b8-b7ad-c03e769cb1e8","gmt_create":"2026-04-22T19:04:06.127415+08:00","gmt_modified":"2026-04-22T19:04:06.131953+08:00"},{"catalog_id":"bcaa04da-04e3-427f-ba01-847ad657e78a","title":"Next.js应用配置","description":"nextjs-app-config","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"c112a3f4-b0a1-4c4a-a325-e3ede8c90be6","gmt_create":"2026-04-22T19:04:47.356556+08:00","gmt_modified":"2026-04-22T19:04:47.361504+08:00"},{"catalog_id":"9e3d703f-f424-47f4-84df-b99873b93e5a","title":"项目介绍","description":"project-introduction","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"2793782c-91c8-4052-b9db-39513426c736","gmt_create":"2026-04-22T19:05:00.372036+08:00","gmt_modified":"2026-04-22T19:05:00.376145+08:00"},{"catalog_id":"a06436ee-1678-4a51-bbf8-b0d0ac3456b9","title":"数据库架构","description":"database-architecture","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"d5c75004-b01b-416f-850a-4791c5489a32","gmt_create":"2026-04-22T19:05:13.619093+08:00","gmt_modified":"2026-04-22T19:05:13.624074+08:00"},{"catalog_id":"7fea5a24-e6de-4003-bc70-9dae6d8fdb25","title":"适配器架构设计","description":"adapter-architecture","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"37003fc0-1cf5-4264-996b-40807001875f","gmt_create":"2026-04-22T19:06:14.01196+08:00","gmt_modified":"2026-04-22T19:06:14.016291+08:00"},{"catalog_id":"b027f234-4ac5-4d6d-9b38-afc8054325f5","title":"单元测试","description":"unit-testing","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"8150ddbb-7aa9-48d0-9953-2ef55e4bcfd5","gmt_create":"2026-04-22T19:06:55.084551+08:00","gmt_modified":"2026-04-22T19:06:55.090188+08:00"},{"catalog_id":"940e5918-1689-4001-a284-44f2de75b8ee","title":"认证接口","description":"authentication-api","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"7c7564ee-7fe2-4555-8ff0-4ec1b757997a","gmt_create":"2026-04-22T19:07:12.352034+08:00","gmt_modified":"2026-04-22T19:07:12.356599+08:00"},{"catalog_id":"78288302-33bd-44f7-8b29-24f516c8b6bb","title":"调度器设计","description":"scheduler-design","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"a1cc822d-5382-431c-8c49-cf398fb5eb3c","gmt_create":"2026-04-22T19:07:22.166733+08:00","gmt_modified":"2026-04-23T20:33:30.132576+08:00"},{"catalog_id":"6406f42a-e10b-4a2b-84a5-0a21c1c759ea","title":"代码规范","description":"code-standards","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"13c568d2-dfa7-4d1b-81c0-dfef247cbb67","gmt_create":"2026-04-22T19:07:51.271116+08:00","gmt_modified":"2026-04-22T19:07:51.274241+08:00"},{"catalog_id":"a91fff3d-ec5e-43df-8176-22f0084109ef","title":"功能扩展","description":"feature-extension","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"d2c7157d-157f-4990-8f76-11f3ea5435f7","gmt_create":"2026-04-22T19:08:25.13644+08:00","gmt_modified":"2026-04-22T19:08:25.14088+08:00"},{"catalog_id":"e8ec6ac6-ad1a-4332-a7be-727b47d71233","title":"Docker容器化部署","description":"docker-containerization","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"1ed0b482-3d6a-4bfd-af40-47a5d1f3e802","gmt_create":"2026-04-22T19:08:34.079807+08:00","gmt_modified":"2026-04-22T19:08:34.084736+08:00"},{"catalog_id":"c19260e2-5163-43d4-b35a-b48aae995f4a","title":"认证系统","description":"authentication-system","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"df661133-efbf-43fe-97c3-f581c81f47a7","gmt_create":"2026-04-22T19:09:25.676813+08:00","gmt_modified":"2026-04-22T19:09:25.682345+08:00"},{"catalog_id":"9b71fe02-5927-4a19-8db8-66eb129ecd9a","title":"认证系统前端实现","description":"auth-system-frontend","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"2b32ec11-d228-42c0-9232-103ba7e44f71","gmt_create":"2026-04-22T19:09:48.743111+08:00","gmt_modified":"2026-04-22T19:09:48.747746+08:00"},{"catalog_id":"b80dc237-1a6a-401f-9f4d-14190edebcdd","title":"技术栈","description":"technology-stack","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"e23bd86e-b4ac-40eb-b1c1-38d929fd5419","gmt_create":"2026-04-22T19:09:54.21211+08:00","gmt_modified":"2026-04-22T19:09:54.216205+08:00"},{"catalog_id":"7e5c3b8e-5aa3-448d-ae52-d5a96a413b0b","title":"表结构设计","description":"table-schema-design","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"c3fa653f-8dd7-41fe-8c2e-8b60adbf70f4","gmt_create":"2026-04-22T19:10:23.573187+08:00","gmt_modified":"2026-04-22T19:10:23.576944+08:00"},{"catalog_id":"cc7a1f1b-c70e-4c61-bfbc-6dc408a12ff2","title":"查询执行流程","description":"query-execution-flow","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"2fc79486-ec65-4533-860a-89c8877c2ea0","gmt_create":"2026-04-22T19:11:29.34722+08:00","gmt_modified":"2026-04-22T19:11:29.353951+08:00"},{"catalog_id":"fec685a0-c9bb-4048-baf4-40b56b2aa29c","title":"集成测试","description":"integration-testing","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"8c17b44f-1586-459b-a83d-c9b961cd2142","gmt_create":"2026-04-22T19:12:37.811472+08:00","gmt_modified":"2026-04-22T19:12:37.820956+08:00"},{"catalog_id":"9fe32b83-3697-4939-8b10-524f5ed3e65e","title":"Kimi平台集成","description":"kimi-platform-integration","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"2126339b-b0f5-4152-924b-cbe028cd0c39","gmt_create":"2026-04-22T19:12:57.009145+08:00","gmt_modified":"2026-04-23T20:35:18.737804+08:00"},{"catalog_id":"b10c2334-a850-471a-9851-a1c698e3a485","title":"查询管理接口","description":"queries-api","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"74d3018f-4e23-4687-8bf4-7fb403f479f7","gmt_create":"2026-04-22T19:13:13.111099+08:00","gmt_modified":"2026-04-23T20:33:57.632097+08:00"},{"catalog_id":"0c1d3542-92cf-4796-8dba-82caf2f7b361","title":"开发流程","description":"development-workflow","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"222a9371-45c1-4e0d-b1da-e8ada1c501c2","gmt_create":"2026-04-22T19:13:23.079488+08:00","gmt_modified":"2026-04-22T19:13:23.082539+08:00"},{"catalog_id":"109a8fb1-6619-4bc7-8481-e28cc2127d24","title":"生产环境部署","description":"production-deployment","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"26f80935-eac2-44ee-bcdb-d6a79c537750","gmt_create":"2026-04-22T19:13:58.693673+08:00","gmt_modified":"2026-04-22T19:13:58.69756+08:00"},{"catalog_id":"4d5ac6d7-8812-414b-b8df-68574cc36d7d","title":"配置定制","description":"configuration-customization","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"e1e0bd0e-01b3-4543-9781-d9beb32b9a57","gmt_create":"2026-04-22T19:14:17.837895+08:00","gmt_modified":"2026-04-22T19:14:17.84356+08:00"},{"catalog_id":"159f2ccf-71b7-4d1b-a4c4-c15b23a4126e","title":"API接口设计","description":"api-design","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"11936bb5-374f-40f4-bb53-b75264fc4b9d","gmt_create":"2026-04-22T19:15:14.073829+08:00","gmt_modified":"2026-04-22T19:15:14.079089+08:00"},{"catalog_id":"9cc59a5a-f597-4707-b994-b6c49514d553","title":"页面组件设计","description":"page-components","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"ba0390b3-c249-4e92-a3c8-6820343aeda9","gmt_create":"2026-04-22T19:15:16.958138+08:00","gmt_modified":"2026-04-23T15:19:43.818584+08:00"},{"catalog_id":"f70f5d9b-d7c7-4dc6-b36a-5f4508e6acaa","title":"系统架构","description":"system-architecture","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"70b3948e-f456-42d2-b7ad-a0097ad5ee5f","gmt_create":"2026-04-22T19:15:17.448445+08:00","gmt_modified":"2026-04-22T19:15:17.452857+08:00"},{"catalog_id":"816a2805-76c9-4f32-a3cf-96428208081e","title":"数据模型","description":"data-models","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"262a3941-fdc6-46b0-b767-be40aa9d5761","gmt_create":"2026-04-22T19:16:35.087998+08:00","gmt_modified":"2026-04-23T15:21:46.785271+08:00"},{"catalog_id":"64cbb894-755f-47b5-854e-c26c7821e9b2","title":"文心平台集成","description":"wenxin-platform-integration","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"fab60eaf-9652-4cb5-9f9e-0525caa62d63","gmt_create":"2026-04-22T19:16:36.921828+08:00","gmt_modified":"2026-04-23T20:31:50.506906+08:00"},{"catalog_id":"412f8cb5-54c1-4f32-8966-fa0e5e75bbca","title":"性能优化","description":"performance-optimization","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"d8e2cef5-37e6-44e7-8a7b-9bd365b82a72","gmt_create":"2026-04-22T19:16:37.806188+08:00","gmt_modified":"2026-04-22T19:16:37.81795+08:00"},{"catalog_id":"2f7fa0ab-cd3d-4f45-a1c1-389d5a0c2561","title":"开发工具","description":"development-tools","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"979be617-a83d-4db9-b73e-38581348f8c1","gmt_create":"2026-04-22T19:17:43.348035+08:00","gmt_modified":"2026-04-22T19:17:43.3539+08:00"},{"catalog_id":"40ac97e8-7ef0-4198-82d7-d2e332be9d34","title":"测试最佳实践","description":"test-best-practices","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"05e59a75-d52f-42e1-a924-f6a32f06f2fe","gmt_create":"2026-04-22T19:17:48.811042+08:00","gmt_modified":"2026-04-22T19:17:48.815559+08:00"},{"catalog_id":"41a414d2-e13a-497c-8a03-212624dbf5fe","title":"引用数据接口","description":"citations-api","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"737f8d6c-bd8f-4c11-b142-71a400423323","gmt_create":"2026-04-22T19:18:18.048509+08:00","gmt_modified":"2026-04-22T19:18:18.055466+08:00"},{"catalog_id":"2713d5c6-c6b0-4a38-83f6-56940c2bf695","title":"监控与日志管理","description":"monitoring-logging","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"eb1288f7-5ea1-413a-8f54-4f870306d14d","gmt_create":"2026-04-22T19:18:41.294736+08:00","gmt_modified":"2026-04-22T19:18:41.773932+08:00"},{"catalog_id":"c8a468af-2982-4d9c-82c0-313b5d2ee89c","title":"第三方集成","description":"third-party-integration","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"e9a02c86-236b-49cb-bbed-9462ee123c04","gmt_create":"2026-04-22T19:19:17.34688+08:00","gmt_modified":"2026-04-22T19:19:17.362503+08:00"},{"catalog_id":"9eee7fab-6cd9-4ef3-9415-2f8137f1d199","title":"数据模型设计","description":"data-models","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"23ad3419-5473-4e2c-ac87-d9715090279d","gmt_create":"2026-04-22T19:19:19.260533+08:00","gmt_modified":"2026-04-22T19:19:19.282116+08:00"},{"catalog_id":"f210509a-2381-46fe-8c22-0ed768e6ca70","title":"数据库迁移","description":"database-migration","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"7c0201f7-9e02-4cba-9ee1-81c3477f049a","gmt_create":"2026-04-22T19:20:15.023549+08:00","gmt_modified":"2026-04-22T19:20:15.06665+08:00"},{"catalog_id":"d9e45b2a-6443-4a9b-8ed3-4c3c04773772","title":"UI组件库","description":"ui-component-library","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"760610d4-dff6-4c6d-831f-7c9078db86a6","gmt_create":"2026-04-22T19:20:16.20858+08:00","gmt_modified":"2026-04-23T15:22:23.574113+08:00"},{"catalog_id":"178b681f-d013-44b7-aef8-dee7ca8c22a9","title":"核心功能","description":"core-features","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"1c4316a1-f1d7-46da-bcfc-ea2fa0c56110","gmt_create":"2026-04-22T19:20:37.644038+08:00","gmt_modified":"2026-04-22T19:20:37.649918+08:00"},{"catalog_id":"ac0658da-7670-4e41-9e57-02d9d0d50680","title":"报告导出接口","description":"reports-api","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"ae62f4a8-8840-4c8e-9a42-3373370299ff","gmt_create":"2026-04-22T19:21:24.241821+08:00","gmt_modified":"2026-04-22T19:21:24.246484+08:00"},{"catalog_id":"aad61788-1dc9-4682-b743-47188d7aecb6","title":"引用检测算法","description":"citation-detection-algorithm","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"00359e45-209d-4be3-8795-50dea52bdba1","gmt_create":"2026-04-22T19:21:33.106655+08:00","gmt_modified":"2026-04-22T19:21:33.125906+08:00"},{"catalog_id":"7cb1d921-44ed-4e22-8bf9-baba7ff8b7c7","title":"新功能开发","description":"feature-development","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"422c46b3-e69c-4023-a878-411a48ae182f","gmt_create":"2026-04-22T19:21:46.910999+08:00","gmt_modified":"2026-04-22T19:21:46.916175+08:00"},{"catalog_id":"c45e66b9-1ca0-41da-a796-6b98f394faa1","title":"运维最佳实践","description":"maintenance-operations","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"aa6db9b6-71e1-4497-a0e2-f3ff25358d3a","gmt_create":"2026-04-22T19:22:39.442855+08:00","gmt_modified":"2026-04-22T19:22:39.447035+08:00"},{"catalog_id":"bfca5ffe-8905-4ac2-a0a3-8e4dc43533b1","title":"数据可视化","description":"data-visualization","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"a40267bc-925a-4364-a01f-b96d3df60aea","gmt_create":"2026-04-22T19:23:03.398982+08:00","gmt_modified":"2026-04-22T19:23:03.405853+08:00"},{"catalog_id":"05214c1a-d804-4f3c-9048-20ba4de3be0f","title":"引用检测引擎","description":"citation-engine","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"19e75845-5147-4aeb-90be-16f3aa270465","gmt_create":"2026-04-22T19:23:12.049419+08:00","gmt_modified":"2026-04-23T20:33:37.372858+08:00"},{"catalog_id":"b32b024e-2d06-45c8-94c2-a07fd25ab9b3","title":"快速开始","description":"quick-start","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"7e679d62-c415-4d6a-a7e5-d41d00e0ed69","gmt_create":"2026-04-22T19:23:49.794133+08:00","gmt_modified":"2026-04-22T19:23:49.797304+08:00"},{"catalog_id":"850fc702-3eb6-45b4-acd2-ae87fec1f4f1","title":"工作器系统","description":"worker-system","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"83fe6837-7874-4467-8114-103062f15f58","gmt_create":"2026-04-22T19:24:30.524061+08:00","gmt_modified":"2026-04-22T19:24:30.529283+08:00"},{"catalog_id":"fda0598d-7e92-4b8b-be52-92ae63c3cd98","title":"API客户端","description":"api-client","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"7bd2c461-81b0-48e8-8cb3-b4b14305806d","gmt_create":"2026-04-22T19:24:50.482622+08:00","gmt_modified":"2026-04-22T19:24:50.486476+08:00"},{"catalog_id":"15d6170d-716c-4d2a-833d-81211a59027c","title":"平台适配器扩展指南","description":"platform-adapter-extension","extend":"{}","progress_status":"completed","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","id":"2632a6f9-774e-4a91-94da-a984bdb20758","gmt_create":"2026-04-22T19:25:18.714623+08:00","gmt_modified":"2026-04-22T19:25:18.720105+08:00"}],"wiki_overview":{"content":"\u003cblog\u003e\n\n# GEO 平台项目全面分析\n\n## 1. 项目介绍\n\n### 目标与愿景\nGEO 平台是一个基于人工智能技术的学术查询与引用管理系统,旨在为用户提供智能化的品牌引用检测和数据分析服务。该项目通过集成多个AI平台,实现对网络内容中特定品牌引用的自动检测和统计分析。\n\n### 核心目标\n- **智能引用检测**:自动识别网络内容中对特定品牌的引用情况\n- **多平台集成**:支持多个AI平台的数据获取和处理\n- **实时监控**:提供定时查询和实时更新功能\n- **数据可视化**:通过图表展示引用趋势和统计数据\n\n### 目标用户\n- 学术研究人员\n- 市场分析师\n- 品牌监测机构\n- 内容创作者\n\n## 2. 技术架构\n\n### 整体架构设计\n\n```mermaid\ngraph TB\n subgraph \"前端层\"\n FE[Next.js 前端]\n UI[React 组件]\n Auth[认证系统]\n end\n \n subgraph \"后端层\"\n API[FastAPI API]\n WS[工作器]\n SCH[调度器]\n end\n \n subgraph \"数据层\"\n DB[(PostgreSQL)]\n RD[Redis 缓存]\n end\n \n subgraph \"AI平台\"\n WX[Wenxin 平台]\n KM[Kimi 平台]\n end\n \n FE --\u003e API\n UI --\u003e FE\n Auth --\u003e FE\n API --\u003e DB\n API --\u003e RD\n WS --\u003e WX\n WS --\u003e KM\n SCH --\u003e WS\n API --\u003e WS\n```\n\n### 核心设计模式\n- **分层架构**:清晰的前后端分离和业务逻辑分层\n- **异步编程**:基于 asyncio 的高性能异步处理\n- **依赖注入**:通过 FastAPI 的依赖系统管理服务\n- **适配器模式**:统一不同AI平台的接口调用\n\n### 系统关系图\n\n```mermaid\nsequenceDiagram\n participant U as 用户\n participant F as 前端\n participant B as 后端API\n participant S as 调度器\n participant W as 引用引擎\n participant P as AI平台\n \n U-\u003e\u003eF: 发起查询请求\n F-\u003e\u003eB: HTTP请求\n B-\u003e\u003eS: 触发查询任务\n S-\u003e\u003eW: 执行查询\n W-\u003e\u003eP: 调用AI平台\n P--\u003e\u003eW: 返回结果\n W--\u003e\u003eB: 处理后的数据\n B--\u003e\u003eF: 响应结果\n F--\u003e\u003eU: 展示数据\n```\n\n## 3. 关键实现\n\n### 主要入口点\n\n**后端主入口**\n- `backend/app/main.py` - FastAPI 应用主入口,包含路由注册和中间件配置\n\n**前端主入口**\n- `frontend/app/layout.tsx` - Next.js 应用布局组件,包含全局样式和提供者配置\n\n### 核心模块\n\n**数据库配置**\n- `backend/app/database.py` - SQLAlchemy 异步数据库配置和会话管理\n\n**配置管理**\n- `backend/app/config.py` - Pydantic 设置类,管理环境变量和配置参数\n\n**工作器系统**\n- `backend/app/workers/scheduler.py` - APScheduler 定时任务调度器\n- `backend/app/workers/citation_engine.py` - 引用检测引擎核心\n\n**API 路由**\n- `backend/app/api/auth.py` - 用户认证相关接口\n- `backend/app/api/citations.py` - 引用数据相关接口\n- `backend/app/api/queries.py` - 查询任务相关接口\n\n### 配置方法\n\n**Docker 配置**\n- `docker-compose.yml` - 多容器部署配置,包含数据库、缓存和应用服务\n\n**依赖管理**\n- `backend/requirements.txt` - Python 后端依赖包\n- `frontend/package.json` - Node.js 前端依赖包\n\n### 外部依赖\n\n**后端关键技术栈**\n- FastAPI + Uvicorn:高性能异步Web框架\n- SQLAlchemy 2.0:异步ORM框架\n- APScheduler:任务调度框架\n- Redis:缓存和队列存储\n- Playwright:浏览器自动化\n\n**前端关键技术栈**\n- Next.js 14:React 框架\n- Radix UI:可访问性UI组件库\n- Recharts:数据可视化图表\n- Tailwind CSS:CSS框架\n\n### 集成点\n\n**AI平台适配**\n- `backend/app/workers/platforms/kimi.py` - Kimi AI平台适配器\n- `backend/app/workers/platforms/wenxin.py` - 百度文心平台适配器\n\n**认证集成**\n- `frontend/components/providers.tsx` - NextAuth.js 认证提供者\n- `frontend/lib/auth.ts` - 前端认证工具函数\n\n### 组件关系图\n\n```mermaid\ngraph LR\n subgraph \"认证模块\"\n AUTH_API[认证API]\n AUTH_FE[认证前端]\n NEXT_AUTH[NextAuth集成]\n end\n \n subgraph \"查询模块\"\n QUERY_API[查询API]\n QUERY_FE[查询前端]\n SCHEDULER[调度器]\n ENGINE[引用引擎]\n end\n \n subgraph \"数据模块\"\n MODELS[数据模型]\n DB[(数据库)]\n REDIS[(Redis)]\n end\n \n AUTH_API --\u003e MODELS\n QUERY_API --\u003e MODELS\n ENGINE --\u003e MODELS\n AUTH_FE --\u003e AUTH_API\n QUERY_FE --\u003e QUERY_API\n SCHEDULER --\u003e ENGINE\n ENGINE --\u003e DB\n ENGINE --\u003e REDIS\n AUTH_API --\u003e DB\n QUERY_API --\u003e DB\n```\n\n## 4. 核心功能\n\n### 功能概览\n\n**用户管理功能**\n- 用户注册和登录认证\n- JWT 令牌管理和会话维护\n- 用户权限控制\n\n**查询管理功能**\n- 自定义关键词查询\n- 多平台AI数据获取\n- 定时任务调度\n- 查询历史记录\n\n**引用检测功能**\n- 品牌引用自动检测\n- 置信度评分算法\n- 竞争品牌识别\n- 文本上下文提取\n\n**数据分析功能**\n- 引用趋势图表\n- 平台对比分析\n- 统计报表生成\n\n### 实现亮点\n\n**智能匹配算法**\n- `backend/app/workers/citation_engine.py` - 实现精确匹配、别名匹配和模糊匹配三种策略\n- 支持中文和英文混合文本处理\n- 提供置信度评分和位置信息\n\n**异步任务处理**\n- `backend/app/workers/scheduler.py` - 基于 APScheduler 的异步任务调度\n- 支持多平台并发查询\n- 完善的任务状态跟踪\n\n**响应式前端界面**\n- `frontend/app/(dashboard)/` - Next.js App Router 页面组织\n- `frontend/components/charts/` - 数据可视化组件\n- `frontend/components/ui/` - 可复用UI组件库\n\n### 功能架构图\n\n```mermaid\nstateDiagram-v2\n [*] --\u003e 用户认证\n 用户认证 --\u003e 查询管理: 登录成功\n 查询管理 --\u003e 任务调度: 创建查询\n 任务调度 --\u003e 引用检测: 定时触发\n 引用检测 --\u003e 数据处理: 获取AI结果\n 数据处理 --\u003e 结果展示: 处理完成\n 结果展示 --\u003e 查询管理: 新查询\n 结果展示 --\u003e [*]: 退出系统\n \n state 查询管理 {\n [*] --\u003e 创建查询\n 创建查询 --\u003e 编辑查询\n 编辑查询 --\u003e 删除查询\n 删除查询 --\u003e [*]\n }\n \n state 引用检测 {\n [*] --\u003e 平台查询\n 平台查询 --\u003e 品牌匹配\n 品牌匹配 --\u003e 竞争检测\n 竞争检测 --\u003e [*]\n }\n```\n\n## 5. 总结与建议\n\n### 项目架构特点\n\n**架构优势**\n- 清晰的分层设计,前后端职责明确\n- 异步编程模型提升了系统性能\n- 模块化设计便于功能扩展和维护\n- 完善的错误处理和日志记录机制\n\n**技术亮点**\n- 基于现代技术栈的全栈开发\n- 智能算法与工程实践的结合\n- 完整的开发到部署流程\n- 良好的代码组织和文档规范\n\n### 改进建议\n\n**性能优化**\n- 考虑引入连接池优化数据库连接\n- 实现缓存策略减少重复查询\n- 添加限流机制防止API滥用\n\n**功能扩展**\n- 增加更多AI平台支持\n- 实现批量查询功能\n- 添加导出数据功能\n- 增强搜索过滤条件\n\n**代码质量**\n- 完善单元测试覆盖率\n- 添加API文档自动生成\n- 实现更详细的错误处理\n- 优化前端组件复用性\n\n### 下一步发展\n\n**短期目标**\n- 完善用户认证和权限系统\n- 优化引用检测算法准确性\n- 增强前端用户体验\n\n**长期规划**\n- 支持多语言和国际化\n- 实现移动端应用\n- 添加机器学习模型优化\n- 构建开发者API平台\n\nSources:\n- [main.py](backend/app/main.py)\n- [config.py](backend/app/config.py)\n- [database.py](backend/app/database.py)\n- [layout.tsx](frontend/app/layout.tsx)\n- [providers.tsx](frontend/components/providers.tsx)\n- [scheduler.py](backend/app/workers/scheduler.py)\n- [citation_engine.py](backend/app/workers/citation_engine.py)\n- [auth.py](backend/app/api/auth.py)\n- [docker-compose.yml](docker-compose.yml)\n- [requirements.txt](backend/requirements.txt)\n- [package.json](frontend/package.json)\n\n\u003c/blog\u003e","gmt_create":"2026-04-22T18:54:45.079999+08:00","gmt_modified":"2026-04-22T18:54:45.079999+08:00","id":"1e2d007d-9249-436e-8822-c9b1a31580d1","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1"},"wiki_readme":{"content":"No readme file","gmt_create":"2026-04-22T18:53:55.057287+08:00","gmt_modified":"2026-04-22T18:53:55.057287+08:00","id":"354aa9f0-35fb-44a7-98d6-034981f130e6","repo_id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1"},"wiki_repo":{"id":"1095f823-f6f5-4e66-9aad-9f0b5b6b99d1","name":"GEO","progress_status":"completed","wiki_present_status":"COMPLETED","optimized_catalog":"\".\\n├── .npm-cache/\\n│ ├── _cacache/\\n│ ├── _logs/\\n│ └── _npx/\\n├── .pytest_cache/\\n├── backend/\\n│ ├── alembic/\\n│ │ ├── __pycache__/\\n│ │ ├── versions/\\n│ │ │ ├── __pycache__/\\n│ │ │ └── 488d0bd5ab01_initial_migration.py\\n│ │ ├── README\\n│ │ ├── env.py\\n│ │ └── script.py.mako\\n│ ├── app/\\n│ │ ├── __pycache__/\\n│ │ ├── api/\\n│ │ │ ├── __pycache__/\\n│ │ │ ├── __init__.py\\n│ │ │ ├── auth.py\\n│ │ │ ├── citations.py\\n│ │ │ ├── deps.py\\n│ │ │ ├── queries.py\\n│ │ │ └── reports.py\\n│ │ ├── models/\\n│ │ │ ├── __pycache__/\\n│ │ │ ├── __init__.py\\n│ │ │ ├── citation_record.py\\n│ │ │ ├── query.py\\n│ │ │ ├── query_task.py\\n│ │ │ ├── subscription.py\\n│ │ │ └── user.py\\n│ │ ├── schemas/\\n│ │ │ ├── __pycache__/\\n│ │ │ ├── auth.py\\n│ │ │ ├── citation.py\\n│ │ │ └── query.py\\n│ │ ├── services/\\n│ │ │ ├── __pycache__/\\n│ │ │ ├── auth.py\\n│ │ │ ├── citation.py\\n│ │ │ └── query.py\\n│ │ ├── utils/\\n│ │ ├── workers/\\n│ │ │ ├── __pycache__/\\n│ │ │ ├── platforms/\\n│ │ │ │ ├── __pycache__/\\n│ │ │ │ ├── base.py\\n│ │ │ │ ├── kimi.py\\n│ │ │ │ └── wenxin.py\\n│ │ │ ├── __init__.py\\n│ │ │ ├── citation_engine.py\\n│ │ │ └── scheduler.py\\n│ │ ├── config.py\\n│ │ ├── database.py\\n│ │ └── main.py\\n│ ├── venv/\\n│ ├── Dockerfile\\n│ ├── alembic.ini\\n│ └── requirements.txt\\n├── docs/\\n├── frontend/\\n│ ├── .next/\\n│ ├── app/\\n│ │ ├── (auth)/\\n│ │ │ ├── login/\\n│ │ │ │ └── page.tsx\\n│ │ │ ├── register/\\n│ │ │ │ └── page.tsx\\n│ │ │ └── layout.tsx\\n│ │ ├── (dashboard)/\\n│ │ │ ├── dashboard/\\n│ │ │ │ ├── citations/\\n│ │ │ │ │ └── page.tsx\\n│ │ │ │ ├── queries/\\n│ │ │ │ │ └── page.tsx\\n│ │ │ │ ├── reports/\\n│ │ │ │ │ └── page.tsx\\n│ │ │ │ ├── settings/\\n│ │ │ │ │ └── page.tsx\\n│ │ │ │ └── page.tsx\\n│ │ │ └── layout.tsx\\n│ │ ├── api/auth/[...nextauth]/\\n│ │ │ └── route.ts\\n│ │ ├── fonts/\\n│ │ ├── globals.css\\n│ │ ├── layout.tsx\\n│ │ └── page.tsx\\n│ ├── components/\\n│ │ ├── charts/\\n│ │ │ ├── platform-chart.tsx\\n│ │ │ └── trend-chart.tsx\\n│ │ ├── layout/\\n│ │ │ ├── header.tsx\\n│ │ │ └── sidebar.tsx\\n│ │ ├── ui/\\n│ │ │ ├── badge.tsx\\n│ │ │ ├── button.tsx\\n│ │ │ ├── card.tsx\\n│ │ │ ├── dialog.tsx\\n│ │ │ ├── dropdown-menu.tsx\\n│ │ │ ├── input.tsx\\n│ │ │ ├── label.tsx\\n│ │ │ ├── select.tsx\\n│ │ │ ├── table.tsx\\n│ │ │ └── tabs.tsx\\n│ │ └── providers.tsx\\n│ ├── lib/\\n│ │ ├── api.ts\\n│ │ ├── auth.ts\\n│ │ ├── platforms.ts\\n│ │ └── utils.ts\\n│ ├── node_modules/\\n│ ├── types/\\n│ │ └── next-auth.d.ts\\n│ ├── .eslintrc.json\\n│ ├── .gitignore\\n│ ├── Dockerfile\\n│ ├── README.md\\n│ ├── next-env.d.ts\\n│ ├── next.config.mjs\\n│ ├── package-lock.json\\n│ ├── package.json\\n│ ├── postcss.config.mjs\\n│ ├── tailwind.config.ts\\n│ ├── tsconfig.json\\n│ └── tsconfig.tsbuildinfo\\n├── tests/\\n│ ├── __pycache__/\\n│ ├── conftest.py\\n│ ├── test_auth.py\\n│ ├── test_citation_engine.py\\n│ ├── test_citations.py\\n│ └── test_queries.py\\n└── docker-compose.yml\\n\"","current_document_structure":"WikiEncrypted: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","catalogue_think_content":"WikiEncrypted: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","recovery_checkpoint":"wiki_generation_completed","last_commit_id":"2d94fab4dd49f20f2d572dd6cad9af93e8e77e2f","last_commit_update":"2026-04-23T21:02:45.215796+08:00","gmt_create":"2026-04-22T17:58:32.591608+08:00","gmt_modified":"2026-04-23T21:02:45.215796+08:00","extend_info":"{\"language\":\"zh\",\"active\":true,\"branch\":\"main\",\"shareStatus\":\"\",\"server_error_code\":\"\",\"cosy_version\":\"\"}"}} \ No newline at end of file diff --git a/README.md b/README.md index be43b72..cd6b414 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,161 @@ -# geo +# GEO - AI搜索引擎品牌曝光度优化平台 +## 项目简介 + +GEO(Generative Engine Optimization)是一个SaaS平台,帮助品牌监测其在各大AI搜索引擎中的曝光度和引用情况。支持文心一言、Kimi、通义千问、豆包、讯飞星火、天工、清言等主流国内AI平台,以及通用搜索引擎。 + +## 核心功能 + +- **多平台品牌引用监测**:同时覆盖8个主流AI搜索平台 +- **定时自动查询与即时查询**:支持按日/周频率自动执行,也可手动触发 +- **品牌匹配分析**:精确匹配、别名匹配、模糊匹配三级策略 +- **竞品引用检测**:监测竞争对手在同一查询中的引用情况 +- **数据可视化**:引用趋势图、平台对比图等多维度图表 +- **CSV/PDF报告导出**:一键生成专业数据报告 +- **用户管理与权限控制**:JWT认证、邮箱验证、密码管理 +- **订阅套餐管理**:基于套餐的查询词数量限制 +- **管理后台**:系统级用户与数据管理 + +## 技术栈 + +| 组件 | 技术 | +|------|------| +| 前端 | Next.js 14, React 18, TailwindCSS, shadcn/ui, Recharts | +| 后端 | Python FastAPI, SQLAlchemy 2.0 (async), Pydantic v2 | +| 数据库 | PostgreSQL 15, Redis 7 | +| 认证 | JWT + NextAuth.js | +| 任务调度 | APScheduler | +| 浏览器自动化 | Playwright | +| 容器化 | Docker Compose | + +## 快速开始 + +### Docker 方式(推荐) + +```bash +# 1. 克隆仓库 +git clone +cd GEO + +# 2. 复制环境变量 +cp .env.example .env + +# 3. 启动所有服务 +docker-compose up -d + +# 4. 访问应用 +# 前端: http://localhost:3000 +# 后端 API: http://localhost:8000 +# API 文档: http://localhost:8000/docs +``` + +### 本地开发 + +#### 后端 + +```bash +cd backend +python3 -m venv venv +source venv/bin/activate # Windows: venv\Scripts\activate +pip install -r requirements.txt +alembic upgrade head +uvicorn app.main:app --reload --port 8000 +``` + +#### 前端 + +```bash +cd frontend +npm install +npm run dev +``` + +## 项目结构 + +``` +GEO/ +├── backend/ # FastAPI 后端服务 +│ ├── alembic/ # 数据库迁移脚本 +│ ├── app/ +│ │ ├── api/ # API 路由层 +│ │ │ ├── auth.py # 认证接口 +│ │ │ ├── queries.py # 查询词管理接口 +│ │ │ ├── citations.py # 引用数据接口 +│ │ │ ├── reports.py # 报告导出接口 +│ │ │ └── deps.py # 依赖注入 +│ │ ├── middleware/ # 中间件 +│ │ │ ├── rate_limit.py # 限流中间件 +│ │ │ └── logging_middleware.py +│ │ ├── models/ # SQLAlchemy 数据模型 +│ │ │ ├── user.py +│ │ │ ├── query.py +│ │ │ ├── citation_record.py +│ │ │ ├── query_task.py +│ │ │ └── subscription.py +│ │ ├── schemas/ # Pydantic 数据校验 +│ │ ├── services/ # 业务逻辑层 +│ │ ├── workers/ # 任务调度与引擎 +│ │ │ ├── scheduler.py # APScheduler 定时任务 +│ │ │ ├── citation_engine.py +│ │ │ └── platforms/ # 各平台适配器 +│ │ ├── config.py # 应用配置 +│ │ ├── database.py # 数据库连接 +│ │ └── main.py # 应用入口 +│ ├── requirements.txt +│ └── Dockerfile +├── frontend/ # Next.js 前端应用 +│ ├── app/ +│ │ ├── (auth)/ # 认证相关页面 +│ │ │ ├── login/ +│ │ │ ├── register/ +│ │ │ ├── forgot-password/ +│ │ │ └── reset-password/ +│ │ ├── (dashboard)/ # 仪表盘页面 +│ │ │ └── dashboard/ +│ │ │ ├── queries/ +│ │ │ ├── citations/ +│ │ │ ├── reports/ +│ │ │ └── settings/ +│ │ ├── api/auth/[...nextauth]/ +│ │ ├── layout.tsx +│ │ └── page.tsx +│ ├── components/ +│ │ ├── ui/ # shadcn/ui 组件 +│ │ ├── charts/ # Recharts 图表组件 +│ │ └── layout/ # 布局组件 +│ ├── lib/ # 工具函数与API客户端 +│ └── package.json +├── tests/ # 后端测试 +├── docker-compose.yml +├── .env.example +└── README.md +``` + +## API 概览 + +| 模块 | 路径前缀 | 说明 | +|------|---------|------| +| 认证 | /api/v1/auth | 注册、登录、密码管理、邮箱验证、用户资料 | +| 查询管理 | /api/v1/queries | 查询词CRUD、立即查询 | +| 引用数据 | /api/v1/citations | 引用记录查询、统计分析 | +| 报告导出 | /api/v1/reports | CSV报告生成与下载 | + +完整的 API 端点列表请参阅 [backend/README.md](backend/README.md)。 + +## 环境变量 + +| 变量名 | 说明 | 示例 | +|--------|------|------| +| `DATABASE_URL` | PostgreSQL 连接字符串 | `postgresql+asyncpg://postgres:postgres123@db:5432/geo_platform` | +| `REDIS_URL` | Redis 连接地址 | `redis://redis:6379/0` | +| `JWT_SECRET` | JWT 签名密钥 | `your-secret-key-change-in-production` | +| `JWT_EXPIRE_HOURS` | JWT 过期时间(小时) | `24` | +| `NEXT_PUBLIC_API_URL` | 前端调用后端 API 地址 | `http://localhost:8000` | +| `PLAYWRIGHT_BROWSERS_PATH` | Playwright 浏览器路径 | `/ms-playwright` | +| `ZHIPU_API_KEY` | 智谱AI API 密钥(可选) | - | +| `TONGYI_API_KEY` | 通义千问 API 密钥(可选) | - | +| `CORS_ORIGINS` | 允许的跨域来源 | `http://localhost:3000` | + +## 许可证 + +MIT diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 0000000..cc1c22a --- /dev/null +++ b/backend/README.md @@ -0,0 +1,256 @@ +# GEO 平台 - 后端服务 + +基于 Python FastAPI 构建的异步后端服务,提供 RESTful API 供前端调用。 + +## 环境要求 + +- Python 3.11+ +- PostgreSQL 15 +- Redis 7 +- Node.js 18+(如需运行 Playwright 浏览器自动化) + +## 安装步骤 + +### 1. 创建虚拟环境 + +```bash +cd backend +python3 -m venv venv +source venv/bin/activate # macOS/Linux +# 或 +venv\Scripts\activate # Windows +``` + +### 2. 安装依赖 + +```bash +pip install -r requirements.txt +``` + +### 3. 安装 Playwright 浏览器 + +```bash +playwright install chromium +``` + +### 4. 配置环境变量 + +复制项目根目录的 `.env.example` 为 `.env`,并根据需要修改配置: + +```bash +cp ../.env.example ../.env +``` + +### 5. 初始化数据库 + +```bash +alembic upgrade head +``` + +## 运行命令 + +### 开发模式(热重载) + +```bash +uvicorn app.main:app --reload --port 8000 +``` + +### 生产模式 + +```bash +uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4 +``` + +启动后访问: +- API 文档(Swagger UI):http://localhost:8000/docs +- ReDoc 文档:http://localhost:8000/redoc +- 健康检查:http://localhost:8000/health + +## API 端点清单 + +### 认证模块 `/api/v1/auth` + +| 方法 | 端点 | 说明 | 认证要求 | +|------|------|------|---------| +| POST | `/register` | 用户注册 | 无需认证 | +| POST | `/login` | 用户登录,返回 JWT Token | 无需认证 | +| GET | `/me` | 获取当前登录用户信息 | Bearer Token | +| POST | `/forgot-password` | 发送密码重置链接 | 无需认证 | +| POST | `/reset-password` | 使用令牌重置密码 | 无需认证 | +| POST | `/verify-email` | 邮箱验证码验证 | 无需认证 | +| POST | `/resend-verification` | 重新发送邮箱验证码 | 无需认证 | +| PUT | `/change-password` | 修改当前用户密码 | Bearer Token | +| PUT | `/profile` | 更新用户资料 | Bearer Token | + +### 查询词管理 `/api/v1/queries` + +| 方法 | 端点 | 说明 | 认证要求 | +|------|------|------|---------| +| GET | `/` | 获取查询词列表(分页) | Bearer Token | +| POST | `/` | 创建新查询词 | Bearer Token | +| GET | `/{query_id}` | 获取单个查询词详情 | Bearer Token | +| PUT | `/{query_id}` | 更新查询词 | Bearer Token | +| DELETE | `/{query_id}` | 删除查询词 | Bearer Token | +| POST | `/{query_id}/run-now` | 立即执行查询任务 | Bearer Token | + +### 引用数据 `/api/v1/citations` + +| 方法 | 端点 | 说明 | 认证要求 | +|------|------|------|---------| +| GET | `/` | 获取引用记录列表(支持筛选) | Bearer Token | +| GET | `/stats` | 获取引用统计分析 | Bearer Token | + +查询参数说明(`GET /`): +- `query_id`: 按查询词筛选(UUID) +- `platform`: 按平台名称筛选 +- `start_date`: 起始日期(ISO 8601) +- `end_date`: 结束日期(ISO 8601) +- `skip`: 分页偏移量,默认 0 +- `limit`: 每页数量,默认 20,最大 100 + +### 报告导出 `/api/v1/reports` + +| 方法 | 端点 | 说明 | 认证要求 | +|------|------|------|---------| +| GET | `/export/csv` | 导出查询词的引用数据为 CSV | Bearer Token | + +查询参数: +- `query_id`(必填): 要导出的查询词 ID +- `format`: 导出格式,目前仅支持 `csv` + +### 系统接口 + +| 方法 | 端点 | 说明 | +|------|------|------| +| GET | `/health` | 服务健康检查 | + +## 数据库迁移 + +本项目使用 Alembic 管理数据库迁移。 + +```bash +# 执行所有迁移(升级到最新版本) +alembic upgrade head + +# 回滚一次迁移 +alembic downgrade -1 + +# 创建新的自动迁移(修改模型后执行) +alembic revision --autogenerate -m "描述本次变更" + +# 查看当前版本 +alembic current + +# 查看迁移历史 +alembic history +``` + +## 项目结构 + +``` +backend/ +├── alembic/ +│ ├── versions/ # 迁移脚本 +│ ├── env.py # Alembic 环境配置 +│ └── script.py.mako # 迁移脚本模板 +├── app/ +│ ├── api/ # API 路由层 +│ │ ├── auth.py # 认证接口(注册/登录/密码/资料) +│ │ ├── queries.py # 查询词 CRUD 与立即执行 +│ │ ├── citations.py # 引用数据查询与统计 +│ │ ├── reports.py # CSV 报告导出 +│ │ └── deps.py # FastAPI 依赖注入(当前用户、数据库会话) +│ ├── middleware/ +│ │ ├── rate_limit.py # 基于内存的限流中间件 +│ │ └── logging_middleware.py +│ ├── models/ # SQLAlchemy ORM 模型 +│ │ ├── user.py # 用户模型 +│ │ ├── query.py # 查询词模型 +│ │ ├── citation_record.py +│ │ ├── query_task.py # 查询任务执行记录 +│ │ └── subscription.py # 订阅套餐模型 +│ ├── schemas/ # Pydantic v2 数据校验模型 +│ │ ├── auth.py +│ │ ├── citation.py +│ │ └── query.py +│ ├── services/ # 业务逻辑层 +│ │ ├── auth.py # 认证服务(密码哈希、JWT) +│ │ ├── query.py # 查询词业务逻辑 +│ │ └── citation.py # 引用数据与报告服务 +│ ├── workers/ # 后台任务与引擎 +│ │ ├── scheduler.py # APScheduler 定时调度器 +│ │ ├── citation_engine.py +│ │ └── platforms/ # AI 平台适配器 +│ │ ├── base.py +│ │ ├── wenxin.py # 文心一言 +│ │ ├── kimi.py # Kimi +│ │ ├── tongyi.py # 通义千问 +│ │ ├── doubao.py # 豆包 +│ │ ├── qingyan.py # 清言 +│ │ ├── tiangong.py # 天工 +│ │ ├── xinghuo.py # 讯飞星火 +│ │ └── search_engine.py +│ ├── config.py # Pydantic Settings 配置管理 +│ ├── database.py # 异步数据库引擎与 Session +│ └── main.py # FastAPI 应用入口与生命周期管理 +├── requirements.txt +├── Dockerfile +└── README.md +``` + +## 限流策略 + +| 接口 | 限制 | 时间窗口 | +|------|------|---------| +| 登录/注册/忘记密码 | 5 次 | 60 秒 | +| 立即查询(run-now) | 10 次 | 3600 秒 | +| 全局接口 | 100 次 | 60 秒 | + +## 测试说明 + +测试文件位于项目根目录的 `tests/` 文件夹中。 + +```bash +# 安装测试依赖(已包含在 requirements.txt 中) +pip install pytest pytest-asyncio aiosqlite + +# 运行所有测试 +cd .. # 切换到项目根目录 +pytest + +# 运行指定测试文件 +pytest tests/test_auth.py +pytest tests/test_queries.py +pytest tests/test_citations.py +pytest tests/test_citation_engine.py +pytest tests/test_scheduler.py +pytest tests/test_business_flow.py + +# 显示详细输出 +pytest -v + +# 显示测试覆盖率(需安装 pytest-cov) +pytest --cov=backend/app --cov-report=html +``` + +## 主要依赖版本 + +| 包名 | 版本要求 | +|------|---------| +| fastapi | >=0.109.0 | +| uvicorn | [standard] | +| sqlalchemy | >=2.0 | +| asyncpg | - | +| alembic | - | +| pydantic | >=2.0 | +| pydantic-settings | - | +| python-jose | [cryptography] | +| passlib | [bcrypt] | +| bcrypt | <4.0 | +| redis | - | +| apscheduler | >=3.10 | +| playwright | >=1.40 | +| httpx | - | +| fpdf2 | >=2.7 | +| pytest | >=8.0 | +| pytest-asyncio | >=0.23.0 | diff --git a/backend/alembic/versions/c3d5e7f9ab12_add_user_management_fields.py b/backend/alembic/versions/c3d5e7f9ab12_add_user_management_fields.py new file mode 100644 index 0000000..8c85bdc --- /dev/null +++ b/backend/alembic/versions/c3d5e7f9ab12_add_user_management_fields.py @@ -0,0 +1,40 @@ +"""Add user management fields + +Revision ID: c3d5e7f9ab12 +Revises: b2c4d6e8fa10 +Create Date: 2026-04-24 10:00:00.000000 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = 'c3d5e7f9ab12' +down_revision: Union[str, Sequence[str], None] = 'b2c4d6e8fa10' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Add user management fields to users table.""" + op.add_column('users', sa.Column('email_verified', sa.Boolean(), server_default='false', nullable=False)) + op.add_column('users', sa.Column('verification_code', sa.String(6), nullable=True)) + op.add_column('users', sa.Column('verification_code_expires', sa.DateTime(), nullable=True)) + op.add_column('users', sa.Column('reset_token', sa.String(255), nullable=True)) + op.add_column('users', sa.Column('reset_token_expires', sa.DateTime(), nullable=True)) + op.add_column('users', sa.Column('avatar_url', sa.String(500), nullable=True)) + op.add_column('users', sa.Column('is_admin', sa.Boolean(), server_default='false', nullable=False)) + + +def downgrade() -> None: + """Remove user management fields from users table.""" + op.drop_column('users', 'is_admin') + op.drop_column('users', 'avatar_url') + op.drop_column('users', 'reset_token_expires') + op.drop_column('users', 'reset_token') + op.drop_column('users', 'verification_code_expires') + op.drop_column('users', 'verification_code') + op.drop_column('users', 'email_verified') diff --git a/backend/app/api/admin.py b/backend/app/api/admin.py new file mode 100644 index 0000000..86e08a2 --- /dev/null +++ b/backend/app/api/admin.py @@ -0,0 +1,107 @@ +import uuid + +from fastapi import APIRouter, Depends, HTTPException, Query, status +from sqlalchemy.ext.asyncio import AsyncSession + +from app.api.deps import get_current_user +from app.database import get_db +from app.models.user import User +from app.services.admin import ( + get_system_stats, + get_user_detail, + get_users, + toggle_user_active, + update_user_plan, +) + +router = APIRouter(prefix="/api/v1/admin", tags=["admin"]) + + +async def get_admin_user(current_user: User = Depends(get_current_user)) -> User: + if not current_user.is_admin: + raise HTTPException( + status_code=status.HTTP_403_FORBIDDEN, + detail="需要管理员权限", + ) + return current_user + + +@router.get("/stats") +async def read_system_stats( + db: AsyncSession = Depends(get_db), + admin_user: User = Depends(get_admin_user), +): + return await get_system_stats(db) + + +@router.get("/users") +async def read_users( + skip: int = Query(0, ge=0), + limit: int = Query(20, ge=1, le=100), + search: str | None = Query(None), + db: AsyncSession = Depends(get_db), + admin_user: User = Depends(get_admin_user), +): + return await get_users(db, skip=skip, limit=limit, search=search) + + +@router.get("/users/{user_id}") +async def read_user_detail( + user_id: uuid.UUID, + db: AsyncSession = Depends(get_db), + admin_user: User = Depends(get_admin_user), +): + detail = await get_user_detail(db, user_id) + if detail is None: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="用户不存在", + ) + return detail + + +@router.post("/users/{user_id}/toggle-active") +async def toggle_user_active_status( + user_id: uuid.UUID, + db: AsyncSession = Depends(get_db), + admin_user: User = Depends(get_admin_user), +): + result = await toggle_user_active(db, user_id) + if result is None: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="用户不存在", + ) + return result + + +class UpdatePlanRequest: + plan: str + + +@router.put("/users/{user_id}/update-plan") +async def modify_user_plan( + user_id: uuid.UUID, + body: dict, + db: AsyncSession = Depends(get_db), + admin_user: User = Depends(get_admin_user), +): + plan = body.get("plan") + if not plan: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail="缺少 plan 字段", + ) + try: + result = await update_user_plan(db, user_id, plan) + except ValueError as e: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=str(e), + ) + if result is None: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="用户不存在", + ) + return result diff --git a/backend/app/api/auth.py b/backend/app/api/auth.py index 9b5b6b1..d7691d2 100644 --- a/backend/app/api/auth.py +++ b/backend/app/api/auth.py @@ -4,8 +4,28 @@ from sqlalchemy.ext.asyncio import AsyncSession from app.api.deps import get_current_user from app.database import get_db from app.models.user import User -from app.schemas.auth import TokenResponse, UserLogin, UserRegister, UserResponse -from app.services.auth import authenticate_user, create_access_token, register_user +from app.schemas.auth import ( + ChangePasswordRequest, + ForgotPasswordRequest, + ResetPasswordRequest, + TokenResponse, + UpdateProfileRequest, + UserLogin, + UserRegister, + UserResponse, + VerifyEmailRequest, +) +from app.services.auth import ( + authenticate_user, + change_password as change_password_service, + create_access_token, + register_user, + reset_password as reset_password_service, + send_reset_link, + send_verification_code, + update_profile as update_profile_service, + verify_email as verify_email_service, +) router = APIRouter() @@ -40,3 +60,55 @@ async def login(user_data: UserLogin, db: AsyncSession = Depends(get_db)): @router.get("/me", response_model=UserResponse) async def read_current_user(current_user: User = Depends(get_current_user)): return current_user + + +@router.post("/forgot-password") +async def forgot_password(req: ForgotPasswordRequest, db: AsyncSession = Depends(get_db)): + await send_reset_link(db, req.email) + return {"message": "如果该邮箱已注册,重置链接已发送"} + + +@router.post("/reset-password") +async def reset_password(req: ResetPasswordRequest, db: AsyncSession = Depends(get_db)): + success = await reset_password_service(db, req.token, req.new_password) + if not success: + raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="无效的令牌或令牌已过期") + return {"message": "密码重置成功"} + + +@router.post("/verify-email") +async def verify_email(req: VerifyEmailRequest, db: AsyncSession = Depends(get_db)): + success = await verify_email_service(db, req.email, req.code) + if not success: + raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="验证码无效或已过期") + return {"message": "邮箱验证成功"} + + +@router.post("/resend-verification") +async def resend_verification(req: ForgotPasswordRequest, db: AsyncSession = Depends(get_db)): + await send_verification_code(db, req.email) + return {"message": "验证码已重新发送"} + + +@router.put("/change-password") +async def change_password( + req: ChangePasswordRequest, + user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + success = await change_password_service(db, user.id, req.old_password, req.new_password) + if not success: + raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="旧密码错误") + return {"message": "密码修改成功"} + + +@router.put("/profile", response_model=UserResponse) +async def update_profile( + req: UpdateProfileRequest, + user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + updated_user = await update_profile_service(db, user.id, req) + if not updated_user: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="用户不存在") + return updated_user diff --git a/backend/app/api/reports.py b/backend/app/api/reports.py index faaf5f1..fc84ca0 100644 --- a/backend/app/api/reports.py +++ b/backend/app/api/reports.py @@ -1,14 +1,16 @@ import uuid from datetime import datetime +from typing import Optional from fastapi import APIRouter, Depends, HTTPException, Query, status from fastapi.responses import StreamingResponse from sqlalchemy.ext.asyncio import AsyncSession +from starlette.responses import Response from app.api.deps import get_current_user from app.database import get_db from app.models.user import User -from app.services.citation import export_citations_csv +from app.services.citation import export_citations_csv, export_citations_pdf router = APIRouter() @@ -44,3 +46,29 @@ async def export_report( "Content-Disposition": f'attachment; filename="{filename}"', }, ) + + +@router.get("/export/pdf") +async def export_pdf( + query_id: Optional[uuid.UUID] = None, + db: AsyncSession = Depends(get_db), + current_user: User = Depends(get_current_user), +): + try: + pdf_bytes = await export_citations_pdf(db, current_user.id, query_id) + except ValueError as e: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail=str(e), + ) + + date_str = datetime.now().strftime("%Y%m%d") + filename = f"geo-report-{date_str}.pdf" + + return Response( + content=pdf_bytes, + media_type="application/pdf", + headers={ + "Content-Disposition": f'attachment; filename="{filename}"', + }, + ) diff --git a/backend/app/api/subscriptions.py b/backend/app/api/subscriptions.py new file mode 100644 index 0000000..d11c06d --- /dev/null +++ b/backend/app/api/subscriptions.py @@ -0,0 +1,76 @@ +import uuid + +from fastapi import APIRouter, Depends, HTTPException, status +from sqlalchemy.ext.asyncio import AsyncSession + +from app.api.deps import get_current_user +from app.database import get_db +from app.models.user import User +from app.schemas.subscription import ( + PlanDetail, + SubscribeRequest, + SubscriptionHistoryResponse, + SubscriptionResponse, +) +from app.services.subscription import ( + cancel_subscription, + get_current_subscription, + get_plans, + get_subscription_history, + subscribe, +) + +router = APIRouter(prefix="/api/v1/subscriptions", tags=["subscriptions"]) + + +@router.get("/plans", response_model=list[PlanDetail]) +async def list_plans(): + return get_plans() + + +@router.get("/current", response_model=SubscriptionResponse) +async def read_current_subscription( + db: AsyncSession = Depends(get_db), + current_user: User = Depends(get_current_user), +): + sub = await get_current_subscription(db, current_user.id) + if sub is None: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="暂无订阅记录", + ) + return sub + + +@router.post("/subscribe", response_model=SubscriptionResponse, status_code=status.HTTP_201_CREATED) +async def create_subscription( + request: SubscribeRequest, + db: AsyncSession = Depends(get_db), + current_user: User = Depends(get_current_user), +): + try: + sub = await subscribe(db, current_user.id, request.plan) + except ValueError as e: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=str(e), + ) + return sub + + +@router.post("/cancel") +async def cancel_current_subscription( + db: AsyncSession = Depends(get_db), + current_user: User = Depends(get_current_user), +): + result = await cancel_subscription(db, current_user.id) + return result + + +@router.get("/history", response_model=SubscriptionHistoryResponse) +async def read_subscription_history( + db: AsyncSession = Depends(get_db), + current_user: User = Depends(get_current_user), +): + items = await get_subscription_history(db, current_user.id) + return {"items": items, "total": len(items)} diff --git a/backend/app/main.py b/backend/app/main.py index 6683dec..bf6a8b8 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -1,14 +1,24 @@ +import logging from contextlib import asynccontextmanager from fastapi import FastAPI + +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s [%(name)s] %(levelname)s: %(message)s" +) from fastapi.middleware.cors import CORSMiddleware +from app.api.admin import router as admin_router from app.api.auth import router as auth_router from app.api.citations import router as citations_router from app.api.queries import router as queries_router from app.api.reports import router as reports_router +from app.api.subscriptions import router as subscription_router from app.config import settings from app.database import engine, Base +from app.middleware.rate_limit import RateLimitMiddleware +from app.middleware.logging_middleware import RequestLoggingMiddleware from app.workers.scheduler import query_scheduler @@ -44,10 +54,28 @@ app.add_middleware( allow_headers=["*"], ) +# 安全响应头 +@app.middleware("http") +async def add_security_headers(request, call_next): + response = await call_next(request) + response.headers["X-Content-Type-Options"] = "nosniff" + response.headers["X-Frame-Options"] = "DENY" + response.headers["X-XSS-Protection"] = "1; mode=block" + response.headers["Referrer-Policy"] = "strict-origin-when-cross-origin" + return response + +# 限流中间件 +app.add_middleware(RateLimitMiddleware) + +# 请求日志中间件 +app.add_middleware(RequestLoggingMiddleware) + app.include_router(auth_router, prefix="/api/v1/auth", tags=["认证"]) app.include_router(queries_router, prefix="/api/v1/queries", tags=["查询词"]) app.include_router(citations_router, prefix="/api/v1/citations", tags=["引用数据"]) app.include_router(reports_router, prefix="/api/v1/reports", tags=["报告"]) +app.include_router(subscription_router) +app.include_router(admin_router) @app.get("/health") diff --git a/backend/app/middleware/__init__.py b/backend/app/middleware/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/middleware/logging_middleware.py b/backend/app/middleware/logging_middleware.py new file mode 100644 index 0000000..1e38049 --- /dev/null +++ b/backend/app/middleware/logging_middleware.py @@ -0,0 +1,23 @@ +import time +import logging +from starlette.middleware.base import BaseHTTPMiddleware +from starlette.requests import Request + +logger = logging.getLogger("geo.access") + +class RequestLoggingMiddleware(BaseHTTPMiddleware): + async def dispatch(self, request: Request, call_next): + start_time = time.time() + client_ip = request.client.host if request.client else "unknown" + + response = await call_next(request) + + duration = round((time.time() - start_time) * 1000, 2) + logger.info( + f"{request.method} {request.url.path} " + f"status={response.status_code} " + f"duration={duration}ms " + f"ip={client_ip}" + ) + + return response diff --git a/backend/app/middleware/rate_limit.py b/backend/app/middleware/rate_limit.py new file mode 100644 index 0000000..98c8f77 --- /dev/null +++ b/backend/app/middleware/rate_limit.py @@ -0,0 +1,82 @@ +""" +基于内存的简易限流中间件(MVP不依赖Redis) +""" +import time +from collections import defaultdict +from starlette.middleware.base import BaseHTTPMiddleware +from starlette.requests import Request +from starlette.responses import JSONResponse + +class RateLimitMiddleware(BaseHTTPMiddleware): + def __init__(self, app): + super().__init__(app) + # {key: [(timestamp, ...)]} + self._requests = defaultdict(list) + + # 限流规则 + self.rules = { + "auth": { # /api/v1/auth/login, register, forgot-password + "paths": ["/api/v1/auth/login", "/api/v1/auth/register", "/api/v1/auth/forgot-password"], + "max_requests": 5, + "window_seconds": 60, + }, + "query_run": { # run-now + "paths": ["/run-now"], # 用 endswith 匹配 + "max_requests": 10, + "window_seconds": 3600, + }, + "global": { + "max_requests": 100, + "window_seconds": 60, + } + } + + async def dispatch(self, request: Request, call_next): + client_ip = request.client.host if request.client else "unknown" + path = request.url.path + now = time.time() + + # 健康检查不限流 + if path == "/health" or path.startswith("/docs") or path.startswith("/openapi"): + return await call_next(request) + + # 检查认证接口限流 + if any(path == p for p in self.rules["auth"]["paths"]): + key = f"auth:{client_ip}" + if self._is_rate_limited(key, now, self.rules["auth"]): + return JSONResponse( + status_code=429, + content={"detail": "请求过于频繁,请稍后再试"} + ) + + # 检查查询执行限流 + if path.endswith("/run-now") and request.method == "POST": + key = f"query_run:{client_ip}" + if self._is_rate_limited(key, now, self.rules["query_run"]): + return JSONResponse( + status_code=429, + content={"detail": "查询执行过于频繁,请稍后再试"} + ) + + # 全局限流 + key = f"global:{client_ip}" + if self._is_rate_limited(key, now, self.rules["global"]): + return JSONResponse( + status_code=429, + content={"detail": "请求过于频繁,请稍后再试"} + ) + + return await call_next(request) + + def _is_rate_limited(self, key, now, rule): + window = rule["window_seconds"] + max_req = rule["max_requests"] + + # 清理过期记录 + self._requests[key] = [t for t in self._requests[key] if now - t < window] + + if len(self._requests[key]) >= max_req: + return True + + self._requests[key].append(now) + return False diff --git a/backend/app/models/user.py b/backend/app/models/user.py index b5d19d7..09a585c 100644 --- a/backend/app/models/user.py +++ b/backend/app/models/user.py @@ -1,7 +1,7 @@ import uuid from datetime import datetime, timezone -from sqlalchemy import String, Boolean, Integer, func +from sqlalchemy import String, Boolean, Integer, DateTime, func from sqlalchemy import Uuid from sqlalchemy.orm import Mapped, mapped_column, relationship @@ -22,6 +22,13 @@ class User(Base): plan: Mapped[str] = mapped_column(String(20), default="free") max_queries: Mapped[int] = mapped_column(Integer, default=5) is_active: Mapped[bool] = mapped_column(Boolean, default=True) + email_verified: Mapped[bool] = mapped_column(Boolean, default=False) + verification_code: Mapped[str | None] = mapped_column(String(6), nullable=True) + verification_code_expires: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) + reset_token: Mapped[str | None] = mapped_column(String(255), nullable=True) + reset_token_expires: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) + avatar_url: Mapped[str | None] = mapped_column(String(500), nullable=True) + is_admin: Mapped[bool] = mapped_column(Boolean, default=False) created_at: Mapped[datetime] = mapped_column( server_default=func.now(), nullable=False, diff --git a/backend/app/schemas/auth.py b/backend/app/schemas/auth.py index b93346d..777bbca 100644 --- a/backend/app/schemas/auth.py +++ b/backend/app/schemas/auth.py @@ -1,5 +1,6 @@ import uuid from datetime import datetime +from typing import Optional from pydantic import BaseModel, EmailStr, Field @@ -15,6 +16,30 @@ class UserLogin(BaseModel): password: str +class ForgotPasswordRequest(BaseModel): + email: EmailStr + + +class ResetPasswordRequest(BaseModel): + token: str + new_password: str = Field(..., min_length=8) + + +class VerifyEmailRequest(BaseModel): + email: EmailStr + code: str = Field(..., min_length=6, max_length=6) + + +class ChangePasswordRequest(BaseModel): + old_password: str + new_password: str = Field(..., min_length=8) + + +class UpdateProfileRequest(BaseModel): + name: Optional[str] = None + avatar_url: Optional[str] = None + + class UserResponse(BaseModel): id: uuid.UUID email: str @@ -22,6 +47,9 @@ class UserResponse(BaseModel): plan: str max_queries: int is_active: bool + email_verified: bool + is_admin: bool + avatar_url: str | None created_at: datetime model_config = {"from_attributes": True} diff --git a/backend/app/schemas/subscription.py b/backend/app/schemas/subscription.py new file mode 100644 index 0000000..3b2baf4 --- /dev/null +++ b/backend/app/schemas/subscription.py @@ -0,0 +1,40 @@ +from pydantic import BaseModel +from typing import List, Optional +from datetime import date, datetime +from uuid import UUID + + +class PlanFeature(BaseModel): + name: str + included: bool + + +class PlanDetail(BaseModel): + id: str + name: str + price: float + max_queries: int + features: List[PlanFeature] + + +class SubscribeRequest(BaseModel): + plan: str + + +class SubscriptionResponse(BaseModel): + id: UUID + plan: str + status: str + start_date: date + end_date: date + amount: Optional[float] = None + payment_method: Optional[str] = None + created_at: datetime + + class Config: + from_attributes = True + + +class SubscriptionHistoryResponse(BaseModel): + items: List[SubscriptionResponse] + total: int diff --git a/backend/app/services/admin.py b/backend/app/services/admin.py new file mode 100644 index 0000000..d459aa3 --- /dev/null +++ b/backend/app/services/admin.py @@ -0,0 +1,187 @@ +import uuid +from datetime import datetime, timedelta + +from sqlalchemy import func, select +from sqlalchemy.ext.asyncio import AsyncSession + +from app.models.citation_record import CitationRecord +from app.models.query import Query +from app.models.subscription import Subscription +from app.models.user import User +from app.services.subscription import PLANS + + +async def get_system_stats(db: AsyncSession) -> dict: + total_users_result = await db.execute(select(func.count()).select_from(User)) + total_users = total_users_result.scalar_one() + + total_queries_result = await db.execute(select(func.count()).select_from(Query)) + total_queries = total_queries_result.scalar_one() + + total_citations_result = await db.execute( + select(func.count()).select_from(CitationRecord) + ) + total_citations = total_citations_result.scalar_one() + + cited_result = await db.execute( + select(func.count()).select_from(CitationRecord).where(CitationRecord.cited.is_(True)) + ) + cited_count = cited_result.scalar_one() + + citation_rate = round(cited_count / total_citations * 100, 2) if total_citations > 0 else 0.0 + + today = datetime.utcnow().date() + today_start = datetime(today.year, today.month, today.day) + today_active_result = await db.execute( + select(func.count(func.distinct(Query.user_id))).where(Query.last_queried_at >= today_start) + ) + today_active_users = today_active_result.scalar_one() + + return { + "total_users": total_users, + "total_queries": total_queries, + "total_citations": total_citations, + "citation_rate": citation_rate, + "today_active_users": today_active_users, + } + + +async def get_users( + db: AsyncSession, skip: int = 0, limit: int = 20, search: str | None = None +) -> dict: + base_stmt = select(User) + count_stmt = select(func.count()).select_from(User) + + if search: + like_pattern = f"%{search}%" + base_stmt = base_stmt.where( + (User.email.ilike(like_pattern)) | (User.name.ilike(like_pattern)) + ) + count_stmt = count_stmt.where( + (User.email.ilike(like_pattern)) | (User.name.ilike(like_pattern)) + ) + + base_stmt = base_stmt.order_by(User.created_at.desc()).offset(skip).limit(limit) + + result = await db.execute(base_stmt) + users = result.scalars().all() + + count_result = await db.execute(count_stmt) + total = count_result.scalar_one() + + items = [] + for user in users: + query_count_result = await db.execute( + select(func.count()).select_from(Query).where(Query.user_id == user.id) + ) + query_count = query_count_result.scalar_one() + items.append( + { + "id": user.id, + "email": user.email, + "name": user.name, + "plan": user.plan, + "is_active": user.is_active, + "is_admin": user.is_admin, + "email_verified": user.email_verified, + "query_count": query_count, + "created_at": user.created_at, + } + ) + + return {"items": items, "total": total} + + +async def get_user_detail(db: AsyncSession, user_id: uuid.UUID) -> dict | None: + user_result = await db.execute(select(User).where(User.id == user_id)) + user = user_result.scalar_one_or_none() + if user is None: + return None + + queries_result = await db.execute( + select(Query).where(Query.user_id == user_id).order_by(Query.created_at.desc()) + ) + queries = queries_result.scalars().all() + + citations_result = await db.execute( + select(CitationRecord) + .join(Query, CitationRecord.query_id == Query.id) + .where(Query.user_id == user_id) + .order_by(CitationRecord.queried_at.desc()) + .limit(10) + ) + citations = citations_result.scalars().all() + + return { + "user": { + "id": user.id, + "email": user.email, + "name": user.name, + "plan": user.plan, + "is_active": user.is_active, + "is_admin": user.is_admin, + "email_verified": user.email_verified, + "max_queries": user.max_queries, + "created_at": user.created_at, + "updated_at": user.updated_at, + }, + "queries": [ + { + "id": q.id, + "keyword": q.keyword, + "target_brand": q.target_brand, + "status": q.status, + "frequency": q.frequency, + "created_at": q.created_at, + } + for q in queries + ], + "recent_citations": [ + { + "id": c.id, + "platform": c.platform, + "cited": c.cited, + "citation_position": c.citation_position, + "queried_at": c.queried_at, + } + for c in citations + ], + } + + +async def toggle_user_active(db: AsyncSession, user_id: uuid.UUID) -> dict | None: + user_result = await db.execute(select(User).where(User.id == user_id)) + user = user_result.scalar_one_or_none() + if user is None: + return None + + user.is_active = not user.is_active + await db.commit() + + return { + "id": user.id, + "is_active": user.is_active, + "message": "用户已启用" if user.is_active else "用户已禁用", + } + + +async def update_user_plan(db: AsyncSession, user_id: uuid.UUID, plan: str) -> dict | None: + plan_data = PLANS.get(plan) + if plan_data is None: + raise ValueError(f"Invalid plan: {plan}") + + user_result = await db.execute(select(User).where(User.id == user_id)) + user = user_result.scalar_one_or_none() + if user is None: + return None + + user.plan = plan + user.max_queries = plan_data["max_queries"] + await db.commit() + + return { + "id": user.id, + "plan": user.plan, + "max_queries": user.max_queries, + "message": f"用户套餐已更新为{plan_data['name']}", + } diff --git a/backend/app/services/auth.py b/backend/app/services/auth.py index 827c4b1..4e79fcd 100644 --- a/backend/app/services/auth.py +++ b/backend/app/services/auth.py @@ -1,5 +1,7 @@ +import logging +import random import uuid -from datetime import datetime, timedelta, timezone +from datetime import datetime, timedelta from jose import jwt, JWTError from passlib.context import CryptContext @@ -8,8 +10,9 @@ from sqlalchemy.ext.asyncio import AsyncSession from app.config import settings from app.models.user import User -from app.schemas.auth import UserRegister +from app.schemas.auth import UserRegister, UpdateProfileRequest +logger = logging.getLogger(__name__) pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") @@ -23,7 +26,7 @@ def verify_password(plain_password: str, hashed_password: str) -> bool: def create_access_token(data: dict) -> str: to_encode = data.copy() - expire = datetime.now(timezone.utc) + timedelta(hours=settings.JWT_EXPIRE_HOURS) + expire = datetime.utcnow() + timedelta(hours=settings.JWT_EXPIRE_HOURS) to_encode.update({"exp": expire}) encoded_jwt = jwt.encode(to_encode, settings.JWT_SECRET, algorithm="HS256") return encoded_jwt @@ -66,3 +69,106 @@ async def authenticate_user( return None return user + + +async def send_verification_code(db: AsyncSession, email: str) -> None: + """生成6位随机验证码,存到user记录,日志输出(模拟邮件)""" + stmt = select(User).where(User.email == email) + result = await db.execute(stmt) + user = result.scalar_one_or_none() + if not user: + return + + code = f"{random.randint(100000, 999999)}" + user.verification_code = code + user.verification_code_expires = datetime.utcnow() + timedelta(minutes=10) + await db.commit() + logger.info(f"[模拟邮件] 邮箱验证码发送到 {email}: {code}") + + +async def verify_email(db: AsyncSession, email: str, code: str) -> bool: + """验证码校验,成功则设置email_verified=True""" + stmt = select(User).where(User.email == email) + result = await db.execute(stmt) + user = result.scalar_one_or_none() + if not user: + return False + + if user.verification_code != code: + return False + + if user.verification_code_expires is None or user.verification_code_expires < datetime.utcnow(): + return False + + user.email_verified = True + user.verification_code = None + user.verification_code_expires = None + await db.commit() + return True + + +async def send_reset_link(db: AsyncSession, email: str) -> None: + """生成UUID token,存到user记录,日志输出重置链接""" + stmt = select(User).where(User.email == email) + result = await db.execute(stmt) + user = result.scalar_one_or_none() + if not user: + return + + token = str(uuid.uuid4()) + user.reset_token = token + user.reset_token_expires = datetime.utcnow() + timedelta(hours=1) + await db.commit() + logger.info(f"[模拟邮件] 密码重置链接: http://localhost:3000/reset-password?token={token}") + + +async def reset_password(db: AsyncSession, token: str, new_password: str) -> bool: + """token验证+密码更新""" + stmt = select(User).where(User.reset_token == token) + result = await db.execute(stmt) + user = result.scalar_one_or_none() + if not user: + return False + + if user.reset_token_expires is None or user.reset_token_expires < datetime.utcnow(): + return False + + user.password_hash = hash_password(new_password) + user.reset_token = None + user.reset_token_expires = None + await db.commit() + return True + + +async def change_password(db: AsyncSession, user_id: uuid.UUID, old_password: str, new_password: str) -> bool: + """旧密码验证后更新""" + stmt = select(User).where(User.id == user_id) + result = await db.execute(stmt) + user = result.scalar_one_or_none() + if not user: + return False + + if not verify_password(old_password, user.password_hash): + return False + + user.password_hash = hash_password(new_password) + await db.commit() + return True + + +async def update_profile(db: AsyncSession, user_id: uuid.UUID, data: UpdateProfileRequest) -> User | None: + """更新用户资料(name, avatar_url)""" + stmt = select(User).where(User.id == user_id) + result = await db.execute(stmt) + user = result.scalar_one_or_none() + if not user: + return None + + if data.name is not None: + user.name = data.name + if data.avatar_url is not None: + user.avatar_url = data.avatar_url + + await db.commit() + await db.refresh(user) + return user diff --git a/backend/app/services/citation.py b/backend/app/services/citation.py index 63ac59b..7c68ac7 100644 --- a/backend/app/services/citation.py +++ b/backend/app/services/citation.py @@ -7,6 +7,7 @@ from datetime import datetime, timedelta, timezone from sqlalchemy import func, select, and_, cast, Integer from sqlalchemy.ext.asyncio import AsyncSession +from sqlalchemy.orm import selectinload from app.database import AsyncSessionLocal from app.models.citation_record import CitationRecord @@ -339,6 +340,132 @@ PLATFORM_NAMES = { } +async def export_citations_pdf( + db: AsyncSession, + user_id: uuid.UUID, + query_id: uuid.UUID | None = None, +) -> bytes: + """生成PDF格式报告""" + import os + from fpdf import FPDF + + # 验证查询所有权(如果提供了 query_id) + if query_id is not None: + query = await _verify_query_ownership(db, query_id, user_id) + if query is None: + raise ValueError("Query not found") + + # 构建查询条件 + conditions = [Query.user_id == user_id] + if query_id is not None: + conditions.append(CitationRecord.query_id == query_id) + + # 查询数据,使用 selectinload 加载 query 关系 + stmt = ( + select(CitationRecord) + .options(selectinload(CitationRecord.query)) + .join(Query, CitationRecord.query_id == Query.id) + .where(and_(*conditions)) + .order_by(CitationRecord.queried_at.desc()) + ) + result = await db.execute(stmt) + records = result.scalars().all() + + pdf = FPDF() + pdf.add_page() + + # 加载中文字体 + font_paths = [ + "/System/Library/Fonts/PingFang.ttc", + "/System/Library/Fonts/STHeiti Light.ttc", + "/usr/share/fonts/truetype/noto/NotoSansCJK-Regular.ttc", + "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc", + ] + font_loaded = False + for fp in font_paths: + if os.path.exists(fp): + pdf.add_font("Chinese", "", fp, uni=True) + pdf.set_font("Chinese", size=12) + font_loaded = True + break + if not font_loaded: + pdf.set_font("Helvetica", size=12) + + # 封面 + pdf.set_font_size(24) + pdf.cell(0, 40, "GEO 品牌曝光度分析报告", new_x="LMARGIN", new_y="NEXT", align="C") + pdf.set_font_size(12) + pdf.cell(0, 10, f"生成日期: {datetime.now().strftime('%Y-%m-%d %H:%M')}", new_x="LMARGIN", new_y="NEXT", align="C") + pdf.ln(20) + + # 汇总统计 + total = len(records) + cited_count = sum(1 for r in records if r.cited) + rate = f"{cited_count / total * 100:.1f}%" if total > 0 else "0%" + + total_position = 0 + position_count = 0 + for r in records: + if r.citation_position is not None: + total_position += r.citation_position + position_count += 1 + avg_pos = f"{total_position / position_count:.1f}" if position_count > 0 else "-" + + pdf.set_font_size(16) + pdf.cell(0, 12, "一、汇总统计", new_x="LMARGIN", new_y="NEXT") + pdf.set_font_size(11) + pdf.cell(0, 8, f"总查询次数: {total}", new_x="LMARGIN", new_y="NEXT") + pdf.cell(0, 8, f"引用次数: {cited_count}", new_x="LMARGIN", new_y="NEXT") + pdf.cell(0, 8, f"引用率: {rate}", new_x="LMARGIN", new_y="NEXT") + pdf.cell(0, 8, f"平均引用位置: {avg_pos}", new_x="LMARGIN", new_y="NEXT") + pdf.ln(10) + + # 平台分布 + pdf.set_font_size(16) + pdf.cell(0, 12, "二、平台分布", new_x="LMARGIN", new_y="NEXT") + pdf.set_font_size(11) + + platform_stats = {} + for r in records: + if r.platform not in platform_stats: + platform_stats[r.platform] = {"total": 0, "cited": 0} + platform_stats[r.platform]["total"] += 1 + if r.cited: + platform_stats[r.platform]["cited"] += 1 + + for platform, stats in platform_stats.items(): + name = PLATFORM_NAMES.get(platform, platform) + p_rate = f"{stats['cited'] / stats['total'] * 100:.1f}%" if stats['total'] > 0 else "0%" + pdf.cell(0, 8, f" {name}: 查询{stats['total']}次, 引用{stats['cited']}次, 引用率{p_rate}", new_x="LMARGIN", new_y="NEXT") + pdf.ln(10) + + # 详细数据表格 + pdf.set_font_size(16) + pdf.cell(0, 12, "三、详细数据", new_x="LMARGIN", new_y="NEXT") + pdf.set_font_size(9) + + col_widths = [30, 25, 20, 20, 15, 80] + headers = ["查询关键词", "平台", "是否引用", "置信度", "位置", "引用文本"] + for i, h in enumerate(headers): + pdf.cell(col_widths[i], 8, h, border=1, align="C") + pdf.ln() + + for r in records: + keyword = r.query.keyword if r.query else "" + platform_name = PLATFORM_NAMES.get(r.platform, r.platform) + cited_str = "是" if r.cited else "否" + conf = f"{r.confidence:.2f}" if r.confidence is not None else "-" + pos = str(r.citation_position) if r.citation_position is not None else "-" + text = (r.citation_text or "")[:40] + + row_data = [keyword[:15], platform_name, cited_str, conf, pos, text] + for i, d in enumerate(row_data): + pdf.cell(col_widths[i], 7, d, border=1) + pdf.ln() + + return pdf.output() + + async def export_citations_csv( db: AsyncSession, user_id: uuid.UUID, diff --git a/backend/app/services/subscription.py b/backend/app/services/subscription.py new file mode 100644 index 0000000..8d9bfa1 --- /dev/null +++ b/backend/app/services/subscription.py @@ -0,0 +1,154 @@ +import logging +import uuid +from datetime import date, timedelta +from typing import Optional + +from sqlalchemy import select +from sqlalchemy.ext.asyncio import AsyncSession + +from app.models.subscription import Subscription +from app.models.user import User +from app.schemas.subscription import PlanDetail, PlanFeature, SubscriptionResponse + +logger = logging.getLogger(__name__) + +_PLAN_FEATURES = [ + ("基础查询监控", ["free", "starter", "pro", "enterprise"]), + ("CSV导出", ["free", "starter", "pro", "enterprise"]), + ("PDF报告", ["starter", "pro", "enterprise"]), + ("定时查询", ["pro", "enterprise"]), + ("竞品分析", ["pro", "enterprise"]), + ("API访问", ["enterprise"]), + ("专属支持", ["enterprise"]), +] + +PLANS = { + "free": { + "name": "免费版", + "price": 0, + "max_queries": 5, + }, + "starter": { + "name": "入门版", + "price": 99, + "max_queries": 20, + }, + "pro": { + "name": "专业版", + "price": 299, + "max_queries": 100, + }, + "enterprise": { + "name": "企业版", + "price": 999, + "max_queries": 500, + }, +} + + +def _build_features(plan_id: str) -> list[PlanFeature]: + return [ + PlanFeature(name=name, included=plan_id in allowed) + for name, allowed in _PLAN_FEATURES + ] + + +def get_plans() -> list[PlanDetail]: + return [ + PlanDetail( + id=plan_id, + name=data["name"], + price=data["price"], + max_queries=data["max_queries"], + features=_build_features(plan_id), + ) + for plan_id, data in PLANS.items() + ] + + +async def get_current_subscription( + db: AsyncSession, user_id: uuid.UUID +) -> Optional[SubscriptionResponse]: + stmt = ( + select(Subscription) + .where(Subscription.user_id == user_id) + .order_by(Subscription.created_at.desc()) + .limit(1) + ) + result = await db.execute(stmt) + sub = result.scalar_one_or_none() + if sub is None: + return None + return SubscriptionResponse.model_validate(sub) + + +async def subscribe( + db: AsyncSession, user_id: uuid.UUID, plan: str +) -> SubscriptionResponse: + plan_data = PLANS.get(plan) + if plan_data is None: + raise ValueError(f"Invalid plan: {plan}") + + today = date.today() + end_date = today + timedelta(days=30) + + subscription = Subscription( + user_id=user_id, + plan=plan, + status="active", + start_date=today, + end_date=end_date, + amount=plan_data["price"], + payment_method="模拟支付", + ) + db.add(subscription) + + user_stmt = select(User).where(User.id == user_id) + user_result = await db.execute(user_stmt) + user = user_result.scalar_one() + user.plan = plan + user.max_queries = plan_data["max_queries"] + + await db.commit() + await db.refresh(subscription) + + logger.info(f"[模拟支付] 用户{user_id} 订阅{plan},金额{plan_data['price']}元") + + return SubscriptionResponse.model_validate(subscription) + + +async def cancel_subscription(db: AsyncSession, user_id: uuid.UUID) -> dict: + stmt = ( + select(Subscription) + .where(Subscription.user_id == user_id, Subscription.status == "active") + .order_by(Subscription.created_at.desc()) + .limit(1) + ) + result = await db.execute(stmt) + sub = result.scalar_one_or_none() + + if sub is not None: + sub.status = "cancelled" + + user_stmt = select(User).where(User.id == user_id) + user_result = await db.execute(user_stmt) + user = user_result.scalar_one() + user.plan = "free" + user.max_queries = PLANS["free"]["max_queries"] + + await db.commit() + + return {"message": "订阅已取消,已降级到免费版"} + + +async def get_subscription_history( + db: AsyncSession, user_id: uuid.UUID +) -> list[SubscriptionResponse]: + stmt = ( + select(Subscription) + .where(Subscription.user_id == user_id) + .order_by(Subscription.created_at.desc()) + ) + result = await db.execute(stmt) + subs = result.scalars().all() + return [SubscriptionResponse.model_validate(sub) for sub in subs] diff --git a/backend/requirements.txt b/backend/requirements.txt index 203ceff..97c82ce 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -33,3 +33,6 @@ python-dotenv pytest>=8.0 pytest-asyncio>=0.23.0 aiosqlite + +# PDF生成 +fpdf2>=2.7 diff --git a/frontend/README.md b/frontend/README.md index e215bc4..d1af9fd 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,36 +1,169 @@ -This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). +# GEO 平台 - 前端应用 -## Getting Started +基于 Next.js 14 + React 18 构建的现代化前端应用,使用 App Router 架构。 -First, run the development server: +## 环境要求 + +- Node.js 18+ +- npm 9+(或 yarn、pnpm) +- 后端服务已启动(默认 http://localhost:8000) + +## 安装步骤 ```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev +cd frontend +npm install ``` -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. +## 运行命令 -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. +```bash +# 开发模式(带热重载) +npm run dev -This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. +# 生产构建 +npm run build -## Learn More +# 启动生产服务 +npm run start -To learn more about Next.js, take a look at the following resources: +# 代码检查 +npm run lint +``` -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. +开发服务器启动后,访问 http://localhost:3000。 -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! +## 页面路由说明 -## Deploy on Vercel +本应用使用 Next.js App Router(`app/` 目录),路由基于文件系统自动生成。 -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. +### 认证页面(`(auth)` 路由组) -Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. +| 路径 | 功能 | 说明 | +|------|------|------| +| `/` | 首页/欢迎页 | 应用入口,未登录用户展示介绍 | +| `/login` | 用户登录 | 邮箱+密码登录,支持记住我 | +| `/register` | 用户注册 | 新用户注册,含邮箱验证流程 | +| `/forgot-password` | 忘记密码 | 发送密码重置链接到邮箱 | +| `/reset-password` | 重置密码 | 通过令牌设置新密码 | + +### 仪表盘页面(`(dashboard)` 路由组) + +所有仪表盘页面均需登录后才能访问,受 NextAuth 会话保护。 + +| 路径 | 功能 | 说明 | +|------|------|------| +| `/dashboard` | 仪表盘首页 | 数据概览、关键指标、引用趋势图 | +| `/dashboard/queries` | 查询词管理 | 查询词 CRUD、即时执行、分页列表 | +| `/dashboard/citations` | 引用数据 | 引用记录列表、按平台/日期筛选 | +| `/dashboard/reports` | 报告导出 | CSV 报告生成与下载 | +| `/dashboard/settings` | 个人设置 | 用户资料修改、密码修改 | + +### API 路由 + +| 路径 | 功能 | +|------|------| +| `/api/auth/[...nextauth]` | NextAuth.js 认证 API 端点 | + +## 组件结构说明 + +``` +components/ +├── ui/ # shadcn/ui 基础组件 +│ ├── button.tsx # 按钮 +│ ├── card.tsx # 卡片 +│ ├── dialog.tsx # 对话框 +│ ├── dropdown-menu.tsx # 下拉菜单 +│ ├── input.tsx # 输入框 +│ ├── label.tsx # 标签 +│ ├── select.tsx # 下拉选择 +│ ├── table.tsx # 表格 +│ ├── tabs.tsx # 标签页 +│ ├── badge.tsx # 徽标 +│ └── skeleton.tsx # 骨架屏 +├── charts/ # 数据可视化图表组件 +│ ├── trend-chart.tsx # 引用趋势折线图 +│ └── platform-chart.tsx # 平台对比柱状图/饼图 +├── layout/ # 布局组件 +│ ├── header.tsx # 顶部导航栏 +│ └── sidebar.tsx # 侧边栏导航 +└── providers.tsx # 全局 Provider 包装(NextAuth SessionProvider 等) +``` + +### lib 工具库 + +``` +lib/ +├── api.ts # 后端 API 客户端封装(fetch 封装) +├── auth.ts # NextAuth 配置与工具函数 +├── platforms.ts # 平台名称/图标映射配置 +└── utils.ts # 通用工具函数(cn 合并类等) +``` + +## 技术栈详情 + +| 类别 | 技术 | +|------|------| +| 框架 | Next.js 14 (App Router) | +| UI 库 | React 18 | +| 样式 | TailwindCSS 3.4 | +| 组件库 | shadcn/ui(基于 Radix UI) | +| 图表 | Recharts | +| 认证 | NextAuth.js 4 (Credentials Provider) | +| 字体 | Geist(本地字体) | +| 语言 | TypeScript 5 | + +## 环境变量配置 + +前端环境变量分为两类: + +### 公开环境变量(`NEXT_PUBLIC_` 前缀,客户端可用) + +在 `.env.local` 中配置: + +```bash +# 后端 API 地址 +NEXT_PUBLIC_API_URL=http://localhost:8000 +``` + +### 服务端环境变量(仅服务端可用) + +```bash +# NextAuth 配置 +NEXTAUTH_URL=http://localhost:3000 +NEXTAUTH_SECRET=geo-platform-nextauth-secret-key-2026 +``` + +> **注意**:`.env.local` 文件不会被提交到 Git 仓库。新成员需要手动创建该文件。 + +### 环境变量文件优先级 + +Next.js 按以下优先级加载环境变量(高优先级覆盖低优先级): + +1. `.env.local`(本地开发,不提交 Git) +2. `.env.development` / `.env.production`(按环境) +3. `.env`(全局默认) + +## Docker 开发 + +项目根目录已提供 `docker-compose.yml`,前端服务会自动挂载代码并启动开发服务器: + +```bash +# 在项目根目录执行 +docker-compose up -d frontend +``` + +前端容器配置: +- 端口映射:`3000:3000` +- 代码热重载:通过 volume 挂载 `./frontend:/app` +- node_modules 持久化:独立 volume 避免覆盖 + +## 开发注意事项 + +1. **API 调用**:统一使用 `lib/api.ts` 中封装的方法,自动携带 JWT Token +2. **认证状态**:通过 `next-auth/react` 的 `useSession` Hook 获取当前登录状态 +3. **服务端组件 vs 客户端组件**: + - 数据获取页面优先使用 Server Component + - 交互逻辑(表单、图表)使用 `"use client"` Client Component +4. **样式规范**:统一使用 TailwindCSS 工具类,复杂组合通过 `cn()` 工具函数处理 +5. **图标**:统一使用 `lucide-react` 图标库 diff --git a/frontend/app/(auth)/forgot-password/page.tsx b/frontend/app/(auth)/forgot-password/page.tsx new file mode 100644 index 0000000..6cd2755 --- /dev/null +++ b/frontend/app/(auth)/forgot-password/page.tsx @@ -0,0 +1,100 @@ +"use client"; + +import { useState } from "react"; +import Link from "next/link"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { api } from "@/lib/api"; + +export default function ForgotPasswordPage() { + const [email, setEmail] = useState(""); + const [error, setError] = useState(""); + const [loading, setLoading] = useState(false); + const [success, setSuccess] = useState(false); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setLoading(true); + setError(""); + try { + await api.auth.forgotPassword(email); + setSuccess(true); + } catch (err: unknown) { + const message = err instanceof Error ? err.message : "请求失败"; + setError(message); + } finally { + setLoading(false); + } + }; + + if (success) { + return ( + + + 重置链接已发送 + 重置链接已发送到您的邮箱,请查收 + + +

+ 如果您没有收到邮件,请检查垃圾邮件文件夹或稍后再试。 +

+
+ + + 返回登录 + + +
+ ); + } + + return ( + + + 忘记密码 + 输入您的邮箱地址,我们将发送重置链接 + +
+ + {error && ( +

{error}

+ )} +
+ + setEmail(e.target.value)} + required + /> +
+
+ + + + 返回登录 + + +
+
+ ); +} diff --git a/frontend/app/(auth)/login/page.tsx b/frontend/app/(auth)/login/page.tsx index 9d8f115..d408f86 100644 --- a/frontend/app/(auth)/login/page.tsx +++ b/frontend/app/(auth)/login/page.tsx @@ -64,7 +64,15 @@ export default function LoginPage() { />
- +
+ + + 忘记密码? + +
{ + if (success && countdown > 0) { + const timer = setTimeout(() => setCountdown((c) => c - 1), 1000); + return () => clearTimeout(timer); + } + if (success && countdown === 0) { + router.push("/login"); + } + }, [success, countdown, router]); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setError(""); + + if (newPassword !== confirmPassword) { + setError("两次输入的密码不一致"); + return; + } + + if (!token) { + setError("重置令牌无效或已过期"); + return; + } + + setLoading(true); + try { + await api.auth.resetPassword(token, newPassword); + setSuccess(true); + } catch (err: unknown) { + const message = err instanceof Error ? err.message : "重置失败"; + setError(message); + } finally { + setLoading(false); + } + }; + + if (success) { + return ( + + + 密码重置成功 + + 您的密码已重置,{countdown} 秒后自动跳转到登录页 + + + + + 立即登录 + + + + ); + } + + return ( + + + 重置密码 + 请输入您的新密码 + +
+ + {error && ( +

{error}

+ )} +
+ + setNewPassword(e.target.value)} + required + /> +
+
+ + setConfirmPassword(e.target.value)} + required + /> +
+
+ + + + 返回登录 + + +
+
+ ); +} + +export default function ResetPasswordPage() { + return ( + + + 重置密码 + 加载中... + + + } + > + + + ); +} diff --git a/frontend/app/(auth)/verify-email/page.tsx b/frontend/app/(auth)/verify-email/page.tsx new file mode 100644 index 0000000..c529388 --- /dev/null +++ b/frontend/app/(auth)/verify-email/page.tsx @@ -0,0 +1,154 @@ +"use client"; + +import { useState, useEffect, Suspense } from "react"; +import { useSearchParams, useRouter } from "next/navigation"; +import Link from "next/link"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { api } from "@/lib/api"; + +function VerifyEmailForm() { + const router = useRouter(); + const searchParams = useSearchParams(); + const email = searchParams.get("email") || ""; + + const [code, setCode] = useState(""); + const [error, setError] = useState(""); + const [loading, setLoading] = useState(false); + const [success, setSuccess] = useState(false); + const [resendCountdown, setResendCountdown] = useState(0); + + useEffect(() => { + if (resendCountdown > 0) { + const timer = setTimeout(() => setResendCountdown((c) => c - 1), 1000); + return () => clearTimeout(timer); + } + }, [resendCountdown]); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + if (!email) { + setError("邮箱地址无效"); + return; + } + setLoading(true); + setError(""); + try { + await api.auth.verifyEmail(email, code); + setSuccess(true); + setTimeout(() => { + router.push("/login"); + }, 1500); + } catch (err: unknown) { + const message = err instanceof Error ? err.message : "验证失败"; + setError(message); + } finally { + setLoading(false); + } + }; + + const handleResend = async () => { + if (!email || resendCountdown > 0) return; + setError(""); + try { + await api.auth.resendVerification(email); + setResendCountdown(60); + } catch (err: unknown) { + const message = err instanceof Error ? err.message : "发送失败"; + setError(message); + } + }; + + if (success) { + return ( + + + 验证成功 + 邮箱验证成功,正在跳转到登录页... + + + + 立即登录 + + + + ); + } + + return ( + + + 验证邮箱 + + 我们已向 {email || "您的邮箱"} 发送了验证码 + + +
+ + {error && ( +

{error}

+ )} +
+ + setCode(e.target.value)} + required + /> +
+
+ +
+
+ + + + 返回登录 + + +
+
+ ); +} + +export default function VerifyEmailPage() { + return ( + + + 验证邮箱 + 加载中... + + + } + > + + + ); +} diff --git a/frontend/app/(dashboard)/dashboard/admin/page.tsx b/frontend/app/(dashboard)/dashboard/admin/page.tsx new file mode 100644 index 0000000..9c6737f --- /dev/null +++ b/frontend/app/(dashboard)/dashboard/admin/page.tsx @@ -0,0 +1,434 @@ +"use client"; + +import { useEffect, useState } from "react"; +import { useSession } from "next-auth/react"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Badge } from "@/components/ui/badge"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; +import { api } from "@/lib/api"; +import { + Users, + Search, + Quote, + Percent, + Loader2, + AlertTriangle, + CheckCircle, + Ban, + UserCheck, + ChevronLeft, + ChevronRight, +} from "lucide-react"; + +interface StatsData { + total_users: number; + total_queries: number; + total_citations: number; + citation_rate: number; + today_active_users: number; +} + +interface AdminUser { + id: string; + email: string; + name: string | null; + plan: string; + is_active: boolean; + is_admin: boolean; + email_verified: boolean; + query_count: number; + created_at: string; +} + +const PLAN_OPTIONS = [ + { value: "free", label: "免费版" }, + { value: "starter", label: "入门版" }, + { value: "pro", label: "专业版" }, + { value: "business", label: "企业版" }, +]; + +const LIMIT = 10; + +export default function AdminPage() { + const { data: session } = useSession(); + const [stats, setStats] = useState(null); + const [users, setUsers] = useState([]); + const [totalUsers, setTotalUsers] = useState(0); + const [skip, setSkip] = useState(0); + const [search, setSearch] = useState(""); + const [loadingStats, setLoadingStats] = useState(false); + const [loadingUsers, setLoadingUsers] = useState(false); + const [error, setError] = useState(null); + const [success, setSuccess] = useState(null); + + const [dialogOpen, setDialogOpen] = useState(false); + const [dialogType, setDialogType] = useState<"toggle" | "plan">("toggle"); + const [selectedUser, setSelectedUser] = useState(null); + const [selectedPlan, setSelectedPlan] = useState(""); + const [actionLoading, setActionLoading] = useState(false); + + const token = session?.accessToken; + + useEffect(() => { + if (!token) return; + loadStats(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [token]); + + useEffect(() => { + if (!token) return; + loadUsers(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [token, skip, search]); + + async function loadStats() { + if (!token) return; + setLoadingStats(true); + try { + const data = await api.admin.getStats(token); + setStats(data); + setError(null); + } catch (err) { + setError(err instanceof Error ? err.message : "加载统计失败"); + } finally { + setLoadingStats(false); + } + } + + async function loadUsers() { + if (!token) return; + setLoadingUsers(true); + try { + const data = await api.admin.getUsers(token, { skip, limit: LIMIT, search: search || undefined }); + setUsers(data.items || []); + setTotalUsers(data.total || 0); + setError(null); + } catch (err) { + setError(err instanceof Error ? err.message : "加载用户列表失败"); + } finally { + setLoadingUsers(false); + } + } + + function openToggleDialog(user: AdminUser) { + setSelectedUser(user); + setDialogType("toggle"); + setDialogOpen(true); + } + + function openPlanDialog(user: AdminUser) { + setSelectedUser(user); + setSelectedPlan(user.plan); + setDialogType("plan"); + setDialogOpen(true); + } + + async function handleConfirm() { + if (!token || !selectedUser) return; + setActionLoading(true); + setSuccess(null); + try { + if (dialogType === "toggle") { + const res = await api.admin.toggleUserActive(token, selectedUser.id); + setSuccess(res.message || "操作成功"); + } else { + const res = await api.admin.updateUserPlan(token, selectedUser.id, selectedPlan); + setSuccess(res.message || "套餐更新成功"); + } + await loadUsers(); + setDialogOpen(false); + setTimeout(() => setSuccess(null), 3000); + } catch (err) { + setError(err instanceof Error ? err.message : "操作失败"); + setDialogOpen(false); + } finally { + setActionLoading(false); + } + } + + const totalPages = Math.ceil(totalUsers / LIMIT); + const currentPage = Math.floor(skip / LIMIT) + 1; + + const statCards = [ + { + title: "总用户数", + value: stats?.total_users ?? 0, + icon: Users, + color: "text-blue-600", + bg: "bg-blue-50", + }, + { + title: "总查询数", + value: stats?.total_queries ?? 0, + icon: Search, + color: "text-emerald-600", + bg: "bg-emerald-50", + }, + { + title: "总引用次数", + value: stats?.total_citations ?? 0, + icon: Quote, + color: "text-violet-600", + bg: "bg-violet-50", + }, + { + title: "引用率", + value: stats ? `${stats.citation_rate}%` : "0%", + icon: Percent, + color: "text-amber-600", + bg: "bg-amber-50", + }, + ]; + + function formatDate(dateStr: string) { + if (!dateStr) return "-"; + const d = new Date(dateStr); + return d.toLocaleDateString("zh-CN"); + } + + return ( +
+
+

管理后台

+

系统统计与用户管理

+
+ + {error && ( +
+ + {error} +
+ )} + + {success && ( +
+ + {success} +
+ )} + + {/* Stats Cards */} +
+ {statCards.map((card) => ( + + +
+ +
+
+

{card.title}

+

+ {loadingStats ? : card.value} +

+
+
+
+ ))} +
+ + {/* User Management */} + + + 用户管理 + + +
+ { + setSearch(e.target.value); + setSkip(0); + }} + className="max-w-sm" + /> + +
+ +
+ + + + 邮箱 + 用户名 + 套餐 + 查询数 + 邮箱验证 + 状态 + 注册日期 + 操作 + + + + {loadingUsers ? ( + + + + + + ) : users.length === 0 ? ( + + + 暂无用户数据 + + + ) : ( + users.map((user) => ( + + {user.email} + {user.name || "-"} + + {user.plan} + + {user.query_count} + + {user.email_verified ? ( + + 已验证 + + ) : ( + + 未验证 + + )} + + + {user.is_active ? ( + + 正常 + + ) : ( + 禁用 + )} + + {formatDate(user.created_at)} + +
+ + +
+
+
+ )) + )} +
+
+
+ + {/* Pagination */} + {totalPages > 1 && ( +
+ + + 第 {currentPage} / {totalPages} 页 (共 {totalUsers} 条) + + +
+ )} +
+
+ + {/* Dialog */} + + + + + {dialogType === "toggle" + ? selectedUser?.is_active + ? "禁用用户" + : "启用用户" + : "修改套餐"} + + + {dialogType === "toggle" + ? `确认${selectedUser?.is_active ? "禁用" : "启用"}用户 ${selectedUser?.email}?` + : `请选择用户 ${selectedUser?.email} 的新套餐`} + + + {dialogType === "plan" && ( +
+ +
+ )} + + + + +
+
+
+ ); +} + +function cn(...classes: (string | undefined | false)[]) { + return classes.filter(Boolean).join(" "); +} diff --git a/frontend/app/(dashboard)/dashboard/reports/page.tsx b/frontend/app/(dashboard)/dashboard/reports/page.tsx index 8f79b8b..e4daaaa 100644 --- a/frontend/app/(dashboard)/dashboard/reports/page.tsx +++ b/frontend/app/(dashboard)/dashboard/reports/page.tsx @@ -5,6 +5,7 @@ import { useSession } from "next-auth/react"; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Label } from "@/components/ui/label"; +import { Badge } from "@/components/ui/badge"; import { Select, SelectContent, @@ -12,28 +13,71 @@ import { SelectTrigger, SelectValue, } from "@/components/ui/select"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; import { api } from "@/lib/api"; -import { Loader2, FileDown, Info, CheckCircle, AlertTriangle } from "lucide-react"; +import { + Loader2, + FileDown, + FileText, + Info, + CheckCircle, + AlertTriangle, + Search, + Quote, + Percent, + BarChart3, +} from "lucide-react"; interface QueryOption { id: string; keyword: string; } +interface CitationStats { + total_queries: number; + total_citations: number; + citation_rate: number; + avg_position: number | null; +} + +interface CitationRecord { + id: string; + query_id: string; + platform: string; + cited: boolean; + citation_position: number | null; + citation_text: string | null; + competitor_brands: string[]; + confidence: number | null; + match_type: string | null; + queried_at: string; +} + const API_BASE = process.env.NEXT_PUBLIC_API_URL || "http://localhost:8000"; export default function ReportsPage() { const { data: session } = useSession(); const [queries, setQueries] = useState([]); const [selectedQuery, setSelectedQuery] = useState(""); - const [exportFormat, setExportFormat] = useState("csv"); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(false); + const [stats, setStats] = useState(null); + const [recentCitations, setRecentCitations] = useState([]); + const [previewLoading, setPreviewLoading] = useState(false); + useEffect(() => { if (!session?.accessToken) return; loadQueries(); + loadPreview(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [session?.accessToken]); @@ -47,38 +91,71 @@ export default function ReportsPage() { } } - async function handleExport() { + async function loadPreview() { + if (!session?.accessToken) return; + setPreviewLoading(true); + try { + const statsData = await api.citations.getStats(session.accessToken); + setStats(statsData); + const listData = await api.citations.list(session.accessToken, "limit=10"); + setRecentCitations(listData.items || []); + } catch (err) { + // 预览数据加载失败不影响主功能 + console.error("预览数据加载失败", err); + } finally { + setPreviewLoading(false); + } + } + + async function handleExportCSV() { if (!session?.accessToken) return; if (!selectedQuery) { setError("请先选择要导出的查询词"); return; } + await handleExport("csv"); + } + + async function handleExportPDF() { + if (!session?.accessToken) return; + if (!selectedQuery) { + setError("请先选择要导出的查询词"); + return; + } + await handleExport("pdf"); + } + + async function handleExport(format: "csv" | "pdf") { + if (!session?.accessToken) return; try { setLoading(true); setError(null); setSuccess(false); - // 使用原生fetch下载CSV文件 - const query = `?query_id=${selectedQuery}`; - const url = `${API_BASE}/api/v1/reports/export/csv${query}`; - const res = await fetch(url, { - headers: { - Authorization: `Bearer ${session.accessToken}`, - }, - }); + const queryId = selectedQuery; + let blob: Blob; + let filename: string; - if (!res.ok) { - const errorData = await res.json().catch(() => ({ detail: "导出失败" })); - throw new Error(errorData.detail || `HTTP ${res.status}`); + if (format === "csv") { + const query = `?query_id=${queryId}`; + const url = `${API_BASE}/api/v1/reports/export/csv${query}`; + const res = await fetch(url, { + headers: { Authorization: `Bearer ${session.accessToken}` }, + }); + if (!res.ok) { + const errorData = await res.json().catch(() => ({ detail: "导出失败" })); + throw new Error(errorData.detail || `HTTP ${res.status}`); + } + blob = await res.blob(); + filename = `report_${queryId}_${new Date().toISOString().split("T")[0]}.csv`; + } else { + blob = await api.reports.exportPDF(session.accessToken, queryId); + filename = `report_${queryId}_${new Date().toISOString().split("T")[0]}.pdf`; } - const blob = await res.blob(); const downloadUrl = window.URL.createObjectURL(blob); const a = document.createElement("a"); a.href = downloadUrl; - const filename = selectedQuery - ? `report_${selectedQuery}_${new Date().toISOString().split("T")[0]}.csv` - : `report_all_${new Date().toISOString().split("T")[0]}.csv`; a.download = filename; document.body.appendChild(a); a.click(); @@ -93,8 +170,45 @@ export default function ReportsPage() { } } + const statCards = [ + { + title: "总查询", + value: stats?.total_queries ?? 0, + icon: Search, + color: "text-blue-600", + bg: "bg-blue-50", + }, + { + title: "引用次数", + value: stats?.total_citations ?? 0, + icon: Quote, + color: "text-emerald-600", + bg: "bg-emerald-50", + }, + { + title: "引用率", + value: stats ? `${stats.citation_rate.toFixed(1)}%` : "0%", + icon: Percent, + color: "text-violet-600", + bg: "bg-violet-50", + }, + { + title: "平均位置", + value: stats?.avg_position ? stats.avg_position.toFixed(1) : "-", + icon: BarChart3, + color: "text-amber-600", + bg: "bg-amber-50", + }, + ]; + + function formatDate(dateStr: string) { + if (!dateStr) return "-"; + const d = new Date(dateStr); + return d.toLocaleDateString("zh-CN") + " " + d.toLocaleTimeString("zh-CN", { hour: "2-digit", minute: "2-digit" }); + } + return ( -
+

报告导出

导出引用检测数据为报告文件

@@ -126,21 +240,6 @@ export default function ReportsPage() {
-
- - -

- 目前仅支持 CSV 格式导出 -

-
- {error && (
@@ -155,18 +254,33 @@ export default function ReportsPage() {
)} - +
+ + +
@@ -179,7 +293,7 @@ export default function ReportsPage() {

1. 选择要导出的查询词

-

2. 目前支持 CSV 格式,可用 Excel 或 WPS 打开

+

2. 支持 CSV 和 PDF 两种格式导出

3. 导出文件包含以下字段:

  • 查询关键词
  • @@ -194,6 +308,94 @@ export default function ReportsPage() {
+ + {/* Stats Preview */} +
+

数据概览

+
+ {statCards.map((card) => ( + + +
+ +
+
+

{card.title}

+

+ {previewLoading ? : card.value} +

+
+
+
+ ))} +
+
+ + {/* Recent Citations */} + + + 最近引用记录 + 最近 10 条引用检测结果 + + +
+ + + + 平台 + 状态 + 位置 + 引用文本 + 竞争品牌 + 检测时间 + + + + {previewLoading ? ( + + + + + + ) : recentCitations.length === 0 ? ( + + + 暂无引用记录 + + + ) : ( + recentCitations.map((c) => ( + + {c.platform} + + {c.cited ? ( + + 已引用 + + ) : ( + 未引用 + )} + + {c.citation_position ?? "-"} + + {c.citation_text || "-"} + + + {c.competitor_brands?.length > 0 ? c.competitor_brands.join(", ") : "-"} + + {formatDate(c.queried_at)} + + )) + )} + +
+
+
+
); } + +function cn(...classes: (string | undefined | false)[]) { + return classes.filter(Boolean).join(" "); +} diff --git a/frontend/app/(dashboard)/dashboard/settings/page.tsx b/frontend/app/(dashboard)/dashboard/settings/page.tsx index 0265b93..f825a7b 100644 --- a/frontend/app/(dashboard)/dashboard/settings/page.tsx +++ b/frontend/app/(dashboard)/dashboard/settings/page.tsx @@ -1,81 +1,405 @@ "use client"; +import { useEffect, useState } from "react"; import { useSession } from "next-auth/react"; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; -import { User, Crown, Check, X } from "lucide-react"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog"; +import { Crown, Check, X, Loader2, AlertTriangle, CheckCircle } from "lucide-react"; +import { api } from "@/lib/api"; -const PLANS = [ - { - key: "free", - name: "免费版", - price: "¥0", - period: "/月", - features: [ - { text: "最多 3 个查询词", included: true }, - { text: "每日查询 1 次", included: true }, - { text: "基础报告导出", included: true }, - { text: "2 个平台监测", included: true }, - { text: "高级分析图表", included: false }, - { text: "竞品对比分析", included: false }, - { text: "API 接口访问", included: false }, - { text: "优先技术支持", included: false }, - ], - }, - { - key: "starter", - name: "入门版", - price: "¥99", - period: "/月", - features: [ - { text: "最多 10 个查询词", included: true }, - { text: "每日查询 3 次", included: true }, - { text: "基础报告导出", included: true }, - { text: "4 个平台监测", included: true }, - { text: "高级分析图表", included: true }, - { text: "竞品对比分析", included: false }, - { text: "API 接口访问", included: false }, - { text: "优先技术支持", included: false }, - ], - }, - { - key: "pro", - name: "专业版", - price: "¥299", - period: "/月", - features: [ - { text: "最多 50 个查询词", included: true }, - { text: "每日查询 10 次", included: true }, - { text: "高级报告导出", included: true }, - { text: "全部平台监测", included: true }, - { text: "高级分析图表", included: true }, - { text: "竞品对比分析", included: true }, - { text: "API 接口访问", included: false }, - { text: "优先技术支持", included: true }, - ], - }, - { - key: "business", - name: "企业版", - price: "¥999", - period: "/月", - features: [ - { text: "无限查询词", included: true }, - { text: "无限查询次数", included: true }, - { text: "定制化报告", included: true }, - { text: "全部平台监测", included: true }, - { text: "高级分析图表", included: true }, - { text: "竞品对比分析", included: true }, - { text: "API 接口访问", included: true }, - { text: "专属客户经理", included: true }, - ], - }, -]; +interface PlanFeature { + name: string; + included: boolean; +} + +interface PlanDetail { + id: string; + name: string; + price: number; + max_queries: number; + features: PlanFeature[]; +} + +interface SubscriptionData { + id: string; + plan: string; + status: string; + start_date: string; + end_date: string; + amount: number | null; + payment_method: string | null; + created_at: string; +} + +function ProfileTab() { + const { data: session, update } = useSession(); + const [name, setName] = useState(session?.user?.name || ""); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(""); + const [success, setSuccess] = useState(false); + + const handleSave = async (e: React.FormEvent) => { + e.preventDefault(); + if (!session?.accessToken) return; + setLoading(true); + setError(""); + setSuccess(false); + try { + await api.auth.updateProfile(session.accessToken, { name }); + await update({ name }); + setSuccess(true); + } catch (err: unknown) { + const message = err instanceof Error ? err.message : "保存失败"; + setError(message); + } finally { + setLoading(false); + } + }; + + return ( +
+ {error &&

{error}

} + {success &&

个人资料已更新

} +
+ + setName(e.target.value)} + placeholder="请输入用户名" + /> +
+
+ + +
+ +
+ ); +} + +function PasswordTab() { + const { data: session } = useSession(); + const [oldPassword, setOldPassword] = useState(""); + const [newPassword, setNewPassword] = useState(""); + const [confirmPassword, setConfirmPassword] = useState(""); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(""); + const [success, setSuccess] = useState(false); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setError(""); + setSuccess(false); + + if (newPassword.length < 8) { + setError("新密码至少需要 8 位"); + return; + } + if (newPassword !== confirmPassword) { + setError("两次输入的新密码不一致"); + return; + } + if (!session?.accessToken) { + setError("登录已过期,请重新登录"); + return; + } + + setLoading(true); + try { + await api.auth.changePassword(session.accessToken, oldPassword, newPassword); + setSuccess(true); + setOldPassword(""); + setNewPassword(""); + setConfirmPassword(""); + } catch (err: unknown) { + const message = err instanceof Error ? err.message : "修改失败"; + setError(message); + } finally { + setLoading(false); + } + }; + + return ( +
+ {error &&

{error}

} + {success &&

密码修改成功

} +
+ + setOldPassword(e.target.value)} + required + /> +
+
+ + setNewPassword(e.target.value)} + required + /> +
+
+ + setConfirmPassword(e.target.value)} + required + /> +
+ +
+ ); +} + +function SubscriptionTab() { + const { data: session } = useSession(); + const [plans, setPlans] = useState([]); + const [currentSub, setCurrentSub] = useState(null); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(null); + const [success, setSuccess] = useState(null); + + const [dialogOpen, setDialogOpen] = useState(false); + const [dialogType, setDialogType] = useState<"subscribe" | "cancel">("subscribe"); + const [selectedPlan, setSelectedPlan] = useState(""); + const [actionLoading, setActionLoading] = useState(false); + + const token = session?.accessToken; + const currentPlan = currentSub?.plan || "free"; + + useEffect(() => { + loadData(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [token]); + + async function loadData() { + setLoading(true); + setError(null); + try { + const plansData = await api.subscriptions.getPlans(); + setPlans(plansData); + if (token) { + try { + const subData = await api.subscriptions.getCurrent(token); + setCurrentSub(subData); + } catch { + // 暂无订阅记录,保持 null + setCurrentSub(null); + } + } + } catch (err) { + setError(err instanceof Error ? err.message : "加载失败"); + } finally { + setLoading(false); + } + } + + function openSubscribeDialog(planId: string) { + setSelectedPlan(planId); + setDialogType("subscribe"); + setDialogOpen(true); + } + + function openCancelDialog() { + setDialogType("cancel"); + setDialogOpen(true); + } + + async function handleConfirm() { + if (!token) return; + setActionLoading(true); + setSuccess(null); + try { + if (dialogType === "subscribe") { + await api.subscriptions.subscribe(token, selectedPlan); + setSuccess("订阅成功"); + } else { + await api.subscriptions.cancel(token); + setSuccess("订阅已取消"); + } + await loadData(); + setDialogOpen(false); + setTimeout(() => setSuccess(null), 3000); + } catch (err) { + setError(err instanceof Error ? err.message : "操作失败"); + setDialogOpen(false); + } finally { + setActionLoading(false); + } + } + + const currentPlanName = plans.find((p) => p.id === currentPlan)?.name || currentPlan; + + return ( +
+ {error && ( +
+ + {error} +
+ )} + + {success && ( +
+ + {success} +
+ )} + + + + 当前套餐 + + +
+
+ +
+
+

{currentPlanName}

+
+ 当前套餐 + {currentSub?.status && ( + + 状态: {currentSub.status === "active" ? "生效中" : currentSub.status} + + )} +
+
+
+ {currentPlan !== "free" && currentSub && ( +
+

有效期: {currentSub.start_date} 至 {currentSub.end_date}

+ {currentSub.amount &&

金额: ¥{currentSub.amount}

} +
+ )} + {currentPlan !== "free" && ( + + )} +
+
+ +
+

套餐对比

+ {loading ? ( +
+ +
+ ) : ( +
+ {plans.map((plan) => { + const isCurrent = plan.id === currentPlan; + const canUpgrade = plan.id !== currentPlan; + return ( + + + {plan.name} + + ¥{plan.price} + /月 + + + +
    + {plan.features.map((feature, idx) => ( +
  • + {feature.included ? ( + + ) : ( + + )} + + {feature.name} + +
  • + ))} +
+ {isCurrent ? ( + + 当前套餐 + + ) : canUpgrade ? ( + + ) : null} +
+
+ ); + })} +
+ )} +
+ + + + + + {dialogType === "subscribe" ? "确认订阅" : "取消订阅"} + + + {dialogType === "subscribe" + ? `确认使用模拟支付订阅「${plans.find((p) => p.id === selectedPlan)?.name || selectedPlan}」套餐?` + : "确认取消当前订阅?取消后将在当前计费周期结束后恢复为免费版。"} + + + + + + + + +
+ ); +} export default function SettingsPage() { - const { data: session } = useSession(); - const currentPlan = "free"; // MVP阶段默认免费版 - return (
@@ -83,89 +407,38 @@ export default function SettingsPage() {

管理您的账户和订阅信息

- - - 用户信息 - - -
-
- -
-
-

{session?.user?.name || "未设置姓名"}

-

{session?.user?.email || "—"}

-
-
-
-
- -
-
-

当前套餐

-
- {PLANS.find((p) => p.key === currentPlan)?.name || "免费版"} - MVP 阶段所有功能免费开放 -
-
-
-
-
- -
-

套餐对比

-
- {PLANS.map((plan) => ( - - - {plan.name} - - {plan.price} - {plan.period} - - - -
    - {plan.features.map((feature, idx) => ( -
  • - {feature.included ? ( - - ) : ( - - )} - - {feature.text} - -
  • - ))} -
- {plan.key === currentPlan && ( - - 当前套餐 - - )} -
-
- ))} -
-
- - - - MVP 阶段说明 - - -

- 当前处于 GEO 平台 MVP 阶段,所有功能均可免费使用。正式版上线后将启用套餐限制,届时您可以选择适合您的订阅方案。 -

-

- 如有任何问题或建议,欢迎通过平台反馈渠道联系我们。 -

-
-
+ + + 个人资料 + 密码修改 + 订阅管理 + + + + + 个人资料 + 管理您的基本信息 + + + + + + + + + + 密码修改 + 更改您的登录密码 + + + + + + + + + +
); } diff --git a/frontend/components/layout/sidebar.tsx b/frontend/components/layout/sidebar.tsx index 876016a..49c6a3c 100644 --- a/frontend/components/layout/sidebar.tsx +++ b/frontend/components/layout/sidebar.tsx @@ -2,6 +2,7 @@ import Link from "next/link"; import { usePathname } from "next/navigation"; +import { useSession } from "next-auth/react"; import { cn } from "@/lib/utils"; import { LayoutDashboard, @@ -9,9 +10,10 @@ import { Quote, FileDown, Settings, + Shield, } from "lucide-react"; -const navItems = [ +const baseNavItems = [ { name: "数据总览", href: "/dashboard", icon: LayoutDashboard }, { name: "查询管理", href: "/dashboard/queries", icon: Search }, { name: "引用记录", href: "/dashboard/citations", icon: Quote }, @@ -21,6 +23,11 @@ const navItems = [ export function Sidebar() { const pathname = usePathname(); + const { data: session } = useSession(); + + const navItems = session?.user?.is_admin + ? [...baseNavItems, { name: "管理后台", href: "/dashboard/admin", icon: Shield }] + : baseNavItems; return (