🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

会话历史查看器 Yijia-Zhou/session-analyzer

DeepSeek Harnessv0.2.0
Yijia-Zhou52 天前有提交已提供中文文档扫描:含敏感能力

本地回看 AI 会话,展开工具调用与执行结果

29.6/100
综合分
0
GitHub 星标
17
npm 周下载
—/5
用户评分

数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add session-analyzer
npm 源 · session-analyzer 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · chat
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 52 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包session-analyzer @ 0.2.0
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/22 02:03:22

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 73 处,展示前 47 条)
  • 读取本地文件
    server.js:716
    const data = await fsp.readFile(target);
  • 读取本地文件
    src/runtime-diagnostics.js:31
    if (!fs.existsSync(logDir)) return [];
  • 读取本地文件
    src/runtime-diagnostics.js:32
    return fs.readdirSync(logDir, { withFileTypes: true })
  • 读取本地文件
    src/runtime-diagnostics.js:36
    return { filePath, mtimeMs: fs.statSync(filePath).mtimeMs };
  • 删除本地文件
    src/runtime-diagnostics.js:43
    fs.rmSync(entry.filePath, { force: true });
  • 写入本地文件
    src/runtime-diagnostics.js:95
    fs.mkdirSync(logDir, { recursive: true });
  • 写入本地文件
    src/runtime-diagnostics.js:112
    fs.appendFileSync(filePath, `${JSON.stringify(payload)}\n`, 'utf8');
  • 删除本地文件
    src/project-query-disk.js:25
    fs.rmSync(state.directory, { recursive: true, force: true });
  • 写入本地文件
    src/project-query-disk.js:90
    fs.chmodSync(directory, 0o700);
  • 删除本地文件
    src/project-query-disk.js:93
    if (directory) fs.rmSync(directory, { recursive: true, force: true });
  • 读取本地文件
    src/codex.js:896
    const stream = fs.createReadStream(descriptor.physicalPath, { start: 0, end: expectedBytes - 1 });
  • 读取本地文件
    src/codex.js:1909
    text = await fsp.readFile(configPath, 'utf8');
  • 读取本地文件
    src/codex.js:1936
    project.exists = (await fsp.stat(project.repoRoot)).isDirectory();
  • 读取本地文件
    src/codex.js:1951
    ? fs.createReadStream(descriptor.physicalPath, { encoding: 'utf8' })
  • 读取本地文件
    src/codex.js:2078
    project.exists = (await fsp.stat(project.repoRoot)).isDirectory();
  • 读取本地文件
    src/codex.js:2096
    text = await fsp.readFile(indexPath, 'utf8');
  • 读取本地文件
    src/claude.js:146
    const stat = await fsp.stat(candidate.filePath);
  • 读取本地文件
    src/claude.js:270
    return (await fsp.stat(target)).isDirectory();
  • 读取本地文件
    src/claude.js:279
    entries = await fsp.readdir(directory, { withFileTypes: true });
  • 读取本地文件
    src/claude.js:296
    fsp.realpath(resolvedRoot),
  • 读取本地文件
    src/claude.js:297
    fsp.realpath(resolvedTarget),
  • 读取本地文件
    src/claude.js:309
    physicalHome = await fsp.realpath(resolvedHome);
  • 读取本地文件
    src/deepseek-harness.js:3619
    stat = await fsp.stat(filePath);
  • 读取本地文件
    src/deepseek-harness.js:3644
    project.exists = (await fsp.stat(project.repoRoot)).isDirectory();
  • 读取本地文件
    src/deepseek-harness.js:3665
    entries = await fsp.readdir(dir, { withFileTypes: true });
  • 读取本地文件
    src/deepseek-harness.js:3860
    stat = await fsp.stat(filePath);
  • 读取本地文件
    src/shared/codex-source-stat.js:10
    await fsp.stat(filePath, { bigint: true }),
  • 读取本地文件
    src/codex-rollout-storage.js:153
    return normalizeStat(await fsp.stat(descriptor.physicalPath, { bigint: true }), descriptor);
  • 读取本地文件
    src/codex-rollout-storage.js:213
    const stat = await fsp.stat(candidate);
  • 读取本地文件
    src/codex-rollout-storage.js:252
    entries = await fsp.readdir(dir, { withFileTypes: true });
  • 读取本地文件
    src/codex-rollout-storage.js:553
    const stream = fs.createReadStream(descriptor.physicalPath, options.streamOptions || {});
  • 读取本地文件
    src/codex-rollout-storage.js:560
    const input = fs.createReadStream(descriptor.physicalPath, options.streamOptions || {});
  • 读取本地文件
    src/deepseek-harness-storage.js:174
    const before = await fsp.stat(filePath, { bigint: true });
  • 读取本地文件
    src/deepseek-harness-storage.js:176
    const buffer = await fsp.readFile(filePath, { signal });
  • 读取本地文件
    src/deepseek-harness-storage.js:178
    const after = await fsp.stat(filePath, { bigint: true });
  • 读取本地文件
    src/deepseek-harness-storage.js:597
    siblings = await fsp.readdir(path.dirname(filePath), { withFileTypes: true });
  • 读取本地文件
    src/codex-rollout-snapshots.js:43
    const before = await fsp.stat(file, { bigint: true });
  • 读取本地文件
    src/codex-rollout-snapshots.js:45
    const stream = fs.createReadStream(file, { signal });
  • 读取本地文件
    src/codex-rollout-snapshots.js:52
    const after = await fsp.stat(file, { bigint: true });
  • 删除本地文件
    src/codex-rollout-snapshots.js:64
    await fsp.rm(entry.directory, { recursive: true, force: true, maxRetries: 2, retryDelay: 10 });
  • 写入本地文件
    src/codex-rollout-snapshots.js:142
    await fsp.chmod(directory, 0o700);
  • 写入本地文件
    src/codex-rollout-snapshots.js:149
    await pipeline(decode(), counter, fs.createWriteStream(target, { flags: 'wx', mode: 0o600 }), { signal });
  • 删除本地文件
    src/codex-rollout-snapshots.js:155
    await fsp.rm(directory, { recursive: true, force: true });
  • 删除本地文件
    src/codex-rollout-snapshots.js:164
    await fsp.rm(directory, { recursive: true, force: true, maxRetries: 2, retryDelay: 10 }).catch(() => {});
  • 读取本地文件
    src/codex-rollout-snapshots.js:166
    try { await fsp.access(directory); } catch { privateDirectories.delete(directory); }
  • 读取本地文件
    src/codex-rollout-snapshots.js:177
    input = fs.createReadStream(entry.file, { signal: options.signal });
  • 删除本地文件
    src/codex-rollout-snapshots.js:201
    try { fs.rmSync(directory, { recursive: true, force: true }); } catch { }
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 本地回看会话历史
  • 展开工具调用与结果
  • 按项目搜索会话

