# Pulse Deliver

> ---

- Skill: `huanyu-hibiki/pulse-deliver` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add huanyu-hibiki/pulse-deliver`
- Raw SKILL.md: https://api.skillmd.com/api/skills/huanyu-hibiki/pulse-deliver/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Huanyu-Hibiki (https://skillmd.com/u/huanyu-hibiki)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/huanyu-hibiki/pulse-deliver

---

﻿---
name: pulse-deliver
description: Format engagement opportunities into a clickable Markdown report. Deduplicates against history, suggests comment angles, computes time windows. Use when you need a final actionable list. 输出可点击清单、去重、建议评论角度、计算时间窗口。
---

# pulse-deliver · 交付报告

把一批 `Opportunity` 对象渲染成用户**可以直接行动的可点击 Markdown 报告**。

本 skill 是 4 段流水线的**第 4 段**，也是最终输出——用户看到的就是它。

## 何时使用

- 手里有一个或多个 `Opportunity` 对象要展示给用户
- 用户说"**给我一份待评论清单**"
- 用户说"**今天有什么值得互动的**"
- `pulse-enrich` 跑完，需要呈现结果

触发词：**deliver, report, list, show, format, 输出, 报告, 清单, 列表**

## 何时不用

- 用户要**原始 JSON** → 直接打印 Opportunity 对象
- 用户想**发现更多** → 回 `pulse-discover`
- 用户想**重新评分** → 回 `pulse-enrich`

## 工作流

### Step 1 · 接收 Opportunities

输入：`Opportunity` 对象数组（`pulse-enrich` 的输出）。

### Step 2 · 去重

对照本地历史逐条检查：

```bash
# 状态库：~/.pulsehub/state/seen-urls.db (SQLite)
# 表结构：(platform, workId, firstSeenAt, lastShownAt)
```

跳过最近 7 天内已展示过的 URL（窗口可配置）。

保留的 URL 更新 `lastShownAt`。

**Fallback（DB 不可用时）**：SQLite DB 不存在 / 无法写 → 改用文本去重：扫描 `~/.pulsehub/reports/*.md` 历史报告里的 URL，按 (platform, workId) 手动比对。首次运行无历史 → 提示用户"本次未去重（首次运行）"，从本次开始积累报告作为去重依据。

### Step 3 · 计算时间窗口

对每个机会计算"最佳评论窗口"，依据：

- 元数据里的 `publishedAt`
- 平台互动曲线（发布后前 30 分钟内的评论曝光约 10 倍）
- 当前时间

输出：`bestWindowMin`（距发布时间的分钟数，如 30 = "发布后 30 分钟内最佳"）。

已过窗口 → 标记 "late"，但仍然列出。

### Step 4 · 建议评论角度

对每个机会生成一个**建议**（不是成品评论）：

```text
opportunity: {
  title: "想买个无线耳机求推荐",
  signals: { purchaseIntent: true }
}

suggestedAngle: "提你产品的降噪+续航。问对方预算来确认线索质量。
                 不要甩裸链接——让对方先追问。"
```

**关键**：建议只是角度，不是成品评论。用户必须用自己的口吻重写。

### Step 5 · 渲染 Markdown

按下面的模板渲染（**渲染由 AI 按模板直接完成，无独立 renderer 程序**）：

```markdown
# 待评论清单 — 2026-07-27

> 找到 12 个机会（高 3 / 中 6 / 低 3）。已去重，未展示 2 个最近 7 天看过的。

## 🔥 高价值（3）

### 1. 小红书：想买个无线耳机求推荐
- **URL**: [点击打开](https://www.xiaohongshu.com/explore/65f8e7ab...?xsec_token=ABxyz...)
- **作者**: @数码小白
- **发布时间**: 25 分钟前
- **信号**: 求购（"求推荐"）、问题（"预算 500 以内"）
- **评论角度**: 提降噪 + 续航，问预算，不直接甩链接
- **⏰ 时间窗口**: 还有 5 分钟（30 分钟内最佳）
- **评分理由**: 强购买意向，预算明确，时间新鲜

### 2. 抖音：xxx
- ...

## 🟡 中价值（6）
...

## 🔵 低价值（3）
...
```

### Step 6 · 输出

按场景选输出通道：

| 场景 | 输出到 |
|---------|-----------|
| 聊天 / 交互式 | 直接在对话里打印 Markdown |
| 批量 / 定时任务 | 写入 `~/.pulsehub/reports/YYYY-MM-DD-HH.md` |
| 用户指定文件 | 写到指定路径 |
| API / 程序化 | 返回 JSON Report 对象 |

## 示例

### 示例 1：聊天内报告

**用户**："今天有什么值得评论的？"

```
1. （假设 discover → resolve → enrich 已跑完）
2. pulse-deliver 收到 12 个 Opportunity
3. 去重：2 个最近 7 天已展示
4. 渲染 Markdown：10 个机会按评分分组
5. 打印到对话
```

### 示例 2：定时报告

**用户**："每天早上 9 点给我一份小红书待评论清单"

```
1. （cron / 调度器触发）
2. pulse-discover 以 topic_search 模式搜跟踪关键词
3. pulse-resolve 标准化所有 URL
4. pulse-enrich 补全 + 评分
5. pulse-deliver → 写入 ~/.pulsehub/reports/2026-07-27-09.md
6. （可选）webhook 通知用户
```

### 示例 3：过滤视图

**用户**："只看高价值的"

```
1. pulse-deliver 加过滤条件：score === 'high'
2. 只渲染 🔥 段
3. 跳过 🟡 和 🔵
```

## 输出格式硬约束

- **URL 必须可点击**——保留 `xsec_token` 和所有必要参数
- **Markdown 必须在标准查看器里正常渲染**——不用私有扩展
- **时间窗口必须显眼**——用 ⏰ emoji + 绝对时间
- **评论角度只能是建议**——绝不给成品评论
- **绝不输出可直接复制粘贴的自动评论**

## 重要说明

- **去重是本地的**——无云端、无同步，每个用户自己的历史
- **状态库只追加**——可以从历史重建报告
- **时间窗口是估算**——基于平台互动曲线，不是精确科学

## 不要做

- **绝不输出成品评论**——角度建议必须由用户用自己的口吻重写后才可用
- **不丢 URL 参数**——`xsec_token` 等参数丢了链接就废
- **不假装时间窗口**——已过窗口如实标 late，不伪造紧迫感

## 失败分支

| 触发条件 | 一线处理 | 仍失败兜底 |
|---------|---------|-----------|
| Opportunity 输入为空 | 回上游检查 enrich 是否产出 | 无机会 ≠ 报错——输出"今日无新机会"正常报告 |
| 写报告目录失败（`~/.pulsehub/reports/` 建不了） | 手工创建目录重试 | 降级为聊天内直接输出 Markdown，提示用户目录问题 |
| 时间窗口已过（全部 late） | 如实标 ⏰ 已过窗口 | 仍列出但排到低价值区，不假装还在窗口内 |

## 工具速查

| 工具 | 位置 | 用途 |
|------|----------|---------|
| Renderer | AI 按本文件 Step 5 模板直接渲染（无独立程序） | Markdown 渲染 |
| State DB | `~/.pulsehub/state/seen-urls.db` | 去重（不可用时见 Step 2 Fallback） |
| 报告模板 | 本文件 Step 5 内嵌模板 | 输出格式 |

