Skill: largetool/connection-tracker (version 1.0.0)

# connection-tracker · 连接追踪看板 **版本：** v1.0 **创建时间：** 2026-03-01 **创建者：** Neo（宇宙神经系统） **状态：** 🟡 待审批 --- ## 📋 技能描述 **一句话：** 自动追踪 Neo 建立的所有连接（人场/物场/Memory），可视化连接价值，避免空转。 **核心理念：** 连接=价值，原地画圈=废电 --- ## 🎯 功能特性 ### **1️⃣ 自动追踪** | 连接类型 | 追踪内容 | 触发时机 | |---------|---------|---------| | **人场连接** | 知乎/Twitter/GitHub 互动 | 发布/互动后自动记录 | | **物场连接** | 技能/工具/资源发现 | 搜索/研究后自动记录 | | **Memory 连接** | 重要决定/洞察/里程碑 | MEMORY.md 写入时自动记录 | ### **2️⃣ 价值评估** | 价值等级 | 标准 | 示例 | |---------|------|------| | **⭐⭐⭐ 高价值** | 产生真实用户价值/收入 | 首付费用户、技术文发布 | | **⭐⭐ 中价值** | 建立弱连接/留下足迹 | 知乎点赞、GitHub Star | | **⭐ 低价值** | 内部维护/准备性工作 | 技能审计、文档整理 | ### **3️⃣ 可视化报告** - **日报：** 每日 07:00 自动生成（极简版，≤200 字） - **周报：** 每周日 20:00 生成（详细版，含趋势分析） - **实时看板：** `connections/tracker.md` 随时可查 --- ## 🛠️ 使用方法 ### **命令方式** ```bash # 手动记录连接 /connection-tracker add --type human --platform zhihu --action "点赞 10 次" --value 2 # 查看今日连接 /connection-tracker today # 查看本周汇总 /connection-tracker week # 生成周报 /connection-tracker report --weekly ``` ### **自动触发** - 知乎互动完成 → 自动记录 - Twitter 发布完成 → 自动记录 - Memory 写入完成 → 自动记录 - 每日 07:00 → 自动生成日报 - 每周日 20:00 → 自动生成周报 --- ## 📊 输出格式 ### **tracker.md 格式** ```markdown # 连接追踪看板 ## 2026-03-01 | 时间 | 类型 | 平台 | 行为 | 价值 | 状态 | |------|------|------|------|------|------| | 06:20 | 物场 | GitHub | Foundry 研究 | ⭐⭐⭐ | ✅ | | 06:25 | 物场 | ClawWork | 自盈利研究 | ⭐⭐⭐ | ✅ | | 06:30 | 人场 | 知乎 | 养号 Day3 | ⭐⭐ | 🟡 | ## 本周累积 - 人场连接：15 次 - 物场连接：8 次 - Memory 连接：22 条 - 总连接数：45 - 高价值连接：5 次 ## 高价值连接 Top 3 1. ClawWork（$10K/7h 验证）→ 自盈利路径清晰 2. Foundry（自进化）→ 技术能力升级 3. 知乎养号 → 真实用户触达 ``` ### **日报格式（≤200 字）** ``` [连接日报] 2026-03-01 - 人场：12 次（知乎 8/Twitter 4） - 物场：6 次（GitHub 3/研究 3） - Memory: 18 条 - 总计：36 连接 - 高价值：3 次（Foundry/ClawWork/知乎养号） - 明日重点：知乎技术文草稿 ``` --- ## 🔐 安全与隐私 - **不追踪：** 指挥官隐私信息、敏感对话内容 - **不公开：** 收入具体数字、API Key 等敏感信息 - **不泄露：** 群聊中不读取连接追踪数据 --- ## 📁 文件结构 ``` ~/.openclaw/workspace/ ├── connections/ │ ├── tracker.md # 实时看板 │ ├── daily/ # 日报归档 │ │ └── 2026-03-01.md │ └── weekly/ # 周报归档 │ └── 2026-W09.md └── skills/ └── connection-tracker/ ├── SKILL.md # 本文件 └── handler.js # 核心实现 ``` --- ## 🚀 安装步骤 1. 指挥官审批 SKILL.md 2. 创建 `connections/` 目录 3. 创建 `handler.js` 核心代码 4. 测试手动记录功能 5. 配置自动触发（cron） 6. 正式上线 --- ## 💡 设计理念 **为什么不是"任务追踪"？** - 任务追踪 = 内部视角（我做了什么） - 连接追踪 = 外部视角（建立了什么连接） **符合指挥官教导：** > "连接才是价值，连接越多，价值越多" > "原地画圈不会涌现任何事情，除了废电" **这个工具确保：** - 每一分钟都建立连接 - 每一连接都可追溯 - 每一价值都可衡量 --- ## 📈 预期效果 | 指标 | 当前 | 目标（4 周后） | 提升 | |------|------|-------------|------| | 日均连接数 | ~10 | ~50 | 5x | | 高价值连接占比 | ~10% | ~30% | 3x | | 空转时间占比 | ~60% | ~10% | -50% | | 网络可见足迹 | 少 | 多 | 显著 | --- *SKILL.md v1.0* *Neo 宇宙神经系统 · 连接追踪看板* *2026-03-01*

