在右侧栏渲染视图里直接点选改字,选中文字可加入会话
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/14 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add sevenhsu7/dsh-codex-like-markdown该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · browser
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 18 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
为 DSH 右侧边栏带来类 Codex 的 Markdown 编辑:就地编辑渲染后的文档,表格单元格也能改。
README
由 DeepSeek 最新模型翻译生成dsh-codex-like-markdown
让右侧栏的 Markdown 预览就地可编辑:文档保持渲染后的样子,点段落、点标题、点表格单元格,光标落在那里直接改字。
Markdown editing in place for the DSH right Sidebar: the document keeps its rendered look, and clicking a paragraph, a heading, or a table cell puts the caret exactly there.
Selecting a passage in the rendered document, with the Add to chat action bar above it
选中一段文字 → 添加至会话;也可以直接点段落,就地编辑。
Select a passage to add it to the session, or click any paragraph to edit it in place.
一个 DeepSeek Harness 插件,让右侧栏的 Markdown 预览就地可编辑——文档保持渲染后的样子,点段落、点表格单元格、点标题,光标就落在那里,直接改字。
展开完整文档(README 剩余 1 节)
dsh-codex-like-markdown
让右侧栏的 Markdown 预览就地可编辑:文档保持渲染后的样子,点段落、点标题、点表格单元格,光标落在那里直接改字。
Markdown editing in place for the DSH right Sidebar: the document keeps its rendered look, and clicking a paragraph, a heading, or a table cell puts the caret exactly there.
Selecting a passage in the rendered document, with the Add to chat action bar above it
选中一段文字 → 添加至会话;也可以直接点段落,就地编辑。
Select a passage to add it to the session, or click any paragraph to edit it in place.
一个 DeepSeek Harness 插件,让右侧栏的 Markdown 预览就地可编辑——文档保持渲染后的样子,点段落、点表格单元格、点标题,光标就落在那里,直接改字。
DSH 自带的预览插件在自己的 README 里就写明了这个缺口:"Preview, not editing. The viewers provide no file editing.",而且它没有暴露任何可以写工作区文件内容的客户端 API。所以这个插件自己补上写入通道(一个独立的 Remote 命名空间),再提供一个使用它的渲染器。
你能得到什么
| 打开 .md 文件 | 以 Markdown(可编辑) 打开,渲染效果与内置视图完全一致 |
| 编辑 | 点段落、标题、列表、代码围栏 → 就地变成可编辑:没有边框盒子,用的是文档自己的字体,屏幕上不出现 Markdown 标记 |
| 光标 | 点哪个字,光标就落在哪个字上,和普通文本编辑器一样 |
| 打字 | 改动立即拼回文档,所以「未保存」状态与自动保存都是实时的(停顿约 1.2 秒自动保存);Esc 或 ⌘Enter 关闭当前块 |
| 表格 | 表格保持渲染器自己的表格;点某一格只在那一格上浮出编辑面,也只回写那一格 |
| 引用到会话 | 在预览里选中一段文字,浮出的操作条可以把选中的文字添加至会话:作为带出处的引用插进输入框(界面语言是中文时按钮就叫「添加至会话」) |
| 新增 | + 新增段落 追加一个段落并打开它 |
| 工具栏 | 只有一行:状态提示 · B / I / </> / 🔗 · 保存相关按钮 |
| ⌘S / Ctrl+S | 立即保存 |
| 原始文档 | ⌥⌘E 在渲染视图与原始 Markdown 之间切换(也可以把渲染器下拉切到内置 Text 只读查看原文) |
| 文件在别处被改 | 未保存的内容不会被覆盖,工具栏给出 仍然覆盖 或 从磁盘重新载入;在你再次编辑前暂停自动保存 |
| 只读渲染视图 | 仍然可用:预览的渲染器下拉里可以选回内置的 Markdown |
| 草稿 | 每个标签页的未保存内容,在切换标签、切换渲染器、切到源码再切回来时都不丢 |
| 界面语言 | 中文 / 英文跟随界面语言(按钮、状态、提示文案),两种语言都有测试兜底 |
| 写入 | 经 ctx.fs.writeText 走文件系统后端:read-only 会话被拒绝,workspace-write 只能写工作区内;带上版本即 compare-and-set |
| 失败降级 | 渲染器不可用时退回纯源码编辑;单个块渲染出错时退回该块原文,不会让整个面板变空 |
设计
渲染完全一致。 正文通过 @deepseek-ai/dsh-client-ui-primitives 的 MarkdownText 渲染——就是内置 Markdown 视图用的那个组件——所以标题、列表、表格、代码块、公式、脚注(含它的链接净化策略)看起来都一样。该模块在浏览器冻结的基线模块表里,因此 require 它不需要任何构建步骤;万一某个部署里没有它,插件会退化成「只能编辑源码」。
Markdown 本身就是文本,从不反推。 编辑面是一个 contenteditable,它的文本内容就是该块的 Markdown:语法标记仍在 DOM 里、但用 CSS 隐藏,加粗、代码、链接、标题、列表符号、引用、围栏都在标记周围做样式。任何时候都不会把样式反向序列化成语法,所以一次编辑只可能改变字符——不存在「富文本转 Markdown」这一步把文件改花的可能。读回内容就是对文本节点做一次遍历,浏览器自己生成的块级元素算作换行。
看起来像文档,是因为它是从文档上量出来的。 打开一个块时,插件会读取该渲染块的计算样式(字族、字号、行高、内边距)套到编辑面上,所以进入编辑不会改变文档的字体。光标用浏览器自己的命中测试(caretRangeFromPoint)按你点击的坐标放置。
选中即上下文。 在预览里选中文字会浮出一个操作条,唯一的动作是把这段文字交给输入框自己的 captureInsertion() / insertText()——它是光标处的一次可撤销编辑,不会覆盖你已经写好的内容——并以「出处单独一行、下面是被引用的段落」的形式插入,末尾留一个空行——光标就落在那里,你可以直接接着提问。为了让拖拽始终能用于选择,「按下与松开在同一位置」才进入编辑,拖拽不会。
表格单元格按格编辑。 表格是一个块,为了改一格而替换整张表不叫编辑——所以表格保持渲染器自己的表格,点某一格时只在那一格上浮出一个单格编辑面。单元格文本通过它在行内的字节区间改写,行内其它格、分隔行、表外内容一个字节都不动。编辑面每次渲染都重新量一次该格的位置,所以行变高时它会跟着走;它是单行的:回车即提交、粘贴进来的换行会变成空格,因此一次单元格编辑不可能多出一行。
是块,不是第二套文档模型。 源码按空行切块,代码围栏保持完整。每个块记录精确的 start, end) 区间,所以一次编辑只替换那段区间,其余字节——空格、列表符号、结尾换行——原样保留。块做了 memo,敲一个键只重画被改动的范围而不是整篇文档。每个块都有错误边界,渲染失败时退回原文而不是让整个面板变空。
一个小小的 Remote 命名空间。 markdownDocs/write 接收 { sessionId, path, absolutePath, content, expectedVersion? },返回状态信封(saved / stale / denied / missing / error)。宿主半通过 ctx.fs.writeText 写入,所以目标身份、原子性、沙箱围栏都由文件系统后端负责:read-only 会话会被拒绝,workspace-write 只能写工作区内。传 expectedVersion 时写入是 compare-and-set;除非用户明确选择 仍然覆盖,编辑器都会带上它。
index.js 不 import 任何 @deepseek-ai/。Typert 绑定是手工拼的(ctx.provide 加一个冻结的 typertRemote),调用描述符用 ctx.typert.register 注册——这是生成物管线之外的宿主被文档认可的路径。避免这些 import 让插件不依赖「profile 如何解析运行时包」。client.js 是一个普通的 module-loader bundle,无需构建。
安装
这是一个 profile bundle:它声明了 dsh.bundle.patch,所以装上即启用。
在 Harness 会话里 —— 让 agent 安装,它会用 plugin_manager 的 action: install_bundle,target 指向本目录。
在终端里 —— 先退出应用:
macOS 应用自带的 CLI
"/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" \
plugin --profile desktop add /absolute/path/to/dsh-codex-like-markdown
安装需要授权或 Full access,因为 profile bundle 会在宿主进程内执行代码。本包没有安装脚本、也没有依赖。卸载用 remove_bundle。
之后修改 client.js 会即时生效——客户端模块注册表在监视这个 bundle——而改动 index.js 需要重启应用以加载新的模块代。
环境要求
本插件是针对把 @deepseek-ai/dsh-client-ui-sidebar-documentpreview 与 API Gateway 挂进 Web 组合的 Harness 版本开发的(0.2.0-rc.2 前后)。如果某个 profile 没有它们,客户端半会保持 inactive 而不是报错:它在等 slots、documentPreviews、remote、locale 这四个服务。
已知限制
- 编辑过程中现敲的 Markdown 语法会先以原文显示,直到该块被关闭——因为编辑面在持有你的光标与输入法组合态时不会重渲染。Esc 之后就会渲染。
- 标记被隐藏意味着它不能手工编辑;在标记旁边删字可能把标记删掉,结果是那处格式丢失(下一次渲染可见),不会改变你的文字。
- 表格是逐格编辑;增删整行整列属于结构性修改,请用源码视图。
- 块按空行切分。用空行隔开的松散列表会渲染成多个列表;被空行切断的表格也会被切开。某行格子数不再匹配表头时,表格就地结束,不会吞掉后面的正文。
- 脚注与引用式链接只在单个块内解析,不跨文件。
- 完整字节读取受预览的 maxFileBytes(32 MiB)限制。
- 草稿存在浏览器内存里,生命周期为当前页面;刷新页面不保留。
- 「添加至会话」依赖预览拿到输入框的 inputActions:没有可用的输入框时会提示「无法添加至会话」;输入框正在提交时同样会被它拒绝。
- 写入是整篇替换加可选的版本护栏。读与写之间发生的改动会被检测到而不是合并,谁覆盖谁由用户决定。
测试
先抓取测试套件依赖的运行时包,再 npm test;见 [test/README.md。186 条断言覆盖:宿主半经过真实 Gateway 派发与真实文件写入、正文经过真实 React 渲染、以及交互逻辑——其中最关键的一条是把编辑面的标记剥掉后必须逐字节等于原 Markdown。
许可
MIT —— 见 LICENSE。
A DeepSeek Harness plugin that
makes the right Sidebar's Markdown preview editable in place — the document keeps its rendered look, and clicking a paragraph, a table cell, or a heading puts the caret exactly there and lets you type into it.
The shipped preview states the gap in its own README — "Preview, not editing. The viewers provide no file editing."* — and no shipped client-callable API writes workspace file content. This plugin supplies the missing write path itself, as its own Remote namespace, and adds a renderer that uses it.
What you get
| Opening a .md file | Opens in Markdown (editable), rendered exactly like the built-in viewer |
| Editing | Click a paragraph, heading, list, or code fence → it becomes editable in place: no border box, the document's own font, and no Markdown syntax on screen |
| 光标 | 点击后光标落在你点中的字符上,和纯文本编辑器一样 |
| 输入 | 编辑内容会立即拼接到文档中,所以脏状态和自动保存保持实时(空闲约 1.2 s 后自动保存);Esc 或 ⌘Enter 关闭块 |
| 表格 | 表格沿用渲染器自己的表格;点击单元格会在仅该单元格上打开编辑器,也只写回该单元格 |
| 引用到会话 | 在预览中选中一段文字,工具栏会把它作为引用连同来源加入输入框(中文界面下该操作显示为 添加至会话) |
| 添加 | + Add paragraph 追加一个段落并打开它 |
| 工具栏 | 一行:状态 · B / I / </> / 🔗 · 保存控件 |
| ⌘S / Ctrl+S | 立即保存 |
| 原始文档 | ⌥⌘E 在渲染视图和原始 Markdown 之间切换(渲染器下拉菜单内置的 Text 查看器读取它,只读) |
| 文件在别处被修改 | 脏缓冲区会保留,工具栏提供 Overwrite 或 Load from disk;自动保存暂停,直到你再次编辑 |
| 只读渲染视图 | 仍然可用:预览的渲染器下拉菜单列出内置的 Markdown 查看器 |
| 草稿 | 标签页未保存的文本在切换标签页、切换渲染器、进入源码视图再返回后依然保留 |
| 界面语言 | 中文和英文文案跟随界面语言,测试同时固定两套词典 |
| 写入 | 通过 ctx.fs.writeText,所以文件系统后端保留围栏:read-only 会话会被拒绝,workspace-write 保持在 workspace 根目录内,版本号使其成为 compare-and-set |
| 降级 | 没有渲染器时回退到仅源码编辑;渲染失败的块回退到自己的原始文本,而不是让面板空白 |
设计
渲染完全一致。 正文通过 @deepseek-ai/dsh-client-ui-primitives 的 MarkdownText 渲染——正是随附的 Markdown 查看器使用的组件——所以标题、列表、表格、代码块、数学公式和脚注看起来都一样,包括它的链接净化。该模块随浏览器冻结的基线模块表一起发布,所以引入它不需要额外构建步骤;如果某个部署缺少它,插件回退到仅源码编辑。
Markdown 就是文本,绝不是重建出来的。 编辑使用 contenteditable,其文本内容就是块的 Markdown:语法标记存在于 DOM 中,但用 CSS 隐藏,强调、代码、链接、标题、列表符号、引用和围栏都围绕它们设置样式。绝不会从样式序列化回语法,所以编辑只能改变字符——不存在可能弄乱文件的富文本转 Markdown 步骤。读回表面就是遍历其文本节点,浏览器创建的块元素作为换行。
它看起来像文档,因为它是从文档测量出来的。 打开块时,插件会快照渲染块的 computed typography——字体族、字号、行高、内边距——并把它应用到编辑区域,所以切进编辑状态不会改变文档的字体。光标由浏览器自己的命中测试(caretRangeFromPoint)放在点击的坐标上。
选区就是上下文。 在预览里选中文字,会浮出一个小条,上面只有一个操作,它把这段文字交给 composer,走的是 composer 自己的 captureInsertion() / insertText()——在光标处做一次可撤销的编辑,所以绝不会覆盖你已经写好的内容——文件名单独占一行,放在引用段落上方,下面留一个空行,光标就落在那儿。因为拖拽必须留给选择用,所以同一位置的按下再松开打开编辑器,拖拽则不打开。
表格单元格按单元格编辑。 表格是一个块,为了改一个单元格就替换整块,那不算编辑——所以表格在屏幕上保留渲染器自己的表格,点击某个单元格时,一个单单元格编辑区域正好浮在那个单元格上。单元格的文字通过它在行内的字节范围重写,所以行、表格、文档里的其他内容都不会动。每次渲染都会从单元格重新测量这个区域,所以行变高时它会跟着走;它是单行的:Enter 提交,粘贴进来的换行变成空格,单元格编辑永远不会新增一行。
是块,不是第二套文档模型。 源文本按空行分隔成块,围栏代码保持完整。每个块记录自己精确的 start, end) 范围,所以一次编辑只拼接那个范围,其他所有字节——间距、列表标记、末尾换行——都不动。块有记忆化,所以敲一个键只重绘被编辑的范围,而不是整个文档。每个块有错误边界,出错时回退到原始文本,而不是让面板变空白。
一个小巧的 Remote 命名空间。 markdownDocs/write 接收 { sessionId, path, absolutePath, content, expectedVersion? },返回一个状态信封(saved / stale / denied / missing / error)。宿主那一半通过 ctx.fs.writeText 写入,所以目标身份、原子性、沙箱围栏都留给文件系统后端:read-only 会话会被拒绝,workspace-write 只能写自己的工作区根目录内。传入 expectedVersion 会让写入变成比较并设置;除非用户明确选了 Overwrite,编辑器都会带上它。
index.js 不从 @deepseek-ai/* 导入任何东西。Typert 绑定是手工组装的(ctx.provide 加一个冻结的 typertRemote),调用描述符用 ctx.typert.register 注册,这是生成产物流水线之外的属主可以走的官方路径。避开这些导入,插件就不依赖配置档如何解析运行时包。client.js 是普通的模块加载器 bundle,没有构建步骤。
安装
这是一个配置档 bundle:它声明了 dsh.bundle.patch,所以安装它也就启用了它。
在 Harness 会话里 —— 让智能体安装它,会运行 plugin_manager,action: install_bundle,并把当前目录作为 target。
在 shell 里 —— 先退出应用:
the CLI bundled with the macOS app
"/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" \
plugin --profile desktop add /absolute/path/to/dsh-codex-like-markdown
安装需要批准或 Full access,因为配置档 bundle 会在进程内运行宿主代码。这个包没有安装脚本,也没有依赖。用 remove_bundle 卸载。
之后编辑 client.js 会实时生效 —— 客户端模块注册表会监听 bundle —— 而改动 index.js 需要重启应用,才能加载新的模块代际。
环境要求
开发时对应的 Harness 版本(0.2.0-rc.2 时期)在 Web 组合里挂载了 @deepseek-ai/dsh-client-ui-sidebar-documentpreview 和 API Gateway。如果配置档里没有它们,客户端那一半不会报错,而是保持不活跃:它会等待 slots、documentPreviews、remote 和 locale。
限制
- 编辑过程中输入的 Markdown 语法会按字面显示,直到块被闭合,因为界面在持有你的光标和进行中的输入法组合时不会重新渲染。按 Esc 即可渲染。
- 隐藏标记后就无法手动编辑它;删除它旁边的文本可能会把它一起删掉,这会在下次渲染时丢失那部分格式,而不是改动你的文字。
- 表格按单元格编辑;增删行或列属于结构性改动,请到 Source 视图里做。
- 块以空行分隔。用空行隔开的松散列表会渲染成多个列表,被空行拆开的表格也会被拆开。某一行不再匹配表头时,表格就此结束,而不会把后面的正文吞进去。
- 脚注和引用链接只在单个块内解析,不跨整个文件。
- 完整字节加载受预览的 maxFileBytes 限制(32 MiB)。
- 草稿存在浏览器内存里,只在页面存活期间有效;页面重新加载后不会保留。
- 选区操作需要插槽提供的 composer inputActions:没有挂载 composer 时,它会报告无法添加文本;composer 在提交过程中会拒绝插入。
- 写入是整文档替换,可选带版本守卫。读取和写入之间发生的改动会被检测到,而不是合并,最终以哪边为准由用户决定。
测试
拉取运行时包之后运行 npm test,这些包是测试套件导入的;见 [test/README.md。186 项检查覆盖了宿主那一半 —— 走真实的 Gateway 分发和真实的文件系统写入,覆盖了正文 —— 走真实的 React 渲染,也覆盖了交互逻辑 —— 包括那条不变式:剥掉编辑界面的标记后,Markdown 会逐字节还原。
许可证
MIT —— 见 LICENSE。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
sevenhsu7/dsh-codex-like-markdown
在右侧栏渲染视图里直接点选改字,选中文字可加入会话
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 266,913已汉化DSH
71.8
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,848已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,171已汉化DSH
70.4