@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 +3 -0
- package/merge.js +0 -22
- package/package.json +1 -1
- package/postinstall.js +2 -30
- package/rules/frontend.md +2 -0
- package/rules/global.md +1 -0
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
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
|
-
|
|
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]
|
|
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
|
|