搜索/修改并测试用于评估AI模型的大型TypeScript代码库

修改并测试用于评估AI模型的大型TypeScript代码库

在AI智能体修改包含CLI、Web应用和AI模型评估的大型TypeScript代码库时使用。它会先读本地规则,在真实的CLI或浏览器中检查改动,不清空缓存和数据来调试,通过分支和CI合入改动,并优先审查安全问题。

要使用这个AI规则
## 先判断是审查还是修复,再读就近的智能体指南 首先确定代码库根目录、请求的结果以及负责该更改的子系统。大型代码库通常会在核心库、CLI、Web应用、持久化层、提供方、调度器、模式、实用工具、测试、文档、示例、迁移、自动化和安全工具之间划分职责。 编辑目录前,先阅读距离该范围最近的智能体指南,以及所有针对任务的设计或工作流文档。本地指南可能会细化根级规则,包括测试、生成文件、公开契约、数据库访问或发布行为。 采取行动前,先对请求进行分类: - 审查或审计是只读操作。检查当前分支、差异、评论和CI;在有用时运行不改变状态的检查;报告发现,但不得提交、推送或重写文件。 - 修复、改进或落地请求包括功能分支上的正常实现循环:检查、修改、验证、提交、推送,并跟进相关CI。 - 行为更改必须通过面向用户的工作流加以证明,不能只依靠孤立的单元测试。 从正确的根目录开始工作,并在将失败视为权威证据前,使运行时和软件包管理器版本与代码库声明保持一致。在新的checkout中,应先执行确定性的依赖项安装,再断定缺少模块属于代码缺陷。 将更改限制在所触及的子系统及其直接使用方。创建另一层抽象或添加软件包前,先搜索现有实现、实用工具、依赖项和附近的模式。 ## 在真实的CLI、API或浏览器流程中测试改动 使用代码库声明的脚本和封装程序,不要通过偶然的工具调用绕过它们。当封装程序有此要求时,通过软件包运行器的分隔符传递命令标志;代码库级评估应从代码库根目录运行。 按逐步扩大范围的顺序选择验证: 1. 运行针对已更改模块的测试。 2. 运行相关的类型、lint和格式检查。 3. 运行受影响的集成测试套件。 4. 使用本地构建执行实际的CLI、示例、API或浏览器流程。 5. 仅在风险或代码库政策有充分理由时,才运行更广泛的测试套件。 对于评估型工作流,应禁用结果复用,而不是清除缓存。导出机器可读的结果,并检查每个用例的成功状态、分数、错误、提供方输出、跟踪和安全发现。退出状态为零可能只表示通过了汇总阈值;这不能证明每个用例都成功。 只有当工作流需要凭据且环境文件确实存在时,才加载该文件。使服务持续连接到活跃会话,避免后台进程无声消失。通过启动输出或端口检查确认实际监听端口,不要假定框架默认值。 除非请求明确需要,否则不要启动静态生产查看器或另一个开发服务器。先检查预期服务是否已在运行;如果启动服务会与用户的会话冲突,应先征求同意。 当文档、模式、迁移或引用属于生成内容时,应使用其规范生成器并验证所得成果物。若代码库提供受支持的快速路径,则通过该路径测试文档,同时不得悄然跳过对更改有影响的检查。 ## 先复现失败再调试,不清空缓存和数据 使用暴露故障时相同的输入、状态和执行路径来复现问题。启用结构化调试日志,针对本次运行禁用缓存读取,并在修改代码前缩小故障范围。 区分环境故障与产品故障: - 运行时或软件包管理器版本不匹配属于环境问题。 - 干净checkout中缺少依赖项,通常需要执行确定性的安装。 - 过时的构建需要通过受支持的本地封装程序重新构建。 - 环境对齐后,同一代码路径仍出现确定性故障,就是产品缺陷的证据。 绝不能仅为让测试通过就删除或清空缓存、数据库、lockfile、生成的历史记录或用户数据。应优先使用无缓存选项、临时隔离的存储或只读检查。删除操作必须获得明确授权,并精确指定目标。 secret应存放在被忽略的环境文件或获批的secret存储中。绝不能在日志、代码、分支名称、提交消息、审查文本、截图或示例命令中打印、嵌入、提交或复制凭据。将源材料中发现的凭据视为已经泄露的数据,而不是可复用的指令。 使用项目的结构化日志记录器、对象上下文及其脱敏层。即便如此,若日志记录器不需要secret,也不要向其提供。错误处理应保留类型化上下文,同时不得暴露敏感载荷。 提出多个原因假设,再通过针对性检查逐一排除。应在实施最小修复之前或同时,添加一个能针对所观察行为失败的回归测试;在原因仍不确定时,避免无关的重构。 ## 通过功能分支合入改动,并等CI通过 所有更改都应通过功能分支和pull request交付。未经明确批准,绝不能直接向受保护分支提交、绕过hook或执行force-push。默认创建新提交;只有维护者要求进行相应的历史操作时,才能执行amend、squash或rebase。 仅stage预期文件,运行限定范围的lint和格式检查,遵循代码库的提交惯例,并更新该分支现有的开放pull request,而不是创建重复请求。不得让无关的lockfile或依赖项漂移混入更改。 当用户要求修复、改进或落地功能分支上的更改时,应完成获准的循环,无需在每个常规步骤暂停。按要求同步,运行限定范围的验证和真实工作流,提交、推送并观察CI。不得将此授权扩大到受保护分支、破坏性的历史更改、信息披露或生产操作。 合并后,持续跟进受保护分支的新CI运行,直至完成。采取行动前先对失败分类: - flake是非确定性的基础设施或工作进程噪声,尤其是测试成功完成后作业才失败的情况。仅重新运行失败的作业并确认恢复。 - 真正的回归是确定性的,并且可归因于该更改。通过后续pull request恢复受保护分支;共享分支损坏时,应优先迅速revert。 - 反复出现的flake本身就是缺陷。应修复泄露的资源、脆弱的设置或不切实际的timeout,而不是无限期地重新运行。 完成时应确保受保护分支处于green状态;否则,应通过支持日志明确指出一个预先存在且无关的故障。报告运行了哪些检查、检查了哪些证据,以及哪些验证无法完成。 ## 先审查安全问题,并从攻击者角度测试 在一般正确性问题之前,先审查安全回归。优先检查提示注入、对抗性输入的不安全处理、凭据暴露、服务器端请求伪造、路径遍历、不安全的反序列化、授权错误、数据外泄、不安全的工具使用、缓存误用和证据缺失。 然后检查可能破坏公开契约、数据完整性、并发处理、错误处理、提供方互操作性或持久化结果的行为。当更改影响安全行为、公开接口或缺陷修复时,应将缺失或无效的覆盖视为高优先级问题。 从攻击者视角测试安全和模型评估功能。探查假阴性、绕过、隐藏载荷、嵌套指令、编码技巧、不安全的工具调用和不完整的跟踪。发现绕过时,应在针对性的回归测试中保留原始攻击向量。 审查应以已更改的差异和当前分支尖端为基准。现有评论、自动审查和issue报告只是线索,不是证据;同步后应重新验证。除非更改使无关的既有缺陷恶化,否则不要重复已解决的发现,也不要标记这些缺陷。 在公开涉及未发布漏洞的更改前,确认协调披露允许公开。在此之前,只能使用获批的非公开协作渠道,并避免使用标识符、利用细节、受影响版本范围或会泄露信息的分支名称。每项安全修复都应包含针对原始攻击向量的回归测试。 如果演示应用的用途是教授对抗性测试,就不要移除其中有意保留的弱点,除非加固演示是明确目标。审查截图只能使用获准的托管工作流和获批的凭据;绝不能暴露上传密钥或提交附带产生的图片。 ## 编写严格类型的TypeScript,最后检查改动差异 编写遵循代码库模块系统和编译器边界的严格、惯用TypeScript。优先使用直接导入、`const`、对象简写、一致的大括号、`async`/`await`、类型化错误检查,以及在不可信边界处进行模式验证。当代码库要求直接归属时,避免使用再导出汇总文件。 添加辅助函数或依赖项前,先复用已有实现和本地实用工具。通过现有的示例模式保持提供方和集成配置有据可查。同时测试成功与失败路径,并在前端和后端惯例不同时分别遵循。 将死代码报告视为设计反馈: - 删除确实未使用的代码。 - 将按约定加载的工作进程、fixture或替代项注册为显式条目,并通过注释说明加载机制。 - 只有在注释中注明使用方时,才能将外部使用的export加入允许列表。 - 在检查有文档说明的使用方之前,绝不能移除允许列表条目或受保护的export。 不要手动编辑生成的changelog或其他生成成果物。修改源,然后运行规范生成器。将示例保存在指定区域,并提供足够的运行文档。 完成前,审查最终差异中是否存在意外文件、过时成果物、secret材料和范围蔓延。确认限定范围的测试、相关集成检查以及面向用户的实际路径。准确说明结果:区分哪些内容已通过、检查了什么、哪些内容仍未验证,以及任何失败是否与更改无关。