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 reportHTML 报告
生成格式化的 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 statsJSON 输出中,未配置团队而运行的会话仍未归因;当查询的窗口没有会话记录时,--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