Skip to content

Repository files navigation

MaZhu

MaZhu · 软著代码抽取器

把本地代码项目整理成便于软件著作权申报的源程序文档

全程离线 · 代码不出本机 · 规范内置 · 导出前自动校验

License: Apache-2.0 Release Platform Electron PRs Welcome


MaZhu v0.4.1 — 项目文件目录树、关键字实时筛选、文件排序与类型统计
MaZhu v0.4.1 — 源程序分页预览、完整首尾标签、前后段分界与页码导航

为什么做这个

申请软件著作权登记时,需要提交源程序鉴别材料:前后各连续 30 页、每页不少于 50 行、页眉标注软件全称+版本号……格式细节繁多,一处不合就被退回补正。手工整理一次要花几个小时,而市面上的工具要么只做简单拼接、要么依赖在线服务(代码泄露风险)。

MaZhu 把常见的软件著作权源程序材料规则整理成一套本地流水线:导入项目 → 五步向导 → 导出文档,并在导出前自动检查页数、行数、页眉和署名等风险,帮助减少手工整理错误与补正概率。

除桌面应用外,码著还提供命令行界面 (mazhu) 与 Claude Code Skill 封装(skills/mazhu/),可直接在终端或 AI 编码环境里完成整理与导出。

安装

从源码运行(当前推荐)

git clone https://github.com/kcylp/mazhu.git
cd mazhu
npm install
npm run dev        # 启动桌面应用

命令行

npx tsx packages/cli/src/main.ts --help

# 只扫描,看文件数 / 行数 / 预估页数
npx tsx packages/cli/src/main.ts scan ./my-project --title "我的软件 V1.0"

# 完整流程并导出 docx(--title 必填,须与申请表完全一致)
npx tsx packages/cli/src/main.ts run ./my-project \
  --title "我的软件 V1.0" --out ./out

# 生成文档材料(用户使用说明书 / 设计说明书)
npx tsx packages/cli/src/main.ts doc \
  --type design --spec examples/design-spec.json --out ./out

doc 命令生成软著登记所需的文档鉴别材料——用户使用说明书或设计说明书,带封面、 目录、页眉、页码。它不读代码、不分析项目,只把 spec JSON 里的章节内容排版成合规 docx;内容由你本人或 AI 提供。模板与格式见 examples/ 目录。

AI 工具 Skill 封装

码著的核心是一个跨工具通用的 mazhu CLI;不同 AI 编码工具只需用各自的规则文件 告诉模型怎么调它。已支持 Claude Code、Codex、DeepSeek Harness / Kun、WorkBuddy、 Cursor、Copilot 等(基于 SKILL.mdAGENTS.md 两个约定):

