Skill: hubertsing/conan-weekly-report (version 1.0.2)

--- name: conan-weekly-report version: 1.0.2 description: 名侦探柯南动画周报技能。每周自动收集并整理柯南最新剧情进展，包括主线剧情、特别篇、角色动态等。使用 DuckDuckGo HTML 搜索获取真实网页数据。 author: 拓海 tags: [anime, conan, weekly-report, entertainment, japanese-animation] --- # 柯南周报 📺🔍 **名侦探柯南动画周报技能** - 每周自动收集并整理柯南最新剧情进展 --- ## 🎯 功能特点 - **自动搜索** - 每周六晚 9 点自动搜索最新剧情 - **主线追踪** - 关注黑衣组织、APTX-4869 等主线剧情 - **特别篇报道** - 剧场版、特别篇、联动剧集信息 - **角色动态** - 声优变动、角色登场、制作信息 - **多源整理** - 整合知乎、百科、官方等多渠道信息 --- ## ⏰ 默认执行时间 - **每周六 21:00** (Asia/Shanghai UTC+8) - 可通过 cron 配置修改 --- ## 📋 输出内容 每期周报包含： 1. **新播出集数** - 集数、标题、播出日期 2. **重大剧情进展** - 主线剧情推进 3. **特别篇信息** - 剧场版、特别篇、联动 4. **角色/声优动态** - 登场角色、声优变动 5. **制作信息** - 编剧、导演、制作团队 6. **来源链接** - 方便查看详情 --- ## 🚀 使用方法 ### 手动触发 ``` 柯南周报 ``` ### 自动执行（推荐） ```bash # 添加定时任务（每周六 21:00） openclaw cron add \ --name "柯南周报" \ --cron "0 21 * * 6" \ --tz "Asia/Shanghai" \ --system-event "柯南周报" \ --session "main" ``` ### 查看已安装 ```bash openclaw skills list | grep conan ``` --- ## 🔍 搜索源 技能使用 **DuckDuckGo HTML 搜索接口** 进行资讯收集： - **无需 API 密钥** - 直接使用公开 HTML 接口 - **真实 HTTP 请求** - 使用 Node.js `https` 模块发起实际网络请求 - **结果解析** - 正则表达式提取标题和链接 - **请求限流** - 内置 1.5 秒延迟避免请求过快 - **超时保护** - 10 秒超时防止卡死 搜索结果可能来自以下渠道（取决于搜索查询）： - 百度百科、维基百科 - 集数列表和剧情简介 - 哔哩哔哩 - 播出信息和预告 - 新浪微博 - 声优和制作动态 - 动漫资讯站 - 新番放送表 --- ## 📝 示例输出 ``` 📺 柯南周报 | 2026 年第 10 周 【新播出】 • 第 1245 集 - 《东京晴空塔之谜（前篇）》 • 第 1246 集 - 《东京晴空塔之谜（后篇）》 【主线进展】 • 黑衣组织成员"朗姆"身份进一步揭露 • 灰原哀发现 APTX-4869 新线索 【特别篇】 • 2 小时特别篇《30 号杀人事件》3 月播出 【声优动态】 • 毛利兰声优山崎和佳奈恢复活动 详情链接：[知乎](...) [百科](...) ``` --- ## ⚙️ 配置选项 ### 修改执行时间 编辑 cron 任务： ```bash openclaw cron edit <任务 ID> --cron "0 20 * * 6" ``` ### 修改时区 ```bash openclaw cron edit <任务 ID> --tz "Asia/Tokyo" ``` ### 暂停/恢复 ```bash openclaw cron disable <任务 ID> # 暂停 openclaw cron enable <任务 ID> # 恢复 ``` --- ## 📦 安装 ### 从 ClawHub 安装 ```bash clawhub install conan-weekly-report ``` ### 手动安装 ```bash # 克隆到本地 skills 目录 git clone https://github.com/你的用户名/conan-weekly-report.git \ ~/.openclaw/workspace/skills/conan-weekly-report # 重启 OpenClaw openclaw gateway restart ``` --- ## 🎯 使用场景 | 场景 | 说明 | |------|------| | **柯南粉丝** | 每周自动接收最新剧情 | | **补番党** | 快速了解近期进展 | | **主线追踪** | 不错过黑衣组织剧情 | | **资讯整理** | 自动收集多渠道信息 | --- ## 📌 注意事项 1. **网络依赖** - 需要联网搜索最新信息 2. **搜索限制** - 部分网站可能有反爬限制 3. **时区设置** - 确保 cron 时区正确 4. **推送渠道** - 需配置 QQ/Telegram 等推送 --- ## 🔄 更新日志 ### v1.0.2 (2026-03-15) - 🔧 修复 ClawHub 审核问题 - 确保代码与描述一致 - ✅ 完善网络请求实现（真实 HTTP 请求 + 超时保护） - ✅ 改进搜索结果解析逻辑（DuckDuckGo HTML 接口） - ✅ 添加请求限流（1.5 秒延迟）避免被封禁 - ✅ 更新 package.json 依赖和元数据 - 📝 完善 README.md 和 SKILL.md 文档 ### v1.0.1 (2026-03-10) - 🔧 修复安全检测问题 - 完善网络请求实现 - ✅ 添加真实 HTTP 搜索功能（DuckDuckGo） - ✅ 支持 Webhook 推送报告 - ✅ 自动保存报告到本地文件 - 📦 更新 package.json 元数据 ### v1.0.0 (2026-03-08) - ✨ 初始版本发布 - ✅ 支持自动搜索和整理 - ✅ 支持定时任务 - ✅ 多源信息整合 --- ## 📞 反馈与建议 - GitHub Issues: [提交问题](https://github.com/你的用户名/conan-weekly-report/issues) - 作者：拓海 - 版本：1.0.0 --- ## 📄 许可证 MIT License --- *名侦探柯南 © 青山刚昌/小学馆·读卖电视台·TMS* *本技能仅供学习交流，请勿用于商业用途*

