惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 尘梦

centos6 安装gcc 多版本 自定义编译bulma 神通mysql模式转 mysql ai数学书籍 chromedriver 网络安全渗透测试写法 编译php需要的扩展 python 合并同列数据 组合 新的excel - 尘梦 vue table 表格记录选中 - 尘梦 linux wktohtmlpdf 结合/tmp路径 无法创建问题 c语言开发 php扩展 sm4 macos php 如何链接神通数据库aci layui table tr a标签倒计时 操作 刷新以后继续倒计时 使用c# 开发 php的com组件 世界级地图数据处理 及 联动效果 php 结合pcntl_fork导出excel数据 使用 python 部署chatglm2b macos 下连接php 人大金仓pdo_kdb问题 php curl 多次发送
calude code 2.188 根据cli.map还原
尘梦 · 2026-04-02 · via 博客园 - 尘梦

得益于 cli.map的sourcesContent

然后还原脚本:

const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');

const MAP_FILE = './cli.js.map';
const OUTPUT_DIR = './restored_source';

function safeWriteFile(filePath, content) {
  fs.mkdirSync(path.dirname(filePath), { recursive: true });
  fs.writeFileSync(filePath, content, 'utf8');
}

function normalizeSourcePath(source, index) {
  if (!source || typeof source !== 'string') {
    return `unknown_${index}.js`;
  }

  let normalized = source
    .replace(/^webpack:\/\//, '')
    .replace(/^file:\/\//, '')
    .replace(/^\//, '')
    .replace(/[<>:"|?*]/g, '_');

  if (!normalized.trim()) {
    normalized = `unknown_${index}.js`;
  }

  return normalized;
}

function restoreMap() {
  if (!fs.existsSync(MAP_FILE)) {
    throw new Error(`找不到文件: ${MAP_FILE}`);
  }

  const map = JSON.parse(fs.readFileSync(MAP_FILE, 'utf8'));
  const sources = Array.isArray(map.sources) ? map.sources : [];
  const sourcesContent = Array.isArray(map.sourcesContent) ? map.sourcesContent : null;

  console.log(`sources 数量: ${sources.length}`);
  console.log(`包含 sourcesContent: ${!!sourcesContent}`);

  if (!sources.length) {
    throw new Error('map 文件里没有 sources');
  }

  if (!sourcesContent) {
    throw new Error('map 文件里没有 sourcesContent,无法直接还原完整源码');
  }

  let restoredCount = 0;

  sources.forEach((source, index) => {
    const content = sourcesContent[index];

    if (content == null) {
      console.warn(`跳过 ${source},因为没有对应内容`);
      return;
    }

    const relativePath = normalizeSourcePath(source, index);
    const outputPath = path.join(OUTPUT_DIR, relativePath);

    safeWriteFile(outputPath, content);
    restoredCount++;
    console.log(`已还原: ${outputPath}`);
  });

  console.log(`完成,共还原 ${restoredCount} 个文件`);
}

function formatFiles() {
  try {
    execSync(`npx prettier --write "${OUTPUT_DIR}/**/*.{js,ts,jsx,tsx,json,css,scss,vue}"`, {
      stdio: 'inherit'
    });
  } catch (err) {
    console.warn('格式化失败');
  }
}

function main() {
  try {
    restoreMap();
    formatFiles();
  } catch (err) {
    console.error('执行失败:', err.message);
    process.exit(1);
  }
}

main();

已还原: src\utils\zodToJsonSchema.ts
已还原: src\utils\toolSearch.ts
已还原: src\services\vcr.ts
已还原: src\services\tokenEstimation.ts
已还原: src\utils\pdf.ts
已还原: src\tools\FileReadTool\limits.ts
已还原: src\tools\FileReadTool\UI.tsx
已还原: src\tools\FileReadTool\FileReadTool.ts
已还原: src\types\textInputTypes.ts
已还原: src\utils\mcpInstructionsDelta.ts
已还原: src\utils\claudeInChrome\prompt.ts
已还原: src\utils\hooks\hookEvents.ts
已还原: src\utils\hooks\AsyncHookRegistry.ts
已还原: src\utils\messagePredicates.ts
已还原: src\memdir\findRelevantMemories.ts
已还原: src\utils\attachments.ts