Skip to content

chore: 删除从未被调用的 /api/personal_dynamics 端点#1531

Open
LyaQanYi wants to merge 1 commit into
Project-N-E-K-O:mainfrom
LyaQanYi:chore/remove-dead-personal-dynamics-endpoint
Open

chore: 删除从未被调用的 /api/personal_dynamics 端点#1531
LyaQanYi wants to merge 1 commit into
Project-N-E-K-O:mainfrom
LyaQanYi:chore/remove-dead-personal-dynamics-endpoint

Conversation

@LyaQanYi
Copy link
Copy Markdown
Collaborator

@LyaQanYi LyaQanYi commented May 25, 2026

背景

PR #1530(issue #1479 Step 1,给"裸奔"的本地变更端点接入 _validate_local_mutation_request)走查时发现 POST /api/personal_dynamics 是死代码:

检查项 结果
仓库内前端调用(static/, templates/, NEKO-PC/ grep personal_dynamics 0 hit
测试调用 tests/ 0 hit
路径名 URL 引用 grep /personal_dynamics 仅匹配定义本身
后端调用 唯一消费方是 proactive_chat handler 内 system_router.py:5249 处直接 await fetch_personal_dynamics(...)走自家 HTTP 路由
方法 vs 路径 POST + 资源风格路径 personal_dynamics,命名违和

PR #1530 当时是给它加了守卫(防御性),本 PR 是顺手把死代码本身清理掉,按"发现即清理"。

Change

删除 main_routers/system_router.py# ========== 个性化内容接口 ========== 段落(44 行:section header + 整个 get_personal_dynamics handler)。

保留(仍被 proactive_chat 使用):

  • utils/web_scraper.py 中的 fetch_personal_dynamics / format_personal_dynamics
  • main_routers/system_router.py:152 的 import
  • main_routers/system_router.py:3054_log_personal_dynamics helper
  • main_routers/system_router.py:5249-5255proactive_chat 内部调用链

Why 不是「改成 GET」

考虑过 B 方案(改成 GET /api/personal_dynamics,去掉 CSRF 守卫,保留为未来用),但:

  1. 现在没有任何前端调用点,"保留供未来" = 维护负担 + 死代码绕过 lint
  2. 真要曝光时,路由几行可以直接重写,函数本体 (fetch_personal_dynamics) 仍在 utils/web_scraper.py,加回成本极低

Test plan

  • uv run pytest tests/unit/ -k "personal or proactive" -v163 passed(覆盖 proactive_chat 路径)
  • python -c "import ast; ast.parse(...)" → 文件语法 OK
  • 全仓库再次 grep 确认无 personal_dynamics URL 引用(除自身定义和函数名)

Co-Authored-By: Claude Opus 4.7 (1M context)

Summary by CodeRabbit

  • 新功能

    • 新增文本消息中迷你游戏邀请关键词的自动识别与处理功能
  • 功能移除

    • 移除个性化内容接口(/personal_dynamics)
  • 修复与改进

    • 改进事件钩子注册的鲁棒性与错误可见性,避免自注册失败被静默忽略

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 25, 2026

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 2d8d8ee1-4160-4750-8f00-ee4b4152e827

📥 Commits

Reviewing files that changed from the base of the PR and between d411b6a and 4e31c58.

📒 Files selected for processing (1)
  • main_routers/system_router.py
💤 Files with no reviewable changes (1)
  • main_routers/system_router.py

Walkthrough

移除了系统路由中的个性化内容 POST 接口,并在模块导入期添加向事件总线自注册文本消息钩子的逻辑以应用小游戏邀请关键词喵。

变更详情

接口迁移与事件驱动重构

层级 / 文件(s) 说明
移除个性化内容路由接口
main_routers/system_router.py
删除了 @router.post('/personal_dynamics') 的完整路由处理函数,包括入参读取、fetch_personal_dynamics 调用、响应格式化(raw/formatted/platforms)及异常返回分支喵。
文本消息事件钩子自注册
main_routers/system_router.py
在模块末尾添加自注册代码,尝试将 _maybe_apply_mini_game_invite_keyword 注册为 agent_event_bus 的文本用户消息钩子;若注册抛出缺失模块异常且模块名为 main_logicmain_logic.agent_event_bus 则静默,其他异常使用带堆栈的 logger.warning(..., exc_info=True) 记录喵。

代码评审工作量

🎯 2 (Simple) | ⏱️ ~10分钟

旧路由悄然消无迹喵,
事件钩轻扬织新意喵,
关键词随讯息流转去喵,
自注册静默又留痕迹喵,
喵~码农也会做魔法喵

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR标题清晰准确地总结了主要变更:删除了从未被调用的API端点,与代码变更完全对应。
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@wehos
Copy link
Copy Markdown
Contributor

wehos commented May 30, 2026

真的要删吗??!!!

@LyaQanYi
Copy link
Copy Markdown
Collaborator Author

真的要删吗??!!!

claude :顺手的事(

`POST /api/personal_dynamics`(system_router.py)在 static/、templates/、
NEKO-PC/ 与运行期前端均 grep 不到任何调用方;后端唯一真正消费
personal_dynamics 数据的地方是 proactive_chat handler 内部直接
`await fetch_personal_dynamics(...)`,不经过自身的 HTTP 路由。

死代码 + 命名违和(资源型路径却用 POST),按"发现即清理"原则删除。
`fetch_personal_dynamics` / `format_personal_dynamics` / `_log_personal_dynamics`
全部保留——它们仍被 proactive_chat 使用。

同步删除 Project-N-E-K-O#1530 为该端点加的 CSRF canary 用例
(tests/unit/test_uncovered_endpoints_csrf.py 的 UNCOVERED_ENDPOINTS):
端点删除后该参数化用例只会命中 404,而非其断言的 403,必须一并移除。
(已 rebase 到最新 main,解决 system_router.py 一处文本冲突。)

verified:
  uv run pytest tests/unit/test_uncovered_endpoints_csrf.py -> 14 passed
  uv run pytest tests/unit/ -k "personal or proactive" -> 201 passed

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@wehos wehos force-pushed the chore/remove-dead-personal-dynamics-endpoint branch from d411b6a to 4e31c58 Compare June 2, 2026 00:35
@wehos
Copy link
Copy Markdown
Contributor

wehos commented Jun 4, 2026

@Himifox

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants