diff --git a/.agents/skills/README.md b/.agents/skills/README.md deleted file mode 100644 index 8c062db4..00000000 --- a/.agents/skills/README.md +++ /dev/null @@ -1,87 +0,0 @@ -# Agent Skills - -本目录存放用于辅助 Sa-Token 项目开发的 Agent Skills。这些 skills 封装了项目特定的知识和操作规范,可在对话中直接调用。 - -## Skill 列表 - -| Skill 名称 | 功能描述 | 使用场景 | 入口文件 | -|-----------|---------|---------|---------| -| `commit-message` | 根据 git 变更生成符合 Sa-Token 项目风格的 commit message | 生成提交信息、写 commit message | [SKILL.md](commit-message/SKILL.md) | -| `organize-update-log` | 根据 git 提交记录生成符合项目规范的更新日志内容 | 整理更新日志、分析版本变更 | [SKILL.md](organize-update-log/SKILL.md) | -| `remove-redundancy-import` | 检查并移除 Java 类中未被引用的冗余 import | 清理冗余导包、优化 import | [SKILL.md](remove-redundancy-import/SKILL.md) | -| `upgrade-version` | 将项目版本号从旧版本升级到新版本,批量修改 pom、常量、Demo 及文档 | 升级版本、修改版本号、version bump | [SKILL.md](upgrade-version/SKILL.md) | - -### 详细说明 - -#### commit-message -根据当前 git 变更(staged 或 unstaged),生成符合 [Conventional Commits](https://www.conventionalcommits.org/) 格式、以中文为主的 commit message。支持识别新增文件、修复 bug、重构等多种变更类型。 - -#### organize-update-log -根据 git 提交记录,生成符合 `sa-token-doc/more/update-log.md` 格式的更新日志内容。自动分类到插件、starter、重构、Solon、示例、文档等版块。 - -#### remove-redundancy-import -扫描项目中所有 Java 类,检测未被引用的冗余 import,生成清理计划供审阅,确认后执行移除。支持通过内置 Python 脚本快速扫描。 - -#### upgrade-version -将 Sa-Token 项目版本号从旧版本升级到新版本。批量修改根 POM、BOM、SaTokenConsts、所有 Demo 子项目 pom.xml 及文档(README、index.html、doc.html、new-version.md 等)中的版本引用。明确排除历史记录、@since 标注、更新日志等不应修改的文件。 - -## 快速使用 - -在 AI 对话中,直接描述你的需求即可自动触发相应 skill: - -``` -用户:帮我生成 commit message -→ 自动使用 commit-message skill 分析 git 变更并生成提交信息 - -用户:整理一下更新日志 -→ 自动使用 organize-update-log skill 生成更新日志 - -用户:清理一下冗余 import -→ 自动使用 remove-redundancy-import skill 扫描并清理未使用的 import - -用户:把版本从 v1.44.0 升级到 v1.45.0 -→ 自动使用 upgrade-version skill 批量修改版本号 -``` - -## 新增 Skill 维护指南 - -当新增 skill 时,请同步更新本 README 文件,保持 skill 列表的完整性。 - -### Skill 目录结构规范 - -每个 skill 应创建独立的子目录,结构如下: - -``` -.agents/skills/ -├── README.md # 本文件 -└── skill-name/ # skill 目录(小写,短横线分隔) - ├── SKILL.md # skill 主文件(必须包含 YAML 元数据和使用说明) - ├── examples.md # 使用示例(可选) - ├── reference.md # 参考文档(可选) - └── scan_redundant_imports.py # 辅助脚本(如需要) -``` - -### SKILL.md 文件格式 - -每个 `SKILL.md` 必须包含 YAML Front Matter: - -```yaml ---- -name: skill-name -description: 简要描述 skill 的功能和使用场景 ---- -``` - -### 更新 README 清单 - -新增 skill 后,请在本文件中: - -1. 在 **Skill 列表** 表格中添加新行 -2. 在 **详细说明** 小节添加对应的描述段落 -3. (可选)在 **快速使用** 中添加使用示例 - -## 注意事项 - -- 所有 skill 遵循 Sa-Token 项目特定的规范和风格 -- 部分 skill(如 `remove-redundancy-import`)在执行前需要用户确认 -- 可参考每个 skill 目录下的 `examples.md` 或 `reference.md` 获取更多使用帮助 diff --git a/.agents/skills/commit-message/SKILL.md b/.agents/skills/commit-message/SKILL.md deleted file mode 100644 index 6939f6d5..00000000 --- a/.agents/skills/commit-message/SKILL.md +++ /dev/null @@ -1,110 +0,0 @@ ---- -name: commit-message -description: 根据 git 变更生成符合 Sa-Token 项目风格的 commit message。遵循 Conventional Commits 格式,以中文为主。当用户要求生成提交信息、写 commit message、或根据变更生成提交说明时使用。 ---- - -# 生成 Commit Message - -根据当前 git 变更(staged 或 unstaged),生成符合 Sa-Token 项目规范的 commit message。 - -## 使用时机 - -- 用户要求生成 commit message -- 用户要求根据变更写提交说明 -- 用户说「帮我写个 commit」「生成提交信息」等 - -## 工作流程 - -### 第一步:获取变更内容 - -```bash -git status -git diff --staged -git diff -``` - -**必须包含的变更范围**: -- **staged 变更**:`git diff --staged` -- **unstaged 变更**:若无 staged,则用 `git diff` 查看工作区修改 -- **未跟踪文件**:`git status` 中的 Untracked files 也要纳入分析,生成 commit message 时需一并考虑 - -若存在未跟踪的新增文件(如新 skill、新配置等),应在 message 中体现,或给出「包含全部变更」与「仅已修改文件」两种方案供用户选择。 - -### 第二步:分析变更类型 - -根据变更内容选择 type 前缀: - -| type | 适用场景 | -|------|----------| -| feat | 新增功能、新模块、新插件 | -| fix | 修复 bug、修正错误 | -| refactor | 重构、优化结构、重命名、移除冗余 | -| perf | 性能优化(与 refactor 区分:侧重性能) | -| docs | 文档更新、README、错别字、同步链接 | -| style | 代码格式调整(缩进、空格等,不影响逻辑) | -| chore | 构建配置、.gitignore、注释修复、依赖更新 | -| test | 单元测试、测试用例 | -| demo | 示例项目、demo 相关 | -| memo | 备忘录、内部记录 | -| revert | 回滚某次提交 | -| AI | AI 创建的 skill、规则等 | - -### 第三步:撰写描述 - -**基础格式**:`type: 简短描述` 或 `type(scope): 简短描述` - -**scope 可选**:涉及特定模块时使用,如 `feat(sign)`、`fix(oauth2)`、`refactor(dependencies)`。 - -**规范**: -- **50 字规则**:subject 不超过 50 字符,保证在 git log 中完整显示 -- **命令式语气**:用「修复」「新增」「优化」,不用「修复了」「新增了」 -- **说明「做了什么」**:清晰表达变更内容,必要时说明「为什么」 -- **以中文为主**:技术术语可保留英文(如 `StrFormatter`、`sa-token-jackson3`) -- **动词开头**:新增、修复、优化、重构、移除、同步、订正 等 - -**可选 Body/Footer**(重要变更时): -- Body:详细说明变更背景、动机,每行不超过 72 字符 -- Footer:关联 Issue,如 `Fixes #123` 或 `merge: [pr N](url)` - -### 第四步:输出 - -直接输出可复制的 commit message。若有多条合理方案,可给出 1~2 个备选。 - -## 格式示例 - -**简单提交**(常用): -``` -feat: 添加 sa-token-jackson3 插件 -fix(sign): 修复签名校验在空参数时的空指针 -``` - -**带 scope**: -``` -refactor(dependencies): 重构模块依赖层级 -perf(oauth2): 优化 Client 信息读取算法 -``` - -**带 body**(复杂变更): -``` -feat: 新增重复登录处理策略 - -当同一账号不允许多客户端同时登录时,支持选择踢人下线或拦截本次登录。 -``` - -## 参考资源 - -- 示例:详见 [examples.md](examples.md) -- 规范详解:详见 [reference.md](reference.md) - -## 快速对照 - -| 变更内容 | 示例输出 | -|----------|----------| -| 新增插件 | `feat: 添加 sa-token-jackson3 插件` | -| 修复 bug | `fix: 修复 StpUtil.getLoginIdByTokenNotThinkFreeze 方法缺少 static 的问题` | -| 性能优化 | `perf: 优化 StrFormatter 常量封装` | -| 重构模块 | `refactor: 重构模块依赖层级` | -| 移除冗余 | `refactor: 移除冗余导包` | -| 文档更新 | `docs: 同步最新文章列表、赞助者名单` | -| 注释修复 | `chore: 修复注释错别字` | -| 新增 skill | `AI: 新增 skills/commit-message/SKILL.md,用于根据 git 变更生成符合项目风格的 commit message` | diff --git a/.agents/skills/commit-message/examples.md b/.agents/skills/commit-message/examples.md deleted file mode 100644 index be4430be..00000000 --- a/.agents/skills/commit-message/examples.md +++ /dev/null @@ -1,97 +0,0 @@ -# Commit Message 示例 - -基于 Sa-Token 项目近期提交整理,遵循 Conventional Commits + 50/72 规则。 - -## feat - 新增功能 - -``` -feat: 添加 sa-token-jackson3 插件 -feat: 新增 sa-token-spring-boot4-starter 集成包 -feat: 新增 sa-token-reactor-spring-boot4-starter 集成包 -feat(sign): 新增签名模板自定义能力 -``` - -## fix - 修复问题 - -``` -fix: 修复 StpUtil.getLoginIdByTokenNotThinkFreeze 方法缺少 static 的问题 -fix: 修正一处代码注释错误:SaTokenDao 注释中 数据有效期 应为 小于等于-2 (掉了等于) -fix: Bearer 全局统一大小写 -fix: SaOAuth2Strategy中removeGrantTypeHandler的引用有误 -``` - -## refactor - 重构/优化 - -``` -refactor: 移除冗余导包 -refactor: 重命名 SaRepeatLoginsMode -> SaReplacedLoginExitMode -refactor: 优化项目构建配置 -refactor: 优化 OAuth2 模块在请求中读取 Client 信息算法 -refactor: 优化模块依赖关系 -refactor: 重构模块依赖层级 -refactor: sa-token-dependencies 重构为 sa-token-basic-dependencies -refactor: SaTokenDubboContextFilter 改为使用 SaTokenContextDubboUtil 清理上下文 -``` - -## perf - 性能优化 - -``` -perf: 优化 StrFormatter 常量规范与封装 -perf: 优化 pattern 缓存,消除魔法值 -``` - -## docs - 文档 - -``` -docs: 订正文档错别字 -docs: 同步最新文章列表、赞助者名单 -docs: 为 sa-token-sso 模块定义 STS 协议 -docs: 优化 readme -docs: 同步最新博客链接 -``` - -## chore - 杂项 - -``` -chore: 修复注释错别字 -chore: 增加忽略 .vscode 目录 -``` - -## demo - 示例 - -``` -demo: 新增 sa-token-demo-webflux-springboot4 示例 -demo: 新增 SpringBoot4 整合 demo 示例 -``` - -## test - 测试 - -``` -test: 新增 sa-token-jackson3 单元测试 -``` - -## memo - 备忘录 - -``` -memo: 备忘录重构为专门的文件夹 -``` - -## style - 代码格式 - -``` -style: 统一代码缩进与空格 -style: 修复 ESLint 警告 -``` - -## revert - 回滚 - -``` -revert: feat(sign): 新增签名模板自定义能力 -``` - -## AI - AI 相关 - -``` -AI: 新增 skills/remove-redundancy-import/SKILL.md,用于检查项目中的java类无效冗余导包信息并移除 -AI: 新增 SKILL: organize-update-log ,用于格式化整理版本更新日志信息 -``` diff --git a/.agents/skills/commit-message/reference.md b/.agents/skills/commit-message/reference.md deleted file mode 100644 index 4c43a83f..00000000 --- a/.agents/skills/commit-message/reference.md +++ /dev/null @@ -1,38 +0,0 @@ -# Commit Message 规范参考 - -基于 Conventional Commits 与业界最佳实践整理。 - -## 核心规则 - -| 规则 | 说明 | -|------|------| -| 50 字规则 | subject 不超过 50 字符,便于 git log 完整显示 | -| 72 字规则 | body 每行不超过 72 字符,便于阅读与 diff | -| 命令式语气 | 用「修复」「新增」而非「修复了」「新增了」 | -| 说明动机 | 重要变更在 body 中说明「为什么」而不仅是「做了什么」 | - -## 格式结构 - -``` -[()]: - -[optional body] - -[optional footer(s)] -``` - -- **subject**:必填,简明扼要 -- **body**:可选,详细说明 -- **footer**:可选,如 `Fixes #123`、`BREAKING CHANGE: xxx` - -## 类型速查 - -- **feat**:新功能 -- **fix**:修复 bug -- **refactor**:重构(结构、逻辑) -- **perf**:性能优化 -- **docs**:文档 -- **style**:格式(不影响逻辑) -- **chore**:构建、配置、杂项 -- **test**:测试 -- **revert**:回滚 diff --git a/.agents/skills/organize-update-log/SKILL.md b/.agents/skills/organize-update-log/SKILL.md deleted file mode 100644 index 7f7e49e6..00000000 --- a/.agents/skills/organize-update-log/SKILL.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -name: organize-update-log -description: 根据 git 提交记录生成符合 Sa-Token 项目规范的更新日志内容。适用于分析指定版本之后的提交、提取变更并格式化为 update-log.md 风格。当用户需要生成更新日志、整理版本变更、或分析 release 之后的提交时使用。 ---- - -# 整理更新日志 - -根据 git 提交记录,生成符合 `sa-token-doc/more/update-log.md` 格式的更新日志内容。 - -## 使用时机 - -- 用户要求生成/整理更新日志 -- 用户要求分析「某版本之后」的提交变更 -- 用户要求将 git 提交格式化为更新日志风格 -- 准备发布新版本前整理 changelog - -## 工作流程 - -### 第一步:确定基准版本 - -1. 询问用户基准版本(如 `v1.44.0`),或从上下文推断 -2. 查找该版本的发布提交: - - 在 `SaTokenConsts.java` 或 `pom.xml` 中搜索版本号 - - 或执行:`git log --oneline --all -- sa-token-core/src/main/java/cn/dev33/satoken/util/SaTokenConsts.java` 查找含 `release vX.X.X` 的提交 -3. 记录基准提交 hash(如 `7bde74bc`) - -### 第二步:获取提交列表 - -执行: -```bash -git log <基准提交>..HEAD --oneline --format="%h %s" -``` - -可选,获取更详细的变更文件: -```bash -git log <基准提交>..HEAD --stat --format="=== %h %s ===" -``` - -### 第三步:分类与映射 - -将每条提交按以下规则归类到对应板块: - -| 提交关键词/内容 | 归属板块 | -|----------------|----------| -| feat.*jackson、plugin、插件 | 插件 | -| feat.*starter、spring-boot、reactor | starter | -| refactor.*依赖、dependencies、模块 | 重构 | -| refactor.*solon、gateway | Solon(单独列出) | -| fix.*dubbo、dubbo3 | 插件 | -| demo.*、示例 | 示例 或 starter | -| docs.*、文档 | 文档 | -| chore、.gitignore、.vscode | 其它 | -| merge.*loveqq、maven-pull | 其它(含 PR 链接) | - -### 第四步:动作词映射 - -根据提交类型选择正确的动作词: - -| 提交类型 | 动作词 | 示例 | -|----------|--------|------| -| feat、新增 | 新增 | 新增 `sa-token-jackson3` 插件 | -| fix、修复 | 修复 | 修复 Maven 父子项目依赖下载问题 | -| refactor、重构 | 重构 / 移除 | 重构模块依赖层级;移除 xxx 模块 | -| 优化、perf | 优化 | 优化 Gateway 接口处理 | -| 拆分 | 拆分 | (少见) | -| 文档更新 | 同步/新增/优化/修复 | 按具体内容选择 | - -### 第五步:按格式输出 - -使用下方模板生成最终内容。详见 [format-reference.md](format-reference.md)。 - -## 输出模板 - -```markdown -### vX.X.X @YYYY-M-D(或:开发中 / 未发布) - -- 插件: - - 新增:xxx。 **[重要]**(如适用) - - 修复:xxx。merge: [pr N](https://gitee.com/dromara/sa-token/pulls/N)(如适用) -- starter: - - 新增:xxx。 -- 重构: - - 重构:xxx。 - - 移除:xxx。 -- Solon:(如有) - - 优化:xxx。merge: [pr N](url) -- 示例:(如有) - - 新增:xxx。 -- 文档: - - 同步:xxx。 - - 新增:xxx。 - - 优化:xxx。 - - 修复:xxx。 -- 其它: - - 新增/修复/优化:xxx。 -``` - -## 格式规则 - -1. **层级**:一级用 `-`,二级用 ` -`(Tab + 短横线) -2. **动作词**:每条以「新增」「修复」「重构」「优化」「移除」「同步」等开头 -3. **重要标记**:对用户影响大的变更加 `**[重要]**` -4. **PR/Issue 链接**:提交信息含 `!358`、`pr 340` 等时,补充 `merge: [pr N](https://gitee.com/dromara/sa-token/pulls/N)` -5. **代码/模块名**:用反引号包裹,如 `` `sa-token-jackson3` `` -6. **合并同类**:多条相似文档类提交可合并为一条(如「同步公众号、博客、赞助者名单」) - -## 常见板块 - -- **core**:核心逻辑、API、配置变更 -- **SSO**:单点登录相关 -- **OAuth2**:OAuth2 相关 -- **插件**:插件包(jackson、dubbo、redis 等) -- **starter**:Spring Boot / Reactor 等 starter -- **示例**:demo 项目 -- **文档**:文档、README、错别字 -- **其它**:其它杂项 - -## 注意事项 - -- 合并提交(Merge branch)可忽略,只保留实际变更的提交 -- 纯文档/错别字可适度合并,避免条目过多 -- 版本号未发布时,可写 `v1.45.0(开发中)` 或 `未发布` -- 输出为可直接粘贴到 `update-log.md` 的 Markdown 片段 diff --git a/.agents/skills/organize-update-log/format-reference.md b/.agents/skills/organize-update-log/format-reference.md deleted file mode 100644 index c0d8ca13..00000000 --- a/.agents/skills/organize-update-log/format-reference.md +++ /dev/null @@ -1,108 +0,0 @@ -# 更新日志格式参考 - -本文档提供 `sa-token-doc/more/update-log.md` 的格式细节与示例,供生成更新日志时参考。 - -## 版本标题格式 - -```markdown -### v1.44.0 @2025-6-7 -``` - -- 版本号:`v` + 主.次.修订 -- 日期:`@YYYY-M-D` 或 `@YYYY-M-DD` -- 未发布时:`v1.45.0(开发中)` 或 `v1.45.0(未发布)` - -## 板块结构 - -``` -- 板块名: - - 动作词:具体描述。 **[重要]**(可选) merge: [pr N](url)(可选) -``` - -- 一级:`- 板块名:` -- 二级:` - 动作词:描述。`(Tab 缩进) - -## 动作词 - -| 动作词 | 含义 | 使用场景 | -|--------|------|----------| -| 新增 | 新功能、新模块 | feat、新增插件、新 starter | -| 修复 | Bug 修复 | fix | -| 重构 | 结构调整 | refactor | -| 优化 | 改进、优化 | 优化、perf | -| 移除 | 删除模块/功能 | 删除、移除 | -| 拆分 | 模块拆分 | 拆分 | -| 同步 | 内容同步 | 文档、赞助者、博客列表 | -| 补全 | 补充内容 | 补全文档、测试 | -| 升级 | 升级、变更 | 升级 API、模块 | - -## 链接格式 - -**PR:** -```markdown -merge: [pr 340](https://gitee.com/dromara/sa-token/pulls/340) -``` - -**Issue:** -```markdown -fix: [#IA6ZK0](https://gitee.com/dromara/sa-token/issues/IA6ZK0) -``` - -## 重要标记 - -对用户影响较大的变更加 `**[重要]**`,通常放在句末、链接前: - -```markdown -- 新增:新增 `sa-token-spring-boot4-starter` 集成包。 **[重要]** -- 新增:loveqq-framework 启动器集成。merge: [pr 340](url) -``` - -## 完整示例 - -```markdown -### v1.45.0(开发中) - -- 插件: - - 新增:新增 `sa-token-jackson3` 插件,用于 Jackson 3 的 JSON 解析。 **[重要]** - - 新增:新增 `sa-token-jackson3` 单元测试。 -- starter: - - 新增:新增 `sa-token-spring-boot4-starter` 集成包,支持 Spring Boot 4。 **[重要]** - - 新增:新增 `sa-token-reactor-spring-boot4-starter` 集成包,支持 WebFlux + Spring Boot 4。 **[重要]** - - 新增:新增 `sa-token-demo-webflux-springboot4` 示例。 - - 新增:新增 Spring Boot 4 整合 demo 示例。 -- 重构: - - 重构:`sa-token-dependencies` 重构为 `sa-token-basic-dependencies`。 **[重要]** - - 重构:重构 Spring Boot 相关集成包,优化依赖关系。 - - 移除:移除 `sa-token-spring-boot-autoconfig` 模块,相关逻辑迁移至各 starter 内。 **[重要]** - - 重构:重构模块依赖层级,新增 `sa-token-special-dependencies`。 -- Solon: - - 优化:`sa-token-solon-plugin` 优化 Gateway 接口的处理,避免使用路由接口。merge: [pr 348](https://gitee.com/dromara/sa-token/pulls/348) -- 其它: - - 新增:loveqq-framework 启动器集成。merge: [pr 340](https://gitee.com/dromara/sa-token/pulls/340) - - 修复:修复 Maven 父子项目无法下载依赖的问题。merge: [pr 358](https://gitee.com/dromara/sa-token/pulls/358) -- 文档: - - 同步:同步公众号文章列表、博客列表、赞助者名单。 - - 新增:新增《Gitee 2025年度开源项目 Web应用开发 Top 2》证书展示。 - - 优化:优化框架 Slogan、README、案例库展示。 - - 修复:错别字修复;文档图片地址更换为本地文件。 -- 其它: - - 新增:增加忽略 .vscode 目录。 - - 优化:注释优化。 -``` - -## 提交信息到条目的映射示例 - -| 提交信息 | 生成条目 | -|----------|----------| -| `feat: 添加 sa-token-jackson3 插件` | 新增:新增 `sa-token-jackson3` 插件,用于 Jackson 3 的 JSON 解析。 **[重要]** | -| `refactor: 移除 sa-token-spring-boot-autoconfig 模块` | 移除:移除 `sa-token-spring-boot-autoconfig` 模块,相关逻辑迁移至各 starter 内。 **[重要]** | -| `docs: 同步最新赞助者名单` | 同步:同步赞助者名单。 | -| `!358 update maven-pull.md` | 修复:修复 Maven 父子项目无法下载依赖的问题。merge: [pr 358](url) | - -## 文档类合并建议 - -以下类型可合并为一条: - -- 同步公众号、博客、赞助者名单 → 「同步:同步公众号文章列表、博客列表、赞助者名单。」 -- 多条例错别字修复 → 「修复:错别字修复。」 -- 多篇文档图片本地化 → 「修复:文档图片地址更换为本地文件(基础篇、深入篇、SSO篇等)。」 diff --git a/.agents/skills/remove-redundancy-import/SKILL.md b/.agents/skills/remove-redundancy-import/SKILL.md deleted file mode 100644 index 959930c2..00000000 --- a/.agents/skills/remove-redundancy-import/SKILL.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -name: remove-redundancy-import -description: 检查 Java 类中未被引用的冗余 import 并移除。先输出待审阅计划,用户确认后执行。适用于用户要求清理冗余导包、优化 import、或执行 remove-redundancy-import 时使用。 ---- - -# 移除冗余 import - -检查项目中所有 Java 类的未使用 import,生成清理计划供用户审阅,确认后执行移除。 - -## 使用时机 - -- 用户要求清理冗余导包 -- 用户要求优化 Java import -- 用户明确执行 `remove-redundancy-import` 或提及本 Skill 名称 - -## 强制流程 - -**必须先输出计划,用户确认后再执行移除。** 不得在未审阅的情况下直接修改文件。 - -## 工作流程 - -### 第一步:扫描与解析 - -**优先使用内置脚本**:在 Skill 目录下的 [scan_redundant_imports.py](scan_redundant_imports.py) 已实现完整扫描逻辑,可直接复用。 - -```bash -# 在项目根目录执行 -python .agents/skills/remove-redundancy-import/scan_redundant_imports.py -# 或指定扫描根路径 -python .agents/skills/remove-redundancy-import/scan_redundant_imports.py . -``` - -脚本输出格式:`文件路径 | 冗余import1; import2 | 数量`,末尾两行为 `TOTAL_FILES:N` 和 `TOTAL_IMPORTS:M`。 - -**若无 Python 环境**,可手动执行: -1. 使用 `Glob` 查找项目内所有 `**/*.java` 文件 -2. 对每个文件:提取 `package`、`import`,按 [reference.md](reference.md) 判定是否被使用 -3. 汇总存在冗余 import 的文件及列表 - -### 第二步:输出计划 - -使用下方模板生成计划报告,等待用户确认: - -```markdown -## 冗余 import 清理计划 - -| 文件 | 待移除 import | 数量 | -|------|---------------|------| -| path/to/Foo.java | `java.util.Date`, `java.sql.Timestamp` | 2 | -| ... | ... | ... | - -**共 N 个文件,M 处冗余 import。确认后执行移除。** -``` - -### 第三步:执行移除 - -用户确认后,对计划中的每个文件使用 `StrReplace` 移除对应 import 行: - -- 逐行移除,每行格式为 `import ...;` 或 `import static ...;` -- 若某 import 后紧跟空行,可一并移除空行以保持格式整洁 -- 移除后确认文件无语法错误 - -## 检测规则概要 - -- **普通 import**:取最后一段类名(如 `java.util.List` → `List`),在类体中搜索 `\bList\b` -- **static import**:取方法/字段名,在类体中搜索 -- **同包冗余**:import 的包与当前文件 `package` 相同则视为冗余 -- **通配符**:`import pkg.*` 跳过,不自动处理 - -详见 [reference.md](reference.md)。 - -## 注意事项 - -- 通配符 import 无法可靠判断,一律跳过 -- 注解中的类型引用采用保守策略,宁可漏检不误删 -- 移除后建议用户运行 `mvn compile` 验证 diff --git a/.agents/skills/remove-redundancy-import/reference.md b/.agents/skills/remove-redundancy-import/reference.md deleted file mode 100644 index 41bb668f..00000000 --- a/.agents/skills/remove-redundancy-import/reference.md +++ /dev/null @@ -1,63 +0,0 @@ -# 冗余 import 检测规则 - -## 解析步骤 - -### 1. 提取 package - -匹配 `package\s+([\w.]+)\s*;`,得到当前文件所在包。 - -### 2. 提取 import - -匹配以下模式(每行一条): - -- `import\s+([\w.]+)\s*;` — 普通 import -- `import\s+static\s+([\w.]+)\s*;` — static 导入类 -- `import\s+static\s+([\w.]+)\.(\w+)\s*;` — static 导入成员(方法/字段) -- `import\s+[\w.]+\s*\.\s*\*\s*;` — 通配符,**跳过不处理** - -### 3. 确定简单名(Simple Name) - -| import 类型 | 示例 | 简单名 | -|-------------|------|--------| -| 普通类 | `import java.util.List;` | `List` | -| 内部类 | `import pkg.Outer.Inner;` | `Inner` | -| static 类 | `import static pkg.Utils;` | `Utils` | -| static 成员 | `import static pkg.Utils.foo;` | `foo` | - -### 4. 同包冗余 - -若 `import x.y.Z` 的包 `x.y` 与当前文件 `package x.y` 相同,则该 import 冗余(同包无需导入)。 - -### 5. 使用检测 - -在**类体**(`package` 和所有 `import` 之后)中搜索: - -- 使用正则 `\bSimpleName\b` 匹配整词,避免误匹配子串 -- 排除:注释、字符串字面量中的出现 -- 若未找到匹配,则该 import 视为未使用 - -## 边界情况 - -| 情况 | 处理方式 | -|------|----------| -| `import pkg.*;` | 跳过,不自动移除 | -| 注解中的类型 `@Foo` | 若 `Foo` 为 import 的简单名,视为已使用 | -| 泛型 `List` | `List` 会匹配,视为已使用 | -| 同名类(如 `java.util.Date` 与 `java.sql.Date`) | 两 import 都保留;若仅一个被使用,只移除未使用的 | -| Javadoc `@param` 中的类型 | 保守:若不确定则保留 | - -## 正则参考 - -``` -// package -package\s+([\w.]+)\s*; - -// 普通 import(非通配符) -import\s+(?!static)([\w.]+)\s*; - -// static import 成员 -import\s+static\s+[\w.]+\.(\w+)\s*; - -// static import 类 -import\s+static\s+([\w.]+)\s*; -``` diff --git a/.agents/skills/remove-redundancy-import/scan_redundant_imports.py b/.agents/skills/remove-redundancy-import/scan_redundant_imports.py deleted file mode 100644 index 25e03950..00000000 --- a/.agents/skills/remove-redundancy-import/scan_redundant_imports.py +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -冗余 import 扫描脚本 -按 reference.md 规则扫描项目内 Java 文件,输出待移除的冗余 import 列表。 -用法:在项目根目录执行 python scan_redundant_imports.py -""" -import os -import re -import sys - - -def get_simple_name(imp: str) -> str | None: - """从 import 行提取简单名(用于类体搜索)""" - m = re.match(r'import\s+static\s+[\w.]+\.(\w+)\s*;', imp) - if m: - return m.group(1) - m = re.match(r'import\s+(?:static\s+)?([\w.]+)\s*;', imp) - if m: - return m.group(1).split('.')[-1] - return None - - -def get_import_full(imp: str) -> str: - """提取 import 的完整限定名""" - m = re.match(r'import\s+(?:static\s+)?([\w.]+)\s*;', imp) - return m.group(1).strip() if m else '' - - -def get_import_package(imp: str) -> str: - """提取 import 所在包(用于同包冗余判断)""" - m = re.match(r'import\s+(?:static\s+)?([\w.]+)\s*;', imp) - if m: - parts = m.group(1).split('.') - return '.'.join(parts[:-1]) if len(parts) > 1 else '' - return '' - - -def find_class_body_start(content: str) -> int: - """找到类体起始位置(最后一个 import 之后)""" - last = 0 - for m in re.finditer(r'import\s+(?:static\s+)?[\w.]+\s*;', content): - last = m.end() - return last - - -def main() -> None: - root = sys.argv[1] if len(sys.argv) > 1 else '.' - skip_dirs = {'target', 'build', '.git', 'node_modules'} - - results = [] - for dirpath, dirnames, filenames in os.walk(root): - dirnames[:] = [d for d in dirnames if d not in skip_dirs] - for f in filenames: - if not f.endswith('.java'): - continue - path = os.path.join(dirpath, f).replace('\\', '/') - try: - with open(path, 'r', encoding='utf-8', errors='ignore') as fp: - content = fp.read() - except OSError: - continue - - pkg_match = re.search(r'package\s+([\w.]+)\s*;', content) - file_pkg = pkg_match.group(1) if pkg_match else '' - - imports = re.findall(r'import\s+(?:static\s+)?[\w.]+\s*;', content) - imports = [i for i in imports if '*;' not in i and '.*' not in i] - - body_start = find_class_body_start(content) - body = content[body_start:] - - redundant = [] - for imp in imports: - simple = get_simple_name(imp) - if not simple: - continue - imp_full = get_import_full(imp) - imp_pkg = get_import_package(imp) - if imp_pkg and imp_pkg == file_pkg: - redundant.append(imp_full) - continue - if not re.search(r'\b' + re.escape(simple) + r'\b', body): - redundant.append(imp_full) - - if redundant: - results.append((path, redundant)) - - for path, red in results: - print(f"{path} | {'; '.join(red)} | {len(red)}") - print("TOTAL_FILES:" + str(len(results))) - print("TOTAL_IMPORTS:" + str(sum(len(r[1]) for r in results))) - - -if __name__ == '__main__': - main() diff --git a/.agents/skills/upgrade-version/SKILL.md b/.agents/skills/upgrade-version/SKILL.md deleted file mode 100644 index 0f104dd5..00000000 --- a/.agents/skills/upgrade-version/SKILL.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -name: upgrade-version -description: 将 Sa-Token 项目版本号升级到指定新版本。每次调用时先读取当前版本并提示用户,待用户输入目标版本后再执行批量修改。修改范围:pom.xml、核心常量、Demo 子项目及文档。当用户要求升级版本、修改版本号、或 version bump 时使用。 ---- - -# Sa-Token 版本升级 - -将项目版本号升级到用户指定的新版本。每次调用时**先读取当前版本并询问目标版本**,用户确认后再批量修改核心构建、Demo 项目及文档中的版本引用。 - -## 使用时机 - -- 用户要求升级项目版本、修改版本号 -- 用户说「版本从 vX.Y.Z 升级到 vX.Y.Z」「bump version」等 - -## 工作流程 - -### 第零步:询问目标版本(必须执行,不得跳过) - -1. **读取当前版本**:从 `pom.xml` 的 `` 或 `SaTokenConsts.java` 的 `VERSION_NO` 中读取当前版本号 -2. **提示用户**:明确告知「当前版本号是:xxx」 -3. **等待输入**:询问「请输入要升级到的目标版本号(如 1.46.0):」 -4. **确认后再执行**:**必须**等用户明确回复目标版本号后,才能执行后续修改步骤。若用户仅说「升级版本」而未给出目标版本,先完成本步骤再继续 - -### 第一步:核心构建配置(3 个文件) - -使用「当前版本」「目标版本」进行替换: - -| 文件 | 修改内容 | -|------|----------| -| `pom.xml` | `当前版本` → 目标版本 | -| `sa-token-bom/pom.xml` | `当前版本` → 目标版本 | -| `sa-token-core/.../SaTokenConsts.java` | `VERSION_NO = "v当前版本"` → `"v目标版本"` | - -### 第二步:Demo 项目(sa-token-demo 下所有 pom.xml) - -- 将 `当前版本` 改为目标版本 -- **sa-token-demo-bom-import** 额外修改:`` 内 `sa-token-bom` 的 `当前版本` → 目标版本 - -**查找方式**:`grep "当前版本" sa-token-demo --output-mode files_with_matches` 定位所有需修改的 pom.xml。 - -### 第三步:文档(6 个文件) - -| 文件 | 修改内容 | -|------|----------| -| `README.md` | 标题 `v当前版本` → `v目标版本`;Maven 依赖 `当前版本` → 目标版本 | -| `sa-token-doc/README.md` | 标题 `v当前版本` → `v目标版本` | -| `sa-token-doc/index.html` | `v当前版本` → `v目标版本` | -| `sa-token-doc/doc.html` | `v当前版本` 和 `saTokenTopVersion = '当前版本'` → 目标版本 | -| `sa-token-doc/start/new-version.md` | 文案及 Maven 示例中的当前版本 → 目标版本 | - -### 第四步:不修改的文件 - -以下为历史记录或示例,**保持原样**: - -- `.agents/skills/` 下的示例(format-reference.md、SKILL.md 等) -- `MEMO/` 下的历史备忘录 -- `sa-token-core/.../*.java` 中的 `@since X.Y.Z`(表示 API 引入版本,不随发布升级) -- `sa-token-doc/more/update-log.md`:更新日志应**新增**新版本条目,而非修改旧条目 -- `sa-token-doc/more/blog.md`:历史博客链接 - -## 替换规则 - -- **pom.xml**:`当前版本` → `目标版本` -- **Java**:`"v当前版本"` → `"v目标版本"` -- **HTML/MD**:`v当前版本` 和 `当前版本` 按上下文分别替换为目标版本 - -## 执行顺序建议 - -1. 第零步:读取当前版本 → 提示用户 → 等待用户输入目标版本 -2. 根 POM、sa-token-bom -3. SaTokenConsts.java -4. 批量修改 Demo pom.xml -5. 修改文档 - -## 验证 - -执行完成后,用 `grep "被替换的版本号"` 在项目根目录搜索,确认仅剩「不修改」列表中的文件仍含该版本(即修改已生效)。 diff --git a/sa-token-doc/doc.html b/sa-token-doc/doc.html index 462cc8f2..e1269003 100644 --- a/sa-token-doc/doc.html +++ b/sa-token-doc/doc.html @@ -116,6 +116,7 @@
+ 抓蛙师(23集) 朱老师的小课堂(7集) 王清江唷 SSO篇(29集) fox说技术(7集) diff --git a/sa-token-doc/index.html b/sa-token-doc/index.html index 502b3cd1..d030bd4a 100644 --- a/sa-token-doc/index.html +++ b/sa-token-doc/index.html @@ -62,6 +62,7 @@
+ 抓蛙师(23集) 朱老师的小课堂(7集) 王清江唷 SSO篇(29集) fox说技术(7集) diff --git a/sa-token-doc/more/blog.md b/sa-token-doc/more/blog.md index d8774c40..c670d236 100644 --- a/sa-token-doc/more/blog.md +++ b/sa-token-doc/more/blog.md @@ -6,6 +6,10 @@ --- +- [[ 公众号 ] Sa-Token 核心流程](https://mp.weixin.qq.com/s/Y_8neMzyUg5danEU3Y1PdQ) (2026-5-1) + +- [[ 51cto ] SpringBoot结合Sa-token实现权限认证(3)](https://blog.51cto.com/u_16099187/14575721) (2026-4-29) + - [[ 公众号 ] Sa-Token 的 switchTo,不是 "管理员冒充用户"](https://mp.weixin.qq.com/s/Uqh1sDhjnJIBEkNwoxqA-g) (2026-4-24) - [[ 公众号 ] 权限框架怎么选?SpringSecurity、Shiro、Sa-Token 全面对比](https://mp.weixin.qq.com/s/ilOjwq92KK3FIOHUwjKOLA) (2026-4-24) diff --git a/sa-token-doc/static/donate/donate-list.js b/sa-token-doc/static/donate/donate-list.js index 0ff7aee4..32a57f1a 100644 --- a/sa-token-doc/static/donate/donate-list.js +++ b/sa-token-doc/static/donate/donate-list.js @@ -1521,7 +1521,7 @@ var donateList = [ "name": "小火(赞赏码)", "link": "", "money": 0.05, - "msg": '', + "msg": '感谢您的开源项目', "date": "2026-03-29" }, @@ -1529,8 +1529,22 @@ var donateList = [ "name": "Right(赞赏码)", "link": "", "money": 1.0, - "msg": '', + "msg": '感谢,ZZT.', "date": "2026-04-09" }, + { + "name": "糍粑(赞赏码)", + "link": "", + "money": 1.0, + "msg": '加油', + "date": "2026-04-28" + }, + { + "name": "jerry(赞赏码)", + "link": "", + "money": 42.9, + "msg": '非常棒的项目!', + "date": "2026-04-29" + }, ] \ No newline at end of file