SuperAPI AI 工具集

project-pulse

办公与效率

查看项目

更新于 10-16 06:03

技能介绍

用途

Project Pulse 适用于需要从 GitHub issue 和 PR 中获取产品经理(PM)与架构师视角项目健康状态的场景。它遵循 GitHub 优先的同步模型:GitHub 是事实来源,本地文件只是缓存与分析产物。

适用场景包括:

  • 每日或每周优先级同步。
  • 自主行动前的控制器规划刷新。
  • 检测过期 issue 和优先级漂移。
  • 生成用于讨论的简洁 PM 报告。
  • 将仓库状态转换为执行计划(下一步做什么、哪些可以并行、哪些应延后)。

不适用于:

  • issue 的代码实现。
  • PR 审查或 PR 修复执行。

工作流程

  1. 从参数、PULSE_REPO 或 git remote 解析目标仓库(owner/repo)。
  2. 优先读取本地 pulse 产物(report.json、issues-index.json、prs-index.json)。
  3. 如果缓存过期,从 GitHub 拉取 issue 和 PR 数据(gh issue list、gh pr list)。
  4. 用最新游标(last_max_updated_at)更新本地同步状态(sync-state.json)。
  5. 生成分析产物:issues/ 与 issues-index.json、prs/ 与 prs-index.json、report.json、report.md、sync-state.json。
  6. 从报告信号中得出规划决策:优先级计划(由标签与风险信号映射为 P0/P1/P2)、并行工作流(相互独立的轨道)、阻塞项与前置条件(例如在开展新功能工作前先处理失败的 PR 检查)、供控制器触发器使用的建议后续动作。

默认读取路径(必需)

进行优先级、规划或风险分析时,始终按以下顺序:

  1. 读取 ${PULSE_BASE_DIR}/report.json
  2. 读取 ${PULSE_BASE_DIR}/issues-index.json 和 ${PULSE_BASE_DIR}/prs-index.json
  3. 仅在缓存过期或明确强制刷新时,才从 GitHub 刷新

当 pulse 缓存较新时,不要以直接调用 gh issue list / gh pr list 查询开头。

控制器规则(必需)

当请求涉及优先级、规划、风险、排序或架构状态时:

  • 先运行 project-pulse。
  • 基于 pulse 产物得出结论。
  • 仅在验证特定缺失字段时,才以直接 GitHub API 读取作为回退或验证。

规划与设计指引

把 report.json 当作决策输入,而不仅是状态快照。决策顺序:

  1. 先稳定执行面:若 pr_totals.failing_checks > 0,优先修复 PR,再开启新的实现线程;若 pr_totals.changes_requested > 0,优先收敛评审反馈以降低队列延迟。
  2. 保护最高优先级交付:把 priority:critical 的 issue 视为每日同步队列;保持 WIP 有界,避免在 critical 队列增长时启动中优先级工作。
  3. 控制流程健康:用 stale_issues 和 stalled_prs 检测漂移,并指派负责人或升级动作。
  4. 规划架构增量:用 pulse 结果把工作拆分为独立轨道(runtime/core、policy/controller、quality/security);避免在一次运行中耦合不相关的架构变更。

建议的控制器动作映射:

  • failing_prs 非空 -> 触发 github-pr-fix
  • ready_to_merge_candidates 非空 -> 运行 merge-policy 检查或人工评审门禁
  • priority:critical issue 队列非空且 PR 面稳定 -> 触发 github-issue-solve
  • 无紧急信号 -> no-op / 等待并继续监控

脚本用法

运行 scripts/pulse.sh。

示例:

# Use current git repo remote
skills/project-pulse/scripts/pulse.sh

# Explicit repo
skills/project-pulse/scripts/pulse.sh holon-run/holon

# Include closed issues in analysis
PULSE_INCLUDE_CLOSED=true skills/project-pulse/scripts/pulse.sh holon-run/holon

环境变量

  • PULSE_REPO:可选的仓库覆盖(owner/repo)。
  • PULSE_INCLUDE_CLOSED:true|false(默认 false)。
  • PULSE_MAX_ISSUES:最多拉取的 issue 数(默认 500)。
  • PULSE_MAX_PRS:最多拉取的 PR 数(默认 500)。
  • PULSE_STALE_DAYS:过期阈值天数(默认 14)。
  • PULSE_MAX_AGE_MINUTES:缓存新鲜度阈值(分钟,默认 10)。
  • PULSE_FORCE_REFRESH:true|false,绕过缓存强制同步 GitHub(默认 false)。
  • PULSE_BASE_DIR:仓库本地 pulse 数据的基础目录(默认 $HOME/.holon/project-pulse/<owner>/<repo>)。
  • PULSE_OUT_DIR:分析输出目录(默认 ${PULSE_BASE_DIR})。
  • PULSE_STATE_DIR:本地缓存/游标目录(默认 ${PULSE_BASE_DIR})。
  • PULSE_SPLIT_ISSUES:true|false,将 issue 存为每 issue 一个文件(默认 true)。
  • PULSE_KEEP_RAW_ISSUES:true|false,同时保留聚合的 issues.json(默认 false)。
  • PULSE_SPLIT_PRS:true|false,将 PR 存为每 PR 一个文件(默认 true)。
  • PULSE_KEEP_RAW_PRS:true|false,同时保留聚合的 prs.json(默认 false)。

输出约定

  • ${PULSE_OUT_DIR}/issues/:当 PULSE_SPLIT_ISSUES=true 时,每 issue 一个快照(<number>.json)。
  • ${PULSE_OUT_DIR}/issues-index.json:当 PULSE_SPLIT_ISSUES=true 时用于快速扫描的紧凑索引。
  • ${PULSE_OUT_DIR}/issues.json:当 PULSE_SPLIT_ISSUES=false 或 PULSE_KEEP_RAW_ISSUES=true 时的聚合快照。
  • ${PULSE_OUT_DIR}/prs/:当 PULSE_SPLIT_PRS=true 时,每 PR 一个快照(<number>.json)。
  • ${PULSE_OUT_DIR}/prs-index.json:当 PULSE_SPLIT_PRS=true 时用于快速扫描的紧凑索引。
  • ${PULSE_OUT_DIR}/prs.json:当 PULSE_SPLIT_PRS=false 或 PULSE_KEEP_RAW_PRS=true 时的聚合快照。
  • ${PULSE_OUT_DIR}/report.json:机器可读的 PM 摘要。
  • ${PULSE_OUT_DIR}/report.md:人类可读的 PM 摘要。
  • ${PULSE_STATE_DIR}/sync-state.json:最新游标与同步元数据。

report.json 包含 next_actions,供控制器直接消费。

Schema 详情参见 references/report-schema.md。规划用法参见 references/planning-playbook.md。

说明

  • 默认将写操作(标签/评论编辑)保留在本脚本之外。
  • 本技能为分析优先,默认安全。