ecode-code-check
v0.1.0
Published
Offline e9/e10 ecode and EB application compliance checker Skill.
Maintainers
Readme
ecode AI 代码合规检测工具
简介
ecode AI 代码合规检测工具是一套面向 泛微 e9/e10 ecode 二次开发平台与 e10 EB 应用迁出包的代码检查工具。
一次可以提供一个或多个 .zip、解压目录或 ecode.json。工具先自动识别 e9/e10 与 EB 包类型,再调用对应还原工具:CSS 按平台使用独立规则,JavaScript 与 resources 图片体积检测共用;e9 追加 e9 规范,e10 与 EB 追加 e10 规范、国际化与可选系统敏感词检测。
核心理念:你提供 ecode,AI 自动检查环境、执行检测、定位问题并输出报告。
能力矩阵
| 能力 | 检测范围 | 输出结果 |
|---|---|---|
| CSS 样式污染 | e9 系统样式/页面命名作用域;e10 组件、第三方、通用类和平台场景 | 按平台独立规则,输出三级风险、位置、次数、安全评分和修改建议 |
| JavaScript 语法 | 扩展名精确为 .js 的文件,支持 ecode 中常用的 JSX 等语法 | 文件、行列位置和 Babel Parser 语法错误 |
| JS 代码风险 | docs/02-js规范/02-JavaScript代码风险规范.md | 安全 / request 请求规模、外链与涉密字段 / React / 监听与 effect 清理 |
| 图片资源体积 | e9/e10 还原结果中 resources 目录内的图片 | 严格超过 2 MiB 时输出文件、体积与压缩建议 |
| 平台自动识别与还原 | e9 datas / e10 rootFolders / EB profile.json + *_<19位ID>.zip,支持多包 | 分别调用 unBuildE9.js / unbuild.js / unbuildEbApp.js |
| EB 应用迁出包 | 页面、表单 source_code.ecode 与 attachment 关联 ecode | 页面/表单按 e10 检测;单条缺失 ecode 时告警并继续;关联 ZIP 同时还原为可浏览源码目录并复用标准 e10 报告 |
| e9 规范 | 仅 e9 的在线模块语法、复写/生命周期请求、同步请求、loadjs 去重和 iframe | 三级风险、位置和次数 |
| e10 规范 | 仅 e10 的 TEAMS、openapi、资源引用、二级路径等 | 三级风险、位置和次数 |
| e10 国际化 | e10 与 EB 中 getLabel 的待补标签 ID | 命中位置、次数与可选一键回填 |
| e10 系统敏感词 | 用户本次提供的系统后台导出 敏感词.xlsx | 敏感词、全部命中位置和出现次数 |
| 免安装运行 | WorkBuddy Node.js、Skill 内置 @babel/parser | 不调用 npm、不联网安装依赖、不生成 node_modules |
| 标准 Skill 入口 | Claude Code、Codex、Gemini、Cursor、Windsurf、Trae、CodeBuddy | SKILL.md 统一承载检测与输出契约,各工具文件仅作入口引导 |
输入与输出
| 类型 | 支持内容 |
|---|---|
| ecode 输入 | 一个或多个 e9/e10 .zip、已解出的目录、ecode.json 或 EB 应用迁出 .zip |
| 敏感词输入 | 仅批次含 e10 时确认;需要时提供后台导出的 .xlsx,不需要则跳过 |
| 请求域名白名单 | 每批次正式检测前确认一次;支持精确域名与 *.example.com,也可明确回复“无” |
| 对话输出 | 除必需输入提问和失败信息外,正式检测从第一步起只调用工具,不输出思考旁白、过程消息、进度、结果或完成提示 |
| 唯一交付 | 标准 e9/e10 生成 outputs/index.html,EB 生成 outputs/eb-index.html;成功后由 WorkBuddy present_files 直接打开 |
检测流程
用户提供一个或多个 ecode 包
│
▼
┌────────────────────────┐
│ 识别 e9 / e10 / EB │
│ 保持上传顺序 │
└────────────┬───────────┘
│
含 e10 │→ 确认一次敏感词策略
│→ 确认一次请求域名白名单
▼
┌────────────────────────┐
│ 环境准备 │
│ WorkBuddy Node → 内置 parser │
└────────────┬───────────┘
│
环境异常│
├────→ 输出原因 + 解决方案 → 中断检测
│
▼
┌────────────────────────┐
│ 调用平台还原工具 │
│ e9 / e10 / EB → 临时目录│
├────────────────────────┤
│ 完整执行平台适用检测项 │
│ 仅保留异常区块 │
│ 按实际显示顺序连续编号 │
│ 全通过输出统一结论 │
└────────────┬───────────┘
│
▼
e9/e10 → 生成 outputs/index.html 并用 present_files 打开
EB → 生成 outputs/eb-index.html 并用 present_files 打开正式检测在系统临时目录还原源码,分析完成后自动清理;不会在工作区生成解包目录。ui/ 只保留随 Skill 分发的只读模板,最终报告只生成在当前工作区 outputs/。
核心 Skill
ecode-code-check
ecode-code-check 是本工具的核心 Skill,负责统一调度环境准备、检测脚本和对话输出。仓库根目录本身就是完整 Skill 包。
AI 会在用户提出以下需求时使用该 Skill:
- 检查 ecode 代码规范或代码合规
- 自动识别 e9/e10,批量检查多个代码包
- 检测 e10 EB 应用迁出包中的页面、表单与关联全局 ecode
- 检查 CSS 样式污染
- 检查 JavaScript 语法
- 检查 resources 图片文件体积
- 检查 e10 系统敏感词
- 维护检测规则、报告格式或修复误报漏报
一次执行始终完成对应平台的完整检测:CSS 规则按平台隔离;JS 检测 将语法、风险与适用的 e9/e10 平台规范按 1/2/3 级合并展示;e10 与 EB 另执行国际化和敏感词;三者都会检查适用的 resources 图片。EB attachment 下的标准 e10 ZIP 会逐包检测并写入同一份 HTML。正式检测 stdout 保持为空,标准包结果写入 outputs/index.html,EB 结果写入 outputs/eb-index.html 并用 present_files 打开。
若当前工作区没有本仓库规则,可安装为用户级 Skill:
node scripts/install-user-skill.js默认安装到 ~/.agents/skills/ecode-code-check。
七项核心检测
CSS 样式污染
CSS 检测采用三级风险体系:
| 级别 | 含义 | 处理建议 | |---|---|---| | 🔴 1 级·危险 | 确定会造成全局污染或覆盖平台、组件样式 | 必须修改 | | 🟡 2 级·建议 | 命名不规范或存在较大冲突风险 | 建议修改 | | 🔵 3 级·潜在 | 通用类名、平台生成 ID 等潜在问题 | 结合场景确认 |
检测特点:
- 检查普通 CSS 以及
@media、@supports内的选择器。 - CSS 内只处理样式规则;JS 中的平台特有项由独立的 e9/e10 检测域分析,报告行并入
JS 检测的对应等级。 - 同类问题自动去重并汇总全部位置和出现次数。
- 每个级别最多展示 5 个不同问题,避免报告过长。
- 根据三级问题数量计算满分为 100 分的 CSS 安全评分。
CSS 规则严格按平台隔离:
- e9 只使用
docs/01-css规范/07-e9-css规范.md,检测裸写.ant-*、.wf-*、命中官方组件基类清单的.wea-*,以及官方明确的.header/.footer冲突示例;用户自定义.wea-*(如.wea-crm-plan-*)、模块父级、固定业务前缀和注入的独立类放行。 - e10 使用
docs/01-css规范/中01-06的组件前缀、第三方插件、历史类、通用类/标签与平台专项规则;「主题类 appId 写死」非主题为 3 级,主题 ecode(appMode=4)升为 1 级。 - e9 不沿用
ui-/ui-m-、第三方插件、e10 历史类、e10 通用类、weapp-demo、主题 appId 或#ebpage_*等 e10 清单。
JavaScript 语法
JS 检测使用 Skill 自带的 @babel/parser,并按 ecode 二开平台的代码特点进行配置:
- 只检测扩展名精确为
.js的文件。 .jsx、.ts、.tsx不进入语法检测和统计。.js文件允许使用 JSX。- 支持装饰器、类属性、私有属性、动态导入属性、顶层
await等常用语法。 - 只报告解析器确认的语法错误,并提供文件、行号和列号。
- 所有语法错误固定为 1 级·警告。
本阶段不执行 ESLint,也不分析代码风格、类型、业务逻辑、依赖可用性、浏览器兼容性或运行时行为。命中项以类型 JS 语法 进入 JS 检测 的 1 级表格。代码风险见下一节。
JS 语法规则由 docs/02-js规范/01-JavaScript语法规范.md 维护。
JS 代码风险
基于 Babel AST 检查二开 .js 中的常见风险(详见规范文档):
- 安全:
dangerouslySetInnerHTML、document.write、eval/new Function、字符串版定时器(XSS 与代码注入为 2 级)、target="_blank"缺 noopener、疑似硬编码密钥;innerHTML/outerHTML赋值不检测。 - request 请求:对象参数或 GET URL 查询参数的静态数值
>=1000(2 级);非白名单绝对外链和 username/password/token 等未加密字段(3 级)。 - React:缺 key、
key={index}、条件/嵌套 Hook、渲染期 setState、组件内定义子组件。 - 资源清理:所有
.js中addEventListener未见匹配卸载,以及useEffect内定时器/订阅未见 cleanup。
风险结构化结果保持独立;报告中与语法、适用平台规范合并,直接按 1 级·警告 / 2 级·建议 / 3 级·潜在 三级表格展示,不显示来源分类标题。
规则详见 docs/02-js规范/02-JavaScript代码风险规范.md。
e9 专项检测域
仅 e9 执行,规则来源为 docs/02-js规范/04-e9-ecode规范.md:
- 在线源码使用标准
import/export(1 级·警告) - 组件复写钩子或重复渲染生命周期内直接请求接口(1 级·警告)
- 同步 XHR /
ajax async:false、loadjs未去重(2 级·建议) - JSX 原生
iframe(3 级·潜在)
检测器会排除事件回调中延迟执行的请求,以及 componentDidMount 的一次性请求。命中项并入 JS 检测 的对应等级。
e10 专项检测域
E10/ecode 平台特有项在结构化结果中与通用 JS 风险分离,报告行统一并入 JS 检测,当前包括:
TEAMS/window.TEAMS手动赋值、前端直调 openapi / openserver、替换组件再 import 原组件(1 级·警告)- 前置
entry/init引用@weapp/ui、weId 全路径===、异步组件未包Suspense、路由未使用regReactChildren、普通request替代devRequest、loadjs 站外地址(2 级·建议) - weId / weid 与字符串相等前未判空、原生 img/a/iframe 未
getSecondPathUrl(3 级·潜在) - JS 内主题类数字 appId 写死(非主题 🔵 3 级;主题
appMode=4🔴 1 级禁止写死)、以及#ebpage_*写死(潜在)
CSS 样式限定仍只看 CSS 样式污染区块,并按平台分别读取 07-e9-css规范.md 或 e10 的 01-06。
e10 专项:e10 国际化
e10 与 EB 检测 getLabel(0/-1/1/空, 文案) 待补标签 ID,仅命中时显示;标准 e10 ecode 支持一键回填。完整规则见 docs/06-e10国际化检测规范/01-e10国际化检测规范.md。
e10 专项:e10 系统敏感词
敏感词完全以用户本次提供的系统后台导出文件为准:
- 只读取列名为“敏感词”的非空单元格。
- 不使用任何内置、默认或兜底词库。
- 按大小写不敏感的字面量子串匹配,不把词项当作正则表达式。
- 扫描所有带
content的文本代码文件,字符串和注释同样参与检测。 - 同一敏感词在同一文件内自动汇总,并保留全部
文件:行:列。
批次包含 e10 时,Agent 会先确认是否需要敏感词检测:选择不需要时使用 --skip-sensitive;需要时再收集 敏感词.xlsx。e9 不执行本阶段。只有命中时才显示敏感词区块;跳过、无有效词项或无命中均不占报告序号。
导出方式和文件要求见 docs/03-e10系统敏感词/01-敏感词检测说明.md。
通用可选区块 · 资源检测
e9/e10 都会在还原后递归扫描路径段名称为 resources 的目录,只检查常见图片扩展名。e10 ZIP/解压目录里独立存放在 ${resources 或 resources 下、未写入 codes[].content 的图片也会按原始二进制字节还原并检测。图片严格超过 2 MiB 时,报告末尾以当时下一个连续序号显示 ### N. 资源检测:
- 问题:
文件体积过大影响加载性能 - 建议:通过 https://tinypng.com 等工具压缩后再上传
${resources/${name 会规范化为 resources/name;不安全 ZIP 路径不会写入临时还原目录。恰好 2 MiB 的图片不告警;非图片、目录外图片不检测。没有超限图片时不显示标题、通过结论或空表格。完整规则见 docs/04-资源检测规范/01-图片资源体积规范.md。
运行环境检查
检测开始前,prepare-environment.js 会检查:
- WorkBuddy 提供的 Node.js 是否存在且版本不低于
16.0.0。 - Skill 自带的
tool/vendor/babel-parser.js是否可以正常加载。
客户运行期不需要 npm、网络连接或可写的依赖目录,也不会执行 npm install。解析器缺失表示 Skill 包不完整,应重新获取完整 Skill,而不是在客户环境补装依赖。
环境检查失败时会中断检测,并按实际原因提示:
- WorkBuddy Node.js 运行时版本过低
tool/vendor/babel-parser.js缺失- 内置 parser 损坏或无法加载
升级 WorkBuddy 或重新获取完整 Skill 后,再次发起检测即可。
快速开始
使用自然语言
- 使用已适配的 AI 编码工具打开本项目目录。
- 提供 ecode 的
.zip或ecode.json文件路径。 - 提供当前环境的请求域名白名单;无白名单时明确说明“无”。
- 如需敏感词检测,同时提供系统后台导出的
敏感词.xlsx。 - 用自然语言要求 AI 执行代码合规检测。
提示词与对话示例
检测完成后,AI 不在对话中展开结果,也不读写 memory;标准 e9/e10 只交付 outputs/index.html,EB 只交付 outputs/eb-index.html,并用 present_files 打开。
对话 1:同时提供 ecode 压缩包和敏感词文件
用户:
帮我检查这个 ecode 包的代码合规:
/path/to/项目.zip
敏感词文件:
/path/to/敏感词.xlsx
请求域名白名单:
api.example.com,*.trusted.example.comAI: (无对话回复;WorkBuddy 通过 present_files 直接打开 outputs/index.html。)
对话 2:只提供 ecode.json
用户:
请检查 /path/to/ecode.json 的代码规范和代码合规问题。AI:
是否需要检测 e10 系统敏感词?请回复「需要」或「不需要」。
请输入当前环境的请求域名白名单(多个域名用逗号分隔,支持 *.example.com);如无白名单请回复「无」。对话 3:首次未提供 ecode 文件
用户:
帮我检查一下 ecode 项目的 CSS 污染和 JS 语法。AI:
请提供 ecode 的 .zip 打包文件(或已解出的 ecode.json)路径。用户:
文件在 /path/to/项目.zipAI:
是否需要检测 e10 系统敏感词?请回复「需要」或「不需要」。报告结构
每次成功检测都按平台执行完整检测。HTML 报告只显示异常区块,顺序为 CSS → JS(含平台规范)→ e10 国际化 → e10 敏感词 → 资源。EB 使用 outputs/eb-index.html 分组展示;无法还原的单条 source_code 会生成 EB 源码还原 finding,不会误报全部通过。报告由检测脚本统一生成,AI 不会在对话中重复报告内容。
技术架构
技术栈
- 运行环境:WorkBuddy 提供的 Node.js
>=16.0.0 - JavaScript 解析器:Skill 内置
@babel/parser,客户无需安装 - ZIP / XLSX 读取:Node.js 原生能力,检测过程不依赖系统解压工具
- 规则来源:Markdown 规范文档 + 检测脚本
- 输出协议:正式检测 stdout 为空;标准 e9/e10 只生成
outputs/index.html,EB 只生成outputs/eb-index.html,均用present_files打开;全程不读写 memory
项目目录
ecode-css-verify/
├── SKILL.md # Skill 唯一标准执行入口
├── agents/openai.yaml # Skill 展示与默认提示
├── references/
│ └── maintenance.md # local 文件职责与回归要求
├── scripts/
│ ├── prepare-environment.js # WorkBuddy Node 与内置 parser 检查
│ ├── ecode-code-checker.js # 核心检测器
│ ├── install-user-skill.js # 用户级独立安装
│ └── runtime-layout.js # Skill 目录布局定位(被检测器引用)
├── tests/ # 仓库维护测试,不进入用户级安装
│ ├── run-environment-fixtures.js # 环境准备回归
│ └── run-standalone-fixtures.js # 独立安装回归
├── docs/
│ ├── 01-css规范/ # e9 独立 CSS 规范与 e10 CSS 清单
│ ├── 02-js规范/ # JS 语法、风险与平台专项规范
│ ├── 03-e10系统敏感词/ # 敏感词导出与检测说明
│ ├── 04-资源检测规范/ # e9/e10 图片资源体积规范
│ ├── 05-eb应用包检测/ # EB 迁出包结构与输出规范
│ └── 06-e10国际化检测规范/ # e10 国际化检测与回填规范
├── tool/
│ ├── vendor/babel-parser.js # 客户运行期自带的 JS 解析器
│ ├── vendor/BABEL-PARSER-LICENSE.txt # 第三方许可证
│ ├── unbuild.js # e10 源码还原脚本
│ ├── unBuildE9.js # e9 ZIP/目录源码还原脚本
│ └── unbuildEbApp.js # EB 多层迁出包源码还原脚本
├── CODEBUDDY.md # WorkBuddy 项目入口,强制路由到 SKILL.md
├── AGENTS.md # 指向标准 SKILL.md 的兼容入口
├── CLAUDE.md / GEMINI.md # Claude / Gemini 兼容入口
└── .codebuddy/ # CodeBuddy 兼容入口唯一标准执行入口是根目录 SKILL.md。其他 AI 工具文件仅负责引导完整读取该 Skill,不再重复维护执行契约。
能力边界与扩展方向
当前工具支持 e9/e10/EB 自动分流与以下合规检测:
- CSS 样式污染
- JavaScript 语法
- JS 代码风险
- e9 规范(仅 e9)
- e10 规范(仅 e10)
- e10 国际化(e10 与 EB)
- e10 系统敏感词
- EB 页面、表单及关联全局 ecode
- resources 图片体积
后续可以通过扩展 Skill、检测脚本和规范文档,增加更多业务模块及个性化检测能力,例如:
| 可扩展 Skill | 方向 |
|---|---|
| ecode-component-check | 公共组件使用、组件替换与参数复写规范 |
| ecode-security-check | 高风险 API、凭据泄露和安全编码规则 |
这些名称代表扩展方向,当前版本尚未内置。通过模块化扩展,可以逐步形成覆盖更多业务场景的 ecode 代码质量与合规检测体系。
注意事项
- ecode 输入必须是正常格式的
.zip、解压目录或ecode.json;EB 输入必须是完整迁出 ZIP。 - 敏感词表必须来自系统后台,并包含列名为“敏感词”的列。
- 敏感词匹配包含字符串和注释,命中并不等同于业务违规,需结合实际语境确认。
- JS 检测包含语法解析与 AST 静态风险检查,但不会执行代码,也不代表运行结果一定正确。
- request 规则只判断源码中可静态确认的参数、URL 与加密表达式;动态变量和运行时拼接需人工复核。
- 域名白名单只比较 hostname,不比较协议、端口、路径或查询参数;
*.example.com只匹配子域,不匹配根域。 - CSS 安全评分用于快速评估污染风险,最终修改仍需结合页面作用域和业务场景判断。