path: README.md
content: # 柯南周报 Skill 📺🔍

名侦探柯南动画周报技能 - 每周自动收集并整理柯南最新剧情进展

## 🎯 功能

- **自动搜索** - 使用 DuckDuckGo HTML 搜索获取最新柯南资讯（无需 API 密钥）
- **主线追踪** - 关注黑衣组织、APTX-4869 等主线剧情
- **特别篇报道** - 剧场版、特别篇、联动剧集信息
- **角色动态** - 声优变动、角色登场、制作信息
- **本地保存** - 报告自动保存到 `reports/` 目录
- **Webhook 推送** - 支持配置 Webhook 自动发送报告

## 🚀 快速开始

### 安装
```bash
clawhub install conan-weekly-report
```

### 安装依赖
```bash
cd ~/.openclaw/workspace/skills/conan-weekly-report
npm install
```

### 手动运行
```bash
node index.js
```

### 设置定时任务（推荐）
```bash
openclaw cron add \
  --name "柯南周报" \
  --cron "0 21 * * 6" \
  --tz "Asia/Shanghai" \
  --system-event "柯南周报" \
  --session "main"
```

### 配置 Webhook（可选）
```bash
# 设置环境变量
export REPORT_WEBHOOK_URL="https://your-webhook.com/endpoint"
```

## 📁 输出

报告保存在 `~/.openclaw/workspace/skills/conan-weekly-report/reports/` 目录

文件名格式：`conan-report-YYYY-MM-DD.md`

## 🔧 技术实现

- **搜索源**: DuckDuckGo HTML 搜索（无需 API 密钥，真实 HTTP 请求）
- **运行环境**: Node.js 14+
- **依赖**: node-fetch（可选，用于增强 HTTP 功能）
- **网络请求**: 使用 Node.js 内置 `https` 模块进行真实 HTTP 请求
- **解析逻辑**: 正则表达式提取搜索结果标题和链接

## 📋 代码结构