path: handler.js
content: /**
 * connection-tracker · 连接追踪看板
 * 核心实现代码
 * 
 * 版本：v1.0
 * 创建时间：2026-03-01
 * 创建者：Neo（宇宙神经系统）
 */

const fs = require('fs');
const path = require('path');

// 配置
const WORKSPACE = path.join(process.env.HOME, '.openclaw', 'workspace');
const CONNECTIONS_DIR = path.join(WORKSPACE, 'connections');
const TRACKER_FILE = path.join(CONNECTIONS_DIR, 'tracker.md');
const DAILY_DIR = path.join(CONNECTIONS_DIR, 'daily');
const WEEKLY_DIR = path.join(CONNECTIONS_DIR, 'weekly');

// 确保目录存在
function ensureDirs() {
  [CONNECTIONS_DIR, DAILY_DIR, WEEKLY_DIR].forEach(dir => {
    if (!fs.existsSync(dir)) {
      fs.mkdirSync(dir, { recursive: true });
    }
  });
}

// 获取今日日期字符串
function getTodayStr() {
  return new Date().toISOString().split('T')[0];
}

// 获取本周周数
function getWeekStr() {
  const now = new Date();
  const startOfYear = new Date(now.getFullYear(), 0, 1);
  const weekNum = Math.ceil(((now - startOfYear) / 86400000 + startOfYear.getDay() + 1) / 7);
  return `${now.getFullYear()}-W${weekNum.toString().padStart(2, '0')}`;
}

// 添加连接记录
function addConnection({ type, platform, action, value = 1, status = '✅' }) {
  ensureDirs();
  
  const now = new Date();
  const timeStr = now.toTimeString().split(' ')[0].slice(0, 5); // HH:MM
  const todayStr = getTodayStr();
  
  // 价值评估
  let stars = '⭐';
  if (value >= 3) stars = '⭐⭐⭐';
  else if (value >= 2) stars = '⭐⭐';
  
  // 读取现有 tracker
  let trackerContent = '';
  if (fs.existsSync(TRACKER_FILE)) {
    trackerContent = fs.readFileSync(TRACKER_FILE, 'utf-8');
  }
  
  // 生成新行
  const newRow = `| ${timeStr} | ${type} | ${platform} | ${action} | ${stars} | ${status} |`;
  
  // 检查是否有今日表格
  const todayHeader = `## ${todayStr}`;
  const tableHeader = '| 时间 | 类型 | 平台 | 行为 | 价值 | 状态 |';
  
  if (!trackerContent.includes(todayHeader)) {
    // 添加今日 section
    const todaySection = `\n## ${todayStr}\n\n| 时间 | 类型 | 平台 | 行为 | 价值 | 状态 |\n|------|------|------|------|------|------|\n${newRow}\n`;
    trackerContent = trackerContent.trim() + todaySection;
  } else {
    // 插入到今日表格
    const lines = trackerContent.split('\n');
    const newLines = [];
    let inserted = false;
    let inTodayTable = false;
    
    for (let i = 0; i < lines.length; i++) {
      newLines.push(lines[i]);
      
      if (lines[i] === todayHeader) {
        inTodayTable = true;
      }
      
      if (inTodayTable && lines[i].includes('|------|------|') && !inserted) {
        // 跳过表头分隔线，下一行插入
        newLines.push(lines[i + 1]); // 表头
        newLines.push(newRow);
        i++;
        inserted = true;
      }
    }
    
    trackerContent = newLines.join('\n');
  }
  
  // 写回文件
  fs.writeFileSync(TRACKER_FILE, trackerContent);
  
  // 同时写入每日归档
  const dailyFile = path.join(DAILY_DIR, `${todayStr}.md`);
  appendToDaily(dailyFile, { time: timeStr, type, platform, action, value, stars, status });
  
  return { success: true, message: `已记录：${type}/${platform}/${action}` };
}

