Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
1 line
45 KiB
JSON
1 line
45 KiB
JSON
{"repo": "beltran12138/web3watch-hk", "files": {"QUICKSTART.md": {"c43ddfda01674fa608911544e3d5ed40c7a35ecd": {"t": 1785746607.2240758, "n": 4112, "h": "1c4f744651ad4652", "c": "# Alpha Radar 快速参考指南\n\n## 🚀 新增功能速览\n\n### 1. 数据源健康监控\n```bash\n# 查看所有源状态\ncurl http://localhost:3001/api/health/sources\n\n# 查看单个源详情\ncurl http://localhost:3001/api/health/sources/Binance\n```\n\n### 2. RSS 订阅\n```bash\n# 获取高价值情报 RSS\ncurl http://localhost:3001/api/feed.rss?min_score=80&limit=20\n\n# JSON 格式\ncurl http://localhost:3001/api/feed.json?min_score=85\n```\n\n### 3. Notion 集成\n```bash\n# 同步高价值情报到 Notion\ncurl -X POST http://localhost:3001/api/integrations/notion/sync \\\n -H \"Content-Type: application/json\" \\\n -d '{\"minScore\":85,\"limit\":20}'\n```\n\n### 4. GitHub 集成\n```bash\n# 为高价值情报创建 Issues\ncurl -X POST http://localhost:3001/api/integrations/github/issues \\\n -H \"Content-Type: application/json\" \\\n -d '{\"minScore\":70,\"limit\":10}'\n\n# 导出昨日情报到 Release\ncurl -X POST http://localhost:3001/api/integrations/github/export-daily \\\n -H \"Content-Type: application/json\" \\\n -d '{\"date\":\"2026-03-15\"}'\n```\n\n---\n\n## 📦 依赖安装\n\n```bash\n# YAML 配置支持\nnpm install js-yaml\n\n# Notion 集成(可选)\nnpm install @notionhq/client\n\n# GitHub 集成(可选)\nnpm install @octokit/rest\n\n# 或者一次性安装所有\nnpm install js-yaml @notionhq/client @octokit/rest\n```\n\n---\n\n## 🔧 环境变量配置\n\n### 必需(已有)\n```env\nDEEPSEEK_API_KEY=sk-xxx\nWECOM_WEBHOOK_URL=https://...\n```\n\n### 推荐(新增)\n```env\n# Feishu 推送\nFEISHU_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/xxx\nFEISHU_SECRET=xxx\n\n# Telegram 增强\nTELEGRAM_CHANNEL_ID=-100xxx # 频道广播用\n\n# Notion 集成\nNOTION_API_KEY=secret_xxx\nNOTION_DATABASE_ID=xxx\n\n# GitHub 集成\nGITHUB_TOKEN=ghp_xxx\nGITHUB_REPO=username/repo-name\n```\n\n---\n\n## 📁 YAML 配置示例\n\n### sources.yaml\n```yaml\nhigh_frequency:\n - name: SFC\n type: rss\n url: https://www.sfc.hk/en/RSS-feed/Regulatory-news\n enabled: true\n \nlow_frequency:\n - name: Binance\n type: rss\n url: https://www.binance.com/en/feed/news\n enabled: true\n\nsettings:\n defaults:\n maxAgeHours: 48\n pushCooldownHours: 24\n```\n\n### 使用方式\n```javascript\nconst { loadSourcesConfig } = require('./config-loader');\nconst config = loadSourcesConfig();\nconsole.log(config.sources); // 自动加载 YAML\n```\n\n---\n\n## 🤖 AI 成本优化器\n\n### 使用批量处理\n```javascript\nconst { processBatchSmart } = require('./ai-optimizer');\n\nconst results = await processBatchSmart(items, {\n useSemanticDedup: true, // 语义去重\n respectBudget: true, // 预算控制\n recentInsights: [], // 行业记忆\n});\n```\n\n### 预期效果\n- AI 调用次数减少 50-70%\n- 日成本从 $10 降至 $4\n\n---\n\n## 📱 推送渠道对比\n\n| 渠道 | 适用场景 | 配置难度 |\n|------|---------|----------|\n| 企业微信 | 国内团队主力 | ⭐ |\n| Telegram | Web3 用户首选 | ⭐⭐ |\n| 飞书 | 国内企业 | ⭐⭐ |\n| Slack | 国际团队 | ⭐⭐ |\n| Email | 正式报告 | ⭐⭐⭐ |\n| RSS | 个人阅读器 | ⭐ |\n\n---\n\n## 🔄 定时任务说明\n\n| 时间 | 任务 | 说明 |\n|------|------|------|\n| 每 5 分钟 | 高频抓取 | T0 数据源 |\n| 每 30 分钟 | 低频抓取 | T1 数据源 |\n| 每小时 | 健康检查 | 故障告警 |\n| 每 6 小时 | Notion 同步 | 高价值情报 |\n| 每天 18:00 | 日报 | 企业微信 |\n| 每天 00:30 | GitHub 导出 | Releases 归档 |\n| 每周五 18:00 | 周报 | 企业微信 |\n| 每天 02:00 | 数据清理 | 生命周期管理 |\n\n---\n\n## 🐛 故障排查\n\n### 数据源健康告警\n```bash\n# 手动触发检查\ncurl -X POST http://localhost:3001/api/health/check\n\n# 重置某个源状态\ncurl -X POST http://localhost:3001/api/health/sources/Binance/reset\n```\n\n### AI 成本超预算\n```javascript\n// 查看当前状态\nconst { aiCostTracker } = require('./ai');\nconsole.log(aiCostTracker.getStatus());\n// { dailyCostUSD: '3.5', budgetUsedPercent: '35' }\n```\n\n### Notion/GitHub 集成失败\n```bash\n# 检查配置状态\ncurl http://localhost:3001/api/integrations/status\n```\n\n---\n\n## 📊 前端组件使用\n\n### 在 React 中使用\n```jsx\n// 数据源健康监控\nReact.createElement(SourceHealthPanel)\n\n// 趋势洞察\nReact.createElement(InsightsPanel)\n```\n\n### HTML 引入\n```html\n<script src=\"/components.js\"></script>\n<script>\n // 直接使用全局组件\n const panel = React.createElement(SourceHealthPanel);\n</script>\n```\n\n---\n\n## 🎯 最佳实践\n\n### 1. 添加新数据源\n```yaml\n# sources.yaml\nlow_frequency:\n - name: NewSource\n type: rss\n url: https://example.com/rss\n tier: low\n enabled: true\n maxAgeHours: 48\n```\n\n### 2. 调整 AI 预算\n```env\nAI_COST_DAILY_BUDGET_USD=15 # 提高预算\nAI_COST_ALERT_THRESHOLD=0.9 # 90% 时告警\n```\n\n### 3. 自定义推送频率\n```env\n# 修改 cron 表达式\nSCRAPE_HIGH_CRON=*/3 * * * * # 3 分钟一次\nSCRAPE_LOW_CRON=*/15 * * * * # 15 分钟一次\n```\n\n---\n\n## 📞 支持\n\n- 详细文档:`OPTIMIZATION_FINAL_REPORT.md`\n- API 文档:`http://localhost:3001/api-docs` (Swagger)\n- 问题反馈:GitHub Issues\n"}, "a47de0931cc0f4b1be7ec6f0c503587edcec295e": {"t": 1785766240.4239707, "n": 4112, "h": "1c4f744651ad4652", "c": "# Alpha Radar 快速参考指南\n\n## 🚀 新增功能速览\n\n### 1. 数据源健康监控\n```bash\n# 查看所有源状态\ncurl http://localhost:3001/api/health/sources\n\n# 查看单个源详情\ncurl http://localhost:3001/api/health/sources/Binance\n```\n\n### 2. RSS 订阅\n```bash\n# 获取高价值情报 RSS\ncurl http://localhost:3001/api/feed.rss?min_score=80&limit=20\n\n# JSON 格式\ncurl http://localhost:3001/api/feed.json?min_score=85\n```\n\n### 3. Notion 集成\n```bash\n# 同步高价值情报到 Notion\ncurl -X POST http://localhost:3001/api/integrations/notion/sync \\\n -H \"Content-Type: application/json\" \\\n -d '{\"minScore\":85,\"limit\":20}'\n```\n\n### 4. GitHub 集成\n```bash\n# 为高价值情报创建 Issues\ncurl -X POST http://localhost:3001/api/integrations/github/issues \\\n -H \"Content-Type: application/json\" \\\n -d '{\"minScore\":70,\"limit\":10}'\n\n# 导出昨日情报到 Release\ncurl -X POST http://localhost:3001/api/integrations/github/export-daily \\\n -H \"Content-Type: application/json\" \\\n -d '{\"date\":\"2026-03-15\"}'\n```\n\n---\n\n## 📦 依赖安装\n\n```bash\n# YAML 配置支持\nnpm install js-yaml\n\n# Notion 集成(可选)\nnpm install @notionhq/client\n\n# GitHub 集成(可选)\nnpm install @octokit/rest\n\n# 或者一次性安装所有\nnpm install js-yaml @notionhq/client @octokit/rest\n```\n\n---\n\n## 🔧 环境变量配置\n\n### 必需(已有)\n```env\nDEEPSEEK_API_KEY=sk-xxx\nWECOM_WEBHOOK_URL=https://...\n```\n\n### 推荐(新增)\n```env\n# Feishu 推送\nFEISHU_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/xxx\nFEISHU_SECRET=xxx\n\n# Telegram 增强\nTELEGRAM_CHANNEL_ID=-100xxx # 频道广播用\n\n# Notion 集成\nNOTION_API_KEY=secret_xxx\nNOTION_DATABASE_ID=xxx\n\n# GitHub 集成\nGITHUB_TOKEN=ghp_xxx\nGITHUB_REPO=username/repo-name\n```\n\n---\n\n## 📁 YAML 配置示例\n\n### sources.yaml\n```yaml\nhigh_frequency:\n - name: SFC\n type: rss\n url: https://www.sfc.hk/en/RSS-feed/Regulatory-news\n enabled: true\n \nlow_frequency:\n - name: Binance\n type: rss\n url: https://www.binance.com/en/feed/news\n enabled: true\n\nsettings:\n defaults:\n maxAgeHours: 48\n pushCooldownHours: 24\n```\n\n### 使用方式\n```javascript\nconst { loadSourcesConfig } = require('./config-loader');\nconst config = loadSourcesConfig();\nconsole.log(config.sources); // 自动加载 YAML\n```\n\n---\n\n## 🤖 AI 成本优化器\n\n### 使用批量处理\n```javascript\nconst { processBatchSmart } = require('./ai-optimizer');\n\nconst results = await processBatchSmart(items, {\n useSemanticDedup: true, // 语义去重\n respectBudget: true, // 预算控制\n recentInsights: [], // 行业记忆\n});\n```\n\n### 预期效果\n- AI 调用次数减少 50-70%\n- 日成本从 $10 降至 $4\n\n---\n\n## 📱 推送渠道对比\n\n| 渠道 | 适用场景 | 配置难度 |\n|------|---------|----------|\n| 企业微信 | 国内团队主力 | ⭐ |\n| Telegram | Web3 用户首选 | ⭐⭐ |\n| 飞书 | 国内企业 | ⭐⭐ |\n| Slack | 国际团队 | ⭐⭐ |\n| Email | 正式报告 | ⭐⭐⭐ |\n| RSS | 个人阅读器 | ⭐ |\n\n---\n\n## 🔄 定时任务说明\n\n| 时间 | 任务 | 说明 |\n|------|------|------|\n| 每 5 分钟 | 高频抓取 | T0 数据源 |\n| 每 30 分钟 | 低频抓取 | T1 数据源 |\n| 每小时 | 健康检查 | 故障告警 |\n| 每 6 小时 | Notion 同步 | 高价值情报 |\n| 每天 18:00 | 日报 | 企业微信 |\n| 每天 00:30 | GitHub 导出 | Releases 归档 |\n| 每周五 18:00 | 周报 | 企业微信 |\n| 每天 02:00 | 数据清理 | 生命周期管理 |\n\n---\n\n## 🐛 故障排查\n\n### 数据源健康告警\n```bash\n# 手动触发检查\ncurl -X POST http://localhost:3001/api/health/check\n\n# 重置某个源状态\ncurl -X POST http://localhost:3001/api/health/sources/Binance/reset\n```\n\n### AI 成本超预算\n```javascript\n// 查看当前状态\nconst { aiCostTracker } = require('./ai');\nconsole.log(aiCostTracker.getStatus());\n// { dailyCostUSD: '3.5', budgetUsedPercent: '35' }\n```\n\n### Notion/GitHub 集成失败\n```bash\n# 检查配置状态\ncurl http://localhost:3001/api/integrations/status\n```\n\n---\n\n## 📊 前端组件使用\n\n### 在 React 中使用\n```jsx\n// 数据源健康监控\nReact.createElement(SourceHealthPanel)\n\n// 趋势洞察\nReact.createElement(InsightsPanel)\n```\n\n### HTML 引入\n```html\n<script src=\"/components.js\"></script>\n<script>\n // 直接使用全局组件\n const panel = React.createElement(SourceHealthPanel);\n</script>\n```\n\n---\n\n## 🎯 最佳实践\n\n### 1. 添加新数据源\n```yaml\n# sources.yaml\nlow_frequency:\n - name: NewSource\n type: rss\n url: https://example.com/rss\n tier: low\n enabled: true\n maxAgeHours: 48\n```\n\n### 2. 调整 AI 预算\n```env\nAI_COST_DAILY_BUDGET_USD=15 # 提高预算\nAI_COST_ALERT_THRESHOLD=0.9 # 90% 时告警\n```\n\n### 3. 自定义推送频率\n```env\n# 修改 cron 表达式\nSCRAPE_HIGH_CRON=*/3 * * * * # 3 分钟一次\nSCRAPE_LOW_CRON=*/15 * * * * # 15 分钟一次\n```\n\n---\n\n## 📞 支持\n\n- 详细文档:`OPTIMIZATION_FINAL_REPORT.md`\n- API 文档:`http://localhost:3001/api-docs` (Swagger)\n- 问题反馈:GitHub Issues\n"}, "a9b514551d84b4469d5e67cb2d0885250fed3d81": {"t": 1786068478.347601, "n": 4112, "h": "1c4f744651ad4652", "c": "# Alpha Radar 快速参考指南\n\n## 🚀 新增功能速览\n\n### 1. 数据源健康监控\n```bash\n# 查看所有源状态\ncurl http://localhost:3001/api/health/sources\n\n# 查看单个源详情\ncurl http://localhost:3001/api/health/sources/Binance\n```\n\n### 2. RSS 订阅\n```bash\n# 获取高价值情报 RSS\ncurl http://localhost:3001/api/feed.rss?min_score=80&limit=20\n\n# JSON 格式\ncurl http://localhost:3001/api/feed.json?min_score=85\n```\n\n### 3. Notion 集成\n```bash\n# 同步高价值情报到 Notion\ncurl -X POST http://localhost:3001/api/integrations/notion/sync \\\n -H \"Content-Type: application/json\" \\\n -d '{\"minScore\":85,\"limit\":20}'\n```\n\n### 4. GitHub 集成\n```bash\n# 为高价值情报创建 Issues\ncurl -X POST http://localhost:3001/api/integrations/github/issues \\\n -H \"Content-Type: application/json\" \\\n -d '{\"minScore\":70,\"limit\":10}'\n\n# 导出昨日情报到 Release\ncurl -X POST http://localhost:3001/api/integrations/github/export-daily \\\n -H \"Content-Type: application/json\" \\\n -d '{\"date\":\"2026-03-15\"}'\n```\n\n---\n\n## 📦 依赖安装\n\n```bash\n# YAML 配置支持\nnpm install js-yaml\n\n# Notion 集成(可选)\nnpm install @notionhq/client\n\n# GitHub 集成(可选)\nnpm install @octokit/rest\n\n# 或者一次性安装所有\nnpm install js-yaml @notionhq/client @octokit/rest\n```\n\n---\n\n## 🔧 环境变量配置\n\n### 必需(已有)\n```env\nDEEPSEEK_API_KEY=sk-xxx\nWECOM_WEBHOOK_URL=https://...\n```\n\n### 推荐(新增)\n```env\n# Feishu 推送\nFEISHU_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/xxx\nFEISHU_SECRET=xxx\n\n# Telegram 增强\nTELEGRAM_CHANNEL_ID=-100xxx # 频道广播用\n\n# Notion 集成\nNOTION_API_KEY=secret_xxx\nNOTION_DATABASE_ID=xxx\n\n# GitHub 集成\nGITHUB_TOKEN=ghp_xxx\nGITHUB_REPO=username/repo-name\n```\n\n---\n\n## 📁 YAML 配置示例\n\n### sources.yaml\n```yaml\nhigh_frequency:\n - name: SFC\n type: rss\n url: https://www.sfc.hk/en/RSS-feed/Regulatory-news\n enabled: true\n \nlow_frequency:\n - name: Binance\n type: rss\n url: https://www.binance.com/en/feed/news\n enabled: true\n\nsettings:\n defaults:\n maxAgeHours: 48\n pushCooldownHours: 24\n```\n\n### 使用方式\n```javascript\nconst { loadSourcesConfig } = require('./config-loader');\nconst config = loadSourcesConfig();\nconsole.log(config.sources); // 自动加载 YAML\n```\n\n---\n\n## 🤖 AI 成本优化器\n\n### 使用批量处理\n```javascript\nconst { processBatchSmart } = require('./ai-optimizer');\n\nconst results = await processBatchSmart(items, {\n useSemanticDedup: true, // 语义去重\n respectBudget: true, // 预算控制\n recentInsights: [], // 行业记忆\n});\n```\n\n### 预期效果\n- AI 调用次数减少 50-70%\n- 日成本从 $10 降至 $4\n\n---\n\n## 📱 推送渠道对比\n\n| 渠道 | 适用场景 | 配置难度 |\n|------|---------|----------|\n| 企业微信 | 国内团队主力 | ⭐ |\n| Telegram | Web3 用户首选 | ⭐⭐ |\n| 飞书 | 国内企业 | ⭐⭐ |\n| Slack | 国际团队 | ⭐⭐ |\n| Email | 正式报告 | ⭐⭐⭐ |\n| RSS | 个人阅读器 | ⭐ |\n\n---\n\n## 🔄 定时任务说明\n\n| 时间 | 任务 | 说明 |\n|------|------|------|\n| 每 5 分钟 | 高频抓取 | T0 数据源 |\n| 每 30 分钟 | 低频抓取 | T1 数据源 |\n| 每小时 | 健康检查 | 故障告警 |\n| 每 6 小时 | Notion 同步 | 高价值情报 |\n| 每天 18:00 | 日报 | 企业微信 |\n| 每天 00:30 | GitHub 导出 | Releases 归档 |\n| 每周五 18:00 | 周报 | 企业微信 |\n| 每天 02:00 | 数据清理 | 生命周期管理 |\n\n---\n\n## 🐛 故障排查\n\n### 数据源健康告警\n```bash\n# 手动触发检查\ncurl -X POST http://localhost:3001/api/health/check\n\n# 重置某个源状态\ncurl -X POST http://localhost:3001/api/health/sources/Binance/reset\n```\n\n### AI 成本超预算\n```javascript\n// 查看当前状态\nconst { aiCostTracker } = require('./ai');\nconsole.log(aiCostTracker.getStatus());\n// { dailyCostUSD: '3.5', budgetUsedPercent: '35' }\n```\n\n### Notion/GitHub 集成失败\n```bash\n# 检查配置状态\ncurl http://localhost:3001/api/integrations/status\n```\n\n---\n\n## 📊 前端组件使用\n\n### 在 React 中使用\n```jsx\n// 数据源健康监控\nReact.createElement(SourceHealthPanel)\n\n// 趋势洞察\nReact.createElement(InsightsPanel)\n```\n\n### HTML 引入\n```html\n<script src=\"/components.js\"></script>\n<script>\n // 直接使用全局组件\n const panel = React.createElement(SourceHealthPanel);\n</script>\n```\n\n---\n\n## 🎯 最佳实践\n\n### 1. 添加新数据源\n```yaml\n# sources.yaml\nlow_frequency:\n - name: NewSource\n type: rss\n url: https://example.com/rss\n tier: low\n enabled: true\n maxAgeHours: 48\n```\n\n### 2. 调整 AI 预算\n```env\nAI_COST_DAILY_BUDGET_USD=15 # 提高预算\nAI_COST_ALERT_THRESHOLD=0.9 # 90% 时告警\n```\n\n### 3. 自定义推送频率\n```env\n# 修改 cron 表达式\nSCRAPE_HIGH_CRON=*/3 * * * * # 3 分钟一次\nSCRAPE_LOW_CRON=*/15 * * * * # 15 分钟一次\n```\n\n---\n\n## 📞 支持\n\n- 详细文档:`OPTIMIZATION_FINAL_REPORT.md`\n- API 文档:`http://localhost:3001/api-docs` (Swagger)\n- 问题反馈:GitHub Issues\n"}}, ".github/workflows/scrape.yml": {"c43ddfda01674fa608911544e3d5ed40c7a35ecd": {"t": 1785747035.114298, "n": 1354, "h": "706a9f70ffa28bea", "c": "name: Industry Feeds Scraper (Low-Freq)\n\non:\n schedule:\n - cron: '*/30 * * * *' # Run every 30 minutes\n workflow_dispatch: # Manual trigger\n\n# Prevent overlapping runs\nconcurrency:\n group: scrape-low\n cancel-in-progress: true\n\njobs:\n scrape:\n runs-on: ubuntu-latest\n timeout-minutes: 15\n steps:\n - name: Checkout code\n uses: actions/checkout@v6\n\n - name: Setup Node.js\n uses: actions/setup-node@v6\n with:\n node-version: '22'\n cache: 'npm'\n\n - name: Cache apt packages\n uses: awalsh128/cache-apt-pkgs-action@latest\n with:\n packages: google-chrome-stable tor\n version: 1.0\n\n - name: Install dependencies\n run: npm ci --prefer-offline\n\n - name: Start Tor\n run: |\n sudo service tor start\n echo \"Tor started (circuits establish during scraping)\"\n\n - name: Run Scrapers (Low-Freq)\n run: npm run scrape:low\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n PUPPETEER_EXECUTABLE_PATH: /usr/bin/google-chrome-stable\n DASHBOARD_URL: https://alpha-radar-eight.vercel.app\n"}, "5aa887f1e2b7eab4940499d15f9ebf03c6ef76ae": {"t": 1785766240.6563768, "n": 1354, "h": "706a9f70ffa28bea", "c": "name: Industry Feeds Scraper (Low-Freq)\n\non:\n schedule:\n - cron: '*/30 * * * *' # Run every 30 minutes\n workflow_dispatch: # Manual trigger\n\n# Prevent overlapping runs\nconcurrency:\n group: scrape-low\n cancel-in-progress: true\n\njobs:\n scrape:\n runs-on: ubuntu-latest\n timeout-minutes: 15\n steps:\n - name: Checkout code\n uses: actions/checkout@v6\n\n - name: Setup Node.js\n uses: actions/setup-node@v6\n with:\n node-version: '22'\n cache: 'npm'\n\n - name: Cache apt packages\n uses: awalsh128/cache-apt-pkgs-action@latest\n with:\n packages: google-chrome-stable tor\n version: 1.0\n\n - name: Install dependencies\n run: npm ci --prefer-offline\n\n - name: Start Tor\n run: |\n sudo service tor start\n echo \"Tor started (circuits establish during scraping)\"\n\n - name: Run Scrapers (Low-Freq)\n run: npm run scrape:low\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n PUPPETEER_EXECUTABLE_PATH: /usr/bin/google-chrome-stable\n DASHBOARD_URL: https://alpha-radar-eight.vercel.app\n"}, "feedc913410fc9ccb09a61690304f3b74f3daaf0": {"t": 1785766242.0022087, "n": 1354, "h": "c47ceb45f2c3486a", "c": "name: Industry Feeds Scraper (Low-Freq)\n\non:\n schedule:\n - cron: '*/30 * * * *' # Run every 30 minutes\n workflow_dispatch: # Manual trigger\n\n# Prevent overlapping runs\nconcurrency:\n group: scrape-low\n cancel-in-progress: true\n\njobs:\n scrape:\n runs-on: ubuntu-latest\n timeout-minutes: 15\n steps:\n - name: Checkout code\n uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n cache: 'npm'\n\n - name: Cache apt packages\n uses: awalsh128/cache-apt-pkgs-action@latest\n with:\n packages: google-chrome-stable tor\n version: 1.0\n\n - name: Install dependencies\n run: npm ci --prefer-offline\n\n - name: Start Tor\n run: |\n sudo service tor start\n echo \"Tor started (circuits establish during scraping)\"\n\n - name: Run Scrapers (Low-Freq)\n run: npm run scrape:low\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n PUPPETEER_EXECUTABLE_PATH: /usr/bin/google-chrome-stable\n DASHBOARD_URL: https://alpha-radar-eight.vercel.app\n"}, "9dec62fef7c04df88dca244e272991731edcaa63": {"t": 1785766243.7966373, "n": 1158, "h": "8273c3ee1bc3ed97", "c": "name: Industry Feeds Scraper (Low-Freq)\n\non:\n schedule:\n - cron: '*/30 * * * *' # Run every 30 minutes\n workflow_dispatch: # Manual trigger\n\njobs:\n scrape:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n cache: 'npm'\n\n - name: Install dependencies\n run: npm install\n\n - name: Install Chromium and Tor\n run: |\n sudo apt-get update && sudo apt-get install -y google-chrome-stable tor\n sudo service tor start\n echo \"Tor started (circuits establish during scraping)\"\n\n - name: Run Scrapers (Low-Freq)\n run: npm run scrape:low\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n PUPPETEER_EXECUTABLE_PATH: /usr/bin/google-chrome-stable\n DASHBOARD_URL: https://alpha-radar-eight.vercel.app\n"}, "0dd18a68a858ce2767406eb45ae3ff8aca28e62a": {"t": 1785766246.082019, "n": 1096, "h": "376c31cc7cfdc0b2", "c": "name: Industry Feeds Scraper (Low-Freq)\n\non:\n schedule:\n - cron: '*/30 * * * *' # Run every 30 minutes\n workflow_dispatch: # Manual trigger\n\njobs:\n scrape:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n cache: 'npm'\n\n - name: Install dependencies\n run: npm install\n\n - name: Install Chromium and Tor\n run: |\n sudo apt-get update && sudo apt-get install -y google-chrome-stable tor\n sudo service tor start\n echo \"Tor started (circuits establish during scraping)\"\n\n - name: Run Scrapers (Low-Freq)\n run: npm run scrape:low\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n PUPPETEER_EXECUTABLE_PATH: /usr/bin/google-chrome-stable\n"}, "bd03a6b0ccd2a5b06521718baec095e7a86c271a": {"t": 1785766248.01976, "n": 1070, "h": "872dccd3711e0963", "c": "name: Industry Feeds Scraper\n\non:\n schedule:\n - cron: '*/15 * * * *' # Run every 15 minutes\n workflow_dispatch: # Manual trigger\n\njobs:\n scrape:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n cache: 'npm'\n\n - name: Install dependencies\n run: npm install\n\n - name: Install Chromium and Tor\n run: |\n sudo apt-get update && sudo apt-get install -y google-chrome-stable tor\n sudo service tor start\n echo \"Tor started (circuits establish during scraping)\"\n\n - name: Run Scrapers\n run: npm run scrape\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n PUPPETEER_EXECUTABLE_PATH: /usr/bin/google-chrome-stable\n"}, "2e6b01a02b72c7bfe4e6e25c77605a17eb09758f": {"t": 1785766249.6883602, "n": 1075, "h": "bfdfc918c8668813", "c": "name: Industry Feeds Scraper\n\non:\n schedule:\n - cron: '*/15 * * * *' # Run every 15 minutes\n workflow_dispatch: # Manual trigger\n\njobs:\n scrape:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n cache: 'npm'\n\n - name: Install dependencies\n run: npm install\n\n - name: Install Chromium and Tor\n run: |\n sudo apt-get update && sudo apt-get install -y google-chrome-stable tor\n sudo service tor start\n echo \"Tor started (circuits establish during scraping)\"\n\n - name: Run Scrapers\n run: node test_scrape.js\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n PUPPETEER_EXECUTABLE_PATH: /usr/bin/google-chrome-stable\n"}, "2326f6a16c5aedc325e267d9720544271b0a6c15": {"t": 1785766251.6094038, "n": 953, "h": "c565b59374d7d970", "c": "name: Industry Feeds Scraper\n\non:\n schedule:\n - cron: '*/15 * * * *' # Run every 15 minutes\n workflow_dispatch: # Manual trigger\n\njobs:\n scrape:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n cache: 'npm'\n\n - name: Install dependencies\n run: npm install\n\n - name: Install Chromium and Tor\n run: |\n sudo apt-get update && sudo apt-get install -y google-chrome-stable tor\n sudo service tor start\n echo \"Tor started (circuits establish during scraping)\"\n\n - name: Run Scrapers\n run: node test_scrape.js\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n USE_SUPABASE: true\n PUPPETEER_EXECUTABLE_PATH: /usr/bin/google-chrome-stable\n"}, "59de143e8edd71c7b92c1c606a88e8671087e4be": {"t": 1785766252.9773622, "n": 1103, "h": "632694d940b4d46a", "c": "name: Industry Feeds Scraper\n\non:\n schedule:\n - cron: '*/15 * * * *' # Run every 15 minutes\n workflow_dispatch: # Manual trigger\n\njobs:\n scrape:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n cache: 'npm'\n\n - name: Install dependencies\n run: npm install\n\n - name: Install Chromium and Tor\n run: |\n sudo apt-get update && sudo apt-get install -y google-chrome-stable tor\n sudo service tor start\n # Pre-warm Tor circuits before running scrapers (typically takes 30-60s)\n curl --silent --max-time 90 --socks5 127.0.0.1:9050 https://check.torproject.org/api/ip || true\n echo \"Tor ready\"\n\n - name: Run Scrapers\n run: node test_scrape.js\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n USE_SUPABASE: true\n PUPPETEER_EXECUTABLE_PATH: /usr/bin/google-chrome-stable\n"}, "0de6099eeaa9431cb2db0ab8fbd6b91098d50bd6": {"t": 1785766256.6659584, "n": 879, "h": "b1cc11c176365e7e", "c": "name: Industry Feeds Scraper\n\non:\n schedule:\n - cron: '*/15 * * * *' # Run every 15 minutes\n workflow_dispatch: # Manual trigger\n\njobs:\n scrape:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n cache: 'npm'\n\n - name: Install dependencies\n run: npm install\n\n - name: Install Chromium and Tor\n run: sudo apt-get update && sudo apt-get install -y google-chrome-stable tor && sudo service tor start && sleep 8\n\n - name: Run Scrapers\n run: node test_scrape.js\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n USE_SUPABASE: true\n PUPPETEER_EXECUTABLE_PATH: /usr/bin/google-chrome-stable\n"}, "7ba5d778cfd634f538eb030f2408368172b4535e": {"t": 1785766258.169941, "n": 830, "h": "263600f02318f17f", "c": "name: Industry Feeds Scraper\n\non:\n schedule:\n - cron: '*/15 * * * *' # Run every 15 minutes\n workflow_dispatch: # Manual trigger\n\njobs:\n scrape:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n cache: 'npm'\n\n - name: Install dependencies\n run: npm install\n\n - name: Install Chromium\n run: sudo apt-get update && sudo apt-get install -y google-chrome-stable\n\n - name: Run Scrapers\n run: node test_scrape.js\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n USE_SUPABASE: true\n PUPPETEER_EXECUTABLE_PATH: /usr/bin/google-chrome-stable\n"}, "c610b00f4b8d8a47d522ef362719209609a2197b": {"t": 1786068024.769657, "n": 1354, "h": "706a9f70ffa28bea", "c": "name: Industry Feeds Scraper (Low-Freq)\n\non:\n schedule:\n - cron: '*/30 * * * *' # Run every 30 minutes\n workflow_dispatch: # Manual trigger\n\n# Prevent overlapping runs\nconcurrency:\n group: scrape-low\n cancel-in-progress: true\n\njobs:\n scrape:\n runs-on: ubuntu-latest\n timeout-minutes: 15\n steps:\n - name: Checkout code\n uses: actions/checkout@v6\n\n - name: Setup Node.js\n uses: actions/setup-node@v6\n with:\n node-version: '22'\n cache: 'npm'\n\n - name: Cache apt packages\n uses: awalsh128/cache-apt-pkgs-action@latest\n with:\n packages: google-chrome-stable tor\n version: 1.0\n\n - name: Install dependencies\n run: npm ci --prefer-offline\n\n - name: Start Tor\n run: |\n sudo service tor start\n echo \"Tor started (circuits establish during scraping)\"\n\n - name: Run Scrapers (Low-Freq)\n run: npm run scrape:low\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n PUPPETEER_EXECUTABLE_PATH: /usr/bin/google-chrome-stable\n DASHBOARD_URL: https://alpha-radar-eight.vercel.app\n"}, "a9b514551d84b4469d5e67cb2d0885250fed3d81": {"t": 1786068224.4404798, "n": 1354, "h": "706a9f70ffa28bea", "c": "name: Industry Feeds Scraper (Low-Freq)\n\non:\n schedule:\n - cron: '*/30 * * * *' # Run every 30 minutes\n workflow_dispatch: # Manual trigger\n\n# Prevent overlapping runs\nconcurrency:\n group: scrape-low\n cancel-in-progress: true\n\njobs:\n scrape:\n runs-on: ubuntu-latest\n timeout-minutes: 15\n steps:\n - name: Checkout code\n uses: actions/checkout@v6\n\n - name: Setup Node.js\n uses: actions/setup-node@v6\n with:\n node-version: '22'\n cache: 'npm'\n\n - name: Cache apt packages\n uses: awalsh128/cache-apt-pkgs-action@latest\n with:\n packages: google-chrome-stable tor\n version: 1.0\n\n - name: Install dependencies\n run: npm ci --prefer-offline\n\n - name: Start Tor\n run: |\n sudo service tor start\n echo \"Tor started (circuits establish during scraping)\"\n\n - name: Run Scrapers (Low-Freq)\n run: npm run scrape:low\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n PUPPETEER_EXECUTABLE_PATH: /usr/bin/google-chrome-stable\n DASHBOARD_URL: https://alpha-radar-eight.vercel.app\n"}}, ".github/workflows/weekly_report.yml": {"c43ddfda01674fa608911544e3d5ed40c7a35ecd": {"t": 1785747036.645131, "n": 1120, "h": "adc194fd667ae46d", "c": "name: Weekly Report\n\non:\n workflow_dispatch: # 仅手动触发(周报改为人工撰写后手动发送邮件)\n\njobs:\n weekly-report:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v6\n\n - name: Setup Node.js\n uses: actions/setup-node@v6\n with:\n node-version: '22'\n\n - name: Install dependencies (skip scripts)\n run: npm ci --ignore-scripts\n\n - name: Build better-sqlite3 from source\n run: npx node-gyp rebuild --release\n working-directory: node_modules/better-sqlite3\n\n - name: Run Weekly Report\n run: node run_weekly_report.js\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n SMTP_HOST: ${{ secrets.SMTP_HOST }}\n SMTP_PORT: ${{ secrets.SMTP_PORT }}\n SMTP_USER: ${{ secrets.SMTP_USER }}\n SMTP_PASS: ${{ secrets.SMTP_PASS }}\n WEEKLY_EMAIL_TO: ${{ secrets.WEEKLY_EMAIL_TO }}\n"}, "5aa887f1e2b7eab4940499d15f9ebf03c6ef76ae": {"t": 1785766241.729857, "n": 1120, "h": "adc194fd667ae46d", "c": "name: Weekly Report\n\non:\n workflow_dispatch: # 仅手动触发(周报改为人工撰写后手动发送邮件)\n\njobs:\n weekly-report:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v6\n\n - name: Setup Node.js\n uses: actions/setup-node@v6\n with:\n node-version: '22'\n\n - name: Install dependencies (skip scripts)\n run: npm ci --ignore-scripts\n\n - name: Build better-sqlite3 from source\n run: npx node-gyp rebuild --release\n working-directory: node_modules/better-sqlite3\n\n - name: Run Weekly Report\n run: node run_weekly_report.js\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n SMTP_HOST: ${{ secrets.SMTP_HOST }}\n SMTP_PORT: ${{ secrets.SMTP_PORT }}\n SMTP_USER: ${{ secrets.SMTP_USER }}\n SMTP_PASS: ${{ secrets.SMTP_PASS }}\n WEEKLY_EMAIL_TO: ${{ secrets.WEEKLY_EMAIL_TO }}\n"}, "c403edf43e34a2e220ddf40bccd73724b77070ed": {"t": 1785766243.6978493, "n": 1120, "h": "fb565b652db7ca6d", "c": "name: Weekly Report\n\non:\n workflow_dispatch: # 仅手动触发(周报改为人工撰写后手动发送邮件)\n\njobs:\n weekly-report:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '22'\n\n - name: Install dependencies (skip scripts)\n run: npm ci --ignore-scripts\n\n - name: Build better-sqlite3 from source\n run: npx node-gyp rebuild --release\n working-directory: node_modules/better-sqlite3\n\n - name: Run Weekly Report\n run: node run_weekly_report.js\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n SMTP_HOST: ${{ secrets.SMTP_HOST }}\n SMTP_PORT: ${{ secrets.SMTP_PORT }}\n SMTP_USER: ${{ secrets.SMTP_USER }}\n SMTP_PASS: ${{ secrets.SMTP_PASS }}\n WEEKLY_EMAIL_TO: ${{ secrets.WEEKLY_EMAIL_TO }}\n"}, "66cc25e8fa0e4639c66687a3f66cef9f7f7b355f": {"t": 1785766245.0481062, "n": 1173, "h": "b57d241dd5912dd4", "c": "name: Weekly Report\n\non:\n schedule:\n # 每周五北京时间 18:00 (= UTC 10:00)\n - cron: '0 10 * * 5'\n workflow_dispatch: # 手动触发\n\njobs:\n weekly-report:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '22'\n\n - name: Install dependencies (skip scripts)\n run: npm ci --ignore-scripts\n\n - name: Build better-sqlite3 from source\n run: npx node-gyp rebuild --release\n working-directory: node_modules/better-sqlite3\n\n - name: Run Weekly Report\n run: node run_weekly_report.js\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n SMTP_HOST: ${{ secrets.SMTP_HOST }}\n SMTP_PORT: ${{ secrets.SMTP_PORT }}\n SMTP_USER: ${{ secrets.SMTP_USER }}\n SMTP_PASS: ${{ secrets.SMTP_PASS }}\n WEEKLY_EMAIL_TO: ${{ secrets.WEEKLY_EMAIL_TO }}\n"}, "e29f61704a3b23077c8fa080bfc0ce511c619c90": {"t": 1785766246.435793, "n": 931, "h": "229138c198bfee07", "c": "name: Weekly Report\n\non:\n schedule:\n # 每周五北京时间 18:00 (= UTC 10:00)\n - cron: '0 10 * * 5'\n workflow_dispatch: # 手动触发\n\njobs:\n weekly-report:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '22'\n\n - name: Install dependencies (skip scripts)\n run: npm ci --ignore-scripts\n\n - name: Build better-sqlite3 from source\n run: npx node-gyp rebuild --release\n working-directory: node_modules/better-sqlite3\n\n - name: Run Weekly Report\n run: node run_weekly_report.js\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n"}, "71f6f0579e5f0b05f1967f92be6bccf34bb36d02": {"t": 1785766248.0401952, "n": 812, "h": "1fdffb43f5cab661", "c": "name: Weekly Report\n\non:\n schedule:\n # 每周五北京时间 18:00 (= UTC 10:00)\n - cron: '0 10 * * 5'\n workflow_dispatch: # 手动触发\n\njobs:\n weekly-report:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n\n - name: Install dependencies\n run: npm ci\n env:\n npm_config_build_from_source: 'true'\n\n - name: Run Weekly Report\n run: node run_weekly_report.js\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n"}, "3a1414398082c288b612ef6bc8ddd485b7b5ec68": {"t": 1785766250.0022082, "n": 853, "h": "acd40179037cd397", "c": "name: Weekly Report\n\non:\n schedule:\n # 每周五北京时间 18:00 (= UTC 10:00)\n - cron: '0 10 * * 5'\n workflow_dispatch: # 手动触发\n\njobs:\n weekly-report:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n cache: 'npm'\n\n - name: Install dependencies\n run: npm ci\n\n - name: Rebuild native modules\n run: npm rebuild better-sqlite3\n\n - name: Run Weekly Report\n run: node run_weekly_report.js\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n"}, "9e36f89185a7bf59916358d007b5872de2112144": {"t": 1785766251.392576, "n": 775, "h": "7fb0f4197c22d06f", "c": "name: Weekly Report\n\non:\n schedule:\n # 每周五北京时间 18:00 (= UTC 10:00)\n - cron: '0 10 * * 5'\n workflow_dispatch: # 手动触发\n\njobs:\n weekly-report:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n cache: 'npm'\n\n - name: Install dependencies\n run: npm ci\n\n - name: Run Weekly Report\n run: node run_weekly_report.js\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n"}, "04b47db20cdfe243a99cdc78f4c9409c2a5cbead": {"t": 1785766253.1176183, "n": 780, "h": "d5c4d43a56f8b724", "c": "name: Weekly Report\n\non:\n schedule:\n # 每周五北京时间 18:00 (= UTC 10:00)\n - cron: '0 10 * * 5'\n workflow_dispatch: # 手动触发\n\njobs:\n weekly-report:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n cache: 'npm'\n\n - name: Install dependencies\n run: npm install\n\n - name: Run Weekly Report\n run: node run_weekly_report.js\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n"}, "c610b00f4b8d8a47d522ef362719209609a2197b": {"t": 1786068025.7691197, "n": 1120, "h": "adc194fd667ae46d", "c": "name: Weekly Report\n\non:\n workflow_dispatch: # 仅手动触发(周报改为人工撰写后手动发送邮件)\n\njobs:\n weekly-report:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v6\n\n - name: Setup Node.js\n uses: actions/setup-node@v6\n with:\n node-version: '22'\n\n - name: Install dependencies (skip scripts)\n run: npm ci --ignore-scripts\n\n - name: Build better-sqlite3 from source\n run: npx node-gyp rebuild --release\n working-directory: node_modules/better-sqlite3\n\n - name: Run Weekly Report\n run: node run_weekly_report.js\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n SMTP_HOST: ${{ secrets.SMTP_HOST }}\n SMTP_PORT: ${{ secrets.SMTP_PORT }}\n SMTP_USER: ${{ secrets.SMTP_USER }}\n SMTP_PASS: ${{ secrets.SMTP_PASS }}\n WEEKLY_EMAIL_TO: ${{ secrets.WEEKLY_EMAIL_TO }}\n"}, "a9b514551d84b4469d5e67cb2d0885250fed3d81": {"t": 1786068224.9583957, "n": 1120, "h": "adc194fd667ae46d", "c": "name: Weekly Report\n\non:\n workflow_dispatch: # 仅手动触发(周报改为人工撰写后手动发送邮件)\n\njobs:\n weekly-report:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v6\n\n - name: Setup Node.js\n uses: actions/setup-node@v6\n with:\n node-version: '22'\n\n - name: Install dependencies (skip scripts)\n run: npm ci --ignore-scripts\n\n - name: Build better-sqlite3 from source\n run: npx node-gyp rebuild --release\n working-directory: node_modules/better-sqlite3\n\n - name: Run Weekly Report\n run: node run_weekly_report.js\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n WECOM_WEBHOOK_URL: ${{ secrets.WECOM_WEBHOOK_URL }}\n USE_SUPABASE: true\n SMTP_HOST: ${{ secrets.SMTP_HOST }}\n SMTP_PORT: ${{ secrets.SMTP_PORT }}\n SMTP_USER: ${{ secrets.SMTP_USER }}\n SMTP_PASS: ${{ secrets.SMTP_PASS }}\n WEEKLY_EMAIL_TO: ${{ secrets.WEEKLY_EMAIL_TO }}\n"}}}} |