dsh-easyrewrite # DSH-EasyRewrite [中文](README.md) | [English](README.en.md) npm version license stars downloads dshfind `#dsh` `#deepseek-harness` `#撤回` `#バブル編集` `#取り消し` `#バージョンページャー` `#i18n` `#多言語`
**DeepSeek Harness Web で自分のメッセージをインライン編集・撤回——遅延・シームレス・データ損失ゼロ。** 自分のメッセージバブルをクリックすればその場で編集、コピーキーの隣の撤回キーでそのメッセージと以降の内容をすべて撤回できます。**すべての変更はあなたが本当に確認した後にのみ発生します**——「確定」(編集)または「送信」(撤回)を押すまでは、会話・モデルコンテキスト・セッションログは一切変わりません。 > DeepSeek Harness Web(**2.4.0 は dsh 0.1.2-rc.1+ が必要**。0.1.1-rc.2 以前のホストのユーザーは **2.3.1** に留まってください——このラインの最終版で、機能は完全に動作しますが新機能は追加されません)対応。公式拡張ポイントのみを使用し、DSH ソースコードは変更しません。 --- ## 実装済み機能 ### 撤回(Recall)——エンドツーエンド完了 - **撤回キー**:各ユーザーメッセージの公式コピーキーの隣。 - **インライン確認カプセル**(dsh スタイルのグレーカプセル:`このメッセージと後続の x 件の質問を撤回しますか?` + 白地黒文字の「確定/キャンセル」)。 - **遅延コミット**:確認は入力欄への回帰のみ。実際の切り詰めは「送信」を押したときに行われます。途中で dsh を閉じても会話は無変更。 - **「変更中」バー**:入力欄内部(区切り線 + ラベル + 円形 ×);× で撤回をキャンセルし元の下書きを復元。 - **上書き / 結合**モード:上書きモードでは送信・キャンセル後も元の下書きが復元——情報ゼロ損失。 - **削除件数のリアルタイム集計**(ユーザー質問のみ、ON/OFF 可);0 件のときは「このメッセージを撤回しますか?」を表示。 - **セッションごとに 1 つの保留操作**、下書きはセッション単位で永続化(会話切替・リフレッシュでも失われません)。 - **シームレス置換**:送信で撤回が実行——元セッションは**アーカイブ**され、**同名の新セッション**(対象メッセージより前で切り詰め)が引き継ぎ、編集済みテキストが自動送信されます。"元の会話が編集された"感覚で、"新しい会話が出てきた"という断絶はありません。 ### インライン編集(Rewrite)——実装済み(M2) - バブルをクリック → その場で編集(元の Markdown 原文を保持)、Esc でキャンセル / Ctrl+Enter で確定。 - **3 段階の編集幅**(コンパクト:バブル幅から始まり上限 360px / スタンダード:固定 360px / エクステンド:748px 最大)、自動拡張 + 内部スクロール。 - 編集モードでは撤回キーを維持(コピーキーは非表示);「確定」= truncate 編集再送:切り詰め → 元セッションをアーカイブ → 同名セッション → 編集済みテキストを自動送信。 - 編集下書きはセッション単位で永続化(会話切替・リフレッシュで復元)。 - **画像つきメッセージの Rewrite 完全対応(取り消しキー+バブル編集の両パス)**:確定すると画像が修正テキストと一緒に再送。バブル編集中は × で削除、貼り付け/ドラッグ&ドロップで追加、モデルと推論レベルもその場で切り替え可能。編集途中の進捗はページ更新後も保持。競合に同機能なし。 ### 設定(Settings)——実装済み(M3) - **設定 → プラグイン → プラグイン設定**:公式スタイルの折りたたみカード(タイトルをクリックで開閉)、UI 言語に追従(中文 / English / 日本語)。 - 全オプション即時反映:バブル編集スイッチ、バブル編集オフ時の撤回キー表示、撤回確認カプセル、撤回表示モード(シンプル / ミニマル / インフォ)、集計対象(ユーザー質問のみ)、入力欄反映モード(上書き / 結合)、編集幅(コンパクト / スタンダード / エクステンド / カスタム)。 ### 下書き自動バックアップ——実装済み(M3) - 保留中の下書きが 10 秒以上放置されるとローカルファイルに自動バックアップ(以降 5 秒ごとに更新);「確定 / 送信」で処理完了後に削除。 - 保存先:`$DSH_HOME/dsh-easyrewrite/backups/<セッションID>.json`。 - 復元はローカルに保留状態がない場合のみ——編集中の下書きを上書きすることはありません。 ### バージョンページャー(< X >)——実装済み(M3) - 撤回/編集の再送後、その問いの最後の回答の操作エリアに **`‹ X/N ›`** が表示されます。クリック(または ←/→ キー)でバージョンを切替——**後続コンテキストは表示中のバージョンに追従**します。 - **アーカイブ交換**:切替 = 対象を復元 → 開く → ファミリーの他バージョンをすべてアーカイブ——**ワークスペースには常にアクティブな 1 つのバージョンのみ**、シームレスな切替です。 - 切替時も**ビューポートは固定**(公式 `data-chat-anchor-key` で復元、スクロールが飛ばない)。 - 全てアーカイブしても **設定 → プラグイン → プラグイン設定 → 「バージョン」セクション** から復元・オープンできます。 ### 撤回ショートカット——実装済み(M3、Beta) - 設定内の**マスタースイッチは初期オフ**(他プラグインとのキー競合を回避)。ON にすると**任意のキーを録音**可能(修飾キーが最低 1 つ必要)。 - 発動条件:入力欄が非フォーカスで、直近のメッセージが自分のもの——そのメッセージの撤回キーをクリックするのと同じ動作(確認カプセルも通常どおり表示)。 --- ## 類似プラグインとの違い | 機能 | dsh-easyrewrite | 他の撤回・編集プラグイン | | :--- | :---: | :--- | | 撤回(Recall) | ✅ | 基本機能 | | **シームレス置換**("ネイティブ機能のよう"に感じる、違和感のない再送) | ✅ | 基本機能ですが、こちらが**より洗練** | | **遅延コミット**(確認後にのみ context を変更、途中で閉じても変更なし) | ✅ | 一部の競合は即時変更し、キャッシュヒット/context 問題を引き起こす | | **バブルインライン編集(Rewrite)** | ✅ | **競合に同機能なし** | | **バージョンページャー < X >**(履歴切替、無数の Chatbox ユーザーに検証された**黄金デザイン**) | ✅ | **競合に同機能なし** | | **下書き永続化 + 自動バックアップ + 異常時復元**(思考の結晶を守る充実した復元ロジック) | ✅ | **競合に同機能なし** | | **編集再送で添付(画像)保持** | ✅ | 競合に同機能なし | | **公式拡張ポイントのみ**(ソースパッチなし、アンインストールで完全復元) | ✅ | 競合はソースパッチ依存——アンインストール困難、依存複雑 | | 3言語 UI と i18n | ✅ | まともな i18n はほぼなし。多言語をネイティブ対応し、3 言語プリセット | | **全機能を個別にオフ可能** | ✅ | **競合でこれより優れたものはない** | --- ## 設計哲学 **1. シンプル・使いやすい・互換性が高い(Simple & Compatible)** - 説明書いらずの直感的操作:**バブルをクリックして編集、コピーキーの隣で撤回**——新しい概念や入口はありません。 - デフォルトが最適解:インストールしてすぐ使え、設定不要。 - 互換性はハードな約束:公式拡張ポイントのみを使用(keyed スロット、公式 fork RPC、公式コンポーネント・デザイントークン)、**ソースに触れず、壊れやすい内部 API に依存せず**、DSH のアップデートには積極的に追従。 - アンインストールで完全復元:設定の残骸も公式ファイルの変更もなし。 **2. オリジナル体験の維持、シームレス・無感覚(Faithful, Seamless & Invisible)** - UI は dsh のネイティブスタイル(グレーブルー、角丸、カプセル、公式アイコン)、ダーク/ライトテーマ対応——"プラグインのスキン"ではなく公式機能のようです。 - 既存の操作はそのまま:コピーキー、ホバー時刻、バブル外観——すべて維持。 - **無感覚**:日常使用ではプラグインの存在をほぼ感じません——機能はあるべき場所にあり、結果は直感どおり。ポップアップで邪魔せず、リズムを崩しません。 - **遅延コミット**が体験の基盤:編集開始・撤回確認はローカルの下書き状態に過ぎず、**context は「確定」(rewrite)または「送信」(recall)でのみ変更**。途中で dsh を閉じても何も変わりません。 - **シームレス置換**:撤回後は"元の会話が編集された"ように感じます——元セッションはアーカイブ、同名セッションが引き継ぎ、編集済みテキストを自動送信。"新しい会話が現れた"という分断はありません。 - **バブル編集(近日公開)**:クリックでその場編集、見たままが送信内容——同じシームレス哲学の自然な延長です。 **3. 永続化と誤操作防止、データゼロ損失(Persistent & Accident-proof)** - 編集/撤回の下書きは**セッション単位で永続化**:会話切替・リフレッシュ・dsh 再起動でも進捗はそのまま——"書いたものが消えた"はありません。 - 上書きモードでは、送信・キャンセル後も元の下書きが復元——**どの操作経路でもデータは失われません**。 - 保留中の下書きが長時間放置されるとローカルファイルに自動バックアップ(処理完了後に削除)——極端なケースでもセーフティネット。 - 破壊的操作にはすべて確認と取り消しの道:確認カプセル、× キャンセル、セッションごと 1 保留——**ミスは取り消せ、データは失われない**。 **4. 充実したログ体制(Log Everything, Diagnose Fast)** - 全ステップを打点:client の各重要ステップ(ロード、確認、保留、送信フック、fork、resume)が自動で host に報告され、`$DSH_HOME/dsh-easyrewrite.log` に統一記録。 - 統一フォーマット(JSON 行:時刻 / レベル / タグ / メッセージ / データ)——再現 1 回で特定可能、問題の説明を何度も繰り返す必要はありません。 - host 自身の挙動も同じログに(リクエスト、拒否理由、例外)——前後端が一つのトレースで照合できます。 - ログはローカルのみ、アップロードは一切なし。 **5. 継続更新、積極的な互換対応(Keep Moving)** - DSH のバージョン遷移(rc.x → 安定版)に追従、上流 API の変化には即時対応。 - セマンティックバージョニング + CHANGELOG、破壊的変更は事前告知。 - コミュニティ駆動:issue / PR に積極対応、新しいアイデアやシナリオをロードマップに継続反映。 --- ## インストール ```sh # npm 公開済み(推奨) dsh plugin --profile web add dsh-easyrewrite # または GitHub から dsh plugin --profile web add github:Renzic-Stone/DSH-EasyRewrite ``` `dsh web` を再起動し、ページを `Ctrl+Shift+R` でハードリフレッシュしてください。 > **撤回タイミングについて**:DSH の fork は閉じたターン境界でのみ切り詰め可能なため、未終了ターン内のメッセージは一時的に撤回できません——返信完了後に撤回してください。(画面に「このメッセージのターンがまだ終了していません…」と表示されます) --- ## デバッグ client の各ステップは host に報告され、統一ログに書き込まれます: ``` $DSH_HOME/dsh-easyrewrite.log # 例: ~/.dsh/dsh-easyrewrite.log ``` JSON 行形式:`{ t, level, tag, message, data }`。 --- ## プロジェクト構成 ``` dsh-easyrewrite/ ├── lib/index.js # host half:境界解決 + /bubble/recall、/bubble/log ├── src/client.src.js # client テンプレート(アイコンはビルド時にインライン化) ├── assets/ # 撤回/編集アイコン(PNG、ダークモードは CSS invert で自動対応) ├── build.mjs # assets → data-URL → lib/client.js ├── DESIGN.md # 完全なインタラクションデザイン(v1.0、20 の製品決定) ├── PROJECT_PLAN.md # ロードマップ、アーキテクチャ、git ワークフロー └── docs/ # api-facts、m0-verify ``` --- ## License MIT