- name
- software-copyright
- description
- 自动生成计算机软件著作权申请资料
# 软著资料生成 Skill
## 概述
此 Skill 用于自动分析项目代码和文档,生成计算机软件著作权申请所需的资料。
**工作模式**:采用渐进式生成,分为两大阶段:
1. **规划阶段**:分析项目并生成《软著规划书》,用户确认后进入执行阶段
2. **执行阶段**:基于规划书逐步生成三类资料文档
**最终产物**:
1. 软著主文档
2. 代码文档(60 页)
3. 使用说明书
---
## 使用方式
当用户提到需要生成软件著作权申请材料、申请资料或类似请求时,调用此 Skill。
### 工具使用策略
本 Skill 使用以下工具完成各项操作(优先使用原生工具,不可用时 fallback 到 shell):
| 操作 | 首选工具 | Fallback |
|------|----------|----------|
| 列出目录 | `list_dir` | `ls -la` / `find` |
| 查找文件 | `find_by_name` / `grep_search` | `rg --files` / `find` |
| 读取文件 | `view_file` | `cat` |
| 写入文件 | `write_to_file` | shell 重定向 |
| 执行命令 | `run_command` | — |
| 通知用户 | `notify_user` | — |
---
## 执行步骤
### 第一步:收集用户基本信息
**立即询问用户以下必填信息**,不要跳过此步骤:
```
请提供以下软著申请信息:
1. 软件全称(必填):
- 规则:必须以“软件”、“APP”、“系统”、“平台”结尾(小程序可例外)。
- 注意:中英文之间**不能有空格**。
示例:享赋臻品商城系统
2. 编制单位名称(必填):
示例:某某科技有限公司
3. 软件版本号(必填):
- 规则:格式需规范,推荐格式:`V1.0` 或 `1.0`。
示例:V1.0
4. 开发完成日期(必填,格式:YYYY年MM月):
示例:2024年6月
5. 开发方式(必填,请选择):
- 独立开发
- 合作开发
- 委托开发
6. 面向行业/领域(选填):
示例:零售商场、酒店预订、餐饮服务、电器销售
(如不提供,我将根据项目分析推断)
7. 交付目录(选填):
默认:项目根目录/软著资料/
(如需自定义请提供绝对路径)
```
**重要**:在用户回答完这些问题之前,不要进行任何项目分析。
---
### 第二步:分析项目结构
收集用户信息后,开始分析项目:
#### 2.1 确定项目根目录
- 查看用户当前工作区路径
- 确认项目根目录位置
**Monorepo 检测**:检查项目根目录是否存在 `pnpm-workspace.yaml`、`lerna.json`、或根目录下多个 `package.json`(如 `apps/`、`packages/` 子目录各有独立 `package.json`)。若为 Monorepo 项目,询问用户选择:
- a) 指定某个子项目(如 `apps/web`)作为扫描目标
- b) 合并扫描所有子项目
#### 2.2 扫描项目文件结构
使用 `list_dir` / `find_by_name` 扫描(不可用时 fallback 到 `rg --files`、`find`):
- 主要源代码目录:`src/`, `app/`, `lib/`, `server/`, `mobile/`, `admin/` 等
- 配置文件:`package.json`, `composer.json`, `go.mod`, `pom.xml`, `requirements.txt` 等
- 文档目录:`.doc/`, `docs/`, `wiki/`, `README.md`, `contexts/` 等
#### 2.3 识别技术栈
根据文件特征判断:
- **前端**:React, Vue, Angular, Next.js, Nuxt.js 等
- **后端**:Node.js, PHP, Go, Java, Python 等
- **小程序**:UniApp, 微信小程序原生等
- **数据库**:MySQL, PostgreSQL, MongoDB 等
- **其他**:Nginx, Redis, Docker 等
#### 2.4 统计代码行数(有效行数)
使用 shell 命令执行(排除依赖库且去除空行):
```bash
find . -type f \( \
-name "*.js" -o -name "*.jsx" -o -name "*.ts" -o -name "*.tsx" \
-o -name "*.vue" -o -name "*.go" -o -name "*.php" -o -name "*.java" -o -name "*.py" \
-o -name "*.css" -o -name "*.scss" -o -name "*.less" \
-o -name "*.html" -o -name "*.json" \
-o -name "*.wxml" -o -name "*.wxss" -o -name "*.wxs" \
-o -name "*.swift" -o -name "*.kt" -o -name "*.dart" \
-o -name "*.sql" -o -name "*.sh" -o -name "*.yaml" -o -name "*.yml" \
\) \
-not -path "*/node_modules/*" \
-not -path "*/dist/*" \
-not -path "*/vendor/*" \
-not -path "*/.git/*" \
-not -path "*/.venv/*" \
-not -path "*/__pycache__/*" \
-not -path "*/target/*" \
-not -path "*/build/*" \
-not -path "*/.next/*" \
-not -path "*/.nuxt/*" \
-not -path "*/miniprogram_npm/*" \
-not -path "*/.taro/*" \
-not -path "*/coverage/*" \
-not -path "*/.cache/*" \
-not -path "*/public/*" \
-not -path "*/migrations/*" \
-exec grep -v "^\s*$" {} + 2>/dev/null | wc -l
```
> [!TIP]
> 上述扩展名列表覆盖了大部分常见技术栈。如有特殊文件类型(如 `.rs`, `.rb`, `.lua` 等),可根据项目实际情况增删。
**注意**:此命令统计的是**去除空行后的有效代码行数**。
将此结果记录为 `Effective_Line_Count`。
---
### 第三步:读取项目文档
#### 3.1 优先读取以下文档
1. `contexts/context.md` - 项目核心上下文
2. `README.md` - 项目概述
3. `.doc/repowiki/系统概述.md` - 系统概述
4. `.doc/repowiki/功能模块详解/` - 功能模块文档
5. `docs/` 目录下的其他文档
#### 3.2 提取关键信息
- 项目背景和开发目的
- 主要功能模块列表
- 技术特点和创新点
- 系统架构说明
#### 3.3 深度功能挖掘(重点执行)
普通文档分析容易遗漏后台和辅助功能。**必须**执行以下深度扫描,找出“不容易发现的功能”:
1. **管理端/后台隐形功能**:
- **扫描关键词**:`admin`, `manage`, `system`, `config`, `auth`, `role`, `log`.
- **查找目标**:
- **权限体系**:角色管理、用户授权、菜单配置、部门管理。
- **系统运维**:操作日志、登录日志、异常监控、系统参数设置。
- **基础配置**:数据字典、公告发布、版本管理、广告位管理。
2. **从依赖库推断技术功能**:
- 检查 `package.json` / `pom.xml` / `go.mod` 等依赖文件。
- `redis` -> 缓存加速 / 高并发处理
- `jwt` / `security` -> 多重身份认证 / 接口安全防护
- `oss` / `cos` -> 海量文件云存储
- `schedule` / `cron` -> 自动化定时任务
- `websocket` / `socket` -> 实时消息推送
- `excel` / `csv` -> 数据批量导入导出
3. **用户端辅助功能**:
- **个人中心**:修改密码、绑定手机、实名认证、地址管理。
- **互动功能**:收藏/关注、评论/点赞、分享转发、积分足迹。
- **服务支持**:在线客服、帮助中心、意见反馈、关于我们。
---
### 第四步:生成软著规划书(关键中间产物)
基于前三步收集的信息,生成《软著规划书.md》并保存到输出目录。
#### 4.1 读取规划书模板
读取模板文件:
`{SKILL_DIR}/templates/planning_doc_template.md`
#### 4.2 生成代码文件索引(核心逻辑)
1. **扫描与清洗统计**
- 遍历源码文件,对每个文件执行 `grep -v "^\s*$"` 统计**有效行数**。
- **注意**:必须使用**清洗后**的行数,否则生成的文档行数将不足。
2. **文件排序与筛选**
- 按照 **高权重 → 普通权重 → 低权重** 的顺序排列文件。权重定义如下:
| 权重 | 文件类型 | 说明 |
|------|----------|------|
| 高优 | `main.*`, `app.*`, `index.*`, `router.*`, `App.vue`, `app.json` | 入口文件和路由配置 |
| 普通 | `pages/`, `views/`, `components/`, `modules/`, `screens/` | 页面和组件 |
| 低优 | `utils/`, `helpers/`, `config/`, `types/`, `constants/`, `store/` | 工具、配置、类型定义 |
- **前 30 页选择**:从头部开始累加,直到累计行数 ≥ 1590 行(`FRONT_LINES`)。
- **后 30 页选择**:从尾部倒推,直到累计行数 ≥ 1590 行(`BACK_LINES`)。
3. **数据准备**
- 准备 file_list 数据,包含:文件路径、单文件行数、当前累计行数。
#### 4.3 生成功能模块清单(核心关键)
分析代码提取功能模块。**必须严格区分“用户端”与“管理端”的代码来源,严禁混用。**
**步骤 0:前端路由分析与去重(必须执行)**
在提取功能之前,**必须先分析前端路由文件**,以"页面"为维度进行归纳,避免遗漏或机械式重复。
1. **定位路由文件**:
- **Vue/React Web**: 查找 `src/router/index.js`, `src/routes.ts`, `src/app-routing.module.ts` 或类似文件。
- **Mini-program**: 查找 `app.json`, `pages.json`。
- **Next.js/Nuxt.js**: 扫描 `pages/` 或 `app/` 目录下的文件结构。
- **纯后端项目**(无前端 UI 文件时),按以下方式定位路由等效文件:
- **Django**: `urls.py` 路由定义
- **Flask**: `@app.route` 装饰器扫描
- **Spring Boot**: `@RequestMapping` / `@GetMapping` 注解扫描
- **Go Gin/Echo**: `router.GET/POST` 注册
- **Express/Koa**: `router.get/post` 或 `app.get/post` 注册
- **Laravel**: `routes/web.php`, `routes/api.php`
> [!NOTE]
> **纯后端项目特殊处理**:若项目完全没有前端(无 `.vue`, `.jsx`, `.wxml`, `.html` 等 UI 文件),使用说明书应改为"接口使用说明"模式,按 API Endpoint 分组组织功能描述,每个 Endpoint 描述其请求方式、参数、响应及使用场景。
1. **智能筛选与去重**:
- **读取组件内容**:进入路由对应的组件文件(如 `.vue`, `.jsx`),分析其 UI 和业务逻辑。
- **去重逻辑**:
- **合并同类项**:如果发现多个路由指向相似的页面(如 `detail/:id`),只归纳为一个"XX详情页"。
- **排除无效页面**:忽略纯静态的协议页、过渡页或无实质功能的空白页。
- **内容审查**:只有包含**用户交互**(表单、按钮)或**动态数据展示**的页面才生成模块。
2. **用户端(User Side)**:
- **核心原则**:必须优先读取**前端/客户端的 UI 代码**。只有在完全没有前端代码时(如纯后端渲染),才允许读取后端 Controller。
- **扫描优先级**(按顺序查找):
1. **小程序/App**: `.wxml`, `.axml`, `.vue` (UniApp), `.dart` (Flutter), `.swift`, `.kt`
2. **Web 前端**: `.vue`, `.jsx`, `.tsx`, `.html`
3. **模板引擎**: `.blade.php`, `.jsp`, `.ejs` (仅在无独立前端时使用)
- **禁止行为**:禁止使用 pure Backend Logic(如 `UserLogic.php`, `OrderService.java`)作为用户端功能的“对应代码路径”,除非该文件包含了 HTML 输出。
3. **管理端(Admin Side)**:
- **路由/菜单分析(前端优先)**:
- **首选**:寻找 **管理后台的前端路由**(如 `router/admin.js`, `src/admin/routes.ts`)或 **菜单配置文件**(如 `menuConfig.js`, `layout/sider.tsx`)。
- **次选**(仅当无独立前端时):分析 MVC 框架的 Admin 路由(如 `routes/admin.php`)和 Controller 结构。
- **页面归纳**:
- **核心原则**:必须按**前端页面**视角归纳。例如"商品列表页"和"商品编辑页"是两个页面,而不是简单的"商品管理"一个大模块。
- 将前端路由中的 `path` 映射为一个功能页面。
- 优先寻找 `admin`, `manager`, `backend` 目录下的界面代码或 View 文件。
4. **提取要求(严格执行)**:
- 对于每个识别出的页面/模块,**必须**提取以下 5 个字段:
1. **页面名称**:从路由 path 或 title 提取(如 `首页`)。
2. **功能点**:页面内的主要功能列表(如 `轮播图展示`, `推荐列表`)。
3. **复杂度**:简单/中等/复杂。
4. **代码路径**:对应的组件文件路径。
5. **主要操作点**:基于 UI 元素的交互描述(必须包含动词)。例如:“点击‘立即购买’ -> 弹出规格选择 -> 确认支付”。
- **数量要求(尽可能全面)**:
- **不要只提取最少的几个**,而是尽可能覆盖路由文件中定义的业务页面。
- **用户端**:建议提取 **10~20 个** 模块(覆盖首页、分类、购物车、个人中心、订单、设置等)。
- **管理端**:建议提取 **5~10 个** 模块(覆盖控制台、商品、订单、用户、营销、财务、设置等)。
#### 4.4 写入规划书
将收集的数据填充到模板中,写入 `{输出目录}/软著规划书.md`。
**关键规则**:
- **严禁修改表格表头**:必须保留模板中的 6 列结构(页面名称 | 功能点 | 复杂度 | 代码路径 | 主要操作点)。
- **请勿重写表格**:请直接替换模板中的 `{Page_Name1}` 等占位符,或在占位符位置循环插入新行。
- **未识别到的字段**:如果某个字段为空,请填写 "无" 或 "N/A",不要删除列。
#### 4.5 请求用户确认
**重要**:生成规划书后,**必须**通知用户审阅并请求确认。
通知内容应包含:
1. 规划书已生成及其路径。
2. 核心数据摘要:
- 预计总页数:{Total_Pages}
- 用户端模块数:{User_Modules}
- 管理端模块数:{Admin_Modules}
3. 询问用户是否同意按此规划生成最终文档。
View on GitHub