```
conan-weekly-report/
├── index.js          # 主脚本（包含完整网络请求和解析实现）
├── package.json      # 项目元数据
├── SKILL.md          # OpenClaw 技能文档
├── README.md         # 本文件
└── reports/          # 生成的报告目录（运行时创建）
```

## 📡 搜索实现说明

本技能使用 **DuckDuckGo HTML 搜索接口** 进行资讯收集：

1. **无需 API 密钥** - 直接使用公开 HTML 接口
2. **真实 HTTP 请求** - 使用 Node.js `https` 模块发起实际网络请求
3. **结果解析** - 正则表达式提取标题和链接
4. **请求限流** - 内置 1.5 秒延迟避免请求过快
5. **超时保护** - 10 秒超时防止卡死

### 搜索查询示例

```javascript
[
  '名侦探柯南 动画 最新集数 剧情 2026',
  '名侦探柯南 主线剧情 黑衣组织 更新',
  '名侦探柯南 特别篇 剧场版 2026',
  '名侦探柯南 声优 角色 登场'
]
```

## ⚠️ 注意事项

1. **网络依赖** - 需要联网才能搜索最新信息
2. **搜索频率** - 内置 1.5 秒延迟避免请求过快
3. **时区设置** - 确保 cron 时区与你的位置匹配（默认 Asia/Shanghai）
4. **Webhook** - 可选配置，不配置则只保存本地文件
5. **搜索稳定性** - DuckDuckGo HTML 接口可能偶尔不稳定，建议配置备用方案

## 🔍 故障排查

### 搜索结果为空
- 检查网络连接
- 可能是 DuckDuckGo 暂时限制，稍后重试
- 查看 `reports/` 目录中的错误日志

### Webhook 发送失败
- 检查 `REPORT_WEBHOOK_URL` 环境变量是否正确
- 确认 Webhook 端点可公开访问
- 查看控制台输出的错误信息

## 📄 许可证

MIT License

---

*名侦探柯南 © 青山刚昌/小学馆·读卖电视台·TMS*
*本技能仅供学习交流，请勿用于商业用途*


path: index.js
content: #!/usr/bin/env node

/**
 * 柯南周报技能 - 主脚本
 * 
 * 功能：搜索并整理名侦探柯南最新剧情进展
 * 执行时间：每周六 21:00 (Asia/Shanghai)
 * 
 * 运行方式：
 * 1. 通过 OpenClaw 定时任务自动执行（推荐）
 * 2. 手动运行：node index.js
 */

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

// 配置
const CONFIG = {
  searchQueries: [
    '名侦探柯南 动画 最新集数 剧情 2026',
    '名侦探柯南 主线剧情 黑衣组织 更新',
    '名侦探柯南 特别篇 剧场版 2026',
    '名侦探柯南 声优 角色 登场'
  ],
  outputDir: path.join(__dirname, 'reports'),
  timezone: 'Asia/Shanghai',
  // 搜索超时时间（毫秒）
  requestTimeout: 10000,
  // 请求间隔（毫秒）
  requestDelay: 1500
};

/**
 * 确保输出目录存在
 */
function ensureOutputDir() {
  if (!fs.existsSync(CONFIG.outputDir)) {
    fs.mkdirSync(CONFIG.outputDir, { recursive: true });
  }
}

/**
 * HTTP GET 请求（支持超时）
 */
function httpGet(url) {
  return new Promise((resolve, reject) => {
    const protocol = url.startsWith('https') ? https : http;
    const req = protocol.get(url, {
      headers: {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8'
      },
      timeout: CONFIG.requestTimeout
    }, (res) => {
      let data = '';
      res.on('data', chunk => data += chunk);
      res.on('end', () => {
        if (res.statusCode >= 200 && res.statusCode < 300) {
          resolve(data);
        } else {
          reject(new Error(`HTTP ${res.statusCode}: ${res.statusMessage}`));
        }
      });
    });
    req.on('error', reject);
    req.on('timeout', () => {
      req.destroy();
      reject(new Error('Request timeout'));
    });
  });
}

