@seanyao/roll 2026.510.6 → 2026.510.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -1
- package/bin/roll +31 -26
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
3
|
## 2026.05.10
|
|
4
|
+
- **Added**: roll-loop — BACKLOG 自主执行器,支持调度、跨 Agent 路由和失败处理,让 AI 自主推进项目任务
|
|
5
|
+
- **Added**: roll-brief — Feature完成汇报、每日晨报、按需简报,一句话掌握项目状态和发布就绪情况
|
|
6
|
+
- **Added**: roll-.dream — 每晚代码架构健康巡检,自动产出 REFACTOR 条目,架构问题持续浮出水面
|
|
7
|
+
- **Added**: roll-build 架构摩擦信号 — 实现遇阻时自动向 BACKLOG 写入 REFACTOR 标记,技术债持续可见
|
|
4
8
|
- **Added**: E2E 自动沉淀 — 每个 Story 交付时自动写一个端到端测试,项目逐步积累可回放的 E2E 套件
|
|
5
9
|
- **Added**: CI E2E 门禁 — 模板 CI 每次推送自动跑 E2E 测试,没有 E2E 时静默跳过不阻塞
|
|
6
10
|
- **Added**: CI 红灯分诊 — 按严重程度分类 CI 失败,自动路由到 backlog 变成可执行的修复项
|
|
7
11
|
- **Added**: roll-debug 自动修复 — 诊断后若根因在项目源码内,自动进入 TCR 修复流程并回验
|
|
8
12
|
- **Added**: Changelog 自动生成 — 每次部署后自动更新,首次运行时回填全部历史记录
|
|
9
|
-
- **Fixed**: roll-release 补齐 GitHub Release 创建步骤 — 修复版本更新提醒从不生效的问题,并回填全部 40 个历史 tag
|
|
10
13
|
- **Added**: roll status/update 显示最近更新 — 运行 `roll status` 或 `roll update` 时展示最近 3 个版本的 changelog
|
|
14
|
+
- **Fixed**: roll-release 补齐 GitHub Release 创建步骤 — 修复版本更新提醒从不生效的问题,并回填全部 40 个历史 tag
|
|
15
|
+
- **Fixed**: Agent 调用层统一 — 移除所有 claude -p 硬编码,统一 agent 抽象层,支持 Claude/Kimi/Pi/Codex/OpenCode
|
|
16
|
+
- **Fixed**: Kimi CLI 解析修复 — 剥离 YAML frontmatter 中的 `---` 分隔符,避免 Kimi 调用时解析崩溃
|
|
17
|
+
- **Fixed**: 版本比较改用 sort -V,防止旧版本号被误判为最新
|
|
18
|
+
- **Fixed**: dashboard 命令列表补全,`roll --help` 现在展示全部可用命令
|
|
19
|
+
- **Fixed**: `roll release` 命令补全到 usage() 帮助中
|
|
20
|
+
- **Fixed**: 版本更新后主动清缓存 — 检测到当前运行版本更新时自动清缓存,避免旧版本幽灵提示
|
|
21
|
+
- **Fixed**: release.sh 自洽 — 内联 agent 检测和 changelog 同步,发版流程不再依赖外部调用
|
|
11
22
|
|
|
12
23
|
## 2026.05.09
|
|
13
24
|
- **Added**: roll-peer 跨 Agent 代码评审 — 支持 Claude Code、Kimi CLI、DeepSeek TUI、Codex CLI 多工具协同评审 (by @seanyao)
|
package/bin/roll
CHANGED
|
@@ -4,7 +4,7 @@ set -euo pipefail
|
|
|
4
4
|
# Roll — AI Agent Convention Manager
|
|
5
5
|
# Single source of truth for how all AI coding agents behave.
|
|
6
6
|
|
|
7
|
-
VERSION="2026.510.
|
|
7
|
+
VERSION="2026.510.8"
|
|
8
8
|
ROLL_HOME="${ROLL_HOME:-${HOME}/.roll}"
|
|
9
9
|
ROLL_CONFIG="${ROLL_HOME}/config.yaml"
|
|
10
10
|
ROLL_GLOBAL="${ROLL_HOME}/conventions/global"
|
|
@@ -1662,18 +1662,24 @@ _project_agent() {
|
|
|
1662
1662
|
fi
|
|
1663
1663
|
}
|
|
1664
1664
|
|
|
1665
|
+
_skill_content() {
|
|
1666
|
+
# Strip YAML frontmatter (---...---) — it's roll-internal metadata, not agent instructions
|
|
1667
|
+
awk 'NR==1 && /^---$/{skip=1;next} skip && /^---$/{skip=0;next} !skip{print}' "$1"
|
|
1668
|
+
}
|
|
1669
|
+
|
|
1665
1670
|
_agent_run_skill() {
|
|
1666
1671
|
local skill="$1"
|
|
1667
1672
|
local agent; agent=$(_project_agent)
|
|
1668
1673
|
local skill_file="${ROLL_HOME}/skills/${skill}/SKILL.md"
|
|
1669
1674
|
[[ -f "$skill_file" ]] || { err "Skill not found: ${skill}"; return 1; }
|
|
1675
|
+
local content; content=$(_skill_content "$skill_file")
|
|
1670
1676
|
case "$agent" in
|
|
1671
|
-
claude) claude -p "$
|
|
1672
|
-
kimi) kimi --quiet -p "$
|
|
1673
|
-
deepseek) deepseek "$
|
|
1674
|
-
pi) pi -p "$
|
|
1675
|
-
codex) codex exec
|
|
1676
|
-
opencode) opencode run "$
|
|
1677
|
+
claude) claude -p "$content" ;;
|
|
1678
|
+
kimi) kimi --quiet -p "$content" ;;
|
|
1679
|
+
deepseek) deepseek "$content" ;;
|
|
1680
|
+
pi) pi -p "$content" ;;
|
|
1681
|
+
codex) codex exec "$content" ;;
|
|
1682
|
+
opencode) opencode run "$content" ;;
|
|
1677
1683
|
*) err "Unknown agent '${agent}'. Run: roll agent use <claude|kimi|deepseek|pi|codex|opencode>"; return 1 ;;
|
|
1678
1684
|
esac
|
|
1679
1685
|
}
|
|
@@ -1729,13 +1735,15 @@ _LOOP_ALERT="${HOME}/.shared/roll/loop/ALERT.md"
|
|
|
1729
1735
|
_agent_skill_cmd() {
|
|
1730
1736
|
local skill_path="$1"
|
|
1731
1737
|
local agent; agent=$(_project_agent)
|
|
1738
|
+
# Strip YAML frontmatter inline for cron commands
|
|
1739
|
+
local strip="awk 'NR==1 && /^---$/{skip=1;next} skip && /^---$/{skip=0;next} !skip{print}' '${skill_path}'"
|
|
1732
1740
|
case "$agent" in
|
|
1733
|
-
claude) echo "claude -p \"\$(
|
|
1734
|
-
kimi) echo "kimi --quiet -p \"\$(
|
|
1735
|
-
deepseek) echo "deepseek \"\$(
|
|
1736
|
-
pi) echo "pi -p \"\$(
|
|
1737
|
-
codex) echo "codex exec
|
|
1738
|
-
opencode) echo "opencode run \"\$(
|
|
1741
|
+
claude) echo "claude -p \"\$(${strip})\"" ;;
|
|
1742
|
+
kimi) echo "kimi --quiet -p \"\$(${strip})\"" ;;
|
|
1743
|
+
deepseek) echo "deepseek \"\$(${strip})\"" ;;
|
|
1744
|
+
pi) echo "pi -p \"\$(${strip})\"" ;;
|
|
1745
|
+
codex) echo "codex exec \"\$(${strip})\"" ;;
|
|
1746
|
+
opencode) echo "opencode run \"\$(${strip})\"" ;;
|
|
1739
1747
|
*) err "Unknown agent '${agent}'. Run: roll agent use <claude|kimi|deepseek|pi|codex|opencode>"; return 1 ;;
|
|
1740
1748
|
esac
|
|
1741
1749
|
}
|
|
@@ -1861,18 +1869,7 @@ cmd_brief() {
|
|
|
1861
1869
|
}
|
|
1862
1870
|
|
|
1863
1871
|
cmd_release() {
|
|
1864
|
-
|
|
1865
|
-
if [[ ! -f "$script" ]]; then
|
|
1866
|
-
err "scripts/release.sh not found — run this command from the roll project root."
|
|
1867
|
-
exit 1
|
|
1868
|
-
fi
|
|
1869
|
-
# Sync CHANGELOG.md before releasing, using the configured agent
|
|
1870
|
-
local last_tag; last_tag=$(git tag --sort=-version:refname | grep "^v" | head -1)
|
|
1871
|
-
if [[ -n "$last_tag" ]] && ! git diff "${last_tag}..HEAD" --name-only | grep -q "CHANGELOG.md"; then
|
|
1872
|
-
info "CHANGELOG.md not updated since ${last_tag}, syncing via $(_project_agent)..."
|
|
1873
|
-
_agent_run_skill "roll-.changelog"
|
|
1874
|
-
fi
|
|
1875
|
-
bash "$script" "$@"
|
|
1872
|
+
_agent_run_skill "roll-release"
|
|
1876
1873
|
}
|
|
1877
1874
|
|
|
1878
1875
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
@@ -1906,7 +1903,8 @@ _dashboard() {
|
|
|
1906
1903
|
fi
|
|
1907
1904
|
|
|
1908
1905
|
echo ""
|
|
1909
|
-
echo "
|
|
1906
|
+
echo " loop <on|off|now|status|resume|reset> · brief · agent use <name> · release"
|
|
1907
|
+
echo " setup · update · init · status · peer · help"
|
|
1910
1908
|
echo ""
|
|
1911
1909
|
}
|
|
1912
1910
|
|
|
@@ -1935,6 +1933,7 @@ usage() {
|
|
|
1935
1933
|
echo " loop <on|off|now|status|resume|reset> [Autonomous] Manage scheduled BACKLOG executor 管理自主执行循环"
|
|
1936
1934
|
echo " brief [Digest] Show latest owner brief (regenerate if stale) 展示最新简报"
|
|
1937
1935
|
echo " agent [use <name>|list] [Config] Per-project agent selection 切换项目 agent"
|
|
1936
|
+
echo " release [Publish] Sync changelog + version bump + npm publish 同步日志并发版"
|
|
1938
1937
|
echo ""
|
|
1939
1938
|
echo "Examples / 示例:"
|
|
1940
1939
|
echo " roll setup # New machine: first-time install 新机器首次安装"
|
|
@@ -2016,6 +2015,12 @@ _notify_update() {
|
|
|
2016
2015
|
[[ -f "$cache" ]] || return
|
|
2017
2016
|
local latest; latest=$(awk '{print $2}' "$cache" 2>/dev/null || true)
|
|
2018
2017
|
[[ -z "$latest" || "$latest" == "$VERSION" ]] && return
|
|
2018
|
+
local newer; newer=$(printf '%s\n%s\n' "$VERSION" "$latest" | sort -V | tail -1)
|
|
2019
|
+
if [[ "$newer" == "$VERSION" ]]; then
|
|
2020
|
+
# Running version is newer than cached — stale cache, clear it
|
|
2021
|
+
rm -f "$cache"
|
|
2022
|
+
return
|
|
2023
|
+
fi
|
|
2019
2024
|
echo ""
|
|
2020
2025
|
warn "v${latest} available — run 'roll update' to upgrade 有新版本 v${latest} — 运行 'roll update' 升级"
|
|
2021
2026
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seanyao/roll",
|
|
3
|
-
"version": "2026.510.
|
|
3
|
+
"version": "2026.510.8",
|
|
4
4
|
"description": "Roll — Roll out features with AI agents",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "find tests/unit tests/integration -name '*.bats' | sort | xargs ./tests/helpers/bats-core/bin/bats"
|