Skip to main content

feature-smoke-test

针对 Kimi Code CLI 的新增或变更功能,规划并执行可重复的端到端冒烟测试。从 git diff 推断功能边界,读取相关文档和代码,设计测试 prompt,以 --print 非交互模式运行本地 CLI,检查进程退出码和 session 产物,总结预期与实际行为之间的差异。发现问题时自动启动多路并行探查以定位根因。

Datos de origen

Repositorio
MoonshotAI/kimi-cli
Última actividad en el origen
17 de marzo de 2026 a las 12:02
Idioma detectado de SKILL.md
chino
Estrellas
11.431
Forks
1340

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Explorador de archivos
3 archivos

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
feature-smoke-test
description
针对 Kimi Code CLI 的新增或变更功能,规划并执行可重复的端到端冒烟测试。从 git diff 推断功能边界,读取相关文档和代码,设计测试 prompt,以 --print 非交互模式运行本地 CLI,检查进程退出码和 session 产物,总结预期与实际行为之间的差异。发现问题时自动启动多路并行探查以定位根因。
冒烟测试是运行时验证,不是写完 prompt 或读完代码就结束。必须实际执行、实际检查产物。 ## 确定测试范围 动手之前,先从代码变更推断功能边界: ```sh git diff main --name-only git diff main --stat ``` 根据变更文件集合,明确写下: - 被测的功能边界 - 用户可感知的行为变化 - 运行前的准备工作和运行后的清理工作 - 能够证明成功或失败的证据 如果功能涉及状态、异步、审批流或时序敏感逻辑,默认认为单条 prompt 不够。 ## 先读事实来源 读取定义该功能真实行为的最小文件集合: - 面向用户的文档、changelog 或设计笔记 - 暴露该功能的 agent prompt 或 tool prompt - 实现层入口 - 已有测试——当测试比文档更准确地描述行为时优先看测试 不要信任过时的 prompt 示例。先从代码或当前文档重建真实的工具接口。 ## 制定最小测试计划 默认覆盖三个场景: 1. 正常路径 2. 边界条件、非法输入或容量极限 3. 中断、重试、清理或恢复 每个场景记录: - `目标` - `前置准备` - `prompt 策略` - `成功信号` - `失败信号` - `需要检查的产物` 如果功能存在竞态条件,必须显式标注时序。用长时间运行的命令或刻意的等待来制造时序窗口,不要用"快速再跑一个"这种模糊说法。 ## 优先使用多轮 prompt 默认采用多轮流程: 1. 探索轮:让 agent 在阅读事实来源后复述当前真实接口 2. 执行轮:只执行一个场景 3. 观察轮:只读取输出、工具状态和产物文件,不扩大范围 4. 清理轮:停止、回滚或关闭有状态资源 仅对无状态的简单功能使用单轮 prompt。 多轮测试时,每一轮单独调用 CLI,在两轮之间检查上一轮的输出和产物,再决定下一轮的 prompt。不要把多轮 prompt 一次性塞进 stdin——那是盲写,无法根据上一轮结果调整。 测试时,显式要求 agent 先列举当前可用的工具,不要臆造历史工具名。可复用的 prompt 模板见 `references/prompt-patterns.md`。 ## 以非交互模式隔离运行 CLI 使用 `/tmp` 下的一次性目录作为 `--work-dir`,实现 session 隔离。CLI 的 session 路径由 `~/.kimi/sessions/<md5(work_dir)>/` 决定,不同的 work-dir 自动产生独立的 session 命名空间,不会污染正常项目的 session。认证状态保留在 `~/.kimi` 下,无需额外配置。 ### 环境准备 ```sh SMOKE_DIR="$(mktemp -d /tmp/kimi-smoke-XXXXXX)" ``` 如果功能需要仓库上下文(读取代码、git 信息等),把仓库文件复制或软链到 `SMOKE_DIR`。如果功能会编辑文件,绝不要用活跃仓库作为 work-dir。 ### 默认执行方式 绝大多数场景使用这个模式: ```sh uv run python -m kimi_cli.cli \ --print \ --prompt "你的测试 prompt" \ --work-dir "$SMOKE_DIR" echo "exit_code=$?" ``` `--print` 会自动启用 `--yolo`(自动批准所有操作),适合无人值守的冒烟测试。 执行后**必须先检查退出码**:非零表示 CLI 本身崩溃或超时,应优先排查进程级错误,再看 session 产物。 ### 备选执行模式 当默认方式不满足需求时,按需选用: - **长 prompt**:通过 stdin 传入——`cat <<'PROMPT' | uv run python -m kimi_cli.cli --print --input-format text --work-dir "$SMOKE_DIR"` - **结构化输出**:加 `--output-format stream-json`,输出逐行 JSON,便于程序化解析 - **只看最终结果**:用 `--quiet`,等价于 `--print --output-format text --final-message-only` ### 注意事项 - 运行过程中记录这些路径:`SMOKE_DIR`、最终 session 目录(可通过 `inspect_session.py` 定位)、功能特定的输出文件。 ## 刻意执行 执行过程中维护一份简短的运行日志: - 使用的完整 prompt - 关键的工具调用或命令 - 功能产生的 task id、输出路径或审批 id - 时序敏感时记录时间戳 不要仅凭 assistant 的最终文本推断正确性。运行时文件和工具结果才是事实来源。 ## 检查 session 产物 首先检查: - `~/.kimi/sessions/.../context.jsonl` - `~/.kimi/sessions/.../wire.jsonl` - 功能创建的 session 级文件 使用 `scripts/inspect_session.py` 查找并汇总最新 session: ```sh uv run python .agents/skills/feature-smoke-test/scripts/inspect_session.py --share-dir ~/.kimi ``` 脚本退出码含义:0 = 正常汇总,1 = session 目录缺失或无法解析。 如果功能会创建后台任务、通知或附属文件,直接检查这些文件,不要只依赖模型摘要。 ## 汇报结论 将结果分为三类: - **已确认**的行为 - **与预期不符**的行为 - **仍有歧义**、需要更确定性复现的行为 对于每个 bug 或回归,记录: - 触发它的 prompt - 精确的 session 路径 - 证明它的产物路径 - 能推导出的最小复现步骤 ## 问题探查 当发现与预期不符的行为时,不要停在报告层面。启动并行探查流程定位根因: ### 探查策略 针对每个发现的问题,**同时启动多个独立的探查方向**(使用 Agent 工具并行执行)。根据问题的具体表现自行判断最有价值的探查角度,常见方向包括但不限于: - 从触发问题的入口沿调用链追踪实际执行路径 - 检查输入数据经过各处理阶段后的变化 - 检查持久化状态(session 文件、后台任务、通知记录等)是否一致 - 运行相关单元测试和集成测试,确认测试是否覆盖了出问题的路径 不必机械地覆盖所有方向。根据 session 产物中的具体异常信号,选择最可能命中根因的 2-3 个方向并行展开。 ### 探查输出 每条探查方向独立汇报: - 探查的具体方向和范围 - 发现的事实(附文件路径和行号) - 该方向的结论:已定位根因 / 已排除 / 需要进一步调查 ### 综合定位 汇总所有探查结果后,输出: - **根因**:一句话总结问题的本质原因 - **证据链**:从触发 prompt → 代码路径 → 出错点 → 产物表现的完整链路 - **修复建议**:最小改动方案,附具体文件和行号 - **回归风险**:修复后需要额外验证的相关功能
Ver en GitHub