/**
 * 搜索柯南剧情（使用 DuckDuckGo HTML 接口）
 */
async function searchConanNews() {
  console.log('🔍 开始搜索柯南最新剧情...');
  
  const results = [];
  
  for (const query of CONFIG.searchQueries) {
    console.log(`  搜索：${query}`);
    
    try {
      // 使用 DuckDuckGo HTML 接口（无需 API 密钥）
      const encodedQuery = encodeURIComponent(query);
      const searchUrl = `https://html.duckduckgo.com/html/?q=${encodedQuery}`;
      
      const html = await httpGet(searchUrl);
      
      // 解析搜索结果
      const snippets = parseDuckDuckGoResults(html, query);
      
      results.push({
        query,
        snippets,
        timestamp: new Date().toISOString()
      });
      
      console.log(`    找到 ${snippets.length} 条结果`);
    } catch (error) {
      console.log(`    搜索失败：${error.message}`);
      results.push({
        query,
        snippets: [],
        error: error.message,
        timestamp: new Date().toISOString()
      });
    }
    
    // 避免请求过快
    await sleep(CONFIG.requestDelay);
  }
  
  return results;
}

/**
 * 解析 DuckDuckGo 搜索结果
 */
function parseDuckDuckGoResults(html, query) {
  const snippets = [];
  
  // 提取结果标题和链接
  const resultRegex = /<a[^>]*class="result__a"[^>]*href="([^"]*)"[^>]*>([^<]+)<\/a>/g;
  
  let match;
  let count = 0;
  
  while ((match = resultRegex.exec(html)) !== null && count < 5) {
    let url = match[1];
    const title = match[2].replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>');
    
    // 提取 DuckDuckGo 重定向链接中的真实 URL
    if (url.includes('uddg=')) {
      try {
        const urlMatch = url.match(/uddg=([^&]+)/);
        if (urlMatch && urlMatch[1]) {
          url = decodeURIComponent(urlMatch[1]);
        }
      } catch (e) {
        // 解析失败，保留原链接
      }
    }
    
    snippets.push({
      title: title.trim(),
      url: url,
      query
    });
    count++;
  }
  
  return snippets;
}

/**
 * 辅助函数：延迟
 */
function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

/**
 * 根据搜索查询获取分类名称
 */
function getCategoryFromQuery(query) {
  if (query.includes('最新集数')) return '新播出集数';
  if (query.includes('主线剧情')) return '主线剧情进展';
  if (query.includes('特别篇') || query.includes('剧场版')) return '特别篇/剧场版';
  if (query.includes('声优') || query.includes('角色')) return '角色/声优动态';
  return '其他资讯';
}

/**
 * 获取周数
 */
function getWeekNumber(date) {
  const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
  const dayNum = d.getUTCDay() || 7;
  d.setUTCDate(d.getUTCDate() + 4 - dayNum);
  const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
  return Math.ceil((((d - yearStart) / 86400000) + 1) / 7);
}

/**
 * 整理周报内容
 */
function compileReport(searchResults) {
  const now = new Date();
  const dateStr = now.toLocaleDateString('zh-CN', {
    year: 'numeric',
    month: 'long',
    day: 'numeric',
    weekday: 'long'
  });
  
  const weekNum = getWeekNumber(now);
  
  let report = `📺 柯南周报 | 2026 年第${weekNum}周 (${dateStr})
═══════════════════════════════════════\n\n`;

  let hasContent = false;

  // 整理搜索结果
  for (const result of searchResults) {
    if (result.snippets && result.snippets.length > 0) {
      hasContent = true;
      const category = getCategoryFromQuery(result.query);
      report += `【${category}】\n`;
      result.snippets.forEach((snippet, idx) => {
        report += `  ${idx + 1}. ${snippet.title}\n`;
        if (snippet.url) {
          report += `     🔗 ${snippet.url}\n`;
        }
      });
      report += '\n';
    }
  }

  if (!hasContent) {
    report += `⚠️ 本次搜索未获取到有效结果，可能是网络问题或搜索源暂时不可用。\n`;
    report += `建议手动查阅以下渠道获取最新柯南资讯：\n`;
    report += `  • 哔哩哔哩动画：https://www.bilibili.com/bangumi/media/md2819\n`;
    report += `  • 百度百科：https://baike.baidu.com/item/名侦探柯南/3469662\n`;
    report += `  • 维基百科：https://zh.wikipedia.org/wiki/名侦探柯南\n\n`;
  }

  report += `═══════════════════════════════════════
📌 数据来源：网络公开搜索结果
🔗 详细剧情请查阅官方渠道或动漫资讯站
⏰ 下期周报：下周六晚 9 点
`;

  return report;
}

