@routerhub/agent-rules 1.5.53 → 1.5.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.base.md CHANGED
@@ -116,6 +116,7 @@ Closes #456
116
116
  - 如果 Copilot review 连续两轮提出同一问题但实际已修复或无道理,需在 PR 评论中明确说明原因并直接 Resolve,不再反复修改。
117
117
  - PR 图片文件检查:在 Copilot review 循环中(建议放在开始处理 review 问题之前,或所有 review 问题处理完毕之后),必须检查当前 PR 中是否存在未被引用的图片文件(PNG、JPG、JPEG、GIF、SVG、WebP 等)。检查方式:搜索代码库中是否有任何文件引用了该图片的文件名或路径,若没有任何引用 → 该图片为冗余文件。处理方式:若图片内容需要保留(如截图佐证),则将其转为 base64 data URI 内嵌到对应的 HTML 文档中,然后删除原图片文件;若图片内容无需保留,则直接删除。处理完毕后提交并推送。
118
118
  - 可忽略的 review 建议:如果 Copilot review 建议将配置项(API 地址、数据库连接、第三方服务地址等)写入 `.env` 文件,必须直接忽略并在评论中回复说明原因后 Resolve。说明内容:「本项目 `.env` 仅允许配置端口号(如 `PORT`、`API_PORT`),其余配置项一律写死在代码中,敏感信息统一放入 Nacos 配置中心,不放 `.env`。」
119
+ - ⚠️ **强制步骤:重新请求 Copilot review 后,必须主动检查 Copilot 是否已回复。** 不能发完评论就停止等待。检查方式:使用 `gh api` 拉取 PR 的 reviews 和 comments,对比上次已知的最新 review 时间戳。检查频率:每次重新请求 review 后,约 2–3 分钟后主动检查一次;若 Copilot 已生成新 review 则立即进入下一轮处理;若尚未回复,再等 2–3 分钟后再次检查。不可无限等待,最多检查 3 次(约 6–9 分钟),若仍无回复则告知用户当前状态。
119
120
 
120
121
  ## 安全
121
122
 
@@ -206,6 +207,7 @@ Closes #456
206
207
 
207
208
  ## 样式(Tailwind CSS)
208
209
 
210
+ - 前端开发禁止编写原生 CSS,所有样式必须使用 Tailwind CSS 的 utility classes 实现,不写 `style` 标签、不写内联样式、不写独立样式文件。
209
211
  - 统一 Tailwind CSS,禁止新增 `*.module.scss`、`*.module.css`、`.css` 文件(历史文件可保留)。
210
212
  - 项目未集成 Tailwind 时,先完成安装配置再开发。
211
213
  - 新增样式通过 utility classes 在 JSX/TSX 中编写;不满足时优先 `tailwind.config` extend → `@apply` 封装 → 行内 `style`。
@@ -239,6 +241,7 @@ Closes #456
239
241
 
240
242
  - 用 `console.error` 记录错误(含函数名/模块名上下文),禁止 `console.log` 输出错误。
241
243
  - 提交前移除调试日志和临时代码。
244
+ - 调试过程中产生的中间产物(临时文件、测试脚本、调试截图、dump 文件、临时注释、`console.log` 等)禁止加入 Git 提交,`.gitignore` 中应配置忽略常见中间产物。
242
245
 
243
246
  ## Modal 内 Tooltip 规范
244
247
 
package/merge.js CHANGED
@@ -48,26 +48,6 @@ function ensureParentDir(filePath) {
48
48
  fs.mkdirSync(parentDir, { recursive: true });
49
49
  }
50
50
 