工具 接入方式
Claude Code skills/mazhu/~/.claude/skills/(或项目 .claude/skills/
Codex / Cursor / Copilot / WorkBuddy 等 拷根目录 AGENTS.md 到目标项目根目录
DeepSeek Harness / Kun AGENTS.md 到项目根 + .agents/skills/mazhu/.agents/skills/
# Claude Code(macOS / Linux)
cp -r skills/mazhu ~/.claude/skills/mazhu

# Claude Code(Windows PowerShell)
Copy-Item -Recurse skills\mazhu "$env:USERPROFILE\.claude\skills\mazhu"

之后说「帮我把这个项目整理成软著要的源代码材料」「帮这个项目生成软著设计说明书」就会触发, 模型会调用 CLI 的 --json 输出、并把合规校验里的风险项逐条解释给你。各工具的详细接入见 skills/README.md

Skill 只是调用说明,实际处理仍由本地 CLI 完成——不调用大模型,无需 API key,在任何工具里行为一致。

预编译安装包

前往 GitHub Releases 下载与本机匹配的安装包:

系统 架构 文件
macOS Apple Silicon(M 系列) MaZhu-26.8.17-mac-arm64.dmg
macOS Intel MaZhu-26.8.17-mac-x64.dmg
Windows x64 MaZhu-26.8.17-win-x64.exe

每个 Release 同时附带 SHA256SUMS.txt,下载后核对文件是否完整:

sha256sum -c SHA256SUMS.txt   # macOS / Linux
certutil -hashfile MaZhu-26.8.17-win-x64.exe SHA256   # Windows

macOS 安装说明:安装包尚未进行 Apple Developer ID 签名与公证。首次打开如果被 Gatekeeper 拦截,请先尝试打开一次,再进入“系统设置 → 隐私与安全性”,在安全提示旁选择“仍要打开”。不要从非本项目 Release 的来源下载安装包。正式签名与公证将在后续版本接入。

如果仍提示应用“已损坏”或需要“移到废纸篓”,请先确认安装包来自本项目 Release 并核对 SHA-256,然后在终端执行:

xattr -rd com.apple.quarantine /Applications/MaZhu.app
open /Applications/MaZhu.app

以上命令只移除 MaZhu.app 的下载隔离标记。不要对来源不明的应用执行该命令。

功能特性

  • 🗂 目录级文件筛选 — 递归扫描项目并以真实目录树展示,支持目录三态选择、全选、清空和全局反选;设置页可维护所有项目共用的默认扫描排除规则,并与项目 .gitignore 独立叠加
  • 🔄 安全重新扫描 — 源码在应用外部变化后可手动重扫;保留当前项目配置与未保存修改,同时使旧处理、分页、校验和导出结果立即失效
  • 📊 文件类型构成与按后缀导出 — 按文件数/代码行查看完整与已纳入构成,可一键只保留 .java 等指定后缀参与清洗和导出
  • 🧹 状态机代码清洗 — 逐字符识别注释与字符串边界("https://..." 里的 // 不会被误删),支持 Java/Kotlin/Python/JS/TS/Go/Rust/C/C++/C#/Swift/PHP/Ruby/Vue/HTML/CSS/SQL 等 30+ 后缀;删空行、Tab 转空格、超长行按 78 列硬折断
  • 🔒 敏感信息脱敏 — API 密钥、密码、内网 IP、手机号自动替换为占位符
  • 📄 规范化截取分页 — 超 3000 行自动取前 1500 + 后 1500 行;第 1 页必为模块开头、第 60 页必为模块结尾;每 50 行显式分页符,不靠排版"凑页"
  • 📝 一键导出 — docx(页眉=软件名+版本号、右上角自动页码、宋体 10.5pt 固定行距)+ txt 备查
  • 📚 文档材料生成 — 按内置章节骨架生成《用户使用说明书》或《设计说明书》,带封面、目录、页眉、页码,同样遵循前后各 30 页截取;内容由 spec JSON 提供,可在 AI 环境中自动撰写(见 examples/
  • 提交前风险校验 — 检查有效内容、每页行数、末页 2/3、页眉一致性、首末页边界和 @author/Copyright 署名冲突,给出「通过 / 警告 / 退回风险」三级结论
  • 🔔 GitHub Release 更新检测 — 启动时自动查询最新正式版本,发现更新后可跳转 Release 下载页;失败不影响核心功能
  • 🔐 源码处理完全离线 — 扫描、清洗、排版、导出零网络请求,源代码永远不离开本机;版本检测只请求公开版本元数据
  • 📌 最近项目管理 — 常用项目可置顶,失效或不再使用的记录可单项或批量移除;移除记录不会删除磁盘项目
  • 💾 配置与窗口持久化 — 项目选择与导出配置存入 .mazhu.json;应用级规则、最近项目和窗口状态安全保存在本机配置目录

内置整理规则对照

规范要求 MaZhu 的实现
前、后各连续 30 页,共 60 页 超 3000 行自动截取前 1500 + 后 1500 行
每页不少于 50 行 内存中按 50 行切块 + 显式分页符,逐页保证
页眉标注软件全称+版本号 导出时写入页眉,未含版本号会在校验中警告
页码 1–60 连续 docx PAGE 域自动编号
第 1 页为程序开头、第 60 页为结尾 截取策略从首文件首行起、至末文件末行止
无空行、注释不凑页 清洗阶段删除(可关闭)
末页至少满 2/3 校验器检查并提示
署名与著作权人一致 全文扫描 @author/Copyright 并比对

依据:《计算机软件著作权登记办法》及中国版权保护中心公开审查口径。本工具不构成法律建议,最终以登记机构要求为准。

从源码运行

开发运行

git clone https://github.com/kcylp/mazhu.git
cd mazhu
npm install
npm run dev        # 启动桌面应用
npm test           # core 流水线冒烟测试
npm run verify     # 版本一致性 + 测试 + 完整构建

国内网络提示:Electron 二进制下载失败时执行 ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ node node_modules/electron/install.js

使用流程

① 导入项目(拖入文件夹)→ ② 文件与排序(勾选纳入、拖拽调序,入口文件置顶)→ ③ 清洗与排版(填写软件全称+版本号、开关清洗规则、实时前后对比)→ ④ 分页预览(A4 仿真、60 页缩略导航、前后段分界标记)→ ⑤ 校验与导出(合规报告 + 生成 docx/txt)

架构

packages/
  core/     纯 TypeScript 流水线,零 Electron 依赖(未来可复用为 CLI / Web)
            discover → clean → select → render → audit
  app/      Electron 43 + React 18 + zustand(electron-vite 构建)
design/
  prototype/  Claude Design 高保真原型(UI 实现基准)
  icon/       应用图标源文件(SVG)
docs/       功能设计、技术选型与原型 prompt
scripts/    图标生成等工具脚本

关键技术决策(详见 docs/01-功能设计与技术选型.md):

  1. 显式分页而非排版凑页 — 分页符逐页控制,固定行距只作兜底,换字体不错位
  2. 注释剥离用逐字符状态机而非正则 — 字符串字面量内的注释符号是正则流派的必错题
  3. 截取锚定首末边界 — 首页从第一个入选文件开头开始,末页以最后一个入选文件结尾收束;前后段内部按行精确截取
  4. core 零壳依赖 — 业务全部沉在纯 TS 包,Electron 只做 IO 与窗口

常见问题

Q:生成的文档能直接提交吗? 生成的 docx 已按应用内置规则排版,可作为源程序鉴别材料的准备稿。提交前仍应查看第 5 步报告、清零「退回风险」,并以登记机构最新要求和申请主体的实际情况为准。本工具不构成法律建议。

Q:macOS 提示无法验证开发者,怎么办? 当前 macOS 安装包尚未签名与公证,请确认安装包来自本项目 Release 并核对 SHA-256,然后按照下载章节的 Gatekeeper 指引手动放行;如果系统仍提示移到废纸篓,可使用该章节提供的 xattr 命令移除本应用的下载隔离标记。后续版本会接入 Developer ID 签名与 Apple 公证。

Q:我的代码会被上传吗? 不会。扫描、清洗、排版和导出全部在本机完成。版本检测只会向 GitHub 查询公开的 Release 版本号、发布日期和更新说明,不会发送项目路径、源码、配置或用户身份数据。只有你点击“查看并下载”或其他 GitHub 链接时,系统浏览器才会打开对应网页。

路线图

  • v26.8.17(V1.0):命令行界面(CLI)· 多工具 Skill 封装 · 文档材料生成(用户手册/设计说明书)· 分页与扫描缺陷修复 · 脱敏规则强化
  • 后续版本:多目录导入 · 成立日期输入 · 自定义脱敏规则 · 校验项一键修复 · Linux 安装包 · macOS 签名与公证 · 应用内下载/安装更新
  • V3:例外交存模式(黑斜线覆盖)· 多申报主体管理

码著基于上游 CodeSucker(Apache-2.0)开发,其 v0.1.0–v0.4.4 的版本演进历史保留在 CHANGELOG.mdNOTICE 中,此处不重复罗列。

版本与发布

MaZhu 使用 Semantic Versioning。根包、桌面应用、core 包和 lockfile 的产品版本由统一脚本同步;项目配置 schema 与合规规则版本独立演进。

npm run version:check                    # 检查所有版本字段一致
npm run version:set -- 0.2.0-beta.1      # 统一设置产品版本
npm run verify                           # 发布前完整校验

正式发布以 v<SemVer> Git tag 和 GitHub Release 为准,仅修改源码中的版本字段不代表已经发布。完整规则见 VERSIONING.md,用户可见变化记录在 CHANGELOG.md

参与贡献

欢迎 Issue 与 PR。提交前请确保 npm run verify 通过;提交信息请说明动机而不止是改动内容。

联系与赞赏

遇到问题或有建议,欢迎微信交流;如果这个工具帮到了你,也欢迎打赏支持作者持续维护:

微信联系 赞赏支持
微信联系 赞赏码

许可证

Apache-2.0 © kcylp

本项目允许使用、修改、分发及闭源商用;再分发时须附带 Apache-2.0 许可证、保留适用的版权与 NOTICE 声明,并标明对文件所作的修改。

安装包同时附带 THIRD_PARTY_NOTICES.txt,列出实际分发与打入应用 bundle 的第三方依赖、许可证选择和完整归属文本。

上游归属

码著是 CodeSucker(Copyright 2026 fanbuz,Apache-2.0)的派生作品。依据许可证要求,上游版权与归属声明保留在 NOTICE 中,本派生作品所作的修改逐项记录在 CHANGELOG.md

码著在上游基础上重写了取材与校验环节,主要差异:

上游 CodeSucker 码著 MaZhu
截取分页 页数为奇数时下标出现分数,末页残缺 按整页边界取材,页码连续性纳入导出前校验
文件发现 跳过点开头目录、只读根 .gitignore 覆盖 .config/ 等点目录,逐层叠加嵌套 .gitignore
敏感信息 4 条规则,仅匹配带引号赋值 覆盖无引号 YAML、私钥块、JWT、云厂商密钥、证件号
导出前校验 页码连续性为无条件通过 实际逐页验证,并提示代码量不足时转全量提交
使用方式 桌面应用 桌面应用 + 命令行(packages/cli),可接入 CI
超限文件 静默丢弃 列出被跳过的文件与原因

六项差异中,前四项是会直接导致材料被退回或泄密的缺陷,逐条说明原因:

截取分页。 上游用 limit / 2 平分前后两段,limit 为奇数时下标带小数,slice 截断后中间会多出一页不足行的页面,而这恰好会被它自己的导出前审计判为不合格。码著改为按整页边界取材,前后段各自落在页边界上,页码连续性进入校验项而不是假定成立。

文件发现。 上游 dot: false 使所有点开头的路径不可见,.config/ 下的源码、.eslintrc.js 一类配置永远进不了材料;.gitignore 又只读根目录一份,monorepo 各子包的忽略规则全部失效,README 承诺的"叠加项目忽略规则"实际未生效。码著扫描点目录,并逐层叠加嵌套 .gitignore

敏感信息。 上游 4 条规则只认 key = "value" 这种带引号的赋值,YAML 里不带引号的 password: abc123-----BEGIN PRIVATE KEY----- 私钥块、JWT、云厂商密钥、证件号一概漏过。软著材料是要交到审查机构的,这类内容一旦随源码提交无法撤回。码著补齐了上述模式。

导出前校验。 上游审计的第 4 项(页码连续性)是无条件返回通过,等于没做。码著实际逐页验证,并在代码量不足 60 页时明确提示转为全量提交,而不是让用户自行发现。

横向看,这一品类的公开工具普遍停在"能生成 docx":多数仅支持单一语言或依赖手写注释规则表,.gitignore 处理少有人做,敏感信息脱敏几乎全员缺失,前 30 页 + 后 30 页的精确裁剪常见做法是提示用户"手动删除末尾几页",导出前的合规自检则基本没有。少数在线服务能一次出齐材料,但需要把源码上传到对方服务器,对未公开的商业项目是实质风险。码著全程本机处理、不发起网络请求,同时把脱敏、嵌套忽略规则、逐页校验和命令行接入补齐——这几项目前在同类工具中少见同时具备。

About

码著 MaZhu — 软著登记材料生成:离线产出源程序文档 + 使用说明书/设计说明书 docx,CLI + 桌面应用 + Claude Code/Codex/DeepSeek/Kun/WorkBuddy 多工具 Skill 封装,零网络零密钥

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages