Agent 会话指南
English | 中文
保存一次执行中的任务、对话、工具输入与结果,以及当时记录的权限和配置。 从会话条目可以跳转到关联的运行时证据,也可以打开已保存的完整正文。 这些内容支持查询、比较和离线导出。
首次体验可运行 agentprov demo deepseek-context;记录自己的 Agent,先看下面的采集步骤。
会话在 Agent 退出后整理,文件正文通过 --file-diff 按需保存。
跳转: 采集 · 查看与比较 · Dashboard · 采集报告 · 文件正文 · API
采集
agentprov launch -- claude
agentprov launch -- codex
agentprov launch -- dsh headless --json 'Inspect the project and run its tests.'
agentprov launch --context-dir /path/to/native/sessions -- codex
agentprov launch --context-session SESSION_ID -- codex resume SESSION_ID
启动入口识别 Claude Code、Codex、Kimi 和 DeepSeek Harness。Claude 的设置允许时,
还会注入本次执行专用的 hooks。包装命令可指定
--context-harness claude|codex|deepseek|kimi|grok,并提供 --context-dir DIR
或 --context-file FILE。没有原生会话 ID 的旧日志须同时指定文件和
--context-session,身份会标为用户显式指定。--no-context 关闭上下文采集和 hook 注入。
留存档位
默认使用 --capture detailed 详细档。--capture basic 基础档保留核心消息、工具输入与
结果状态、Agent 关系和已支持的意图证据,省略额外原始记录、工具结果正文、恢复历史及配置正文。
两档共用相同的解析器和关联逻辑。
对于通过校验的 Codex 会话元数据,两档都会在省略配置正文前保留可选的
Entry.session_metadata.forked_from_id。该字段表示 fork 的原会话,
Entry.source.session_id 表示分叉后的会话,已有来源字段和 Entry.id 用于定位证据。
因此 basic 档可以在不保留配置正文的情况下保留这条原生关系。
空的 session_metadata 对象表示已观测到未声明 fork;缺少该字段的旧条目优先读取已保存正文,
正文也不可用时报告 session_relation_metadata_unavailable。Fork 关系与子 Agent 委派分别保留。
agentprov launch --capture basic -- claude
agentprov launch --capture detailed -- codex
agentprov launch --capture basic --capture-tool-results=true -- dsh headless --json 'Run the tests.'
agentprov context import --run NEW_RUN --harness codex --file rollout.jsonl --capture basic
--capture-tool-results 单独覆盖工具结果留存选项。关闭时,同时省略可能包含相同结果的
原始记录与辅助会话正文,保留核心生命周期和拒绝字段。Sensor、TLS 和 --file-diff
继续使用各自的设置,两档都不会自动开启工作区复制。
同一 Run 的设置固定,随采集报告和证据导出保存。追加导入时不传档位参数,会复用已保存的设置; 切换档位需要新 Run,已有内容和签名包保持原样。导入经过裁剪的 hook 日志时,须选择匹配的档位。 Harness 自己生成的原生日志仍由它自己的留存设置管理。
AgentProvenance 在写入上下文对象和 Claude hook 日志前应用留存规则。主动省略的条目保留
身份、结果状态、实际可得的长度与摘要,并标记 reason: capture_policy,没有虚构的全文引用。
单条 hook 输入上限为 40 MiB,每个 Run 的 hook 日志上限为 128 MiB;输入损坏或超出预算时,
保存不含正文的采集诊断。两档均在存储前应用现有秘密脱敏规则。
Dashboard 在会话摘要展示已记录档位,在采集详情展开实际留存设置。搜索单独统计按设置省略的正文; 对比显示两边档位,未留存的配置正文保持未知。导出预览和离线回放保留来源 Run 的设置, 分享时排除记录不会改变原采集设置。
新建 launch 在执行前还会保存独立的 Sensor 模式、工作区快照/文件正文、TLS 完整正文和
Agent 上下文设置,可展开“已记录的留存设置”查看。--file-diff 包含基线工作区副本和有界的
变更文件正文,两种上下文档位都不会自动开启它。TLS 完整正文按 AGENTPROV_TLS_CAPTURE_BODY=1
保留,否则 TLS 事件保存哈希和短预览。实际采集结果见采集诊断;旧 Run 未记录这些选项时,
显示“未记录”,不使用当前机器的配置补填。
原生格式兼容性
| Harness | 保存的上下文 |
|---|---|
| Claude Code | hooks 与原生会话、消息、工具、权限模式变化及辅助会话状态;使用 2.1.293 完成真实任务和同会话续跑验证 |
| Codex | 原生 rollout、完成消息、线程设置、world state 及来源提供的子会话身份;使用 0.159.2 完成真实任务和同会话续跑验证 |
| DeepSeek Harness | 0.1.7-rc.2 原生 v4 Zstandard 会话及受支持的 v3 记录,包括 PTC 工具和配置 |
| Kimi / Grok | 已有的受支持会话格式;历史回放不要求重新在线采集 |
这些版本标明已检查的格式,不是最低版本保证。遇到较新且未知的记录类型,会报告覆盖缺口。 会话解析与签名离线回放单独验证,不等同于 Linux 内核或 TLS 采集验收。
来源选择与恢复
目录发现遵循 CLAUDE_CONFIG_DIR、CODEX_HOME 和 DSH_HOME。
如果包装脚本只在子进程内部设置目录,需要显式传入该目录。
采集在执行退出后进行,不按文件修改时间选择“最新会话”;多个候选不能唯一匹配时保留歧义。
恢复会话会验证执行前的日志前缀,详细档将先前记录保存为 prior_context,
与新记录的 current_execution 范围区分。历史工具调用和模型调用不会投影为本次执行。
子会话必须有真实身份依据,单独一条委派请求不会生成虚构的子 Agent ID。
Codex 还会只读查询 CODEX_HOME 下 state_*.sqlite 中的 threads.id 与
threads.rollout_path,发现目录树之外的日志。目录数据库仅提供文件位置,身份与时间仍由
日志头验证。显式 --context-dir 只查询该目录中的数据库,不扫描其他默认目录。
身份冲突或目录数据库不可读时,不猜测唯一会话。目录查询最多读取 32 个数据库、
合计 4,096 行,每个数据库限时两秒。
也可以显式导入已有日志:
agentprov context import --run RUN_ID --harness deepseek --file session.v4.jsonl.zstd
agentprov context coverage --run RUN_ID
agentprov context list --run RUN_ID --kind configuration --revisions
DeepSeek 解析支持 v3 JSONL,以及含多个连续 Zstandard 帧的 v4 JSONL。
未知格式会明确报告,不会当成成功采集到空记录。
目录发现按每个会话目录中编号最高的 session.vN 选择格式代际,包括未知版本;
新文件失败时不偷偷回退到旧格式。同代际的重复文件保留歧义。
--context-file 仍可显式选择旧文件。启动期间已知会话更换了文件时,恢复边界无法验证,
会明确报告歧义,不把历史记录重算成本次工作。
显式导入会将保存后的覆盖报告以 JSON 输出到标准输出。只有 ok 和 empty 返回退出码 0;
部分成功、失败、未找到来源或关联不确定,会先保存诊断,再返回非零退出码。
已经保存的部分证据仍可查询;重复导入未改变的有效来源属于成功去重。
这是导入状态,不代表运行时证据完整。--after-line N 将前 N 条物理记录划为历史上下文,
详细档保存这些条目,基础档仅记录历史范围并省略条目。历史内容不计为本次执行。
查看与比较
context list 返回不可变记录 ID 和正文引用,用 --cursor 翻页。
--revisions 包含同一记录的历史版本;默认按来源位置、再按导入时间选择最新版本。
来源时间与存储时间分别保留。
Claude 同一物理行内相邻的完整 JSON 对象可以分别读取,允许对象之间存在空白或 NUL 填充。
对象顺序保留;不会修复损坏内容,也不会跨行拼接。sequence 仍表示用于恢复的物理行,
可选的 source_ordinal 表示该行内的规范化记录次序,分页与离线回放沿用此顺序。
旧证据没有保存该字段时保持缺失或零。读取/解析计数按物理行,保存/去重计数按规范化条目,
未识别计数按来源对象;同一行中可同时存在已保留的有效前缀和解析失败的后缀。
Codex event_msg 中的用户、助手消息及来源提供的推理记录,即使没有对应的
response_item 也会保存。事件形式标记为 source_message_event 或
source_reasoning_event,完整响应项保留自己的记录。文字相似不代表身份相同,
因此不做启发式合并。消息数量统计已保存的来源记录,不推算唯一对话轮次;
重复导入相同证据仍会去重。详细档可查看原始正文,两档均保留已保存条目的物理位置。
同时保留 Codex 原生消息完成事件、world-state 快照及已应用的线程配置。
命令执行、文件变更完成报告和 token 用量保存为来源状态;执行项 ID 不用来推造模型工具调用身份。
Claude 附件、会话辅助记录和费用估算也保存为来源状态,原生 mode 记录进入配置历史。
这些记录在详细档保留原始正文,并记录续跑区间,不额外生成对话轮次或权限批准。
Codex 工具错误依据来源的显式标记、状态、数值退出码,以及支持的 MCP/命令执行结果封装。
不会根据输出中的“error”字样或任意嵌套 JSON 判定失败。returned 仅表示记录了返回结果,
不代表工具成功或获得授权;来源报告的错误也不等于策略拒绝。
DeepSeek 助手消息中的 tool-call 保存为模型提议;后续原生工具调用记录具有相同调用 ID 时,
补充同一次调用,而非新增一次调用。PTC 开始与完成记录提供子调用输入、结果,原始记录保留
parent/root ID。只有完成记录、没有开始记录时,标记 completion_only 和缺失的
tool_start_time,不生成用于运行时匹配的执行区间。显式来源错误保持为错误。
surfaceOp: replace 的结果标记 context_replacement,保留压缩引用,
但不覆盖原始结果,也不表示又执行了一次。
agentprov context compare --run RUN_ID --left ENTRY_A --right ENTRY_B
agentprov context compare --run RUN_A --left ENTRY_A --right-run RUN_B --right ENTRY_B
agentprov context content --run RUN_ID --ref sha256:HASH --offset 0 --limit 65536
agentprov context list --run RUN_ID --group conversation --node GRAPH_NODE_ID
agentprov context list --run RUN_ID --entry ENTRY_ID
agentprov context links --run RUN_ID --entry ENTRY_ID
图谱导航仅使用已记录关联。无关联时返回原因,不因命令或时间相似而猜测。
--group 支持 conversation 和 configuration,分别包括工具结果与审批记录。
列表每页 1-200 条;正文每页 4-262144 个 UTF-8 字节。
比较支持两份同类配置、审批或任务记录,任务记录包括用户消息。
比较对象是来源记录的正文和状态:same 表示这些值相同,different 表示存在字段变化,
unknown 表示缺少正文或超出比较预算。字段缺失与显式 null 不同,
但两者都不能自动解释为有效权限。来源记录的权限请求也不代表批准。
模型选择、工作目录、MCP/skills/plugins 和沙箱配置仅在来源提供时可见;
不会用当前机器的配置替代历史证据。
配置记录包括 Codex/DeepSeek 会话元数据与轮次/请求配置、DeepSeek 计划与权限变化, 以及选中来源实际提供的 Claude 初始化与权限模式记录。各事件分别保存为快照, 不自动合成为“实际生效策略”。会话日志不一定包含 MCP、skills 或 plugins 清单; 这不代表新增了 Desktop 适配器,也不会在导入历史记录时扫描当前机器配置。
覆盖报告通过 configuration.* 列出未记录的模型/服务商、应用版本、工作目录、
权限/审批策略、沙箱、目录/网络限制、MCP 服务、工具、技能和插件字段。
task 与 approval_decision 分别检查;有审批请求不代表已经取得审批决定。
显式 null、false、{}、[] 保留原样,不当作字段缺失,也不代表权限实际生效。
仅有工具名称不等于保存了完整工具定义。ok 表示本次范围没有发现处理错误,
不是所有字段或配置变化均已采集的保证。旧报告保留其原有、可能较粗的缺失检查。
Codex 原生 model_provider_id 和 permission_profile 分别作为已记录的模型服务商
及权限配置识别。目录与网络覆盖仍需相应的具体字段,不能仅凭配置名称推断。
新报告还会列出 configuration.change_history_completeness:即使所检查的配置字段
均存在,来源快照也不能证明期间的每一次变化均被记录。这是覆盖范围限制,不代表
解析失败,也不会丢弃已记录的快照。
工作目录和应用版本按来源中的位置保存。后续 Claude 元数据或 Codex 新一轮的目录变化, 不会覆盖早期记录,也不会反向填充当时未知的值。Claude 的目录/版本变化还会形成 可比较的来源元数据记录。
比较最多返回 200 处差异,每个值预览最多 512 字节,递归展开至 32 层,
单份比较正文预算为 1 MiB。更长的已保存正文仍可通过内容读取接口访问。
文本存储每份正文最多 32 MiB,按 128 KiB 分段保存;默认每页读取 64 KiB,
最多 256 KiB。翻页应使用返回的 next_offset,而不是按字符数计算偏移。
覆盖与移植
恢复会话中的每条记录带有 execution_scope。概览的记录总数包含历史上下文;
来源报告在 prior_context 中单独记录历史部分的计数、时间范围和缺失字段,
不混入本次处理范围。导入总数包含两段记录。本次范围没有新记录时仍为 empty,
不会因为保留了历史而变成有新活动。历史审批不授权新操作,旧配置也不能证明恢复后
仍然生效。旧记录没有保存范围时,继续显示范围未知。
覆盖情况按来源区分:disabled、no_input、empty、ok、partial、
failed、ambiguous、legacy_not_recorded。空值表示未知,不等于零。
报告区分解析失败、未识别记录、尚未写完的尾行、采集限制与重复导入。
一次启动最多处理 128 个已选中的会话来源。Hook 日志与选中的会话共同使用
256 MiB 解压后输入预算和 25,000 条归一化记录预算;被拒绝和重复的输入同样消耗预算。
单来源仍有 128 MiB 和 25,000 条记录上限。预算用尽标为部分覆盖,不冒充完整的空采集;
未能完整核验的恢复检查点不误报为源文件被修改。来源恰好在输入预算边界结束时,
由于不能继续读取以确认 EOF,也可能保守地报告预算用尽。
来源发现和图谱投影另有独立预算,并保存各自的诊断。
正文先脱敏,再计算哈希和保存。查询已保存的正文不会重新打开来源路径。 自包含证据包保存上下文、覆盖报告、配置历史和分段正文;导入新的数据目录后, 不依赖原 harness 或原始文件。签名覆盖导出的证据,采集覆盖与图完整性分别校验。
新导出还包含完整的 telemetry_batch_records,保留有序事件 ID 清单及其哈希,
使既有批次校验在导入后仍能执行。原有 telemetry_batches 摘要字段不变。
历史摘要缺少事件 ID 清单时,不补造完整批次;原包无法提供的批次成员校验仍然缺失。
没有上下文采集报告的旧包保留 legacy_not_recorded。
新增的对等消息正文超过 64 KiB 时复用分段存储。图中仍只有一个消息节点; 离线导入后,Dashboard 和意图分析仍可读取完整的已保存正文。 旧内嵌消息和六份历史签名 demo 包不改写。
运行时关联
启动结果 JSON 的 runtime_correlation 与证据包保存同一份关联报告。
“采集情况”引用该报告,不把 exec 数量和会话记录数量混算。计数表示本次处理已读到的
适用记录;input_complete: false 表示输入尚未完整读取,不能把当前计数视为总量。
ok 只表示本次关联完成,不表示采集无丢失。
Dashboard 分别展示会话采集、运行时采集和工具与运行时关联。 部分行为未关联工具不代表会话采集失败,也不展示会话读取或保存计数。 节点积压、探针覆盖与未知的本次丢失数量收在可展开的采集诊断中,不能算成本次丢失事件。 完整性无法确认时,摘要仍保留提示;明确归属本次运行的丢失数量会突出显示。 折叠诊断不会修改已保存的报告或签名。
agentprov.command_time_process/v2 要求:命令在已记录的工具调用时间段内唯一匹配,
运行时 PID 有 cgroup 或容器范围。匹配保留大小写与引号内空白,不接受任意子串。
原生 sensor 的 argv 为 16 个 32 字节槽位;argv_truncated 表示触及容量边界,
即“可能截断”,不是原始长度。只有源记录明确标记时才允许多词前缀匹配。
事件按来源、可用节点标识、cgroup、容器与 PID 限定;已观察的子进程 exec 可继承父进程关联。
exec/exit 会结束先前的 PID 归属;同一时刻无法确定先后、并发相同命令、父链冲突、
缺失范围或无效时间均保留缺口或歧义。后台事件超过工具时间段,不扩大窗口强行归属。
缺失生命周期事件或主机/启动身份仍会削弱推断,因此不能称为内核确认的 Agent 身份。
新边展示推断方法、证据引用与 0.8 置信等级,这不是校准概率;意图分析不再用更弱的
时间窗口补齐新关联器明确留下的缺口。
读取与替换边在同一事务内,失败保留旧结果。预算为 10,000 个工具调用、200,000 条适用 运行时事件、单份输入 64 KiB、命令与运行时 payload 各合计 64 MiB、200 万次候选比较。 超限明确失败,不发布半套关联。已存在的历史边不会被重新分类或自动重建; 新派生结果也不会改变原始证据包签名。
变更文件正文
record 保存工作目录比较所发现的变更文件在执行结束后的文本。
launch 需显式开启 --file-diff;默认仍关闭,因为复制和比较大型工作目录可能耗时较长。
agentprov launch --file-diff -- dsh headless --json 'Inspect the project and run its tests.'
一次最多选择 512 个文件,单份文本最多 32 MiB,累计正文读取与脱敏正文保存各有 128 MiB 预算。 文本限制在脱敏前后均检查;为检测读取期间文件增长,最多额外读取一个探测字节。 这些是正文采集预算,不限制现有工作目录快照与比较的 I/O。 只支持普通 UTF-8 文件,不跟随符号链接或特殊文件,也不接受越出工作目录的路径。
record/launch JSON 中的 artifact_capture 以及保存的同名证据对象报告
disabled、empty、ok、partial、failed。candidates: null 表示选择未启用
或未能完成;零则表示比较成功且没有变更文件。已知省略包括 source_missing、
binary_omitted、collection_limit;不可读文件和存储失败另有具体原因。
超过 512 个文件选择限制的条目仍在变更事件中标明省略,不声称保存了正文。
每份文件描述与分段正文共用数据库事务,保留采集时间、源文件长度、脱敏正文长度、哈希和引用。 查询及离线导入读取这些保存对象,不读取工作文件的新版本。 这是执行结束后的最终状态,不是每次中间写入的历史,也不是原子文件系统快照; 最终已不存在的文件不会被补造正文。
Dashboard
主视图保留图谱和右侧风险列表。选中证据后,图下展开统一的 证据详情 区, 通过 摘要、关联事件 和 已保存正文 标签切换内容,没有选中内容时保持隐藏。 原有图谱视图、播放、缩放和证据跳转继续可用。
概览中的 访问控制 提供审计记录、实际状态、配置声明、审计采集四个只读入口。 计数对应整个 Run 已保存的记录。点击后每页查看 25 条,原文沿用现有宽阅读窗口。
选择审计记录后,图下分别展示 操作尝试、机制决定、实际结果。 AppArmor 和 seccomp 各自保留决定,操作候选显示关联状态;没有返回记录时保持缺失, 同一进程的退出引用单独列出。多条机制决定可以引用同一操作标识,不重复计算尝试。 证据引用和关联依据按需展开,配置声明与带时间的实际状态分别阅读。
Agent 会话 默认收起,保留 对话与工具、权限与配置、采集情况 三个视图, 概览入口可直接打开。执行来源、数据外发、时间线、进程、网络与规则覆盖详情也默认收起, 标题保留对应计数;风险和采集状态摘要仍然可见。
会话与来源 按 harness 和原生 Session ID 分组,同一会话的 transcript、hooks 等来源 分别保留。父会话 ID 可跳转到当前 Run 中已记录的会话;目标缺失、父关系冲突或循环会明确标注。 没有会话身份的来源单独展示,处理诊断保留在采集情况中。 点击概览中的会话,或在目录中选择 查看会话图谱,可筛选图谱、关联事件和对话。 范围标记显示 harness、原生 Session ID、已关联工具数和事件数。点击 返回整个 Run, 恢复此前的视图、节点、缩放及阅读位置。刷新或切换语言时保留会话范围。 查看来源记录 打开所选会话中的一份来源;未启用会话筛选时,只改变对话阅读范围。
会话归属沿用已保存的上下文到工具、工具到运行时事件的边。共享进程、文件、目录或 cgroup 不会带入其他会话的事件。摘要计数在筛选后计算,推断边保留原有规则和置信度; 历史对话不纳入本次执行图谱。没有已关联执行证据的会话显示空图,仍可阅读对话。
风险、采集情况及辅助区域保持 整个 Run 范围,点击其中的证据链接会返回该范围。 公开 Demo 的静态回放使用同一套会话筛选和图谱投影。
点击总览中的 关联会话 按钮,直接查看当前选中会话的关系。未筛选会话时,优先打开有父会话记录的条目,否则打开第一个会话。目录中每个会话也有独立的 关联会话 按钮。
关系数量在查询后显示;+ 表示还有分页或查询范围受限。关闭目录后,原图谱和阅读位置保留。
可查看跨 Run 的同一原生会话、来源声明的父子关系,
以及 Codex 原生记录中的委派、分叉和消息请求。每条关系保留方向,来源与证据 展示
对应的记录 ID 和对象哈希。消息请求按请求展示,送达结果另看来源记录。
跨 Run 的目标标记为 其他 Run。目标会话有多份运行记录时,选择要查看的 Run; 同一关系只展示一条。返回按钮恢复原 Run、会话范围、图谱焦点、缩放和阅读位置。 目标缺失及父关系冲突继续显示。跳转不改变 Run 归属,也不会自动扩大导出范围。 静态回放只在已导出的 Run 目录中查找关系。
通过 查看已保存正文 或 原始来源记录,可打开证据详情的 已保存正文 标签。 正文与原始记录切换、64 KiB 分页及放大阅读不依赖会话保持展开。 记录列表每页加载 30 条,行内正文最多预览 4 KiB,同时最多发起 4 次读取。 返回导航保留最近 200 个分页游标,首页 可重置列表,不累计保留所有旧页正文。
完整的结构化页面可在可读视图与原始字节之间切换。可读工具结果保留真实换行, 并保留错误等其他已记录字段;这是有界的显示投影,不产生新证据对象。哈希和偏移对应 保存的原始字节。原始来源记录、不完整页面和不支持的结构继续按字节显示,不执行 HTML。
定位到图谱 只沿已保存的 context_tool_call / context_tool_result 边定位,
图谱反查会话也只使用已保存的工具与运行时关联。这里不再根据相似命令或时间窗口猜测。
没有关联时说明原因,不跳到另一个相似会话。自动刷新保留展开记录与正文页;
切换语言时保留视图及阅读位置。浏览器会话存储只保存导航 ID 和偏移,不保存消息或工具正文。
真实界面示例见 DeepSeek 指南, 包括对话与工具、权限配置、已保存正文和采集情况。
可选择两份同类任务、配置或审批记录比较来源值。缺少审批继续显示 未记录, 不解释成拒绝或允许。校验徽章只报告图完整性,不声称采集完整或证据包签名已经验证。
图谱正文也通过 /api/artifact 分页读取,不依赖会话展开。
可切换 图谱已记录内容 与 已保存对象原文;同一来源有多个已保存版本时,
必须选择确切的对象哈希。正文哈希对应完整的脱敏展示文本,ref 则标识保存的对象封装。
内容不可用时 total_bytes 为 null,不冒充零字节正文;读取前校验对象哈希和封装中的 Run ID。
接口只读取保存对象及明确标识的数据库记录,不打开工具结果路径或工作目录文件来替代历史正文。 仅保存元数据的制品会明确提示正文缺失,仍可切换到原始记录查看元数据。 旧内嵌对象继续保留 8 MiB 读取预算;新分段正文支持最多 32 MiB,内部存储分段不计为文件制品。 取证导出允许必要溯源对象每个最多 16 MiB,普通快照文件每个最多 4 MiB。 必要对象超过限额时明确报错。 签名、跨目录离线导入后的 HTTP 分页测试已覆盖上述三个旧容量边界。 文件变化采集端已使用相同的分段存储。真实 record 子进程测试验证了超过 8 MiB 的采集、 脱敏、签名与离线正文;launch 测试覆盖显式开启和默认关闭。 这些是确定性测试负载,与真实传感器配合的 DeepSeek 开发任务 分开验收。后者已提供签名离线示例,包含最终文件正文、工具结果和部分运行时关联, 边界与复验步骤见示例指南。 读取能力不会补造旧采集漏掉的正文。
Dashboard 和 daemon 共用只读 /api/context/* 与 /v1/context/* 接口。
Dashboard 的 /api/lens 和 /api/events 同时接受 harness、session,用于选择
已记录的原生会话,并与其他筛选条件取交集。会话不存在返回 404,只传一个参数返回 400。
图谱响应的 query.session_scope 提供身份、关联依据及计数。单次解析最多处理
256 份来源和 10,000 条当前工具记录,超限返回错误。/api/context/entries 与
/v1/context/entries 也支持用 harness 配合 session,区分不同 harness 的同名会话。
这些查询参数不改变证据 Bundle 格式。
会话阅读也纳入与本会话运行时记录可靠配对的 AppArmor/seccomp 决定:进程生命周期和
操作均须为唯一候选,操作记录已通过工具关系归属该会话,且没有冲突的工具关联。
共享 PID、cgroup 或旧执行作用域的 session_id 不作为原生会话身份。
有歧义和未配对的决定仍可在 整个 Run 中搜索。
搜索记录和图谱聚焦节点通过 session_association 标明这类只读投影。
事件列表通过 session_associations 返回当前页的关联标记,原始事件载荷保持不变。
图谱的 query.session_scope.audit 和搜索/事件列表的 session_audit 提供规则、关联数量与分析限额。
这些字段描述阅读范围,采集覆盖单独报告;原审计身份保持不变,支持关联的其他运行时记录
也不会自动加入选中范围。
部分回放从完整冻结来源确定会话成员,排除竞争候选不会产生新匹配。
支持记录或工具被排除后,已选审计仍可阅读,关联标为 status: unavailable、
reason: replay_evidence_excluded,并省略其依据引用。搜索、事件筛选、图谱定位与
回放选择使用同一范围。
搜索已保存证据
点击图谱上方的放大镜,在临时窗口中搜索。左侧显示命中片段,右侧复用证据阅读区。 选中原生会话时,默认只搜索该会话;选择 整个 Run 后,才纳入其他会话及未归属记录。 其他 Run 中的关联会话不自动加入搜索。
关键词按字面匹配,忽略大小写,最多 256 个字符。类别包括消息、工具输入输出、配置、 已保存文件和运行时记录。搜索按 64 KiB 分页读取正文,覆盖行内预览以外的已保存内容。 每份记录显示第一个命中片段;同一结果页中正文哈希相同的记录合并展示,来源引用分别保留。 文件名等来源字段的命中与正文命中分开标注。
选择结果后可查看正文或原始来源记录。定位到图谱 使用已有关系;返回搜索 恢复 关键词、所选来源和阅读位置。关闭窗口后恢复原阅读区,最近八个 Run/会话视图的 搜索结果与导航位置保留在浏览器内存中。
每页搜索到 50 份命中来源或目录末尾时停止。继续搜索下一页 读取下一页;停止搜索 保留 当前结果并标明尚未搜索的部分。读取失败后可以重试。正文不可用的数量和采集报告显示在 搜索范围说明中,无结果时显示 已保存内容中未找到。采集仍在继续时,可重新搜索新记录。
Dashboard 专属的 GET /api/search/sources?run=RUN 每页返回最多 50 份已有阅读引用。
同时传入 harness 和 session 可限定会话,再使用不透明的 next_cursor 继续读取。
客户端通过 /api/context/content 和 /api/artifact 应用类别与关键词筛选,不新增索引
或正文副本。上下文使用最新已保存修订;制品各版本保留确切对象哈希。原始来源封装可打开
检查,不另作独立全文搜索。新导出的公开 Demo 使用相同目录和搜索逻辑;旧回放目录缺少
搜索数据时显示原因。
对比 Run
点击图谱上方的 比较运行。A 默认为当前 Run,选择 B 后开始对比,可点击交换按钮调整顺序。 对比范围是两个完整 Run;Dashboard 原有的会话筛选会保留,返回时恢复。 顶部显示两侧已记录的任务、时间范围、采集来源和状态。
五个视图分别展示配置字段、文件证据、网络目标、外发数据类型和访问控制观测。默认只列出差异,明细收起。 展开某一项后,可查看 A/B 值、选择来源引用、阅读已保存正文或定位到图谱。 点击 返回对照,恢复原 Run、会话范围、图谱视图和已展开的对照项。
- 配置保留 JSON 类型,包括
null、false、空数组和精确整数。同一字段的多份记录各自保留来源, 不推算最终生效配置。先前会话上下文不加入本次执行对比。 - 文件访问、写入尝试和已记录内容变更分开展示。已保存文件按正文摘要比较,空文件与正文不可用分别处理。 网络记录区分连接尝试、请求和响应。
- 单侧证据显示 仅 A 记录到 或 仅 B 记录到。字段不全或读取达到上限时,显示 对照信息不完整。 任务不同或采集条件不同时,仍可查看双方记录及采集报告。配置与网络的同时变化作为调查线索保留。
Dashboard 专属的 GET /api/compare/records?run=RUN 每页处理最多 50 份来源。
按 next_cursor 继续读取,直到 has_more 为假。接口拒绝会话筛选参数。
每项包含对照键、带类型的值摘要、限长预览和已有阅读引用。
每份配置最多读取 1 MiB、200 个字段;值预览最多 512 个 UTF-8 字节。
浏览器每个 Run 最多加载 50,000 项记录或 100,000 份来源,达到上限会提示。
窗口每次显示 100 项、每项每次列出 50 份来源,可继续翻页。采集进行中可刷新对比,加载新记录。
对照接口还提供 access_control 维度。evidence_kind 分别标识配置声明、procfs 状态快照、
审计决定/状态、审计文件采集观测、系统调用返回和进程/线程退出。mechanism 记录证据中的机制;
独立的返回和退出记录保留自身结果,不根据错误码或信号填写机制。审计 LOG、ERRNO 动作数据和
KILL_PROCESS 与实际返回、退出分别保存。
这类记录的 comparison_scope 为 observed_set,比较整个 Run 已保存的观测值集合。
对照键不跨 Run 配对进程或 Session;PID、时间戳和资源版本保留在原始证据中,不参与值摘要。
缺失、无效或达到限额的证据返回明确问题项。文件采集状态保留文件级覆盖范围及未知的上游丢失,
每份配置观测最多投影 64 条声明。搜索与范围导出沿用运行时类别及原记录 ID,未归属审计留在
整个 Run 范围。在线接口与冻结回放目录使用相同投影;访问控制 视图展示这些字段,
并保留原文阅读与图谱跳转入口。
新导出的公开 Demo 包含相同的对照目录与阅读能力。两份 Grok 历史记录可用于查看外发类型的差别, 按不同任务的记录对照呈现。旧回放目录缺少对照数据时显示原因。
离线回放 ZIP
将本地一个完整 Run 的图谱视图、会话、已保存正文、配置和原始记录打包:
agentprov --data-dir .agentprov dashboard export --run RUN --output run-replay.zip
解压后,用当前版本的 Chrome 或 Edge 打开 index.html。无需启动本地服务、安装 CLI
或访问原工作目录。语言切换、图谱导航、会话筛选、正文搜索和字节分页均读取包内数据。
单 Run 分享包没有第二个 Run 可供对照。
命令默认导出整个 Run,包含未归属记录。先取得一致的数据库快照,再读取已保存证据并固定包内内容,
不从当前工作目录补齐历史正文。关联 Run 只保留引用。
export-inventory.json 列出 Run、范围、文件大小和 SHA-256 摘要;命令输出 ZIP 大小与清单摘要。
record-selection.json 列出来源记录 ID、类别、历史版本及每条记录的包含或排除结果。
文件清单中的 record_selection 字段记录它的大小与摘要,方便核对记录范围。
已有的目标文件不会被覆盖。
ZIP 是未签名的分享副本。完整 Run 保留原有验证结果;部分导出显示“所选证据”, 并保留原采集缺口。包内不附带原始 Bundle 或数据库。 分享前应检查内容:完整 Run 可能包含提示词、工具输出、配置和文件正文。命令只在本地生成文件。
选择会话或排除记录
同时指定 harness 和原生 Session ID,只导出该会话的上下文及明确关联的工具、事件和文件:
agentprov --data-dir .agentprov dashboard export --run RUN \
--harness codex --session SESSION --output session-replay.zip
两种范围都支持重复指定 --exclude-category 和 --exclude-record。
类别可选 messages、tools、configuration、files、runtime。
记录 ID 使用 /api/search/sources 返回的 id,例如 entry/ENTRY_ID、
1/OBJECT_HASH、2/TOOL_ID 或 3/EVENT_ID。
agentprov --data-dir .agentprov dashboard export --run RUN \
--exclude-category configuration --exclude-record 3/EVENT_ID \
--output selected-replay.zip
图谱、搜索、正文、原始记录和历史版本使用同一份选择清单。排除上下文记录时, 同时排除其历史版本及关联的工具阅读入口;运行时行为仍作为独立记录保留。 一行原始记录同时包含保留与排除内容时,整行原文不导出。跨范围关系保留引用,标注“上下文未包含”。
部分导出保留所选证据支持的分析,将省略的分析数量列在 analysis_omissions,
不基于裁剪后的图重新计算结论。同一份标准化上下文正文仍存在于其他保留记录中时,
记录清单给出复核提示。分享前检查提示与冻结回放;排除记录不会全局删除其他证据中的同文内容。
CLI、Dashboard 和在线回放 API 均支持这些选择。
在 Dashboard 中预览和下载
对本地数据目录运行 dashboard serve,选择 Run 后点击导出回放。
默认范围是整个 Run,包括其他会话和未归属证据;当前已筛选会话时,可以明确改选当前会话。
选择内容类别,或展开检查并排除记录,阅读并取消选中具体记录。切换范围会清除逐条排除,保留类别选择。
确认选择后准备冻结预览。页面列出实际包含和排除数量、同文复核提示、来源数量、ZIP 大小及分页文件清单。 实际数量包含历史版本和关联入口,可能多于手动取消的复选框数量;冻结记录清单列出逐条结果。 查看冻结回放打开将要下载的同一份数据,可在分享前检查图谱、会话、配置、原始记录和正文。
确认并下载 ZIP下载该冻结压缩包,后续采集不会改变包内内容。
修改选择会先丢弃旧压缩包,再允许调整内容。每个服务同时保留一份预览,有效期为 10 分钟;准备超过 5 分钟会停止。
丢弃预览或正常停止服务时清理临时文件,正在下载的文件保留到响应结束。
强制终止进程可能在系统临时目录留下权限受限的 agentprov-readonly-replay-* 目录。
浏览器准备功能仅接受本机同源连接。公开和离线回放保留导出入口,并说明如何使用本地 CLI。 回放导出 API 记录预览、清单确认、下载和取消接口。
外部查询与运行时覆盖
外部程序与 Dashboard 使用同一套证据查询:
GET /v1/context/overview?run=RUN:上下文数量与报告,以及runtime_coverage.capture和runtime_coverage.correlation。GET /v1/context/entries?run=RUN&group=conversation&limit=50:分页消息与工具输入、结果。group=configuration查询授权、配置;revisions=true包含保留的历史版本。GET /v1/context/content?run=RUN&ref=HASH&offset=0&limit=65536:只读已保存的正文。has_more为真时,使用next_offset继续读取。GET /v1/context/compare?run=RUN&left=ID&right=ID:比较已记录快照。GET /v1/context/links?run=RUN&entry=ID:查询已有图谱关联,不猜测归属。
概览和处理报告中的可选字段 capture_policy 记录附加上下文的留存配置。
旧记录没有该字段时,配置状态为未记录。报告中的 omissions 统计本次处理范围内
按配置省略的标准化记录,主动省略不会将成功的处理状态改为采集失败。
被省略的正文没有可读取的 ref;如有长度或摘要,digest_scope 会标明它对应的
解析内容或来源记录。intent_content 是用于重新分析的派生模型消息,原始会话另行标识。
launch 在导出前保存 runtime_capture 对象,包含采集区间、内核采集启用状态、
本次探针快照及节点计数增量。旧的节点累计丢失不算到新运行;新发生的节点丢失也可能
属于其他工作负载,因此 run_dropped_events 保持 null,对本次运行的影响无法确定。
计数重置、过期探针快照、未处理积压和未确认正常退出都会明确报告。
区间端点快照不能证明采集器全程健康、TLS 全覆盖或零丢失。
新报告区分 issues(丢失、处理错误、必需探针失败)与 limitations(可选探针及 TLS
可见性限制)。只有能力限制时,Dashboard 单独显示“部分采集能力未覆盖”。
封存时仍有积压则显示“完整性无法确认”,不是还有后台检查等待完成,也不代表所有节点
待处理事件都属于本次运行。展开诊断可查看各探针状态,以及最多 64 条节点级拒收示例;
示例不保存被拒正文、文件路径或命令参数。旧签名报告按原始记录展示,不回写修订。
关联摘要统计所选运行已保存的全部运行时事件,包含原生 eBPF 和 recorder 来源, 不把事件正文整体载入内存。它衡量作用域字段是否齐全,不证明 Agent 归因正确; 此 API 最多返回 25 个缺口示例。采集、关联和签名验证是相互独立的结果。
相同字段也通过 agentprov context coverage --run RUN 的 JSON 输出及 Dashboard“采集情况”
展示。离线导入读取已保存报告,不使用导入机器当前的传感器状态。
旧包及未保存此报告的独立录制、导入来源显示 legacy_not_recorded,但仍可查询已有事件。
这些只读接口不能执行工具,也不接受任意磁盘路径。默认保留本地监听;远程暴露 daemon 时需配置现有 bearer 认证及受控传输。只读 Dashboard 不是可直接公开的匿名证据分享服务。 具体字段、分页、错误和兼容语义见 API 契约。