DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

puthead /

puthead/dsh-net-inspector

Verified

DevTools-style network panel for DeepSeek Harness: captures Host fetch, the Web page, the sidebar webview and an external Chromium over CDP in one panel.

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@ef4185ae

description: dsh-net-inspector —— 抓 Host 进程、DSH 页面、桌面内置浏览器与外部 Chromium(CDP)HTTP 流量的 DSH 插件

dsh-net-inspector

给 DeepSeek Harness 内置一个类似浏览器 DevTools「Network」的网络面板:输入框工具栏上的波形按钮打开它,面板停靠在输入框正上方,能看到请求方法、URL、状态码、耗时、大小、请求头、请求体、响应头、响应体,并按 Host / DSH 页面 / 内置浏览器 / CDP 分栏过滤。

同一份面板里合并四条完全不同的流量:

来源 抓什么 怎么抓
Host 进程 工具调用(web_fetch、web_search、图片 API、MCP)、LLM 请求等所有出站 HTTP 包装 Host 进程的 globalThis.fetch
DSH 页面 DSH 页面自己的 fetch / XMLHttpRequest / WebSocket / EventSource 在页面内包装对应构造函数
内置浏览器 DSH 桌面版右侧栏浏览器(Electron <webview>)里打开的任意网页 对每个 <webview> 元素 executeJavaScript 注入采集脚本,再用同一条通道把排队的事件抽回页面
CDP 外部 Chrome / Edge 的任意标签页(XHR、fetch、文档、图片……) 连上 --remote-debugging-port 的 DevTools 协议,订阅 Network 域

安装

plugin_manager install_bundle  <本仓库所在的绝对路径>

安装后插件行 net-inspector 变为 active。桌面版在启动时组装客户端 bundle,所以 lib/client.js 与 lib/index.js 的改动都要重启 DSH 才生效。

用法

  • 输入框工具行(模型选择器左侧)有波形图标按钮,点一下在输入框上方展开面板;再点一次、点右上角 × 或按 Esc 收起。按钮右上角的红色角标只统计「上次打开面板之后」新出现的失败请求,不会把历史错误一直挂着。
  • 「全部 / Host / DSH 页面 / 内置浏览器 / CDP」是分段标签;过滤框支持空格分词、-关键词 排除、method:post、status:4(前缀匹配)或 status:404。
  • 点「耗时」「大小」表头排序(再点切换升/降);底部「失败 N」按钮一键只看失败请求。
  • 点任意一行:右侧展开详情,含 URL、来源、开始时间、耗时、错误、请求头表、请求体、响应头表、响应体。JSON 自动美化,URL / cURL / 每一段内容都能单独复制并给出「已复制」反馈。
  • 键盘:列表聚焦时 ↑ / ↓ 切换请求,/ 聚焦过滤框,Esc 逐级清空过滤 → 取消选中 → 收起面板;过滤框内 Esc 清空过滤。

Agent 侧还注册了 net_inspect 工具,模型可以自己读最近的请求(四侧都能读):

{ "limit": 10, "side": "client", "urlContains": "api", "includeBodies": false }

每行前缀 [H] 是 Host 进程发出、[B] 是 DSH 页面发出、[W] 是右侧栏内置浏览器发出、[C] 是外部浏览器(CDP)发出。

抓外部浏览器(CDP)

默认只抓 Host 和 DSH 页面。要抓 Chrome / Edge 里打开的任意网页,让浏览器带一个调试端口启动,插件会自动连上去:

& 'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe' `
  --remote-debugging-port=9222 `
  --user-data-dir="$env:TEMP\edge-cdp-profile"
  • 面板底部出现 CDP N 绿标(N = 当前挂上的标签页数),列表里出现带橙色 C 徽标的行,来源写「外部浏览器」;点顶部分段标签的「CDP」可以只看这类流量。
  • 端口不通时底部显示 CDP 未连接,点「CDP」标签也会看到这一状态;改端口/重开浏览器后 5 秒内自动重连。
  • 抓的是浏览器内部视角,没有证书问题:HTTPS 请求、请求体、响应体、状态码都完整,和 DevTools 的 Network 面板一致。

限制:

  • 只覆盖 CDP 连接之后发起的请求。连接瞬间正在加载的页面可能缺文档请求,刷新一次就齐了。
  • 只支持 Chromium(Chrome / Edge / Brave 等带 DevTools 协议的浏览器)。Firefox 需要 --start-debugger-server 的另一种协议,未实现。

配置(cordis.patch.yml)

