# v6.3.15 AI回复最终修复 + 采集高速版

## AI回复：解决“找不到原帖 create_time_raw”

现场日志已经证明：
- `get-notices` 可以读到全部互动；
- DeepSeek可以正常生成文本；
- `do-comment/do-reply` CLI能力存在；
- 失败点是桌面客户端没有 OpenClaw 的本地通知 `#ref`，通知本身又不总带原帖原始时间戳。

腾讯官方说明：
- 通知 `#ref` 属于本地通知上下文，自动推送目前仅支持 OpenClaw；
- `do-comment` 需要 feed_id + feed_create_time；
- `do-reply` 需要 comment_id；
- 帖子/评论链式操作要使用 `create_time_raw`；
- get-channel-timeline-feeds / get-guild-feeds / get-feed-comments / get-next-page-replies 都有独立分页游标。

本版不再用固定10/12页上限，而是建立持久上下文索引：

### ai_feed_context_index
保存：
- account_id
- feed_id
- guild_id
- channel_id
- create_time_raw
- author_id

### ai_comment_context_index
保存：
- feed_id
- comment_id
- reply_id
- create_time_raw
- author_id
- content

### 回复解析顺序
1. 有本地 #ref → 直接官方 --ref。
2. 无 #ref → 先查本地 feed/comment 索引。
3. 缺 feed create_time_raw：
   - 直接 get-feed-detail 尝试；
   - 精确版块 get-channel-timeline-feeds 持续分页到游标结束或找到；
   - channel_id缺失时扫描该频道已保存版块；
   - 最后 guild 最新帖子持续分页到游标结束或找到。
4. 每一页读到的帖子全部写入 feed 索引，所以同一频道越运行越快。
5. 找到原帖后：
   - get-feed-comments 完整分页；
   - replies_preview不够时，用 get-next-page-replies 继续分页；
   - 优先按 comment_id / reply_id 精确匹配；
   - ID缺失才用正文+作者匹配。
6. 收到评论/回复 → do-reply。
7. @发生在评论/回复里 → do-reply。
8. @直接发生在帖子上 → do-comment。
9. 写入仍使用官方最小参数，不额外提交易错链式字段。

旧 status=failed 记录本修复首次启动会再重置一次重试次数；
已经生成的 DeepSeek reply_text继续复用，不重复计费。

## 采集速度：从“并发CLI”改为“减少CLI调用”

项目 app/cli.py 为了多账号凭证隔离，本来就会串行化 tencent-channel-cli。
因此之前给CLI套线程池并不会真正并行，反而增加调度开销。

本版改为真正有效的加速：

1. 公开频道池继续缓存。
2. 单轮默认只扫描8个轮换热门频道（collector_fast_channel_limit可调3~20）。
3. 帖子列表本身已经含视频URL时，直接作为候选，不调用 get-feed-detail。
4. 只有去重后候选不足本次 max_per_run 时，才补帖子详情。
5. 详情调用从固定8~24条改成“够用即停”，最多 max(6, max_per_run×3)。
6. 标题重复/source_key重复继续在下载前过滤。
7. 真正能并行的HTTP视频下载保留最多3路并行。
8. 采集结果增加“详情调用次数”，方便观察实际加速效果。
9. 采集过程中读到的feed同时写入AI feed上下文索引，一份读取同时服务采集和AI回复。

## 热更新
- 版本继续 v6.3.15。
- app/updater.py、make_update_package.py、bootstrap.py、
  licensing、license_public_key、构建脚本保持指定 v6.3.12 原文件字节级不变。
