Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ Connect [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) to t

`dsh` is DeepSeek AI's open-source, plugin-based agent harness. This repository provides a companion browser bridge plugin and Chrome/Firefox MV3 extension as one standalone pnpm workspace.

Browser operation remains text-only: pages become structured text with a numbered inventory of interactive elements, and the model addresses those elements by number. dsh 0.1.7 multimodal chat is separate from that page channel—the side panel accepts PNG, JPEG, WebP, and GIF attachments when the host advertises image support, while browser tools still never capture screenshots.
Browser operation remains text-only: pages become structured text with a numbered inventory of interactive elements, and the model addresses those elements by number. dsh 0.2.0 multimodal chat is separate from that page channel—the side panel accepts PNG, JPEG, WebP, and GIF attachments when the host advertises image support, while browser tools still never capture screenshots.

> [!IMPORTANT]
> The workspace pins dsh 0.1.7-rc.2, the minimum supported runtime. Older DSH releases are not supported.
> The workspace pins dsh 0.2.0-rc.1, the minimum supported runtime. Older DSH releases are not supported.

## Quick install

Expand Down Expand Up @@ -137,7 +137,7 @@ cd ~/.dsh/dsh-browser && pnpm start
From a source checkout, run `pnpm start` in the repository root. The exact supported public runtime is:

```sh
npx @deepseek-ai/dsh@0.1.7-rc.2 web
npx @deepseek-ai/dsh@0.2.0-rc.1 web
```

Local Chrome use requires no configuration; Firefox requires the local bridge token described above. Open a page, click the DeepSeek whale icon, and wait for **Connected**. Existing HTTP(S) tabs are instrumented on the first action. On browser-protected pages and extension stores, the model can read tab metadata and use browser-level HTTP(S) navigation, back, forward, and reload, but it cannot inspect or operate the protected page DOM.
Expand Down
6 changes: 3 additions & 3 deletions README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@

`dsh` 是由 DeepSeek AI 开发的开源、插件化 agent harness(智能体框架)。本仓库将配套的浏览器桥插件与 Chrome/Firefox MV3 扩展组成一个独立的 pnpm workspace。

浏览器操作仍采用纯文本设计:页面会转换为结构化文本和带编号的交互元素清单,模型通过编号定位元素。dsh 0.1.7 的多模态对话走独立通道——宿主声明图片能力时,侧栏可发送 PNG、JPEG、WebP 和 GIF;浏览器工具本身仍不会截取页面截图。
浏览器操作仍采用纯文本设计:页面会转换为结构化文本和带编号的交互元素清单,模型通过编号定位元素。dsh 0.2.0 的多模态对话走独立通道——宿主声明图片能力时,侧栏可发送 PNG、JPEG、WebP 和 GIF;浏览器工具本身仍不会截取页面截图。

> [!IMPORTANT]
> 当前工作区固定使用 dsh 0.1.7-rc.2,也是最低支持版本;不再支持旧版 DSH。
> 当前工作区固定使用 dsh 0.2.0-rc.1,也是最低支持版本;不再支持旧版 DSH。

## 快速安装

Expand Down Expand Up @@ -137,7 +137,7 @@ cd ~/.dsh/dsh-browser && pnpm start
使用源码 checkout 时,请在仓库根目录运行 `pnpm start`。受支持的精确公开版本为:

```sh
npx @deepseek-ai/dsh@0.1.7-rc.2 web
npx @deepseek-ai/dsh@0.2.0-rc.1 web
```

Chrome 本机使用无需配置;Firefox 需要填写上述本地桥 token。打开页面,点击 DeepSeek 鲸鱼图标,等待侧边栏显示**已连接**。已有 HTTP(S) 标签页会在第一次操作时自动加载。在浏览器受保护页面和扩展商店中,模型可以读取标签页元数据,并通过浏览器级能力导航到 HTTP(S)、后退、前进和刷新,但不能读取或操作受保护页面的 DOM。
Expand Down
2 changes: 1 addition & 1 deletion extensions/dsh-browser/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ The recommended zero-configuration command does not require Git or a local clone
Or use the exact supported public runtime:

```sh
npx @deepseek-ai/dsh@0.1.7-rc.2 web
npx @deepseek-ai/dsh@0.2.0-rc.1 web
```

Both commands load the same bundle from the local `web` profile. Port 3080 is used by default; append `--port <port>` when it is occupied.
Expand Down
2 changes: 1 addition & 1 deletion extensions/dsh-browser/README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ pnpm --filter dsh-browser-extension run test
或使用受支持的精确公开版本:

```sh
npx @deepseek-ai/dsh@0.1.7-rc.2 web
npx @deepseek-ai/dsh@0.2.0-rc.1 web
```

两种命令都会从本机 `web` profile 加载同一个 bundle。默认端口为 3080;如被占用,可追加 `--port <port>`。
Expand Down
73 changes: 35 additions & 38 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,43 +15,40 @@
"test:smoke": "node scripts/smoke-runtime.mjs"
},
"dependencies": {
"@deepseek-ai/cordis-plugin-group": "1.0.4",
"@deepseek-ai/dsh": "0.1.7-rc.2",
"@deepseek-ai/dsh-agent-default-model": "0.1.7-rc.2",
"@deepseek-ai/dsh-anonymous-user-id": "0.1.7-rc.2",
"@deepseek-ai/dsh-api-gateway": "0.1.7-rc.2",
"@deepseek-ai/dsh-api-remotes": "0.1.7-rc.2",
"@deepseek-ai/dsh-atomic-write": "0.1.7-rc.2",
"@deepseek-ai/dsh-authorization": "0.1.7-rc.2",
"@deepseek-ai/dsh-bash-local": "0.1.7-rc.2",
"@deepseek-ai/dsh-client-connection": "0.1.7-rc.2",
"@deepseek-ai/dsh-client-store": "0.1.7-rc.2",
"@deepseek-ai/dsh-client-ui-primitives": "0.1.7-rc.2",
"@deepseek-ai/dsh-client-ui-slots": "0.1.7-rc.2",
"@deepseek-ai/dsh-compaction": "0.1.7-rc.2",
"@deepseek-ai/dsh-deepseek-account": "0.1.7-rc.2",
"@deepseek-ai/dsh-fs": "0.1.7-rc.2",
"@deepseek-ai/dsh-hook-protocol": "0.1.7-rc.2",
"@deepseek-ai/dsh-jobs": "0.1.7-rc.2",
"@deepseek-ai/dsh-llm-deepseek": "0.1.7-rc.2",
"@deepseek-ai/dsh-output-retention": "0.1.7-rc.2",
"@deepseek-ai/dsh-ptc-runtime": "0.1.7-rc.2",
"@deepseek-ai/dsh-sandbox": "0.1.7-rc.2",
"@deepseek-ai/dsh-scope": "0.1.7-rc.2",
"@deepseek-ai/dsh-sdk-protocol": "0.1.7-rc.2",
"@deepseek-ai/dsh-session-persistence": "0.1.7-rc.2",
"@deepseek-ai/dsh-session-projection-cache": "0.1.7-rc.2",
"@deepseek-ai/dsh-session-query": "0.1.7-rc.2",
"@deepseek-ai/dsh-session-telemetry": "0.1.7-rc.2",
"@deepseek-ai/dsh-session-title-llm": "0.1.7-rc.2",
"@deepseek-ai/dsh-settings": "0.1.7-rc.2",
"@deepseek-ai/dsh-shell": "0.1.7-rc.2",
"@deepseek-ai/dsh-spill": "0.1.7-rc.2",
"@deepseek-ai/dsh-subagent": "0.1.7-rc.2",
"@deepseek-ai/dsh-subagent-in-process-driver": "0.1.7-rc.2",
"@deepseek-ai/dsh-timeout": "0.1.7-rc.2",
"@deepseek-ai/dsh-util-time": "0.1.7-rc.2",
"@deepseek-ai/dsh-util-workspace-path": "0.1.7-rc.2",
"@deepseek-ai/dsh-workflow": "0.1.7-rc.2"
"@deepseek-ai/cordis-plugin-group": "~1.0.4",
"@deepseek-ai/dsh": "0.2.0-rc.1",
"@deepseek-ai/dsh-agent-default-model": "0.2.0-rc.1",
"@deepseek-ai/dsh-anonymous-user-id": "0.2.0-rc.1",
"@deepseek-ai/dsh-api-gateway": "0.2.0-rc.1",
"@deepseek-ai/dsh-api-remotes": "0.2.0-rc.1",
"@deepseek-ai/dsh-atomic-write": "0.2.0-rc.1",
"@deepseek-ai/dsh-authorization": "0.2.0-rc.1",
"@deepseek-ai/dsh-bash-local": "0.2.0-rc.1",
"@deepseek-ai/dsh-client-connection": "0.2.0-rc.1",
"@deepseek-ai/dsh-compaction": "0.2.0-rc.1",
"@deepseek-ai/dsh-deepseek-account": "0.2.0-rc.1",
"@deepseek-ai/dsh-fs": "0.2.0-rc.1",
"@deepseek-ai/dsh-hook-protocol": "0.2.0-rc.1",
"@deepseek-ai/dsh-jobs": "0.2.0-rc.1",
"@deepseek-ai/dsh-llm-deepseek": "0.2.0-rc.1",
"@deepseek-ai/dsh-output-retention": "0.2.0-rc.1",
"@deepseek-ai/dsh-ptc-runtime": "0.2.0-rc.1",
"@deepseek-ai/dsh-sandbox": "0.2.0-rc.1",
"@deepseek-ai/dsh-scope": "0.2.0-rc.1",
"@deepseek-ai/dsh-sdk-protocol": "0.2.0-rc.1",
"@deepseek-ai/dsh-session-persistence": "0.2.0-rc.1",
"@deepseek-ai/dsh-session-projection-cache": "0.2.0-rc.1",
"@deepseek-ai/dsh-session-query": "0.2.0-rc.1",
"@deepseek-ai/dsh-session-telemetry": "0.2.0-rc.1",
"@deepseek-ai/dsh-session-title-llm": "0.2.0-rc.1",
"@deepseek-ai/dsh-settings": "0.2.0-rc.1",
"@deepseek-ai/dsh-shell": "0.2.0-rc.1",
"@deepseek-ai/dsh-spill": "0.2.0-rc.1",
"@deepseek-ai/dsh-subagent": "0.2.0-rc.1",
"@deepseek-ai/dsh-subagent-in-process-driver": "0.2.0-rc.1",
"@deepseek-ai/dsh-timeout": "0.2.0-rc.1",
"@deepseek-ai/dsh-util-time": "0.2.0-rc.1",
"@deepseek-ai/dsh-util-workspace-path": "0.2.0-rc.1",
"@deepseek-ai/dsh-workflow": "0.2.0-rc.1"
}
}
8 changes: 4 additions & 4 deletions packages/browser/bridge-browser/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