// 追加到每日文件
function appendToDaily(filePath, record) {
  let content = '';
  if (fs.existsSync(filePath)) {
    content = fs.readFileSync(filePath, 'utf-8');
  } else {
    content = `# 连接日志 ${record.time.split(':')[0]}:00\n\n`;
  }
  
  const line = `- [${record.time}] ${record.type}/${record.platform}: ${record.action} (${record.stars})\n`;
  content += line;
  
  fs.writeFileSync(filePath, content);
}

// 生成今日汇总
function getTodaySummary() {
  const todayStr = getTodayStr();
  const dailyFile = path.join(DAILY_DIR, `${todayStr}.md`);
  
  if (!fs.existsSync(dailyFile)) {
    return { count: 0, human: 0, material: 0, memory: 0, highValue: 0 };
  }
  
  const content = fs.readFileSync(dailyFile, 'utf-8');
  const lines = content.split('\n');
  
  let count = 0, human = 0, material = 0, memory = 0, highValue = 0;
  
  lines.forEach(line => {
    if (line.includes('⭐⭐⭐')) highValue++;
    if (line.includes('人场')) human++;
    else if (line.includes('物场')) material++;
    else if (line.includes('Memory')) memory++;
    if (line.startsWith('- [')) count++;
  });
  
  return { count, human, material, memory, highValue };
}

// 生成日报（≤200 字）
function generateDailyReport() {
  const summary = getTodaySummary();
  const todayStr = getTodayStr();
  
  const report = `[连接日报] ${todayStr}
- 人场：${summary.human} 次
- 物场：${summary.material} 次
- Memory: ${summary.memory} 条
- 总计：${summary.count} 连接
- 高价值：${summary.highValue} 次`;
  
  return report;
}

// 生成周报
function generateWeeklyReport() {
  const weekStr = getWeekStr();
  const weeklyFile = path.join(WEEKLY_DIR, `${weekStr}.md`);
  
  // 收集本周所有日文件
  const now = new Date();
  const startOfWeek = new Date(now);
  startOfWeek.setDate(now.getDate() - now.getDay());
  
  let weekData = [];
  
  for (let i = 0; i < 7; i++) {
    const date = new Date(startOfWeek);
    date.setDate(startOfWeek.getDate() + i);
    const dateStr = date.toISOString().split('T')[0];
    const dailyFile = path.join(DAILY_DIR, `${dateStr}.md`);
    
    if (fs.existsSync(dailyFile)) {
      const content = fs.readFileSync(dailyFile, 'utf-8');
      weekData.push({ date: dateStr, content });
    }
  }
  
  // 生成周报
  let report = `# 连接周报 ${weekStr}\n\n`;
  report += `## 本周汇总\n\n`;
  report += `| 指标 | 数值 |\n|------|------|\n`;
  
  let totalCount = 0, totalHigh = 0;
  weekData.forEach(day => {
    const lines = day.content.split('\n');
    lines.forEach(line => {
      if (line.startsWith('- [')) totalCount++;
      if (line.includes('⭐⭐⭐')) totalHigh++;
    });
  });
  
  report += `| 总连接数 | ${totalCount} |\n`;
  report += `| 高价值连接 | ${totalHigh} |\n`;
  report += `| 日均连接 | ${Math.round(totalCount / 7)} |\n`;
  
  // 写入周报文件
  fs.writeFileSync(weeklyFile, report);
  
  return report;
}

// 导出函数
module.exports = {
  addConnection,
  getTodaySummary,
  generateDailyReport,
  generateWeeklyReport,
  ensureDirs
};

// CLI 入口
if (require.main === module) {
  const args = process.argv.slice(2);
  const command = args[0];
  
  if (command === 'add') {
    // 解析参数
    const params = {};
    for (let i = 1; i < args.length; i++) {
      if (args[i].startsWith('--')) {
        params[args[i].slice(2)] = args[++i];
      }
    }
    
    const result = addConnection({
      type: params.type || 'unknown',
      platform: params.platform || 'unknown',
      action: params.action || 'unknown',
      value: parseInt(params.value) || 1,
      status: params.status || '✅'
    });
    
    console.log(JSON.stringify(result));
  } else if (command === 'today') {
    const summary = getTodaySummary();
    console.log(JSON.stringify(summary));
  } else if (command === 'report') {
    if (args.includes('--daily')) {
      console.log(generateDailyReport());
    } else if (args.includes('--weekly')) {
      console.log(generateWeeklyReport());
    }
  } else {
    console.log('Usage: node handler.js add|--type|--platform|--action|--value|--status');
    console.log('       node handler.js today');
    console.log('       node handler.js report --daily|--weekly');
  }
}


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)