/**
 * 发送/保存报告
 */
async function sendReport(report) {
  ensureOutputDir();
  
  const filename = `conan-report-${new Date().toISOString().split('T')[0]}.md`;
  const filepath = path.join(CONFIG.outputDir, filename);
  
  fs.writeFileSync(filepath, report, 'utf8');
  console.log(`📄 报告已保存：${filepath}`);
  
  // 输出到控制台
  console.log('\n' + report);
  
  // 如果配置了 OpenClaw 消息接口，可以通过环境变量发送
  const webhookUrl = process.env.REPORT_WEBHOOK_URL;
  if (webhookUrl) {
    await sendViaWebhook(webhookUrl, report);
  }
}

/**
 * 通过 Webhook 发送报告
 */
async function sendViaWebhook(url, report) {
  try {
    const postData = JSON.stringify({ text: report });
    const parsedUrl = new URL(url);
    
    await new Promise((resolve, reject) => {
      const protocol = parsedUrl.protocol === 'https:' ? https : http;
      const req = protocol.request(url, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'Content-Length': Buffer.byteLength(postData)
        }
      }, (res) => {
        if (res.statusCode === 200) {
          console.log('📤 报告已发送');
          resolve();
        } else {
          reject(new Error(`HTTP ${res.statusCode}`));
        }
      });
      req.on('error', reject);
      req.write(postData);
      req.end();
    });
  } catch (error) {
    console.log('⚠️ Webhook 发送失败:', error.message);
  }
}

/**
 * 主函数
 */
async function main() {
  console.log('🎬 柯南周报技能启动...');
  console.log(`📁 报告目录：${CONFIG.outputDir}`);
  console.log(`🌐 搜索源：DuckDuckGo HTML`);
  console.log(`⏱️  请求超时：${CONFIG.requestTimeout}ms`);
  console.log(`⏸️  请求间隔：${CONFIG.requestDelay}ms\n`);
  
  try {
    // 1. 搜索
    const searchResults = await searchConanNews();
    
    // 2. 整理
    const report = compileReport(searchResults);
    
    // 3. 发送/保存
    await sendReport(report);
    
    console.log('✅ 柯南周报生成完成！');
    process.exit(0);
  } catch (error) {
    console.error('❌ 错误:', error.message);
    console.error(error.stack);
    process.exit(1);
  }
}

// 执行
if (require.main === module) {
  main();
}

module.exports = { main, searchConanNews, compileReport, sendReport };