本地会话历史查看器,支持 Codex、Claude Code 和 DeepSeek Harness。回看智能体工作过程,检查工具调用与结果,按项目搜索会话。

v0.2.12026-10-05
· Upgrade the pinned Markdown renderer to markdown-it 14.3.2, including the security fix for excessive CPU use when linkifying repeated emails or unregistered URL schemes (GHSA-253c-mchw-3w2r). · Interpret native DeepSeek bash/pwsh foreground outcomes for direct and Code Mode calls, including nonzero exits, signals, timeouts and stops. Classify unambiguous durable Codex exec_command requests as commands and read their native exit, duration and output receipts. Running results remain incomplete, missing exits remain unknown, and Raw stays exact. · Preserve Codex skipped-artifact diagnostics in committed indexes and startup reports, including reused indexes. Search complete admitted configuration facts independently of preview truncation. · Read Codex .jsonl.zst rollouts with sibling deduplication, stable Raw line references, private decoded snapshots and isolated compression diagnostics. · Show valid named Codex external inputs independently of tool executions, preserve asynchronous question/option semantics, and display ordered file-image references with explicit offline preview placeholders. Keep unknown canonical items and execution metadata in their documented Protocol/Raw boundaries. · Add recorded file activity and cross-session reading navigation, including related sessions, reading return, patch-file directories, Code Mode ownership and Raw-to-Logical links. Exact file activity preserves POSIX literal backslashes while accepting Windows separator variants. · Show background terminal poll/input requests with links to their confirmed origin and previous/next requests. Long continuation directories remain bounded and expose further records through navigation. · Keep reading controls visible, preserve the return position when leaving a project, retain Trajectory overview keyboard focus after detail loading, and contain long command segments within their event cards. · Improve patch reading with complete parent paths, emphasized filenames and com
v0.2.02026-09-10
Session Analyzer 0.2.0 把本地会话回顾扩展到多个来源,新增一种浏览工具密集对话的方式,并大幅重做了大会话历史的索引与加载机制。 · 亮点 轨迹呈现 在默认的时间线之外,新增可选的轨迹视图。它提供紧凑的输入 / 模型 / 工具序列概览,支持缩放、平移和适配控制,同时让对话本身保持叙事优先的可读布局。工具活动可以分组和展开,不会丢失底层事件和细节。 DeepSeek Harness 支持 DeepSeek Harness 现在作为第三个记录来源,与 Codex 和 Claude Code 并列。 Session Analyzer 可以在本地读取受支持的 DeepSeek JSONL 和 Zstandard 会话历史,结构化覆盖会话与工具生命周期、血缘与派生会话、压缩、Code Mode 与工作流溯源、重试、Goal/Todo 状态、权限及相关记录元数据。不支持的事件族仍可通过 Protocol 和 Raw 记录查看。 npx session-analyzer@0.2.0 --source deepseek-harness 可扩展的会话加载 Codex 和 Claude Code 历史现在采用更严格的索引 / 物化会话模型。项目索引保留紧凑信息用于浏览和搜索,完整会话只在需要时从来源重建。 这样就不必把每个完整会话图都常驻内存,大会话历史下的表现也更好。物化会话通过有界缓存保留,配合请求合并、受控重建、取消处理和有界预热。 Codex 改进 · 改进显式派生会话和子代理会话的父级关联。 · 改进声明的 Code Mode 投影和命令标注。 · 新增按请求的 token 用量呈现。 · 新增保守的缓存复用不连续观察,并附 Protocol 证据支持。这些观察不声称缓存已显式过期,也不暴露服务端隐藏的缓存状态。 · 快速上手 Codex 仍是默认来源: npx session-analyzer@0.2.0 Claude Code: npx session-analyzer@0.2.0 --source claude-code DeepSeek Harness: npx session-analyzer@0.2.0 --source deepseek-harness 然后在浏览器中打开。 Session Analyzer 在本地读取已有记录,不修改也不上传其内容。 · 要求 · Node.js 22 或更高版本 · 推荐 Node.js 24 · 读取 DeepSeek Zstandard 会话文件需要 Node 内置的 Zstandard 支持 各来源的具体行为、边界以及 0.2.0 的完整变更列表,见 README 和 CHANGELOG。
v0.1.42026-08-15
· Added empirical capacity guidance for large matching transcript histories, including a stable non-blocking [SESSION_ANALYZER_LARGE_TRANSCRIPT_HISTORY] warning at 800 MiB candidate bytes, temporary Node heap recovery instructions specifically for V8 heap exhaustion, and aggregate-only --log-dir capacity diagnostics with current and peak process memory. · Significantly reduced resident memory for large Codex indexes with compact resident projections and source-backed detail hydration, while hardening exact transcript fingerprinting and source-snapshot/reindex freshness. · Recognized copied-prefix Codex Materialized Fork Sessions, excluded inherited history from continuation-owned titles, Logical metrics, and search while preserving physical Raw records, and folded uniquely inactive sources as Earlier Branches with mixed related-session hierarchy and Raw segment headings. · Unified inherited-context parent navigation across Codex materialized and Claude pointer forks with Main-first, Raw-fallback fork-point targets; a targetless source keeps the current search, filters, and layer during ordinary parent navigation. · Promoted direct Claude Code Read calls from other_tool_call to an independent read kind with dedicated filtering, counts, localized labels, structured detail routing, and folding-rule compatibility. · Added runtime Transcript Source switching: POST /api/source changes the active Codex/Claude Code source and optional source home directories without restarting the server; the Select project chooser exposes a source switcher with custom home directories, and stale project discovery is rejected through source revisions. · Added per-source last-selected repository storage with a one-time migration of the legacy Codex key, and made project-selection copy source-neutral (sourceHome instead of codexHome). · Added source-switch and race-regression coverage across backend, browser, and documentation. · Hardened Claude Code 2.1.220 compatibility for order-in
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
Session Analyzer English README Codex、Claude Code 与 DeepSeek Harness 的本地会话历史查看器。 回看 AI 做了什么、具体怎么做的。 消息容易被工具调用和长输出淹没,想检查某一步的细节也不方便。Session Analyzer 把消息与工具活动放在一起连贯呈现,让你结合上下文展开命令、文件修改和执行结果。需要先找回旧工作时,还可以按项目浏览和搜索历史会话。 Session Analyzer 在本地读取已有转录,不修改或上传其内容。在浏览器中即可回顾当前或历史会话已保存的工作记录。 快速开始 · 回顾会话 · 查看操作 · 搜索历史 Session Analyzer 左侧显示项目会话,中间连贯呈现工作过程,右侧展示命令详情 查看具体操作时,周围的工作上下文始终可见。下方演示均使用合成 Codex 转录。 快速开始 准备 Node.js 24(推荐)和 npm。 选择运行版本:npm 0.2.0 已公开,支持 Codex、Claude Code 与 DeepSeek Harness,包括 Timeline 与 Trajectory。请使用下方匹配的 package 命令。
展开完整文档(README 剩余 1 节)
Session Analyzer

