下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-cpxku7e4--huitou-aicenter-bidcheck.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-cpxku7e4/huitou-aicenter-bidcheck。一款灵活、安全、可靠、面向 docx 技术标书文件的本地化暗标格式检测工具。可灵活定义暗标格式检测规则,按规则进行检测修复,输出详细的问题分析、标注文件和修复文件等报告,帮助规避因暗标格式问题导致的废标风险。
阅读全文 (展开查看完整说明)
概述
暗标格式检测
六步走:检查并更新本地检测程序 → 用户登录与确认余额 → 导入并校验 docx → 设置规则 → 调用本地 check.exe → 按 status 交付。
| 步骤 | 做什么 | 产出 |
|---|---|---|
| 第零步 | 检查 bin/Check.exe 是否就位、是否最新,缺失或落后就自动下载替换(bin_update.py) | 可用的 bin/Check.exe |
| 第一步 | 用户登录与确认余额(client.py status 检查,必要时 login 保存 key) | config.json 中可用的 user-key |
| 第二步 | 导入并校验 docx 文件格式是否合法 | 合格文件清单 / 拒绝提示 |
| 第三步 | 打开检测规则设置页让用户勾选,提交后落盘规则 | 检测规则 JSON |
| 第四步 | 把「user-key + 待检测文件 + 检测规则」交给 bin/check.exe | 等待检测完成 |
| 第五步 | 把 check.exe 返回的 message 转达给用户,并按 status 交付 | ①status=1 无问题→只提示;②status=2 有问题→提示 + 报告文件;③status=0 / 未按约定返回→只提示 |
前置条件
- 运行检测程序 check.exe 的客户端需安装 .NET Framework 4.5 或更高版本。
- 建议提前把技能包目录加入安全软件的信任区(Windows Defender 排除项,或第三方杀软白名单),
否则 bin/Check.exe 可能被隔离、删除或拦截而无法拉起(排查与处理见「Check.exe 被安全软件拦截怎么办」)。
- 第零步自动更新检测程序需要能访问脚本顶部写死的两个地址(
scripts/bin_update.py里的
BIN_VERSION_URL 版本接口,返回 {"Version": "1.0.0.0"};BIN_DOWNLOAD_URL 资源包下载地址);地址没填时不会自动更新,只在程序已在位时告警跳过,程序缺失则中止流程。
- Python 3.10+,零第三方依赖(纯标准库,含内置的极简 xlsx 读取器)。
- 用户已在门户注册并持有 user-key(门户地址
https://aicenter.huitoue.com/,注册/登录后在个人信息页复制);
user-key 由 scripts/client.py 校验后保存在技能包根目录的 config.json 中。
- 待检测文件只接受
.docx,由scripts/docx_guard.py统一把关(第三步和第四步所用脚本均已接入该校验)。 - 不要编造 user-key,也不要在回复中回显完整 key(
client.py的输出已自动脱敏)。
第零步:检查并更新本地检测程序(bin)
这一步在用户登录与余额验证之前做,先确认 bin/Check.exe 就位且是最新版,避免用户勾完规则才发现程序缺失或被杀软删掉。
python scripts/bin_update.py # 检查并按需安装/更新检测程序
python scripts/bin_update.py --check # 只检查、不改动任何文件(排查用)
python scripts/bin_update.py --force # 忽略版本比较,强制重新下载覆盖安装脚本自己完成四件事,不需要手工下载或解压:
- 看
bin/Check.exe在不在;不在 → 下载资源包(zip),直接解压到bin/。 - 在 → 读它的文件版本号(PE 资源),与版本接口返回的远程版本号比较。
- 本地 < 远程 → 下载资源包,解压覆盖
bin/;本地 ≥ 远程 → 无需更新,直接放行。 - 覆盖策略:包内所有文件直接铺到
bin/—— 同名文件覆盖、新文件新增;bin/log/的日志不会被覆盖或删除;包内没有、本地多出来的文件一律保留(不删除)。
两个地址写死在脚本顶部,不从 config.json 读取(要换地址就直接改脚本):
BIN_VERSION_URL = "" # 版本接口,返回 {"Version": "1.0.0.0"},只给版本号,不给资源地址
BIN_DOWNLOAD_URL = "" # Resource.zip 资源包下载地址版本接口只返回版本号,字段名固定为 Version,格式为 x.x.x.x;下载地址与版本号分开配置,更新时一律从 BIN_DOWNLOAD_URL 取包,不使用接口里的任何地址。
资源包是 zip,且包内直接就是 Check.exe 与其它辅助文件(不要带 bin/ 这类外层目录);脚本会先校验包结构(Check.exe 必须在压缩包根目录、路径里不能有 ..),校验通过才写盘,否则中止且完全不动 bin/——包括「包内 Check.exe 被放在 bin/ 子目录里」这种做错的包。
按退出码决定怎么走,不要跳过这一步:
| 退出码 | 含义 | 怎么做 |
|---|---|---|
| 0 | 就绪:已是最新 / 安装或更新成功 / 未填写接口地址但程序已在位 | 进入第一步 |
| 3 | bin/Check.exe 缺失且无法自动获取(BIN_VERSION_URL 未填) | 中止流程:提示用户在脚本顶部填两个地址后重跑,或手动放入技能包原件 |
| 4 | 更新失败,或无法确认远程版本(网络异常 / 接口非 2xx / 返回不是合法 JSON / 缺 Version 字段 / 版本号格式不对 / 下载到非 zip / 包结构不符合约定 / BIN_DOWNLOAD_URL 未填) | 中止流程:把原因转达用户,稍后重试或手动处理;不要带着旧程序继续检测 |
| 1 / 2 | 一般错误 / 参数错误 | 看输出排查,处理后重跑 |
- 输出里的「本地版本 → 远程版本」可以直接回报给用户(例如「检测程序已更新:1.0.0.0 → 1.2.0」)。
- 两个地址为空时不要报「检测失败」——这属于「脚本没填更新源」,按上表的 0、3 或 4 号分支处置。
- 只在接口确认远程版本更高时才替换文件,不要为了「保险」反复强制覆盖。
- 读不到本地版本号(刚更新完、安全软件正在扫描时会临时锁定 Check.exe,脚本已自动重试几次):
脚本会告警并按「不做比较」放行(退出码 0),不会盲目重新下载。这时按提示稍后重跑,或执行 bin_update.py --force 强制重装。
第一步:用户登录与确认余额
先完成第零步(检测程序就位且最新),再确认登录与余额可用,然后才进入后续流程,避免用户勾完规则后才发现无法检测。这一步全部由账号客户端 scripts/client.py 完成(零依赖,只调登录验证与余额验证两个接口):
python scripts/client.py status # 检查登录状态 + 余额
python scripts/client.py login <user-key> # 未登录时保存 key(保存前先校验)
python scripts/client.py logout # 退出登录(只清 key)按下面三步走,不要手工去读写 config.json:
- 看配置里有没有 user-key:直接执行
status,它自己读config.json的user_key。- 有 → 自动用登录验证接口校验 key 是否仍然有效,有效再查余额;
- 没有(退出码 3)→ 进入第 2 步。
- 没有(或已失效)→ 引导用户到门户取 key,再保存到
config.json。把门户地址https://aicenter.huitoue.com/发给用户,让他注册/登录后在个人信息页复制 user-key,然后执行python scripts/client.py login <user-key>。login先校验、再落盘:key 无效(退出码 3)或无法校验(退出码 1)时都不会写入config.json,只有校验通过才保存,并顺带打印手机号与余额。 - 确认余额有效才进第二步:
status与login都会查余额并打印结果(次数型看剩余次数,时长型看到期状态)。- 退出码 0 = 登录有效且余额可用 → 进入第二步;
- 退出码 4 = 余额不足或已过期 → 不要往下走,把门户地址给用户引导充值,充值后重跑
status确认; - 退出码 1 = 网络异常等,无法确认 → 告诉用户稍后重试,不要当成通过。
检测时若程序因鉴权失效或余额不足返回失败(status=0),按第五步转达原因,并引导用户回门户处理。
第二步:导入 docx 文件并校验格式是否合法
只接受 .docx:扩展名必须恰好是 .docx,内容还必须是包含 word/document.xml 的 zip 容器(防止 .doc、PDF、加密文档、xlsx、pptx、损坏或 0 字节文件改名混入)。
不合格时,脚本会打印具体原因与处理建议,并以退出码 2 结束;此时不启动规则设置页,也不拉起检测程序。请把原因转达给用户,让其另存为 .docx 后再试:不转换、不改名凑数、不进入流程。
第三步:打开检测规则设置页,输出检测规则
用户导入 docx 后,启动规则设置页服务(一个后台任务):
python scripts/rule_form.py --file "C:/path/技术标.docx" --no-browser- 支持多个文件:
--file a.docx b.docx c.docx,同一批文件共用本次生成的规则。 --no-browser:禁止自动弹出系统浏览器(改用内置浏览器打开)。- 启动时会先校验导入文件;若不合格,直接以退出码 2 结束,服务不会启动。
等后台任务打印出 [就绪] 规则设置页面已启动:http://127.0.0.1:8765/ 后,用内置浏览器打开该地址(present_files 传这个 http 地址),然后告诉用户:「请在页面上按分类勾选检测规则、设置目标值,完成后点『提交』」。
用户点「提交」后,服务会把规则写入 <待检测文件同目录>/<文件名>-暗标检测/本次检测规则.json,在 stdout 打印规则信息,并自动退出(退出码 0):
检测规则已生成
待检测文件:技术标.docx
规则条数:共 98 项(一级 88 项),启用 72 项(一级 68 项)
规则文件:D:...技术标-暗标检测本次检测规则.json把规则条数与规则文件路径回报给用户——这一步就是「输出检测规则」。
- 规则一律由页面生成,不要手工编辑或编造规则 JSON。
- 若用户 30 分钟内未提交(可用
--idle-timeout调整),服务会自动退出(退出码 1),需重新执行本命令。 - 重新检测须重走本步(每次都用全新配置,不复用历史规则)。
第四步:拉起本地检测程序 check.exe
python scripts/anbiao_check.py --file "C:/path/技术标.docx"
--rule "D:/.../技术标-暗标检测/本次检测规则.json"- 不用再传 key:第一步
client.py login已把 user-key 存进config.json,脚本会自动取用
(取值顺序:--key > 环境变量 ANBIAO_CHECK_KEY > config.json 的 user_key,需要临时换 key 时才加 --key)。
- 这是一条前台阻塞命令,内部会拉起
check.exe并等待其结束,不需要额外轮询命令。 - 检测通常需要几十秒到几分钟,先告知用户「已开始检测,完成后直接交付结果」。
- 多文件:
--file a.docx b.docx,逐个串行处理。 - 报告文件由 check.exe 自行写到待检测文件所在目录。
- 需要程序化处理时加
--json(此时进度行全部输出到 stderr,stdout 是纯 JSON)。
传给 check.exe 的参数是三个位置参数,顺序固定:
check.exe <用户身份key> <待检测文件.docx绝对路径> <检测规则.json绝对路径>第五步:转达 message,并按 status 交付
check.exe 会在 stdout 返回 JSON:{status, message, files}。status 是判定结果的唯一依据(不看退出码,也不看输出文案),三种情况严格一一对应:
| status | 脚本退出码 | 情况 | 交付 |
|---|---|---|---|
1 | 0 | 检测完成且无任何问题 | 只转达 message(合规结论) |
2 | 6 | 检测完成且存在问题 | 转达 message(结果汇总)+ 交付报告文件 |
0 | 4 | 检测失败 | 只转达 message(即失败原因) |
| — | 5 | 没返回约定的 JSON,无法判定 | 只输出提示 |
| — | 3 | 未找到检测程序 | 先跑第零步 bin_update.py 重新获取;仍不行再让用户放入 bin/ |
- status=1:只转达 message,不要编造任何问题,也不要列举规则。
- status=2:先把 message 原文转达给用户(那是检测程序给出的结果汇总),再用
present_files把files中本次实际产出的报告文件(绝对路径)一起交付;如果只产出其中几份,如实转达,不要补造文件——报告文件一律由 check.exe 产出,技能不生成任何报表。可以顺带给出问题预览,但不要把问题清单整篇粘贴出来。 - status=0 / 退出码 4:把失败原因、处理建议与检测程序原始输出转达给用户,不要重试,不要臆造结果(退出码 4 的另两种情形是程序超时、程序非零退出码);若原因是鉴权失效或余额不足,先跑
python scripts/client.py status复核账号(退出码 3 → 重新登录,4 → 充值),再引导用户回门户https://aicenter.huitoue.com/处理。 - 退出码 5:程序没返回约定的 JSON,或
status不在 0/1/2 内,一律按无法判定处理——绝不能脑补成「恭喜通过」,也不要当成「存在问题」,提示用户确认bin/check.exe是否符合接口约定。 - 退出码 3:先跑第零步
python scripts/bin_update.py重新获取程序;仍不行再让用户把check.exe放到bin/目录,
或用 --exe 指定路径,不要自己编造路径;同时确认是不是被安全软件删掉了(见下一节)。
Check.exe 被安全软件拦截怎么办
bin/Check.exe 是本地可执行程序,Windows Defender、360、火绒、腾讯电脑管家、卡巴斯基以及企业 EDR 等安全软件,都可能把它当成可疑程序:轻则首次运行弹窗拦截,重则直接隔离、删除,或在拉起时被拒。这不是文件损坏,也不是账号或标书文件的问题——先按下面的流程引导用户处理,不要当成「检测失败 / 标书有问题」下结论。
先认出「被拦截」的三个典型信号
| 信号 | 现象 | 落在哪一步 |
|---|---|---|
| ① 程序文件消失 | bin/Check.exe 不存在、体积变成 0 或无法访问(已被查杀隔离/删除) | 第四步直接退出码 3(未找到检测程序) |
| ② 拉起即被拒 | 退出码 4,原始输出含 无法启动检测程序、[WinError 5] 拒绝访问、[WinError 225] 文件包含病毒或潜在的垃圾软件、操作已被安全软件阻止 | 第五步的【检测程序原始输出】 |
| ③ 启动后被中途杀掉 | 没有返回约定的 JSON(退出码 5),或返回 status=0 检测失败;bin/log/log.txt 里可见中断痕迹 | 第五步 |
另外首次运行时,Windows SmartScreen 可能弹出「Windows 已保护你的电脑」;第三方杀软也可能弹「已阻止可疑程序运行」。
引导用户解决(按顺序走,不要跳步)
- 先确认是不是杀软干的:看
bin/Check.exe是否还在、大小是否正常(对比原始技能包),再查拦截记录:- Windows 安全中心 → 病毒和威胁防护 → 保护历史记录,找与
Check.exe相关的「已隔离 / 已删除 / 已阻止」; - 第三方杀软(360 / 火绒 / 电脑管家 / 卡巴斯基等)的拦截记录或隔离区。
- Windows 安全中心 → 病毒和威胁防护 → 保护历史记录,找与
- 把技能包目录整体加入信任区(推荐做法,比只放行单个文件更稳,能连带
bin/下的依赖一起放行):- Windows Defender:设置 → 隐私和安全性 → Windows 安全中心 → 病毒和威胁防护 →「病毒和威胁防护」设置下的
「管理设置」→ 排除项 → 添加或删除排除项 → 添加排除项 → 文件夹 → 选中技能包目录(形如 C:Users<用户名>.workbuddyskillsanbiao-format-check)。
- 第三方杀软:在「信任区 / 白名单 / 排除项 / 自定义防护」里添加同一个技能包目录。
- 企业电脑(装有 EDR 或域管控):用户往往无权自行加白,引导其联系 IT / 管理员放行该目录。
- 已被隔离或删除的,先从隔离区恢复:在杀软的「隔离区 / 恢复区」找到
Check.exe,选择「恢复 / 恢复并信任(加入信任区)」。
若已被永久删除且没有备份,先完成第 2 步加白,再用 python scripts/bin_update.py --force 重新获取一份覆盖 bin/(第零步发现文件缺失时本来也会自动下载安装,--force 只是跳过版本比较);加白没做就恢复/重新下载,装回去仍会被再删一次。
- 权限类报错的兜底:若原始输出是「拒绝访问 / 权限不足」,确认当前用户对技能包目录(尤其
bin/和结果目录)有读写权限;
必要时用管理员身份再运行一次。
- 首次运行手动放行:SmartScreen 提示时点「更多信息 → 仍要运行」;杀软弹窗时选「允许本次运行 / 加入信任」。
只针对本程序放行,不要关闭整体防护。
- 加白后重跑验证:先
python scripts/anbiao_check.py --dry-run ...确认程序能被定位到(能看到将执行的命令行),
再执行第四步正式检测;若仍被拦,回到第 1 步重新查拦截记录。
红线:这些做法一律不要
- 不要让用户关闭杀毒软件、实时防护或 SmartScreen / UAC;加白名单是唯一推荐方式。
- 不要靠改文件名、改扩展名、拆分或加密文件等方式绕过查杀硬拉起程序——既可能无效,也可能触发更严格拦截,还会掩盖真实问题。
- 不要用「绕过安全策略」类手段(如
-ExecutionPolicy Bypass、编码混淆脚本、提权脚本)强行运行;企业环境不要绕过 IT 管控。 - 不要从非官方渠道下载 exe 替换
bin/Check.exe(可能是恶意文件);更新只走第零步的bin_update.py
从脚本顶部配置的官方地址获取,或由用户重新获取技能包原件覆盖。
- 不要把「被拦截」写成检测结论:它属于「程序没跑起来」,既不是「标书有问题」,也不是「标书没问题」。
check.exe 接口约定(第五步判定依据)
输入:check.exe <用户身份key> <待检测文件.docx> <检测规则.json>
输出(stdout 的 JSON,前后可夹带日志行,技能会自动定位):
{
"status": 2,
"message": "提示信息",
"files": [{ "Name": "文件名称", "Path": "文件路径" }]
}status=0检测失败:message 为失败原因,files 为空数组。status=1检测完成且无任何问题:message 为合规结论,files 为空数组。status=2检测完成存在问题:message 为检测结果汇总信息,files 为报告文件数组。
message 会被原样转达给用户,它就是给用户看的那句话。files 里给了但磁盘上不存在的路径,会被单独列出提示。技能不生成报表:只解析 files 并交付原件,不会生成或补造任何文件。
命令行参考
| 命令 | 说明 |
|---|---|
bin_update.py [--check] [--force] [--timeout <秒>] [--json] [--url <地址>] [--pkg-url <地址>] | 第零步:检查 bin/Check.exe 是否就位、是否最新,缺失或版本落后则下载资源包并解压覆盖 bin/(--check 只看不动,--force 强制重装;--url / --pkg-url 仅调试用,临时覆盖脚本顶部写死的地址) |
client.py status | 检查登录状态与余额:读 config.json 的 user-key,校验是否仍登录,并查询余额是否可用 |
client.py login <user-key> | 校验 user-key 并保存到 config.json(校验不通过不写入) |
client.py logout | 退出登录(只清 config.json 里的 user-key,保留其它配置) |
rule_form.py --file <docx...> [--out-dir <dir>] [--port 8765] [--no-browser] [--idle-timeout 1800] | 托管检测规则设置页;用户提交后落盘规则并自动退出(--file 只接受 .docx) |
anbiao_check.py --file <docx...> [--rule <规则.json>] [--key <KEY>] [--out-dir <dir>] [--exe <程序>] [--timeout <秒>] [--json] [--dry-run] | 拉起 check.exe 并按其 status 分支回收结果(--file 只接受 .docx) |
docx_guard.py <文件…> | 单独校验文件是否可导入(退出码 0 全部合格 / 2 有不合格) |
mini_xlsx.py <文件.xlsx> | 只读打印该表前 20 行,查看报告文件内容用(不写文件) |
输出目录
除第三步生成的规则 JSON 外,技能不产出检测结果文件:报告文件全部由 check.exe 写出(写到待检测文件所在目录),技能只读取它的 files 并交付原件。结果目录中除规则 JSON 外,不会出现技能写的摘要、结果或日志文件。
<待检测文件同目录>/<文件名>-暗标检测/
└── 本次检测规则.json 第三步生成的检测规则(check.exe 的第 3 个参数)技能包自身还有两个非检测产出:
- 根目录的
config.json:只保存第一步的登录凭证(由client.py读写,bin_update.py不碰它)。 bin/目录:第零步在程序缺失或版本落后时才写入,资源包内所有文件直接铺到bin/
(同名覆盖、新文件新增);bin/log/ 与包内没有的本地文件不会被删除。
退出码
| 脚本 | code | 含义 |
|---|---|---|
bin_update.py | 0 | 检测程序就绪:已是最新 / 安装或更新成功 / 未配置更新源但程序已在位 |
| 3 | bin/Check.exe 缺失且无法自动获取 → 中止流程 | |
| 4 | 更新失败,或无法确认远程版本(网络异常 / 接口非 2xx / 非 JSON / 缺 Version 字段 / 版本号格式不对 / 下载到非 zip / 包结构不符合约定 / BIN_DOWNLOAD_URL 未填)→ 中止流程 | |
| 1 / 2 | 一般错误 / 参数错误 | |
client.py status | 0 | 已登录且余额可用,可进入下一步 |
| 3 | 未登录(config.json 无 user-key)或登录已失效 | |
| 4 | 已登录但余额不足 / 已过期 | |
| 1 | 无法确认(网络异常等) | |
client.py login | 0 / 4 | 已登录且余额可用 / 已保存但余额不可用(需充值) |
| 2 / 3 / 1 | 未提供 key / key 校验未通过(未写入)/ 出错(详情见输出) | |
client.py logout | 0 | 已退出(或本就未登录) |
rule_form.py | 0 / 1 / 2 | 规则已生成 / 超时未提交 / 参数错误(含导入的文件不是 .docx) |
anbiao_check.py | 0 | check.exe 返回 status=1:检测完成,无任何问题 |
| 6 | check.exe 返回 status=2:检测完成,存在问题 | |
| 1 | 一般错误 | |
| 2 | 参数错误(缺 key、文件不存在、非 docx、规则非法) | |
| 3 | 未找到检测程序 | |
| 4 | 未能正常调用:status=0 检测失败 / 程序超时 / 程序非零退出码 | |
| 5 | 未能正常调用:没返回约定的 JSON / status 不在 0/1/2 内,无法判定 |
退出码 3 / 4 / 5 除了程序缺失、超时、结果不合约定之外,也可能是安全软件拦截
Check.exe造成的(文件被隔离/删除、拉起被拒、进程被中途杀掉)——先按「Check.exe 被安全软件拦截怎么办」一节排查,再判断是不是程序本身的问题。
演练与排查
bin_update.py --check:只读检查 ——bin/Check.exe在不在、本地版本与远程版本各是多少、要不要更新,不改动任何文件。排查「程序是不是被删了 / 是不是版本落后」用这一条。client.py status:检测前账号有问题时先跑这一条,看退出码即可 —— 0 可用 / 3 未登录或登录已失效 / 4 余额不足 / 1 无法确认;输出里会打印手机号与余额。anbiao_check.py --dry-run:只解析参数、打印将要执行的命令行,不真正拉起检测程序,也不写任何文件(程序仍需已就位,未找到同样以退出码 3 提示)。用于确认参数顺序与路径拼接是否正确。docx_guard.py <文件…>:单独排查导入文件是否合格,不合格时逐个给出原因与处理建议。mini_xlsx.py <文件.xlsx>:只读打印某张表的前 20 行,查看报告文件里到底写了什么。rule_form.py启动时会检查assets/下页面与 js 资源是否齐全,缺文件会直接报错退出。- 疑似被安全软件拦截:
bin/Check.exe莫名消失、退出码 3,或拉起即报「拒绝访问 / 文件包含病毒」→ 先查杀软的隔离区与保护历史记录,
再把技能包目录加入信任区,详见「Check.exe 被安全软件拦截怎么办」。
给智能体的提示
- 先跑第零步,再跑第一步:
python scripts/bin_update.py退出码 0 才去看登录与余额;退出码 3(程序缺失且拿不到)或 4(更新失败 /
无法确认远程版本)就中止流程并说明原因,不要跳过、也不要手工去下载 exe。
- 更新只走
bin_update.py:不要自己拼下载地址、不要手工解压覆盖、不要从非官方渠道换 exe;版本号一律由 exe 的文件版本资源与接口返回对比得出。 - 先确认登录与余额,再让用户勾规则:第一步跑
client.py status;退出码 3(未登录)就让用户到门户
https://aicenter.huitoue.com/ 注册/复制 key,再用 client.py login <key> 保存;退出码 4(余额不足)就引导充值;只有退出码 0 才继续往下走,不要带着不可用的账号进第二步。
- 不要编造 key,不要回显完整 key:user-key 只能来自用户,由
client.py保存进config.json
(输出已自动脱敏);不要手工改 config.json,一律通过 client.py 命令读写。
- 导入文件只接受
.docx:非.docx(含改名文件、损坏文件)直接拒绝并给出原因与转换建议,不转换、不改名、不进流程。 - 第三步必须让用户在页面上自己勾:不要替用户编造规则,不要复用历史规则。
- 第四步是一条阻塞命令:不要反复轮询,不要中途反复重跑。
- 第五步严格三选一,且只认 status:status=1 只提示;status=2 交付报告文件;status=0 / 退出码 4 / 5 转达原因,不重试。
- 退出码 5 不要当成通过:那只是「程序没按约定返回结果」,必须按失败提示。
- Check.exe 被安全软件拦截 ≠ 检测失败:典型表现是程序文件消失(退出码 3)、拉起即被拒(退出码 4,输出含「拒绝访问 / 文件包含病毒」)、
或启动后被中途杀掉(退出码 5 / status=0)。此时按「Check.exe 被安全软件拦截怎么办」引导用户把技能包目录加入信任区、从隔离区恢复,然后重跑;不要下「标书有问题 / 没问题」的结论。
- 绝不引导用户关闭杀软或绕过安全策略:加白名单是唯一推荐做法(企业环境让用户找 IT 放行);也不要改名、混淆、改扩展名,
更不要从非官方渠道换一个 exe 来替代 bin/Check.exe。
- message 原样转达:它就是给用户看的那句话,不要改写,也不要自行润色成别的结论。
- 不要自己生成报表:报告文件全部由 check.exe 产出,技能只解析
files并交付原件,不造文件。 - 技能不落盘检测结果文件:结果目录里只应出现 check.exe 的产出,不要额外写摘要、结果、日志,也不要手工补建文件;
技能包自身的写盘只有两处 —— 第零步在程序缺失或版本落后时写 bin/、第一步 client.py 保存 user-key。
- 只交付真实存在的文件:报告文件一律用
present_files给绝对路径;缺少的那几类如实说明,不补造。