华为云码道 CodeArts 实战:为 CodeGuard 增加 ZIP 扫描,从开发到 PR 交付

一键开通华为云华为云码道CodeArts智能体:https://developer.huaweicloud.com/codeartsco.html?source=dmzntgwatomgit1&sourcead=dmzntgwatomgithd
在这里插入图片描述

一、这次我想解决什么问题

这次体验华为云码道 CodeArts,我选择在已有项目上增加一项具体功能,而不是重新生成一个演示页面。

我的项目叫“码安检 CodeGuard”,定位是浏览器本地运行的项目发布前预检工具。它通过规则匹配,检查疑似硬编码凭据、危险代码写法、调试输出、未完成标记,以及 README、开源协议和依赖清单等项目文件是否存在,并生成 HTML 报告。

原项目已经支持选择文件夹扫描。这次新增的需求是:直接选择或拖入 ZIP 压缩包,不需要先手动解压,就能完成检查。

本文主要记录使用华为云码道开发 ZIP 功能、根据审查意见修复问题,再到本地验收和创建 PR 的过程。原项目并非全部由码道从零生成,过程中也使用了其他 AI 工具辅助审查。

项目仓库:

https://atomgit.com/maaath/codeguard

二、先让Agent了解项目,再提出需求

关联 AtomGit 仓库后,我先让码道读取 README、页面代码和样式文件,说明技术架构、扫描流程及功能边界,暂时不修改代码。

这样做是为了让后续修改建立在现有功能之上。尤其是文件夹和 ZIP 两种入口,应当复用同一套扫描规则、评分和报告逻辑,避免以后改了一边、漏掉另一边。

确认分析后,我再给出实现要求,主要包括:

  • 保留文件夹扫描,新增独立 ZIP 选择入口和拖拽支持;
  • 文件读取、解压和扫描在浏览器本地完成;
  • 过滤依赖目录、构建产物及非目标文件;
  • 设置压缩包大小、条目数量、扫描数量和解压输出限制;
  • 更新说明文档,保留可复现测试;
  • 未经确认,不自动推送或部署。

【插图1:提出 ZIP 扫描需求的码道会话截图】

相比只说“帮我支持 ZIP”,把限制和验收方法一起写出来,更容易判断最后交付的功能是否符合预期。

三、功能实现后,还需要检查边界

本次修改把共用扫描逻辑抽到 lib/scanner.ts,ZIP 解析和解压逻辑放在 lib/zip.ts,页面负责文件选择、调用扫描及结果展示。

但“能读取一个正常 ZIP”并不代表工作已经结束。后续审查发现,有几个容易被忽略的问题。

1. 文件数量限制不能只放在扫描阶段

早期实现先解压目标文件,再取前 600 个进行扫描。虽然最终扫描数量符合上限,但后面的文件仍然消耗了解压资源,甚至可能触发累计输出限制。

修复后,600 个目标文件的限制提前到解压阶段,超出数量的文件不再继续解压,并在结果中保留跳过数量和提示。

2. 普通大文件不应让整个项目扫描失败

文件夹扫描会跳过超大文件,而 ZIP 扫描早期遇到超大文件时会中止整个任务,两种入口的行为不一致。

调整后,普通超大文件被跳过,其余文件继续扫描。同时保留实际解压输出检查,避免只信任压缩包里声明的文件大小。

【插图2:要求修复600文件限制和超大文件处理的会话截图】

3. 被丢弃的解压输出也要计入预算

另一个细节是累计字节的统计顺序。某个输出块触发单文件超限后,即使被丢弃,它也已经产生,不能因此不计入累计预算。

最终修复将累计输出检查放在单文件超限处理之前,并补充“声明大小很小、实际解压内容超限”的测试样本。

这里的限制是在输出块回调中检查的,不能把“50MB 阈值”理解为浏览器总内存绝不会超过 50MB,也不能据此宣称已经防御所有恶意压缩包。

这几轮修改让我体会到:功能正常运行和边界处理正确,是两件都需要验证的事。AI 给出实现后,还需要检查限制究竟在哪里生效、异常发生后是否真的停止相应处理。

四、区分自动化验证和我自己的验收

码道最终返回的验证总结显示:10 组自动化测试通过,类型检查、ESLint 和构建也通过,对应提交为 c16c0e8。

这些属于 Agent 环境中报告的执行结果,不是我在 Windows 上亲自重跑了全部测试。

【插图3:包含 c16c0e8、10组测试及构建检查结果的最终回复】

为了确认实际使用流程,我又把功能分支克隆到自己的 Windows 电脑。本地 Node 版本为 v24.16.0,安装依赖后生成测试 ZIP,再启动开发预览。