English README

Codex、Claude Code 与 DeepSeek Harness 的本地会话历史查看器。

回看 AI 做了什么、具体怎么做的。 消息容易被工具调用和长输出淹没,想检查某一步的细节也不方便。Session Analyzer 把消息与工具活动放在一起连贯呈现,让你结合上下文展开命令、文件修改和执行结果。需要先找回旧工作时,还可以按项目浏览和搜索历史会话。

Session Analyzer 在本地读取已有转录,不修改或上传其内容。在浏览器中即可回顾当前或历史会话已保存的工作记录。

快速开始 · 回顾会话 · 查看操作 · 搜索历史

Session Analyzer 左侧显示项目会话,中间连贯呈现工作过程,右侧展示命令详情

查看具体操作时,周围的工作上下文始终可见。下方演示均使用合成 Codex 转录。

快速开始

准备 Node.js 24(推荐)和 npm。

选择运行版本:npm 0.2.0 已公开,支持 Codex、Claude Code 与 DeepSeek Harness,包括 Timeline 与 Trajectory。请使用下方匹配的 package 命令。

按转录来源选择一个启动命令:

Codex
npx session-analyzer@0.2.0

Claude Code
npx session-analyzer@0.2.0 --source claude-code

DeepSeek Harness
npx session-analyzer@0.2.0 --source deepseek-harness

