dsh-kimi-webbridge API 参考

August 14, 2026 · View on GitHub

三部分:(1) 模型向工具 API(15 个 kimi_webbridge_*);(2) 部署配置 API 与插件模块导出;(3) WebBridge 守护进程 HTTP API(插件背后的协议)。 参数名与守护进程 action 参数一一对应;输出 schema 与实测响应信封逐键对齐(dsh v0.1.0-rc.6 + Windows 守护进程实测)。

1. 工具 API(ctx.tools 注册,经 defineTool 编译)

通用行为:

  • 请求体固定携带 session(来自配置,全任务稳定)。
  • 错误:守护进程不可达 → 附带 kimi_webbridge_start_daemon 提示;ok:false → 透传 daemon error.message
  • 取消:exec.signal 中止请求;超时由 requestTimeoutMs 控制。
  • 渲染:render 返回 [{type:'text', text:<紧凑 JSON>}],超过 maxRenderText 截断。

1.1 kimi_webbridge_navigate

打开 URL。任务的第一次调用设置 group_title(用户语言的短标签)。

参数类型必填说明
urlstring完整 URL
newTabbooleantrue=新标签;省略=当前标签跳转
group_titlestring分组人类标签,仅首次设置

输出:{success:boolean, url:string, tabId:integer}(additionalProperties:false)

1.2 kimi_webbridge_find_tab

按完整 URL 重新选中本会话标签;active:true 借用用户正在看的标签。

参数类型必填说明
urlstring完整 URL(取自 navigate 结果或 list_tabs)
activebooleantrue=使用用户当前查看的标签

输出:{success:boolean, url?, tabId?, borrowed?}(开放对象)

1.3 kimi_webbridge_list_tabs

