skills-experimental/compact-message-grouping/SKILL.md
Group conversation messages at API-round boundaries for compact/summarization. One group per API round-trip, split at new assistant response IDs. Use when: - Preparing messages for compact/summarization - Splitting conversation into logical API rounds - Identifying safe split points for context reduction Keywords: compact, message grouping, API round, conversation split, context reduction
npx skillsauth add bianhaifeng789-hue/openclaw-config compact-message-groupingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
基于 Claude Code services/compact/grouping.ts 的消息分组算法,用于 compact/摘要前的消息分组。
每个 API 轮次 = 一个组
边界触发条件: 新的 assistant 响应开始(message.id 不同于上一个 assistant)
tool_use 在下一个 assistant 轮次前必须被解决[tool_use(id=X), tool_result, tool_use(id=X)] 在同一组function groupMessagesByApiRound(messages) {
const groups = []
let current = []
let lastAssistantId = undefined
for (const msg of messages) {
// 新 assistant 响应开始 → 触发边界
if (
msg.type === 'assistant' &&
msg.message.id !== lastAssistantId &&
current.length > 0
) {
groups.push(current)
current = [msg]
} else {
current.push(msg)
}
if (msg.type === 'assistant') {
lastAssistantId = msg.message.id
}
}
if (current.length > 0) {
groups.push(current)
}
return groups
}
// 将消息分成 API 轮次组
const groups = groupMessagesByApiRound(messages)
// 保留最近 N 组,摘要其余
const keepGroups = 3
const toSummarize = groups.slice(0, -keepGroups)
const toKeep = groups.slice(-keepGroups)
// 对 toSummarize 生成摘要
const summary = await generateSummary(toSummarize.flat())
const groups = groupMessagesByApiRound(messages)
groups.forEach((group, i) => {
const tokens = estimateTokens(group)
console.log(`Round ${i}: ${group.length} messages, ~${tokens} tokens`)
})
| 特性 | Claude Code | OpenClaw 适配 |
|------|-------------|---------------|
| 消息 ID | message.message.id(Anthropic API) | 需要适配 OpenClaw 消息格式 |
| 工具结果配对 | ensureToolResultPairing 修复悬空 | 不实现 |
| 提取原因 | 打破 compact.ts ↔ compactMessages.ts 循环依赖 | 直接使用 |
business
IAA 日报飞书输出能力。 支持把固定 CSV 模板一键转换成: - 中文运营结论 - 飞书卡片 JSON - 飞书发送载荷 Use when: - 需要把 IAA 日报直接发到飞书 - 需要从 CSV 一键生成运营日报
data-ai
IAA日报分析模型 功能: - 渠道日报自动分析 - 小时级+日级ROI联动判断 - 按地区输出加量/降量/停投建议 - 按产品类型输出阈值 - 自动识别利润区/观察区/止损区 Use when: - 分析每天投放数据 - 生成运营日报结论 - 判断是否加量/降量/停投 - 对比美加澳/日韩表现 Keywords: - 日报模型, 投放日报, 加量, 降量, 停投, ROI日报, 分地区分析
data-ai
IAA固定日报分析模板 功能: - 固定字段模板(可直接贴每天数据) - 自动输出总盘结论 - 自动输出美加澳/日韩结论 - 自动给出加量/降量/停投建议 - 适配文件修复/清理两类产品 Use when: - 需要固定日报格式 - 每天复盘渠道表现 - 给运营团队出统一结论 Keywords: - 固定模板, 日报模板, ROI模板, IAA日报, 运营模板
development
# HyperlinkPool Pattern Skill HyperlinkPool Pattern - HyperlinkPool class + strings array + stringMap + Index 0 no hyperlink + intern(hyperlink) + get(id) + undefined handling + 5-minute reset + OSC8 hyperlink interning。 ## 功能概述 从Claude Code的ink/screen.ts提取的HyperlinkPool模式,用于OpenClaw的OSC8超链接池管理。 ## 核心机制 ### HyperlinkPool Class ```typescript export class HyperlinkPool { private strings: string[] = [''] // Index 0 = no hyperlink private stringMap = new Map<string, number>() // strings