管理会话和导出报告

CodeMender 会将每次扫描、验证和修复尝试跟踪为由本地 SQLite 数据库 (state.db) 支持的有状态会话。您可以检查活跃会话、恢复已暂停的任务,以及导出详细的发现结果报告。

会话管理

CodeMender CLI 会在本地维护有状态的执行会话,让您能够跟踪活跃任务、恢复中断的工作流以及导出安全报告。

列出活跃会话和过往会话

运行以下命令,列出所有会话、其状态(RUNNING、WAITING_FOR_TOOL、COMPLETED、FAILED、CANCELLED)和目标路径:

cm session list

恢复中断的会话

如果会话因网络中断或步骤失败而暂停,请从最新的检查点阶段恢复会话:

cm session resume SESSION_ID

您可以将 --yes (-y)、--sandbox、--allow-all-paths、--allow-all-commands 和 --bypass-warning 传递给 cm session resume,以控制恢复运行时的确认提示、沙盒和政策边界。

取消正在运行的会话

如需终止活跃会话并停止后端代理计算执行,请执行以下操作:

cm session cancel SESSION_ID

查看报告和导出补丁

使用 cm report 显示会话发现结果、验证状态和补丁详细信息。

输出格式

终端表(默认)

发现结果摘要列表。

cm report

HTML 报告

生成格式化的 HTML 报告。使用 --open(或 -o)在默认浏览器中自动启动它。

cm report --format html --open

Markdown

生成 GitHub 风格的 Markdown 报告。

cm report --format md

JSON

以原始 JSON 格式导出所有会话发现结果详情。

cm report --format json

SARIF

以标准 SARIF 格式 (v2.1.0) 导出发现结果,以便与其他安全工具集成。

cm report --format sarif

过滤和排序标志

  • 显示建议的代码补丁 (--patches):在报告中包含生成的修复方案的完整统一差异。 bash cm report --patches
  • 按严重程度过滤 (--severity):查看与特定级别(CRITICAL、HIGH、MEDIUM、LOW)匹配的发现结果。 bash cm report --severity HIGH
  • 按状态过滤 (--status):查看与某种状态(OPEN、FIXED、DISMISSED、REOPENED)匹配的发现结果。 bash cm report --status OPEN
  • 按会话过滤 (--session):查看具有特定会话 ID 前缀的发现结果。
    cm report --session SESSION_ID_PREFIX
  • 显示智能体工件 (--artifacts):包含智能体生成的运行工件(例如日志、漏洞利用脚本)的路径。 bash cm report --artifacts
  • 对发现结果进行排序 (--sort):按 severity(默认)或 time 对结果进行排序。bash cm report --sort time
  • 按检测结果 ID 过滤:将特定检测结果 ID(或前缀)作为位置参数传递,以查看单个检测结果的详细信息。
    cm report FINDING_ID_PREFIX

漏洞发现结果状态

CodeMender 会跟踪以下漏洞状态的发现结果:

  • OPEN
    • 含义:在扫描期间已成功检测到漏洞(或从第三方工具导入),但尚未验证、修补或标记为无效。
    • 处理方式:这是任何新发现的安全缺陷的初始状态。处于 OPEN 状态的漏洞会主动排队等待验证 (cm verify) 或修补 (cm fix)。
  • FIXED
    • 含义:CodeMender 已针对漏洞生成补丁,将差异应用于本地代码库,并成功编译和执行验证测试,以证明漏洞利用不再成功。
    • 处理方式:确认补丁可在不破坏现有代码逻辑的情况下解决问题后,CodeMender 会将发现结果转换为 FIXED。除非未来的扫描检测到回归,否则它将保持此状态。
  • DISMISSED
    • 含义:该漏洞被指定为非活跃状态,原因可能是它被认定为假正例或已修复,或者发现结果的置信度不足,无法确认其可被利用(包括针对您项目的威胁建模,如果在初始配置期间提供了该模型)。
    • 处理方式:将某项内容标记为 DISMISSED 会将未来的提醒静音,并使用 cm report --status OPEN 从活跃的 CLI 输出中排除该发现结果。对已忽略的发现结果重新运行 cm verify 会重新检查或恢复已忽略的项。
  • REOPENED
    • 含义:在后续代码库扫描中重新检测到之前标记为 FIXED 或 DISMISSED 的漏洞。
    • 处理方式:此状态表示回归(例如,错误的 git 合并还原了补丁)或缓解策略失败。它会标记问题以立即重新评估,并要求开发者检查修补流程。

漏洞严重级别