如需从 Analyzer checkout 进行本地开发或验证,请运行:

node server.js --source deepseek-harness

打开 *,选择项目,等待索引完成,再从左侧打开一个会话。从 Main timeline(主时间线) 开始阅读。查找旧会话时,点击搜索旁的 session(会话) 范围按钮,再选择 Entire project(整个项目)。

启动时指定项目可添加 --repo /path/to/project。Windows 示例:

npx session-analyzer@0.2.0 --repo 'C:\path\to\project'

--repo 是你想查看历史的项目。Analyzer checkout 或安装目录、目标项目和转录根目录是不同的位置。也可以让 agent 按启动与验收指南替你配置。

回顾一次会话做了什么

下方示例中,agent 修改两个文件,遇到测试失败,补充修复后再次运行测试。在默认 Timeline 中按顺序阅读消息与工具活动,收起输出,并随时展开需要的细节。

工具密集的合成会话在折叠 Timeline 中仍能连贯阅读消息与工具活动

工具调用太多时,切换到 Trajectory,用紧凑视图回看同一段对话与工具活动。展开工具组可查看具体操作,也可以通过序列概览导航。

同一会话片段的 Trajectory 呈现,保留可读消息并紧凑归组可展开的工具活动

两种视图都显示当前已加载的事件;长会话可继续加载更多。

查看一次具体操作怎么做的

需要核查某次修改或失败命令时,在 Timeline 中展开对应事件,或在 Trajectory 中选择该操作。Timeline 在事件内显示命令输出与高亮修改,并在右侧提供补充详情;Trajectory 则在右侧打开所选操作的详情。结合周围的工作上下文,看清请求了什么、返回了什么。

展开的 Timeline 补丁在中间显示高亮修改,右侧提供结果、文件与来源信息

看清请求了什么、修改了什么、工具返回了什么,再继续阅读会话。Protocol layer(协议层) 提供支持这些活动的运行记录。结构化详情不足时,可通过 Raw records(原始记录) 或事件的原始引用核对最初的转录条目。

找回旧会话,继续阅读

记得文件名、命令或一句话,却忘了在哪次会话中?点击搜索旁的 session(会话) 范围按钮,选择 Entire project(整个项目),搜索消息、命令、文件路径与输出。打开命中即可进入另一个会话的对应事件,再接着阅读周围的工作。

