Skip to content

Releases: Renzic-Stone/DSH-EasyRewrite

v2.5.3 — 彻底根除 fork 幽灵队列重发缺陷 · 长对话置灰防重锁

Choose a tag to compare

@Renzic-Stone Renzic-Stone released this 17 Sep 14:41

✨ v2.5.3 — 彻底根除 fork 幽灵队列重发缺陷 · 长对话置灰防重锁 · 拦截空窗补齐

修复

  • 【P0核心修复】彻底根除 DSH 宿主 fork 继承悬空幽灵队列导致的“改完发旧消息、新消息积压排队”缺陷(关联 Issue #9, #10
    • 根因剖析:DSH 官方 sessions.fork 实现采用贪婪切片(while (cut < log.length && log[cut]?.type !== "turn/start") cut++;),在截断到 turn/end 时,会把 turn/end 之后、turn/start 之前用户发送目标消息产生的 agent/inbox/spliced target=next-turn ... inserted 入队事件克隆进新会话;而配对的出队消费事件发生在 turn/start 之后被截断丢弃,导致新会话底层天然遗留一条悬空的旧消息;新会话通过 ia.submit() 提交修改后的新文本时被追加到队尾,引擎按 FIFO 消费队首的旧消息发给模型,造成“改完永远发旧消息、新消息留在排队区”;
    • 自救防御:在客户端新会话恢复发送(resume-send)核心咽喉要道处引入 cleanGhostQueue 流程,在调用 ia.submit() 之前,先主动检测新会话当前的队列快照(session.getSnapshot().queue),遍历调用官方 updateQueue(item.id, { kind: "remove" }) 将 fork 继承的悬空幽灵项全数移除;待清理确认后才触发 submit(),确保新会话队列从 0 开始,新文本成为队首第一条被直接消费。
  • 全生命周期发送拦截与防击穿补齐(消除 Issue #9 快速连击/回车穿透风险)
    • 引入组件级 sendingRef 状态锁,将捕获期拦截器(keydownclick)的生命周期与会话切换状态严格绑定;
    • 拦截器在确认派发切换新会话之前持续有效,期间任何键盘 Enter 或按钮点击均全量吞噬(e.preventDefault(); e.stopPropagation();),坚决阻断任何穿透到底层原生 InputBar 的可能;
    • writePending(sid, null) 延后至确认成功派发切换新会话后执行,消除原实现中提前解绑的百毫秒空窗期。
  • 彻底拔除旧会话 resetConversation 异步盲发残留
    • 彻底删除重置对话逻辑中在旧会话内轮询调用 props.inputActions.submit()timer2 定时器,消除由于旧会话尚未完全卸载或状态忙碌时将草稿错误压入旧会话排队区的隐患。
  • 会话切换通道多重降级与异常回滚保护
    • 实现 safeOpenSession 工具函数,依次尝试 props.openSessionprops.ctxSessions.open 与全局 ctxUiWorkspaceRef.openSession;若均失败,自动清理本地 resume-send: 标记并恢复可交互态,杜绝残留死锁。

改进

  • 长对话撤回/重发等待反馈与发送按钮物理置灰锁
    • 针对大对话/长上下文因 sessions.fork 耗时数秒导致的“静默等待”痛点,点击发送后立即为发送按钮添加禁用状态(opacity: 0.45pointer-events: nonedisabled: truecursor: not-allowed);
    • 撤回条文案实时动态切换为「正在准备新会话…」(支持中/英/日多语言:preparingSession),给用户清晰明确的后台进度感知,杜绝焦虑导致的重复连击;
    • 配备 15 秒超时自动解锁安全网,防止因极端异常导致按钮永久置灰。

致谢

  • ❤️ 特别鸣谢 GitHub Issue #9@tkhs101)与 Issue #10@TowardsDawn)提交者!尤其感谢 @TowardsDawn 提供的详尽事件序列复现日志与底层机理剖析,为彻底拔除此缺陷提供了极其宝贵的现场依据!

升级安装

dsh plugin --profile web add dsh-easyrewrite

或者更新已有插件:

pnpm up dsh-easyrewrite

📦 GitHub:https://github.com/Renzic-Stone/DSH-EasyRewrite | npm:dsh-easyrewrite@2.5.3

v2.5.2 — 修复无界 Promise 链内存泄漏 (OOM) · 优化备份与日志吞吐

Choose a tag to compare

@Renzic-Stone Renzic-Stone released this 14 Sep 11:04

✨ v2.5.2 — 修复无界 Promise 链内存泄漏 (OOM) · 优化备份与日志吞吐

修复

  • 彻底根除无界 Promise 链导致的 V8 堆内存泄漏(closes #7
    • 后端统一日志模块全面重构,彻底废除 logQueue = logQueue.then(...) 无界追加累积机制,改用自驱式批处理缓冲(Self-Draining Batch Buffer)
    • 串行批量提取合并落盘,IO 吞吐量提升约 117 倍(由 ~2,500 条/s 提升至 ~296,000 条/s);
    • 单批落盘后立即解除闭包和局部变量强引用,V8 GC 即刻回收,彻底解决长挂机常驻内存泄漏问题;
    • 引入 1000 条防御性背压上限(Buffer Overflow Protection),在极端磁盘卡死或瞬时日志洪峰时严格限流截断,将堆内存死死锁在几十 KB 稳态,从工程底层杜绝 OOM 崩溃。

改进

  • 前端草稿备份防重复与日志减负
    • 增加草稿版本感知(lastBackupMetaRef),草稿无新变动时自动跳过每 5 秒的重复写入与网络请求,挂机时后台请求减少 99% 以上;
    • 移除定时备份成功时的 /bubble/log 上报,仅保留失败报警,消除无意义的背景心跳日志刷屏。

致谢

  • ❤️ 特别鸣谢 GitHub Issue #7 提交者提供详细的 V8 堆内存溢出(4091.4MB)现场截图与排查指引!

EN summary

  • Fixed: V8 JavaScript heap memory leak caused by unbounded Promise chain (closes #7) — completely rewrote the host unified logging queue to a self-draining batch buffer. Fixed the fatal OOM crash after long sessions, improved logging throughput by ~117x, and added a 1,000-item backpressure ceiling.
  • Improved: smart draft backup deduplication — frontend now skips scheduled background backups and disk writes if composer content has not changed, eliminating over 99% of idle requests.
  • Special Thanks — huge thanks to the author of Issue #7 for providing thorough OOM stack traces and reproductions!

日本語

  • 修正:無限Promiseチェーンによるメモリリーク(OOMクラッシュ)の根絶(closes #7 — ログ書き込みキューを自律フラッシュ型バッチバッファへ刷新。長時間起動時の4GBヒープ枯渇クラッシュを完全に解決し、IOスループットが約117倍向上しました。1000件のバックプレッシャー上限も追加。
  • 改善:下書き自動保存の重複スキップ — 下書きに変更がない場合、5秒ごとの不要な保存リクエストを自動スキップし、アイドル時の負荷を99%以上削減。
  • 謝辞 — 詳細なクラッシュログと情報を提供してくださった Issue #7 の報告者に心より感謝申し上げます!

Install / 安装

dsh plugin --profile web add dsh-easyrewrite

📦 GitHub:https://github.com/Renzic-Stone/DSH-EasyRewrite | npm:dsh-easyrewrite@2.5.2
⭐ 觉得好用请给个 star!

✨ v2.5.1 — 底部暂存草稿隔离 · 拖拽协同放大 · 首条撤回修改修复

Choose a tag to compare

@Renzic-Stone Renzic-Stone released this 13 Sep 18:19

✨ v2.5.1 — 底部暂存草稿隔离 · 拖拽协同放大 · 首条撤回修改修复

新增

  • 底部输入框暂存草稿与拖拽分流
    • 气泡编辑期间拖入图片支持智能分流:释放到气泡加入当前编辑修改集合,释放到底部输入框即时添加到底部附件区并进入暂存跟踪
    • 两阶段执行与草稿隔离保留:气泡点击“确定”重发时,自动捕获底部输入框当前的文字草稿与暂存图片;新会话启动后,Phase 1 仅自动提交气泡修改消息(绝不串发底部的图与草稿),Phase 2 在提交完成后自动将底部暂存的图片和文本草稿完整回填到新会话输入框中,充当安全的暂存缓冲区
    • 取消保护:若中途取消气泡编辑(点击取消或 Esc),底部已添加的图片与草稿依然完好保留

改进

  • 底部输入框与虚线框协同放大(2.5x)
    • 气泡编辑拖拽激活时,底部输入框自身协同平滑向上舒展放大至 2.5 倍(单行由约 32px 舒展至 80px~90px),提供宽敞充裕的投递面积;松手或移出时平滑回弹还原
    • 虚线框严丝合缝贴合在放大的输入框卡片内部(上距 6px,下贴工具栏上方 4px),绝对不超出输入框卡片;底部的模型选择 chip、发送按钮等所有操作 UI 100% 完整露在外面,不被遮挡
    • 增加物理光标坐标检测(isPointInBottomDz),大幅提升拖拽悬停变蓝与释放落点的响应灵敏度

修复

  • 修复对话首条消息撤回后在底部修改内容发送不生效:首条消息被撤回后,用户在底部输入框进行的修改发送时被原草稿冲掉、发送的仍是原消息的问题已彻底修复(readCurrentComposerText 引入真实 DOM contenteditable 物理内容读取优先与 projection 层兜底)

EN summary

  • New: Bottom composer staging area & drop split — while editing a message bubble, dragging image files supports intelligent dispatch: dropping on the bubble modifies the message, while dropping into the bottom composer stages the images for future use.
  • Two-phase send & draft isolation — upon confirming the bubble edit, current composer text and staged images are captured. In the newly opened session, Phase 1 only submits the bubble edit (no draft leakage); Phase 2 safely restores the staged images and text draft back into the bottom composer once submission finishes.
  • Improved: 2.5x synchronized expansion for bottom composer — dragging expands the bottom composer smoothly to 2.5x height (from ~32px to 80-90px for single-line input), providing generous drop tolerance. The dashed dropzone fits snugly inside without overflowing, while bottom toolbars (model chips, send button) remain fully accessible.
  • Fixed: edits in bottom composer lost on first user message recall — fixed an issue where recalling the first message and editing text in the bottom composer sent the original text instead of edited content (readCurrentComposerText now prioritizes physical DOM contenteditable innerText).

日本語

  • 新機能:下部入力欄の下書き一時保管&ドロップ振り分け — バブル編集中に画像ファイルをドラッグすると、バブル領域と下部入力欄で振り分けが可能になりました。下部へドロップした画像は送信されず、新しい会話の下部入力欄にそのまま保持されます。
  • 2段階送信と下書き隔離 — バブル編集の「確定」時、下部の下書きと画像を退避。新しいセッションでバブルの編集内容のみを自動送信した後、下書きと画像を安全に下部入力欄へ復元します。
  • 改善:下部入力欄の2.5倍連動拡大 — ドラッグ時に下部入力欄が2.5倍(約80〜90px)へ滑らかに拡大。破線フレームが入力枠内にぴったり収まり、モデル選択や送信ボタンを遮りません。
  • 修正:最初のメッセージ撤回後に下部で行った編集が反映されない不具合 — DOM物理要素のテキスト読み取り優先順位を修正し、編集内容が確実に送信されるよう改善しました。

Install / 安装

dsh plugin --profile web add dsh-easyrewrite

📦 GitHub:https://github.com/Renzic-Stone/DSH-EasyRewrite | npm:dsh-easyrewrite@2.5.1
⭐ 觉得好用请给个 star!

✨ v2.5.0 — 拖入虚线框 · 撤回条重塑 · 设置卡片修复

Choose a tag to compare

@Renzic-Stone Renzic-Stone released this 09 Sep 04:22

✨ v2.5.0 — 拖入虚线框 · 撤回条重塑 · 设置卡片修复

新增

  • 拖入虚线框(dropzone):气泡编辑时把图片文件直接拖入窗口,图片预览区浮现虚线框与毛玻璃(backdrop-filter: blur(12px)),悬停变蓝高亮,松手即导入为编辑图片
  • 平时图片行与输入框等宽、4 张/行直接显示;拖入时图片微缩进框(透视收缩过渡)
  • 四档编辑宽度全适配:紧凑/标准按框宽均分 4 张;扩展/自定义固定尺寸无限平铺铺满再换行;无图消息显示占位框;紧凑档短文案(三语)
  • 撤回条调试台:调试模式(localStorage dsh-easyrewrite:debug=1)下控制台可用 __dshEasyRewrite.bar(get / set / diagnose / export / reset)实时调参

修复

  • 修复设置卡片点击后消失(issue #6,React #310):撤回原文显图开关的 useState 位于展开分支的条件 IIFE 中,展开瞬间 hook 数量漂移导致组件崩溃——已提升到组件顶层无条件区。感谢 @cmj799 的详细报告!
  • 修复扩展模式编辑框宽度不足:写死的 748px 改为撑满消息行,左侧与其他文字对齐
  • 修复扩展模式图片预览过大:找回丢失的固定尺寸分支(84px,拖入态 78px)

改进

  • 撤回"正在修改"条重塑:× 取消键以 SVG <circle> 重绘(几何级圆,免疫宿主按钮样式覆盖),× 字形改两条对角线几何居中;对齐锚点改为第一张预览图左缘,偏移按消息类型固化(带图 -7 / 纯文字 -16)
  • "正在修改"标签与 × 分别对齐输入框左右边缘

EN summary

  • New: drag-and-drop dropzone in bubble edit — drop image files onto the window while editing: a dashed frame with frosted glass (backdrop-filter: blur(12px)) appears over the preview rail, turns blue on hover, and drops import as edit images. The idle rail is input-box-wide at 4 per row; images shrink into the frame while dragging ("same layout, dual size"). All four width modes supported; placeholder frame for messages without images.
  • Fixed the settings card disappearing on click (issue #6, React #310) — a useState lived inside a conditional IIFE in the expand branch, causing hook-count drift on expand; hoisted to the top level. Thanks @cmj799 for the excellent report!
  • Fixed extended-mode editor width — replaced a hardcoded 748px relic with full-row width, left-aligned with other text; fixed oversized thumbnails in extended mode (84px, 78px while dragging).
  • Recall banner polish — the × button is redrawn as an SVG circle (immune to host styles), anchored to the first preview thumbnail with per-type offsets (-7 with images / -16 text-only), plus a debug console (__dshEasyRewrite.bar) under debug mode.

日本語

  • 新機能:バブル編集中の画像ドラッグ&ドロップ(dropzone) — 編集中に画像ファイルをウィンドウへドラッグすると、プレビュー領域に破線フレームとすりガラス効果が表示され、ホバーで青く強調、ドロップで画像を追加します。
  • 修正:設定カードがクリックで消失する問題(issue #6 / React #310) — 条件分岐内 IIFE の useState によるフック数ドリフトを修正(トップレベルへ移動)。詳細な報告ありがとうございます @cmj799
  • 「変更中」バーのリファイン:× ボタンを SVG 円で再描画、プレビュー左端へのアライン調整、デバッグコンソール追加。

Install / 安装

dsh plugin --profile web add dsh-easyrewrite

📦 GitHub:https://github.com/Renzic-Stone/DSH-EasyRewrite | npm:dsh-easyrewrite@2.5.0
⭐ 觉得好用请给个 star!

🛠️ v2.4.1 — rc.1 联测体验修复

Choose a tag to compare

@Renzic-Stone Renzic-Stone released this 06 Sep 18:28

🛠️ v2.4.1 — rc.1 联测体验修复

修复

  • 修复撤回待定态 × 取消后图片残留在输入框:清理流程拆独立防御段并修复输入清单读取(dsh 0.1.2 下 props.useInput 为真实 hook,事件时调用会抛 React #321 被吞——改读 input 门面实例字段)
  • 修复反复进出气泡编辑导致图片叠加:每次进入编辑以干净图片集合起步
  • 撤回待定展开态结构还原原生:图片独立元素(原版观感)在上、文字独立灰字气泡在下,不再用大一统灰底包裹;展开查看原文时可选显示图片(设置开关,默认开)
  • 更新块"不再显示"改为灰底药丸按钮;展开原文行高对齐(消除半行空隙)

改进

  • × 取消清理流程全步骤日志(读取/逐项删除/prune 各段独立留痕)

EN summary

  • Fixed images lingering in the composer after cancelling a pending recall — cleanup split into independently guarded steps with full logging; input list reads migrated off the real hook (React #321) onto the input facade instance.
  • Fixed image stacking when re-entering bubble edit repeatedly — each entry starts from a clean image set.
  • Pending-recall expanded view restored to native structure — images as an independent element on top, grey-text bubble below; optional image display (setting, on by default).
  • "Don't show again" pill styling; aligned expanded line height.

日本語

  • 取り消し待ちのキャンセル後に画像が入力欄へ残る問題を修正(クリーンアップを独立防御ステップへ分解、入力リスト読み取りを input ファサード実体へ移行)。
  • バブル編集の再入場で画像が重なる問題を修正(進入毎にクリーンな画像セットから開始)。
  • 取り消し待ちの展開表示をネイティブ構造へ復元(画像は独立要素が上、グレー文字バブルが下)。

Install / 安装

dsh plugin --profile web add dsh-easyrewrite

📦 GitHub:https://github.com/Renzic-Stone/DSH-EasyRewrite | npm:dsh-easyrewrite@2.4.1
⭐ 觉得好用请给个 star!

🎛️ v2.4.0 — 适配 dsh 0.1.2 · API 适配层重构

Choose a tag to compare

@Renzic-Stone Renzic-Stone released this 06 Sep 12:54

🎛️ v2.4.0 — 适配 dsh 0.1.2 · API 适配层重构

⚠️ 宿主要求

  • 本版本要求 dsh 0.1.2-rc.1+,不再兼容 dsh 0.1.1-rc.2 及更早宿主——0.1.1-rc.2 用户请停留 2.3.1(该线最终版)——0.1.1-rc.2 及更早宿主用户请停留 2.3.1:该版本功能完整可用,仅不再追加新功能(README 同步说明)

适配

  • 会话快照访问迁移至新一代会话架构(useChat,快照形状 order + keyed nodes 原样)
  • 图片 URL 解析通道迁移(imageUrl,撤回/编辑/刷新恢复全链路)
  • Workspace 导航迁移(uiWorkspace,首条消息重置路径)
  • 模型切换、图片桥接、版本翻页器全链路已迁移至新 API;优化 API 相关算法,适配层全面重构

更新块

  • dsh 宿主版本检测:dsh 过低→提醒升级并附一键复制命令;dsh 过新→提示适配评估中
  • "每日检查更新"首次启动显示一次性强提醒(建议开启,可不再显示)

修复

  • 宿主撤回边界解析兼容 dsh 0.1.2 事件 API(snapshotEvents),修复 /bubble/recall 500
  • 强提醒"不再显示"按钮交互修复

EN summary

  • Requires dsh 0.1.2-rc.1+ — session snapshot access, image URL resolution, and Workspace navigation migrated to the new-generation API. Users on dsh 0.1.1-rc.2 and older hosts, please stay on 2.3.1 — the final release of that line (fully functional, no further features). Update block now detects the host dsh version (upgrade reminder when too old, evaluation notice when too new) with a one-time daily-check reminder. Host boundary parsing compatible with the dsh 0.1.2 events API.

日本語

  • dsh 0.1.2-rc.1+ が必要です。バブル編集内のモデル/推論レベル切替、画像URL解決、Workspaceナビゲーションを新APIへ移行。 0.1.1-rc.2 以前のホストのユーザーは 2.3.1 に留まってください——このラインの最終版です(機能は完全、新機能は追加されません)。更新ブロックは dsh バージョン検出対応。ホスト境界解析は dsh 0.1.2 イベント API に対応。

Install / 安装

dsh plugin --profile web add dsh-easyrewrite

📦 GitHub:https://github.com/Renzic-Stone/DSH-EasyRewrite | npm:dsh-easyrewrite@2.4.0
⭐ 觉得好用请给个 star!

🚨 v2.3.1 — 修复 dsh 0.1.0-rc.6 安装后白屏(P0)

Choose a tag to compare

@Renzic-Stone Renzic-Stone released this 30 Aug 00:02

🚨 v2.3.1 — 修复 dsh 0.1.0-rc.6 安装后白屏(P0 热修)

修复

  • 修复 dsh 0.1.0-rc.6 上安装后 Web 白屏(issue #4):settings.plugin.item 槽位注册同时提供 keyid——rc.6 该槽为 list 类型校验(要求 options.id,缺失即 loader apply 失败→白屏),rc.7+ 为 keyed 类型(要求 options.key);此前只写 key 在 rc.6 必然注册失败
  • 2.3.0 用户升级本版即可;rc.7+/0.1.1-rc.2 用户不受影响,但也建议升级

EN summary

  • Fixed Web white-screen on dsh 0.1.0-rc.6 (issue #4): the settings.plugin.item slot registration now provides both key and id — rc.6 validates it as a list slot (requires options.id; missing means loader apply failure → white screen), while rc.7+ treats it as keyed (requires options.key). Registering with key only always failed on rc.6.
  • v2.3.0 users: just upgrade. rc.7+/0.1.1-rc.2 users were unaffected but should upgrade anyway.

日本語

  • dsh 0.1.0-rc.6 でのインストール後ホワイトスクリーンを修正(issue #4):settings.plugin.item スロットの登録に keyid を両方指定——rc.6 ではこのスロットは list 型として検証され(options.id が必須、欠落すると loader apply 失敗→白画面)、rc.7+ では keyed 型(options.key が必須)。key のみの登録は rc.6 で必ず失敗していました。
  • v2.3.0 ユーザーは本バージョンへアップグレードしてください。rc.7+/0.1.1-rc.2 ユーザーは影響なしですが、アップグレード推奨。

Install / 安装

dsh plugin --profile web add dsh-easyrewrite

📦 GitHub:https://github.com/Renzic-Stone/DSH-EasyRewrite | npm:dsh-easyrewrite@2.3.1
⭐ 觉得好用请给个 star!

🎛️ v2.3.0 — 气泡框编辑模型切换 · 操作动线精简

Choose a tag to compare

@Renzic-Stone Renzic-Stone released this 26 Aug 01:45

🎛️ v2.3.0 — 气泡框编辑模型切换 · 操作动线精简

新功能

  • 气泡框编辑直接切换模型与推理等级:编辑框左下角新增官方同款两级菜单(数据与下方输入框同源)——不动即保持原模型,改选则随本次重发生效;覆盖普通重发与首条消息重置双路径;模型无推理能力时自动隐藏「推理等级」行。目前市面竞品完全无同类功能

优化

  • 优化性能体验,精简操作动线:重发调模型从「先发再切」合并为「编辑时一步到位」
  • 菜单视觉全面对齐官方 ModelSelect(菜单背景 / 边框 / 阴影 / 选项行 / 药丸 chip / 箭头动画)

修复

  • 修复长模型名挤压取消/确定按钮导致竖排换行的问题(名称自动省略号)

EN summary

  • Switch model & reasoning effort right inside bubble edit: an official-style two-level menu at the bottom-left of the edit box (same data source as the composer). Leave it untouched to keep the original model; pick one and it applies to this resend — including the first-message reset path. The reasoning-effort row hides automatically for models without it.
  • Streamlined workflow: tune the model while editing instead of switching after sending.
  • Visuals aligned with the official ModelSelect (menu background / border / shadow / option rows / pill trigger / chevron animation).
  • Fixed long model names squeezing the Cancel/Confirm buttons (names now ellipsize).

日本語

日本語

新機能

  • バブル編集内でモデルと推論レベルを直接切り替え:編集ボックス左下に公式同様の 2 段階メニューを追加(データは下の入力欄と同一ソース)——触らなければ元のモデルを維持、選べば今回の再送に反映。通常の再送と先頭メッセージのリセット経路の両方に対応。推論レベル非対応のモデルでは「推論レベル」行を自動非表示。競合に同機能なし

改善

  • 体験とパフォーマンスを最適化し、操作の流れをシンプルに:再送時のモデル変更が「送ってから切り替え」から「編集中にワンステップ」へ
  • メニューの見た目を公式 ModelSelect に全面統一(背景 / 枠線 / 影 / 選択行 / 薬丸チップ / シェブロンアニメーション)

修正

  • 長いモデル名でキャンセル/確定ボタンが縦書きになる問題を修正(名前は自動的に省略表示)

Install / 安装

dsh plugin --profile web add dsh-easyrewrite

📦 GitHub:https://github.com/Renzic-Stone/DSH-EasyRewrite | npm:dsh-easyrewrite@2.3.0
⭐ 觉得好用请给个 star!

🖼️ v2.2.0 — 拖入加图 · 编辑进度抗刷新 · 重发保留模型挡位

Choose a tag to compare

@Renzic-Stone Renzic-Stone released this 25 Aug 23:13

🖼️ v2.2.0 — 拖入加图 · 编辑进度抗刷新 · 重发保留模型挡位

新功能

  • 气泡框编辑支持拖入加图:打开气泡框编辑后,把图片文件拖到页面任意位置即可加入编辑——全程拦截、不会漏进下方输入框;与 × 删除、粘贴加图共同构成完整的编辑态图片管理。目前市面竞品完全无同类功能
  • 编辑进度抗刷新:编辑中的文字与图片集合随会话持久化——刷新页面后自动回到该消息的编辑态,原图与已加入的图原样恢复(超大图片字节快照自动降级为仅本次会话有效,原图恢复不受影响)

修复

  • 修复编辑态拖入图片时页面卡死在 DSH 全屏拖拽提示层的问题
  • 撤回 / 编辑重发保留当前模型与思考挡位(走官方 selectModel 通道),不再回落全局默认
  • 修复个别场景下“确定后跳转新对话但消息未发出”:自动发送改为等待输入区就绪后执行,中断自愈可重试;全链路日志留痕

EN summary

  • Drag & drop images into bubble edit: drop image files anywhere while bubble-editing — fully intercepted, never leaks into the composer. Together with × delete and paste-add, edit-mode image management is complete.
  • Edits survive refresh: an in-progress bubble edit (text + images) persists per session and restores automatically after a page reload.
  • Fixed the page getting stuck on DSH's fullscreen drag overlay when dragging images during bubble edit.
  • Recall / edit / reset resends now restore your model & reasoning-effort selection instead of global defaults.
  • Fixed a rare case where confirming an edit opened the new conversation without sending the message; auto-send now waits for composer readiness and retries safely.

日本語

日本語

新機能

  • バブル編集でのドラッグ&ドロップ加画像:バブル編集中ならページのどこにドロップしても画像を追加——全行程をインターセプトし、下の入力欄へ漏れません。× 削除・貼り付け追加と合わせて編集中の画像管理が完結。競合に同機能なし
  • 編集進捗はリフレッシュに強い:編集中のテキストと画像セットはセッション単位で永続化——ページ更新後も自動でそのメッセージの編集状態に復元(超大画像のバイトスナップショットは自動降級で今回のセッション限定、元画像の復元には影響なし)

修正

  • バブル編集中に画像をドラッグすると DSH の全画面ドラッグオーバーレイで固まる問題を修正
  • 取り消し / 編集再送時に現在のモデルと推論レベルを保持(公式 selectModel 経由)、グローバル既定へ落ちなくなりました
  • 「確定後に新会話へ飛んだがメッセージが送信されない」稀なケースを修正:自動送信は入力欄の準備完了を待って実行、中断時は自己修復してリトライ。全経路をログに記録

Install / 安装

dsh plugin --profile web add dsh-easyrewrite

📦 GitHub:https://github.com/Renzic-Stone/DSH-EasyRewrite | npm:dsh-easyrewrite@2.2.0
⭐ 觉得好用请给个 star!

v2.1.0 — 🖼️ 带图片消息气泡框编辑完整支持

Choose a tag to compare

@Renzic-Stone Renzic-Stone released this 23 Aug 02:02

v2.1.0 — 🖼️ 带图片消息气泡框编辑完整支持

新功能

  • 带图片消息的气泡框编辑:点击带图消息气泡进入编辑后,图片缩略图保持在编辑框上方(官方 Gallery 渲染,支持 lightbox 大图预览)
  • 确认编辑后图片随修改文本一并发出——与撤回键路径共享同一套桥接链路

English

  • Bubble edit for image messages: click a bubble with images to enter edit mode — image thumbnails stay above the editor (rendered by official ImageGallery with lightbox support)
  • On confirm, images are sent together with the edited text via the same bridge pipeline as the recall-key path

日本語

  • 画像つきメッセージのバブル編集:画像つきバブルをクリックで編集モードへ——サムネイルはエディタ上部に保持(公式 ImageGallery 描画、lightbox 拡大対応)
  • 確定すると画像が修正テキストと一緒に送信——取り消しキー経路と同じブリッジ方式を共有