feat: configure max notification items

This commit is contained in:
2026-05-07 00:10:35 +08:00
parent ad48715664
commit 6c8fdc861f
6 changed files with 62 additions and 4 deletions
+2
View File
@@ -358,6 +358,8 @@ Item link normalization for mobile-clickable reports/notifications is captured i
Per-item notifications and Feishu Markdown clickable-link formatting are captured in `references/per-item-notifications-feishu-links-2026-05.md`.
Single-run max notification item count (`maxNotifyItems`) is captured in `references/max-notify-items-config-2026-05.md`.
Portable export packaging for sharing this skill/project with other Hermes instances is captured in `references/portable-skill-package-2026-05.md`.
@@ -0,0 +1,44 @@
# 单次最大推送商品数配置(2026-05)
## 背景
BOSS 希望在每商品单独推送之后,增加一个“单次运行最多推送多少个商品”的可配置项,避免一次分析结果过多导致飞书/微信刷屏。
## 实现要点
- 配置字段:`maxNotifyItems`
- 默认:`10`
- 保存时限制范围:`150`
- 位置:`data/notify-config.json`
- 后端:`lib/notifier.mjs`
- `DEFAULT_CONFIG.maxNotifyItems = 10`
- `normalizeNotifyConfig()` 同时用于读取和保存,确保旧配置文件缺少字段时也能返回默认值。
- `sendNotifications()` 调用 `buildNotificationMessages()` 时传入 `cfg.maxNotifyItems`
- `selectNotificationItems()` 对符合条件的候选 `.slice(0, maxNotifyItems)`
- 前端:`public/index.html` + `public/app.js`
- 通知设置弹窗增加输入框:`单次最多推送商品数`
- `loadNotifyConfig()` 回填 `n-max-items`
- `collectNotifyConfig()` 提交 `maxNotifyItems`
- 测试通知:`server.mjs``/api/notify-test` 读取 config 中的 `maxNotifyItems`,但测试样例本身仍只有 1 个商品。
## 验证命令
```bash
cd /Users/chick/.Hermes/workspace/research/xianyu-hunter
node --check lib/notifier.mjs
node --check server.mjs
node --check public/app.js
node --input-type=module <<'JS'
import { getNotifyConfig, saveNotifyConfig, sendNotifications } from './lib/notifier.mjs';
const before = getNotifyConfig();
const saved = saveNotifyConfig({ enabled: true, notifyOnlyGood: false, minScore: 50, perItem: true, maxNotifyItems: 3, channels: [] });
const summary = { topItems: Array.from({length: 8}, (_, i) => ({ id: String(1000+i), title: `候选${i+1}`, score: 90-i, verdict: 'recommend', price: '150', location: '测试', reason: '验证单次最大推送数量', href: `https://www.goofish.com/item?id=${1000+i}` })) };
const result = await sendNotifications({ id:'t', name:'maxNotifyItems 验证' }, summary, { force: true, config: saved });
console.log(result.messages.length); // expected: 3
saveNotifyConfig(before);
JS
```
## 运行时注意
修改 `lib/notifier.mjs` / `server.mjs` 后必须重启正在监听 3000 的 `node server.mjs`,否则 Web API 和通知逻辑仍可能是旧代码。