从一个会话发起整个项目搜索,打开另一个会话中的命中并继续阅读

演示从会话 A 开始,搜索 npm test -- project-switch,在会话 B 中找到该命令,最后停在 B 的对应操作与上下文。实际使用时,换成自己历史中记得的文件名、命令或短语。搜索按忽略大小写的普通文本匹配;通过独立的文件、类型和状态筛选缩小范围。status:failed 等文字仍按字面搜索。

需要时,补全上下文

- 关联会话:沿受支持的 review、subagent 与 fork 关系查看继承上下文、返回父会话。可用性取决于各来源实际记录的关系。
- Code Mode:通过结构化请求与结果查看工具编排中受支持的操作。展示覆盖取决于来源与已记录的证据。
- Codex Token 与缓存观测:查看单次请求的 Token 计量,以及保守推断的缓存复用下降,并跳转到对应的协议层证据。这些观测不证明缓存过期,也不代表服务端缓存状态。

合成 Codex review 派生会话展示继承上下文,并导航返回父会话

这个 Codex review 示例展示继承上下文导航。不同来源之间的差异见来源支持与边界。

来源与环境要求

| 来源 | 默认转录根目录 | 自定义根目录参数 |
| Codex(默认) | ~/.codex | --codex-home |
| Claude Code | ~/.claude | --claude-home |
| DeepSeek Harness | ~/.dsh/sessions | --dsh-home |

在对应参数后填写转录根目录。DeepSeek Harness 使用会话持久化目录作为根。也可以在项目选择界面切换来源或编辑根目录,无需重启。任一时刻只扫描活跃来源,不构建混合来源索引。

已安装 CLI 支持 Node.js 22 起的 LTS 版本,推荐 24,并使用 npm 安装。DeepSeek session.jsonl.zstd 需要 Node 内置 Zstandard API;Node 22 从 22.15.0 起提供,最终以实际能力检查为准。没有该能力时,未压缩的 session.jsonl 仍可读取。源码开发另有更严格的 Node/npm 策略。

当前会话阅读基于已持久化的历史,不承诺实时监控或自动刷新。视图呈现记录中的操作与结果,不推断隐藏思维或因果关系。

Claude Code 外置的 tool-results/ payload 暂不加载或搜索。受支持格式中未识别的事件保留 Protocol/Raw 兜底,但并非每类事件都有专门的展示。未支持的 DeepSeek 格式版本会被跳过,并显示诊断。

服务器默认绑定 127.0.0.1。通过 --host 暴露到 localhost 之外,可能让其他机器读取当前进程可访问的转录。v0.2 支持的接口是 CLI;内部 HTTP API 与具体版本相关。

常见问题与故障排查

没有项目或会话? 核对当前来源、转录根目录与项目路径,再清除筛选。零匹配不代表没有历史。见故障排查。

页面打开了,历史就能读了吗? 等待索引完成,检查会话数与诊断。页面可访问只证明 HTTP 就绪;可读会话也可能与被跳过的工件同时存在。Agent 指南区分这些结果。

历史很大,或索引失败? 先尝试普通索引。诊断与内存恢复指南提供聚合日志收集方法,以及仅在相关失败后临时调整 heap 的步骤。

让 agent 替你启动

复制以下请求,填写项目与来源后交给 agent:

请为我在本地启动 Session Analyzer:https://github.com/Yijia-Zhou/session-analyzer 目标项目:转录来源:选择支持该来源的版本,并按对应 README 及其链接的启动指南操作。
核验索引完成,再实际打开一个会话确认可读。
告诉我本地访问地址、实际版本、会话数及任何诊断。

在线启动与验收指南涵盖版本选择、配置及实际阅读核验。使用指南是在线文档,不承诺包含在 npm 包内。

开发与贡献

参阅开发环境、检查命令与仓库结构、文档索引、架构及性能设计。反馈问题时请附版本、来源和复现步骤;公开报告中使用合成或脱敏转录。

BSD 3-Clause。见 LICENSE。
预览分享卡片长什么样 ↓Yijia-Zhou/session-analyzer
分享 · DeepSeek Harness Hub
Yijia-Zhou/session-analyzer

本地回看 AI 会话,展开工具调用与执行结果

这是你的仓库?认领条目

回到顶部