列出本会话标签。无参数。 输出:{success:boolean, tabs:<json>(tabs 形如 [{tabId,url,title,active,groupTitle}]

1.4 kimi_webbridge_snapshot

读取当前标签无障碍树(页面内容的主要读取方式)。无参数。 输出:{url:string, title:string, tree:<json>(tree 节点含 role/name/ref/children,交互元素带 @e 引用)

1.5 kimi_webbridge_click

点击元素(合成 el.click())。

参数类型必填说明
selectorstring@e 引用(首选)或 CSS 选择器

输出:{success:boolean, tag?, text?}(开放对象)

1.6 kimi_webbridge_fill

清空并插入文本;input/textarea 与 contenteditable 富文本均有效。

参数类型必填说明
selectorstring@e 引用或 CSS 选择器
valuestring插入文本(替换现有内容)

输出:{success:boolean, tag?, mode?}(mode ∈ value|contenteditable,开放对象)

1.7 kimi_webbridge_evaluate

在页面执行 JS(支持 async/await)。

实现注:守护进程对 undefined 结果省略 value 键,本工具在 execute 层归一化为 value ?? nulltype ?? 'undefined'(见 docs/solutions.md #7)。

参数类型必填说明
codestringJavaScript 代码

输出:{type:string, value:<json>}(additionalProperties:false)

1.8 kimi_webbridge_cdp

原始 chrome.debugger 透传(高级逃生舱)。

参数类型必填说明
methodstringCDP 方法(如 Page.getLayoutMetrics
paramsjsonCDP 参数

输出:<json>(原始 CDP 结果;扩展不支持的方法会透传 daemon 错误)

1.9 kimi_webbridge_screenshot

截图(视口或指定元素)。守护进程写盘并返回文件路径(用文件工具读取)。

实现注:retryOnTimeout:true —— 新标签后首次截图可能因页面未稳定卡住,超时后自动重试 1 次(重试通常秒回)。

参数类型必填说明
formatstringpng(默认) | jpeg
qualityintegerJPEG 质量 0–100
selectorstring@e 或 CSS,仅截取该元素
pathstring自定义输出路径(唯一名;已存在则覆盖)

输出:{format:string, path:string, sizeBytes:integer, mimeType:string}(additionalProperties:false)

1.10 kimi_webbridge_network

网络抓包:start / stop / list / detail。

参数类型必填说明
cmdstringenum start|stop|list|detail
filterstringURL 子串过滤(list)
requestIdstring请求 id(detail)

输出:<json>(list 形如 {count, requests}

1.11 kimi_webbridge_upload

<input type=file> 设置文件。

参数类型必填说明
selectorstring@e 或 CSS 选择器
filesarray[string]文件绝对路径列表

输出:{success:boolean, fileCount?, …}(开放对象)

1.12 kimi_webbridge_save_as_pdf

把当前页面渲染为 PDF(守护进程写盘返回路径)。

参数类型必填说明
paper_formatstringenum letter|a4|legal|a3|tabloid
landscapeboolean横向(默认 false)
scalenumber0.1–2.0(默认 1.0)
print_backgroundboolean保留背景色(默认 true)
pathstring自定义输出路径(唯一名)

输出:{path:string, sizeBytes?, mimeType?, pageTitle?}(开放对象)

实现注:同 screenshot,retryOnTimeout:true

1.13 kimi_webbridge_close_tab

关闭当前标签。无参数。 输出:{success:boolean, closed?}(开放对象)

1.14 kimi_webbridge_close_session

关闭整个标签分组(仅当用户明确要求)。无参数。 输出:{success:boolean, closed:integer}(additionalProperties:false)

1.15 kimi_webbridge_start_daemon

启动本地守护进程(安全,已运行时为空操作)。startDaemonTool:false 时不注册。

实现注:spawn 二进制(detached+unref,绝不执行 stop/restart/uninstall)→ 20 s 轮询就绪。

参数类型必填说明
(无)

输出:{started:boolean, daemonBin:string, baseUrl:string, error?}(开放对象)

2. 部署配置与模块导出

2.1 行配置(cordis.patch.yml / 覆盖层,按 id kimi-webbridge

类型默认说明
baseUrlstringhttp://127.0.0.1:10086守护进程端点(http/https)
sessionstringdshWebBridge 分组名,非空
requestTimeoutMsnumber120000单请求超时,正数
startDaemonToolbooleantrue是否注册 start_daemon 工具
daemonBinstring|nullnull覆盖守护进程二进制路径
maxRenderTextnumber50000渲染文本上限,正数

非法配置:加载时抛错并列出全部违规项(kimi-webbridge: invalid config: …)。

2.2 模块导出(index.js)

导出说明
namekimi-webbridge插件标识(kebab)
inject['tools']等待工具服务就绪
apply(ctx, config)function校验配置 → 注册 15(或 14)个工具

2.3 内部函数(非公共 API,供维护参考)

函数签名要点职责
normalizeConfig(config)→ cfg默认合并 + 逐键校验
daemonBinPath(cfg)→ 路径平台化二进制路径
withAbort(signal, ms){signal, timedOut, cleanup}取消+超时合成
requestDaemon(cfg, action, args, exec)→ data单次请求 + 信封解析 + 错误分类(kind: 'timeout'
callDaemon(cfg, action, args, exec, {retryOnTimeout})→ data超时重试包装
cleanArgs(args)→ args剔除 undefined
renderJson(value, maxText)→ ContentBlock[]紧凑 JSON 渲染
obj / req / opt→ schema 节点schema 助手

3. WebBridge 守护进程 HTTP API(协议基线)

POST http://127.0.0.1:10086/command
Content-Type: application/json
体:{"action":"<action>","args":{...},"session":"<分组名>"}

响应信封(实测):

  • 成功:{"ok":true,"data":{…}}
  • 失败:{"ok":false,"error":{"code":"<code>","message":"<message>"}}

已实测的 action 与 data 形状:

action实测 data备注
navigate{success, url, tabId}group_title 首次设置分组标签
find_tab{success, url, tabId, borrowed}按完整 URL
list_tabs{success, tabs:[{tabId,url,title,active,groupTitle}]}
snapshot{url, title, tree}tree 含 @e ref
click{success, tag, text}合成事件
fill{mode, success, tag}mode=value/contenteditable;中文等非 ASCII 正常
evaluate{type, value}undefined 时省略 value
cdp原始 CDP 结果不支持的域返回 extension_error 透传
screenshot{format, path, sizeBytes, mimeType}写盘返回路径
networkstart/stop: {success, message};list: {count, requests}
upload{success, selector, fileCount, files}files=绝对路径数组
save_as_pdf{path, sizeBytes, mimeType, pageTitle}
close_tab{success, closed}
close_session{success, closed}closed=关闭数

其他端点:GET /status(200);/mcp/sse/health 均 404(无 MCP 端点,故不适用 @deepseek-ai/dsh-mcp-client)。

约束(官方行为,插件已内建到工具描述):

  • 新标签后的首次 screenshot/save_as_pdf 可能等待页面稳定(卡顿数秒至数十秒),重试即秒回;
  • 严格校验 event.isTrusted 的站点会忽略 click/fill;
  • 跨源 iframe 内的元素不在顶层框架操作范围内。

4. 版本兼容性

  • dsh:v0.1.0-rc.6 实测通过(@deepseek-ai/dsh-tools 同版)。
  • WebBridge:守护进程当前安装版实测;"Please update the Kimi WebBridge extension" 报错 = 扩展版本过旧。
  • Node ≥ 18(全局 fetch);开发环境 Node 24 实测。