← 返回 Skills 市场
xhmqq616

Dragon Session Compactor

作者 xhmqq616 · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ⚠ suspicious
85
总下载
0
收藏
0
当前安装
1
版本数
在 OpenClaw 中安装
/install dragon-session-compactor
功能描述
上下文压缩技能。当对话越来越长、token快爆的时候,自动压缩旧消息为摘要,保留最近上下文。 触发条件: - "压缩会话"、"compact"、"上下文满了" - 检测到消息超过阈值(默认100条或token估计超过80000) - 手动调用 $compact 无外部依赖,纯Node.js实现。
使用说明 (SKILL.md)

Session Compactor - 上下文压缩系统

核心概念

原始会话: [msg1, msg2, ..., msgN]
    ↓ 检测到需要压缩
    ↓ 提取关键信息
    ↓ 生成摘要
压缩后会话: [System(摘要), msg(N-3), msg(N-2), msg(N-1), msgN]

配置

参数 默认值 说明
preserveRecent 4 保留最近N条消息
maxTokens 80000 超过此token数触发压缩
summaryMaxTokens 2000 摘要最大token数
storePath ./.clawsession.json 会话存储路径

数据结构

Session 文件格式 (.clawsession.json)

{
  "version": 1,
  "createdAt": "2026-04-06T...",
  "updatedAt": "2026-04-06T...",
  "messages": [...],
  "compactionCount": 0,
  "totalTokens": 12345
}

消息格式

{
  "role": "user|assistant|system|tool",
  "content": "...",
  "timestamp": "ISO8601",
  "toolUse": {
    "name": "read_file",
    "input": "..."
  }
}

快速使用

# 手动压缩
node scripts/compact.mjs run

# 检查当前会话状态
node scripts/compact.mjs status

# 强制压缩(忽略阈值)
node scripts/compact.mjs compact --force

# 查看压缩历史
node scripts/compact.mjs history

API 接口

const { SessionCompactor } = require('./scripts/compact.mjs');

const compactor = new SessionCompactor({
  preserveRecent: 4,
  maxTokens: 80000,
  storePath: './.clawsession.json'
});

// 检查是否需要压缩
const needsCompaction = compactor.shouldCompact();

// 执行压缩
const result = compactor.compact();
console.log(`压缩了${result.removedCount}条消息`);

// 估算当前token
const tokens = compactor.estimateTokens();
console.log(`当前约${tokens} tokens`);

压缩算法

1. 提取关键信息

从旧消息中提取:

  • 关键文件路径(.rs, .py, .ts, .json, .md)
  • 工具调用记录(bash, read_file, write_file等)
  • 待办事项(todo, next, pending, follow up)
  • 用户请求(最近的3条用户消息)
  • AI响应摘要(每条AI响应的核心内容)

2. 生成摘要格式

\x3Csummary>
## 会话摘要

**压缩次数**: 2
**时间范围**: 2026-04-06 10:00 - 16:00
**总消息数**: 48条(已压缩2次)

### 关键操作
- 工具调用: bash(x3), read_file(x5), write_file(x2)
- 主要文件: src/main.py, SKILL.md, evolution-log.md

### 用户主要请求
1. 创建 efficiency-hub 技能
2. 发布 efficiency-hub 到 Clawhub
3. 学习 Claw Code 架构

### 待完成事项
- 继续改进 chat-memory-v2
- 完善工具注册表

### 最近消息(未压缩)
- [保留最近4条消息原文]
\x3C/summary>

3. 增量压缩

如果之前已经压缩过,摘要会累积:

\x3Csummary>
## 会话摘要

**压缩次数**: 3

### 早期上下文(压缩于 10:00)
[第一次压缩的摘要内容]

### 近期上下文(压缩于 14:00)
[第二次压缩的摘要内容]

### 最新摘要(压缩于 16:00)
[第三次压缩的摘要内容]

### 最近消息
[保留的4条消息]
\x3C/summary>

Token 估算

简单估算(无需外部库):

tokens ≈ 总字符数 / 4 + 工具调用次数 * 10

文件清单

session-compactor/
├── SKILL.md              # 本文件
├── scripts/
│   └── compact.mjs       # 核心压缩逻辑
└── references/
    └── compaction-log.md # 压缩操作日志

使用场景

  1. 自动触发 — 在 heartbeat 或 cron 任务中检查是否需要压缩
  2. 手动调用 — 用户说"压缩一下"
  3. 定时压缩 — 每小时自动检查

集成到 OpenClaw

在 HEARTBEAT.md 中加入:

## 自动压缩检查
每30分钟检查一次会话长度,超过阈值自动压缩