English | [中文](README.zh.md)

The **browser-operation bridge** for dsh: mounts a token-authenticated WebSocket carrier (`/ext/bridge`) that the Chrome extension connects to, projects its calls onto dsh 0.1.7 Typert Remotes, follows Session and Remote Event streams per connection, and registers the text-only `browser_*` tool set that reads and operates the user's active tab through the extension — click elements, fill forms, scroll, and navigate in the real browser, login state preserved. The side panel is the conversation entry; the tools are the product.
The **browser-operation bridge** for dsh: mounts a token-authenticated WebSocket carrier (`/ext/bridge`) that the Chrome extension connects to, projects its calls onto dsh 0.2.0 Typert Remotes, follows Session and Remote Event streams per connection, and registers the text-only `browser_*` tool set that reads and operates the user's active tab through the extension — click elements, fill forms, scroll, and navigate in the real browser, login state preserved. The side panel is the conversation entry; the tools are the product.

**Text-only browser tools, multimodal chat passthrough**: page snapshots stay structured text (title, main content, numbered interactive inventory, and masked form fields), and every browser action uses stable inventory numbers. The generic RPC carrier also passes dsh 0.1.7 image prompts and durable attachment reads; deferred new sessions expose image limits only when the host actually mounts the attachment service.
**Text-only browser tools, multimodal chat passthrough**: page snapshots stay structured text (title, main content, numbered interactive inventory, and masked form fields), and every browser action uses stable inventory numbers. The generic RPC carrier also passes dsh 0.2.0 image prompts and durable attachment reads; deferred new sessions expose image limits only when the host actually mounts the attachment service.