以下命令需要按顺序执行。克隆前应确认当前目录下没有同名项目文件夹:

git clone --branch feature/zip-scan --single-branch https://atomgit.com/maaath/codeguard.git codeguard-zip-test
cd codeguard-zip-test
npm ci
node scripts/verify-zip/gen-fixtures.mjs
npm run dev

测试 ZIP 生成在系统临时目录的 codeguard-verify-fixtures 文件夹中。可以另开一个 PowerShell 窗口,执行下面的命令打开:

explorer.exe "$env:TEMP\codeguard-verify-fixtures"

生成测试数据时,终端提示没有系统 zip 命令,因此跳过了加密 ZIP 样本。这不影响下面几项操作,但也意味着我没有在本地手动验收加密 ZIP 场景。

启动成功后,我打开终端显示的本地预览地址进行测试。需要注意,Agent 运行环境里的 localhost 并不等于自己电脑的 localhost。由于此次远端环境没有提供我能访问的预览入口,所以最终采用了本地运行方式。

浏览器手动验收结果

验收项目实际结果
选择 project.zip11 个文件,扫描 8 个、跳过 3 个,综合评分 62
拖入同一个 project.zip与选择文件方式的结果一致
导出 HTML 报告下载成功,能打开,项目名、评分和问题清单正常
readmeplusbig.zip扫描 README,跳过 2MB 文本文件
many700.zip扫描 600 个、跳过 100 个,并出现扫描上限提示

【插图4:project 项目62分的扫描页面】

正常测试样本中故意放入了模拟凭据、调试输出和 TODO 等内容,所以出现风险提示是预期结果,并不表示运行 CodeGuard 的网站本身存在这些漏洞。

点击“导出报告”后,我实际打开了下载的 HTML 文件,确认项目名、62 分评分、扫描数量、中文路径和问题清单能够正常显示。

【插图5:下载后打开的 project HTML 报告】

对于 many700.zip,页面显示共 700 个文件,实际分析 600 个、跳过 100 个。它验证的是扫描数量边界,而不是扫描速度或安全检测准确率。

【插图6:many700 扫描600个、跳过100个的页面】
在这里插入图片描述

五、通过功能分支和 PR 保留交付记录

开发完成后,我让码道将相关源码、依赖配置、README 和测试脚本提交到 feature/zip-scan 分支,再创建目标分支为 main 的 PR。

后续修复继续推送到同一个 PR,便于查看修改过程,而不是每次重新创建一份交付记录。

本次功能通过 AtomGit PR #1 交付。源分支为 feature/zip-scan,目标分支为 main,截至本文记录时保持开启、尚未合并。

【插图7:PR标题、已开启状态及 feature/zip-scan → main 分支信息】

截至本文记录时,PR 保持开启,尚未合并;本次 ZIP 功能也尚未部署到原线上网站。本文展示的功能验收来自本地预览。

因此,复现本文功能时,需要注意选择 feature/zip-scan 分支,而不是默认认为 main 已包含全部修改。本文记录的验收版本为 c16c0e8。

六、我的使用体验

我对华为云码道还不算熟悉。这次使用下来,比较直接的感受是模型切换方便。前期使用 DeepSeek-V4-Pro,额度用完后切换到 GLM-5.2,继续处理同一项任务。切换后,我仍然会补充当前进度和剩余问题,避免重复开发。

不太顺畅的地方是,有时候任务会中断,或者界面显示完成,却没有明确的最终回复。我需要继续追问修改内容、测试结果,以及是否已经提交和推送。

这也让我意识到,“任务完成”不等于“功能验收通过”。 本次成果来自多轮需求明确、代码修改、辅助审查和实际测试,而不是一次提示就生成了没有问题的代码。

亲自运行项目也很有必要。只有实际选择 ZIP、拖入文件、下载并打开报告后,才能确认这些操作在自己的环境里确实能完成,而不是只停留在代码说明或聊天回复中。

对我来说,CodeGuard 适合作为课程作业或个人项目发布前的辅助检查工具。它依赖规则匹配,可能存在误报和漏报,也没有进行完整的依赖漏洞检测,不能替代专业安全审计。

这次最大的收获,是走完了从需求到 PR 的开发流程。模型可以帮助编写和修改代码,但需求是否明确、测试是否覆盖实际场景、功能是否值得交付,仍然需要自己参与判断。

本项目目前提供源码及本地运行方式,暂未提供公开在线演示。ZIP 扫描功能位于 feature/zip-scan 分支,本文验收版本为 c16c0e8,读者可按文中步骤在本地运行。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