- id: net-inspector
  name: dsh-net-inspector
  config:
    enabled: true
    maxEvents: 2000     # 环形缓冲条数
    bodyCap: 24576      # 单条 body 预览字节上限(Host / 浏览器 / CDP 都按它截断)
    ignore:             # URL 正则,命中即不记录(四侧都生效)
      - 'dsh-app://app/dsh-whale/'
    cdp:                # 可选:外部浏览器
      enabled: true
      endpoints:
        - 'http://127.0.0.1:9222'
      retryMs: 5000     # 连不上时的重试间隔

ignore 默认只屏蔽 dsh-whale 插件的每秒轮询——不屏蔽的话几分钟就能把环形缓冲刷满。面板底部会显示「忽略 N 条(ignore 规则)」和「丢弃 N 条(环形缓冲淘汰)」。

设计取舍

  • 透明:包装函数原样调用原 fetch/构造函数,返回值与异常不做任何改写;任何记录异常都被吞掉,面板本身不会打断请求。
  • 有界:环形缓冲 + 每体字节上限;text/event-stream(LLM 流式响应)、二进制、图片、音视频一律不 clone、不读 body——clone 一个流式响应会让它整段缓冲,既泄漏内存又拖慢调用方。
  • 仅本机:桥接路由 /api/dsh-net-inspector/{meta,events,config,clear,ingest} 只接受 127.0.0.1 / ::1 且 Host 头匹配的回环请求;/clear 只接受 POST。捕获内容含 API Key、Cookie 等敏感头,面板只在本机内存里保存,不落盘、不上报。
  • 浏览器→Host 上报:页面每 1.5s(或攒够 40 条、或页面隐藏时)把浏览器侧事件 POST /ingest 给 Host,合并进同一个环形缓冲,net_inspect 因此能读到页面请求;上报失败只影响 Agent 可见性,面板仍用本地副本正常显示。
  • 轮询而非推送:面板 900ms 拉一次增量事件(?since=seq,响应里同时带缓冲/丢弃/忽略计数),关闭面板时降到 5s 只为角标计数;实现简单、断线自愈,不需要额外 WebSocket。Host 重启导致 seq 回绕时客户端会自动重置游标,Host 列不会卡死。
  • 暂停 ≠ 丢数据:暂停只冻结界面,采集与上报继续;错误角标按「上次看过之后」计数,浏览器事件与 Host 镜像按 URL + 时间戳去重,不会一次失败计两遍。
  • CDP 只读:lib/cdp.js 自带一个不依赖 ws 的 WebSocket 客户端(握手、分片、ping/pong、掩码),只发 Network.enable / Target.setAutoAttach 这类订阅命令,不注入脚本、不改写请求;响应体按 bodyCap 截断,二进制与 event-stream 不读。连不上就在后台静默重试,不刷日志。

已知限制

  • Host 侧只覆盖 globalThis.fetch(undici)。走 node:http/node:https 原生模块的代码不会出现在面板里。
  • 流式响应(SSE)只记录状态码、响应头与耗时,不记录响应体——这是刻意的。
  • 浏览器侧记录的是「插件加载之后」的页面请求;页面加载初期、在插件加载前就建立的常连接(例如 RPC/流式通道)无法补钩子,不会出现在面板里。刷新页面后新建立的连接可以。
  • WebSocket 只记录 send 出去的帧(页面发出的请求)与连接生命周期,不逐条记录收到的帧,避免 token 级流式消息把缓冲刷爆。
  • DSH 桌面版右侧栏的内置浏览器:每个 <webview> 在 dom-ready(含每次导航后)注入采集脚本,覆盖 fetch / XHR / WebSocket / 静态资源与文档请求;脚本把事件排队,面板每 700ms 用 executeJavaScript 取一次,不需要开 DevTools、也不受页面 CSP 影响。标签未挂载时,面板底部显示「内置浏览器未开」,注入次数为 0。
  • 请求体若是 Blob/ArrayBuffer/流,只记录类型与大小,不展开内容。

文件

package.json        插件清单(dsh.bundle.patch + dsh.client)
cordis.patch.yml    插入 net-inspector 行
lib/index.js        Host 半:fetch 包装、环形缓冲、HTTP 桥、net_inspect 工具
lib/cdp.js          CDP 源:自建 WebSocket + Target/Network 订阅
lib/client.js       浏览器半:fetch/XHR/WebSocket/EventSource 包装 + 内置 webview 注入 + 停靠面板 UI
lib/probe.js        诊断用飞行记录器:心跳 / 会话 / flush 打点,默认写系统临时目录,可用 DSH_NET_PROBE_LOG 改路径
—/ 5

No ratings yet

Verified DSH bundle

Commit ef4185ae1990

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout