dsh-input-traffic 0.2.9 → 0.2.10-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,78 @@
1
+ # 変更履歴
2
+
3
+ `dsh-input-traffic` の主な変更とバグ修正を記録します。バージョンはセマンティックバージョニングに従います(`dsh plugin --profile web add dsh-input-traffic` でインストール)。
4
+
5
+ - [English changelog](./CHANGELOG.md)
6
+ - [日本語 changelog](./CHANGELOG.ja.md)
7
+ - [한국어 changelog](./CHANGELOG.ko.md)
8
+
9
+ ## 0.2.8 — 2026-08-24
10
+
11
+ ### 追加:日夜モード自動適応
12
+
13
+ - キュー枠(待機エリア dock)と凍結ボタンの配色を手描き `--dsw-alias-*`(dsh 公式セマンティックトークン)に変更。
14
+ - 効果:システムダークモードや dsh ダークテーマ(`body[data-ds-dark-theme]`)で自動的に**ダークグレー背景+白文字反転**に切替。設定不要。
15
+
16
+ ## 0.2.6 — 2026-08-19
17
+
18
+ ### バグ修正:ドラッグ開始の互換性(一部ブラウザでドラッグ不可)
19
+
20
+ - **現象**:一部ブラウザでキュー行をドラッグできない。
21
+ - **原因**:`dragStart` に `effectAllowed='move'` のみ設定、`dataTransfer.setData()` 未呼び出し。
22
+ - **修正**:通常キュー行と凍結キュー行の `dragStart` に `setData('text/plain', index)` を追加。
23
+
24
+ ## 0.2.5 — 2026-08-19
25
+
26
+ ### バグ修正:凍結キューのドラッグ並べ替え不可
27
+
28
+ - **現象**:凍結時にキュー行は上へ/下へボタンのみで並べ替え可能、ドラッグ無効。
29
+ - **原因**:凍結リスト `li` に `draggable` と drag イベント未設定。
30
+ - **修正**:凍結行に `draggable` + `dragStart/dragOver/drop/dragEnd` を追加。
31
+
32
+ ## 0.2.4 — 2026-08-19
33
+
34
+ ### バグ修正:凍結時にキューがロックされる(順序/内容/挿入モード全て変更不可)
35
+
36
+ - **現象**:凍結状態でキューの編集・削除・上へ/下へ・赤/黄/緑全部無効。
37
+ - **原因**:凍結リストは読み取り専用レンダリング(操作ボタンなし)。
38
+ - **修正**(凍結とキューの完全疎結合):
39
+ - 凍結キュー各行に通常時と同等の編集/削除/上へ/下へを提供;
40
+ - 凍結キュー各行に**赤/黄/緑挿入段階**ボタンを提供;
41
+ - 恢復時に各条の予定段階で実行(赤段階は `cancel()` 後送信)。
42
+
43
+ ## 0.2.3 — 2026-08-19
44
+
45
+ ### バグ修正:凍結時に待機キューが非表示
46
+
47
+ - **現象**:凍結後、待機キューが消失し、凍結されたメッセージの閲覧・修正が不可。
48
+ - **原因**:凍結実装がキューメッセージを `remove` で store に移動、dock レンダリング条件が `return null` に。
49
+ - **修正**:
50
+ - レンダリング条件に `!frozen` を追加;
51
+ - 凍結リストを freeze-store の `pending` からレンダリング;
52
+ - freeze-store に可変操作を追加。
53
+
54
+ ## 0.2.2 — 2026-08-19
55
+
56
+ ### 追加:清空確認の明示的キャンセルボタン
57
+
58
+ - 凍結キューの清空 2 段階確認に「キャンセル」ボタンを追加(3 秒超時で自動還元)。
59
+
60
+ ## 0.2.1 — 2026-08-18
61
+
62
+ ### 追加:清空 2 段階確認
63
+
64
+ - 「取り消して全消去」初回クリックで赤「確認清空?」を表示、再クリックで実行。誤触による全消去を防止。
65
+
66
+ ## 0.2.0 — 2026-08-18
67
+
68
+ ### 追加(dsh-queue-plus から借用)
69
+
70
+ - **ドラッグ並べ替え**:キュー行を直接ドラッグして順序調整(ネイティブ HTML5 DnD、ランタイム依存なし)。
71
+ - **並べ替え並行保護**:再構築中にメッセージがエージェントに取得済みの場合、即座に中止し再送信なし。
72
+ - **折りたたみ状態記憶**:待機エリアの収縮状態を localStorage に永続化。
73
+ - **清空 2 段階確認**(0.2.1 参照)。
74
+
75
+ ### エンジニアリング
76
+
77
+ - **TDD + Lint**:ESLint flat config、`npm run tdd`(vitest watch)、`npm run verify` 一体化ゲート。
78
+ - テスト 32 → 43 項目。
@@ -0,0 +1,78 @@
1
+ # 변경 기록
2
+
3
+ `dsh-input-traffic`의 주요 변경 사항과 버그 수정을 기록합니다. 버전은 시맨틱 버저닝을 따릅니다(`dsh plugin --profile web add dsh-input-traffic`로 설치).
4
+
5
+ - [English changelog](./CHANGELOG.md)
6
+ - [日本語 changelog](./CHANGELOG.ja.md)
7
+ - [한국어 changelog](./CHANGELOG.ko.md)
8
+
9
+ ## 0.2.8 — 2026-08-24
10
+
11
+ ### 추가: 주야 모드 자동 적응
12
+
13
+ - 대기열 프레임(대기 영역 dock)과 동결 버튼의 색상을 dsh 공식 시맨틱 토큰(`--dsw-alias-*`)으로 변경.
14
+ - 효과: 시스템 다크모드 또는 dsh 다크 테마(`body[data-ds-dark-theme]`)에서 자동으로 **다크그레이 배경 + 흰색 반전 텍스트**로 전환. 설정 불필요.
15
+
16
+ ## 0.2.6 — 2026-08-19
17
+
18
+ ### 버그 수정: 드래그 시작 호환성(일부 브라우저에서 드래그 불가)
19
+
20
+ - **현상**: 일부 브라우저에서 대기열 행을 드래그할 수 없음.
21
+ - **원인**: `dragStart`에 `effectAllowed='move'`만 설정, `dataTransfer.setData()` 미호출.
22
+ - ** 수정**: 일반 대기열 행과 동결 대기열 행의 `dragStart`에 `setData('text/plain', index)` 추가.
23
+
24
+ ## 0.2.5 — 2026-08-19
25
+
26
+ ### 버그 수정: 동결 대기열 드래그 재정렬 불가
27
+
28
+ - **현상**: 동결 시 대기열 행은 위로/아래로 버튼으로만 재정렬 가능, 드래그 무효.
29
+ - **원인**: 동결 리스트 `li`에 `draggable`과 drag 이벤트 미설정.
30
+ - **수정**: 동결 행에 `draggable` + `dragStart/dragOver/drop/dragEnd` 추가.
31
+
32
+ ## 0.2.4 — 2026-08-19
33
+
34
+ ### 버그 수정: 동결 시 대기열 잠금(순서/내용/삽입 모드 모두 변경 불가)
35
+
36
+ - **현상**: 동결 상태에서 대기열 편집·삭제·위로/아래로·빨간/노란/초록 모두 비활성.
37
+ - **원인**: 동결 리스트는 읽기 전용 렌더링(작업 버튼 없음).
38
+ - **수정**(동결과 대기열 완전 분리):
39
+ - 동결 대기열 각 행에 일반 시와 동등한 편집/삭제/위로/아래로 제공;
40
+ - 동결 대기열 각 행에 **빨간/노란/초록 삽입 단계** 버튼 제공;
41
+ - 재개 시 각 항목의 예정된 단계로 실행(빨간 단계는 `cancel()` 후 전송).
42
+
43
+ ## 0.2.3 — 2026-08-19
44
+
45
+ ### 버그 수정: 동결 시 대기열 숨겨짐
46
+
47
+ - **현상**: 동결 후 대기열이 사라져 동결된 메시지를 확인/수정할 수 없음.
48
+ - **원인**: 동결 구현이 큐 메시지를 `remove`로 store에 이동, dock 렌더링 조건이 `return null`触发.
49
+ - **수정**:
50
+ - 렌더링 조건에 `!frozen` 추가(동결 시 dock 유지);
51
+ - 동결 리스트를 freeze-store의 `pending`에서 렌더링;
52
+ - freeze-store에 가변 조작 추가.
53
+
54
+ ## 0.2.2 — 2026-08-19
55
+
56
+ ### 추가: 전체 지우기 확인의 명시적 취소 버튼
57
+
58
+ - 동결 대기열 전체 지우기 2단계 확인에 "취소" 버튼 추가(3초 초과 시 자동 복원).
59
+
60
+ ## 0.2.1 — 2026-08-18
61
+
62
+ ### 추가: 전체 지우기 2단계 확인
63
+
64
+ - "취소 후 전체 지우기" 첫 번째 클릭 시 빨간색 "확인 지우기?" 표시, 재클릭 시 실행. 의도치 않은 전체 지우기 방지.
65
+
66
+ ## 0.2.0 — 2026-08-18
67
+
68
+ ### 추가(dsh-queue-plus에서 차용)
69
+
70
+ - **드래그 재정렬**: 대기열 행을 직접 드래그하여 순서 조정(네이티브 HTML5 DnD, 런타임 의존 없음).
71
+ - **재정렬 동시성 보호**: 재구성 중 메시지가 에이전트에 이미 가져간 경우 즉시 중止, 재전송 없음.
72
+ - **접기 상태 기억**: 대기영역 수축 상태를 localStorage에 영속화.
73
+ - **전체 지우기 2단계 확인**(0.2.1 참조).
74
+
75
+ ### 엔지니어링
76
+
77
+ - **TDD + Lint**: ESLint flat config, `npm run tdd`(vitest watch), `npm run verify` 통합 게이트.
78
+ - 테스트 32 → 43항목.
package/CHANGELOG.md ADDED
@@ -0,0 +1,92 @@
1
+ # Changelog
2
+
3
+ 所有重要变更与 bug 修复记录于此。版本遵循语义化版本(`dsh plugin --profile web add dsh-input-traffic` 安装)。
4
+
5
+ ## Unreleased
6
+
7
+ ### 新增:DSH 双版本兼容(0.1.1-rc.2 / 0.1.2-rc.1)
8
+
9
+ - **单一产物,运行时自适应**:同一份 `lib/client.js` 在两个版本都能加载,无版本号字符串分支。
10
+ - **冻结按钮改读会话标准件**:`conversation.input.right` 在 0.1.2 起不再传 `InputZone` owner(`InputBar.tsx:466` 传 `{}`),原先读 `session.queue` 会在该版本直接抛错。现改为 `useSession(s => s.queue)`——`useSession` / `sessionId` 在两版 `SessionStandardProps` 中均存在。
11
+ - **本地契约收紧到两版交集**:`src/types/contracts.d.ts` 的 `conversation.input.right` 去掉 `owner`,`InputZone` 只声明被消费的 `input.draft`;再引入版本专属 owner 会直接 `tsc` 报错。
12
+ - **元数据**:`engines.dsh` 收窄为 `>=0.1.0-rc.7 <0.2.0-0`;`peerDependencies` 移除 `@deepseek-ai/dsh-client-runtime`(0.1.2 已改名 `dsh-client-store`,本插件运行时不依赖它)。
13
+
14
+ ### 修复:等待队列被其他条目插到输入卡片之间
15
+
16
+ - **现象**:`dsh-perm-gate` 的审批提示条出现在等待队列与输入卡片之间。
17
+ - **根因**:list 型 slot 的显示位置只由 `order` 决定(`scoped-slots.tsx` 把 shadowing 胜者按 `order` 排序),`priority` 只决定同 `id` 单元格的胜者。队列条沿用官方 `order: 20`,因此排在提示条的 `30` 之前。
18
+ - **修复**:保持 `priority: -1`(赢得官方 `queue` 单元格),`order` 提到 `QUEUE_DOCK_ORDER = 1000`,排在 `conversation.input.dock` 带内所有已知条目之后,紧贴输入卡片。DSH 无 "last" 语义,第三方注册更大 `order` 仍可能插入(README 已注明该前提)。
19
+
20
+ ## 0.2.8 — 2026-08-24
21
+
22
+ ### 新增:日夜模式自动适配
23
+
24
+ - 队列框(等待区 dock)与冻结按钮的配色从自绘 `--ds-color-*`(dsh 中不存在该 token)改为引用 dsh 官方语义 token(`--dsw-alias-*`:bg-layer / border-l / label / interactive-bg-hover / state-success|warn|error-primary)。
25
+ - 效果:系统深色模式或 dsh 暗色主题(`body[data-ds-dark-theme]`)下自动切换为**深灰底 + 白色反色字**,三档色使用官方暗色适配值(对比度由 dsh 保证);白天外观保持不变。
26
+ - 纯 CSS token 映射,零 JS 改动、无新增设置项。
27
+
28
+ ## 0.2.6 — 2026-08-19
29
+
30
+ ### Bug 修复:拖拽启动兼容(部分浏览器无法拖动)
31
+
32
+ - **现象**:部分浏览器(引擎要求 `setData` 才启动 HTML5 拖拽)中,队列行无法拖动排序。
33
+ - **根因**:`dragStart` 只设置了 `effectAllowed='move'`,未调用 `dataTransfer.setData()`。
34
+ - **修复**:正常队列行与冻结队列行的 `dragStart` 均补齐 `setData('text/plain', index)`。
35
+
36
+ ## 0.2.5 — 2026-08-19
37
+
38
+ ### Bug 修复:冻结队列无法拖动排序
39
+
40
+ - **现象**:冻结时队列行只能靠上移/下移按钮排序,拖拽无效。
41
+ - **根因**:冻结列表 `li` 未挂 `draggable` 与 drag 事件(拖拽只实现了正常队列行,冻结行遗漏)。
42
+ - **修复**:冻结行补齐 `draggable` + `dragStart/dragOver/drop/dragEnd`,drop 调用 `movePending(from, to)`,并加拖拽虚位提示。
43
+
44
+ ## 0.2.4 — 2026-08-19
45
+
46
+ ### Bug 修复:冻结时队列被锁定(顺序/内容/插入模式全不可改)
47
+
48
+ - **现象**:冻结状态下队列"不让改"——上移/下移、编辑、删除、红/黄/绿插入档位全部失效。
49
+ - **根因**:冻结列表只读渲染(无操作按钮);残留的正常队列行按钮带 `disabled={frozen}`。
50
+ - **修复**(冻结与队列完全解耦):
51
+ - 冻结队列每行提供与未冻结一致的编辑(行内 textarea)/ 删除 / 上移 / 下移;
52
+ - 冻结队列每行提供**红/黄/绿插入档位**按钮(设定恢复时的预定档位,`setTierAt`);
53
+ - 冻结行编辑用 `frozen:${i}` id,避开正常队列的 stale 清理;
54
+ - 恢复(resume)按每条预定档位执行:红色档位先 `cancel()` 再发送(打断),黄/绿按序唤醒。
55
+
56
+ ## 0.2.3 — 2026-08-19
57
+
58
+ ### Bug 修复:冻结时等待队列被隐藏
59
+
60
+ - **现象**:冻结后等待队列消失,用户无法查看/修改已冻结的消息。
61
+ - **根因**:冻结实现把队列消息逐条 `remove` 到插件 store(driver 无 pending 自然停止),dock 渲染条件 `queue.length === 0 && !running` 触发 `return null`。
62
+ - **修复**:
63
+ - 渲染条件增加 `!frozen`(冻结时 dock 保持挂载);
64
+ - 冻结列表从 freeze-store 的 `pending` 渲染(横幅 + 每行「已冻结」标记);
65
+ - freeze-store 增加可变操作:`pushPending` / `updatePendingAt` / `removePendingAt` / `movePending`。
66
+
67
+ ## 0.2.2 — 2026-08-19
68
+
69
+ ### 新增:清空确认的显式取消按钮
70
+
71
+ - 冻结队列保持可见(横幅),清空两步确认增加「取消清空」按钮(点击还原,另 3 秒超时自动还原)。
72
+
73
+ ## 0.2.1 — 2026-08-18
74
+
75
+ ### 新增:清空两步确认
76
+
77
+ - 首次点击「取消并清空」出现红色「确认清空?」,再点执行;避免误触清空整个等待区。
78
+
79
+ ## 0.2.0 — 2026-08-18
80
+
81
+ ### 新增(借鉴 dsh-queue-plus)
82
+
83
+ - **拖拽排序**:队列行直接拖动调整顺序(原生 HTML5 DnD,零运行时依赖);箭头按钮键盘兜底保留。
84
+ - **排序并发保护**:重建期间某条消息已被 agent 认领(`queue-item-not-found`)→ 立即中止且不重发,提示「队列已变化,本次排序已取消」,绝不排乱变化中的队列。
85
+ - **折叠状态记忆**:等待区收起/展开状态持久化到 localStorage,跨会话保持。
86
+ - **清空两步确认**(见 0.2.1)。
87
+
88
+ ### 工程化
89
+
90
+ - **描述更新**:package.json / GitHub repo / npm 描述加入 queue / drag-to-reorder / interject / batch clear。
91
+ - **TDD + Lint**:ESLint flat config(`eslint.config.mjs`,typescript-eslint + react-hooks);`npm run tdd`(vitest watch);`npm run verify` 一体化门禁(lint + test + build + 12 项装配断言);README 双语「开发(TDD + Lint)」章节。
92
+ - 测试 32 → 43 项。
package/INSTALL.ja.md ADDED
@@ -0,0 +1,151 @@
1
+ # インストールガイド(公式 DSH CLI)
2
+
3
+ このガイドは公式 `dsh plugin` コマンドのみを使用します。このコマンドは依存関係を profile にインストールし、`dsh.profile.bundles` を同期します。普通の `npm install`、profile での直接 `pnpm add`、profile マニフェストの手動編集で代用しないでください。
4
+
5
+ - [日本語インストールガイド](./INSTALL.ja.md)
6
+ - [English installation guide](./INSTALL.md)
7
+ - [中文安装指南](./INSTALL.zh.md)
8
+ - [한국어 설치 안내](./INSTALL.ko.md)
9
+ - [日本語 README](./README.ja.md)
10
+ - [English README](./README.en.md)
11
+ - [中文 README](./README.md)
12
+ - [한국어 README](./README.ko.md)
13
+ - [Changelog](./CHANGELOG.md)
14
+ - [日本語 changelog](./CHANGELOG.ja.md)
15
+ - [한국어 changelog](./CHANGELOG.ko.md)
16
+
17
+ このガイドのプレースホルダー:
18
+
19
+ - `<profile>`:変更する DSH profile。通常は `web`;
20
+ - `dsh-input-traffic`:npm パッケージ名とランタイムプラグイン ID。
21
+
22
+ ## 0. 前提と profile の確認
23
+
24
+ ```bash
25
+ echo "DSH_HOME=${DSH_HOME:-$HOME/.dsh}"
26
+ dsh --version
27
+ ls "${DSH_HOME:-$HOME/.dsh}/profiles"
28
+ ```
29
+
30
+ 実行中の DSH プロセスが使う profile を使用してください。`web` が一般的ですが、実際の `--profile` 引数が優先されます。
31
+
32
+ ## 1. 公式インストール
33
+
34
+ 最新版をインストール:
35
+
36
+ ```bash
37
+ dsh plugin --profile <profile> add dsh-input-traffic -w
38
+ ```
39
+
40
+ (profile が pnpm workspace root の場合は `-w` が必要です。`web` はそうです。)
41
+
42
+ 現在のリリースを明示的にインストール:
43
+
44
+ ```bash
45
+ dsh plugin --profile <profile> add dsh-input-traffic@0.2.9 -w
46
+ ```
47
+
48
+ 公式 CLI は profile の依存関係、ロックファイル、`dsh.profile.bundles` を自動更新します。手動で YAML を追加しないでください。
49
+
50
+ ### サプライチェーン冷却期間
51
+
52
+ dsh ランタイムは pnpm 11 を使用し、`minimumReleaseAge` ポリシーが新規公開版を `ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION` でブロックすることがあります。`~/.dsh/profiles/web/pnpm-workspace.yaml` の `minimumReleaseAgeExclude` にバージョンを追加してください:
53
+
54
+ ```yaml
55
+ minimumReleaseAgeExclude:
56
+ - dsh-input-traffic@0.2.9
57
+ ```
58
+
59
+ ## 2. アップグレード
60
+
61
+ registry の最新版へアップグレード:
62
+
63
+ ```bash
64
+ dsh plugin --profile <profile> update dsh-input-traffic -w
65
+ ```
66
+
67
+ ホスト側の変更は DSH を再起動、ブラウザ側は Web ページをリフレッシュしてください。
68
+
69
+ ## 3. ローカルパス / link: 登録(代替)
70
+
71
+ 開発用やオフラインインストールでは、ローカルチェックアウトから登録できます:
72
+
73
+ ```bash
74
+ # ~/.dsh/profiles/web/package.json dependencies:
75
+ # "dsh-input-traffic": "link:<dsh-input-traffic の絶対パス>"
76
+ # ~/.dsh/profiles/web/cordis.patch.yml:
77
+ # - insert:
78
+ # - id: input-traffic
79
+ # name: dsh-input-traffic
80
+ cd ~/.dsh/profiles/web && pnpm install && dsh web
81
+ ```
82
+
83
+ または公式 CLI でローカルパスを追加(ネットワーク不要):
84
+
85
+ ```bash
86
+ dsh plugin --profile <profile> add /dsh-input-traffic の絶対パス/ -w
87
+ ```
88
+
89
+ ## 4. インストールの検証
90
+
91
+ 依存関係とインストール済みバージョンを確認:
92
+
93
+ ```bash
94
+ grep -n "dsh-input-traffic" \
95
+ "${DSH_HOME:-$HOME/.dsh}/profiles/<profile>/package.json"
96
+ ```
97
+
98
+ 公式構成を確認:
99
+
100
+ ```bash
101
+ dsh --profile <profile> --dump-default-config
102
+ ```
103
+
104
+ 以下が含まれている必要があります:
105
+
106
+ ```yaml
107
+ - id: input-traffic
108
+ name: dsh-input-traffic
109
+ ```
110
+
111
+ ## 5. プラグインの検証
112
+
113
+ DSH を再起動し、Web ページをリフレッシュしてください。セッションで以下を確認:
114
+
115
+ 1. 待機エリアに 3 段階プランニング dock が表示される;
116
+ 2. コンポーザ右側に「セッション凍結」ボタンが表示される;
117
+ 3. 公式設定パネルの「ビジー時の Enter キー動作」設定行が非表示になる;
118
+ 4. エージェントがビジーなときメッセージを送ると、待機エリアに赤/黄/緑プランニングボタン付きで配置される。
119
+
120
+ ## 日本語と韓国語のサポート状況
121
+
122
+ プラグインには `ja` と `ko` の辞書が含まれていますが、現在の公式 DSH リリースは `LocaleRuntime` 経由で `zh` と `en` のみを提供します。純正 DSH で日本語または韓国語を選択すると `locale "<id>" is not registered` で失敗します。
123
+
124
+ 公式サポートが来る前に使うには、DSH フォークを保守して更新してください:
125
+
126
+ - `packages/client/locale/src/locale-settings.ts`:`LOCALE_IDS` に `ja` と `ko` を追加。
127
+ - `packages/client/locale/src/client/index.ts`:`LOCALES` に `{ id: 'ja', label: '日本語' }` と `{ id: 'ko', label: '한국어' }` を追加。
128
+ - 対応するコア辞書とテストを追加し、フォーク版を再ビルドして実行。
129
+
130
+ プラグイン単体では DSH のグローバル locale 一覧を拡張できません。
131
+
132
+ ## 6. トラブルシューティング
133
+
134
+ | 症状 | 対処 |
135
+ | --- | --- |
136
+ | `dsh` が見つからない | 公式 DSH CLI をインストール/有効化。 |
137
+ | `ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION` | profile の `pnpm-workspace.yaml` の `minimumReleaseAgeExclude` にバージョンを追加。 |
138
+ | プラグインが「無効/未マウント」でエラーなし | profile 構成を確認。 |
139
+ | client エントリが `__DSH_BOOT__` にない | `exports["./client"]` が存在し、host fiber が確立されていることを確認。 |
140
+ | 凍結/再開ボタンが動作しない | セッション級ロックを使用する場合は session-guard がインストールされているか確認。未インストール時は fail-open で動作。 |
141
+ | ブラウザが古い bundle を表示 | アップグレード後にハードリフレッシュ(Ctrl+Shift+R)。 |
142
+
143
+ ## 7. アンインストール
144
+
145
+ 公式コマンドを使用:
146
+
147
+ ```bash
148
+ dsh plugin --profile <profile> remove dsh-input-traffic
149
+ ```
150
+
151
+ 再起動後、公式キュー dock と「ビジー時の Enter キー動作」設定行が復元されます。
package/INSTALL.ko.md ADDED
@@ -0,0 +1,151 @@
1
+ # 설치 안내(공식 DSH CLI)
2
+
3
+ 이 가이드는 공식 `dsh plugin` 명령만 사용합니다. 이 명령은 의존성을 profile에 설치하고 `dsh.profile.bundles`를 동기화합니다. 일반 `npm install`, profile에서 직접 `pnpm add`, profile 매니페스트 수동 편집으로 대체하지 마세요.
4
+
5
+ - [한국어 설치 안내](./INSTALL.ko.md)
6
+ - [English installation guide](./INSTALL.md)
7
+ - [中文安装指南](./INSTALL.zh.md)
8
+ - [日本語インストールガイド](./INSTALL.ja.md)
9
+ - [한국어 README](./README.ko.md)
10
+ - [English README](./README.en.md)
11
+ - [中文 README](./README.md)
12
+ - [日本語 README](./README.ja.md)
13
+ - [Changelog](./CHANGELOG.md)
14
+ - [日本語 changelog](./CHANGELOG.ja.md)
15
+ - [한국어 changelog](./CHANGELOG.ko.md)
16
+
17
+ 이 가이드의 자리표시자:
18
+
19
+ - `<profile>`: 수정할 DSH profile. 보통 `web`;
20
+ - `dsh-input-traffic`: npm 패키지 이름이자 런타임 플러그인 ID.
21
+
22
+ ## 0. 사전 확인과 profile 확인
23
+
24
+ ```bash
25
+ echo "DSH_HOME=${DSH_HOME:-$HOME/.dsh}"
26
+ dsh --version
27
+ ls "${DSH_HOME:-$HOME/.dsh}/profiles"
28
+ ```
29
+
30
+ 실행 중인 DSH 프로세스가 사용하는 profile을 사용하세요. `web`이 일반적이지만 실제 `--profile` 인자가 우선합니다.
31
+
32
+ ## 1. 공식 설치
33
+
34
+ 최신 버전 설치:
35
+
36
+ ```bash
37
+ dsh plugin --profile <profile> add dsh-input-traffic -w
38
+ ```
39
+
40
+ (profile이 pnpm workspace root면 `-w`가 필요합니다. `web`이 그렇습니다.)
41
+
42
+ 현재 릴리스 명시적 설치:
43
+
44
+ ```bash
45
+ dsh plugin --profile <profile> add dsh-input-traffic@0.2.9 -w
46
+ ```
47
+
48
+ 공식 CLI는 profile 의존성, 잠금 파일, `dsh.profile.bundles`를 자동으로 갱신합니다. 수동으로 YAML을 추가하지 마세요.
49
+
50
+ ### 공급망 쿨링 기간
51
+
52
+ dsh 런타임은 pnpm 11을 사용하며 `minimumReleaseAge` 정책이 새로 게시된 버전을 `ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION`으로 차단할 수 있습니다. `~/.dsh/profiles/web/pnpm-workspace.yaml`의 `minimumReleaseAgeExclude`에 버전을 추가하세요:
53
+
54
+ ```yaml
55
+ minimumReleaseAgeExclude:
56
+ - dsh-input-traffic@0.2.9
57
+ ```
58
+
59
+ ## 2. 업그레이드
60
+
61
+ registry 최신 버전으로 업그레이드:
62
+
63
+ ```bash
64
+ dsh plugin --profile <profile> update dsh-input-traffic -w
65
+ ```
66
+
67
+ 호스트 변경은 DSH 재시작, 브라우저 측은 웹 페이지 새로고침이 필요합니다.
68
+
69
+ ## 3. 로컬 경로 / link: 등록(대안)
70
+
71
+ 개발 또는 오프라인 설치에서는 로컬 체크아웃에서 등록할 수 있습니다:
72
+
73
+ ```bash
74
+ # ~/.dsh/profiles/web/package.json dependencies:
75
+ # "dsh-input-traffic": "link:<dsh-input-traffic 절대 경로>"
76
+ # ~/.dsh/profiles/web/cordis.patch.yml:
77
+ # - insert:
78
+ # - id: input-traffic
79
+ # name: dsh-input-traffic
80
+ cd ~/.dsh/profiles/web && pnpm install && dsh web
81
+ ```
82
+
83
+ 또는 공식 CLI로 로컬 경로 추가(네트워크 불필요):
84
+
85
+ ```bash
86
+ dsh plugin --profile <profile> add /dsh-input-traffic 절대 경로/ -w
87
+ ```
88
+
89
+ ## 4. 설치 검증
90
+
91
+ 의존성과 설치 버전 확인:
92
+
93
+ ```bash
94
+ grep -n "dsh-input-traffic" \
95
+ "${DSH_HOME:-$HOME/.dsh}/profiles/<profile>/package.json"
96
+ ```
97
+
98
+ 공식 구성 확인:
99
+
100
+ ```bash
101
+ dsh --profile <profile> --dump-default-config
102
+ ```
103
+
104
+ 다음이 포함되어야 합니다:
105
+
106
+ ```yaml
107
+ - id: input-traffic
108
+ name: dsh-input-traffic
109
+ ```
110
+
111
+ ## 5. 플러그인 검증
112
+
113
+ DSH를 재시작하고 웹 페이지를 새로고침하세요. 세션에서 다음을 확인:
114
+
115
+ 1. 대기 영역에 3단계 계획 dock이 표시됨;
116
+ 2. 컴포저 우측에 "세션 동결" 버튼이 표시됨;
117
+ 3. 공식 설정 패널의 "바쁜 동안 Enter 키 동작" 설정 행이 숨겨짐;
118
+ 4. 에이전트가 바쁠 때 메시지를 보내면 대기 영역에 빨간/노란/초록 계획 버튼과 함께 배치됨.
119
+
120
+ ## 일본어·한국어 지원 상태
121
+
122
+ 플러그인에는 `ja`와 `ko` 사전이 포함되어 있지만, 현재 공식 DSH 릴리스는 `LocaleRuntime`을 통해 `zh`와 `en`만 제공합니다. 순정 DSH에서 일본어 또는 한국어를 선택하면 `locale "<id>" is not registered` 오류가 발생합니다.
123
+
124
+ 공식 지원 전에 사용하려면 DSH 포크를 유지하며 업데이트하세요:
125
+
126
+ - `packages/client/locale/src/locale-settings.ts`: `LOCALE_IDS`에 `ja`와 `ko` 추가.
127
+ - `packages/client/locale/src/client/index.ts`: `LOCALES`에 `{ id: 'ja', label: '日本語' }`와 `{ id: 'ko', label: '한국어' }` 추가.
128
+ - 해당 핵심 사전과 테스트를 추가하고 포크 버전을 다시 빌드하여 실행.
129
+
130
+ 플러그인만으로는 DSH의 전역 locale 목록을 확장할 수 없습니다.
131
+
132
+ ## 6. 트러블슈팅
133
+
134
+ | 증상 | 조치 |
135
+ | --- | --- |
136
+ | `dsh`를 찾을 수 없음 | 공식 DSH CLI를 설치/활성화. |
137
+ | `ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION` | profile의 `pnpm-workspace.yaml` `minimumReleaseAgeExclude`에 버전 추가. |
138
+ | 플러그인이「비활성화/미마운트」이며 오류 없음 | profile 구성을 확인. |
139
+ | client 항목이 `__DSH_BOOT__`에 없음 | `exports["./client"]`가 있고 host fiber가 생성되었는지 확인. |
140
+ | 동결/재개 버튼이 작동하지 않음 | 세션급 잠금을 사용하는 경우 session-guard가 설치되어 있는지 확인. 미설치 시 fail-open으로 동작. |
141
+ | 브라우저가 오래된 bundle 표시 | 업그레이드 후 하드 새로고침(Ctrl+Shift+R). |
142
+
143
+ ## 7. 제거
144
+
145
+ 공식 명령 사용:
146
+
147
+ ```bash
148
+ dsh plugin --profile <profile> remove dsh-input-traffic
149
+ ```
150
+
151
+ 재시작 후 공식 대기열 dock과 "바쁜 동안 Enter 키 동작" 설정 행이 복원됩니다.