diff --git a/.qoder/repowiki/zh/content/AI平台集成/AI平台集成.md b/.qoder/repowiki/zh/content/AI平台集成/AI平台集成.md
index afd216e..6c94e2b 100644
--- a/.qoder/repowiki/zh/content/AI平台集成/AI平台集成.md
+++ b/.qoder/repowiki/zh/content/AI平台集成/AI平台集成.md
@@ -5,6 +5,12 @@
- [backend/app/workers/platforms/base.py](file://backend/app/workers/platforms/base.py)
- [backend/app/workers/platforms/kimi.py](file://backend/app/workers/platforms/kimi.py)
- [backend/app/workers/platforms/wenxin.py](file://backend/app/workers/platforms/wenxin.py)
+- [backend/app/workers/platforms/tongyi.py](file://backend/app/workers/platforms/tongyi.py)
+- [backend/app/workers/platforms/doubao.py](file://backend/app/workers/platforms/doubao.py)
+- [backend/app/workers/platforms/qingyan.py](file://backend/app/workers/platforms/qingyan.py)
+- [backend/app/workers/platforms/tiangong.py](file://backend/app/workers/platforms/tiangong.py)
+- [backend/app/workers/platforms/xinghuo.py](file://backend/app/workers/platforms/xinghuo.py)
+- [backend/app/workers/platforms/search_engine.py](file://backend/app/workers/platforms/search_engine.py)
- [backend/app/workers/citation_engine.py](file://backend/app/workers/citation_engine.py)
- [backend/app/config.py](file://backend/app/config.py)
- [backend/app/models/query.py](file://backend/app/models/query.py)
@@ -18,6 +24,14 @@
- [backend/requirements.txt](file://backend/requirements.txt)
+## 更新摘要
+**变更内容**
+- 新增5个基于搜索引擎的AI平台适配器(通义千问、豆包、智谱清言、天工AI、讯飞星火)
+- 替代原有的Playwright浏览器自动化适配器架构
+- 新增智能搜索引擎模块,提供DuckDuckGo和Wikipedia双回退机制
+- 更新前端平台映射以支持新平台
+- 保持相同的引用检测引擎和调度器架构
+
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
@@ -31,9 +45,9 @@
10. [附录](#附录)
## 简介
-本项目是一个AI平台集成系统,支持通过统一适配器接口对接多个大模型平台(如Kimi、文心一言)。系统包含以下能力:
+本项目是一个AI平台集成系统,支持通过统一适配器接口对接多个大模型平台(如通义千问、豆包、智谱清言、天工AI、讯飞星火)。系统包含以下能力:
- 适配器架构:以抽象基类为统一接口,扩展新的AI平台只需实现query方法。
-- 浏览器自动化:基于Playwright对网页版AI平台进行自动交互,包含页面定位、输入提交、响应稳定检测与指数退避重试。
+- 搜索引擎集成:基于DuckDuckGo和Wikipedia的智能搜索引擎,提供稳定的回退机制。
- 引用检测引擎:对平台返回内容进行品牌匹配、竞争品牌识别与置信度评分,生成引用记录。
- 定时调度:基于APScheduler的异步调度器,周期性检查并执行到期查询任务。
- API与服务层:提供查询与统计接口,支持立即执行、导出CSV等功能。
@@ -56,8 +70,12 @@ API["API 层
citations.py"]
SVC["服务层
services/citation.py"]
SCH["调度器
workers/scheduler.py"]
CE["引用检测引擎
workers/citation_engine.py"]
-AD_K["适配器: Kimi
workers/platforms/kimi.py"]
-AD_W["适配器: 文心一言
workers/platforms/wenxin.py"]
+AD_T["适配器: 通义千问
workers/platforms/tongyi.py"]
+AD_D["适配器: 豆包
workers/platforms/doubao.py"]
+AD_Q["适配器: 智谱清言
workers/platforms/qingyan.py"]
+AD_G["适配器: 天工AI
workers/platforms/tiangong.py"]
+AD_X["适配器: 讯飞星火
workers/platforms/xinghuo.py"]
+SE["搜索引擎
workers/platforms/search_engine.py"]
CFG["配置
app/config.py"]
DB_Q["模型: Query
models/query.py"]
DB_CR["模型: CitationRecord
models/citation_record.py"]
@@ -67,22 +85,33 @@ FE --> API
API --> SVC
SVC --> SCH
SCH --> CE
-CE --> AD_K
-CE --> AD_W
+CE --> AD_T
+CE --> AD_D
+CE --> AD_Q
+CE --> AD_G
+CE --> AD_X
+AD_T --> SE
+AD_D --> SE
+AD_Q --> SE
+AD_G --> SE
+AD_X --> SE
CE --> DB_CR
CE --> DB_QT
CE --> DB_Q
-AD_K --> CFG
-AD_W --> CFG
+SE --> CFG
```
**图表来源**
- [backend/app/api/citations.py:1-78](file://backend/app/api/citations.py#L1-L78)
- [backend/app/services/citation.py:1-269](file://backend/app/services/citation.py#L1-L269)
- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
-- [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309)
-- [backend/app/workers/platforms/kimi.py:1-206](file://backend/app/workers/platforms/kimi.py#L1-L206)
-- [backend/app/workers/platforms/wenxin.py:1-205](file://backend/app/workers/platforms/wenxin.py#L1-L205)
+- [backend/app/workers/citation_engine.py:1-330](file://backend/app/workers/citation_engine.py#L1-L330)
+- [backend/app/workers/platforms/tongyi.py:1-38](file://backend/app/workers/platforms/tongyi.py#L1-L38)
+- [backend/app/workers/platforms/doubao.py:1-38](file://backend/app/workers/platforms/doubao.py#L1-L38)
+- [backend/app/workers/platforms/qingyan.py:1-38](file://backend/app/workers/platforms/qingyan.py#L1-L38)
+- [backend/app/workers/platforms/tiangong.py:1-38](file://backend/app/workers/platforms/tiangong.py#L1-L38)
+- [backend/app/workers/platforms/xinghuo.py:1-38](file://backend/app/workers/platforms/xinghuo.py#L1-L38)
+- [backend/app/workers/platforms/search_engine.py:1-174](file://backend/app/workers/platforms/search_engine.py#L1-L174)
- [backend/app/config.py:1-17](file://backend/app/config.py#L1-L17)
- [backend/app/models/query.py:1-55](file://backend/app/models/query.py#L1-L55)
- [backend/app/models/citation_record.py:1-42](file://backend/app/models/citation_record.py#L1-L42)
@@ -92,19 +121,23 @@ AD_W --> CFG
- [backend/app/api/citations.py:1-78](file://backend/app/api/citations.py#L1-L78)
- [backend/app/services/citation.py:1-269](file://backend/app/services/citation.py#L1-L269)
- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
-- [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309)
+- [backend/app/workers/citation_engine.py:1-330](file://backend/app/workers/citation_engine.py#L1-L330)
- [backend/app/workers/platforms/base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)
-- [backend/app/workers/platforms/kimi.py:1-206](file://backend/app/workers/platforms/kimi.py#L1-L206)
-- [backend/app/workers/platforms/wenxin.py:1-205](file://backend/app/workers/platforms/wenxin.py#L1-L205)
+- [backend/app/workers/platforms/tongyi.py:1-38](file://backend/app/workers/platforms/tongyi.py#L1-L38)
+- [backend/app/workers/platforms/doubao.py:1-38](file://backend/app/workers/platforms/doubao.py#L1-L38)
+- [backend/app/workers/platforms/qingyan.py:1-38](file://backend/app/workers/platforms/qingyan.py#L1-L38)
+- [backend/app/workers/platforms/tiangong.py:1-38](file://backend/app/workers/platforms/tiangong.py#L1-L38)
+- [backend/app/workers/platforms/xinghuo.py:1-38](file://backend/app/workers/platforms/xinghuo.py#L1-L38)
+- [backend/app/workers/platforms/search_engine.py:1-174](file://backend/app/workers/platforms/search_engine.py#L1-L174)
- [backend/app/config.py:1-17](file://backend/app/config.py#L1-L17)
- [backend/app/models/query.py:1-55](file://backend/app/models/query.py#L1-L55)
- [backend/app/models/citation_record.py:1-42](file://backend/app/models/citation_record.py#L1-L42)
- [backend/app/models/query_task.py:1-39](file://backend/app/models/query_task.py#L1-L39)
-- [frontend/lib/platforms.ts:1-18](file://frontend/lib/platforms.ts#L1-L18)
+- [frontend/lib/platforms.ts:1-24](file://frontend/lib/platforms.ts#L1-L24)
## 核心组件
- 抽象适配器基类:定义统一的平台名称、URL以及查询接口,便于扩展新平台。
-- 平台适配器(Kimi/文心一言):基于Playwright实现页面交互、输入提交、响应稳定检测与重试。
+- 搜索引擎适配器(通义千问/豆包/智谱清言/天工AI/讯飞星火):基于DuckDuckGo和Wikipedia的智能搜索引擎,提供稳定的回退机制。
- 引用检测引擎:品牌匹配(精确/别名/模糊)、竞争品牌识别、置信度评分与记录生成。
- 调度器:定时扫描到期查询,调用引擎执行并更新任务状态。
- API与服务:提供查询列表、统计、立即执行、导出CSV等接口。
@@ -112,9 +145,13 @@ AD_W --> CFG
**章节来源**
- [backend/app/workers/platforms/base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)
-- [backend/app/workers/platforms/kimi.py:1-206](file://backend/app/workers/platforms/kimi.py#L1-L206)
-- [backend/app/workers/platforms/wenxin.py:1-205](file://backend/app/workers/platforms/wenxin.py#L1-L205)
-- [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309)
+- [backend/app/workers/platforms/tongyi.py:1-38](file://backend/app/workers/platforms/tongyi.py#L1-L38)
+- [backend/app/workers/platforms/doubao.py:1-38](file://backend/app/workers/platforms/doubao.py#L1-L38)
+- [backend/app/workers/platforms/qingyan.py:1-38](file://backend/app/workers/platforms/qingyan.py#L1-L38)
+- [backend/app/workers/platforms/tiangong.py:1-38](file://backend/app/workers/platforms/tiangong.py#L1-L38)
+- [backend/app/workers/platforms/xinghuo.py:1-38](file://backend/app/workers/platforms/xinghuo.py#L1-L38)
+- [backend/app/workers/platforms/search_engine.py:1-174](file://backend/app/workers/platforms/search_engine.py#L1-L174)
+- [backend/app/workers/citation_engine.py:1-330](file://backend/app/workers/citation_engine.py#L1-L330)
- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
- [backend/app/api/citations.py:1-78](file://backend/app/api/citations.py#L1-L78)
- [backend/app/services/citation.py:1-269](file://backend/app/services/citation.py#L1-L269)
@@ -123,7 +160,7 @@ AD_W --> CFG
- [backend/app/models/query_task.py:1-39](file://backend/app/models/query_task.py#L1-L39)
## 架构总览
-系统通过“适配器 + 引擎 + 调度器”的解耦方式实现多平台接入与统一处理流程。前端通过API触发查询与查看统计;调度器按频率驱动查询;引擎负责跨平台数据采集与分析;服务层提供数据访问与导出能力。
+系统通过"适配器 + 引擎 + 调度器"的解耦方式实现多平台接入与统一处理流程。前端通过API触发查询与查看统计;调度器按频率驱动查询;引擎负责跨平台数据采集与分析;服务层提供数据访问与导出能力。所有平台现在都通过搜索引擎获取内容,提供更稳定的回退机制。
```mermaid
sequenceDiagram
@@ -133,6 +170,7 @@ participant SVC as "服务层"
participant SCH as "调度器"
participant CE as "引用检测引擎"
participant AD as "平台适配器"
+participant SE as "搜索引擎"
participant DB as "数据库"
FE->>API : 触发立即查询
API->>SVC : trigger_query_now()
@@ -140,6 +178,8 @@ SVC->>DB : 写入 QueryTask(状态 pending)
Note over SCH,DB : 定时任务扫描 next_query_at<=now 的查询
SCH->>CE : execute_query(query)
CE->>AD : query(keyword)
+AD->>SE : fetch_search_content(platform_name, keyword)
+SE-->>AD : 搜索结果文本
AD-->>CE : 原始响应文本
CE->>CE : 品牌匹配/竞争品牌识别
CE->>DB : 写入 CitationRecord
@@ -151,9 +191,9 @@ API-->>FE : 返回任务状态/查询结果
- [backend/app/api/citations.py:59-78](file://backend/app/api/citations.py#L59-L78)
- [backend/app/services/citation.py:204-234](file://backend/app/services/citation.py#L204-L234)
- [backend/app/workers/scheduler.py:51-84](file://backend/app/workers/scheduler.py#L51-L84)
-- [backend/app/workers/citation_engine.py:159-234](file://backend/app/workers/citation_engine.py#L159-L234)
-- [backend/app/workers/platforms/kimi.py:33-48](file://backend/app/workers/platforms/kimi.py#L33-L48)
-- [backend/app/workers/platforms/wenxin.py:33-48](file://backend/app/workers/platforms/wenxin.py#L33-L48)
+- [backend/app/workers/citation_engine.py:177-254](file://backend/app/workers/citation_engine.py#L177-L254)
+- [backend/app/workers/platforms/tongyi.py:16-33](file://backend/app/workers/platforms/tongyi.py#L16-L33)
+- [backend/app/workers/platforms/search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
- [backend/app/models/query.py:29-31](file://backend/app/models/query.py#L29-L31)
- [backend/app/models/citation_record.py:11-42](file://backend/app/models/citation_record.py#L11-L42)
- [backend/app/models/query_task.py:11-39](file://backend/app/models/query_task.py#L11-L39)
@@ -171,6 +211,7 @@ API-->>FE : 返回任务状态/查询结果
- 设计优势
- 解耦平台差异,统一调用入口
- 易于新增平台与替换实现
+ - 基于搜索引擎的适配器无需复杂的浏览器自动化
```mermaid
classDiagram
@@ -180,91 +221,119 @@ class BasePlatformAdapter {
+query(keyword) str
+close() void
}
-class KimiAdapter {
-+platform_name = "kimi"
-+platform_url = "https : //kimi.moonshot.cn"
+class TongyiAdapter {
++platform_name = "tongyi"
++platform_url = "https : //tongyi.aliyun.com/qianwen"
+query(keyword) str
--_ensure_browser()
--_do_query(keyword) str
--_wait_for_response_stable(page) str
++_do_query(keyword) str
+close() void
}
-class WenxinAdapter {
-+platform_name = "wenxin"
-+platform_url = "https : //yiyan.baidu.com"
+class DoubaoAdapter {
++platform_name = "doubao"
++platform_url = "https : //www.doubao.com/"
+query(keyword) str
--_ensure_browser()
--_do_query(keyword) str
--_wait_for_response_stable(page) str
++_do_query(keyword) str
+close() void
}
-BasePlatformAdapter <|-- KimiAdapter
-BasePlatformAdapter <|-- WenxinAdapter
+class QingyanAdapter {
++platform_name = "qingyan"
++platform_url = "https : //chatglm.cn/"
++query(keyword) str
++_do_query(keyword) str
++close() void
+}
+class TiangongAdapter {
++platform_name = "tiangong"
++platform_url = "https : //www.tiangong.cn/"
++query(keyword) str
++_do_query(keyword) str
++close() void
+}
+class XinghuoAdapter {
++platform_name = "xinghuo"
++platform_url = "https : //xinghuo.xfyun.cn/"
++query(keyword) str
++_do_query(keyword) str
++close() void
+}
+BasePlatformAdapter <|-- TongyiAdapter
+BasePlatformAdapter <|-- DoubaoAdapter
+BasePlatformAdapter <|-- QingyanAdapter
+BasePlatformAdapter <|-- TiangongAdapter
+BasePlatformAdapter <|-- XinghuoAdapter
```
**图表来源**
- [backend/app/workers/platforms/base.py:4-17](file://backend/app/workers/platforms/base.py#L4-L17)
-- [backend/app/workers/platforms/kimi.py:11-206](file://backend/app/workers/platforms/kimi.py#L11-L206)
-- [backend/app/workers/platforms/wenxin.py:11-205](file://backend/app/workers/platforms/wenxin.py#L11-L205)
+- [backend/app/workers/platforms/tongyi.py:10-38](file://backend/app/workers/platforms/tongyi.py#L10-L38)
+- [backend/app/workers/platforms/doubao.py:10-38](file://backend/app/workers/platforms/doubao.py#L10-L38)
+- [backend/app/workers/platforms/qingyan.py:10-38](file://backend/app/workers/platforms/qingyan.py#L10-L38)
+- [backend/app/workers/platforms/tiangong.py:10-38](file://backend/app/workers/platforms/tiangong.py#L10-L38)
+- [backend/app/workers/platforms/xinghuo.py:10-38](file://backend/app/workers/platforms/xinghuo.py#L10-L38)
**章节来源**
- [backend/app/workers/platforms/base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)
-- [backend/app/workers/platforms/kimi.py:1-206](file://backend/app/workers/platforms/kimi.py#L1-L206)
-- [backend/app/workers/platforms/wenxin.py:1-205](file://backend/app/workers/platforms/wenxin.py#L1-L205)
+- [backend/app/workers/platforms/tongyi.py:1-38](file://backend/app/workers/platforms/tongyi.py#L1-L38)
+- [backend/app/workers/platforms/doubao.py:1-38](file://backend/app/workers/platforms/doubao.py#L1-L38)
+- [backend/app/workers/platforms/qingyan.py:1-38](file://backend/app/workers/platforms/qingyan.py#L1-L38)
+- [backend/app/workers/platforms/tiangong.py:1-38](file://backend/app/workers/platforms/tiangong.py#L1-L38)
+- [backend/app/workers/platforms/xinghuo.py:1-38](file://backend/app/workers/platforms/xinghuo.py#L1-L38)
-### Kimi平台浏览器自动化集成
-- Playwright配置
- - 启动headless Chromium,设置视口与UA
- - 异常处理:若未安装浏览器,抛出明确提示
-- 页面交互逻辑
- - 导航至平台URL,等待页面加载
- - 多选择器尝试定位输入框,支持textarea/div/input等
- - 自动提交:优先点击发送按钮,否则按回车
-- 响应稳定检测
- - 轮询消息容器,连续多次检测文本未变化视为稳定
- - 超时则返回当前文本
-- 错误重试机制
- - 最多重试3次,指数退避(2^attempt秒延迟)
- - 记录每次尝试日志,最终失败抛出异常
+### 搜索引擎适配器实现
+- 搜索引擎模式
+ - 所有平台适配器现在都基于fetch_search_content函数
+ - 通过DuckDuckGo搜索关键词,自动回退到Wikipedia
+ - 提供指数退避重试机制(最多3次尝试)
+- 搜索策略
+ - 组合关键词与目标品牌,确保搜索结果包含品牌信息
+ - 优先使用DuckDuckGo HTML搜索,自动检测结果有效性
+ - 当DuckDuckGo受限时自动回退到Wikipedia API
+- 错误处理
+ - 每次尝试失败都会记录警告日志
+ - 最终失败时抛出异常,便于上层处理
+ - 适配器close方法为空实现,因为无需浏览器资源管理
```mermaid
flowchart TD
-Start(["开始查询"]) --> Ensure["启动浏览器"]
-Ensure --> NewContext["新建上下文与页面"]
-NewContext --> Goto["导航到平台URL"]
-Goto --> WaitInput["等待输入框出现"]
-WaitInput --> Fill["填充关键词"]
-Fill --> Submit{"找到发送按钮?"}
-Submit --> |是| Click["点击发送按钮"]
-Submit --> |否| Enter["按回车键提交"]
-Click --> WaitResp["等待回复稳定"]
-Enter --> WaitResp
-WaitResp --> Stable{"文本稳定?"}
-Stable --> |是| Return["返回响应文本"]
-Stable --> |否| Sleep["等待2秒"] --> WaitResp
-Return --> Close["关闭页面与上下文"]
-Close --> End(["结束"])
+Start(["开始查询"]) --> Combine["组合关键词: keyword + target_brand"]
+Combine --> TryDDG["尝试DuckDuckGo搜索"]
+TryDDG --> Valid{"结果有效?"}
+Valid --> |是| Parse["解析搜索结果"]
+Valid --> |否| Wiki["回退到Wikipedia搜索"]
+Parse --> Return["返回搜索文本"]
+Wiki --> Parse
+Return --> End(["结束"])
```
**图表来源**
-- [backend/app/workers/platforms/kimi.py:21-125](file://backend/app/workers/platforms/kimi.py#L21-L125)
-- [backend/app/workers/platforms/kimi.py:126-197](file://backend/app/workers/platforms/kimi.py#L126-L197)
+- [backend/app/workers/platforms/tongyi.py:16-33](file://backend/app/workers/platforms/tongyi.py#L16-L33)
+- [backend/app/workers/platforms/search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
+- [backend/app/workers/platforms/search_engine.py:79-144](file://backend/app/workers/platforms/search_engine.py#L79-L144)
**章节来源**
-- [backend/app/workers/platforms/kimi.py:1-206](file://backend/app/workers/platforms/kimi.py#L1-L206)
+- [backend/app/workers/platforms/tongyi.py:1-38](file://backend/app/workers/platforms/tongyi.py#L1-L38)
+- [backend/app/workers/platforms/doubao.py:1-38](file://backend/app/workers/platforms/doubao.py#L1-L38)
+- [backend/app/workers/platforms/qingyan.py:1-38](file://backend/app/workers/platforms/qingyan.py#L1-L38)
+- [backend/app/workers/platforms/tiangong.py:1-38](file://backend/app/workers/platforms/tiangong.py#L1-L38)
+- [backend/app/workers/platforms/xinghuo.py:1-38](file://backend/app/workers/platforms/xinghuo.py#L1-L38)
+- [backend/app/workers/platforms/search_engine.py:1-174](file://backend/app/workers/platforms/search_engine.py#L1-L174)
-### 文心一言平台API集成实现
-- 平台适配器实现
- - 与Kimi适配器一致的Playwright交互流程
- - 输入框与发送按钮选择策略、响应稳定检测与重试机制
-- 配置管理
- - 通过配置类读取环境变量,支持自定义浏览器路径等参数
-- 注意事项
- - 若Playwright浏览器未安装,会抛出明确错误提示,需先安装对应浏览器
+### 智能搜索引擎模块
+- DuckDuckGo搜索实现
+ - 使用HTML版本搜索,无需API密钥
+ - 支持多种结果块格式的解析
+ - 自动检测非结果页面并回退
+- Wikipedia回退机制
+ - 通过Wikipedia API获取词条摘要
+ - 自动清理HTML标记和引用格式
+ - 提供稳定可靠的备用搜索源
+- 搜索内容提取
+ - 统一的HTML清理和文本提取
+ - 支持标题和摘要的组合输出
+ - 限制最大字符数防止内容过长
**章节来源**
-- [backend/app/workers/platforms/wenxin.py:1-205](file://backend/app/workers/platforms/wenxin.py#L1-L205)
-- [backend/app/config.py:1-17](file://backend/app/config.py#L1-L17)
+- [backend/app/workers/platforms/search_engine.py:1-174](file://backend/app/workers/platforms/search_engine.py#L1-L174)
### 引用检测引擎工作原理
- 品牌匹配策略
@@ -296,13 +365,13 @@ ForEachPlat --> Done["完成"]
```
**图表来源**
-- [backend/app/workers/citation_engine.py:148-234](file://backend/app/workers/citation_engine.py#L148-L234)
-- [backend/app/workers/citation_engine.py:236-266](file://backend/app/workers/citation_engine.py#L236-L266)
+- [backend/app/workers/citation_engine.py:177-254](file://backend/app/workers/citation_engine.py#L177-L254)
+- [backend/app/workers/citation_engine.py:256-287](file://backend/app/workers/citation_engine.py#L256-L287)
- [backend/app/models/citation_record.py:11-42](file://backend/app/models/citation_record.py#L11-L42)
- [backend/app/models/query.py:29-31](file://backend/app/models/query.py#L29-L31)
**章节来源**
-- [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309)
+- [backend/app/workers/citation_engine.py:1-330](file://backend/app/workers/citation_engine.py#L1-L330)
- [tests/test_citation_engine.py:1-54](file://tests/test_citation_engine.py#L1-L54)
### 定时调度与任务管理
@@ -353,9 +422,10 @@ end
## 依赖分析
- 外部依赖
- - FastAPI、SQLAlchemy、APScheduler、Playwright、Pydantic Settings等
+ - FastAPI、SQLAlchemy、APScheduler、httpx、Pydantic Settings等
- 内部模块耦合
- CitationEngine依赖适配器与数据库模型
+ - 所有适配器依赖search_engine模块
- Scheduler依赖CitationEngine与Query模型
- API与Service层依赖数据库与权限控制
@@ -364,13 +434,21 @@ graph LR
REQ["requirements.txt"] --> FA["FastAPI"]
REQ --> SA["SQLAlchemy"]
REQ --> AP["APScheduler"]
-REQ --> PW["Playwright"]
+REQ --> HTTPX["httpx"]
REQ --> PYD["Pydantic Settings"]
-CE["CitationEngine"] --> AD1["KimiAdapter"]
-CE --> AD2["WenxinAdapter"]
+CE["CitationEngine"] --> AD1["TongyiAdapter"]
+CE --> AD2["DoubaoAdapter"]
+CE --> AD3["QingyanAdapter"]
+CE --> AD4["TiangongAdapter"]
+CE --> AD5["XinghuoAdapter"]
CE --> DB1["CitationRecord"]
CE --> DB2["QueryTask"]
CE --> DB3["Query"]
+AD1 --> SE["SearchEngine"]
+AD2 --> SE
+AD3 --> SE
+AD4 --> SE
+AD5 --> SE
SCH["Scheduler"] --> CE
API["API"] --> SVC["Service"]
SVC --> DB1
@@ -378,53 +456,52 @@ SVC --> DB3
```
**图表来源**
-- [backend/requirements.txt:1-35](file://backend/requirements.txt#L1-L35)
-- [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309)
+- [backend/requirements.txt:1-36](file://backend/requirements.txt#L1-L36)
+- [backend/app/workers/citation_engine.py:1-330](file://backend/app/workers/citation_engine.py#L1-L330)
- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
- [backend/app/api/citations.py:1-78](file://backend/app/api/citations.py#L1-L78)
- [backend/app/services/citation.py:1-269](file://backend/app/services/citation.py#L1-L269)
**章节来源**
-- [backend/requirements.txt:1-35](file://backend/requirements.txt#L1-L35)
+- [backend/requirements.txt:1-36](file://backend/requirements.txt#L1-L36)
## 性能考虑
-- 浏览器资源管理
- - 适配器在close中释放浏览器与上下文,避免资源泄漏
-- 重试与退避
- - 指数退避降低平台压力,提升成功率
-- 响应稳定检测
- - 通过连续检测减少过早截断,提高稳定性
-- 数据库索引
+- 搜索引擎优化
+ - DuckDuckGo搜索无需API密钥,成本低且稳定
+ - Wikipedia回退机制确保搜索成功率
+ - 指数退避减少对搜索引擎的压力
+- 资源管理
+ - 适配器无需浏览器资源,内存占用更低
+ - 搜索引擎调用使用异步HTTP客户端
+- 响应稳定性
+ - 搜索结果比网页自动化更稳定
+ - 双回退机制提高成功率
+- 数据库性能
- Query与CitationRecord的关键字段建立索引,优化查询性能
- 异步调度
- 使用AsyncIOScheduler与异步数据库连接,提升并发效率
-[本节为通用建议,无需特定文件引用]
-
## 故障排查指南
-- Playwright浏览器未安装
- - 现象:启动浏览器时报错,提示需要安装浏览器
- - 处理:按照提示运行安装命令,确保浏览器可用
-- 页面元素定位失败
- - 现象:找不到输入框或发送按钮
- - 处理:检查选择器策略或平台UI变更,必要时调整选择器集合
-- 响应长时间不稳定
- - 现象:等待回复超时返回当前文本
- - 处理:适当延长等待时间或检查网络与平台状态
+- 搜索引擎访问失败
+ - 现象:DuckDuckGo搜索失败或被限制
+ - 处理:自动回退到Wikipedia,检查网络连接
+- Wikipedia API调用失败
+ - 现象:Wikipedia搜索返回空结果
+ - 处理:检查关键词有效性,确认Wikipedia服务可用
+- 搜索结果为空
+ - 现象:适配器返回空字符串
+ - 处理:尝试更具体的关键词,检查搜索引擎状态
- 查询任务失败
- 现象:QueryTask状态为failed并记录错误信息
- - 处理:查看错误日志,确认平台可用性与网络状况
+ - 处理:查看错误日志,确认搜索引擎可用性与网络状况
**章节来源**
-- [backend/app/workers/platforms/kimi.py:27-31](file://backend/app/workers/platforms/kimi.py#L27-L31)
-- [backend/app/workers/platforms/kimi.py:87-88](file://backend/app/workers/platforms/kimi.py#L87-L88)
-- [backend/app/workers/platforms/kimi.py:145-148](file://backend/app/workers/platforms/kimi.py#L145-L148)
-- [backend/app/workers/citation_engine.py:211-227](file://backend/app/workers/citation_engine.py#L211-L227)
+- [backend/app/workers/platforms/search_engine.py:139-144](file://backend/app/workers/platforms/search_engine.py#L139-L144)
+- [backend/app/workers/platforms/tongyi.py:22-29](file://backend/app/workers/platforms/tongyi.py#L22-L29)
+- [backend/app/workers/citation_engine.py:231-247](file://backend/app/workers/citation_engine.py#L231-L247)
## 结论
-该系统通过适配器模式实现了对多平台的统一接入,结合浏览器自动化与引用检测引擎,提供了从查询、匹配到统计与导出的完整能力。调度器保障了周期性任务的可靠执行,API与服务层为前端与运维提供了清晰的接口。未来可在适配器扩展、稳定性与性能优化方面持续演进。
-
-[本节为总结性内容,无需特定文件引用]
+该系统通过适配器模式实现了对多平台的统一接入,现在采用基于搜索引擎的稳定架构,结合智能回退机制与引用检测引擎,提供了从查询、匹配到统计与导出的完整能力。搜索引擎模式相比浏览器自动化具有更高的稳定性、更低的成本和更好的可扩展性。调度器保障了周期性任务的可靠执行,API与服务层为前端与运维提供了清晰的接口。未来可在搜索引擎优化、稳定性与性能优化方面持续演进。
## 附录
@@ -436,12 +513,18 @@ SVC --> DB3
- 最佳实践
- 明确定义platform_name与platform_url
- 统一异常处理与日志记录
- - 使用指数退避与响应稳定检测提升鲁棒性
+ - 使用指数退避与搜索引擎回退提升鲁棒性
- 合理设置超时与重试次数
- - 在close中确保资源释放
+ - 在close中确保资源释放(如需)
- 为新平台编写单元测试覆盖关键场景
+- 搜索引擎适配器开发要点
+ - 直接复用fetch_search_content函数
+ - 不需要复杂的浏览器自动化逻辑
+ - 注重错误处理和日志记录
+ - 考虑关键词组合策略以提高搜索准确性
**章节来源**
- [backend/app/workers/platforms/base.py:4-17](file://backend/app/workers/platforms/base.py#L4-L17)
-- [backend/app/workers/citation_engine.py:152-155](file://backend/app/workers/citation_engine.py#L152-L155)
-- [frontend/lib/platforms.ts:1-18](file://frontend/lib/platforms.ts#L1-L18)
\ No newline at end of file
+- [backend/app/workers/citation_engine.py:164-175](file://backend/app/workers/citation_engine.py#L164-L175)
+- [frontend/lib/platforms.ts:1-24](file://frontend/lib/platforms.ts#L1-L24)
+- [backend/app/workers/platforms/search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
\ No newline at end of file
diff --git a/.qoder/repowiki/zh/content/AI平台集成/Kimi平台集成.md b/.qoder/repowiki/zh/content/AI平台集成/Kimi平台集成.md
index bbb4ea8..c502f61 100644
--- a/.qoder/repowiki/zh/content/AI平台集成/Kimi平台集成.md
+++ b/.qoder/repowiki/zh/content/AI平台集成/Kimi平台集成.md
@@ -4,9 +4,11 @@
**本文档引用的文件**
- [backend/app/workers/platforms/kimi.py](file://backend/app/workers/platforms/kimi.py)
- [backend/app/workers/platforms/base.py](file://backend/app/workers/platforms/base.py)
+- [backend/app/workers/platforms/search_engine.py](file://backend/app/workers/platforms/search_engine.py)
+- [backend/app/workers/platforms/__init__.py](file://backend/app/workers/platforms/__init__.py)
- [backend/app/workers/citation_engine.py](file://backend/app/workers/citation_engine.py)
- [backend/app/workers/scheduler.py](file://backend/app/workers/scheduler.py)
-- [backend/app/models/query.py](file://backend/app/models/query.py)
+- [backend/app/models/query.py](file://backend/app/workers/models/query.py)
- [backend/app/models/citation_record.py](file://backend/app/models/citation_record.py)
- [backend/app/models/query_task.py](file://backend/app/models/query_task.py)
- [backend/app/services/query.py](file://backend/app/services/query.py)
@@ -17,6 +19,13 @@
- [frontend/lib/platforms.ts](file://frontend/lib/platforms.ts)
+## 更新摘要
+**变更内容**
+- Kimi平台适配器已简化为搜索引擎模式,移除了Playwright浏览器自动化实现
+- 所有平台适配器采用统一的fetch_search_content机制
+- 引入了通用搜索引擎模块,支持DuckDuckGo和Wikipedia回退机制
+- 更新了架构图和组件分析以反映新的实现方式
+
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
@@ -30,10 +39,10 @@
10. [附录](#附录)
## 简介
-本文件面向需要集成Kimi平台的开发者与运维人员,系统性阐述Kimi适配器的实现方式与运行机制,涵盖Playwright浏览器自动化配置与初始化、页面交互逻辑(搜索框定位、输入处理、搜索按钮点击、结果解析)、错误重试与超时处理、浏览器会话管理与资源清理、API调用示例与常见问题解决,以及性能优化与调试技巧。
+本文件面向需要集成Kimi平台的开发者与运维人员,系统性阐述Kimi适配器的简化实现方式与运行机制。Kimi适配器现已采用搜索引擎查询机制,通过DuckDuckGo和Wikipedia获取与关键词相关的真实内容,替代了原有的Playwright浏览器自动化方案。文档涵盖搜索引擎集成、错误重试与超时处理、资源管理与API调用示例。
## 项目结构
-后端采用FastAPI + SQLAlchemy + APScheduler的异步架构,前端通过Next.js提供可视化界面。Kimi适配器位于工作线程模块,被引用检测引擎统一编排,定时调度器周期性触发查询任务。
+后端采用FastAPI + SQLAlchemy + APScheduler的异步架构,前端通过Next.js提供可视化界面。Kimi适配器位于工作线程模块,被引用检测引擎统一编排,定时调度器周期性触发查询任务。所有平台适配器现在共享相同的搜索引擎基础设施。
```mermaid
graph TB
@@ -48,6 +57,8 @@ Service_Citation["引用服务
backend/app/services/citation.py"]
Scheduler["定时调度器
backend/app/workers/scheduler.py"]
Engine["引用检测引擎
backend/app/workers/citation_engine.py"]
Adapter_Kimi["Kimi适配器
backend/app/workers/platforms/kimi.py"]
+SearchEngine["搜索引擎模块
backend/app/workers/platforms/search_engine.py"]
+BaseAdapter["基础适配器
backend/app/workers/platforms/base.py"]
Model_Query["查询模型
backend/app/models/query.py"]
Model_Record["引用记录模型
backend/app/models/citation_record.py"]
Model_Task["查询任务模型
backend/app/models/query_task.py"]
@@ -60,42 +71,47 @@ Service_Query --> Scheduler
Service_Citation --> Scheduler
Scheduler --> Engine
Engine --> Adapter_Kimi
+Engine --> SearchEngine
+Engine --> BaseAdapter
Engine --> Model_Query
Engine --> Model_Record
Engine --> Model_Task
```
-图表来源
+**图表来源**
- [backend/app/main.py:13-22](file://backend/app/main.py#L13-L22)
- [backend/app/workers/scheduler.py:25-40](file://backend/app/workers/scheduler.py#L25-L40)
-- [backend/app/workers/citation_engine.py:148-157](file://backend/app/workers/citation_engine.py#L148-L157)
-- [backend/app/workers/platforms/kimi.py:11-20](file://backend/app/workers/platforms/kimi.py#L11-L20)
+- [backend/app/workers/citation_engine.py:164-173](file://backend/app/workers/citation_engine.py#L164-L173)
+- [backend/app/workers/platforms/kimi.py:10-37](file://backend/app/workers/platforms/kimi.py#L10-L37)
+- [backend/app/workers/platforms/search_engine.py:1-174](file://backend/app/workers/platforms/search_engine.py#L1-L174)
- [backend/app/models/query.py:11-55](file://backend/app/models/query.py#L11-L55)
- [backend/app/models/citation_record.py:11-42](file://backend/app/models/citation_record.py#L11-L42)
- [backend/app/models/query_task.py:11-39](file://backend/app/models/query_task.py#L11-L39)
-章节来源
+**章节来源**
- [backend/app/main.py:13-22](file://backend/app/main.py#L13-L22)
- [backend/app/workers/scheduler.py:25-40](file://backend/app/workers/scheduler.py#L25-L40)
-- [frontend/lib/platforms.ts:1-18](file://frontend/lib/platforms.ts#L1-L18)
+- [frontend/lib/platforms.ts:1-23](file://frontend/lib/platforms.ts#L1-L23)
## 核心组件
-- Kimi适配器:基于Playwright的异步浏览器自动化,负责导航、输入、提交、等待响应稳定与结果提取。
-- 引用检测引擎:编排多平台查询,执行品牌匹配与竞争品牌检测,并持久化结果。
-- 定时调度器:周期性扫描到期查询,触发执行并更新任务状态。
-- 数据模型:查询、引用记录、查询任务三者构成完整的查询生命周期与结果存储。
-- API与服务:提供REST接口与业务服务,支撑前端展示与手动触发“立即执行”。
+- **Kimi适配器(搜索引擎模式)**:基于HTTP客户端的轻量级适配器,通过fetch_search_content获取搜索结果。
+- **搜索引擎模块**:提供DuckDuckGo HTML搜索和Wikipedia API回退机制,支持内容提取和清理。
+- **引用检测引擎**:编排多平台查询,执行品牌匹配与竞争品牌检测,并持久化结果。
+- **定时调度器**:周期性扫描到期查询,触发执行并更新任务状态。
+- **数据模型**:查询、引用记录、查询任务三者构成完整的查询生命周期与结果存储。
+- **API与服务**:提供REST接口与业务服务,支撑前端展示与手动触发"立即执行"。
-章节来源
-- [backend/app/workers/platforms/kimi.py:11-20](file://backend/app/workers/platforms/kimi.py#L11-L20)
-- [backend/app/workers/citation_engine.py:148-157](file://backend/app/workers/citation_engine.py#L148-L157)
+**章节来源**
+- [backend/app/workers/platforms/kimi.py:10-37](file://backend/app/workers/platforms/kimi.py#L10-L37)
+- [backend/app/workers/platforms/search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
+- [backend/app/workers/citation_engine.py:161-173](file://backend/app/workers/citation_engine.py#L161-L173)
- [backend/app/workers/scheduler.py:25-40](file://backend/app/workers/scheduler.py#L25-L40)
- [backend/app/models/query.py:11-55](file://backend/app/models/query.py#L11-L55)
- [backend/app/models/citation_record.py:11-42](file://backend/app/models/citation_record.py#L11-L42)
- [backend/app/models/query_task.py:11-39](file://backend/app/models/query_task.py#L11-L39)
## 架构总览
-下图展示了从用户发起查询到结果入库的关键路径,以及Kimi适配器在其中的角色。
+下图展示了从用户发起查询到结果入库的关键路径,以及Kimi适配器在其中的角色。现在Kimi适配器通过搜索引擎获取内容,而非直接操作浏览器。
```mermaid
sequenceDiagram
@@ -105,91 +121,119 @@ participant SVC as "服务层"
participant SCH as "调度器"
participant ENG as "引用检测引擎"
participant ADP as "Kimi适配器"
-participant PW as "Playwright浏览器"
+participant SE as "搜索引擎模块"
FE->>API : "POST /api/v1/queries 或 /api/v1/citations/run-now"
API->>SVC : "创建查询/立即执行"
SVC->>SCH : "登记查询任务"
SCH->>ENG : "周期性执行查询"
ENG->>ADP : "query(keyword)"
-ADP->>PW : "启动浏览器/新建上下文/打开页面"
-ADP->>PW : "定位输入框/输入关键词/提交"
-ADP->>PW : "等待回复稳定/提取文本"
+ADP->>SE : "fetch_search_content(platform_name, keyword)"
+SE->>SE : "search_duckduckgo 或 Wikipedia"
+SE-->>ADP : "返回搜索结果文本"
ADP-->>ENG : "返回原始响应文本"
ENG-->>SVC : "品牌匹配/竞争品牌检测"
SVC-->>API : "写入引用记录"
API-->>FE : "返回查询结果/统计"
```
-图表来源
+**图表来源**
- [backend/app/api/queries.py:26-39](file://backend/app/api/queries.py#L26-L39)
- [backend/app/api/citations.py:59-77](file://backend/app/api/citations.py#L59-L77)
- [backend/app/services/query.py:45-81](file://backend/app/services/query.py#L45-L81)
- [backend/app/services/citation.py:204-234](file://backend/app/services/citation.py#L204-L234)
- [backend/app/workers/scheduler.py:51-84](file://backend/app/workers/scheduler.py#L51-L84)
-- [backend/app/workers/citation_engine.py:159-234](file://backend/app/workers/citation_engine.py#L159-L234)
-- [backend/app/workers/platforms/kimi.py:33-125](file://backend/app/workers/platforms/kimi.py#L33-L125)
+- [backend/app/workers/citation_engine.py:256-287](file://backend/app/workers/citation_engine.py#L256-L287)
+- [backend/app/workers/platforms/kimi.py:16-33](file://backend/app/workers/platforms/kimi.py#L16-L33)
+- [backend/app/workers/platforms/search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
## 详细组件分析
-### Kimi适配器(Browser Automation)
-- 启动与初始化
- - 通过异步Playwright启动Chromium浏览器,headless模式运行。
- - 若浏览器未安装,捕获异常并提示安装命令。
-- 页面交互
- - 导航至Kimi首页,设置页面加载超时。
- - 多选择器策略定位输入框(textarea、contenteditable等),逐个尝试直至命中。
- - 输入关键词后,优先点击发送按钮;若未发现发送按钮则模拟回车提交。
-- 结果解析与稳定性
- - 使用多级消息容器选择器提取最新回复内容。
- - 通过“连续N次文本不变”判定回复稳定,避免过早截断。
- - 超时情况下返回当前已收集文本。
-- 错误处理与重试
- - 单次查询失败时进行最多两次重试(共三次尝试),指数退避延迟。
- - 页面超时与通用异常均转换为可读的运行时错误。
-- 资源管理
- - 每次查询独立创建上下文与页面,完成后及时关闭,避免资源泄漏。
- - 提供显式关闭方法用于进程退出时清理Playwright与浏览器实例。
+### Kimi适配器(搜索引擎模式)
+**更新** Kimi适配器已完全简化,移除了Playwright浏览器自动化实现,现在是一个轻量级的HTTP客户端适配器。
+
+- **适配器实现**
+ - 继承自BasePlatformAdapter基类,实现query和_close方法
+ - platform_name设置为"kimi",platform_url设置为"https://kimi.moonshot.cn"
+ - query方法包含最多3次重试(共3次尝试),使用指数退避策略
+- **搜索引擎集成**
+ - _do_query方法调用fetch_search_content获取搜索结果
+ - 通过search_duckduckgo获取HTML搜索结果,必要时回退到Wikipedia
+ - 返回清理后的搜索结果文本
+- **资源管理**
+ - close方法为空实现,因为无额外资源需要释放
+ - 依赖httpx异步客户端自动管理连接池
```mermaid
flowchart TD
-Start(["进入 query(keyword)"]) --> Ensure["确保浏览器已启动"]
-Ensure --> RetryLoop{"重试次数 < 3"}
+Start(["进入 query(keyword)"]) --> RetryLoop{"重试次数 < 3"}
RetryLoop --> |是| DoQuery["_do_query 执行单次查询"]
-DoQuery --> Stable["等待回复稳定"]
-Stable --> Success["返回响应文本"]
-DoQuery --> |异常| Delay["指数退避等待"]
+DoQuery --> Success["返回搜索结果文本"]
+DoQuery --> |异常| Delay["指数退避等待 (2^attempt)"]
Delay --> RetryLoop
RetryLoop --> |否| FinalFail["记录最终失败并抛出异常"]
-Success --> Close["关闭页面/上下文"]
-FinalFail --> Close
-Close --> End(["结束"])
+Success --> End(["结束"])
+FinalFail --> End
```
-图表来源
-- [backend/app/workers/platforms/kimi.py:33-48](file://backend/app/workers/platforms/kimi.py#L33-L48)
-- [backend/app/workers/platforms/kimi.py:50-125](file://backend/app/workers/platforms/kimi.py#L50-L125)
-- [backend/app/workers/platforms/kimi.py:126-197](file://backend/app/workers/platforms/kimi.py#L126-L197)
-- [backend/app/workers/platforms/kimi.py:198-206](file://backend/app/workers/platforms/kimi.py#L198-L206)
+**图表来源**
+- [backend/app/workers/platforms/kimi.py:16-29](file://backend/app/workers/platforms/kimi.py#L16-L29)
+- [backend/app/workers/platforms/kimi.py:31-33](file://backend/app/workers/platforms/kimi.py#L31-L33)
-章节来源
-- [backend/app/workers/platforms/kimi.py:17-32](file://backend/app/workers/platforms/kimi.py#L17-L32)
-- [backend/app/workers/platforms/kimi.py:33-48](file://backend/app/workers/platforms/kimi.py#L33-L48)
-- [backend/app/workers/platforms/kimi.py:50-125](file://backend/app/workers/platforms/kimi.py#L50-L125)
-- [backend/app/workers/platforms/kimi.py:126-197](file://backend/app/workers/platforms/kimi.py#L126-L197)
-- [backend/app/workers/platforms/kimi.py:198-206](file://backend/app/workers/platforms/kimi.py#L198-L206)
+**章节来源**
+- [backend/app/workers/platforms/kimi.py:10-37](file://backend/app/workers/platforms/kimi.py#L10-L37)
+
+### 搜索引擎模块(Search Engine Module)
+**新增** 新增的通用搜索引擎模块,提供DuckDuckGo和Wikipedia的搜索功能。
+
+- **DuckDuckGo搜索**
+ - 使用HTML版本搜索,无需API密钥
+ - 支持多种结果块匹配策略(标准result块和备选匹配)
+ - 自动清理HTML标签和实体,提取可读文本
+- **Wikipedia回退机制**
+ - 当DuckDuckGo受限或失败时自动回退到Wikipedia API
+ - 使用Wikipedia API获取词条摘要,避免HTML解析复杂性
+ - 支持引用标记清理和文本格式化
+- **内容提取与清理**
+ - 统一的HTML标签清理函数
+ - 文本压缩和空白字符标准化
+ - 最大字符长度控制和结果截断
+
+```mermaid
+flowchart TD
+Start(["fetch_search_content"]) --> DDG["search_duckduckgo"]
+DDG --> Valid{"有效结果?"}
+Valid --> |是| Clean["清理HTML标签"]
+Clean --> Return["返回结果"]
+Valid --> |否| Wiki["search_wikipedia 回退"]
+Wiki --> WikiValid{"Wikipedia结果?"}
+WikiValid --> |是| WikiClean["清理Wikipedia内容"]
+WikiClean --> Return
+WikiValid --> |否| Error["抛出所有搜索源失败"]
+```
+
+**图表来源**
+- [backend/app/workers/platforms/search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
+- [backend/app/workers/platforms/search_engine.py:79-144](file://backend/app/workers/platforms/search_engine.py#L79-L144)
+- [backend/app/workers/platforms/search_engine.py:16-76](file://backend/app/workers/platforms/search_engine.py#L16-L76)
+
+**章节来源**
+- [backend/app/workers/platforms/search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
+- [backend/app/workers/platforms/search_engine.py:79-144](file://backend/app/workers/platforms/search_engine.py#L79-L144)
+- [backend/app/workers/platforms/search_engine.py:16-76](file://backend/app/workers/platforms/search_engine.py#L16-L76)
### 引用检测引擎(Citation Engine)
-- 平台编排
- - 维护平台适配器映射,支持Kimi与文心等平台。
- - 针对每个查询遍历指定平台,执行查询与检测。
-- 品牌匹配
- - 支持精确匹配、别名匹配、模糊匹配三种策略,输出置信度与首次出现位置。
-- 竞争品牌检测
- - 基于预设行业品牌库,识别文本中除目标品牌外的其他品牌。
-- 任务状态管理
- - 为每次平台查询创建或获取对应任务记录,维护状态与错误信息。
-- 结果持久化
- - 将引用检测结果写入引用记录表,包含是否引用、位置、文本片段、竞争品牌及原始响应。
+- **平台编排**
+ - 维护平台适配器映射,支持Kimi、文心、通义等平台
+ - 针对每个查询遍历指定平台,执行查询与检测
+ - **更新** 所有平台现在共享相同的搜索引擎基础设施
+- **品牌匹配**
+ - 支持精确匹配、别名匹配、模糊匹配三种策略,输出置信度与首次出现位置
+- **竞争品牌检测**
+ - 基于预设行业品牌库,识别文本中除目标品牌外的其他品牌
+- **任务状态管理**
+ - 为每次平台查询创建或获取对应任务记录,维护状态与错误信息
+- **结果持久化**
+ - 将引用检测结果写入引用记录表,包含是否引用、位置、文本片段、竞争品牌及原始响应
```mermaid
classDiagram
@@ -200,8 +244,14 @@ class CitationEngine {
}
class KimiAdapter {
+query(keyword) str
++_do_query(keyword) str
+close() void
}
+class SearchEngineModule {
++fetch_search_content(platform_name, keyword) str
++search_duckduckgo(query) str
++search_wikipedia(keyword) str
+}
class BrandMatcher {
+match(text) dict
}
@@ -211,26 +261,26 @@ class CompetitorDetector {
CitationEngine --> KimiAdapter : "依赖"
CitationEngine --> BrandMatcher : "使用"
CitationEngine --> CompetitorDetector : "使用"
+KimiAdapter --> SearchEngineModule : "使用"
```
-图表来源
-- [backend/app/workers/citation_engine.py:148-157](file://backend/app/workers/citation_engine.py#L148-L157)
-- [backend/app/workers/citation_engine.py:236-266](file://backend/app/workers/citation_engine.py#L236-L266)
-- [backend/app/workers/platforms/kimi.py:11-20](file://backend/app/workers/platforms/kimi.py#L11-L20)
+**图表来源**
+- [backend/app/workers/citation_engine.py:161-173](file://backend/app/workers/citation_engine.py#L161-L173)
+- [backend/app/workers/platforms/kimi.py:10-37](file://backend/app/workers/platforms/kimi.py#L10-L37)
+- [backend/app/workers/platforms/search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
-章节来源
-- [backend/app/workers/citation_engine.py:148-157](file://backend/app/workers/citation_engine.py#L148-L157)
-- [backend/app/workers/citation_engine.py:159-234](file://backend/app/workers/citation_engine.py#L159-L234)
-- [backend/app/workers/citation_engine.py:236-266](file://backend/app/workers/citation_engine.py#L236-L266)
+**章节来源**
+- [backend/app/workers/citation_engine.py:161-173](file://backend/app/workers/citation_engine.py#L161-L173)
+- [backend/app/workers/citation_engine.py:256-287](file://backend/app/workers/citation_engine.py#L256-L287)
### 定时调度器(Scheduler)
-- 触发机制
- - 使用APScheduler的AsyncIOScheduler,每小时检查一次到期查询。
- - 条件:查询状态为激活且next_query_at小于等于当前时间。
-- 执行流程
- - 逐条执行查询,调用引用检测引擎,更新任务状态与查询时间字段。
-- 关闭流程
- - 应用关闭时停止调度器并关闭各平台适配器。
+- **触发机制**
+ - 使用APScheduler的AsyncIOScheduler,每小时检查一次到期查询
+ - 条件:查询状态为激活且next_query_at小于等于当前时间
+- **执行流程**
+ - 逐条执行查询,调用引用检测引擎,更新任务状态与查询时间字段
+- **关闭流程**
+ - 应用关闭时停止调度器并关闭各平台适配器
```mermaid
sequenceDiagram
@@ -242,28 +292,29 @@ S->>DB : "查询到期的查询记录"
loop 遍历查询
S->>ENG : "execute_query(query, db)"
ENG->>ADP : "query(keyword)"
-ADP-->>ENG : "返回原始响应"
+ADP->>ADP : "fetch_search_content"
+ADP-->>ENG : "返回搜索结果"
ENG-->>S : "写入引用记录并更新时间"
end
S->>S : "关闭时调用 engine.close()"
```
-图表来源
+**图表来源**
- [backend/app/workers/scheduler.py:51-84](file://backend/app/workers/scheduler.py#L51-L84)
-- [backend/app/workers/citation_engine.py:302-309](file://backend/app/workers/citation_engine.py#L302-L309)
+- [backend/app/workers/citation_engine.py:323-330](file://backend/app/workers/citation_engine.py#L323-L330)
-章节来源
+**章节来源**
- [backend/app/workers/scheduler.py:25-40](file://backend/app/workers/scheduler.py#L25-L40)
- [backend/app/workers/scheduler.py:51-84](file://backend/app/workers/scheduler.py#L51-L84)
- [backend/app/workers/scheduler.py:86-90](file://backend/app/workers/scheduler.py#L86-L90)
### 数据模型(Models)
-- 查询(Query)
- - 关键字段:关键词、目标品牌、品牌别名、平台列表、频率、状态、下次查询时间等。
-- 引用记录(CitationRecord)
- - 关键字段:是否引用、引用位置、引用文本、竞争品牌列表、原始响应、查询时间等。
-- 查询任务(QueryTask)
- - 关键字段:状态、错误信息、计划/开始/完成时间等。
+- **查询(Query)**
+ - 关键字段:关键词、目标品牌、品牌别名、平台列表、频率、状态、下次查询时间等
+- **引用记录(CitationRecord)**
+ - 关键字段:是否引用、引用位置、引用文本、竞争品牌列表、原始响应、查询时间等
+- **查询任务(QueryTask)**
+ - 关键字段:状态、错误信息、计划/开始/完成时间等
```mermaid
erDiagram
@@ -306,41 +357,43 @@ QUERY ||--o{ CITATION_RECORD : "拥有"
QUERY ||--o{ QUERY_TASK : "拥有"
```
-图表来源
+**图表来源**
- [backend/app/models/query.py:11-55](file://backend/app/models/query.py#L11-L55)
- [backend/app/models/citation_record.py:11-42](file://backend/app/models/citation_record.py#L11-L42)
- [backend/app/models/query_task.py:11-39](file://backend/app/models/query_task.py#L11-L39)
-章节来源
+**章节来源**
- [backend/app/models/query.py:11-55](file://backend/app/models/query.py#L11-L55)
- [backend/app/models/citation_record.py:11-42](file://backend/app/models/citation_record.py#L11-L42)
- [backend/app/models/query_task.py:11-39](file://backend/app/models/query_task.py#L11-L39)
### API与服务(API & Services)
-- 查询API
- - 支持分页列出、创建、查询详情、更新、删除查询。
-- 引用API
- - 支持分页列出引用、统计查询、立即执行查询(触发任务)。
-- 服务层
- - 查询服务:校验用户配额、计算下次查询时间、增删改查。
- - 引用服务:权限校验、统计聚合、CSV导出、立即执行任务登记。
+- **查询API**
+ - 支持分页列出、创建、查询详情、更新、删除查询
+- **引用API**
+ - 支持分页列出引用、统计查询、立即执行查询(触发任务)
+- **服务层**
+ - 查询服务:校验用户配额、计算下次查询时间、增删改查
+ - 引用服务:权限校验、统计聚合、CSV导出、立即执行任务登记
-章节来源
+**章节来源**
- [backend/app/api/queries.py:15-86](file://backend/app/api/queries.py#L15-L86)
- [backend/app/api/citations.py:25-77](file://backend/app/api/citations.py#L25-L77)
- [backend/app/services/query.py:12-130](file://backend/app/services/query.py#L12-L130)
- [backend/app/services/citation.py:24-269](file://backend/app/services/citation.py#L24-L269)
## 依赖关系分析
-- 组件耦合
- - 引用检测引擎对Kimi适配器存在直接依赖;对品牌匹配器与竞争品牌检测器为组合关系。
- - 定时调度器仅通过引擎接口触发执行,解耦具体平台实现。
-- 外部依赖
- - Playwright浏览器驱动(需提前安装)。
- - PostgreSQL数据库(SQLAlchemy ORM)。
- - APScheduler(异步调度)。
-- 循环依赖
- - 未发现循环导入或调用链路。
+- **组件耦合**
+ - 引用检测引擎对Kimi适配器存在直接依赖;对品牌匹配器与竞争品牌检测器为组合关系
+ - **更新** Kimi适配器现在依赖通用搜索引擎模块,而非Playwright
+ - 定时调度器仅通过引擎接口触发执行,解耦具体平台实现
+- **外部依赖**
+ - httpx异步HTTP客户端(用于搜索引擎请求)
+ - DuckDuckGo和Wikipedia API(无需认证)
+ - PostgreSQL数据库(SQLAlchemy ORM)
+ - APScheduler(异步调度)
+- **循环依赖**
+ - 未发现循环导入或调用链路
```mermaid
graph LR
@@ -348,91 +401,95 @@ SCH["调度器"] --> ENG["引用检测引擎"]
ENG --> ADP["Kimi适配器"]
ENG --> BM["品牌匹配器"]
ENG --> CD["竞争品牌检测器"]
+ADP --> SE["搜索引擎模块"]
+SE --> HTTPX["httpx客户端"]
APIQ["查询API"] --> SVQ["查询服务"]
APIC["引用API"] --> SVC["引用服务"]
SVQ --> DB["数据库"]
SVC --> DB
```
-图表来源
+**图表来源**
- [backend/app/workers/scheduler.py:25-40](file://backend/app/workers/scheduler.py#L25-L40)
-- [backend/app/workers/citation_engine.py:148-157](file://backend/app/workers/citation_engine.py#L148-L157)
+- [backend/app/workers/citation_engine.py:161-173](file://backend/app/workers/citation_engine.py#L161-L173)
+- [backend/app/workers/platforms/kimi.py:10-37](file://backend/app/workers/platforms/kimi.py#L10-L37)
+- [backend/app/workers/platforms/search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
- [backend/app/api/queries.py:15-86](file://backend/app/api/queries.py#L15-L86)
- [backend/app/api/citations.py:25-77](file://backend/app/api/citations.py#L25-L77)
-章节来源
+**章节来源**
- [backend/app/workers/scheduler.py:25-40](file://backend/app/workers/scheduler.py#L25-L40)
-- [backend/app/workers/citation_engine.py:148-157](file://backend/app/workers/citation_engine.py#L148-L157)
+- [backend/app/workers/citation_engine.py:161-173](file://backend/app/workers/citation_engine.py#L161-L173)
- [backend/app/api/queries.py:15-86](file://backend/app/api/queries.py#L15-L86)
- [backend/app/api/citations.py:25-77](file://backend/app/api/citations.py#L25-L77)
## 性能考虑
-- 浏览器资源复用
- - 当前实现为每次查询新建上下文与页面,简单可靠但开销较大。可在高并发场景下评估复用策略(注意状态隔离)。
-- 等待策略优化
- - 输入框与发送按钮的等待时间可按环境调整;对稳定检测增加最大轮询次数上限,避免长时间阻塞。
-- 重试与退避
- - 已采用指数退避,建议结合平台可用性监控动态调整重试上限与初始延迟。
-- 数据库索引
- - 查询模型的索引设计有助于高频筛选;建议在引用记录表上针对查询时间、平台、是否引用等字段建立复合索引以提升统计与导出性能。
-- 前端平台映射
- - 前端平台键值映射清晰,便于UI展示与用户选择。
+- **HTTP客户端优化**
+ - 使用httpx异步客户端,支持连接池复用和超时控制
+ - DuckDuckGo搜索超时设置为30秒,避免长时间阻塞
+- **搜索策略优化**
+ - 首选DuckDuckGo HTML搜索,自动回退到Wikipedia API
+ - 支持最多5个结果的提取,平衡准确性和性能
+- **重试与退避**
+ - 已采用指数退避(2^attempt),建议结合平台可用性监控动态调整重试上限
+- **数据库索引**
+ - 查询模型的索引设计有助于高频筛选
+ - 建议在引用记录表上针对查询时间、平台、是否引用等字段建立复合索引以提升统计与导出性能
+- **前端平台映射**
+ - 前端平台键值映射清晰,便于UI展示与用户选择
-章节来源
-- [backend/app/workers/platforms/kimi.py:33-48](file://backend/app/workers/platforms/kimi.py#L33-L48)
+**章节来源**
+- [backend/app/workers/platforms/kimi.py:16-29](file://backend/app/workers/platforms/kimi.py#L16-L29)
+- [backend/app/workers/platforms/search_engine.py:94-96](file://backend/app/workers/platforms/search_engine.py#L94-L96)
- [backend/app/models/query.py:50-54](file://backend/app/models/query.py#L50-L54)
- [backend/app/models/citation_record.py:37-41](file://backend/app/models/citation_record.py#L37-L41)
-- [frontend/lib/platforms.ts:1-18](file://frontend/lib/platforms.ts#L1-L18)
+- [frontend/lib/platforms.ts:1-23](file://frontend/lib/platforms.ts#L1-L23)
## 故障排查指南
-- 浏览器未安装
- - 现象:启动浏览器时报错,提示未安装Playwright浏览器。
- - 处理:按照日志提示运行安装命令,确保Chromium可用。
-- 页面元素定位失败
- - 现象:无法找到输入框或发送按钮,抛出“无法找到输入框”错误。
- - 处理:检查页面结构变化,适当扩展选择器集合;确认页面加载完成后再查找元素。
-- 页面超时
- - 现象:导航或元素等待超时,返回当前文本或抛出超时异常。
- - 处理:适当提高超时阈值;检查网络状况与代理设置;必要时启用本地镜像站点。
-- 重试仍失败
- - 现象:多次重试后仍失败。
- - 处理:查看日志中的最后一次错误;检查平台访问限制与验证码弹窗;考虑降低并发或增加延时。
-- 资源未释放
- - 现象:长时间运行后内存占用上升。
- - 处理:确保每次查询后页面与上下文均已关闭;在应用退出时调用适配器关闭方法。
-- API调用失败
- - 现象:接口返回4xx/5xx错误。
- - 处理:核对鉴权头与请求体;检查用户权限与查询状态;查看服务端日志定位异常。
+- **DuckDuckGo限制**
+ - 现象:DuckDuckGo返回非结果页面或解析失败
+ - 处理:自动回退到Wikipedia API;检查网络连接和代理设置
+- **Wikipedia API失败**
+ - 现象:Wikipedia API调用失败或无结果
+ - 处理:检查Wikipedia API可用性;确认关键词有效性
+- **搜索结果为空**
+ - 现象:两个搜索源均无结果
+ - 处理:尝试更具体的关键词;检查网络连接
+- **重试仍失败**
+ - 现象:多次重试后仍失败
+ - 处理:查看日志中的最后一次错误;检查平台访问限制与验证码弹窗
+- **API调用失败**
+ - 现象:接口返回4xx/5xx错误
+ - 处理:核对鉴权头与请求体;检查用户权限与查询状态;查看服务端日志定位异常
-章节来源
-- [backend/app/workers/platforms/kimi.py:27-31](file://backend/app/workers/platforms/kimi.py#L27-L31)
-- [backend/app/workers/platforms/kimi.py:87-88](file://backend/app/workers/platforms/kimi.py#L87-L88)
-- [backend/app/workers/platforms/kimi.py:116-118](file://backend/app/workers/platforms/kimi.py#L116-L118)
-- [backend/app/workers/platforms/kimi.py:198-206](file://backend/app/workers/platforms/kimi.py#L198-L206)
+**章节来源**
+- [backend/app/workers/platforms/search_engine.py:139-144](file://backend/app/workers/platforms/search_engine.py#L139-L144)
+- [backend/app/workers/platforms/search_engine.py:140-144](file://backend/app/workers/platforms/search_engine.py#L140-L144)
+- [backend/app/workers/platforms/kimi.py:24-29](file://backend/app/workers/platforms/kimi.py#L24-L29)
- [backend/app/api/queries.py:34-38](file://backend/app/api/queries.py#L34-L38)
- [backend/app/api/citations.py:67-71](file://backend/app/api/citations.py#L67-L71)
## 结论
-Kimi适配器通过Playwright实现了对Kimi网页版的自动化交互,具备完善的错误重试、超时处理与资源管理机制。配合引用检测引擎与定时调度器,可稳定地完成跨平台的引用检测任务。建议在生产环境中关注浏览器资源复用、等待策略与数据库索引优化,并持续监控平台页面结构变化以保持适配器的健壮性。
+Kimi适配器已成功简化为搜索引擎模式,移除了复杂的Playwright浏览器自动化实现,转而采用轻量级的HTTP客户端方案。通过DuckDuckGo和Wikipedia的组合搜索策略,实现了稳定的搜索结果获取。新的架构更加简洁、高效,降低了维护成本,同时保持了与原有系统的兼容性。建议在生产环境中关注HTTP客户端性能、搜索策略优化和数据库索引设计。
## 附录
### API调用示例(路径参考)
-- 创建查询
+- **创建查询**
- POST /api/v1/queries
- 请求体字段:keyword、target_brand、brand_aliases、platforms、frequency
- 成功响应:QueryResponse
-- 立即执行查询
+- **立即执行查询**
- POST /api/v1/queries/{query_id}/run-now
- 成功响应:RunNowResponse(包含任务ID与状态)
-- 查询引用列表
+- **查询引用列表**
- GET /api/v1/citations/?query_id={query_id}&platform={platform}
- 成功响应:CitationListResponse
-- 引用统计
+- **引用统计**
- GET /api/v1/citations/stats?query_id={query_id}
- 成功响应:CitationStatsResponse
-章节来源
+**章节来源**
- [backend/app/api/queries.py:26-39](file://backend/app/api/queries.py#L26-L39)
- [backend/app/api/citations.py:59-77](file://backend/app/api/citations.py#L59-L77)
- [backend/app/api/citations.py:25-56](file://backend/app/api/citations.py#L25-L56)
\ No newline at end of file
diff --git a/.qoder/repowiki/zh/content/AI平台集成/文心平台集成.md b/.qoder/repowiki/zh/content/AI平台集成/文心平台集成.md
index 53dbd66..3238ea1 100644
--- a/.qoder/repowiki/zh/content/AI平台集成/文心平台集成.md
+++ b/.qoder/repowiki/zh/content/AI平台集成/文心平台集成.md
@@ -4,14 +4,25 @@
**本文档引用的文件**
- [wenxin.py](file://backend/app/workers/platforms/wenxin.py)
- [base.py](file://backend/app/workers/platforms/base.py)
+- [search_engine.py](file://backend/app/workers/platforms/search_engine.py)
- [citation_engine.py](file://backend/app/workers/citation_engine.py)
- [config.py](file://backend/app/config.py)
- [query.py](file://backend/app/models/query.py)
- [queries.py](file://backend/app/api/queries.py)
- [Dockerfile](file://backend/Dockerfile)
+- [kimi.py](file://backend/app/workers/platforms/kimi.py)
+- [tongyi.py](file://backend/app/workers/platforms/tongyi.py)
- [test_citations.py](file://tests/test_citations.py)
+## 更新摘要
+**变更内容**
+- 文心平台适配器已简化为搜索引擎模式,移除Playwright浏览器自动化实现
+- 采用统一的搜索引擎查询机制,通过`fetch_search_content`函数获取内容
+- 所有平台适配器(wenxin、kimi、tongyi等)均采用相同的简化模式
+- 移除复杂的页面交互策略和稳定性检测逻辑
+- 保留重试机制和错误处理策略
+
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
@@ -25,79 +36,100 @@
10. [附录](#附录)
## 简介
-本文件面向“文心平台集成”的技术与非技术读者,系统性说明文心一言平台适配器的实现方式,涵盖以下方面:
-- 文心适配器的职责与实现模式(基于浏览器自动化)
-- 请求参数构建(关键词处理、页面交互策略)
-- HTTP请求与页面自动化流程(导航、输入、提交、等待稳定)
-- 响应解析与稳定性检测(文本提取、稳定判定)
+本文件面向"文心平台集成"的技术与非技术读者,系统性说明文心一言平台适配器的实现方式,涵盖以下方面:
+- 文心适配器的职责与实现模式(基于搜索引擎查询)
+- 请求参数构建(关键词处理、搜索引擎查询策略)
+- HTTP请求与搜索引擎交互流程(DuckDuckGo、Wikipedia API)
+- 响应解析与内容提取(HTML解析、文本清理)
- 配置管理(环境变量、超时与重试策略)
- 错误处理与异常恢复
- 安全注意事项与最佳实践
## 项目结构
-文心平台集成位于后端工作流模块中,采用“适配器 + 引擎”的分层设计:
-- 适配器层:负责具体平台的页面自动化交互
+文心平台集成位于后端工作流模块中,采用"适配器 + 引擎"的分层设计:
+- 适配器层:负责具体平台的搜索引擎查询交互
- 引擎层:编排多平台查询、品牌匹配与统计
-- 配置层:集中管理运行时参数(如浏览器路径、API密钥占位)
+- 搜索引擎层:提供统一的搜索内容获取能力
+- 配置层:集中管理运行时参数(如API密钥占位、超时设置)
```mermaid
graph TB
subgraph "适配器层"
Base["BasePlatformAdapter
抽象接口"]
Wenxin["WenxinAdapter
文心一言适配器"]
-end
+Kimi["KimiAdapter
Kimi适配器"]
+Tongyi["TongyiAdapter
通义千问适配器"]
+End
+subgraph "搜索引擎层"
+Search["SearchEngine
搜索引擎模块"]
+DDG["DuckDuckGo
HTML搜索"]
+Wiki["Wikipedia API
百科查询"]
+End
subgraph "引擎层"
Engine["CitationEngine
引用检测引擎"]
-end
+End
subgraph "配置层"
Cfg["Settings
环境配置"]
-Docker["Dockerfile
容器化与Playwright依赖"]
-end
+Docker["Dockerfile
容器化配置"]
+End
subgraph "数据模型"
QModel["Query
查询模型"]
-end
+End
Base --> Wenxin
+Base --> Kimi
+Base --> Tongyi
+Wenxin --> Search
+Kimi --> Search
+Tongyi --> Search
+Search --> DDG
+Search --> Wiki
Engine --> Wenxin
Engine --> QModel
Wenxin --> Cfg
Docker --> Wenxin
```
-图表来源
+**图表来源**
- [base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)
-- [wenxin.py:11-205](file://backend/app/workers/platforms/wenxin.py#L11-L205)
-- [citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
-- [config.py:4-16](file://backend/app/config.py#L4-L16)
-- [Dockerfile:1-40](file://backend/Dockerfile#L1-L40)
+- [wenxin.py:10-38](file://backend/app/workers/platforms/wenxin.py#L10-L38)
+- [kimi.py:10-38](file://backend/app/workers/platforms/kimi.py#L10-L38)
+- [tongyi.py:10-38](file://backend/app/workers/platforms/tongyi.py#L10-L38)
+- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
+- [citation_engine.py:161-176](file://backend/app/workers/citation_engine.py#L161-L176)
+- [config.py:9-23](file://backend/app/config.py#L9-L23)
+- [Dockerfile:1-41](file://backend/Dockerfile#L1-L41)
- [query.py:11-55](file://backend/app/models/query.py#L11-L55)
-章节来源
+**章节来源**
- [base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)
-- [wenxin.py:11-205](file://backend/app/workers/platforms/wenxin.py#L11-L205)
-- [citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
-- [config.py:4-16](file://backend/app/config.py#L4-L16)
-- [Dockerfile:1-40](file://backend/Dockerfile#L1-L40)
+- [wenxin.py:10-38](file://backend/app/workers/platforms/wenxin.py#L10-L38)
+- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
+- [citation_engine.py:161-176](file://backend/app/workers/citation_engine.py#L161-L176)
+- [config.py:9-23](file://backend/app/config.py#L9-L23)
+- [Dockerfile:1-41](file://backend/Dockerfile#L1-L41)
- [query.py:11-55](file://backend/app/models/query.py#L11-L55)
## 核心组件
-- 文心适配器(WenxinAdapter):实现文心一言页面自动化交互,负责关键词输入、提交、等待回复稳定,并返回原始文本。
-- 引擎(CitationEngine):编排查询任务,调用适配器获取原始响应,进行品牌匹配与竞争品牌检测,并持久化结果。
-- 基类(BasePlatformAdapter):定义统一的平台适配器接口,约束平台名称、URL与查询方法。
-- 配置(Settings):集中管理数据库、Redis、JWT、Playwright浏览器路径以及API密钥占位等配置项。
-- 数据模型(Query):承载查询任务的元数据,包括关键词、目标品牌、平台集合、频率与状态等。
+- 文心适配器(WenxinAdapter):实现文心一言平台的搜索引擎查询能力,负责关键词拼接与搜索内容获取
+- 搜索引擎模块(SearchEngine):提供统一的搜索内容获取能力,支持DuckDuckGo和Wikipedia API
+- 引擎(CitationEngine):编排查询任务,调用适配器获取原始响应,进行品牌匹配与竞争品牌检测,并持久化结果
+- 基类(BasePlatformAdapter):定义统一的平台适配器接口,约束平台名称、URL与查询方法
+- 配置(Settings):集中管理数据库、Redis、JWT、Playwright浏览器路径以及API密钥占位等配置项
+- 数据模型(Query):承载查询任务的元数据,包括关键词、目标品牌、平台集合、频率与状态等
-章节来源
-- [wenxin.py:11-205](file://backend/app/workers/platforms/wenxin.py#L11-L205)
-- [citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
+**章节来源**
+- [wenxin.py:10-38](file://backend/app/workers/platforms/wenxin.py#L10-L38)
+- [search_engine.py:16-77](file://backend/app/workers/platforms/search_engine.py#L16-L77)
+- [citation_engine.py:161-176](file://backend/app/workers/citation_engine.py#L161-L176)
- [base.py:4-18](file://backend/app/workers/platforms/base.py#L4-L18)
-- [config.py:4-16](file://backend/app/config.py#L4-L16)
+- [config.py:9-23](file://backend/app/config.py#L9-L23)
- [query.py:11-55](file://backend/app/models/query.py#L11-L55)
## 架构总览
-文心平台集成采用“浏览器自动化 + 引擎编排”的架构:
+文心平台集成采用"搜索引擎查询 + 引擎编排"的架构:
- 引擎接收查询请求,按平台顺序调用适配器
-- 适配器通过Playwright启动无头浏览器,访问文心一言页面,模拟用户输入与提交
-- 适配器等待回复稳定后提取文本,返回给引擎
+- 适配器通过搜索引擎模块获取与关键词相关的内容
+- 适配器进行重试与错误处理,返回原始文本
- 引擎进行品牌匹配与统计,写入数据库
```mermaid
@@ -105,59 +137,61 @@ sequenceDiagram
participant Client as "客户端"
participant Engine as "CitationEngine"
participant Adapter as "WenxinAdapter"
-participant Browser as "Playwright浏览器"
-participant Platform as "文心一言页面"
+participant Search as "SearchEngine"
+participant DDG as "DuckDuckGo"
+participant Wiki as "Wikipedia API"
Client->>Engine : "发起查询请求"
Engine->>Adapter : "query(keyword)"
-Adapter->>Browser : "启动无头浏览器"
-Browser->>Platform : "goto(文心URL, 超时=30s)"
-Platform-->>Browser : "页面加载完成"
-Browser->>Platform : "查找输入框并填入关键词"
-Browser->>Platform : "提交点击发送或按回车"
-Browser->>Platform : "等待回复稳定"
-Platform-->>Browser : "返回最新回复文本"
-Browser-->>Adapter : "返回原始响应文本"
+Adapter->>Search : "fetch_search_content(keyword)"
+Search->>DDG : "搜索关键词"
+DDG-->>Search : "返回HTML结果"
+Search->>Wiki : "回退到百科查询"
+Wiki-->>Search : "返回百科内容"
+Search-->>Adapter : "返回搜索内容"
Adapter-->>Engine : "返回原始响应文本"
Engine-->>Client : "返回引用检测结果"
```
-图表来源
-- [citation_engine.py:236-266](file://backend/app/workers/citation_engine.py#L236-L266)
-- [wenxin.py:33-122](file://backend/app/workers/platforms/wenxin.py#L33-L122)
+**图表来源**
+- [citation_engine.py:256-287](file://backend/app/workers/citation_engine.py#L256-L287)
+- [wenxin.py:16-33](file://backend/app/workers/platforms/wenxin.py#L16-L33)
+- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
-章节来源
-- [citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
-- [wenxin.py:11-205](file://backend/app/workers/platforms/wenxin.py#L11-L205)
+**章节来源**
+- [citation_engine.py:161-176](file://backend/app/workers/citation_engine.py#L161-L176)
+- [wenxin.py:10-38](file://backend/app/workers/platforms/wenxin.py#L10-L38)
+- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
## 详细组件分析
### 文心适配器(WenxinAdapter)
-- 角色与职责
- - 实现BasePlatformAdapter接口,提供文心一言平台的查询能力
- - 使用Playwright进行页面自动化,模拟真实用户行为
- - 提供重试与指数退避策略,提升稳定性
- - 提供等待回复稳定的算法,避免过早读取半成品内容
+- **角色与职责**
+ - 实现BasePlatformAdapter接口,提供文心一言平台的搜索引擎查询能力
+ - 使用统一的搜索引擎模块获取与关键词相关的内容
+ - 提供重试与指数退避策略,提升查询稳定性
+ - 直接返回搜索引擎返回的原始文本内容
-- 关键实现要点
- - 浏览器生命周期管理:确保浏览器仅初始化一次,避免重复开销
- - 页面交互策略:多选择器容错查找输入框;优先点击发送按钮,否则回车提交
- - 稳定性检测:连续多次检测文本是否稳定,超时则返回当前文本
- - 错误处理:捕获超时与通用异常,统一包装为运行时错误并记录日志
+- **关键实现要点**
+ - 简化的查询流程:直接调用搜索引擎模块,无需复杂的页面交互
+ - 重试机制:最多3次尝试,指数退避(2^attempt秒)
+ - 错误处理:捕获异常并记录日志,最终抛出异常
+ - 资源管理:搜索引擎模式无需额外资源清理
-- 请求参数构建
- - 关键词处理:直接填充到输入框,支持多种输入控件类型
- - 请求头与认证:该实现为浏览器自动化,不涉及HTTP请求头与API密钥
- - 超时设置:页面导航超时30秒,输入框查找超时10秒,发送按钮查找超时5秒
- - 重试配置:最多3次尝试,指数退避(2^attempt秒)
+- **请求参数构建**
+ - 关键词处理:直接传递给搜索引擎模块,无需特殊处理
+ - 搜索策略:搜索引擎模块会自动处理关键词拼接和查询优化
+ - 超时设置:搜索引擎查询超时30秒,确保不会长时间阻塞
+ - 重试配置:最多3次尝试,指数退避策略
-- 响应解析逻辑
- - 文本提取:优先使用CSS选择器定位消息容器,其次使用JavaScript遍历页面
- - 稳定性判定:连续3次检测文本相同且长度大于阈值,视为稳定
- - 超时处理:超过90秒仍未稳定,返回当前已收集文本并告警
+- **响应解析逻辑**
+ - 内容获取:直接返回搜索引擎返回的文本内容
+ - 文本清理:由搜索引擎模块负责HTML解析和文本清理
+ - 错误处理:搜索引擎模块会处理各种异常情况并提供回退机制
-- 安全与合规
- - 该实现为浏览器自动化,不涉及明文API密钥传递
- - 建议在生产环境限制浏览器访问范围与网络策略
+- **安全与合规**
+ - 该实现为搜索引擎查询,不涉及明文API密钥传递
+ - 使用公开的搜索引擎API,无需认证
+ - 遵循搜索引擎的使用条款和限制
```mermaid
classDiagram
@@ -168,36 +202,67 @@ class BasePlatformAdapter {
+close() void
}
class WenxinAdapter {
--_playwright
--_browser
+query(keyword) str
++_do_query(keyword) str
+close() void
--_ensure_browser() void
--_do_query(keyword) str
--_wait_for_response_stable(page, timeout) str
+}
+class SearchEngine {
++fetch_search_content(platform_name, keyword) str
++search_duckduckgo(query) str
++search_wikipedia(keyword) str
}
BasePlatformAdapter <|-- WenxinAdapter
+WenxinAdapter --> SearchEngine
```
-图表来源
+**图表来源**
- [base.py:4-18](file://backend/app/workers/platforms/base.py#L4-L18)
-- [wenxin.py:11-205](file://backend/app/workers/platforms/wenxin.py#L11-L205)
+- [wenxin.py:10-38](file://backend/app/workers/platforms/wenxin.py#L10-L38)
+- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
-章节来源
-- [wenxin.py:11-205](file://backend/app/workers/platforms/wenxin.py#L11-L205)
+**章节来源**
+- [wenxin.py:10-38](file://backend/app/workers/platforms/wenxin.py#L10-L38)
+
+### 搜索引擎模块(SearchEngine)
+- **角色与职责**
+ - 提供统一的搜索内容获取能力
+ - 支持DuckDuckGo HTML搜索和Wikipedia API查询
+ - 实现智能回退机制,确保查询成功率
+
+- **关键实现要点**
+ - DuckDuckGo搜索:使用HTML解析获取搜索结果摘要
+ - Wikipedia回退:当DuckDuckGo受限时自动切换到Wikipedia API
+ - HTML解析:提取标题和摘要信息,去除HTML标签
+ - 文本清理:移除引用标记和多余空白字符
+
+- **搜索策略**
+ - 主要策略:DuckDuckGo HTML搜索,无需API密钥
+ - 回退策略:Wikipedia API查询,公开API无需认证
+ - 结果合并:将多个搜索结果合并为统一格式
+
+- **错误处理**
+ - 搜索失败:记录警告并尝试回退策略
+ - 解析失败:检查返回内容的有效性
+ - 所有策略失败:抛出运行时错误
+
+**章节来源**
+- [search_engine.py:16-77](file://backend/app/workers/platforms/search_engine.py#L16-L77)
+- [search_engine.py:79-145](file://backend/app/workers/platforms/search_engine.py#L79-L145)
+- [search_engine.py:147-174](file://backend/app/workers/platforms/search_engine.py#L147-L174)
### 引擎(CitationEngine)
-- 角色与职责
+- **角色与职责**
- 编排查询任务,按平台顺序执行
- 调用适配器获取原始响应,进行品牌匹配与竞争品牌检测
- 将结果持久化为引用记录,并更新任务状态与查询时间
-- 关键实现要点
- - 平台注册:内置文心与Kimi适配器,可扩展更多平台
+- **关键实现要点**
+ - 平台注册:内置文心、Kimi、通义等适配器,均可扩展更多平台
- 任务状态管理:运行中、成功、失败三种状态,失败时记录错误信息
- 结果聚合:返回引用状态、置信度、匹配类型、位置、上下文、竞争品牌与原始响应
+ - 关键词增强:为搜索引擎查询自动添加目标品牌关键词
-- 错误处理
+- **错误处理**
- 适配器异常会被捕获并记录,同时生成一条cited=False的占位记录
- 任务状态与完成时间被正确更新,保证数据一致性
@@ -207,7 +272,8 @@ Start(["开始执行查询"]) --> InitMatcher["初始化品牌匹配器"]
InitMatcher --> IteratePlatforms["遍历平台列表"]
IteratePlatforms --> CreateTask["获取或创建任务记录"]
CreateTask --> UpdateTaskRunning["更新任务状态为 running"]
-UpdateTaskRunning --> CallAdapter["调用适配器执行查询"]
+UpdateTaskRunning --> EnhanceKeyword["增强关键词添加目标品牌"]
+EnhanceKeyword --> CallAdapter["调用适配器执行查询"]
CallAdapter --> ParseResult["品牌匹配与竞争品牌检测"]
ParseResult --> CreateRecord["创建引用记录"]
CreateRecord --> UpdateTaskSuccess["更新任务状态为 success"]
@@ -217,171 +283,194 @@ NextPlatform --> |否| UpdateQueryTime["更新查询时间字段"]
UpdateQueryTime --> End(["结束"])
```
-图表来源
-- [citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
+**图表来源**
+- [citation_engine.py:177-254](file://backend/app/workers/citation_engine.py#L177-L254)
-章节来源
-- [citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
+**章节来源**
+- [citation_engine.py:161-176](file://backend/app/workers/citation_engine.py#L161-L176)
+- [citation_engine.py:177-254](file://backend/app/workers/citation_engine.py#L177-L254)
### 配置管理(Settings)
-- 配置项说明
+- **配置项说明**
- 数据库连接:DATABASE_URL
- Redis连接:REDIS_URL
- JWT密钥与过期:JWT_SECRET、JWT_EXPIRE_HOURS
- - Playwright浏览器路径:PLAYWRIGHT_BROWSERS_PATH
- - API密钥占位:ZHIPU_API_KEY、TONGYI_API_KEY(当前未用于文心适配器)
+ - Playwright浏览器路径:PLAYWRIGHT_BROWSERS_PATH(仍保留用于其他适配器)
+ - API密钥占位:ZHIPU_API_KEY、TONGYI_API_KEY(当前未用于搜索引擎适配器)
-- 环境变量加载
+- **环境变量加载**
- 通过Pydantic Settings自动从.env文件加载,忽略未知字段
-- 容器化与依赖
- - Dockerfile中安装系统依赖并预装Playwright浏览器,确保运行时可用
+- **容器化与依赖**
+ - Dockerfile中安装系统依赖,但Playwright浏览器仅用于其他适配器
+ - 确保搜索引擎查询功能正常运行
-章节来源
-- [config.py:4-16](file://backend/app/config.py#L4-L16)
-- [Dockerfile:1-40](file://backend/Dockerfile#L1-L40)
+**章节来源**
+- [config.py:9-23](file://backend/app/config.py#L9-L23)
+- [Dockerfile:1-41](file://backend/Dockerfile#L1-L41)
### 数据模型(Query)
-- 字段说明
+- **字段说明**
- 关键词、目标品牌、别名、平台集合、频率、状态、时间戳等
- 默认平台集合包含文心与Kimi,便于快速启用
-- 业务意义
+- **业务意义**
- 作为查询任务的载体,驱动引擎执行跨平台检索与分析
-章节来源
+**章节来源**
- [query.py:11-55](file://backend/app/models/query.py#L11-L55)
### API入口(queries.py)
-- 功能概述
+- **功能概述**
- 提供查询任务的增删改查接口,供前端调用
- 与服务层协作,完成权限校验与数据持久化
-- 与引擎的关系
+- **与引擎的关系**
- 引擎在后台异步执行查询,API负责暴露任务管理能力
-章节来源
-- [queries.py:1-86](file://backend/app/api/queries.py#L1-L86)
+**章节来源**
+- [queries.py:1-109](file://backend/app/api/queries.py#L1-L109)
## 依赖关系分析
-- 组件耦合
- - CitationEngine依赖WenxinAdapter与KimiAdapter,形成平台无关的编排层
- - WenxinAdapter依赖Playwright进行页面自动化,不依赖HTTP客户端
+- **组件耦合**
+ - CitationEngine依赖各平台适配器,形成平台无关的编排层
+ - 所有搜索引擎适配器依赖统一的SearchEngine模块
+ - SearchEngine依赖外部服务(DuckDuckGo、Wikipedia)
- 引擎与模型解耦,通过ORM进行数据持久化
-- 外部依赖
- - Playwright:无头浏览器自动化
- - Docker:容器化部署,预装浏览器与系统依赖
+- **外部依赖**
+ - DuckDuckGo:免费HTML搜索服务
+ - Wikipedia API:公开百科查询服务
+ - Docker:容器化部署,包含必要的系统依赖
```mermaid
graph LR
Engine["CitationEngine"] --> Wenxin["WenxinAdapter"]
Engine --> Kimi["KimiAdapter"]
-Wenxin --> Playwright["Playwright"]
-Kimi --> Playwright
+Engine --> Tongyi["TongyiAdapter"]
+Wenxin --> Search["SearchEngine"]
+Kimi --> Search
+Tongyi --> Search
+Search --> DDG["DuckDuckGo"]
+Search --> Wiki["Wikipedia API"]
Engine --> ORM["SQLAlchemy ORM"]
Engine --> Model["Query模型"]
```
-图表来源
-- [citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
-- [wenxin.py:11-205](file://backend/app/workers/platforms/wenxin.py#L11-L205)
+**图表来源**
+- [citation_engine.py:161-176](file://backend/app/workers/citation_engine.py#L161-L176)
+- [wenxin.py:10-38](file://backend/app/workers/platforms/wenxin.py#L10-L38)
+- [kimi.py:10-38](file://backend/app/workers/platforms/kimi.py#L10-L38)
+- [tongyi.py:10-38](file://backend/app/workers/platforms/tongyi.py#L10-L38)
+- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
-章节来源
-- [citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
-- [wenxin.py:11-205](file://backend/app/workers/platforms/wenxin.py#L11-L205)
+**章节来源**
+- [citation_engine.py:161-176](file://backend/app/workers/citation_engine.py#L161-L176)
+- [wenxin.py:10-38](file://backend/app/workers/platforms/wenxin.py#L10-L38)
+- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
## 性能考虑
-- 浏览器资源复用
- - 适配器内部维护浏览器实例,避免重复启动带来的冷启动开销
-- 稳定性检测优化
- - 通过连续检测与超时控制,减少无效重试
-- 重试策略
- - 最多重试3次,指数退避降低瞬时压力
-- 超时设置
- - 页面导航、元素查找、发送按钮等待均有明确超时,防止长时间阻塞
+- **查询效率**
+ - 搜索引擎查询比浏览器自动化更快,响应时间更短
+ - 减少内存和CPU消耗,提高并发处理能力
+ - 无需维护浏览器实例,降低资源开销
-章节来源
-- [wenxin.py:33-48](file://backend/app/workers/platforms/wenxin.py#L33-L48)
-- [wenxin.py:124-196](file://backend/app/workers/platforms/wenxin.py#L124-L196)
+- **稳定性优化**
+ - 通过搜索引擎模块的回退机制,提高查询成功率
+ - 统一的错误处理和重试策略
+ - 外部服务的超时控制,防止长时间阻塞
+
+- **重试策略**
+ - 最多重试3次,指数退避降低瞬时压力
+ - 搜索引擎查询超时30秒,确保及时响应
+
+- **缓存与优化**
+ - 搜索结果可利用外部服务的缓存机制
+ - 减少重复查询,提高整体性能
+
+**章节来源**
+- [wenxin.py:16-29](file://backend/app/workers/platforms/wenxin.py#L16-L29)
+- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
## 故障排查指南
-- 启动浏览器失败
- - 现象:初始化浏览器时报错,提示未安装Playwright浏览器
- - 处理:在容器内执行Playwright浏览器安装命令;检查Dockerfile中的安装步骤
- - 参考:[wenxin.py:21-31](file://backend/app/workers/platforms/wenxin.py#L21-L31)、[Dockerfile:31-33](file://backend/Dockerfile#L31-L33)
+- **搜索引擎查询失败**
+ - 现象:DuckDuckGo搜索受限或返回空结果
+ - 处理:自动回退到Wikipedia API;检查网络连通性
+ - 参考:[search_engine.py:139-144](file://backend/app/workers/platforms/search_engine.py#L139-L144)
-- 页面操作超时
- - 现象:页面导航或元素查找超时
- - 处理:检查网络连通性、目标站点可达性;适当调整超时参数
- - 参考:[wenxin.py:64-87](file://backend/app/workers/platforms/wenxin.py#L64-L87)、[wenxin.py:114-117](file://backend/app/workers/platforms/wenxin.py#L114-L117)
+- **Wikipedia API查询失败**
+ - 现象:百科查询不可用或返回空内容
+ - 处理:检查Wikipedia API可用性;确认关键词有效性
+ - 参考:[search_engine.py:28-76](file://backend/app/workers/platforms/search_engine.py#L28-L76)
-- 无法找到输入框
- - 现象:页面结构变更导致选择器失效
- - 处理:更新输入框选择器列表;增加容错分支
- - 参考:[wenxin.py:67-87](file://backend/app/workers/platforms/wenxin.py#L67-L87)
+- **HTML解析失败**
+ - 现象:DuckDuckGo返回的HTML结构发生变化
+ - 处理:更新HTML解析正则表达式;增加容错分支
+ - 参考:[search_engine.py:105-137](file://backend/app/workers/platforms/search_engine.py#L105-L137)
-- 回复不稳定
- - 现象:文本持续变化,无法稳定
- - 处理:延长等待时间或放宽稳定阈值;检查页面动态加载逻辑
- - 参考:[wenxin.py:124-196](file://backend/app/workers/platforms/wenxin.py#L124-L196)
+- **适配器查询异常**
+ - 现象:搜索引擎查询抛出异常
+ - 处理:检查重试机制;查看日志定位根因
+ - 参考:[wenxin.py:16-29](file://backend/app/workers/platforms/wenxin.py#L16-L29)
-- 引擎执行失败
+- **引擎执行失败**
- 现象:适配器异常导致任务失败
- 处理:记录错误信息并生成占位记录;检查日志定位根因
- - 参考:[citation_engine.py:211-227](file://backend/app/workers/citation_engine.py#L211-L227)
+ - 参考:[citation_engine.py:231-247](file://backend/app/workers/citation_engine.py#L231-L247)
-- 单元测试验证
+- **单元测试验证**
- 测试覆盖平台返回值与统计数据,确保集成链路正常
- 参考:[test_citations.py:23-93](file://tests/test_citations.py#L23-L93)
-章节来源
-- [wenxin.py:21-31](file://backend/app/workers/platforms/wenxin.py#L21-L31)
-- [wenxin.py:64-87](file://backend/app/workers/platforms/wenxin.py#L64-L87)
-- [wenxin.py:114-117](file://backend/app/workers/platforms/wenxin.py#L114-L117)
-- [wenxin.py:124-196](file://backend/app/workers/platforms/wenxin.py#L124-L196)
-- [citation_engine.py:211-227](file://backend/app/workers/citation_engine.py#L211-L227)
+**章节来源**
+- [search_engine.py:139-144](file://backend/app/workers/platforms/search_engine.py#L139-L144)
+- [search_engine.py:28-76](file://backend/app/workers/platforms/search_engine.py#L28-L76)
+- [search_engine.py:105-137](file://backend/app/workers/platforms/search_engine.py#L105-L137)
+- [wenxin.py:16-29](file://backend/app/workers/platforms/wenxin.py#L16-L29)
+- [citation_engine.py:231-247](file://backend/app/workers/citation_engine.py#L231-L247)
- [test_citations.py:23-93](file://tests/test_citations.py#L23-L93)
## 结论
-文心平台集成通过“浏览器自动化 + 引擎编排”的方式,实现了对文心一言的稳定查询与响应解析。其特点包括:
-- 明确的适配器接口与可扩展的平台注册机制
-- 完善的重试与稳定性检测策略
+文心平台集成通过"搜索引擎查询 + 引擎编排"的方式,实现了对文心一言的高效查询与内容获取。其特点包括:
+- 简化的适配器实现,移除复杂的浏览器自动化逻辑
+- 统一的搜索引擎查询机制,提高查询成功率和稳定性
+- 完善的重试与回退策略,确保在各种情况下都能获取内容
- 清晰的错误处理与任务状态管理
- 与容器化部署的无缝衔接
-在实际使用中,建议结合业务需求对超时、重试与稳定性阈值进行调优,并持续关注页面结构变化以保持选择器的有效性。
+在实际使用中,建议结合业务需求对搜索引擎查询参数进行调优,并持续关注搜索引擎API的变化以保持功能的稳定性。
## 附录
### API调用示例与错误处理方案
-- 示例场景
+- **示例场景**
- 前端通过查询API创建任务,后台引擎按平台顺序执行
- - 引擎调用文心适配器获取原始响应,进行品牌匹配与统计
- - 若适配器异常,引擎记录失败并生成占位记录
+ - 引擎调用文心适配器获取搜索内容,进行品牌匹配与统计
+ - 若搜索引擎查询异常,引擎记录失败并生成占位记录
-- 错误处理方案
- - 适配器异常:捕获并记录,返回占位记录
- - 页面超时:延长等待或放宽阈值
- - 选择器失效:更新选择器列表并增加容错分支
+- **错误处理方案**
+ - 搜索引擎查询异常:自动回退到Wikipedia API;记录错误并重试
+ - HTML解析失败:更新解析规则并增加容错分支
+ - 外部服务不可用:使用缓存内容或回退策略
-章节来源
-- [queries.py:1-86](file://backend/app/api/queries.py#L1-L86)
-- [citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
-- [wenxin.py:33-122](file://backend/app/workers/platforms/wenxin.py#L33-L122)
+**章节来源**
+- [queries.py:90-109](file://backend/app/api/queries.py#L90-L109)
+- [citation_engine.py:177-254](file://backend/app/workers/citation_engine.py#L177-L254)
+- [wenxin.py:16-33](file://backend/app/workers/platforms/wenxin.py#L16-L33)
### 安全注意事项与最佳实践
-- 安全注意事项
- - 该实现为浏览器自动化,不涉及HTTP请求头与API密钥传递
- - 生产环境建议限制容器网络访问范围,仅允许必要域名
+- **安全注意事项**
+ - 该实现使用公开的搜索引擎API,无需API密钥
+ - 遵循搜索引擎的使用条款和限制
- 日志中避免输出敏感信息(如用户输入、错误堆栈)
-- 最佳实践
- - 在Dockerfile中预装浏览器与系统依赖,确保部署一致性
- - 对页面选择器进行版本化管理,随页面结构变更同步更新
- - 设置合理的超时与重试策略,平衡稳定性与性能
+- **最佳实践**
+ - 使用统一的搜索引擎模块,确保查询策略的一致性
+ - 设置合理的超时和重试策略,平衡稳定性与性能
+ - 监控搜索引擎API的可用性和性能指标
+ - 定期更新HTML解析规则以适应搜索引擎页面结构变化
- 使用单元测试覆盖关键流程,保障回归质量
-章节来源
-- [Dockerfile:1-40](file://backend/Dockerfile#L1-L40)
+**章节来源**
+- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
- [test_citations.py:23-93](file://tests/test_citations.py#L23-L93)
\ No newline at end of file
diff --git a/.qoder/repowiki/zh/content/API接口文档/查询管理接口.md b/.qoder/repowiki/zh/content/API接口文档/查询管理接口.md
index 444eefd..556ac58 100644
--- a/.qoder/repowiki/zh/content/API接口文档/查询管理接口.md
+++ b/.qoder/repowiki/zh/content/API接口文档/查询管理接口.md
@@ -4,11 +4,13 @@
**本文档引用的文件**
- [backend/app/api/queries.py](file://backend/app/api/queries.py)
- [backend/app/schemas/query.py](file://backend/app/schemas/query.py)
+- [backend/app/schemas/citation.py](file://backend/app/schemas/citation.py)
- [backend/app/models/query.py](file://backend/app/models/query.py)
- [backend/app/models/query_task.py](file://backend/app/models/query_task.py)
- [backend/app/models/citation_record.py](file://backend/app/models/citation_record.py)
- [backend/app/models/user.py](file://backend/app/models/user.py)
- [backend/app/services/query.py](file://backend/app/services/query.py)
+- [backend/app/services/citation.py](file://backend/app/services/citation.py)
- [backend/app/workers/scheduler.py](file://backend/app/workers/scheduler.py)
- [backend/app/workers/citation_engine.py](file://backend/app/workers/citation_engine.py)
- [backend/app/workers/platforms/base.py](file://backend/app/workers/platforms/base.py)
@@ -17,8 +19,16 @@
- [backend/app/api/citations.py](file://backend/app/api/citations.py)
- [backend/app/main.py](file://backend/app/main.py)
- [tests/test_queries.py](file://tests/test_queries.py)
+- [tests/test_business_flow.py](file://tests/test_business_flow.py)
+## 更新摘要
+**变更内容**
+- 更新run-now功能的API文档,反映其已合并到主查询API中
+- 修正API路由结构,移除独立的run_now_router结构
+- 更新架构图和依赖关系,体现新的API组织方式
+- 补充run-now接口的详细使用说明和错误处理
+
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
@@ -32,11 +42,11 @@
10. [附录](#附录)
## 简介
-本文件为“查询管理系统”的详细API文档,覆盖查询任务的创建、读取、更新、删除与执行全流程;详述查询任务的数据模型、字段定义与验证规则;文档化查询任务的状态管理、调度机制与执行监控;包含查询参数配置、定时任务设置与批量操作接口的使用建议;并提供查询任务生命周期管理的最佳实践与错误处理策略。
+本文件为"查询管理系统"的详细API文档,覆盖查询任务的创建、读取、更新、删除与执行全流程;详述查询任务的数据模型、字段定义与验证规则;文档化查询任务的状态管理、调度机制与执行监控;包含查询参数配置、定时任务设置与批量操作接口的使用建议;并提供查询任务生命周期管理的最佳实践与错误处理策略。
## 项目结构
后端采用FastAPI + SQLAlchemy异步ORM + PostgreSQL数据库,查询管理相关模块分布如下:
-- API层:负责路由定义与请求/响应封装
+- API层:负责路由定义与请求/响应封装,包含主查询API和引用API
- Schema层:Pydantic模型,定义请求体与响应体的字段与校验
- Model层:SQLAlchemy ORM模型,定义数据库表结构与索引
- Service层:业务逻辑封装,处理权限、计数限制与时间计算
@@ -51,6 +61,7 @@ CAPI["引用API
backend/app/api/citations.py"]
end
subgraph "Schema层"
QS["查询Schema
backend/app/schemas/query.py"]
+CS["引用Schema
backend/app/schemas/citation.py"]
end
subgraph "Model层"
MQ["查询模型
backend/app/models/query.py"]
@@ -59,7 +70,8 @@ MR["引用记录模型
backend/app/models/citation_record.py"]
MU["用户模型
backend/app/models/user.py"]
end
subgraph "Service层"
-S["查询服务
backend/app/services/query.py"]
+SQ["查询服务
backend/app/services/query.py"]
+SC["引用服务
backend/app/services/citation.py"]
end
subgraph "Worker层"
SCH["调度器
backend/app/workers/scheduler.py"]
@@ -70,57 +82,67 @@ BASE["适配器基类
backend/app/workers/platforms/base.py"]
KIMI["Kimi适配器
backend/app/workers/platforms/kimi.py"]
WENXIN["文心一言适配器
backend/app/workers/platforms/wenxin.py"]
end
-QAPI --> S
-CAPI --> CE
-S --> MQ
-CE --> MQ
-CE --> MR
-CE --> MT
+QAPI --> SQ
+CAPI --> SC
+SQ --> MQ
+SC --> MQ
+SC --> MR
+SC --> MT
SCH --> CE
CE --> KIMI
CE --> WENXIN
QS --> QAPI
+CS --> QAPI
+CS --> CAPI
MQ --> MU
```
-图表来源
-- [backend/app/api/queries.py:1-86](file://backend/app/api/queries.py#L1-L86)
-- [backend/app/api/citations.py:1-78](file://backend/app/api/citations.py#L1-L78)
+**图表来源**
+- [backend/app/api/queries.py:1-109](file://backend/app/api/queries.py#L1-L109)
+- [backend/app/api/citations.py:1-55](file://backend/app/api/citations.py#L1-L55)
- [backend/app/schemas/query.py:1-94](file://backend/app/schemas/query.py#L1-L94)
+- [backend/app/schemas/citation.py:1-52](file://backend/app/schemas/citation.py#L1-L52)
- [backend/app/models/query.py:1-55](file://backend/app/models/query.py#L1-L55)
- [backend/app/models/query_task.py:1-39](file://backend/app/models/query_task.py#L1-L39)
- [backend/app/models/citation_record.py:1-42](file://backend/app/models/citation_record.py#L1-L42)
- [backend/app/models/user.py:1-41](file://backend/app/models/user.py#L1-L41)
- [backend/app/services/query.py:1-130](file://backend/app/services/query.py#L1-L130)
+- [backend/app/services/citation.py:1-429](file://backend/app/services/citation.py#L1-L429)
- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
- [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309)
- [backend/app/workers/platforms/base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)
- [backend/app/workers/platforms/kimi.py:1-206](file://backend/app/workers/platforms/kimi.py#L1-L206)
- [backend/app/workers/platforms/wenxin.py:1-205](file://backend/app/workers/platforms/wenxin.py#L1-L205)
-章节来源
+**章节来源**
- [backend/app/main.py:1-48](file://backend/app/main.py#L1-L48)
## 核心组件
-- 查询API:提供查询任务的增删改查与分页列表接口
+- 查询API:提供查询任务的增删改查与分页列表接口,包含run-now立即执行功能
+- 引用API:提供查询历史、统计与导出接口
- 查询Schema:定义创建/更新请求体与响应体的字段与校验规则
+- 引用Schema:定义引用记录、统计和run-now响应的数据结构
- 查询模型:定义数据库表结构、索引与关联关系
- 查询任务模型:记录每次平台执行的任务状态与时间戳
- 引用记录模型:保存每次查询的结果与统计信息
- 用户模型:限制用户的最大查询数量
- 查询服务:实现权限控制、计数限制与下次查询时间计算
+- 引用服务:实现引用数据查询、统计、立即执行和导出功能
- 调度器:基于APScheduler的定时任务,周期性检查并执行到期查询
- 引用引擎:跨平台执行查询、品牌匹配、竞争品牌检测与结果持久化
- 平台适配器:Kimi与文心一言的自动化查询实现
-章节来源
-- [backend/app/api/queries.py:15-85](file://backend/app/api/queries.py#L15-L85)
+**章节来源**
+- [backend/app/api/queries.py:15-109](file://backend/app/api/queries.py#L15-L109)
+- [backend/app/api/citations.py:19-55](file://backend/app/api/citations.py#L19-L55)
- [backend/app/schemas/query.py:11-94](file://backend/app/schemas/query.py#L11-L94)
+- [backend/app/schemas/citation.py:7-52](file://backend/app/schemas/citation.py#L7-L52)
- [backend/app/models/query.py:11-55](file://backend/app/models/query.py#L11-L55)
- [backend/app/models/query_task.py:11-39](file://backend/app/models/query_task.py#L11-L39)
- [backend/app/models/citation_record.py:11-42](file://backend/app/models/citation_record.py#L11-L42)
- [backend/app/models/user.py:11-41](file://backend/app/models/user.py#L11-L41)
- [backend/app/services/query.py:12-130](file://backend/app/services/query.py#L12-L130)
+- [backend/app/services/citation.py:219-429](file://backend/app/services/citation.py#L219-L429)
- [backend/app/workers/scheduler.py:25-95](file://backend/app/workers/scheduler.py#L25-L95)
- [backend/app/workers/citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
- [backend/app/workers/platforms/base.py:4-18](file://backend/app/workers/platforms/base.py#L4-L18)
@@ -131,7 +153,8 @@ MQ --> MU
- 调度器定时扫描满足条件的查询任务,触发引用引擎执行
- 引用引擎遍历平台列表,调用平台适配器获取AI回复,执行品牌匹配与竞争品牌检测,生成引用记录
- 查询任务模型记录每次执行的状态与时间,便于监控与重试
-- 引用API提供查询历史、统计与“立即执行”接口
+- 引用API提供查询历史、统计与导出接口
+- **新增**:run-now功能允许用户立即执行查询任务,绕过正常调度机制
```mermaid
sequenceDiagram
@@ -155,11 +178,20 @@ Scheduler->>Engine : "execute_query(query)"
Engine->>Adapter : "逐平台查询(keyword)"
Adapter-->>Engine : "返回原始回复"
Engine->>DB : "写入引用记录与更新查询时间"
+Note over Client,API : "立即执行"
+Client->>API : "POST /api/v1/queries/{query_id}/run-now"
+API->>Service : "trigger_query_now(...)"
+Service->>DB : "创建QueryTask并立即执行"
+DB-->>Service : "返回任务"
+Service-->>API : "返回任务"
+API-->>Client : "202 Accepted"
```
-图表来源
-- [backend/app/api/queries.py:26-39](file://backend/app/api/queries.py#L26-L39)
+**图表来源**
+- [backend/app/api/queries.py:28-41](file://backend/app/api/queries.py#L28-L41)
+- [backend/app/api/queries.py:90-109](file://backend/app/api/queries.py#L90-L109)
- [backend/app/services/query.py:45-81](file://backend/app/services/query.py#L45-L81)
+- [backend/app/services/citation.py:219-261](file://backend/app/services/citation.py#L219-L261)
- [backend/app/workers/scheduler.py:51-84](file://backend/app/workers/scheduler.py#L51-L84)
- [backend/app/workers/citation_engine.py:159-234](file://backend/app/workers/citation_engine.py#L159-L234)
- [backend/app/workers/platforms/kimi.py:33-48](file://backend/app/workers/platforms/kimi.py#L33-L48)
@@ -233,13 +265,13 @@ QUERIES ||--o{ CITATION_RECORDS : "产生"
QUERIES ||--o{ QUERY_TASKS : "驱动"
```
-图表来源
+**图表来源**
- [backend/app/models/user.py:11-41](file://backend/app/models/user.py#L11-L41)
- [backend/app/models/query.py:11-55](file://backend/app/models/query.py#L11-L55)
- [backend/app/models/query_task.py:11-39](file://backend/app/models/query_task.py#L11-L39)
- [backend/app/models/citation_record.py:11-42](file://backend/app/models/citation_record.py#L11-L42)
-章节来源
+**章节来源**
- [backend/app/models/user.py:11-41](file://backend/app/models/user.py#L11-L41)
- [backend/app/models/query.py:11-55](file://backend/app/models/query.py#L11-L55)
- [backend/app/models/query_task.py:11-39](file://backend/app/models/query_task.py#L11-L39)
@@ -269,12 +301,12 @@ stateDiagram-v2
失败 --> 待调度 : "更新next_query_at"
```
-图表来源
+**图表来源**
- [backend/app/workers/scheduler.py:51-84](file://backend/app/workers/scheduler.py#L51-L84)
- [backend/app/workers/citation_engine.py:176-234](file://backend/app/workers/citation_engine.py#L176-L234)
- [backend/app/models/query_task.py:24-32](file://backend/app/models/query_task.py#L24-L32)
-章节来源
+**章节来源**
- [backend/app/workers/scheduler.py:25-95](file://backend/app/workers/scheduler.py#L25-L95)
- [backend/app/workers/citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
@@ -301,11 +333,11 @@ StatusOK --> |否| ErrStatus["抛出状态无效错误"]
StatusOK --> |是| Done(["校验通过"])
```
-图表来源
+**图表来源**
- [backend/app/schemas/query.py:18-33](file://backend/app/schemas/query.py#L18-L33)
- [backend/app/schemas/query.py:44-72](file://backend/app/schemas/query.py#L44-L72)
-章节来源
+**章节来源**
- [backend/app/schemas/query.py:6-9](file://backend/app/schemas/query.py#L6-L9)
- [backend/app/schemas/query.py:11-94](file://backend/app/schemas/query.py#L11-L94)
@@ -335,21 +367,25 @@ StatusOK --> |是| Done(["校验通过"])
- 响应:204 No Content
- 错误:不存在返回404
-- 引用数据与立即执行
+- **立即执行查询**(已合并到主查询API)
+ - POST /api/v1/queries/{query_id}/run-now
+ - 功能:立即将某个查询加入执行队列
+ - 响应:包含task_id、status与消息的RunNowResponse
+ - 状态码:202 Accepted(任务已加入队列)
+ - 错误:查询不存在、不属于当前用户或查询状态不为active时返回404
+
+- 引用数据与统计
- GET /api/v1/citations/
- 功能:分页查询引用记录,支持按query_id、platform、日期范围过滤
- 响应:包含items与total的列表响应
- GET /api/v1/citations/stats
- 功能:获取引用统计
- 响应:统计结果
- - POST /api/v1/queries/{query_id}/run-now
- - 功能:立即将某个查询加入执行队列
- - 响应:包含task_id、status与消息
- - 错误:查询不存在或不属于当前用户返回404
-章节来源
-- [backend/app/api/queries.py:15-85](file://backend/app/api/queries.py#L15-L85)
-- [backend/app/api/citations.py:25-77](file://backend/app/api/citations.py#L25-L77)
+**章节来源**
+- [backend/app/api/queries.py:17-109](file://backend/app/api/queries.py#L17-L109)
+- [backend/app/api/citations.py:22-55](file://backend/app/api/citations.py#L22-L55)
+- [backend/app/schemas/citation.py:48-52](file://backend/app/schemas/citation.py#L48-L52)
### 生命周期管理最佳实践
- 合理设置frequency:daily适合高频监控,weekly适合常规跟踪
@@ -357,6 +393,7 @@ StatusOK --> |是| Done(["校验通过"])
- 使用status暂停:在维护或节假日可将查询置为paused避免执行
- 监控next_query_at:确保调度器能按时触发
- 引用记录归档:定期清理过期记录,保持查询性能
+- **新增**:合理使用run-now功能:仅在紧急情况下使用,避免过度消耗资源
### 错误处理策略
- 参数校验失败:返回422,提示具体字段问题
@@ -364,18 +401,21 @@ StatusOK --> |是| Done(["校验通过"])
- 超过用户最大查询数:返回403
- 平台适配器异常:记录error_message,状态标记为failed
- 调度器异常:日志记录错误并继续运行
+- **新增**:run-now功能错误处理:查询状态非active、无平台配置等情况返回404
-章节来源
+**章节来源**
- [backend/app/api/queries.py:32-39](file://backend/app/api/queries.py#L32-L39)
- [backend/app/api/queries.py:49-53](file://backend/app/api/queries.py#L49-L53)
- [backend/app/api/queries.py:64-69](file://backend/app/api/queries.py#L64-L69)
- [backend/app/api/queries.py:79-84](file://backend/app/api/queries.py#L79-L84)
+- [backend/app/api/queries.py:96-103](file://backend/app/api/queries.py#L96-L103)
- [backend/app/api/citations.py:65-71](file://backend/app/api/citations.py#L65-L71)
## 依赖分析
- 组件耦合
- API层依赖Service层;Service层依赖Model层;Worker层依赖Model层与平台适配器
- 引用引擎依赖平台适配器,平台适配器继承自基类
+ - **新增**:查询API现在直接依赖引用服务的trigger_query_now功能
- 外部依赖
- APscheduler用于定时调度
- Playwright用于平台网页自动化
@@ -384,23 +424,26 @@ StatusOK --> |是| Done(["校验通过"])
```mermaid
graph LR
APIQ["查询API"] --> SVCQ["查询服务"]
-APIC["引用API"] --> CE["引用引擎"]
+APIC["引用API"] --> SVCC["引用服务"]
+APIQ --> SVCC
SVCQ --> MODELS["查询/任务/记录模型"]
-CE --> MODELS
+SVCC --> MODELS
+SVCC --> CE["引用引擎"]
CE --> ADP["平台适配器"]
ADP --> BASE["适配器基类"]
SCH["调度器"] --> CE
```
-图表来源
-- [backend/app/api/queries.py:1-12](file://backend/app/api/queries.py#L1-L12)
-- [backend/app/api/citations.py:1-22](file://backend/app/api/citations.py#L1-L22)
+**图表来源**
+- [backend/app/api/queries.py:1-14](file://backend/app/api/queries.py#L1-L14)
+- [backend/app/api/citations.py:1-19](file://backend/app/api/citations.py#L1-L19)
- [backend/app/services/query.py:1-10](file://backend/app/services/query.py#L1-L10)
+- [backend/app/services/citation.py:1-17](file://backend/app/services/citation.py#L1-L17)
- [backend/app/workers/citation_engine.py:148-157](file://backend/app/workers/citation_engine.py#L148-L157)
- [backend/app/workers/platforms/base.py:4-18](file://backend/app/workers/platforms/base.py#L4-L18)
- [backend/app/workers/scheduler.py:25-39](file://backend/app/workers/scheduler.py#L25-L39)
-章节来源
+**章节来源**
- [backend/app/workers/scheduler.py:13-19](file://backend/app/workers/scheduler.py#L13-L19)
- [backend/app/workers/platforms/kimi.py:17-32](file://backend/app/workers/platforms/kimi.py#L17-L32)
- [backend/app/workers/platforms/wenxin.py:17-32](file://backend/app/workers/platforms/wenxin.py#L17-L32)
@@ -411,6 +454,7 @@ SCH["调度器"] --> CE
- 异步I/O:使用异步数据库连接与平台适配器,提升并发能力
- 调度频率:每小时检查一次,可根据业务量调整
- 结果缓存:对频繁查询的平台响应可引入缓存(需结合业务场景)
+- **新增**:run-now功能的异步执行:使用asyncio.create_task避免阻塞主请求线程
## 故障排查指南
- 调度器未启动:确认应用生命周期钩子已注册并启动调度器
@@ -418,16 +462,18 @@ SCH["调度器"] --> CE
- 查询未执行:检查查询状态与next_query_at是否满足调度条件
- 引用记录缺失:确认引用引擎执行流程与数据库提交顺序
- 权限错误:确认用户max_queries限制与当前查询数量
+- **新增**:run-now功能问题排查:检查查询状态是否为active、平台配置是否正确、任务创建是否成功
-章节来源
+**章节来源**
- [backend/app/main.py:13-22](file://backend/app/main.py#L13-L22)
- [backend/app/workers/platforms/kimi.py:21-32](file://backend/app/workers/platforms/kimi.py#L21-L32)
- [backend/app/workers/platforms/wenxin.py:21-32](file://backend/app/workers/platforms/wenxin.py#L21-L32)
- [backend/app/workers/scheduler.py:51-84](file://backend/app/workers/scheduler.py#L51-L84)
- [backend/app/services/query.py:45-81](file://backend/app/services/query.py#L45-L81)
+- [backend/app/services/citation.py:219-261](file://backend/app/services/citation.py#L219-L261)
## 结论
-本查询管理系统以清晰的分层架构实现了查询任务的全生命周期管理:从创建、校验、调度到执行与监控。通过严格的参数校验、灵活的状态管理与可靠的调度机制,系统能够稳定支撑多平台、多频率的查询需求。建议在生产环境中结合业务量调整调度频率、优化平台适配器稳定性,并完善监控告警体系。
+本查询管理系统以清晰的分层架构实现了查询任务的全生命周期管理:从创建、校验、调度到执行与监控。通过严格的参数校验、灵活的状态管理与可靠的调度机制,系统能够稳定支撑多平台、多频率的查询需求。**最新的架构变更将run-now功能直接集成到主查询API中,简化了API结构并提供了更便捷的立即执行能力。** 建议在生产环境中结合业务量调整调度频率、优化平台适配器稳定性,并完善监控告警体系。
## 附录
@@ -495,6 +541,11 @@ class WenxinAdapter {
+query(keyword) str
+close() void
}
+class RunNowResponse {
++uuid task_id
++string status
++string message
+}
Query "1" --> "*" CitationRecord : "产生"
Query "1" --> "*" QueryTask : "驱动"
User "1" --> "*" Query : "拥有"
@@ -506,7 +557,7 @@ CitationEngine --> KimiAdapter : "调用"
CitationEngine --> WenxinAdapter : "调用"
```
-图表来源
+**图表来源**
- [backend/app/models/query.py:11-55](file://backend/app/models/query.py#L11-L55)
- [backend/app/models/query_task.py:11-39](file://backend/app/models/query_task.py#L11-L39)
- [backend/app/models/citation_record.py:11-42](file://backend/app/models/citation_record.py#L11-L42)
@@ -515,6 +566,7 @@ CitationEngine --> WenxinAdapter : "调用"
- [backend/app/workers/scheduler.py:25-95](file://backend/app/workers/scheduler.py#L25-L95)
- [backend/app/workers/platforms/kimi.py:11-206](file://backend/app/workers/platforms/kimi.py#L11-L206)
- [backend/app/workers/platforms/wenxin.py:11-205](file://backend/app/workers/platforms/wenxin.py#L11-L205)
+- [backend/app/schemas/citation.py:48-52](file://backend/app/schemas/citation.py#L48-L52)
### 单次查询执行序列图
```mermaid
@@ -537,10 +589,19 @@ Engine->>Task : "状态=running"
Engine->>Engine : "调用平台适配器"
Engine->>Record : "创建引用记录"
Engine->>DB : "提交事务"
+Note over API,DB : "run-now立即执行"
+API->>Service : "trigger_query_now(...)"
+Service->>DB : "创建QueryTask并立即执行"
+Service->>Engine : "_execute_query_tasks(...)"
+Engine->>Task : "状态=running"
+Engine->>Engine : "调用平台适配器"
+Engine->>Record : "创建引用记录"
+Engine->>DB : "提交事务"
```
-图表来源
+**图表来源**
- [backend/app/services/query.py:45-81](file://backend/app/services/query.py#L45-L81)
+- [backend/app/services/citation.py:219-327](file://backend/app/services/citation.py#L219-L327)
- [backend/app/workers/citation_engine.py:159-234](file://backend/app/workers/citation_engine.py#L159-L234)
- [backend/app/models/query_task.py:176-289](file://backend/app/models/query_task.py#L176-L289)
- [backend/app/models/citation_record.py:194-204](file://backend/app/models/citation_record.py#L194-L204)
\ No newline at end of file
diff --git a/.qoder/repowiki/zh/content/任务调度系统/调度器设计.md b/.qoder/repowiki/zh/content/任务调度系统/调度器设计.md
index 90a668c..c099af4 100644
--- a/.qoder/repowiki/zh/content/任务调度系统/调度器设计.md
+++ b/.qoder/repowiki/zh/content/任务调度系统/调度器设计.md
@@ -5,6 +5,7 @@
- [backend/app/workers/scheduler.py](file://backend/app/workers/scheduler.py)
- [backend/app/workers/citation_engine.py](file://backend/app/workers/citation_engine.py)
- [backend/app/models/query.py](file://backend/app/models/query.py)
+- [backend/app/models/query_task.py](file://backend/app/models/query_task.py)
- [backend/app/main.py](file://backend/app/main.py)
- [backend/app/database.py](file://backend/app/database.py)
- [backend/app/config.py](file://backend/app/config.py)
@@ -13,8 +14,16 @@
- [backend/app/workers/platforms/base.py](file://backend/app/workers/platforms/base.py)
- [backend/app/api/citations.py](file://backend/app/api/citations.py)
- [backend/app/services/query.py](file://backend/app/services/query.py)
+- [tests/test_scheduler.py](file://tests/test_scheduler.py)
+## 更新摘要
+**变更内容**
+- 新增分钟级轮询机制,每分钟检查并执行遗留的pending任务
+- 新增`check_and_execute_pending_tasks()`方法用于处理孤立的待处理任务
+- 新增对QueryTask模型的完整支持,包括`scheduled_at`字段的使用
+- 增强系统弹性,提供双重检查机制以提高任务执行可靠性
+
## 目录
1. [引言](#引言)
2. [项目结构](#项目结构)
@@ -30,7 +39,7 @@
## 引言
本文件系统性阐述基于 APScheduler 的 AsyncIOScheduler 的调度器设计与实现,重点覆盖以下方面:
- 架构选择与初始化:如何通过 AsyncIOScheduler 实现与事件循环的无缝集成,并在启动时注册周期性任务。
-- 触发器与任务注册:使用间隔触发器每小时扫描并执行到期查询任务。
+- 双重触发器机制:使用小时级触发器每小时扫描并执行到期查询任务,同时使用分钟级触发器每分钟检查遗留的pending任务。
- 核心组件职责:QueryScheduler 类的设计模式、事件循环管理、异步任务包装策略。
- 启动与关闭流程:应用生命周期内调度器的启动与优雅停机,资源清理与并发安全。
- 配置参数与性能调优:数据库连接、触发器频率、重试与指数退避策略、平台适配器资源管理。
@@ -60,14 +69,14 @@ Engine --> Platforms
DB --> Models
```
-图表来源
+**图表来源**
- [backend/app/main.py:13-22](file://backend/app/main.py#L13-L22)
- [backend/app/workers/scheduler.py:25-95](file://backend/app/workers/scheduler.py#L25-L95)
- [backend/app/workers/citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
- [backend/app/database.py:6-28](file://backend/app/database.py#L6-L28)
- [backend/app/models/query.py:11-55](file://backend/app/models/query.py#L11-L55)
-章节来源
+**章节来源**
- [backend/app/main.py:1-48](file://backend/app/main.py#L1-L48)
- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
- [backend/app/database.py:1-29](file://backend/app/database.py#L1-L29)
@@ -77,19 +86,21 @@ DB --> Models
- QueryScheduler:封装 AsyncIOScheduler,负责注册周期性任务、事件循环管理、任务执行入口与优雅停机。
- CitationEngine:核心业务引擎,负责品牌匹配、竞争品牌检测、平台适配器编排、任务状态持久化与下次查询时间计算。
- 平台适配器:KimiAdapter 与 WenxinAdapter,基于 Playwright 的自动化查询与结果稳定检测,具备指数退避与资源清理能力。
-- 数据层:Query 模型及其索引,驱动调度器的查询筛选条件与频率控制。
+- 数据层:Query 模型及其索引,驱动调度器的查询筛选条件与频率控制;QueryTask 模型用于跟踪任务执行状态。
-章节来源
+**章节来源**
- [backend/app/workers/scheduler.py:25-95](file://backend/app/workers/scheduler.py#L25-L95)
- [backend/app/workers/citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
- [backend/app/workers/platforms/kimi.py:11-206](file://backend/app/workers/platforms/kimi.py#L11-L206)
- [backend/app/workers/platforms/wenxin.py:11-205](file://backend/app/workers/platforms/wenxin.py#L11-L205)
- [backend/app/models/query.py:11-55](file://backend/app/models/query.py#L11-L55)
+- [backend/app/models/query_task.py:11-38](file://backend/app/models/query_task.py#L11-L38)
## 架构总览
-调度器采用“应用生命周期 + 异步调度器 + 引擎编排”的分层架构:
+调度器采用"应用生命周期 + 异步调度器 + 引擎编排"的分层架构,现已增强为双重检查机制:
- 应用启动时通过 lifespan 钩子启动调度器。
- 调度器以每小时为周期扫描数据库,筛选到期的 active 查询任务。
+- 同时以每分钟为周期检查遗留的 pending 查询任务,确保系统弹性。
- 对每个查询任务,CitationEngine 负责跨平台执行、结果解析与持久化。
- 平台适配器负责具体平台的网页自动化与稳定性检测。
- 应用关闭时,调度器优雅停机并释放平台适配器资源。
@@ -106,8 +117,10 @@ participant Plat as "平台适配器"
App->>Life : "应用启动"
Life->>Sched : "start()"
Sched->>APS : "add_job(IntervalTrigger(hours=1))"
+Sched->>APS : "add_job(IntervalTrigger(minutes=1))"
APS-->>Sched : "注册成功"
APS->>Sched : "定时回调 _run_check"
+APS->>Sched : "定时回调 _run_pending_tasks_check"
Sched->>Sched : "事件循环包装"
Sched->>DB : "创建异步会话"
DB-->>Sched : "会话实例"
@@ -120,13 +133,22 @@ Plat-->>Eng : "原始响应文本"
Eng-->>Sched : "CitationRecord 列表"
Sched->>DB : "更新 Query.next_query_at"
end
+Sched->>DB : "查询 pending 且超时的 QueryTask"
+DB-->>Sched : "遗留任务列表"
+loop 对每个遗留任务
+Sched->>Eng : "execute_single_platform(query.keyword, task.platform)"
+Eng->>Plat : "query(keyword)"
+Plat-->>Eng : "原始响应文本"
+Eng-->>Sched : "CitationRecord 列表"
+Sched->>DB : "更新 QueryTask 状态"
+end
App->>Life : "应用关闭"
Life->>Sched : "shutdown()"
Sched->>APS : "shutdown(wait=False)"
Sched->>Eng : "close()"
```
-图表来源
+**图表来源**
- [backend/app/main.py:13-22](file://backend/app/main.py#L13-L22)
- [backend/app/workers/scheduler.py:30-90](file://backend/app/workers/scheduler.py#L30-L90)
- [backend/app/workers/citation_engine.py:159-234](file://backend/app/workers/citation_engine.py#L159-L234)
@@ -137,9 +159,9 @@ Sched->>Eng : "close()"
### QueryScheduler 组件
- 设计模式:职责分离 + 生命周期集成。将调度逻辑与业务执行解耦,通过 CitationEngine 承载核心业务。
-- 初始化与启动:构造函数创建 AsyncIOScheduler 与 CitationEngine;start() 注册每小时触发的任务,替换同名任务以避免重复。
-- 事件循环管理:_run_check() 在无运行中事件循环时使用 asyncio.run() 启动新事件循环,否则通过 loop.create_task() 将异步任务调度到当前事件循环,保证并发安全与可观察性。
-- 任务执行:check_and_execute_queries() 以异步会话查询到期的 active 查询,逐条调用 _execute_single_query(),捕获异常并继续处理其他任务。
+- 初始化与启动:构造函数创建 AsyncIOScheduler 与 CitationEngine;start() 注册每小时触发的任务和每分钟触发的遗留任务检查,替换同名任务以避免重复。
+- 事件循环管理:_run_check() 和 _run_pending_tasks_check() 在无运行中事件循环时使用 asyncio.run() 启动新事件循环,否则通过 loop.create_task() 将异步任务调度到当前事件循环,保证并发安全与可观察性。
+- 任务执行:check_and_execute_queries() 以异步会话查询到期的 active 查询,逐条调用 _execute_single_query(),捕获异常并继续处理其他任务;check_and_execute_pending_tasks() 处理超过1分钟仍未执行的遗留任务。
- 关闭流程:shutdown() 调用 APScheduler 的 shutdown(wait=False) 与 CitationEngine.close(),确保平台资源释放。
```mermaid
@@ -150,6 +172,8 @@ class QueryScheduler {
-_run_check() void
+check_and_execute_queries() async
-_execute_single_query(query, db) async
+-_run_pending_tasks_check() void
++check_and_execute_pending_tasks() async
-scheduler AsyncIOScheduler
-engine CitationEngine
}
@@ -166,11 +190,11 @@ class CitationEngine {
QueryScheduler --> CitationEngine : "依赖"
```
-图表来源
+**图表来源**
- [backend/app/workers/scheduler.py:25-95](file://backend/app/workers/scheduler.py#L25-L95)
- [backend/app/workers/citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
-章节来源
+**章节来源**
- [backend/app/workers/scheduler.py:25-95](file://backend/app/workers/scheduler.py#L25-L95)
### CitationEngine 组件
@@ -195,10 +219,10 @@ UpdateQuery --> IteratePlatforms
IteratePlatforms --> |否| End(["结束"])
```
-图表来源
+**图表来源**
- [backend/app/workers/citation_engine.py:159-234](file://backend/app/workers/citation_engine.py#L159-L234)
-章节来源
+**章节来源**
- [backend/app/workers/citation_engine.py:19-100](file://backend/app/workers/citation_engine.py#L19-L100)
- [backend/app/workers/citation_engine.py:122-146](file://backend/app/workers/citation_engine.py#L122-L146)
- [backend/app/workers/citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
@@ -237,12 +261,12 @@ KimiAdapter --|> BasePlatformAdapter
WenxinAdapter --|> BasePlatformAdapter
```
-图表来源
+**图表来源**
- [backend/app/workers/platforms/base.py:4-18](file://backend/app/workers/platforms/base.py#L4-L18)
- [backend/app/workers/platforms/kimi.py:11-206](file://backend/app/workers/platforms/kimi.py#L11-L206)
- [backend/app/workers/platforms/wenxin.py:11-205](file://backend/app/workers/platforms/wenxin.py#L11-L205)
-章节来源
+**章节来源**
- [backend/app/workers/platforms/kimi.py:21-48](file://backend/app/workers/platforms/kimi.py#L21-L48)
- [backend/app/workers/platforms/kimi.py:126-197](file://backend/app/workers/platforms/kimi.py#L126-L197)
- [backend/app/workers/platforms/wenxin.py:21-48](file://backend/app/workers/platforms/wenxin.py#L21-L48)
@@ -250,17 +274,20 @@ WenxinAdapter --|> BasePlatformAdapter
### 数据模型与触发条件
- Query 模型包含用户外键、关键词、目标品牌、别名、平台列表、频率、状态与时间戳字段,并建立多处索引以优化查询。
-- 触发条件:调度器按每小时扫描 status='active' 且 next_query_at <= now() 的记录,确保只执行到期任务。
+- QueryTask 模型用于跟踪任务执行状态,包含 scheduled_at 字段用于标识任务计划执行时间。
+- 触发条件:调度器按每小时扫描 status='active' 且 next_query_at <= now() 的记录,按每分钟扫描 status='pending' 且 scheduled_at <= one_minute_ago 的遗留任务。
-章节来源
+**章节来源**
- [backend/app/models/query.py:11-55](file://backend/app/models/query.py#L11-L55)
+- [backend/app/models/query_task.py:11-38](file://backend/app/models/query_task.py#L11-L38)
- [backend/app/workers/scheduler.py:57-62](file://backend/app/workers/scheduler.py#L57-L62)
+- [backend/app/workers/scheduler.py:107-112](file://backend/app/workers/scheduler.py#L107-L112)
### 应用生命周期与手动触发
- 应用启动:lifespan 钩子在应用启动时调用 query_scheduler.start(),在关闭时调用 shutdown()。
- 手动触发:/api/v1/queries/{query_id}/run-now 接口调用服务层 trigger_query_now,将指定查询立即加入执行队列(由 CitationEngine 编排)。
-章节来源
+**章节来源**
- [backend/app/main.py:13-22](file://backend/app/main.py#L13-L22)
- [backend/app/api/citations.py:59-77](file://backend/app/api/citations.py#L59-L77)
- [backend/app/services/query.py:116-130](file://backend/app/services/query.py#L116-L130)
@@ -281,40 +308,43 @@ E --> D["AsyncSessionLocal"]
D --> M["Query/QueryTask/CitationRecord"]
```
-图表来源
+**图表来源**
- [backend/app/workers/scheduler.py:25-95](file://backend/app/workers/scheduler.py#L25-L95)
- [backend/app/workers/citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
- [backend/app/database.py:6-28](file://backend/app/database.py#L6-L28)
- [backend/app/models/query.py:11-55](file://backend/app/models/query.py#L11-L55)
-章节来源
+**章节来源**
- [backend/app/workers/scheduler.py:13-20](file://backend/app/workers/scheduler.py#L13-L20)
- [backend/app/workers/citation_engine.py:148-157](file://backend/app/workers/citation_engine.py#L148-L157)
- [backend/app/database.py:1-29](file://backend/app/database.py#L1-L29)
## 性能考虑
-- 触发器频率:默认每小时一次,可根据业务负载调整;过短可能导致数据库压力与平台限流风险。
-- 数据库索引:Query 模型已建立多处索引,建议结合 EXPLAIN 分析查询计划,避免全表扫描。
+- 触发器频率:默认每小时一次主检查,每分钟一次遗留任务检查,可根据业务负载调整;过短可能导致数据库压力与平台限流风险。
+- 数据库索引:Query 和 QueryTask 模型已建立多处索引,建议结合 EXPLAIN 分析查询计划,避免全表扫描。
- 异步并发:调度器在事件循环中调度异步任务,避免阻塞;平台适配器内部使用 Playwright,注意浏览器资源占用与并发上限。
- 重试与退避:平台适配器内置最多三次重试与指数退避,降低瞬时失败影响。
- 资源清理:关闭时调用 shutdown(wait=False) 与 CitationEngine.close(),确保浏览器与数据库连接及时释放。
+- 系统弹性:分钟级轮询机制提供冗余检查,确保即使主调度器出现问题,遗留任务也能得到处理。
-章节来源
+**章节来源**
- [backend/app/workers/scheduler.py:32-38](file://backend/app/workers/scheduler.py#L32-L38)
- [backend/app/models/query.py:50-54](file://backend/app/models/query.py#L50-L54)
+- [backend/app/models/query_task.py:36-38](file://backend/app/models/query_task.py#L36-L38)
- [backend/app/workers/platforms/kimi.py:33-48](file://backend/app/workers/platforms/kimi.py#L33-L48)
- [backend/app/workers/platforms/wenxin.py:33-48](file://backend/app/workers/platforms/wenxin.py#L33-L48)
- [backend/app/workers/citation_engine.py:302-309](file://backend/app/workers/citation_engine.py#L302-L309)
## 故障排查指南
- 调度器未启动:确认 lifespan 钩子已正确导入与调用 start()/shutdown()。
-- 无事件循环:_run_check() 已处理无运行中事件循环的情况,若仍报错,检查事件循环状态与线程模型。
+- 无事件循环:_run_check() 和 _run_pending_tasks_check() 已处理无运行中事件循环的情况,若仍报错,检查事件循环状态与线程模型。
- 数据库连接失败:检查 DATABASE_URL 配置与网络连通性。
- 平台适配器异常:Playwright 未安装或浏览器不可用时会抛出明确异常;按提示运行安装命令。
- 查询失败:CitationEngine 会在平台失败时记录错误并生成占位记录,便于后续重试与审计。
+- 遗留任务堆积:检查 QueryTask 表中 status='pending' 且 scheduled_at 超过1分钟的任务,确认主调度器是否正常工作。
- 资源泄漏:确保关闭流程调用 shutdown() 与 close(),避免浏览器与数据库连接泄露。
-章节来源
+**章节来源**
- [backend/app/main.py:13-22](file://backend/app/main.py#L13-L22)
- [backend/app/workers/scheduler.py:44-49](file://backend/app/workers/scheduler.py#L44-L49)
- [backend/app/config.py](file://backend/app/config.py#L7)
@@ -323,7 +353,7 @@ D --> M["Query/QueryTask/CitationRecord"]
- [backend/app/workers/citation_engine.py:211-227](file://backend/app/workers/citation_engine.py#L211-L227)
## 结论
-该调度器以 AsyncIOScheduler 为核心,结合 FastAPI 生命周期管理,实现了高可用、可扩展的定时查询任务体系。通过 CitationEngine 的平台编排与品牌匹配能力,以及平台适配器的稳定性保障,系统能够在异步环境下高效、可靠地执行跨平台查询任务。建议在生产环境关注触发频率、数据库索引与平台限流策略,并完善监控与告警机制。
+该调度器以 AsyncIOScheduler 为核心,结合 FastAPI 生命周期管理,实现了高可用、可扩展的定时查询任务体系。通过双重检查机制(每小时主检查 + 每分钟遗留任务检查),系统提供了更强的弹性与可靠性。通过 CitationEngine 的平台编排与品牌匹配能力,以及平台适配器的稳定性保障,系统能够在异步环境下高效、可靠地执行跨平台查询任务。建议在生产环境关注触发频率、数据库索引与平台限流策略,并完善监控与告警机制。
## 附录
- 配置参数
@@ -336,8 +366,9 @@ D --> M["Query/QueryTask/CitationRecord"]
- 手动触发:调用 /api/v1/queries/{query_id}/run-now 接口将查询立即加入执行队列。
- 错误隔离:平台失败不影响整体调度,CitationEngine 记录占位记录并继续处理其他任务。
- 性能调优:根据业务负载调整触发器频率、数据库索引与平台并发上限。
+ - 遗留任务处理:系统自动处理超过1分钟的遗留 pending 任务,确保任务最终被执行。
-章节来源
+**章节来源**
- [backend/app/config.py:4-16](file://backend/app/config.py#L4-L16)
- [backend/app/api/citations.py:59-77](file://backend/app/api/citations.py#L59-L77)
- [backend/app/workers/citation_engine.py:211-227](file://backend/app/workers/citation_engine.py#L211-L227)
\ No newline at end of file
diff --git a/.qoder/repowiki/zh/content/后端系统架构/引用检测引擎.md b/.qoder/repowiki/zh/content/后端系统架构/引用检测引擎.md
index 75c5ccc..1f04cf4 100644
--- a/.qoder/repowiki/zh/content/后端系统架构/引用检测引擎.md
+++ b/.qoder/repowiki/zh/content/后端系统架构/引用检测引擎.md
@@ -6,6 +6,12 @@
- [backend/app/workers/platforms/base.py](file://backend/app/workers/platforms/base.py)
- [backend/app/workers/platforms/kimi.py](file://backend/app/workers/platforms/kimi.py)
- [backend/app/workers/platforms/wenxin.py](file://backend/app/workers/platforms/wenxin.py)
+- [backend/app/workers/platforms/tongyi.py](file://backend/app/workers/platforms/tongyi.py)
+- [backend/app/workers/platforms/doubao.py](file://backend/app/workers/platforms/doubao.py)
+- [backend/app/workers/platforms/qingyan.py](file://backend/app/workers/platforms/qingyan.py)
+- [backend/app/workers/platforms/tiangong.py](file://backend/app/workers/platforms/tiangong.py)
+- [backend/app/workers/platforms/xinghuo.py](file://backend/app/workers/platforms/xinghuo.py)
+- [backend/app/workers/platforms/search_engine.py](file://backend/app/workers/platforms/search_engine.py)
- [backend/app/workers/scheduler.py](file://backend/app/workers/scheduler.py)
- [backend/app/services/citation.py](file://backend/app/services/citation.py)
- [backend/app/api/citations.py](file://backend/app/api/citations.py)
@@ -18,6 +24,14 @@
- [backend/requirements.txt](file://backend/requirements.txt)
+## 更新摘要
+**变更内容**
+- 新增7个搜索引擎适配器:通义千问、豆包、智谱清言、天工、讯飞星火
+- 改进错误处理机制,实现指数退避重试策略
+- 新增字符清理机制,防止PostgreSQL插入失败
+- 新增异步任务执行功能,支持立即查询执行
+- 优化搜索引擎模式,统一平台查询策略
+
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
@@ -31,7 +45,9 @@
10. [附录](#附录)
## 简介
-本技术文档面向“GEO引用检测引擎”,系统性阐述引用检测算法的实现原理与工程实践,涵盖文本预处理、品牌识别与上下文分析;详解BrandMatcher类的设计与实现(精确匹配、别名匹配、模糊匹配策略与正则规则);解析CompetitorDetector的竞争品牌识别机制(竞争关系定义、相似度计算与过滤规则);说明置信度评分体系(评分算法、阈值与结果排序);梳理异步处理与并发控制策略;并提供错误处理、日志记录与性能监控建议,以及与AI平台的集成接口与数据流转过程。
+本技术文档面向"GEO引用检测引擎",系统性阐述引用检测算法的实现原理与工程实践,涵盖文本预处理、品牌识别与上下文分析;详解BrandMatcher类的设计与实现(精确匹配、别名匹配、模糊匹配策略与正则规则);解析CompetitorDetector的竞争品牌识别机制(竞争关系定义、相似度计算与过滤规则);说明置信度评分体系(评分算法、阈值与结果排序);梳理异步处理与并发控制策略;并提供错误处理、日志记录与性能监控建议,以及与AI平台的集成接口与数据流转过程。
+
+**更新** 新增搜索引擎适配器支持,改进错误处理机制,新增异步任务执行功能。
## 项目结构
后端采用FastAPI + SQLAlchemy异步ORM + APScheduler定时任务的分层架构:
@@ -45,9 +61,11 @@
graph TB
subgraph "API层"
API_C["API: 引用数据
citations.py"]
+API_Q["API: 查询管理
queries.py"]
end
subgraph "服务层"
SVC["服务: 引用数据
services/citation.py"]
+SVC_Q["服务: 查询管理
services/query.py"]
end
subgraph "工作器层"
ENG["引擎: 引用检测
workers/citation_engine.py"]
@@ -55,6 +73,12 @@ SCH["调度器
workers/scheduler.py"]
ADP_BASE["适配器基类
workers/platforms/base.py"]
ADP_KIMI["适配器: Kimi
workers/platforms/kimi.py"]
ADP_WENXIN["适配器: 文心一言
workers/platforms/wenxin.py"]
+ADP_TONGYI["适配器: 通义千问
workers/platforms/tongyi.py"]
+ADP_DOUBAO["适配器: 豆包
workers/platforms/doubao.py"]
+ADP_QINGYAN["适配器: 智谱清言
workers/platforms/qingyan.py"]
+ADP_TIANGONG["适配器: 天工
workers/platforms/tiangong.py"]
+ADP_XINGHUO["适配器: 讯飞星火
workers/platforms/xinghuo.py"]
+SEARCH_ENGINE["搜索引擎模块
workers/platforms/search_engine.py"]
end
subgraph "模型层"
M_QUERY["模型: 查询
models/query.py"]
@@ -66,9 +90,17 @@ CFG["配置
config.py"]
MAIN["入口
main.py"]
end
API_C --> SVC
+API_Q --> SVC_Q
SVC --> ENG
+SVC_Q --> ENG
ENG --> ADP_KIMI
ENG --> ADP_WENXIN
+ENG --> ADP_TONGYI
+ENG --> ADP_DOUBAO
+ENG --> ADP_QINGYAN
+ENG --> ADP_TIANGONG
+ENG --> ADP_XINGHUO
+ENG --> SEARCH_ENGINE
SCH --> ENG
ENG --> M_CIT
SVC --> M_CIT
@@ -77,29 +109,40 @@ ENG --> M_QUERY
ENG --> M_TASK
MAIN --> SCH
MAIN --> API_C
+MAIN --> API_Q
CFG --> MAIN
```
-图表来源
+**图表来源**
- [backend/app/api/citations.py:1-78](file://backend/app/api/citations.py#L1-L78)
+- [backend/app/api/queries.py:90-108](file://backend/app/api/queries.py#L90-L108)
- [backend/app/services/citation.py:1-269](file://backend/app/services/citation.py#L1-L269)
-- [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309)
+- [backend/app/services/query.py:1-123](file://backend/app/services/query.py#L1-L123)
+- [backend/app/workers/citation_engine.py:1-330](file://backend/app/workers/citation_engine.py#L1-L330)
- [backend/app/workers/platforms/base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)
-- [backend/app/workers/platforms/kimi.py:1-206](file://backend/app/workers/platforms/kimi.py#L1-L206)
-- [backend/app/workers/platforms/wenxin.py:1-205](file://backend/app/workers/platforms/wenxin.py#L1-L205)
-- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
+- [backend/app/workers/platforms/kimi.py:1-37](file://backend/app/workers/platforms/kimi.py#L1-L37)
+- [backend/app/workers/platforms/wenxin.py:1-37](file://backend/app/workers/platforms/wenxin.py#L1-L37)
+- [backend/app/workers/platforms/tongyi.py:1-38](file://backend/app/workers/platforms/tongyi.py#L1-L38)
+- [backend/app/workers/platforms/doubao.py:1-38](file://backend/app/workers/platforms/doubao.py#L1-L38)
+- [backend/app/workers/platforms/qingyan.py:1-38](file://backend/app/workers/platforms/qingyan.py#L1-L38)
+- [backend/app/workers/platforms/tiangong.py:1-38](file://backend/app/workers/platforms/tiangong.py#L1-L38)
+- [backend/app/workers/platforms/xinghuo.py:1-38](file://backend/app/workers/platforms/xinghuo.py#L1-L38)
+- [backend/app/workers/platforms/search_engine.py:1-174](file://backend/app/workers/platforms/search_engine.py#L1-L174)
+- [backend/app/workers/scheduler.py:1-121](file://backend/app/workers/scheduler.py#L1-L121)
- [backend/app/models/query.py:1-55](file://backend/app/models/query.py#L1-L55)
- [backend/app/models/query_task.py:1-39](file://backend/app/models/query_task.py#L1-L39)
- [backend/app/models/citation_record.py:1-42](file://backend/app/models/citation_record.py#L1-L42)
- [backend/app/config.py:1-17](file://backend/app/config.py#L1-L17)
- [backend/app/main.py:1-48](file://backend/app/main.py#L1-L48)
-章节来源
+**章节来源**
- [backend/app/main.py:1-48](file://backend/app/main.py#L1-L48)
- [backend/app/api/citations.py:1-78](file://backend/app/api/citations.py#L1-L78)
+- [backend/app/api/queries.py:90-108](file://backend/app/api/queries.py#L90-L108)
- [backend/app/services/citation.py:1-269](file://backend/app/services/citation.py#L1-L269)
-- [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309)
-- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
+- [backend/app/services/query.py:1-123](file://backend/app/services/query.py#L1-L123)
+- [backend/app/workers/citation_engine.py:1-330](file://backend/app/workers/citation_engine.py#L1-L330)
+- [backend/app/workers/scheduler.py:1-121](file://backend/app/workers/scheduler.py#L1-L121)
- [backend/app/models/query.py:1-55](file://backend/app/models/query.py#L1-L55)
- [backend/app/models/query_task.py:1-39](file://backend/app/models/query_task.py#L1-L39)
- [backend/app/models/citation_record.py:1-42](file://backend/app/models/citation_record.py#L1-L42)
@@ -109,17 +152,24 @@ CFG --> MAIN
- 引用检测引擎:负责跨平台查询、品牌匹配、竞争品牌识别与结果落库
- 品牌匹配器BrandMatcher:精确匹配、别名匹配、模糊匹配三阶段策略
- 竞争品牌检测器CompetitorDetector:基于预定义品牌类别集合进行竞争关系识别
-- 平台适配器:Kimi与文心一言适配器,封装Playwright自动化查询流程
+- 平台适配器:Kimi、文心一言、通义千问、豆包、智谱清言、天工、讯飞星火适配器,封装Playwright自动化查询流程
+- 搜索引擎模块:提供DuckDuckGo和Wikipedia搜索功能,作为备用查询源
- 定时调度器:基于APScheduler的周期性任务调度
- 服务与API:提供查询历史、统计与立即执行能力
-章节来源
-- [backend/app/workers/citation_engine.py:19-309](file://backend/app/workers/citation_engine.py#L19-L309)
-- [backend/app/workers/platforms/kimi.py:1-206](file://backend/app/workers/platforms/kimi.py#L1-L206)
-- [backend/app/workers/platforms/wenxin.py:1-205](file://backend/app/workers/platforms/wenxin.py#L1-L205)
-- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
-- [backend/app/services/citation.py:1-269](file://backend/app/services/citation.py#L1-L269)
-- [backend/app/api/citations.py:1-78](file://backend/app/api/citations.py#L1-L78)
+**更新** 新增7个搜索引擎适配器,改进错误处理机制,新增异步任务执行功能。
+
+**章节来源**
+- [backend/app/workers/citation_engine.py:161-330](file://backend/app/workers/citation_engine.py#L161-L330)
+- [backend/app/workers/platforms/tongyi.py:1-38](file://backend/app/workers/platforms/tongyi.py#L1-L38)
+- [backend/app/workers/platforms/doubao.py:1-38](file://backend/app/workers/platforms/doubao.py#L1-L38)
+- [backend/app/workers/platforms/qingyan.py:1-38](file://backend/app/workers/platforms/qingyan.py#L1-L38)
+- [backend/app/workers/platforms/tiangong.py:1-38](file://backend/app/workers/platforms/tiangong.py#L1-L38)
+- [backend/app/workers/platforms/xinghuo.py:1-38](file://backend/app/workers/platforms/xinghuo.py#L1-L38)
+- [backend/app/workers/platforms/search_engine.py:1-174](file://backend/app/workers/platforms/search_engine.py#L1-L174)
+- [backend/app/workers/scheduler.py:1-121](file://backend/app/workers/scheduler.py#L1-L121)
+- [backend/app/services/citation.py:219-295](file://backend/app/services/citation.py#L219-L295)
+- [backend/app/api/queries.py:90-108](file://backend/app/api/queries.py#L90-L108)
## 架构总览
引擎通过API触发或定时调度器自动触发,调用平台适配器获取AI回复,随后由BrandMatcher进行品牌识别,CompetitorDetector识别竞争品牌,最终将结果写入数据库并返回。
@@ -131,6 +181,7 @@ participant API as "API : 引用数据"
participant Svc as "服务 : 引用数据"
participant Eng as "引擎 : 引用检测"
participant Plat as "平台适配器"
+participant Search as "搜索引擎模块"
participant DB as "数据库"
Client->>API : GET /api/v1/citations/stats
API->>Svc : 统计查询
@@ -144,6 +195,9 @@ Svc-->>API : 任务ID
API-->>Client : 202 Accepted
Note over Eng,DB : 定时调度器每小时检查到期查询
Eng->>Plat : query(keyword)
+Note over Plat,Search : 搜索引擎模式:通过fetch_search_content获取真实内容
+Plat->>Search : fetch_search_content(keyword)
+Search-->>Plat : 搜索结果摘要
Plat-->>Eng : 原始回复文本
Eng->>Eng : BrandMatcher.match(text)
Eng->>Eng : CompetitorDetector.detect(text, target)
@@ -151,12 +205,15 @@ Eng->>DB : 写入CitationRecord
DB-->>Eng : 确认
```
-图表来源
+**图表来源**
- [backend/app/api/citations.py:1-78](file://backend/app/api/citations.py#L1-L78)
-- [backend/app/services/citation.py:1-269](file://backend/app/services/citation.py#L1-L269)
-- [backend/app/workers/citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
-- [backend/app/workers/platforms/kimi.py:33-125](file://backend/app/workers/platforms/kimi.py#L33-L125)
-- [backend/app/workers/platforms/wenxin.py:33-123](file://backend/app/workers/platforms/wenxin.py#L33-L123)
+- [backend/app/api/queries.py:90-108](file://backend/app/api/queries.py#L90-L108)
+- [backend/app/services/citation.py:219-295](file://backend/app/services/citation.py#L219-L295)
+- [backend/app/workers/citation_engine.py:177-254](file://backend/app/workers/citation_engine.py#L177-L254)
+- [backend/app/workers/platforms/tongyi.py:16-33](file://backend/app/workers/platforms/tongyi.py#L16-L33)
+- [backend/app/workers/platforms/search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
+- [backend/app/workers/platforms/kimi.py:16-33](file://backend/app/workers/platforms/kimi.py#L16-L33)
+- [backend/app/workers/platforms/wenxin.py:16-33](file://backend/app/workers/platforms/wenxin.py#L16-L33)
- [backend/app/models/citation_record.py:1-42](file://backend/app/models/citation_record.py#L1-L42)
## 详细组件分析
@@ -191,12 +248,12 @@ Best --> |是| PosCtx3["提取段落位置与上下文"] --> RetFuzzy["返回模
Best --> |否| RetEmpty
```
-图表来源
-- [backend/app/workers/citation_engine.py:26-119](file://backend/app/workers/citation_engine.py#L26-L119)
+**图表来源**
+- [backend/app/workers/citation_engine.py:39-113](file://backend/app/workers/citation_engine.py#L39-L113)
-章节来源
-- [backend/app/workers/citation_engine.py:19-120](file://backend/app/workers/citation_engine.py#L19-L120)
-- [tests/test_citation_engine.py:6-54](file://tests/test_citation_engine.py#L6-L54)
+**章节来源**
+- [backend/app/workers/citation_engine.py:32-133](file://backend/app/workers/citation_engine.py#L32-L133)
+- [tests/test_citation_engine.py:6-127](file://tests/test_citation_engine.py#L6-L127)
### CompetitorDetector:竞争品牌检测器
- 设计要点
@@ -223,18 +280,19 @@ NextBrand --> LoopBrand
LoopBrand --> Done["排序并返回列表"]
```
-图表来源
-- [backend/app/workers/citation_engine.py:122-145](file://backend/app/workers/citation_engine.py#L122-L145)
+**图表来源**
+- [backend/app/workers/citation_engine.py:145-158](file://backend/app/workers/citation_engine.py#L145-L158)
-章节来源
-- [backend/app/workers/citation_engine.py:122-145](file://backend/app/workers/citation_engine.py#L122-L145)
-- [tests/test_citation_engine.py:39-45](file://tests/test_citation_engine.py#L39-L45)
+**章节来源**
+- [backend/app/workers/citation_engine.py:135-159](file://backend/app/workers/citation_engine.py#L135-L159)
+- [tests/test_citation_engine.py:39-109](file://tests/test_citation_engine.py#L39-L109)
### CitationEngine:引用检测引擎
- 职责
- 组织跨平台查询与检测流程
- 维护查询任务状态与时间字段
- 将结果持久化为引用记录
+ - 实施字符清理机制,防止数据库插入失败
- 关键流程
- 初始化平台适配器与匹配器
- 遍历平台列表,执行单平台查询与检测
@@ -243,6 +301,9 @@ LoopBrand --> Done["排序并返回列表"]
- 并发与异步
- 引擎方法为异步,平台适配器亦为异步
- 平台间顺序执行(当前实现),可扩展为并行执行以提升吞吐
+- 字符清理
+ - 新增`_sanitize_raw_response`函数,移除无效控制字符
+ - 防止PostgreSQL UTF-8插入失败
```mermaid
sequenceDiagram
@@ -255,27 +316,29 @@ participant R as "CitationRecord"
E->>E : 创建BrandMatcher(target, aliases)
loop 遍历平台
E->>P : query(keyword)
-P-->>E : 原始回复
-E->>M : match(raw_response)
+P-->>E : 原始回复文本
+E->>E : _sanitize_raw_response(raw_response)
+E->>M : match(sanitized_text)
M-->>E : 匹配结果
-E->>C : detect(raw_response, target)
+E->>C : detect(sanitized_text, target)
C-->>E : 竞争品牌
E->>R : 写入记录
end
E->>Q : 更新last_queried_at/next_query_at
```
-图表来源
-- [backend/app/workers/citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
+**图表来源**
+- [backend/app/workers/citation_engine.py:177-254](file://backend/app/workers/citation_engine.py#L177-L254)
-章节来源
-- [backend/app/workers/citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
+**章节来源**
+- [backend/app/workers/citation_engine.py:161-330](file://backend/app/workers/citation_engine.py#L161-L330)
-### 平台适配器:Kimi与文心一言
+### 平台适配器:Kimi、文心一言与新增搜索引擎适配器
- 抽象基类
- BasePlatformAdapter定义平台名称、URL与抽象query/close方法
- 具体实现
- - 启动Playwright与无头浏览器,导航至平台URL
+ - **传统适配器**(Kimi、文心一言):启动Playwright与无头浏览器,导航至平台URL
+ - **搜索引擎适配器**(通义千问、豆包、智谱清言、天工、讯飞星火):通过fetch_search_content获取真实内容
- 自动查找输入框、填充关键词、提交查询(回车或点击发送)
- 等待回复稳定(连续多次检测文本不变),返回最新回复
- 失败重试与指数退避,超时警告
@@ -283,6 +346,7 @@ E->>Q : 更新last_queried_at/next_query_at
- 错误处理
- 无法找到输入框、页面超时、最终失败抛出运行时异常
- 日志记录每次重试与最终失败原因
+ - 指数退避重试机制,最多3次尝试
```mermaid
classDiagram
@@ -304,25 +368,87 @@ class WenxinAdapter {
+query(keyword) str
+close() void
}
+class TongyiAdapter {
++platform_name = "tongyi"
++platform_url = "https : //tongyi.aliyun.com/qianwen"
++query(keyword) str
++close() void
+}
+class DoubaoAdapter {
++platform_name = "doubao"
++platform_url = "https : //www.doubao.com/"
++query(keyword) str
++close() void
+}
+class QingyanAdapter {
++platform_name = "qingyan"
++platform_url = "https : //chatglm.cn/"
++query(keyword) str
++close() void
+}
+class TiangongAdapter {
++platform_name = "tiangong"
++platform_url = "https : //www.tiangong.cn/"
++query(keyword) str
++close() void
+}
+class XinghuoAdapter {
++platform_name = "xinghuo"
++platform_url = "https : //xinghuo.xfyun.cn/"
++query(keyword) str
++close() void
+}
KimiAdapter --|> BasePlatformAdapter
WenxinAdapter --|> BasePlatformAdapter
+TongyiAdapter --|> BasePlatformAdapter
+DoubaoAdapter --|> BasePlatformAdapter
+QingyanAdapter --|> BasePlatformAdapter
+TiangongAdapter --|> BasePlatformAdapter
+XinghuoAdapter --|> BasePlatformAdapter
```
-图表来源
+**图表来源**
- [backend/app/workers/platforms/base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)
-- [backend/app/workers/platforms/kimi.py:1-206](file://backend/app/workers/platforms/kimi.py#L1-L206)
-- [backend/app/workers/platforms/wenxin.py:1-205](file://backend/app/workers/platforms/wenxin.py#L1-L205)
+- [backend/app/workers/platforms/kimi.py:1-37](file://backend/app/workers/platforms/kimi.py#L1-L37)
+- [backend/app/workers/platforms/wenxin.py:1-37](file://backend/app/workers/platforms/wenxin.py#L1-L37)
+- [backend/app/workers/platforms/tongyi.py:1-38](file://backend/app/workers/platforms/tongyi.py#L1-L38)
+- [backend/app/workers/platforms/doubao.py:1-38](file://backend/app/workers/platforms/doubao.py#L1-L38)
+- [backend/app/workers/platforms/qingyan.py:1-38](file://backend/app/workers/platforms/qingyan.py#L1-L38)
+- [backend/app/workers/platforms/tiangong.py:1-38](file://backend/app/workers/platforms/tiangong.py#L1-L38)
+- [backend/app/workers/platforms/xinghuo.py:1-38](file://backend/app/workers/platforms/xinghuo.py#L1-L38)
-章节来源
+**章节来源**
- [backend/app/workers/platforms/base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)
-- [backend/app/workers/platforms/kimi.py:1-206](file://backend/app/workers/platforms/kimi.py#L1-L206)
-- [backend/app/workers/platforms/wenxin.py:1-205](file://backend/app/workers/platforms/wenxin.py#L1-L205)
+- [backend/app/workers/platforms/kimi.py:1-37](file://backend/app/workers/platforms/kimi.py#L1-L37)
+- [backend/app/workers/platforms/wenxin.py:1-37](file://backend/app/workers/platforms/wenxin.py#L1-L37)
+- [backend/app/workers/platforms/tongyi.py:1-38](file://backend/app/workers/platforms/tongyi.py#L1-L38)
+- [backend/app/workers/platforms/doubao.py:1-38](file://backend/app/workers/platforms/doubao.py#L1-L38)
+- [backend/app/workers/platforms/qingyan.py:1-38](file://backend/app/workers/platforms/qingyan.py#L1-L38)
+- [backend/app/workers/platforms/tiangong.py:1-38](file://backend/app/workers/platforms/tiangong.py#L1-L38)
+- [backend/app/workers/platforms/xinghuo.py:1-38](file://backend/app/workers/platforms/xinghuo.py#L1-L38)
+
+### 搜索引擎模块:fetch_search_content
+- 功能
+ - 提供统一的搜索引擎接口,支持DuckDuckGo和Wikipedia搜索
+ - 作为备用查询源,当平台适配器无法正常工作时使用
+- 实现细节
+ - DuckDuckGo HTML搜索:无需API Key,自动回退到Wikipedia
+ - Wikipedia API搜索:稳定可靠,返回百科内容摘要
+ - HTML内容清理:去除标签和实体,保留可读文本
+ - 字符串清理:移除引用标记和多余空白
+- 错误处理
+ - 搜索失败时自动回退到Wikipedia
+ - 所有搜索源均失败时抛出运行时异常
+
+**章节来源**
+- [backend/app/workers/platforms/search_engine.py:1-174](file://backend/app/workers/platforms/search_engine.py#L1-L174)
### 定时调度器:QueryScheduler
- 职责
- 每小时扫描到期查询(status=active且next_query_at<=now)
- 逐条执行CitationEngine.execute_query
- 应用生命周期内启动与关闭
+ - 兜底检查:每分钟检查遗留的pending任务
- 并发控制
- 使用AsyncIOScheduler与事件循环
- 检查与执行过程均为异步,避免阻塞
@@ -330,17 +456,21 @@ WenxinAdapter --|> BasePlatformAdapter
```mermaid
flowchart TD
StartS(["启动调度器"]) --> AddJob["添加每小时任务"]
-AddJob --> Loop["每小时执行检查"]
+AddJob --> AddJob2["添加每分钟任务"]
+AddJob2 --> Loop["每小时执行检查"]
Loop --> Select["查询到期的Query"]
Select --> Exec["逐条执行execute_query"]
Exec --> Loop
+Loop --> PendingCheck["每分钟检查遗留任务"]
+PendingCheck --> ExecPending["执行遗留任务"]
+ExecPending --> Loop
```
-图表来源
-- [backend/app/workers/scheduler.py:25-95](file://backend/app/workers/scheduler.py#L25-L95)
+**图表来源**
+- [backend/app/workers/scheduler.py:33-121](file://backend/app/workers/scheduler.py#L33-L121)
-章节来源
-- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
+**章节来源**
+- [backend/app/workers/scheduler.py:1-121](file://backend/app/workers/scheduler.py#L1-L121)
- [backend/app/main.py:13-22](file://backend/app/main.py#L13-L22)
### 服务与API:引用数据与统计
@@ -352,6 +482,7 @@ Exec --> Loop
- 权限校验:仅允许用户访问自己的查询数据
- 统计聚合:使用SQL聚合函数计算各项指标
- CSV导出:按查询导出引用记录CSV
+ - 异步任务执行:使用asyncio.create_task后台执行查询
```mermaid
sequenceDiagram
@@ -371,15 +502,25 @@ Svc->>DB : 聚合统计
DB-->>Svc : 统计结果
Svc-->>API : 返回统计
API-->>Client : 响应
+Client->>API : POST /api/v1/queries/{id}/run-now
+API->>Svc : trigger_query_now
+Svc->>DB : 创建QueryTask
+Svc->>Svc : asyncio.create_task执行查询
+Svc-->>API : 202 Accepted + task_id
+API-->>Client : 响应
```
-图表来源
+**图表来源**
- [backend/app/api/citations.py:1-78](file://backend/app/api/citations.py#L1-L78)
-- [backend/app/services/citation.py:24-269](file://backend/app/services/citation.py#L24-L269)
+- [backend/app/api/queries.py:90-108](file://backend/app/api/queries.py#L90-L108)
+- [backend/app/services/citation.py:219-295](file://backend/app/services/citation.py#L219-L295)
+- [backend/app/services/citation.py:264-295](file://backend/app/services/citation.py#L264-L295)
-章节来源
+**章节来源**
- [backend/app/api/citations.py:1-78](file://backend/app/api/citations.py#L1-L78)
+- [backend/app/api/queries.py:90-108](file://backend/app/api/queries.py#L90-L108)
- [backend/app/services/citation.py:1-269](file://backend/app/services/citation.py#L1-L269)
+- [backend/app/services/query.py:1-123](file://backend/app/services/query.py#L1-L123)
### 数据模型:查询、任务与引用记录
- Query:查询词、目标品牌、别名、平台、频率、状态与时间字段
@@ -425,12 +566,12 @@ QUERIES ||--o{ QUERY_TASKS : "包含"
QUERIES ||--o{ CITATION_RECORDS : "包含"
```
-图表来源
+**图表来源**
- [backend/app/models/query.py:1-55](file://backend/app/models/query.py#L1-L55)
- [backend/app/models/query_task.py:1-39](file://backend/app/models/query_task.py#L1-L39)
- [backend/app/models/citation_record.py:1-42](file://backend/app/models/citation_record.py#L1-L42)
-章节来源
+**章节来源**
- [backend/app/models/query.py:1-55](file://backend/app/models/query.py#L1-L55)
- [backend/app/models/query_task.py:1-39](file://backend/app/models/query_task.py#L1-L39)
- [backend/app/models/citation_record.py:1-42](file://backend/app/models/citation_record.py#L1-L42)
@@ -441,6 +582,7 @@ QUERIES ||--o{ CITATION_RECORDS : "包含"
- ORM与迁移:SQLAlchemy、Alembic
- 任务调度:APScheduler
- 浏览器自动化:Playwright
+ - HTTP客户端:httpx
- 缓存:Redis(配置项存在)
- 配置:pydantic-settings
- 内部模块耦合
@@ -455,26 +597,41 @@ API --> Service
Service --> Engine
Engine --> AdapterBase
Engine --> Models
+Engine --> SearchEngine
Scheduler --> Engine
AdapterKimi --> AdapterBase
AdapterWenxin --> AdapterBase
+AdapterTongyi --> AdapterBase
+AdapterDoubao --> AdapterBase
+AdapterQingyan --> AdapterBase
+AdapterTiangong --> AdapterBase
+AdapterXinghuo --> AdapterBase
+SearchEngine --> Engine
Config --> Main
Main --> Scheduler
Main --> API
```
-图表来源
+**图表来源**
- [backend/requirements.txt:1-35](file://backend/requirements.txt#L1-L35)
- [backend/app/main.py:1-48](file://backend/app/main.py#L1-L48)
- [backend/app/api/citations.py:1-78](file://backend/app/api/citations.py#L1-L78)
+- [backend/app/api/queries.py:90-108](file://backend/app/api/queries.py#L90-L108)
- [backend/app/services/citation.py:1-269](file://backend/app/services/citation.py#L1-L269)
-- [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309)
+- [backend/app/services/query.py:1-123](file://backend/app/services/query.py#L1-L123)
+- [backend/app/workers/citation_engine.py:1-330](file://backend/app/workers/citation_engine.py#L1-L330)
- [backend/app/workers/platforms/base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)
-- [backend/app/workers/platforms/kimi.py:1-206](file://backend/app/workers/platforms/kimi.py#L1-L206)
-- [backend/app/workers/platforms/wenxin.py:1-205](file://backend/app/workers/platforms/wenxin.py#L1-L205)
+- [backend/app/workers/platforms/kimi.py:1-37](file://backend/app/workers/platforms/kimi.py#L1-L37)
+- [backend/app/workers/platforms/wenxin.py:1-37](file://backend/app/workers/platforms/wenxin.py#L1-L37)
+- [backend/app/workers/platforms/tongyi.py:1-38](file://backend/app/workers/platforms/tongyi.py#L1-L38)
+- [backend/app/workers/platforms/doubao.py:1-38](file://backend/app/workers/platforms/doubao.py#L1-L38)
+- [backend/app/workers/platforms/qingyan.py:1-38](file://backend/app/workers/platforms/qingyan.py#L1-L38)
+- [backend/app/workers/platforms/tiangong.py:1-38](file://backend/app/workers/platforms/tiangong.py#L1-L38)
+- [backend/app/workers/platforms/xinghuo.py:1-38](file://backend/app/workers/platforms/xinghuo.py#L1-L38)
+- [backend/app/workers/platforms/search_engine.py:1-174](file://backend/app/workers/platforms/search_engine.py#L1-L174)
- [backend/app/config.py:1-17](file://backend/app/config.py#L1-L17)
-章节来源
+**章节来源**
- [backend/requirements.txt:1-35](file://backend/requirements.txt#L1-L35)
- [backend/app/main.py:1-48](file://backend/app/main.py#L1-L48)
@@ -485,13 +642,14 @@ Main --> API
- 平台适配器
- Playwright初始化成本较高,适配器内部维护浏览器实例,避免重复启动
- 等待回复稳定的轮询间隔与超时可按平台特性微调
+ - **新增** 搜索引擎适配器避免了浏览器自动化成本,提升了整体性能
- 引擎与调度
- 当前平台遍历为串行,可扩展为并发执行以提升吞吐(注意平台限流与稳定性)
- 定时任务每小时检查一次,可根据业务需要调整频率
+ - **新增** 异步任务执行机制,使用asyncio.create_task提升响应速度
- 数据库
- 引用记录、查询与任务均建立索引,统计查询使用聚合函数,建议定期分析与更新统计信息
-
-[本节为通用性能建议,无需特定文件来源]
+ - **新增** 字符清理机制,避免无效字符导致的数据库插入失败
## 故障排查指南
- 浏览器与Playwright
@@ -502,25 +660,39 @@ Main --> API
- 现象:找不到输入框、页面超时
- 处理:检查平台页面结构变化,适配器内置多选择器与超时重试,必要时调整选择器或等待策略
- 相关路径:[backend/app/workers/platforms/kimi.py:67-88](file://backend/app/workers/platforms/kimi.py#L67-L88)、[backend/app/workers/platforms/wenxin.py:67-87](file://backend/app/workers/platforms/wenxin.py#L67-L87)
+- **新增** 搜索引擎适配器故障
+ - 现象:DuckDuckGo搜索失败
+ - 处理:自动回退到Wikipedia搜索,检查网络连接和API可用性
+ - 相关路径:[backend/app/workers/platforms/search_engine.py:139-144](file://backend/app/workers/platforms/search_engine.py#L139-L144)
+- **新增** 指数退避重试机制
+ - 现象:平台查询不稳定
+ - 处理:检查日志中的重试记录,确认指数退避是否正常工作
+ - 相关路径:[backend/app/workers/platforms/tongyi.py:18-29](file://backend/app/workers/platforms/tongyi.py#L18-L29)、[backend/app/workers/platforms/doubao.py:18-29](file://backend/app/workers/platforms/doubao.py#L18-L29)
+- **新增** 字符清理问题
+ - 现象:数据库插入失败,提示UTF-8编码错误
+ - 处理:检查`_sanitize_raw_response`函数是否正确清理无效字符
+ - 相关路径:[backend/app/workers/citation_engine.py:11-16](file://backend/app/workers/citation_engine.py#L11-L16)
- 引擎执行异常
- 现象:平台查询失败,记录失败状态与错误信息
- 处理:查看任务表中的错误信息,确认平台可用性与网络状况
- - 相关路径:[backend/app/workers/citation_engine.py:211-227](file://backend/app/workers/citation_engine.py#L211-L227)
+ - 相关路径:[backend/app/workers/citation_engine.py:231-247](file://backend/app/workers/citation_engine.py#L231-L247)
- API权限与参数
- 现象:查询不到数据或返回空
- 处理:确认查询ID归属当前用户,参数范围合理
- 相关路径:[backend/app/services/citation.py:14-42](file://backend/app/services/citation.py#L14-L42)
-章节来源
+**章节来源**
- [backend/app/workers/platforms/kimi.py:21-32](file://backend/app/workers/platforms/kimi.py#L21-L32)
- [backend/app/workers/platforms/wenxin.py:21-32](file://backend/app/workers/platforms/wenxin.py#L21-L32)
-- [backend/app/workers/citation_engine.py:211-227](file://backend/app/workers/citation_engine.py#L211-L227)
+- [backend/app/workers/platforms/search_engine.py:139-144](file://backend/app/workers/platforms/search_engine.py#L139-L144)
+- [backend/app/workers/platforms/tongyi.py:18-29](file://backend/app/workers/platforms/tongyi.py#L18-L29)
+- [backend/app/workers/platforms/doubao.py:18-29](file://backend/app/workers/platforms/doubao.py#L18-L29)
+- [backend/app/workers/citation_engine.py:11-16](file://backend/app/workers/citation_engine.py#L11-L16)
+- [backend/app/workers/citation_engine.py:231-247](file://backend/app/workers/citation_engine.py#L231-L247)
- [backend/app/services/citation.py:14-42](file://backend/app/services/citation.py#L14-L42)
## 结论
-该引擎以清晰的分层设计实现了从AI平台抓取、品牌识别、竞争品牌检测到结果落库与统计展示的完整链路。BrandMatcher与CompetitorDetector提供了稳健的文本处理与识别能力,平台适配器封装了复杂的浏览器自动化流程,调度器保障了周期性任务的可靠执行。建议后续在并发执行、阈值调优与平台扩展方面持续优化。
-
-[本节为总结性内容,无需特定文件来源]
+该引擎以清晰的分层设计实现了从AI平台抓取、品牌识别、竞争品牌检测到结果落库与统计展示的完整链路。BrandMatcher与CompetitorDetector提供了稳健的文本处理与识别能力,平台适配器封装了复杂的浏览器自动化流程,搜索引擎适配器提供了更稳定的替代方案,调度器保障了周期性任务的可靠执行。**新增**的异步任务执行机制和字符清理机制进一步提升了系统的稳定性和性能。建议后续在并发执行、阈值调优与平台扩展方面持续优化。
## 附录
@@ -530,39 +702,49 @@ Main --> API
- 对候选词进行词干化或拼音首字母预处理,减少误判
- 并发与限流
- 平台查询改为并发执行,并引入令牌桶限流防止被封禁
+ - **新增** 搜索引擎适配器天然支持并发,可优先考虑使用
- 缓存与降噪
- 对热点关键词与平台响应进行缓存,降低重复请求
- 上下文截取长度可动态调整,兼顾性能与准确性
-
-[本节为通用优化建议,无需特定文件来源]
+ - **新增** 字符清理机制可进一步优化,减少无效字符传输
### 自定义扩展指南
- 新增平台适配器
- 继承BasePlatformAdapter,实现query与close方法
- 在CitationEngine中注册平台映射
- - 参考路径:[backend/app/workers/platforms/base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)、[backend/app/workers/citation_engine.py:152-155](file://backend/app/workers/citation_engine.py#L152-L155)
+ - **新增** 可选择实现搜索引擎模式或传统浏览器自动化模式
+ - 参考路径:[backend/app/workers/platforms/base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)、[backend/app/workers/citation_engine.py:165-173](file://backend/app/workers/citation_engine.py#L165-L173)
- 调整匹配策略
- 修改BrandMatcher的阈值、候选词提取规则或上下文截取长度
- - 参考路径:[backend/app/workers/citation_engine.py:68-92](file://backend/app/workers/citation_engine.py#L68-L92)、[backend/app/workers/citation_engine.py:102-119](file://backend/app/workers/citation_engine.py#L102-L119)
+ - 参考路径:[backend/app/workers/citation_engine.py:115-132](file://backend/app/workers/citation_engine.py#L115-L132)、[backend/app/workers/citation_engine.py:120-132](file://backend/app/workers/citation_engine.py#L120-L132)
- 竞争品牌库扩展
- 在CompetitorDetector中增加新的行业类别与品牌集合
- - 参考路径:[backend/app/workers/citation_engine.py:125-130](file://backend/app/workers/citation_engine.py#L125-L130)
-
-[本节为扩展性指导,无需特定文件来源]
+ - 参考路径:[backend/app/workers/citation_engine.py:139-143](file://backend/app/workers/citation_engine.py#L139-L143)
+- **新增** 搜索引擎模块扩展
+ - 在search_engine.py中添加新的搜索源
+ - 实现相应的清理和格式化函数
+ - 参考路径:[backend/app/workers/platforms/search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
### 与AI平台的集成接口与数据流转
- 接口职责
- 平台适配器:统一query接口,屏蔽平台差异
- 引擎:组织流程、落库、异常处理
- API/服务:对外提供查询与统计能力
+ - **新增** 搜索引擎模块:提供备用查询源
- 数据流
- - 用户发起查询 → API/服务 → 引擎 → 平台适配器 → AI平台 → 引擎 → 数据库 → API/服务 → 前端展示
+ - 用户发起查询 → API/服务 → 引擎 → 平台适配器 → AI平台/搜索引擎 → 引擎 → 数据库 → API/服务 → 前端展示
+ - **新增** 搜索引擎模式:通过fetch_search_content获取真实内容
- 监控与日志
- 平台适配器与引擎均包含日志记录,便于追踪失败原因与性能瓶颈
- - 参考路径:[backend/app/workers/platforms/kimi.py:4-8](file://backend/app/workers/platforms/kimi.py#L4-L8)、[backend/app/workers/platforms/wenxin.py:4-8](file://backend/app/workers/platforms/wenxin.py#L4-L8)、[backend/app/workers/citation_engine.py:16-16](file://backend/app/workers/citation_engine.py#L16-L16)
+ - **新增** 指数退避重试机制,支持自动故障恢复
+ - **新增** 字符清理机制,确保数据质量
+ - 参考路径:[backend/app/workers/platforms/tongyi.py:16-33](file://backend/app/workers/platforms/tongyi.py#L16-L33)、[backend/app/workers/platforms/search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)、[backend/app/workers/citation_engine.py:11-16](file://backend/app/workers/citation_engine.py#L11-L16)
-章节来源
+**章节来源**
- [backend/app/workers/platforms/base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)
-- [backend/app/workers/citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
+- [backend/app/workers/citation_engine.py:161-330](file://backend/app/workers/citation_engine.py#L161-L330)
- [backend/app/api/citations.py:1-78](file://backend/app/api/citations.py#L1-L78)
-- [backend/app/services/citation.py:1-269](file://backend/app/services/citation.py#L1-L269)
\ No newline at end of file
+- [backend/app/api/queries.py:90-108](file://backend/app/api/queries.py#L90-L108)
+- [backend/app/services/citation.py:1-269](file://backend/app/services/citation.py#L1-L269)
+- [backend/app/services/query.py:1-123](file://backend/app/services/query.py#L1-L123)
+- [backend/app/workers/platforms/search_engine.py:1-174](file://backend/app/workers/platforms/search_engine.py#L1-L174)
\ No newline at end of file
diff --git a/.qoder/repowiki/zh/content/数据库设计/数据库设计.md b/.qoder/repowiki/zh/content/数据库设计/数据库设计.md
index 86bc2bc..f4aa636 100644
--- a/.qoder/repowiki/zh/content/数据库设计/数据库设计.md
+++ b/.qoder/repowiki/zh/content/数据库设计/数据库设计.md
@@ -11,13 +11,24 @@
- [backend/app/models/__init__.py](file://backend/app/models/__init__.py)
- [backend/alembic/env.py](file://backend/alembic/env.py)
- [backend/alembic/versions/488d0bd5ab01_initial_migration.py](file://backend/alembic/versions/488d0bd5ab01_initial_migration.py)
+- [backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py](file://backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py)
- [backend/alembic.ini](file://backend/alembic.ini)
- [backend/app/config.py](file://backend/app/config.py)
- [docker-compose.yml](file://docker-compose.yml)
- [backend/app/services/query.py](file://backend/app/services/query.py)
- [backend/app/services/citation.py](file://backend/app/services/citation.py)
+- [backend/app/schemas/citation.py](file://backend/app/schemas/citation.py)
+- [backend/app/api/citations.py](file://backend/app/api/citations.py)
+- [backend/app/api/reports.py](file://backend/app/api/reports.py)
+## 更新摘要
+**变更内容**
+- 新增数据库迁移版本,添加confidence和match_type字段到citation_records表
+- 更新CitationRecord模型以支持新的字段定义
+- 增强报告功能,支持匹配置信度和匹配类型的统计分析
+- 更新CSV导出功能,包含新的字段输出
+
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
@@ -54,6 +65,8 @@ graph TB
subgraph "应用层"
SvcQ["服务: 查询
backend/app/services/query.py"]
SvcC["服务: 引用
backend/app/services/citation.py"]
+API["API: 引用
backend/app/api/citations.py"]
+Reports["API: 报告
backend/app/api/reports.py"]
end
subgraph "ORM 层"
MUser["模型: 用户
backend/app/models/user.py"]
@@ -73,6 +86,8 @@ Cfg --> Eng
Eng --> DB
SvcQ --> Eng
SvcC --> Eng
+API --> SvcC
+Reports --> SvcC
MUser --> Eng
MQuery --> Eng
MCit --> Eng
@@ -88,7 +103,7 @@ SvcC --> RD
- [backend/app/database.py:1-29](file://backend/app/database.py#L1-L29)
- [backend/app/models/user.py:1-41](file://backend/app/models/user.py#L1-L41)
- [backend/app/models/query.py:1-55](file://backend/app/models/query.py#L1-L55)
-- [backend/app/models/citation_record.py:1-42](file://backend/app/models/citation_record.py#L1-L42)
+- [backend/app/models/citation_record.py:1-44](file://backend/app/models/citation_record.py#L1-L44)
- [backend/app/models/query_task.py:1-39](file://backend/app/models/query_task.py#L1-L39)
- [backend/app/models/subscription.py:1-37](file://backend/app/models/subscription.py#L1-L37)
- [backend/alembic/env.py:1-89](file://backend/alembic/env.py#L1-L89)
@@ -110,6 +125,7 @@ SvcC --> RD
- 迁移与版本控制
- Alembic 环境集成 SQLAlchemy Base 元数据,支持离线/在线迁移。
- 初始迁移脚本定义了用户、查询、引用记录、查询任务、订阅五张表及必要索引。
+ - 新增迁移版本支持confidence和match_type字段,增强报告功能。
- 服务层封装
- 查询与引用统计、导出等业务逻辑封装在服务层,统一执行 SQL 并返回结果。
- 对外暴露清晰的查询接口,内部进行权限校验与计数限制。
@@ -118,8 +134,9 @@ SvcC --> RD
- [backend/app/database.py:1-29](file://backend/app/database.py#L1-L29)
- [backend/app/models/__init__.py:1-14](file://backend/app/models/__init__.py#L1-L14)
- [backend/alembic/versions/488d0bd5ab01_initial_migration.py:1-128](file://backend/alembic/versions/488d0bd5ab01_initial_migration.py#L1-L128)
+- [backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py:1-37](file://backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py#L1-L37)
- [backend/app/services/query.py:1-130](file://backend/app/services/query.py#L1-L130)
-- [backend/app/services/citation.py:1-269](file://backend/app/services/citation.py#L1-L269)
+- [backend/app/services/citation.py:1-429](file://backend/app/services/citation.py#L1-L429)
## 架构总览
下图展示数据库层与应用层的交互关系,以及迁移与容器编排对数据库的影响。
@@ -128,26 +145,25 @@ SvcC --> RD
sequenceDiagram
participant Client as "客户端"
participant API as "FastAPI 应用"
-participant SvcQ as "查询服务"
participant SvcC as "引用服务"
+participant Reports as "报告服务"
participant DB as "PostgreSQL"
participant Alembic as "迁移工具"
-Client->>API : 请求 /queries 或 /citations
-API->>SvcQ : 调用查询服务
-SvcQ->>DB : 执行查询/计数/插入
+Client->>API : 请求 /citations 或 /reports
API->>SvcC : 调用引用服务
-SvcC->>DB : 执行 JOIN 统计/导出
-DB-->>SvcC : 返回统计结果
-DB-->>SvcQ : 返回查询结果
-SvcC-->>API : 返回 CSV/统计
-SvcQ-->>API : 返回查询列表/详情
+SvcC->>DB : 执行查询/统计/插入
+API->>Reports : 调用报告服务
+Reports->>DB : 执行导出查询
+DB-->>Reports : 返回统计数据
+DB-->>SvcC : 返回引用记录
+Reports-->>API : 返回CSV内容
+SvcC-->>API : 返回查询列表/详情
API-->>Client : 响应数据
Note over Alembic,DB : 首次启动或升级时执行迁移
```
图表来源
-- [backend/app/services/query.py:1-130](file://backend/app/services/query.py#L1-L130)
-- [backend/app/services/citation.py:1-269](file://backend/app/services/citation.py#L1-L269)
+- [backend/app/services/citation.py:1-429](file://backend/app/services/citation.py#L1-L429)
- [backend/alembic/env.py:1-89](file://backend/alembic/env.py#L1-L89)
## 详细组件分析
@@ -155,10 +171,12 @@ Note over Alembic,DB : 首次启动或升级时执行迁移
### 实体关系映射(ER)
- 用户(users):主键 id,唯一邮箱,计划与配额字段,活跃状态,时间戳。
- 查询(queries):外键 user_id,关键词、目标品牌、别名列表、平台列表、频率、状态、下次查询时间,时间戳。
-- 引用记录(citation_records):外键 query_id,平台、是否引用、引用位置、引用文本、竞争品牌列表、原始响应、查询时间。
+- 引用记录(citation_records):外键 query_id,平台、是否引用、引用位置、引用文本、竞争品牌列表、原始响应、匹配置信度、匹配类型、查询时间。
- 查询任务(query_tasks):外键 query_id,平台、状态、错误信息、调度/开始/完成时间。
- 订阅(subscriptions):外键 user_id,计划、状态、起止日期、金额、支付方式与流水号,时间戳。
+**更新** 新增confidence和match_type字段到引用记录表,支持增强的报告功能。
+
```mermaid
erDiagram
USERS {
@@ -195,6 +213,8 @@ integer citation_position
text citation_text
jsonb competitor_brands
text raw_response
+float confidence
+string match_type
timestamptz queried_at
}
QUERY_TASKS {
@@ -228,14 +248,14 @@ USERS ||--o{ SUBSCRIPTIONS : "订阅"
图表来源
- [backend/app/models/user.py:1-41](file://backend/app/models/user.py#L1-L41)
- [backend/app/models/query.py:1-55](file://backend/app/models/query.py#L1-L55)
-- [backend/app/models/citation_record.py:1-42](file://backend/app/models/citation_record.py#L1-L42)
+- [backend/app/models/citation_record.py:1-44](file://backend/app/models/citation_record.py#L1-L44)
- [backend/app/models/query_task.py:1-39](file://backend/app/models/query_task.py#L1-L39)
- [backend/app/models/subscription.py:1-37](file://backend/app/models/subscription.py#L1-L37)
章节来源
- [backend/app/models/user.py:1-41](file://backend/app/models/user.py#L1-L41)
- [backend/app/models/query.py:1-55](file://backend/app/models/query.py#L1-L55)
-- [backend/app/models/citation_record.py:1-42](file://backend/app/models/citation_record.py#L1-L42)
+- [backend/app/models/citation_record.py:1-44](file://backend/app/models/citation_record.py#L1-L44)
- [backend/app/models/query_task.py:1-39](file://backend/app/models/query_task.py#L1-L39)
- [backend/app/models/subscription.py:1-37](file://backend/app/models/subscription.py#L1-L37)
@@ -248,21 +268,26 @@ USERS ||--o{ SUBSCRIPTIONS : "订阅"
- idx_citation_records_query_id:按查询聚合
- idx_citation_records_queried_at:按时间排序/范围
- idx_citation_records_platform:按平台统计
-- 查询任务表(query_tasks)
- - idx_query_tasks_status:按状态调度
+ - **新增** idx_citation_records_confidence:按匹配置信度过滤(建议)
+ - **新增** idx_citation_records_match_type:按匹配类型过滤(建议)
+
+**更新** 新增针对confidence和match_type字段的索引建议,支持更精细的查询过滤。
这些索引覆盖了常见查询路径与统计场景,有助于提升分页、过滤、排序与聚合的性能。
章节来源
- [backend/alembic/versions/488d0bd5ab01_initial_migration.py:57-94](file://backend/alembic/versions/488d0bd5ab01_initial_migration.py#L57-L94)
+- [backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py:21-37](file://backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py#L21-L37)
- [backend/app/models/query.py:50-54](file://backend/app/models/query.py#L50-L54)
-- [backend/app/models/citation_record.py:37-41](file://backend/app/models/citation_record.py#L37-L41)
+- [backend/app/models/citation_record.py:37-44](file://backend/app/models/citation_record.py#L37-L44)
- [backend/app/models/query_task.py:36-38](file://backend/app/models/query_task.py#L36-L38)
### SQLAlchemy ORM 模型实现
- 字段类型与默认值
- UUID 主键与外键,JSONB 存储数组/字典,布尔、整数、文本、数值、时间戳等。
- 默认值通过 server_default/onupdate 设置,减少应用层重复逻辑。
+ - **新增** confidence字段(Float类型,nullable=True)用于存储匹配的可信度评分。
+ - **新增** match_type字段(String类型,长度20,nullable=True)用于标识匹配类型。
- 关系配置
- 用户与查询、订阅为一对多;查询与引用记录、任务为一对多。
- 级联删除与孤儿对象清理(delete-orphan),避免悬挂数据。
@@ -270,6 +295,8 @@ USERS ||--o{ SUBSCRIPTIONS : "订阅"
- 服务层使用 select + func + join 封装复杂查询,统一处理分页与计数。
- 权限校验:仅允许访问当前用户的资源,防止越权。
+**更新** CitationRecord模型新增confidence和match_type字段定义,支持增强的报告功能。
+
```mermaid
classDiagram
class User {
@@ -311,6 +338,8 @@ class CitationRecord {
+citation_text : text
+competitor_brands : list
+raw_response : text
++confidence : float
++match_type : string
+queried_at : datetime
+query
}
@@ -347,14 +376,14 @@ User "1" <-- "many" Subscription : "订阅"
图表来源
- [backend/app/models/user.py:11-41](file://backend/app/models/user.py#L11-L41)
- [backend/app/models/query.py:11-48](file://backend/app/models/query.py#L11-L48)
-- [backend/app/models/citation_record.py:11-35](file://backend/app/models/citation_record.py#L11-L35)
+- [backend/app/models/citation_record.py:11-44](file://backend/app/models/citation_record.py#L11-L44)
- [backend/app/models/query_task.py:11-34](file://backend/app/models/query_task.py#L11-L34)
- [backend/app/models/subscription.py:11-36](file://backend/app/models/subscription.py#L11-L36)
章节来源
- [backend/app/models/user.py:1-41](file://backend/app/models/user.py#L1-L41)
- [backend/app/models/query.py:1-55](file://backend/app/models/query.py#L1-L55)
-- [backend/app/models/citation_record.py:1-42](file://backend/app/models/citation_record.py#L1-L42)
+- [backend/app/models/citation_record.py:1-44](file://backend/app/models/citation_record.py#L1-L44)
- [backend/app/models/query_task.py:1-39](file://backend/app/models/query_task.py#L1-L39)
- [backend/app/models/subscription.py:1-37](file://backend/app/models/subscription.py#L1-L37)
@@ -362,13 +391,16 @@ User "1" <-- "many" Subscription : "订阅"
- 迁移入口
- Alembic 环境加载 Base 元数据,支持离线/在线迁移。
- 在线迁移通过异步引擎连接数据库,避免阻塞。
-- 初始迁移
- - 创建 users、queries、citation_records、query_tasks、subscriptions 表,并建立必要索引。
+- 迁移版本
+ - **初始版本** (488d0bd5ab01):创建 users、queries、citation_records、query_tasks、subscriptions 表,并建立必要索引。
+ - **新增版本** (b2c4d6e8fa10):向 citation_records 表添加 confidence 和 match_type 字段,支持增强的报告功能。
- 外键约束与级联删除策略明确,确保数据一致性。
- 部署策略
- Docker Compose 启动 PostgreSQL 与 Redis,应用容器依赖数据库健康检查。
- 生产环境建议将数据库与缓存分离,使用独立卷持久化数据。
+**更新** 新增b2c4d6e8fa10迁移版本,支持confidence和match_type字段的添加。
+
```mermaid
flowchart TD
Start(["开始"]) --> CheckEnv["检查 DATABASE_URL"]
@@ -378,17 +410,23 @@ Mode --> |离线| Offline["配置 URL 与元数据"]
Mode --> |在线| Online["创建异步引擎并连接"]
Offline --> RunMigs["执行迁移"]
Online --> RunMigs
-RunMigs --> Done(["完成"])
+RunMigs --> Version{"检查版本"}
+Version --> |488d0bd5ab01| InitMigration["初始迁移"]
+Version --> |b2c4d6e8fa10| AddFields["添加新字段"]
+InitMigration --> Done(["完成"])
+AddFields --> Done
```
图表来源
- [backend/alembic/env.py:33-88](file://backend/alembic/env.py#L33-L88)
- [backend/alembic/versions/488d0bd5ab01_initial_migration.py:21-128](file://backend/alembic/versions/488d0bd5ab01_initial_migration.py#L21-L128)
+- [backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py:21-37](file://backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py#L21-L37)
- [docker-compose.yml:1-71](file://docker-compose.yml#L1-L71)
章节来源
- [backend/alembic/env.py:1-89](file://backend/alembic/env.py#L1-L89)
- [backend/alembic/versions/488d0bd5ab01_initial_migration.py:1-128](file://backend/alembic/versions/488d0bd5ab01_initial_migration.py#L1-L128)
+- [backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py:1-37](file://backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py#L1-L37)
- [docker-compose.yml:1-71](file://docker-compose.yml#L1-L71)
### 数据完整性约束、事务处理与并发控制
@@ -396,6 +434,7 @@ RunMigs --> Done(["完成"])
- 唯一约束:用户邮箱唯一
- 外键约束:查询、任务、订阅均对用户做级联删除
- JSONB 字段默认值:空数组/字典,避免 NULL 导致的条件判断复杂化
+ - **新增** confidence字段允许NULL值,match_type字段限制长度为20字符
- 事务处理
- 服务层方法在单个事务内执行插入/更新/删除,提交后刷新对象状态
- 会话工厂设置 expire_on_commit=False,减少后续查询的额外开销
@@ -403,8 +442,11 @@ RunMigs --> Done(["完成"])
- 异步连接池与会话隔离,避免阻塞
- 服务层在执行前进行权限校验与配额检查,降低并发冲突概率
+**更新** 新增对confidence和match_type字段的完整性约束说明。
+
章节来源
- [backend/alembic/versions/488d0bd5ab01_initial_migration.py:36-111](file://backend/alembic/versions/488d0bd5ab01_initial_migration.py#L36-L111)
+- [backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py:21-37](file://backend/alembic/versions/b2c4d6e8fa10_add_confidence_match_type_to_citation_records.py#L21-L37)
- [backend/app/services/query.py:45-81](file://backend/app/services/query.py#L45-L81)
- [backend/app/database.py:12-18](file://backend/app/database.py#L12-L18)
@@ -412,18 +454,23 @@ RunMigs --> Done(["完成"])
- 查询列表与计数
- 分页查询与计数分离,避免重复扫描全表
- 使用索引覆盖 user_id 与 created_at 排序
+ - **新增** 支持按confidence和match_type过滤查询
- 引用统计
- 使用 JOIN 查询限定到用户所属的查询
- 按平台分组统计,利用索引加速 queried_at 与 platform
+ - **新增** 支持按匹配置信度和匹配类型进行统计分析
- 导出 CSV
- 以查询为维度导出,先验证所有权再执行导出
+ - **新增** 输出confidence和match_type字段到CSV文件
+
+**更新** 增强查询流程,支持新的字段过滤和统计功能。
```mermaid
sequenceDiagram
participant API as "API"
participant Svc as "服务"
participant DB as "数据库"
-API->>Svc : get_citations(user_id, query_id?, platform?, dates?)
+API->>Svc : get_citations(user_id, query_id?, platform?, dates?, confidence?, match_type?)
Svc->>DB : SELECT ... FROM citation_records JOIN queries WHERE ...
DB-->>Svc : 记录集
Svc->>DB : COUNT ... FROM citation_records JOIN queries WHERE ...
@@ -432,26 +479,50 @@ Svc-->>API : 结果与总数
```
图表来源
-- [backend/app/services/citation.py:24-73](file://backend/app/services/citation.py#L24-L73)
+- [backend/app/services/citation.py:30-79](file://backend/app/services/citation.py#L30-L79)
章节来源
- [backend/app/services/query.py:12-32](file://backend/app/services/query.py#L12-L32)
-- [backend/app/services/citation.py:24-73](file://backend/app/services/citation.py#L24-L73)
+- [backend/app/services/citation.py:30-79](file://backend/app/services/citation.py#L30-L79)
+
+### 报告功能增强
+- **匹配置信度分析**
+ - confidence字段用于存储匹配的可信度评分(0.0-1.0)
+ - 支持按置信度区间进行统计分析
+ - 在CSV导出中显示详细的置信度信息
+- **匹配类型分类**
+ - match_type字段标识匹配类型:exact(精确匹配)、alias(别名匹配)、fuzzy(模糊匹配)
+ - 支持按匹配类型进行分组统计
+ - 在报告中提供中文显示(精确匹配、别名匹配、模糊匹配)
+- **增强的统计指标**
+ - 支持按置信度和匹配类型的组合进行交叉分析
+ - 提供更精细的引用质量评估
+
+**新增** 报告功能章节,详细介绍新增的confidence和match_type字段的应用。
+
+章节来源
+- [backend/app/services/citation.py:298-308](file://backend/app/services/citation.py#L298-L308)
+- [backend/app/services/citation.py:342-429](file://backend/app/services/citation.py#L342-L429)
+- [backend/app/schemas/citation.py:7-18](file://backend/app/schemas/citation.py#L7-L18)
## 依赖分析
- 模块耦合
- 模型层仅依赖 Base 与 SQLAlchemy 类型,低耦合
- 服务层依赖模型与会话,职责清晰
- Alembic 依赖 Base 与配置,迁移脚本与模型同步演进
+ - **新增** API层依赖服务层,提供RESTful接口
- 外部依赖
- PostgreSQL 异步驱动(asyncpg)
- Redis(用于缓存,如需要)
+**更新** 新增API层依赖关系,支持新的报告功能接口。
+
```mermaid
graph LR
Cfg["配置
config.py"] --> DB["数据库引擎
database.py"]
DB --> Models["ORM 模型
models/*"]
Models --> Services["服务层
services/*"]
+Services --> API["API层
api/*"]
Alembic["迁移
alembic/*"] --> DB
Docker["编排
docker-compose.yml"] --> DB
```
@@ -472,50 +543,61 @@ Docker["编排
docker-compose.yml"] --> DB
## 性能考虑
- 索引优化
- - 为高频过滤字段建立单列索引(user_id/status/next_query_at/platform/queried_at)
+ - 为高频过滤字段建立单列索引(user_id/status/next_query_at/platform/queried_at/confidence/match_type)
- 对 JSONB 字段可考虑 GIN 索引(如需复杂查询),当前迁移脚本未启用
+ - **新增** 建议为confidence和match_type字段建立单独索引,支持高效过滤
- 查询优化
- 分页与计数分离,避免重复扫描
- 使用 JOIN 限定用户范围,减少全表扫描
- 时间范围查询使用索引覆盖
+ - **新增** 支持按confidence范围和match_type进行高效过滤
- 缓存策略
- 引用统计与趋势数据可缓存至 Redis,设置合理过期时间
- 导出 CSV 可缓存热点查询结果,降低数据库压力
+ - **新增** 报告统计数据可缓存,提高频繁访问的响应速度
- 连接与并发
- 使用异步连接池,避免阻塞
- 控制并发度,避免大量写入导致锁争用
-[本节为通用指导,不直接分析具体文件]
+**更新** 新增针对confidence和match_type字段的性能优化建议。
## 故障排查指南
- 迁移失败
- 检查 DATABASE_URL 是否正确,Alembic 配置与环境变量一致
- 确认数据库已初始化且用户具备权限
+ - **新增** 检查新字段的默认值和约束条件
- 查询异常
- 核对服务层权限校验逻辑,确认 user_id 与查询归属一致
- 检查索引是否存在,必要时重建索引
+ - **新增** 验证confidence和match_type字段的数据类型和取值范围
- 导出失败
- 确认查询所有权校验通过
- 检查 CSV 写入逻辑与字符编码
+ - **新增** 验证新字段在导出过程中的处理逻辑
+
+**更新** 新增针对新字段的故障排查指导。
章节来源
- [backend/alembic/env.py:33-88](file://backend/alembic/env.py#L33-L88)
- [backend/app/services/citation.py:14-22](file://backend/app/services/citation.py#L14-L22)
## 结论
-本数据库设计围绕用户、查询、引用记录、任务与订阅五大实体展开,采用 PostgreSQL + SQLAlchemy Async + Alembic 的成熟技术栈,具备良好的扩展性与可维护性。通过合理的索引策略、事务边界与服务层封装,能够满足日常查询、统计与导出需求。建议在生产环境中进一步引入缓存与监控,持续优化查询路径与索引覆盖。
+本数据库设计围绕用户、查询、引用记录、任务与订阅五大实体展开,采用 PostgreSQL + SQLAlchemy Async + Alembic 的成熟技术栈,具备良好的扩展性与可维护性。通过合理的索引策略、事务边界与服务层封装,能够满足日常查询、统计与导出需求。
-[本节为总结性内容,不直接分析具体文件]
+**更新** 新增的confidence和match_type字段显著增强了报告功能,提供了更精细的引用质量分析能力。建议在生产环境中进一步引入缓存与监控,持续优化查询路径与索引覆盖。
## 附录
- 部署与运维
- 使用 Docker Compose 启动数据库与应用,确保数据库健康检查通过后再启动应用
- 生产环境建议使用独立数据库实例与只读副本,配合连接池与慢查询日志
+ - **新增** 升级时确保迁移脚本按顺序执行,从初始版本到最新版本
- 备份与恢复
- 使用 pg_dump/pg_restore 进行逻辑备份与恢复
- 对关键表定期增量备份,结合 WAL 归档实现点-in-time 恢复
+ - **新增** 新字段变更需要纳入备份策略,确保数据完整性
- 监控与告警
- 监控连接数、查询延迟、索引命中率与慢查询
- 对迁移脚本变更进行版本化管理与回滚演练
+ - **新增** 监控新字段的使用情况和性能影响
-[本节为通用指导,不直接分析具体文件]
\ No newline at end of file
+**更新** 新增针对新字段的部署和运维指导。
\ No newline at end of file
diff --git a/.qoder/repowiki/zh/meta/repowiki-metadata.json b/.qoder/repowiki/zh/meta/repowiki-metadata.json
index ee8b041..fd7d222 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"}],"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":10,"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-22T19:25:18.923883+08:00","gmt_modified":"2026-04-22T19:25:18.923883+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":18,"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-22T19:25:18.928064+08:00","gmt_modified":"2026-04-22T19:25:18.928064+08:00"},{"id":19,"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-22T19:25:18.928495+08:00","gmt_modified":"2026-04-22T19:25:18.928495+08:00"},{"id":21,"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-22T19:25:18.929347+08:00","gmt_modified":"2026-04-22T19:25:18.929347+08:00"},{"id":25,"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-22T19:25:18.931019+08:00","gmt_modified":"2026-04-22T19:25:18.931019+08:00"},{"id":26,"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-22T19:25:18.931426+08:00","gmt_modified":"2026-04-22T19:25:18.931426+08:00"},{"id":27,"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-22T19:25:18.931829+08:00","gmt_modified":"2026-04-22T19:25:18.931829+08:00"},{"id":28,"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-22T19:25:18.932303+08:00","gmt_modified":"2026-04-22T19:25:18.932304+08:00"},{"id":29,"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-22T19:25:18.932811+08:00","gmt_modified":"2026-04-22T19:25:18.932811+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":481,"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-23T15:22:24.561111+08:00","gmt_modified":"2026-04-23T15:22:24.561111+08:00"},{"id":482,"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-23T15:22:24.562112+08:00","gmt_modified":"2026-04-23T15:22:24.562112+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":486,"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-23T15:22:24.571376+08:00","gmt_modified":"2026-04-23T15:22:24.571376+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"}],"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"}],"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-22T19:07:22.171607+08:00","raw_data":"WikiEncrypted:Ixm4kI/Z7v0V3JxitGlz9ZcE16c7bpwHYYT05QZRkQpqpcesze5XUXS1vkiVEZxtNobDh2UDQ262IRWHPAAsEfjffD0RXnPHjavBBNWFb55SS8wVV2Rm8qd7oVzDBvIVleBJx9ucizitwm2GR+t/zrSdfu/UzvGrffKAHLxZUN3s9E/3BLo1n+ImmJ5dx5UCkwVkXSzRKQAMfuIsH7ma+0I71aPP4I7dEiw6qsvVmEMkNxEr++lMh5Dnb5VgV5vajcBNj0ryBY+/GPzHWk1n5VS1l7zWR8cQS4bF17Gse7V/kjmebgHXeuF15QchHtqeN80YGSckXh6FvN4l+UAWPIoq0JKn25d4owSwjXjSpulylSlauIyNGCF3tRu8nKJlAin/M3iM636BZyJfj7q0PSxmh0Ftm6aHzsTPV6/t2nIaU6GykmNuYnPJBlmMN8ESL5uQVNFLG1SLfXVeME0V3yt6x17pfAw6u7Gy+ZCv5JbVDVkLi4wb4s6WMriDfmpSYZR6GN1wH0tP/N+ion1coTaOCnxsG5GG0QhSuXNsn2cTNfgu8H7kf/34F3OJ90+zqpfd+jgzlFcH6kOMEwW4fNvpgS1kbhXDLvumYYyF2HQLViSBNJMMOA1kdWN1zkg9b+nPACXFB5p5BaJwP2Knh6j6CHP+/exmzFnui0wsMSOy/5pwf/QXfaDhWZfXWMVaOZlG5zB11FP2E3auQLNixhJ3xGJ8y13Acb6oQu2SH3GcTe/GdtLF0yD4utctwTrXZGbe+gPjopDqmmw1vBORIQ3c0FlSSzFVrDiPydc/1RVFuLEm9Ju/mP8NtLWQh5vEClbIFrP2IyDH3EQuIQTBdp88+xasqDk9GItxnSgEKKSCKA/Mh6tW5FnUV7NhRtMcCQVTk1QCoRqzuxs5TIcLS4IZcjW2h8HYA9ai6ciOjWbbCoX7gOdogk0UzHdLZkIN0KNI9ynsGgKcvqJH+9+OpUYonXczqc3ZIr80LaNunN8cg2fpq04dAFKFt3JxYfc/0FXl0OogP4Y4rPnyi+QBmyQeqyaNPZgqcXxDmENgXrhVUp8O1YTalGtL4AbPfpSeWLWUYFiKpnKp8V2OgCdMSHz9aKwcwvdbaugwpBNWMGk=","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-22T19:12:57.014271+08:00","raw_data":"WikiEncrypted:CSdS6kWSLejXKP14YRwDWQpHc4XisvWgJzUb2dJm/yAGkddGXaInKHg6AG6A9w3V5Kpt4A88mghHC49ZAnCEBFkdcYzwoG8rsg51oQD0yMYKzfwh9/qTOohfaDg53bEIiDeH6Us+OaAO1Y8ql0iMmjrgLp9Y1OylCHhUCu9A42xMeh+fRbqaw2jvrjKU9Vd/PpCMTm7f+oljBa2YenytsO1vH+MJygHrIBIFMEwP4wDHRQCGm9i9XjV35+dfjxOhIgTTQEGiMzeNAJeVWdGX3CzHOqsyvOPjrWtxYxywjeMbewxFEBPA4dDmVf1Vjzzew4XPBzMpEXmfoXbyeUWhGhbE7tEFT39R09Ha75iK0wzPu1ux+4/VGTFOtfPkADxp62qkrPp9iL5lHxwQazsKyzs2bQCnu3u8gtrTmvxG69MDkDKrF9Q+F4ZtAlnadF4bsfDmfd+NGYnuFZW+D5cHTHu/EUqApHkByQiwdgH6BcOsdVw2LNu8bIfHCZq8kZtslVIVwCYcAmkmcAXNdpssx4zoDfoSAhvevYc0o6HITT8QasnnhvMWA7agJiGwUENhiApqGMMeOqP22TOMJDUUb2V2VhVNIujymTz4YUAtQq47v74k+XnI/Mx24Y1s9OOWOKvRfKZn+WXVLMwLQTVbl80EHY4/Wra+1fgC0dmHhXvVlq2jdksGrjLc75lQUEYd0n4nwf/f6JsjfM1jYvVSArLWpXoEn82NbB/T5MrfmbEiK+CQD1GfQ/vtvaPioghi7WWdUslv06Qra6l67oxtGKGx7SJd5FTXKH6MXBs4M3x1GItLIU0Dtkd+trliHatHl+wYqwVk2xgXmOGpQsOLwOf99CbQ1BtTN7KPB19I10pElWF+IbH9eTm+6sewgOPimkfI3JhVSl2cSCQZcGQVJINI8TE515tn2AMLVlM0AMQxTbh65Z99WSQvJtYH/TugerzWgFw3pwvBbp+9a5z4qZmBFIW+jxXEcrMkiC9s53D9cGLBS89D/clur1q4gDDkKVtztRvwwORkOSEfzLNhstNJp4WgD+b8H6bbLh70G6rMCXtMSMZdjuFSD40UuqdvHFcW9SE6qEOi06mMSAXOQQ==","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-22T19:13:13.115817+08:00","raw_data":"WikiEncrypted:9mSyqcDNXizO1JyGDCrbHQv26RAimH4+rntsA1VX4dLvyYb4Jxu6TVndaXonw13RPqBFh6ddOlJg+Nqb71iBvzQ67YQrmYbtLXwkDZnvgAJqkSUXXzN4PlgowB/jNfTrmLqrUYAZLwPYTiSEAGfTeU+8GlJTtvE8xjWhZI7vP2u+cMth1ze2EwqO4hyTykCDaW9LISygpROFBJLghTo+K5E2Mdj9HWXWfqf/8/vypj1zjNrQHVY2bFNlhZv90+sCmTY3eQ0T3wfE94jKejGhh2P8YYJayGzsEoDFm7r2Hsf+rQmAXynuCLYuAHl7rAzrWRNjmvkxiuyI4AB9he1sozIJzX5M+HadHtd7E15MFYvAEb0KExSxSfnZCkczRCRPmNvQmwYBUaEJJ6brnImPFBEN4bxd+c2SId4g/BYudUL4Qio8g2zs8r1bZIz0rpQEHWcVoHGQK73Xp8ff7gvjRh89yEr8lh3zxI29eZygWmcap5z4kVV78YWgF0dC9at69s2EVtaiIluQIaBF/gJZuH0EjOqE/TnxTq89sb81YBRpRgHDImzngt8tBp7eiF/e+aO3qk+zH2RyGTCyRN5lqSlHoMkfeysXKgBAk9foGnD4D2OBWfndyN16CuRtGa5vAV8YS0pNw0IKN9TniA4PAGC9lTuMbqabzVWAnbBdqY2vR7nC5837ooKWljHYFMFWUfVSbOfFGxn0sFW75OelscFRx7FM+kaQtP4JrepRQcoDml7Bnt3bTt8SHThmpNMJwu22c3bruKQ++qcVCuvXKDKAK5qSxiReKiiJC+YluwwphSqkRxThXUwS4aMI7IoDX2FwLw1dYo7w4TeEi5sB8HoBZ5sY99Q0vowXVWj7Yq5HhHv8aTxTP3HjRr+Xi07oriRJlJifIzNlRPVB0rCdJV/cBlGkz4Gr7KUWUFvoXwDpWGM1dGbNQgkE4z0Um3fU0D0K10jDKeEHA6O7MnZE3L5Df5j9bEnGZb670xqUxdMxSjDFcUNKYrceZxYtK+GB5j5PMZuksLKt5QRTkzcKMQ==","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-22T19:16:36.925806+08:00","raw_data":"WikiEncrypted:f9V8T4at/ASje76Nwqwyb9VKSms5IpkiE8NM6ot6FBQ2Xm/W7xVNoD2HxtG0JIBY8fzg5rfp4P19y9GFWE3P7uI+Ntusv89zObilbespnCZi9lgSyzvJAmMy2ZXU36uG1n/fT5ySk4uXzAeM03IITw2ki55c7blR7ctykkDRBz/+KuT7ZF0DOBoduWD36B8eEgythbdQnQk6QKdUO3zYxMKpkeC+pXgvEdIShh1qARe6y4tQ2QvzqtKnSFLAxfQRLFpZ+M74S7WgYzFsfmB62qvpFd6iqQ/c34o/BAn/Hk+hmijJtD7JrbAb4BZHqO3M37l90T1UeUJ7ca3kxzzUVlBhJelV2EEMzu0TdG94oRWD/uUH+ghzekg7V4QONvz6FgX6S3g5dlnRmJ3uGVAb9UkWyg54V2vm4Flr1Rckut7P+eI0PwFYHVVS73QDzbs8rxY0qTDqnSVx/avS8kdcv0Trke0k4rFSsbgl8gVc0YnalN7uE3aWOFqG3L4Uuv/doKg7kRTsuNOHcemyf3CxJKAWqRGnZq6kAZXhAIPB+TVfZtUZBfqXceE8XhFx0TzfsTc/CyJPCD9cMLl/dndwGVEVjImXOv5Z2ILdMDbyiHuP1LNmS6opA4RZav4bChAA4vMKcLsvlpy1m2JXX7ZrbSoaoyPlArsF4y5k76zolOB0rT3mchlZ1RuKELnC3Zx5UyvIIpY7A1/YhLy4OGGFi09mrAxAr1U1pmnM8Sefd0ZG8wLo0buXQ1yyE8pVZh/xwTuD5FtS813EB8K7f1KSJbjHW9PaaCtfFr3QVUDhXFZQOe/pjryeUUC/FcKCnLNd7YGb6sjFaYvmITf6kZQnmulBS/erxUZbTiXDrI5vHrG8/FJATWl0MvEiv4xMovu4nmOJtjrbhfUlI/8+JzGdmo2HJ0v9Nle1SjnYXJuOWCTwFL5+tcYW9KBcfsxRdQ+8L8vJmfBQ+utNXUpmYn+DimavX86+plxrth8vKszohk4Yyvid24iSykfrvEBlbR1p0hBCSfT7knct0F5qUHa+Msj/zGpopBE+WShRW5LA6Pm4DVHTlwZHViJfpOH1tZZU","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/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-22T19:00:15.768242+08:00","raw_data":"WikiEncrypted:veTYwq2y4io5qXerCTrkkBwdhOAmcMQTz+AJLOFORhNFeFTAN7xitXLxeRr3T1sKrh0z/6NFLuxfhi+XJSCnWjMeU87mDaFkK5qsmaAL2Nytxcgn44oX/Np6gDk6NBpKTXXQ3c1JIVHY3Iku4YTIdYCMibjywixwZ23Y301pMlyPcNfQmeyLtgTS9lP5U9xDLKsnMUqMie2ljsUEPDjOoPxSnQNoCL2G44jqE4BeEYCl1h3JsynQMnvjVq8UCOhctZuFN52nO6JzrF4QcwRRO4A9xL1TaAtIZ4rg/SoqWB45m3doVWQm5F9X2438sdweLxVi9rjFhD3YsPTUW3+FCCzo3C36ea5HWhnLG1HaEDoZet0lVePafwfQDmBH4SRDIzbxrRNYtlqnAT0fkhc1nMAQz0IEGTS56zXt+EYxvMzu6xYqWFcYFRtnmeW4SPZ7fIro5U+rBcr8RAhA+oRG2JsVDkhv6DqzoyIv2NQFFMusIiiBmBASHXvFFZ8AUVhKC9xd9A3bJmY+ukIHDAeRXE/IucwTAoEQNI9CMXeyfmQK03mWECRg4ZW/mruOTW2OBUuDhiPMO6x1SJ1/xRenkwbw7G+81ZCnsnBRLKd3cZF4y0nCxe4j13LGQfd4iAX5i/DUX9KRkwDMblN/sboCGkcbSLtph/Xvk148A4+6695W71mrzar7yhfM2lOT53Hsyt2sJWiczLnDCfT2QTlB71ufUZ8Q+ypkZO7zlMrvkaUHamxgarKXmrkr2OSa/8IvsG/WUhqSV62U/SXuacIVOKNM7SY8D/zzYphGfcHavI9R9O/oEfUb0yYdGdjhTVWuiGlGsp/cByp6ofrZn/LfnNB3vSSya3wpDOVy3RqCdO+/d2gEs+jlREm/N1+eDZOKMpt8hFWS8xUytmwHZca0aN08mhhTQARvxhQUGnF9uPVIUhyDUF+KcuKANnwSAWIZo/cRSzlSrqPcRAA7XNJQTg2OLmkWpWQwVtTbYCyP5hSM3zmFlpWvBfR30gpl0P51+0pFCd4VDI9/9HW/Wa7Ih95wP7HNKXXfex6GwbePYI59yynPdHHuqHaqbkBTKMJS82vrAmldAtjgxXDvf9xwDjPEyA5M0Hw35tVS6wjNh3SS2SuwfT9oDISNn6Y+5j5yrJjUF6K2Zri0unxCjM1JkoAvusyG+pHY+Bb0QKmNcfyXBMYTSI1PhOPDulcDYMyq9Zfb+Al6euE24vTZpbjKoEtLO6rGDYV8KHfz2jIxcPi0y8Ou+WvMTWKz18iFQNUT"},{"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","gmt_create":"2026-04-22T18:57:02.318113+08:00","gmt_modified":"2026-04-22T19:23:12.0556+08:00","raw_data":"WikiEncrypted:qByx+WzXalKNnda2aYUs+GYu9pC8LLDNo/T55ZeqwzWiy0YK6xVbR7KM5OSxCOo+gfTx84RuGsvrF5lK6ZjnzUlze4qrtyk7B01ZVL/J3jiDE8Gxh30IZ/Mj1EQJzBgbS8ucLS5EtWSrZllyPWZCYSwVaerdIDlttJxjgqNQQtMUDRAB8OQ24T4T6PetqUxBLI88gXxpodDV3Dc8w4vOKW11rQu+VT/oxsfIcoPAneCboh21Q6/+B9XbFXBpIBt7aIzWt2RsJttqoYF8wDTsmjCiZLq28t5vrQ4Sa+eKtDX1DpNAFob+BOs4Mmqm+YOjaRHvq2h+NjRwAcgLTQbRRQ/mDN6TdA4dbJh61tmjO36v1VZj2vbzvIogCKkVwvxYe4ZRLkOADLelhTgAjFcFCSPmrGGDFgzUU1yzAstWjYB79RIQhz0PEg9hhOmte8rH3lRWxxSpVe/1MQMLH+ka77X8d5lwXEAhaF5uHt039diwwi6YY3Y9nEB8XYpv04beBhaMWdLq1Odojzo+Y974U5UY9gXk01q5QVIuHK8idcl6cuKp4f+gwGZ93SgjTqe7FH7Qd5ge6PFGZJ+aslEcmtnU47e+zHyzdHWI9hPG0YyJELRpf0i86RxY/f6hXIyFAyeWy57ojMY38VpwsiGGXz7IigMFtIyIlbqO3TH0+IeZ2t36ENk9y6nTzgXcWWxCA2LCTHmO5+jPxWISebAAxo6WWit6n6LUWDxLf4MHwWbZckVKu52y4K3ne9qu+I27rwPoTazIsCAYy0QPtt7mW2mn0ZRxzPvioUK7EGgjO1OqsaKLZJ7AjW48Ru6wYZhBlriVoABBGkI9BaUnyYEcZ/6kpkl+TnRlKY32X1A8JvIZA/8zHmSDEG+FinfzfNFH+SSj3G3HzsxoGnVOm1qN7i3rDXC9bliZ2XpBZR+f29A0ray4pNhiBI+dBSKZouc+bB57XZ8Ct+6j5QHeCfiWa6AQMVuv1Tctr7qtXTrcVzTlYsU3vR1mVtmmkHd3yv3ZBA4l9p0DF6KOSKVjAPn2GSA2EABrlnwJ2lSeWHoObLJBidT6nmQ5S/6IkRgLb17Pu1ypV3eKj6LNDOzrw4QxJ/JtHZ1rG/1Tl0wmhAjxmAzcu+aahYjIdYSTWRkWqqVZ66nNp4pYZys0zblAnLMLM//kJadF9xEEaHjMBIl92IgL0L97/jGIU2YXsapNE1OQ2D6+aqKVb50gv5zx4AKT4tdiLO6Z2sMBrNeyDhml+vCgXp+rFjFXUx+qAUz8Wm1u8gAPUIO3m0CnCZSt+R07BQsJkHMGDzlrGsy1wvLg7Pe6UI9RPBmOUN7UeUe5c09BjutdT+KuUht4apd+u4wqgCGkHyo1Wy8W4UbciPoYT8wx0cLPnCGR73GfwoGnzPtfxWJDXX3SruBGUXeCtwl8UnbIlyDa4Ks2befkeGMWpHQ=","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/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-22T19:01:25.986259+08:00","raw_data":"WikiEncrypted:cSfKuI0KndKt4dAjXxIdxWhPkO4T68Pn8OuUxh8ycrOmN2KINuisMW3IOEhdPiFABzUhI7mz9/HfHXQ4zprU/+/sSF8Ao95qt3TWu3d0gdIZ8D5HcXKzDDRDEpL2lUuKjanJ/DyOhfgoAhj4uHHG63PE4lD0nFGhUjI18Mx86VwV/XRvw7SpcidXldGAtwv+SyiBV8jhNv2SsuEp+c64Tpsb4eXXnhU94tHe5zw60yhZPo02AbhrX3CGRvf/e0VDakSRNs2IQLOmYpaXPEbGq1F/Tp1t9NRMOPMypI2xbgsTvkk85z9kGHoS4hRcf6dLIMVrvkCYibs8KhQCMJiDZ66d6j1Vb6dqBvmrKsh3E6WjAycKEMEg/CipCVwEhG2XXjejCze2wysxwhQJevZcegdqOdbxsBBToWhLzOtdumIPjl6TkkzVv7AjaDWHyidsMW21W5FkdxXReA8iCr3BmNkZXyR7BhBY5u4N0ckDpZ5vNXZOYz/nnm9EreXPLovPEB1I2LfReGW91QDOmQpV3kBPeM35QBnLSkx+FIocW4tie7t+M3QfDly8wClVZXt/3Cc96RAY6WNV+YYLMUbk0eoT2oS9tJcllSD2Lsr8dySH9dDel8ELle3TYDsLHrUqx9cVuNFviwe3oCB46zQMNpYbQncs/EfiGeOD2OCtiuPgMJQ2Xr1wz61OtRdGzstiiPcgemrt3kq6Go6kTMDJtBjYxdl7n3V3dIrWro0kMRmrET0FmRL+jOKdnxGBCgn7UUfNtuwY0c63ALecJJYYOTsfyPzHs3Tt7F0jPFfGp1xYzFzaJAtquIYdoM1jeFRd09d8N49nwaK2qynepWbYA5daLMXJ8Rbxlou6PXvIVY/rHl++n+9Z7OO4mAKy2SYe8mpLZqP4Achbv5fwrx7RrwUNcTUOJeXNTIimqqVLvfg/wEfrBk/+isWw2HJf0W0xUuYy0gIClKgSm/wR4uZD/hM7pzbg+Q8DUglIDaVcUMjJnFNqcUrsNEa21UPlYd/E+drdMzZhzn2GHjMnKkAbr8P8DXkbz3RU36nbktlWYlN/hx1lsA9kSsHRiH9Q/xlpT8eBA7rmQiEasbHbaD0PaL8Dyc4IxQ9ZhhWSSUIT5m10WFLz1U2+/9T7i3LHiMeZeFtY4g60GitHBRVqf9+NDKKdYms75Sq8isA35viTaKBUg9/dkwXhZR9TePkcei9/mcG/UOI4dq9SqLAijVNzhLtDoHXCkVCZ4JYzrzIK9A04c+Gtu0xPcRFLewPDEmQPg+3v+cy6McOQdOYqV7rvdr29pmRLOyVxEMs99/vMu6XDAu6UQr44Zq3RVgekLzY7aabJQc/YyWgvzg9dvnh0cw=="},{"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-22T19:00:15.768379+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-22T19:01:25.986389+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-22T19:07:22.171749+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-22T19:12:57.01442+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-22T19:13:13.115929+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-22T19:16:36.925945+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-22T19:23:12.055756+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":"a8927a18e6e6379ab86c84f2b3ba3f2242f5a287","last_commit_update":"2026-04-23T15:22:24.610162+08:00","gmt_create":"2026-04-22T17:58:32.591608+08:00","gmt_modified":"2026-04-23T15:22:24.610162+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"}],"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
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..be43b72
--- /dev/null
+++ b/README.md
@@ -0,0 +1,2 @@
+# geo
+
diff --git a/push_script.sh b/push_script.sh
new file mode 100644
index 0000000..47f0e65
--- /dev/null
+++ b/push_script.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+set -e
+cd /Users/Chiguyong/Code/GEO
+echo "=== Step 1: Check remote ==="
+git remote -v
+echo "=== Step 2: Git status ==="
+git status
+echo "=== Step 3: Git log ==="
+git log --oneline -5
+echo "=== Step 4: Push ==="
+git push -u origin main 2>&1 || {
+ echo "Push failed, trying force push..."
+ git push -u origin main --force 2>&1
+}
+echo "=== Done ==="
diff --git a/test_output.txt b/test_output.txt
new file mode 100644
index 0000000..14be0d4
--- /dev/null
+++ b/test_output.txt
@@ -0,0 +1 @@
+hello2