## Config

Expand Down Expand Up @@ -37,10 +37,10 @@ cd $HOME\.dsh\dsh-browser; pnpm start

Developers can instead clone the repository and run `./scripts/install.sh` followed by `pnpm start` from that checkout. The local mode uses the current branch without downloading or overwriting source files. Both installation modes register the same profile bundle; build tools resolve only from the selected workspace and never from a parent checkout or parent `node_modules` directory.

The workspace pins dsh 0.1.7-rc.2, the minimum supported runtime. Older DSH releases are not supported:
The workspace pins dsh 0.2.0-rc.1, the minimum supported runtime. Older DSH releases are not supported:

```sh
npx @deepseek-ai/dsh@0.1.7-rc.2 web
npx @deepseek-ai/dsh@0.2.0-rc.1 web
```

The installer copies the unpacked extension to `~/.dsh/browser-extension` and opens `chrome://extensions`. Load that stable directory in Chrome and use the side panel. Loopback connections are discovered automatically and require no token entry; non-loopback deployments still require the configured bearer token.
Expand Down
8 changes: 4 additions & 4 deletions packages/browser/bridge-browser/README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

[English](README.md) | 中文

dsh 的**浏览器操作桥**:在宿主 webserver 上挂载一个 **token 认证的 WebSocket 通道**(`/ext/bridge`),供 Chrome 扩展连接;把扩展调用投影到 dsh 0.1.7 Typert Remotes、按连接跟随 Session 与 Remote Event 流,并注册**纯文本**的 `browser_*` 工具集——经扩展在真实浏览器中读取页面、点击元素、填写表单、滚动与导航,登录态保留。侧边栏是对话入口,工具才是产品本体。
dsh 的**浏览器操作桥**:在宿主 webserver 上挂载一个 **token 认证的 WebSocket 通道**(`/ext/bridge`),供 Chrome 扩展连接;把扩展调用投影到 dsh 0.2.0 Typert Remotes、按连接跟随 Session 与 Remote Event 流,并注册**纯文本**的 `browser_*` 工具集——经扩展在真实浏览器中读取页面、点击元素、填写表单、滚动与导航,登录态保留。侧边栏是对话入口,工具才是产品本体。

**纯文本浏览器工具,多模态对话透传**:页面快照仍是结构化文本(标题、正文、带编号的交互清单、敏感值打码的表单字段),所有浏览器动作按稳定编号寻址。通用 RPC 通道也会透传 dsh 0.1.7 的图片消息和持久附件读取;延迟创建的新会话只在宿主确实挂载附件服务时声明图片限制。
**纯文本浏览器工具,多模态对话透传**:页面快照仍是结构化文本(标题、正文、带编号的交互清单、敏感值打码的表单字段),所有浏览器动作按稳定编号寻址。通用 RPC 通道也会透传 dsh 0.2.0 的图片消息和持久附件读取;延迟创建的新会话只在宿主确实挂载附件服务时声明图片限制。

## 配置

Expand Down Expand Up @@ -37,10 +37,10 @@ cd $HOME\.dsh\dsh-browser; pnpm start

开发者也可以 clone 仓库,在 checkout 中依次运行 `./scripts/install.sh` 和 `pnpm start`。本地模式直接使用当前分支,不会下载或覆盖源码。两种安装模式都会注册同一个 profile bundle;构建工具只从选定的 workspace 解析,绝不读取父 checkout 或父目录的 `node_modules`。

当前工作区固定使用 dsh 0.1.7-rc.2,也是最低支持版本;不再支持旧版 DSH:
当前工作区固定使用 dsh 0.2.0-rc.1,也是最低支持版本;不再支持旧版 DSH:

```sh
npx @deepseek-ai/dsh@0.1.7-rc.2 web
npx @deepseek-ai/dsh@0.2.0-rc.1 web
```

安装器会把已解压扩展复制到 `~/.dsh/browser-extension` 并打开 `chrome://extensions`。在 Chrome 中加载这个稳定目录,然后使用侧边栏。扩展会自动发现回环连接,无需输入 token;非回环部署仍需要配置的 bearer token。
Expand Down
2 changes: 1 addition & 1 deletion packages/browser/bridge-browser/cordis.patch.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Browser bridge layer for the dsh `web` profile.
#
# `dsh plugin --profile web add` registers this package's `dsh.bundle`
# manifest, so both the repository launcher and `npx @deepseek-ai/dsh@0.1.7-rc.2 web`
# manifest, so both the repository launcher and `npx @deepseek-ai/dsh@0.2.0-rc.1 web`
# apply this patch without an extra command-line option.
#
# On first boot the plugin generates a bearer token and persists it at
Expand Down
80 changes: 40 additions & 40 deletions packages/browser/bridge-browser/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@yuxianglin/dsh-bridge-browser",
"description": "Bridge plugin: token-authenticated WebSocket carrier for the browser extension plus text-only browser_* tools that drive the user's Chrome via that extension",
"version": "0.0.5",
"version": "0.0.7",
"author": "Yuxiang Lin",
"license": "MIT",
"private": true,
Expand Down Expand Up @@ -49,20 +49,20 @@
"src"
],
"peerDependencies": {
"@deepseek-ai/cordis": "^4.0.4",
"@deepseek-ai/dsh-agent": "^0.1.7-rc.2",
"@deepseek-ai/dsh-api-gateway": "^0.1.7-rc.2",
"@deepseek-ai/dsh-attachment": "^0.1.7-rc.2",
"@deepseek-ai/dsh-client-connection": "^0.1.7-rc.2",
"@deepseek-ai/dsh-client-locale": "^0.1.7-rc.2",
"@deepseek-ai/dsh-client-ui-settings": "^0.1.7-rc.2",
"@deepseek-ai/dsh-client-ui-slots": "^0.1.7-rc.2",
"@deepseek-ai/dsh-home-paths": "^0.1.7-rc.2",
"@deepseek-ai/dsh-host-webserver": "^0.1.7-rc.2",
"@deepseek-ai/dsh-invariants": "^0.1.7-rc.2",
"@deepseek-ai/dsh-llm": "^0.1.7-rc.2",
"@deepseek-ai/dsh-session-persistence": "^0.1.7-rc.2",
"@deepseek-ai/dsh-tools": "^0.1.7-rc.2",
"@deepseek-ai/cordis": "~4.0.4",
"@deepseek-ai/dsh-agent": "0.2.0-rc.1",
"@deepseek-ai/dsh-api-gateway": "0.2.0-rc.1",
"@deepseek-ai/dsh-attachment": "0.2.0-rc.1",
"@deepseek-ai/dsh-client-connection": "0.2.0-rc.1",
"@deepseek-ai/dsh-client-locale": "0.2.0-rc.1",
"@deepseek-ai/dsh-client-ui-settings": "0.2.0-rc.1",
"@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.1",
"@deepseek-ai/dsh-home-paths": "0.2.0-rc.1",
"@deepseek-ai/dsh-host-webserver": "0.2.0-rc.1",
"@deepseek-ai/dsh-invariants": "0.2.0-rc.1",
"@deepseek-ai/dsh-llm": "0.2.0-rc.1",
"@deepseek-ai/dsh-session-persistence": "0.2.0-rc.1",
"@deepseek-ai/dsh-tools": "0.2.0-rc.1",
"react": ">=18.2.0 <19"
},
"peerDependenciesMeta": {
Expand All @@ -80,7 +80,7 @@
}
},
"dependencies": {
"@deepseek-ai/schemastery": "^3.18.4",
"@deepseek-ai/schemastery": "~3.18.4",
"ws": "^8.21.0"
},
"scripts": {
Expand All @@ -89,30 +89,30 @@
"build": "tsc -b --pretty false && tsdown && node -e \"require('node:fs').copyFileSync('src/client.js', 'lib/client.js')\""
},
"devDependencies": {
"@deepseek-ai/cordis": "4.0.4",
"@deepseek-ai/cordis-plugin-include": "1.0.9",
"@deepseek-ai/cordis-plugin-loader": "1.0.5",
"@deepseek-ai/dsh-agent": "0.1.7-rc.2",
"@deepseek-ai/dsh-agent-loop": "0.1.7-rc.2",
"@deepseek-ai/dsh-api-gateway": "0.1.7-rc.2",
"@deepseek-ai/dsh-attachment": "0.1.7-rc.2",
"@deepseek-ai/dsh-client-connection": "0.1.7-rc.2",
"@deepseek-ai/dsh-home-paths": "0.1.7-rc.2",
"@deepseek-ai/dsh-host-webserver": "0.1.7-rc.2",
"@deepseek-ai/dsh-invariants": "0.1.7-rc.2",
"@deepseek-ai/dsh-llm": "0.1.7-rc.2",
"@deepseek-ai/dsh-session": "0.1.7-rc.2",
"@deepseek-ai/dsh-session-format-v3-to-v4": "0.1.7-rc.2",
"@deepseek-ai/dsh-session-persistence": "0.1.7-rc.2",
"@deepseek-ai/dsh-session-persistence-jsonl": "0.1.7-rc.2",
"@deepseek-ai/dsh-session-projection": "0.1.7-rc.2",
"@deepseek-ai/dsh-storage": "0.1.7-rc.2",
"@deepseek-ai/dsh-storage-domain": "0.1.7-rc.2",
"@deepseek-ai/dsh-storage-json": "0.1.7-rc.2",
"@deepseek-ai/dsh-system-prompt": "0.1.7-rc.2",
"@deepseek-ai/dsh-tools": "0.1.7-rc.2",
"@deepseek-ai/dsh-user-questions": "0.1.7-rc.2",
"@deepseek-ai/dsh-workspace": "0.1.7-rc.2",
"@deepseek-ai/cordis": "~4.0.4",
"@deepseek-ai/cordis-plugin-include": "~1.0.9",
"@deepseek-ai/cordis-plugin-loader": "~1.0.5",
"@deepseek-ai/dsh-agent": "0.2.0-rc.1",
"@deepseek-ai/dsh-agent-loop": "0.2.0-rc.1",
"@deepseek-ai/dsh-api-gateway": "0.2.0-rc.1",
"@deepseek-ai/dsh-attachment": "0.2.0-rc.1",
"@deepseek-ai/dsh-client-connection": "0.2.0-rc.1",
"@deepseek-ai/dsh-home-paths": "0.2.0-rc.1",
"@deepseek-ai/dsh-host-webserver": "0.2.0-rc.1",
"@deepseek-ai/dsh-invariants": "0.2.0-rc.1",
"@deepseek-ai/dsh-llm": "0.2.0-rc.1",
"@deepseek-ai/dsh-session": "0.2.0-rc.1",
"@deepseek-ai/dsh-session-format-v3-to-v4": "0.2.0-rc.1",
"@deepseek-ai/dsh-session-persistence": "0.2.0-rc.1",
"@deepseek-ai/dsh-session-persistence-jsonl": "0.2.0-rc.1",
"@deepseek-ai/dsh-session-projection": "0.2.0-rc.1",
"@deepseek-ai/dsh-storage": "0.2.0-rc.1",
"@deepseek-ai/dsh-storage-domain": "0.2.0-rc.1",
"@deepseek-ai/dsh-storage-json": "0.2.0-rc.1",
"@deepseek-ai/dsh-system-prompt": "0.2.0-rc.1",
"@deepseek-ai/dsh-tools": "0.2.0-rc.1",
"@deepseek-ai/dsh-user-questions": "0.2.0-rc.1",
"@deepseek-ai/dsh-workspace": "0.2.0-rc.1",
"@types/node": "^22.20.0",
"@types/ws": "^8.18.1",
"playwright-core": "^1.61.1",
Expand Down
Loading
Loading