51
- /**
52
- * 更新 .agent-rules-version 版本标记文件
53
- * 供 postinstall 判断已安装版本是否与上次同步版本一致,避免重复同步
54
- */
55
- function updateVersionMarker() {
56
- try {
57
- const currentVersion = JSON.parse(
58
- fs.readFileSync(path.join(packageRoot, "package.json"), "utf-8")
59
- ).version;
60
- fs.writeFileSync(
61
- path.join(currentRoot, ".agent-rules-version"),
62
- currentVersion,
63
- "utf-8"
64
- );
65
- } catch (e) {
66
- // 非关键操作,写入失败不阻塞主流程
67
- console.warn("[agent-rules] 版本标记写入失败:", e.message);
68
- }
69
- }
70
-
71
51
  function resolveOutputPaths(config) {
72
52
  if (Array.isArray(config.outputs) && config.outputs.length > 0) {
73
53
  return config.outputs;
@@ -537,7 +517,6 @@ function initAgents() {
537
517
  const privateOutputPath = path.join(currentRoot, "AGENTS.private.md");
538
518
 
539
519
  mergeAgents(getDefaultConfig());
540
- updateVersionMarker();
541
520
 
542
521
  if (!fs.existsSync(privateOutputPath) && fs.existsSync(privateTemplatePath)) {
543
522
  fs.copyFileSync(privateTemplatePath, privateOutputPath);
@@ -677,7 +656,6 @@ function main() {
677
656
 
678
657
  if (command === "sync") {
679
658
  mergeAgents(getDefaultConfig());
680
- updateVersionMarker();
681
659
  return;
682
660
  }
683
661
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@routerhub/agent-rules",
3
- "version": "1.5.53",
3
+ "version": "1.5.57",
4
4
  "description": "Shared Copilot agent rules and guidelines for RouterHub projects",
5
5
  "main": "AGENTS.base.md",
6
6
  "bin": {
package/postinstall.js CHANGED
@@ -83,32 +83,6 @@ if (npmrcEntries.length > 0) {
83
83
  console.log("[agent-rules] 已配置 .npmrc: " + npmrcEntries.filter((e) => !e.startsWith("#")).join(", "));
84
84
  }
85
85
 
86
- // 版本标记机制:比较已安装版本与上次同步的版本
87
- // 相同 → 跳过同步(避免每次 pnpm install 都重复生成)
88
- // 不同/不存在 → 执行同步并更新版本标记
89
- const versionMarkerPath = path.join(projectRoot, ".agent-rules-version");
90
- const currentVersion = JSON.parse(
91
- fs.readFileSync(path.join(packageRoot, "package.json"), "utf-8")
92
- ).version;
93
- let needsSync = true;
94
-
95
- if (fs.existsSync(versionMarkerPath)) {
96
- const lastVersion = fs.readFileSync(versionMarkerPath, "utf-8").trim();
97
- if (lastVersion === currentVersion) {
98
- needsSync = false;
99
- console.log("[agent-rules] 版本未变更 (" + currentVersion + "),跳过同步");
100
- } else {
101
- console.log("[agent-rules] 版本变更: " + lastVersion + " → " + currentVersion + ",执行同步...");
102
- }
103
- } else {
104
- console.log("[agent-rules] 首次安装 (v" + currentVersion + "),执行同步...");
105
- }
106
-
107
- if (!needsSync) {
108
- console.log("");
109
- process.exit(0);
110
- }
111
-
112
86
  console.log("");
113
87
  console.log("[agent-rules] 安装完成,正在初始化规则文件...");
114
88
 
@@ -120,12 +94,10 @@ const syncProcess = spawn("node", [mergeScriptPath, "init"], {
120
94
 
121
95
  syncProcess.on("close", (code) => {
122
96
  if (code === 0) {
123
- // 同步成功后写入版本标记,下次 postinstall 时比较版本号避免重复同步
124
- fs.writeFileSync(versionMarkerPath, currentVersion, "utf-8");
125
- console.log("[agent-rules] 规则文件初始化完成 (v" + currentVersion + ")");
97
+ console.log("[agent-rules] 规则文件同步完成");
126
98
  console.log("");
127
99
  } else {
128
- console.error("[agent-rules] 初始化失败,退出码:", code);
100
+ console.error("[agent-rules] 同步失败,退出码:", code);
129
101
  }
130
102
  });
131
103
 
package/rules/frontend.md CHANGED
@@ -31,6 +31,7 @@ outputName: "frontend"
31
31
 
32
32
  ## 样式(Tailwind CSS)
33
33
 
34
+ - 前端开发禁止编写原生 CSS,所有样式必须使用 Tailwind CSS 的 utility classes 实现,不写 `style` 标签、不写内联样式、不写独立样式文件。
34
35
  - 统一 Tailwind CSS,禁止新增 `*.module.scss`、`*.module.css`、`.css` 文件(历史文件可保留)。
35
36
  - 项目未集成 Tailwind 时,先完成安装配置再开发。
36
37
  - 新增样式通过 utility classes 在 JSX/TSX 中编写;不满足时优先 `tailwind.config` extend → `@apply` 封装 → 行内 `style`。
@@ -64,6 +65,7 @@ outputName: "frontend"
64
65
 
65
66
  - 用 `console.error` 记录错误(含函数名/模块名上下文),禁止 `console.log` 输出错误。
66
67
  - 提交前移除调试日志和临时代码。
68
+ - 调试过程中产生的中间产物(临时文件、测试脚本、调试截图、dump 文件、临时注释、`console.log` 等)禁止加入 Git 提交,`.gitignore` 中应配置忽略常见中间产物。
67
69
 
68
70
  ## Modal 内 Tooltip 规范
69
71
 
package/rules/global.md CHANGED
@@ -116,6 +116,7 @@ Closes #456
116
116
  - 如果 Copilot review 连续两轮提出同一问题但实际已修复或无道理,需在 PR 评论中明确说明原因并直接 Resolve,不再反复修改。
117
117
  - PR 图片文件检查:在 Copilot review 循环中(建议放在开始处理 review 问题之前,或所有 review 问题处理完毕之后),必须检查当前 PR 中是否存在未被引用的图片文件(PNG、JPG、JPEG、GIF、SVG、WebP 等)。检查方式:搜索代码库中是否有任何文件引用了该图片的文件名或路径,若没有任何引用 → 该图片为冗余文件。处理方式:若图片内容需要保留(如截图佐证),则将其转为 base64 data URI 内嵌到对应的 HTML 文档中,然后删除原图片文件;若图片内容无需保留,则直接删除。处理完毕后提交并推送。
118
118
  - 可忽略的 review 建议:如果 Copilot review 建议将配置项(API 地址、数据库连接、第三方服务地址等)写入 `.env` 文件,必须直接忽略并在评论中回复说明原因后 Resolve。说明内容:「本项目 `.env` 仅允许配置端口号(如 `PORT`、`API_PORT`),其余配置项一律写死在代码中,敏感信息统一放入 Nacos 配置中心,不放 `.env`。」
119
+ - ⚠️ **强制步骤:重新请求 Copilot review 后,必须主动检查 Copilot 是否已回复。** 不能发完评论就停止等待。检查方式:使用 `gh api` 拉取 PR 的 reviews 和 comments,对比上次已知的最新 review 时间戳。检查频率:每次重新请求 review 后,约 2–3 分钟后主动检查一次;若 Copilot 已生成新 review 则立即进入下一轮处理;若尚未回复,再等 2–3 分钟后再次检查。不可无限等待,最多检查 3 次(约 6–9 分钟),若仍无回复则告知用户当前状态。
119
120
 
120
121
  ## 安全
121
122