sarthib7-janitor

TotalClaw 作者 totalclaw

OpenClaw AI 智能体清理与会话管理技能,自动清理缓存、优化内存,实时监控 token 用量并智能修剪旧会话,防止上下文溢出。

安装 / 下载方式

TotalClaw CLI推荐
totalclaw install totalclaw:totalclaw~sarthib7-janitor
cURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/totalclaw%3Atotalclaw~sarthib7-janitor/file -o sarthib7-janitor.md
## 概述(中文)

OpenClaw AI 智能体清理与会话管理技能,自动清理缓存、优化内存,实时监控 token 用量并智能修剪旧会话,防止上下文溢出。

## 技能正文

# Janitor - AI 智能体清理与会话管理技能

## 概述

**Janitor** 是面向 OpenClaw AI 智能体的智能清理与会话管理技能。它自动管理缓存、优化内存使用,并通过监控 token 用量与智能修剪旧会话 **防止上下文溢出**。

可将 Janitor 视为 **AI 智能体的智能维护团队**,负责:
- 🧹 清理缓存文件以优化 token 使用
- 🗑️ 释放未用内存与 RAM
- 🔍 **实时监控上下文用量(新!)**
- 🤖 **自动修剪旧会话(新!)**
- 📦 **删除前归档会话(新!)**
- 🚨 **95% 上下文用量时紧急恢复(新!)**
- 📊 向智能体报告清理统计
- 🔔 **多渠道通知(新!)**

## 快速开始

### 安装

```bash
cd /Users/sarthiborkar/Desktop/butler-main/janitor
npm install  # 无需依赖!
```

### 基本用法

```javascript
const Janitor = require('./src/Janitor');

// 创建 janitor 实例
const janitor = new Janitor();

// 运行清理
const result = await janitor.cleanup();
console.log(result);
// {
//   filesDeleted: 42,
//   spaceSaved: "1.2 MB",
//   duration: "150ms",
//   memoryFreed: true
// }

// 获取报告
const report = await janitor.report();
```

## 功能

### 1. 缓存清理

自动清理占用磁盘空间并拖慢操作的缓存文件:

```javascript
const janitor = new Janitor();

// 清理缓存文件
await janitor.cleanup();
```

**清理项:**
- `node_modules/.cache/**` - Node 模块缓存
- `**/*.cache` - 通用缓存文件
- `.DS_Store` - macOS 元数据文件
- `dist/**/*.map` - Source map 文件
- `coverage/**` - 测试覆盖率报告
- `tmp/**` - 临时文件
- `**/*.log` - 旧日志文件(>7 天)

### 2. 内存优化

释放未用内存以优化 token 使用:

```javascript
const janitor = new Janitor();

// 释放内存
janitor.freeMemory();

// 检查内存使用
const memoryStats = janitor.getMemoryUsage();
console.log(memoryStats);
// {
//   rss: "45.2 MB",
//   heapTotal: "12.8 MB",
//   heapUsed: "8.4 MB",
//   external: "1.2 MB"
// }
```

**内存操作:**
- 触发垃圾回收(若已启用)
- 清除 Node.js require 缓存
- 报告内存使用统计

### 3. 未使用文件清理

删除超过可配置期限未访问的文件:

```javascript
const janitor = new Janitor({
  unusedFileAgeDays: 7  // 删除 7 天未访问的文件
});

await janitor.cleanup();
```

**安全特性:**
- 永不删除重要文件(package.json、README.md、src/、.git/ 等)
- 可配置年龄阈值
- 删除前报告文件列表

### 4. Push 后清理

GitHub push 后自动清理:

```javascript
const janitor = new Janitor({
  autoCleanAfterPush: true
});

// git push 之后
await janitor.cleanupAfterPush();
```

**使用场景:**
推送到 GitHub 后,本地不再需要临时构建产物、缓存文件与覆盖率报告。

### 5. 报告与统计

获取详细清理统计:

```javascript
const janitor = new Janitor();

// 运行若干次清理
await janitor.cleanup();
await janitor.cleanup();

// 获取统计
const stats = janitor.getStats();
console.log(stats);
// {
//   totalCleanups: 2,
//   totalFilesDeleted: 84,
//   totalSpaceSaved: "2.4 MB",
//   memoryUsage: { ... }
// }

// 获取含建议的完整报告
const report = await janitor.report();
console.log(report);
// {
//   timestamp: "2026-02-07T...",
//   status: "healthy",
//   stats: { ... },
//   recommendations: [
//     "Regular cleanup recommended."
//   ]
// }
```

## 配置

### 默认配置

```javascript
{
  enabled: true,
  autoCleanAfterPush: true,
  unusedFileAgeDays: 7,
  cachePatterns: [
    '**/*.cache',
    '**/node_modules/.cache/**',
    '**/.DS_Store',
    '**/dist/**/*.map',
    '**/tmp/**',
    '**/*.log',
    '**/coverage/**'
  ]
}
```

### 自定义配置

```javascript
const janitor = new Janitor({
  enabled: true,
  autoCleanAfterPush: false,  // 禁用 push 后自动清理
  unusedFileAgeDays: 14,       // 保留文件 2 周
  cachePatterns: [
    '**/*.cache',
    '**/my-custom-cache/**'
  ]
});
```

## 与 Butler 集成

### 方式 1:直接集成

```javascript
const Butler = require('../src/Butler');
const Janitor = require('../janitor/src/Janitor');

const butler = new Butler();
const janitor = new Janitor();

// 生成智能体并在之后清理
async function runTaskWithCleanup() {
  const results = await butler.spawnAgent(
    'DataAnalysis',
    'Analyze data and generate report',
    200000
  );

  // 任务后清理
  const cleanupResult = await janitor.cleanup();
  console.log('Cleanup:', cleanupResult);

  return results;
}

runTaskWithCleanup();
```

