mcpField
B
baoyu-electron-extract

baoyu-electron-extract

github.com/guanyang开发986204 次安装今天更新
代码仓库

关于 baoyu-electron-extract

用于从 Electron 应用提取文件并恢复可用源代码的技能,适合检查或研究应用包内容的开发者。它可从 source map 重建源文件,并格式化提取出的 JS/CSS。

主要功能

  1. 01发现应用并提取 asar 内容
  2. 02根据 source map 恢复源文件
  3. 03使用 Prettier 格式化 JS/CSS
  4. 04复制 app.asar.unpacked 内容
  5. 05提供 dry-run 与 JSON 摘要

适用场景

  1. 01检查 Electron 应用打包内容
  2. 02恢复嵌入 source map 的源码
  3. 03格式化提取出的 JS 和 CSS
  4. 04预览输出路径而不写入文件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/guanyang/open-agent-hub --skill baoyu-electron-extract

安装后在 Claude Code 中输入/baoyu-electron-extract确认已加载。

附带文件scripts/main.test.tsscripts/main.ts

详细介绍

Electron 应用提取

用户输入工具

当此技能提示用户时,请遵循以下工具选择规则(按优先级排序):

  1. 优先使用当前 Agent 运行时提供的内置用户输入工具,例如 AskUserQuestion、request_user_input、clarify、ask_user 或任何等效工具。
  2. 备用方案:如果没有此类工具,请发送带编号的纯文本消息,并请用户针对每个问题回复所选编号/答案。
  3. 批处理:如果工具支持每次调用提出多个问题,请将所有适用问题合并为一次调用;如果每次只能提出一个问题,则按优先级逐一提问。

以下 AskUserQuestion 引用仅为示例 — 在其他运行时中请替换为本地等效工具。

脚本目录

{baseDir} = 此 SKILL.md 所在目录。解析 ${BUN_X}:如果已安装 bun,则使用 bun;否则使用 npx -y bun;否则建议安装 bun。将 {baseDir} 和 ${BUN_X} 替换为实际值。

脚本用途
scripts/main.ts应用发现 + asar 提取 + source-map 还原 + Prettier 格式化

工作流

1. 确定输入。 接受应用名称(例如 Codex)或绝对路径(/Applications/Codex.app、.asar 文件或 Windows 安装目录)。如果用户未提供,请询问;如果用户想指定输出目录,也请询问。

2. 运行脚本。

${BUN_X} {baseDir}/scripts/main.ts "<app>" [--output <dir>] [--asar <path>] [--force]

如果不确定是否能发现正确的捆绑包,请先使用 --dry-run 运行(打印解析后的路径,不写入任何内容)。

3. 处理结果。

  • 成功 → 报告输出路径和数量(已提取/已还原/已格式化)。
  • 多个匹配项 → 脚本会列出候选项并以非零状态码退出。请询问用户要选择哪一个(通过 AskUserQuestion 或运行时的等效工具),然后使用所选的绝对路径重新运行。
  • 输出目录已存在且非空 → 脚本会在未使用 --force 的情况下拒绝继续。请询问用户是要覆盖(--force)还是选择新的 --output。
  • 平台不受支持/未找到匹配项 → 如果用户知道捆绑包所在位置,建议使用 --asar /full/path/to/app.asar。

4. 指引用户查看结果(默认路径为 ~/Downloads/<AppName>-electron-extract/):

  • 存在 restored/ → 从 .js.map 文件重建的原始源代码树;请先查看此目录。
  • 仅有 extracted/(没有映射文件)→ extracted/ 中的 JS/CSS 已就地使用 Prettier 格式化;请从此目录查看。

用法

${BUN_X} {baseDir}/scripts/main.ts Codex                                   # → ~/Downloads/Codex-electron-extract/
${BUN_X} {baseDir}/scripts/main.ts "/Applications/Visual Studio Code.app"  # .app bundle, install dir, or .asar
${BUN_X} {baseDir}/scripts/main.ts "C:\Users\you\AppData\Local\Programs\codex"
${BUN_X} {baseDir}/scripts/main.ts --asar /Applications/Codex.app/Contents/Resources/app.asar Codex
${BUN_X} {baseDir}/scripts/main.ts Codex --output ~/work/codex-source
${BUN_X} {baseDir}/scripts/main.ts Codex --json                            # one JSON line on stdout

选项

选项简写描述默认值
<app>应用名称或绝对路径。除非提供 --asar,否则必填。—
--output-o输出目录~/Downloads/<AppName>-electron-extract
--asar覆盖解析得到的 .asar 路径自动发现
--force-f允许写入已存在且非空的输出目录false
--skip-format跳过 Prettier 格式化false
--skip-restore跳过源码映射还原false
--no-unpacked不将 app.asar.unpacked/ 一并复制false
--dry-run打印解析后的路径并退出,不写入任何内容false
--json在 stdout 输出一行 JSON 摘要(不输出常规内容)false

输出布局

~/Downloads/<AppName>-electron-extract/
├── extract-report.json          # JSON summary: counts, warnings, resolved paths
├── extracted/                   # raw asar contents (JS/CSS Prettier-formatted when no map)
│   └── ...                      # node_modules left untouched (skipped from format)
├── extracted.unpacked/          # copied from <asar>.unpacked/ if present
│   └── ...                      # native modules (.node), large assets
└── restored/                    # only present if at least one .js.map was usable
    └── <original/source/tree>   # rebuilt from sourcesContent in each .js.map

源码映射路径还原

在映射文件允许的范围内保留原始源码名称和目录结构:

  • 如果存在 sourceRoot,则解析每个 sources[] 条目;之后相对于 extracted/ 中 .js.map 文件所在目录进行解析。例如,.vite/main/index.js.map + ../../src/main.ts → restored/src/main.ts。
  • ../ 片段不会被自动视为不安全:先从映射文件所在位置进行解析,再清理最终路径,确保它位于 restored/ 下。若路径向上越过 extracted/,则保留可读的剩余部分:.vite/main/index.js.map + ../../../shared/src/lib/foo.ts → restored/shared/src/lib/foo.ts。
  • 会剥除 URL 和查询字符串修饰内容(webpack://、file://、?loader 后缀)。
  • 只有当源码名称为空或无法还原为安全的文件路径时,才会使用 restored/__unknown/<hash>.<ext>。
  • 跳过 node_modules 和 webpack/runtime/* 条目(打包器/运行时噪声)。

备注

  • 始终跳过 node_modules,源码映射还原和 Prettier 格式化均如此。
  • 还原需要内嵌的 sourcesContent(webpack、esbuild、Vite、rollup 常见)。引用外部文件但未内嵌其内容的映射会被跳过,改为使用 Prettier 格式化 .js;被跳过的映射会列在 extract-report.json 的 warnings 中。
  • 应用发现:macOS 会搜索 /Applications 和 ~/Applications;Windows 会搜索 %LOCALAPPDATA%\Programs、%PROGRAMFILES%、%PROGRAMFILES(X86)%、%APPDATA%。如果匹配到多个结果,脚本会退出并列出这些结果;请使用绝对路径重新运行。Linux/其他系统:传入 --asar /path/to/app.asar。
  • 安全性:拒绝写入 /、用户主目录本身或当前工作目录;如果输出目录已存在且非空,也会拒绝写入,除非指定 --force。
  • 不进行全局安装:@electron/asar 和 prettier 会通过 npx -y 即时解析;首次运行时,npx 缓存这些包会比较慢。

评论

支持 Markdown