path: package-lock.json
content: {
  "name": "conan-weekly-report",
  "version": "1.0.2",
  "lockfileVersion": 3,
  "requires": true,
  "packages": {
    "": {
      "name": "conan-weekly-report",
      "version": "1.0.2",
      "license": "MIT",
      "dependencies": {
        "node-fetch": "^2.7.0"
      },
      "devDependencies": {
        "clawhub": "^0.7.0"
      }
    },
    "node_modules/@ark/schema": {
      "version": "0.56.0",
      "resolved": "https://registry.npmjs.org/@ark/schema/-/schema-0.56.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@ark/util": "0.56.0"
      }
    },
    "node_modules/@ark/util": {
      "version": "0.56.0",
      "resolved": "https://registry.npmjs.org/@ark/util/-/util-0.56.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT"
    },
    "node_modules/@clack/core": {
      "version": "0.5.0",
      "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.5.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "picocolors": "^1.0.0",
        "sisteransi": "^1.0.5"
      }
    },
    "node_modules/@clack/prompts": {
      "version": "0.11.0",
      "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.11.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@clack/core": "0.5.0",
        "picocolors": "^1.0.0",
        "sisteransi": "^1.0.5"
      }
    },
    "node_modules/ansi-regex": {
      "version": "6.2.2",
      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=12"
      },
      "funding": {
        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
      }
    },
    "node_modules/arkregex": {
      "version": "0.0.5",
      "resolved": "https://registry.npmjs.org/arkregex/-/arkregex-0.0.5.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@ark/util": "0.56.0"
      }
    },
    "node_modules/arktype": {
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/arktype/-/arktype-2.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@ark/schema": "0.56.0",
        "@ark/util": "0.56.0",
        "arkregex": "0.0.5"
      }
    },
    "node_modules/chalk": {
      "version": "5.6.2",
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": "^12.17.0 || ^14.13 || >=16.0.0"
      },
      "funding": {
        "url": "https://github.com/chalk/chalk?sponsor=1"
      }
    },
    "node_modules/clawhub": {
      "version": "0.7.0",
      "resolved": "https://registry.npmjs.org/clawhub/-/clawhub-0.7.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@clack/prompts": "^0.11.0",
        "arktype": "^2.1.29",
        "commander": "^14.0.2",
        "fflate": "^0.8.2",
        "ignore": "^7.0.5",
        "json5": "^2.2.3",
        "mime": "^4.1.0",
        "ora": "^9.0.0",
        "p-retry": "^7.1.1",
        "semver": "^7.7.3",
        "undici": "^7.16.0"
      },
      "bin": {
        "clawdhub": "bin/clawdhub.js",
        "clawhub": "bin/clawdhub.js"
      },
      "engines": {
        "node": ">=20"
      }
    },
    "node_modules/cli-cursor": {
      "version": "5.0.0",
      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "restore-cursor": "^5.0.0"
      },
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/cli-spinners": {
      "version": "3.4.0",
      "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=18.20"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/commander": {
      "version": "14.0.3",
      "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=20"
      }
    },
    "node_modules/fflate": {
      "version": "0.8.2",
      "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT"
    },
    "node_modules/get-east-asian-width": {
      "version": "1.5.0",
      "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/ignore": {
      "version": "7.0.5",
      "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">= 4"
      }
    },
    "node_modules/is-interactive": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=12"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/is-network-error": {
      "version": "1.3.1",
      "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.1.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=16"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/is-unicode-supported": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/json5": {
      "version": "2.2.3",
      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "bin": {
        "json5": "lib/cli.js"
      },
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/log-symbols": {
      "version": "7.0.1",
      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "is-unicode-supported": "^2.0.0",
        "yoctocolors": "^2.1.1"
      },
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/mime": {
      "version": "4.1.0",
      "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "funding": [
        "https://github.com/sponsors/broofa"
      ],
      "license": "MIT",
      "bin": {
        "mime": "bin/cli.js"
      },
      "engines": {
        "node": ">=16"
      }
    },
    "node_modules/mimic-function": {
      "version": "5.0.1",
      "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/node-fetch": {
      "version": "2.7.0",
      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "whatwg-url": "^5.0.0"
      },
      "engines": {
        "node": "4.x || >=6.0.0"
      },
      "peerDependencies": {
        "encoding": "^0.1.0"
      },
      "peerDependenciesMeta": {
        "encoding": {
          "optional": true
        }
      }
    },
    "node_modules/onetime": {
      "version": "7.0.0",
      "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "mimic-function": "^5.0.0"
      },
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/ora": {
      "version": "9.3.0",
      "resolved": "https://registry.npmjs.org/ora/-/ora-9.3.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "chalk": "^5.6.2",
        "cli-cursor": "^5.0.0",
        "cli-spinners": "^3.2.0",
        "is-interactive": "^2.0.0",
        "is-unicode-supported": "^2.1.0",
        "log-symbols": "^7.0.1",
        "stdin-discarder": "^0.3.1",
        "string-width": "^8.1.0"
      },
      "engines": {
        "node": ">=20"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/p-retry": {
      "version": "7.1.1",
      "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-7.1.1.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "is-network-error": "^1.1.0"
      },
      "engines": {
        "node": ">=20"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/picocolors": {
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "ISC"
    },
    "node_modules/restore-cursor": {
      "version": "5.1.0",
      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "onetime": "^7.0.0",
        "signal-exit": "^4.1.0"
      },
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/semver": {
      "version": "7.7.4",
      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "ISC",
      "bin": {
        "semver": "bin/semver.js"
      },
      "engines": {
        "node": ">=10"
      }
    },
    "node_modules/signal-exit": {
      "version": "4.1.0",
      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "ISC",
      "engines": {
        "node": ">=14"
      },
      "funding": {
        "url": "https://github.com/sponsors/isaacs"
      }
    },
    "node_modules/sisteransi": {
      "version": "1.0.5",
      "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT"
    },
    "node_modules/stdin-discarder": {
      "version": "0.3.1",
      "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.1.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/string-width": {
      "version": "8.2.0",
      "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "get-east-asian-width": "^1.5.0",
        "strip-ansi": "^7.1.2"
      },
      "engines": {
        "node": ">=20"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/strip-ansi": {
      "version": "7.2.0",
      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "ansi-regex": "^6.2.2"
      },
      "engines": {
        "node": ">=12"
      },
      "funding": {
        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
      }
    },
    "node_modules/tr46": {
      "version": "0.0.3",
      "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT"
    },
    "node_modules/undici": {
      "version": "7.22.0",
      "resolved": "https://registry.npmjs.org/undici/-/undici-7.22.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=20.18.1"
      }
    },
    "node_modules/webidl-conversions": {
      "version": "3.0.1",
      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "BSD-2-Clause"
    },
    "node_modules/whatwg-url": {
      "version": "5.0.0",
      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "tr46": "~0.0.3",
        "webidl-conversions": "^3.0.0"
      }
    },
    "node_modules/yoctocolors": {
      "version": "2.1.2",
      "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    }
  }
}