### 方式 2:自动清理钩子

```javascript
const Butler = require('../src/Butler');
const Janitor = require('../janitor/src/Janitor');

class ButlerWithJanitor extends Butler {
  constructor() {
    super();
    this.janitor = new Janitor({ autoCleanAfterPush: true });
  }

  async spawnAgent(...args) {
    const result = await super.spawnAgent(...args);

    // 智能体完成后自动清理
    await this.janitor.cleanup();

    return result;
  }
}

const butler = new ButlerWithJanitor();
```

## 示例

### 示例 1:基础清理

```javascript
const Janitor = require('./src/Janitor');

async function basicCleanup() {
  const janitor = new Janitor();

  console.log('Starting cleanup...');
  const result = await janitor.cleanup();

  console.log(`✅ Deleted ${result.filesDeleted} files`);
  console.log(`✅ Saved ${result.spaceSaved}`);
}

basicCleanup();
```

### 示例 2:定时清理

```javascript
const Janitor = require('./src/Janitor');

const janitor = new Janitor();

// 每小时运行清理
setInterval(async () => {
  console.log('🧹 Running scheduled cleanup...');
  const result = await janitor.cleanup();
  console.log(`Cleaned: ${result.spaceSaved}`);
}, 60 * 60 * 1000); // 1 hour
```

### 示例 3:Git Hook 集成

创建 `.git/hooks/post-commit`:

```bash
#!/bin/sh
node janitor/src/index.js cleanup --after-push
```

### 示例 4:监控与告警

```javascript
const Janitor = require('./src/Janitor');

const janitor = new Janitor();

async function monitor() {
  const report = await janitor.report();

  if (report.recommendations.length > 0) {
    console.log('⚠️  Recommendations:');
    report.recommendations.forEach(r => console.log(`   - ${r}`));
  }

  // 发送到监控系统
  sendToMonitoring(report);
}

setInterval(monitor, 5 * 60 * 1000); // Every 5 minutes
```

## CLI 用法

创建 `src/index.js`:

```javascript
#!/usr/bin/env node
const Janitor = require('./Janitor');

const janitor = new Janitor();

const args = process.argv.slice(2);
const command = args[0];

(async () => {
  switch (command) {
    case 'cleanup':
      const result = await janitor.cleanup();
      console.log('Result:', result);
      break;

    case 'report':
      const report = await janitor.report();
      console.log(JSON.stringify(report, null, 2));
      break;

    case 'stats':
      const stats = janitor.getStats();
      console.log(stats);
      break;

    default:
      console.log('Usage: node index.js [cleanup|report|stats]');
  }
})();
```

然后使用:

```bash
node janitor/src/index.js cleanup
node janitor/src/index.js report
node janitor/src/index.js stats
```

## API 参考

### 构造函数

```javascript
new Janitor(config?: object)
```

### 方法

#### `cleanup(workingDir?: string): Promise<CleanupResult>`

运行完整清理操作。

**返回:**
```javascript
{
  filesDeleted: number,
  spaceSaved: string,
  duration: string,
  memoryFreed: boolean
}
```

#### `cleanupAfterPush(): Promise<CleanupResult | null>`

Push 后自动清理(若已启用)。

#### `freeMemory(): void`

通过触发垃圾回收与清除缓存释放内存。

#### `getStats(): object`

获取清理统计。

#### `report(): Promise<Report>`

生成含建议的综合报告。

#### `getMemoryUsage(): object`

获取当前内存使用统计。

## 最佳实践

### 1. 定期清理

定期运行清理以防止缓存堆积:

```javascript
// 每小时
setInterval(() => janitor.cleanup(), 60 * 60 * 1000);
```

### 2. 任务后清理

完成任务后始终清理:

```javascript
async function runTask() {
  // 执行工作
  await butler.spawnAgent(...);

  // 清理
  await janitor.cleanup();
}
```

### 3. 监控内存

跟踪内存使用以检测泄漏:

```javascript
const memUsage = janitor.getMemoryUsage();
console.log('Heap used:', memUsage.heapUsed);
```

### 4. 安全删除

Janitor 自动保护重要文件,也可添加自定义保护:

```javascript
// 如需要可覆盖 isImportant 方法
janitor.isImportant = (filePath) => {
  const important = ['my-important-file.txt'];
  return important.some(name => filePath.includes(name));
};
```

## 性能

- 清理耗时:50–500ms(取决于文件数量)
- 内存开销:<5MB
- 无外部依赖
- 可安全并发操作

## 故障排除

### 问题:内存使用过高

**解决:** 运行 `janitor.freeMemory()` 触发垃圾回收。

### 问题:文件未被删除

**解决:** 检查文件是否在受保护目录(node_modules、.git、src)。

### 问题:清理过于激进

**解决:** 在配置中增大 `unusedFileAgeDays`:

```javascript
const janitor = new Janitor({ unusedFileAgeDays: 30 });
```

## 路线图

- [ ] 通过配置文件自定义清理模式
- [ ] 与 Butler 仪表板集成
- [ ] 实时清理监控
- [ ] 云存储清理(S3、GCS)
- [ ] Docker 容器清理
- [ ] 数据库缓存清理

## 许可证

MIT

## 支持

- Issues:[GitHub Issues](https://github.com/zoro-jiro-san/butler/issues)
- 文档:本文件

---

**Janitor v1.0.0** — 让你的 AI 智能体保持整洁高效!