龙虾王子自我进化的成果 🦞

安全使用建议
这个技能在功能上与描述一致:它会把旧消息汇总为摘要并把会话写入磁盘(默认 ./.clawsession.json)。关注两点:1) check-compact.mjs 的日志路径会向上跨越好几级目录写入 .clawsession-log.json——这可能把日志写到技能目录之外,取决于你如何运行它;2) 如果你将其加入 heartbeat/cron,会定期自动运行并持续修改这些文件。建议在安装前:a) 检查并(如需要)修改 DEFAULT_CONFIG.storePath 和 LOG_PATH 以指向你认可的位置;b) 确认运行该脚本的用户/agent 有适当的文件访问权限且不会意外覆盖敏感文件;c) 如果接受自动定时运行,请决定合适的频率并监控首次几次运行的输出。若你希望我,我可以给出如何安全地修改脚本以把日志与会话文件限定在技能目录内并添加配置选项。
功能分析
Type: OpenClaw Skill Name: dragon-session-compactor Version: 1.0.0 The skill is a utility for compressing long conversation histories to manage token limits by summarizing old messages. The implementation in `compact.mjs` and `check-compact.mjs` uses local file I/O to manage a session JSON file and performs text-based summarization without any network requests, shell command execution, or obfuscation. All behaviors, including the regex-based extraction of file paths and tool calls from message history, are strictly aligned with the stated purpose of context management.
能力评估
Purpose & Capability
声明的目的(压缩长会话并保留最近上下文)与包含的脚本行为一致:compact.mjs 提供压缩、估算 tokens、生成摘要并将结果保存在会话文件(默认 ./.clawsession.json)中。没有网络调用或外部依赖,功能实现与描述对等。
Instruction Scope
SKILL.md 与脚本指令主要局限在会话处理,但脚本会读写磁盘:默认会话文件 './.clawsession.json'(相对当前工作目录)和 check-compact.mjs 中的 LOG_PATH,它通过 path.join(__dirname,'..','..','..','..','.clawsession-log.json') 向上跨越多个目录写入日志。这意味着日志可能被写到技能目录之外的父目录(取决于安装/运行位置),这是在元数据中未声明的文件系统访问/写入。SKILL.md 还建议将检查加入 heartbeat/cron,这会导致定期自动运行——合规但需注意频率与权限。
Install Mechanism
这是说明+脚本的技能包,没有安装脚本或从网络下载的依赖。没有远程提取、无第三方包安装,风险较低。
Credentials
技能不要求任何环境变量或外部凭据,代码也未读取 process.env。唯一需要的是对文件系统(读/写会话文件和日志文件)的访问权限,这与其目的(持久化会话/日志)是可以解释的,但写入父目录的位置应当明确和可配置。
Persistence & Privilege
flags 中没有 always:true,默认允许模型调用(正常)。不过 SKILL.md 建议周期性检查(heartbeat/cron),配合 check-compact.mjs 会导致定期执行并持续写入日志/会话文件。自动化执行本身是合理的,但与“写入到父目录”的行为组合增加了潜在影响范围——应确保运行位置与文件路径是受控的。
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install dragon-session-compactor
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /dragon-session-compactor 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.0
Session Compactor v1.0.0 - Initial release of a pure Node.js context compaction tool for long conversations. - Automatically summarizes old messages when conversation exceeds message or token limits (default: 100 messages or 80,000 tokens). - Supports manual and threshold-triggered compaction, with CLI commands for compacting, checking status, and viewing history. - Retains recent messages (default: last 4), extracts key info, and generates incremental conversation summaries. - No external dependencies; uses `.clawsession.json` for structured session storage. - Intended for OpenClaw and similar LLM chat systems to prevent context overflow.
元数据
Slug dragon-session-compactor
版本 1.0.0
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 1
常见问题

Dragon Session Compactor 是什么?

上下文压缩技能。当对话越来越长、token快爆的时候,自动压缩旧消息为摘要,保留最近上下文。 触发条件: - "压缩会话"、"compact"、"上下文满了" - 检测到消息超过阈值(默认100条或token估计超过80000) - 手动调用 $compact 无外部依赖,纯Node.js实现。 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 85 次。

如何安装 Dragon Session Compactor?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install dragon-session-compactor」即可一键安装,无需额外配置。

Dragon Session Compactor 是免费的吗?

是的,Dragon Session Compactor 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Dragon Session Compactor 支持哪些平台?

Dragon Session Compactor 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Dragon Session Compactor?

由 xhmqq616(@xhmqq616)开发并维护,当前版本 v1.0.0。

💬 留言讨论