CodeMender 会将发现结果分为以下严重级别:

  • CRITICAL
    • 含义:该漏洞会对您的应用或底层基础设施构成直接、严重的风险,可能导致整个系统遭到入侵。
    • 为何归类为“严重”:它达到了高后果影响阈值(例如远程代码执行或根级写入),可直接从不受信任的边界访问,无需任何前提条件,并且有高置信度污点流分析或在 CodeMender 沙盒中执行的经过验证的概念验证 (PoC) 作为支撑。
  • HIGH
    • 含义:该漏洞代表一个严重的安全缺陷,可能导致未经授权的系统控制、提权或重大数据暴露,但需要特定条件才能执行。
    • 为何归类为“高”:虽然利用漏洞的影响很大(例如,任意数据库读取或管理员劫持),但可利用性略受限制。它可能需要攻击者具有标准用户身份验证、依赖于特定的系统配置,或需要高度精确的操作链。
  • MEDIUM
    • 含义:该漏洞会带来中等风险,通常会泄露受限数据或导致局部中断,但对主机系统的风险较低。
    • 为何归类为“中”:漏洞利用受到可达性或复杂性的严格限制。它通常需要用户主动互动(例如点击恶意链接)、深度权限或复杂条件才能绕过防御层,并且其最终受影响的区域有限。
  • LOW
    • 含义:发现结果代表存在轻微的安全风险或普遍缺乏纵深防御措施,但本身不会构成直接威胁。
    • 为何归类为“低”:其可利用性极低或影响极小。攻击者通常会利用此发现结果进行侦察或配置指纹识别,而不是直接入侵,并且无法利用此发现结果执行任意代码或泄露敏感应用数据。

跟踪 token 用量

CodeMender 会在本地 ~/.codemender/logs/sessions/ 下写入每次调用的会话日志。使用 cm stats 可检查离线令牌使用情况、缓存命中率、轮询计数以及跨命令或单个会话的执行时长,而无需进行后端调用。

  • 总结近期活动 (--since):查看近期窗口(默认为 168h,即 7 天)内按命令类型分组的 token 使用情况。bash cm stats cm stats --since 24h
  • 检查特定会话 (--session):查看会话 ID 或唯一会话 ID 前缀的每轮对话 token 用量,包括多工作器 cm find --deep 和 cm find --diff 运行。
    cm stats --session SESSION_ID_PREFIX
  • 导出 JSON(--json 和 --jsonl):使用 --json 发出缩进的 JSON,或使用 --jsonl 发出单行 JSON,以便提取结构化日志。JSON 输出包括 model(或 models,当出现多个模型时)和 team_id(或 team_ids,当汇总多个团队时)。
    cm stats --json
    cm stats --jsonl
    cm stats --session SESSION_ID_PREFIX --jsonl
  • 按团队划分的属性使用情况(--team-id 或 CM_TEAM_ID):使用 --team-id 标志、CM_TEAM_ID 环境变量或 ~/.codemender/config.yaml 中的 team_id 运行扫描或修复时,设置团队标识符(1 到 63 个字符,与 [A-Za-z0-9._-] 匹配)。在 cm stats JSON 输出中,未配置团队而运行的会话仍未归因;当查询的窗口没有会话记录时,--team-id、CM_TEAM_ID 或 config.yaml 会提供顶级 team_id 标签。
    CM_TEAM_ID=TEAM_ID cm find .
    cm stats --jsonl

对于本地日志文件不持久保存的 Cloud Run 作业和 Cloud Build 步骤,请参阅将令牌遥测数据导出到 Cloud Logging。

收集诊断数据以供支持团队使用

如果您就 CodeMender 的问题与支持团队联系,请运行 cm support-bundle,将支持团队所需的诊断数据收集到单个 .tar.gz 归档中。该命令会读取本地文件,并检查您的凭据、配置以及与 CodeMender 的连接。它不会上传任何内容:您需要查看归档文件并将其附加到支持请求中。

如需收集特定会话的数据,请传递其 ID 或 ID 前缀。如需查找会话 ID,请运行 cm session list。您可以重复--session:

cm support-bundle --session SESSION_ID

如果不使用 --session,该命令会收集过去 72 小时的活动。如需更改窗口,请使用 --since:

cm support-bundle --since 24h

该命令会将 cm-support-bundle-TIMESTAMP.tar.gz 写入当前目录并输出其路径。如需选择路径,请使用 --output(或 -o)。

归档包含的内容

默认情况下,归档会忽略源代码、差异以及工具输入和输出。它包含以下各项:

  • CLI 版本、操作系统以及所收集内容的列表。
  • CM_* 环境变量以及项目和代理设置。
  • 凭据、配置和连接性检查的结果。
  • 您的配置文件和命令政策。
  • 每个所选会话的状态、模型和目标。
  • 每轮对话的时间、词元用量,以及工具调用的名称和时长。

会话数据仍可能包含文件和目录路径、每个 cm 命令的参数、发现结果标题和工具出错提示。

如果支持团队要求提供更多详细信息,请添加 --include-content。此操作还会收集发现结果、生成的补丁和 CLI 调试日志,这些日志会记录每次工具调用的参数。这些文件可能包含代码库中的源代码,因此请在共享归档文件之前先进行检查。

cm support-bundle --session SESSION_ID --include-content

在这两种模式下,该命令都会隐去访问令牌、API 密钥、私钥、授权标头和密码字段。

如需跳过凭据、配置和连接检查(例如,在没有网络访问权限的情况下运行命令时),请使用 --skip-health。

工作区维护

如需重置本地状态跟踪文件并清理临时执行缓存,请运行以下命令:

cm clean