给 DSH 的输入框加一个全屏输入面板:点开它,在整屏空间里写多行文本,写完点按钮发送。Enter 只换行、只有…
31.5/100
综合分
2
GitHub 星标
289
npm 周下载
—/5
用户评分
数据截至 2026/10/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-fullscreen-inputnpm 源 · dsh-fullscreen-input 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · other
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 17 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-fullscreen-input @ 1.2.4
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/14 10:15:50
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 4 处,展示前 4 条)
- 读取本地文件build-client.mjs:26
const id = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')).name - 读取本地文件build-client.mjs:32
const source = readFileSync(join(root, 'src', 'client.js'), 'utf8') - 写入本地文件build-client.mjs:43
mkdirSync(join(root, 'lib'), { recursive: true }) - 写入本地文件build-client.mjs:45
writeFileSync(join(root, 'lib', 'client.js'), bundle)
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 多行文本编辑
- 按钮发送
DeepSeek Harness 的全屏输入插件。
最近更新
在 GitHub 查看全部 →v1.2.42026-10-07内容较长已截断
Two defects the portal fix introduced, and a way out when the header is gone.
· Fixed
· The image preview was drawn under the panel, stayed open after its attachment was
removed, and cost the panel its input after a single character. Three symptoms, one
cause — and all of them a side effect of the previous release. To keep the mask's blur
from being cut short by an ancestor's containment, the layer portals itself to body
— and that move lifted its z-index: 2147483000 out of the slot's stacking context and
into the root one, where it competed with the host's own overlays for the first time.
The host's lightbox portals to body too, at a lower level, so it lost.
- While a preview is open the layer steps below the lightbox; the lightbox is what
the user is looking at, and the mask only has to cover the page. It steps down only
during a preview.
- Removing an attachment closes its preview. The host lightbox listens for keys in
the capture phase and pulls focus back to its own close button whenever its effect
re-runs — and its onClose is a fresh function on every render of this panel. So an
orphaned lightbox did not merely linger: typing one character into the panel made it
re-render, stole focus, and the panel stopped accepting input. That is what "one
character and then nothing" was.
· The host's confirmation and approval dialogs were buried under the panel. The other
face of the same portal: once the layer escapes to body, its z-index joins the root
context, and at 2147483000 every host modal sat underneath it. On a real machine this
read as "the agent is waiting for your confirmation and all you can see is the panel" —
and under the ask policy those confirmations are frequent, each one costing a step of
closing or dragging the panel aside first.
- The layer is 999 now, whether or not it escaped. That number is measured, not
chosen: the host modal stack sits at 1000 and the page furniture tops out at
996, so the layer has to be above the latter
v1.2.32026-10-07
The mask's blur stopping at a host container, a white-on-white switch on the light theme, and AGENTS.md out of the package.
· Fixed
· The mask covered the conversation column but not the sidebar, on one machine. The
first reading of the report was a geometry problem, and the fix was built for that.
Field data said otherwise: the layer and the scrim both measured the full viewport at
0,0 with a zero delta, and a hit test in the sidebar landed on the layer — so size
and stacking were never wrong. What was wrong is where the effect appeared: the mask
fill is transparent by default, so what the eye reads as the mask is the
backdrop-filter blur, and the blur stopped at a host row box while the layer still
measured the whole screen.
- The cause is container-type: inline-size on a host element between the slot and
body. Its implied contain: layout makes it a containing-block candidate and cuts
backdrop-filter sampling short. It also explains why the symptom tracked the machine
rather than the browser: that viewport made the host lay the column out with that row.
- The layer now probes its ancestors once mounted and, on a hit, portals itself to
body — above which fixed necessarily means the viewport and backdrop-filter is
no longer truncated.
- The probe covers seven causes: transform, filter, backdrop-filter, perspective,
contain, container-type, will-change. It counts a value only when the engine
actually returned one — none, auto, normal and the empty string all count as
unset. (container-type defaults to normal, so missing that check would make the
probe permanently true.)
- It escapes only on a hit: with no hit, the DOM position and structure are unchanged.
If react-dom cannot be resolved, it does not throw — it simply stays put, which is the
previous behaviour rather than a failed load.
· On the light theme, a switch in its off state was a solid white block. The dark theme
was fine. The neutral tint under our own controls came from --dsw-alias
v1.2.02026-10-07内容较长已截断
文件引用现在可以一键移除了,还修掉了一个「引用悄悄回不来」的问题。
· 新增
· 文件引用也能一键移除。引用条目(@路径)现在和附件一样带「×」。要理解它的行为,得先知道引用不是附件:非图片文件在宿主那里就是草稿文档里的 @路径 文本,外加一条 occurrences 记录,attachmentIds 里根本没有它——所以附件的移除接口对它无效,唯一能删掉它的方式就是改草稿文本,按钮做的正是这件事。两种形态都得处理对,否则会毁内容:独占一行的引用连同换行一起删(不留空行),句子中间的引用只删自己,并把让出来的两个空格收成一个(看看 @a.ts 这个文件 → 看看 这个文件)。删掉一个引用之后,其余的引用仍然是引用——chip 会照常重建。
- 一个刻意保留的行为:没有可删的匹配文本时,不画按钮。草稿已经变过、那段文字找不到了,就没有什么可删;一个点了没反应的控件,恰恰是这个功能要消灭的东西。这同时避免了图片草稿在附件自带的移除控件旁边再多出一个。
· 修复
· 移除一个引用会让其余引用一起失去身份。这是本版最严重的一处,也是它只在真机上暴露的原因:宿主接收 insertReference 的 span 用的是 detect 坐标——一个 chip 在 detect 投影里只占 1 个字符(U+FFFC)——而计划是按 clipboard 坐标构建的,一个 chip 是它完整的 @路径。第一个 chip 恰好从偏移 0 开始,所以对得上;之后每一个都偏大了「已恢复路径长度 − 1」的累加值,宿主判定越界直接拒绝,恢复流程就此中止——于是只有第一个引用变回 chip,其余全部退化成纯文本。现在这份漂移按每次插入累加(宿主在引用后补一个分隔空格,抵消掉其中 1 个单位),每个 span 都先换算成 detect 坐标再交给宿主。
- 这个缺陷离线测试原本抓不到:测试替身把 span 当成 clipboard 坐标直接切片,还无条件返回成功。现在替身按真实语义建模——文档是一串文本片段和 chip 片段,chip 在 detect 里只占 1 个字符——于是旧代码在它上面会真的失败(applied=[true,false]),这条修复也就有了回归保护。
· 点「×」会把光标扔到别处,下一次按键因此落在你没指过的地方。程序化替换输入框的值之后,光标位置由浏览器随意决定:原本停在末尾的光标,删除后却跑到了草稿中间,于是紧接着的一次退格删掉了两个毫不相干的引用。现在写入前先把光标映射过这次编辑——改动前没动就保持不动,改动后按长度差平移,落在改动范围内就停在改动范围的起点——写入提交后再恢复。setSelectionRange 不会抢焦点,所以连着点几次移除,焦点还是你原来的那个。
· 独占一行的引用删掉后会留下一个空行。测试只看左右各一个字符,而宿主会在 chip 后补一个分隔空格——于是 @a.ts ␠(很常见,因为引用被恢复过)被当成行内引用,只删了引用本身,那个空格就留成了用户看到的空行。现在看整行:如果这一行除了引用和空白什么都没有,整行连同换行一起删(草稿最后一行则删它前面的换行)。
· 非图片文件的移除按钮看不见。引用栏是滚动容器(overflow-y:auto),条目的「×」是绝对定位,向上向右各溢出 5px;32px 的图片卡片在行内有富余,22px 的文本 chip 却紧贴内容盒,按钮就被裁掉了——它在 DOM 里、能聚焦、能点,就是看不见,读起来就是「这个条目没有移除控件」。引用栏的内边距现在给这份溢出留了空间。
· 兼容性
bundle 补丁和 dsh manifest 都没动,现有配置档照常可用,针对行 id fullscreen-input 写的 disable 行依然生效。旧版本存下的设置读回来行为完全一致。
npm shasum (SHA1) 61cb26b6b4ab954650ad00610540f5ea148f1cf4
npm integrity sha512-ellxdnICAITaq[...]gOSIpNKqz4J6g==
install dsh plugin --profile web add dsh-fullscreen-input
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-fullscreen-input
给 DSH 的输入框加一个全屏输入面板:点开它,在整屏空间里写多行文本,写完点按钮发送。Enter 只换行、只有 Ctrl+Enter 才发送;面板可以移动、可以拖边框改大小,引用与附件都与主输入框共用同一份草稿。
为什么需要一个全屏输入框
DSH 自带的输入框只有窄窄一条:写长提示词时只能在一个很扁的区域里翻来覆去,引用、附件、正文全挤在一起,想通读一遍自己写了什么几乎做不到。
这个面板把输入区放大到整屏:一次能看到的文本量是原来的十几倍;写完之后还能拖标题栏把它挪到别处、拖边框改成想要的宽高,把背后的会话露出来对照着看。它不是只读预览,而是替换掉那条窄输入框的编辑场所——草稿是同一份,在面板里改完关掉,主输入框里就是新内容。
深色主题下的全屏输入面板:标题栏可拖动、四边可调整大小,正文上方是引用与附件栏
深色主题。面板背后那份草稿就是主输入框里的同一份——面板里写得开,主输入框里会因高度受限被截断。
顺带解决的问题
DSH 原有输入框的 Shift+Enter 换行判定依赖一个很短的宽容窗口——输入法组合结束后的 10 毫秒内仍算「正在组合」。中文输入法频繁使用 Shift / Enter(切换中英、确认候选词),很容易落进这个窗口,于是 Shift+Enter 被误判成发送,多行文本根本写不舒服。
展开完整文档(README 剩余 1 节)
dsh-fullscreen-input 给 DSH 的输入框加一个全屏输入面板:点开它,在整屏空间里写多行文本,写完点按钮发送。Enter 只换行、只有 Ctrl+Enter 才发送;面板可以移动、可以拖边框改大小,引用与附件都与主输入框共用同一份草稿。 为什么需要一个全屏输入框 DSH 自带的输入框只有窄窄一条:写长提示词时只能在一个很扁的区域里翻来覆去,引用、附件、正文全挤在一起,想通读一遍自己写了什么几乎做不到。 这个面板把输入区放大到整屏:一次能看到的文本量是原来的十几倍;写完之后还能拖标题栏把它挪到别处、拖边框改成想要的宽高,把背后的会话露出来对照着看。它不是只读预览,而是替换掉那条窄输入框的编辑场所——草稿是同一份,在面板里改完关掉,主输入框里就是新内容。 深色主题下的全屏输入面板:标题栏可拖动、四边可调整大小,正文上方是引用与附件栏 深色主题。面板背后那份草稿就是主输入框里的同一份——面板里写得开,主输入框里会因高度受限被截断。 顺带解决的问题 DSH 原有输入框的 Shift+Enter 换行判定依赖一个很短的宽容窗口——输入法组合结束后的 10 毫秒内仍算「正在组合」。中文输入法频繁使用 Shift / Enter(切换中英、确认候选词),很容易落进这个窗口,于是 Shift+Enter 被误判成发送,多行文本根本写不舒服。 面板里没有「Enter 发送」这条路径,所以这个问题在这里不存在。但它是顺带解决的:即使没有这个毛病,一个全屏的输入场所本身也是需要的。 安装 从插件面板(推荐) 打开 DSH 侧栏的 「插件」 页面,点 添加插件,在输入框里填入包名 dsh-fullscreen-input,然后点安装。 那个输入框也接受 Git 地址、压缩包或本地绝对路径——所以没有发布到 npm 的插件同样能从这里装。插件管理页只管理声明了 dsh.bundle 的包,本插件已声明。 命令行 dsh plugin --profile web add dsh-fullscreen-input 装完重启 dsh web,刷新页面。 从本地目录(开发用) git clone <本仓库> dsh-fullscreen-input dsh plugin --profile web add link:<克隆下来的绝对路径> Windows 例:link:D:/example/dsh-fullscreen-input 因为是 link: 安装,改完源码跑一次 node build-client.mjs 重建,刷新页面即生效,不用重装。 怎么用 输入框下方工具栏(「+」按钮所在那一行)会多出一个图标,悬停显示「全屏输入」。点开就是面板;默认 F2 也能唤起它。 键位 | 按键 | 行为 | | Enter | 换行 | | Shift+Enter | 换行(与 Enter 等价,Shift 在面板里只表示换行) | | Ctrl+Enter / Cmd+Enter | 发送 | | Esc | 关闭面板(设置窗口开着时先关设置窗口,面板保留) | | Ctrl+0 | 把面板恢复到默认位置与默认大小(等同双击标题栏)。面板不可达时的自救入口:不要求焦点在面板内,只要面板开着就生效 | | F2 | 打开 / 关闭面板(可在设置里改绑为其它功能键) | | 中文输入法组词中的 Enter / Ctrl+Enter | 换行,绝不发送 | | 点击面板之外的区域 | 关闭面板(等同 Esc;关掉遮罩后不适用) | 关闭面板不会丢内容。 面板与主输入框读写的是同一份草稿——不是两份内容互相同步,而是同一个值。所以在面板里敲的字、在主输入框里敲的字,都是同一份。 面板里能做什么 | 能力 | 怎么用 | | 写多行 | 整个面板就是输入区:Enter 换行、Ctrl+Enter 发送 | | 调整大小 | 拖拽边框或四个角(8 个方向;光标会变成对应的缩放箭头,没有额外的可见把手)。最小 360×240、最大不超过视口。尺寸会被记住,双击标题可连同位置一起复原 | | 移动面板 | 按住标题那一行拖动(自由拖动,不设边界);双击标题回到居中。位置默认不记住 | | 看引用 | 草稿里的 @ 引用显示为带图标的条目,悬停看完整路径 | | 移除引用 | 引用条目右上角的「×」。它删掉的是草稿里那段文字——引用不是附件,所以在文本框里直接选中删除也一样。点「×」后输入框会失焦(焦点被按钮拿走),点回文本框即可继续输入 | | 看附件 | 图片显示为缩略图,点击看大图;文件显示类型图标与文件名 | | 移除图片附件 | 鼠标移到缩略图上,右上角出现「×」 | | 添加文件 | 面板左下角「+」,走 DSH 自己的文件选择器 | | 粘贴 | 在面板里直接 Ctrl+V,图片与文件都能贴进来 | | 拖放 | 把文件直接拖到面板上 | | 滚动背景 | 鼠标在面板之外滚动滚轮,会滚动背后的会话——边看 LLM 输出边写提示词时不用来回开关面板。面板内部的滚轮仍归面板 | | 唤起快捷键 | 默认 F2,按一下开、再按一下关。可在设置里改成任意功能键(F1–F12);Esc 始终关闭 | | 面板底色 | 想要不透明的面板就开「纯色面板」,想要磨砂质感就开「启用毛玻璃效果」(两者互斥);两个都关则面板完全透明 | | 关闭遮罩 | 设置里的「启用遮罩层」可整个关掉遮罩:鼠标从此能直接点击、滚动背后页面。代价是「点击面板外关闭」消失,请用 Esc 或唤起快捷键 | | 使用提示 | 首次打开面板时会弹一次提示。可勾选「不再提示」;设置最下方有「查看提示」可随时唤回 | 外观与行为设置 面板头部的小太阳图标按钮(八齿造型,看起来更像太阳而不是齿轮)→「全屏输入设置」: 遮罩层 - 启用遮罩层(默认开) - 遮罩层不透明度:默认完全透明(0%) - 遮罩层雾化:默认不雾化(0%) 面板底色 - 启用毛玻璃效果:默认关闭 - 纯色面板:默认关闭,与毛玻璃互斥——只铺底色、不加模糊;开启时会把「面板不透明度」推到 100%,直接得到一个不透明的纯色面板 - 面板雾化(默认 40%)、面板不透明度(默认 25%)、面板颜色:「跟随主题」、6 个固定色,最后那个格子是系统颜色选择器——点它选任意颜色 - 底色共三种状态:两个开关都关 = 面板完全透明;只开「纯色面板」= 铺色但不模糊;只开「启用毛玻璃效果」= 铺色 + 模糊 面板行为 - 记住面板大小(默认开)、记住面板位置(默认关):两者独立,都关掉时每次打开都回到默认大小与居中 - 唤起快捷键(默认 F2):点一下按钮,再按一个功能键即可改绑 - 使用提示:点「查看提示」再次显示首次使用的提示弹窗 设置会持久保存,刷新与重开都保留。 已知边界(不是缺陷) 面板与宿主 composer 是两套输入面,下面几条是由此而来的、刻意的边界: - 面板里没有 @ 引用菜单。 宿主的 @ 菜单绑在它自己的富文本 composer 上(在光标处弹出候选),而面板用的是普通 textarea——宿主不知道那里有光标,所以敲 @ 不会弹菜单。要加引用请用面板左下角的「+」、直接粘贴文件、或从系统拖放:三条路都会把文件变成引用,与在 composer 里选出来的是同一种,只是引用会落在光标处(粘贴文件时落在末尾)。 - 「遮罩层雾化」作用于整个视口(含面板背后),因为遮罩本身是全屏的。这是当前实现的行为,不是故障。 - 面板里没有上传进度与重试。 附件上传走的是宿主自己的路径,面板只负责触发;要接管进度就得替换宿主自己的附件栏,代价大于收益,已明确不做。 - 面板不做焦点陷阱。 它只处理自己内部的 Enter 与 Escape,不接管全局按键。 兼容性 - DSH >=0.2.0-rc.1 <0.3.0-0(即 0.2.x 发行线)。面板深度依赖宿主的槽位 props、inputActions 与 insertReference 的 revision-CAS 语义,这些正是次要版本最可能变动的地方,所以上界是刻意收窄的——旧版声明的 ≥ 0.2.0-rc.1 会无声地宣称兼容未来的 0.3.0+。 - Node ≥ 20(仅构建源码时需要) - 纯浏览器侧插件:host 侧是空实现,不产生任何网络请求,不读写会话数据 权限 本插件不需要任何权限档位、审批放宽或沙箱调整即可工作。它请求的能力面刻意保持在最小: | 能力 | 用途 | | ctx.effect | 注册样式表与 locale 字典的清理(卸载时完整回滚,无残留) | | ctx.inject(['slots','locale','sessions','conversation']) | 等待并取得这四个服务;全部是读取或驱动宿主自己的输入动作 | | slots.inject + slots.register | 往 conversation.input.left 槽位贡献一个工具栏按钮 | 未使用:ctx.fs、ctx.network、ctx.shell、ctx.resources。它不注册任何 Agent 工具,因此不会扩展模型的工具面。 唯一的本机持久化是一个 localStorage 键(面板外观偏好);唯一接触文件的路径是驱动宿主自己的隐藏文件输入框,且请求文件对话框必须在你的点击或粘贴手势内完成。完整的攻击面说明与漏洞报告方式见 SECURITY.md。 改源码 node build-client.mjs # 把 src/client.js 包成 lib/client.js npm run check # 语法检查(三个文件) | 文件 | 说明 | | src/client.js | 唯一手写实现(浏览器侧,全部 UI 与逻辑) | | lib/client.js | 构建产物,运行时实际加载的就是这个 | | lib/index.js | host 侧,空实现 | | build-client.mjs | 构建脚本,纯文本包裹,无任何依赖 | | cordis.patch.yml | bundle 补丁,挂载 row id fullscreen-input | 改完 src/ 一定要重建,否则刷新页面看到的还是旧代码。 License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
AL-Yichen/dsh-fullscreen-input
给 DSH 的输入框加一个全屏输入面板:点开它,在整屏空间里写多行文本,写完点按钮发送。Enter 只换行、只有…
相关插件 · 其他
模型破甲清洗YuJunZhiXue/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,148已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,266已汉化DSH
70.7
这是你的仓库?认领条目