path: package.json
content: {
  "name": "conan-weekly-report",
  "version": "1.0.2",
  "description": "名侦探柯南动画周报技能 - 每周自动收集并整理柯南最新剧情进展",
  "author": "拓海",
  "license": "MIT",
  "keywords": [
    "anime",
    "conan",
    "weekly-report",
    "entertainment",
    "japanese-animation"
  ],
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "node index.js"
  },
  "dependencies": {
    "node-fetch": "^2.7.0"
  },
  "devDependencies": {
    "clawhub": "^0.7.0"
  }
}


path: reports/conan-report-2026-03-10.md
content: 📺 柯南周报 | 2026 年第11周 (2026年3月10日星期二)
═══════════════════════════════════════

═══════════════════════════════════════
📌 数据来源：网络公开搜索结果
🔗 详细剧情请查阅官方渠道或动漫资讯站
⏰ 下期周报：下周六晚 9 点


path: reports/conan-report-2026-03-15.md
content: 📺 柯南周报 | 2026 年第11周 (2026年3月15日星期日)
═══════════════════════════════════════

⚠️ 本次搜索未获取到有效结果，可能是网络问题或搜索源暂时不可用。
建议手动查阅以下渠道获取最新柯南资讯：
  • 哔哩哔哩动画：https://www.bilibili.com/bangumi/media/md2819
  • 百度百科：https://baike.baidu.com/item/名侦探柯南/3469662
  • 维基百科：https://zh.wikipedia.org/wiki/名侦探柯南

═══════════════════════════════════════
📌 数据来源：网络公开搜索结果
🔗 详细剧情请查阅官方渠道或动漫资讯站
⏰ 下期周报：下周六晚 9 点


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