dsh-input-traffic 0.6.1 → 0.7.0

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.
package/lib/client.js CHANGED
@@ -11,115 +11,494 @@ window.__ModuleLoader__.load({
11
11
  /** `steer` client dictionaries (zh / en / ja / ko). */
12
12
  /** Dictionary namespace owned by this plugin. */
13
13
  const NS = "steer";
14
- /** Simplified Chinese dictionary (the key-set source of truth). */
15
- const zh = {
16
- "family.title": "输入流量",
17
- "family.busyEnter": "busy-Enter 行为(本插件接管)",
18
- "family.desc": "普通回车在繁忙时进入排队(queue),不会打断当前回答;打断请用输入区的冻结/转向按钮。该行为由本插件自动接管,无需配置。",
19
- "queue.count": "{n} 条排队消息",
20
- "queue.edit": "编辑排队消息",
21
- "queue.edit.unsupported": "包含非文本内容,暂不支持编辑",
22
- "queue.save": "保存排队消息",
23
- "queue.cancelEdit": "取消编辑",
24
- "queue.remove": "删除排队消息",
25
- "queue.removeFailed": "删除失败:这条消息可能已经开始发送。",
26
- "queue.editFailed": "编辑失败:这条消息可能已经开始发送。",
27
- "queue.editFailed.pulledBack": "编辑失败,内容已退回主输入框,请确认后重新发送。",
28
- "steer.inflight": "{n} 条正在插入",
29
- "steer.now": "打断并输入",
30
- "steer.now.aria": "红色:打断当前动作并立即输入",
31
- "steer.now.unsupported": "包含非文本内容,暂不支持打断",
32
- "steer.nowFailed": "打断失败,请重试。",
33
- "steer.next": "插话发送",
34
- "steer.next.aria": "黄色:当前动作结束后插入输入",
35
- "steer.nextFailed": "插话发送失败,请重试。",
36
- "steer.later": "排队到下一轮",
37
- "steer.later.aria": "绿色:排队,上一轮输入的动作都结束后再处理",
38
- "steer.revoke": "收回排队",
39
- "steer.revoke.aria": "绿色:撤销插入,收回排队(下一轮处理)",
40
- "steer.revoke.unsupported": "包含非文本内容,暂不支持收回",
41
- "steer.revokeFailed": "收回排队失败,请重试。",
42
- "steer.moveUp": "上移",
43
- "steer.moveDown": "下移",
44
- "steer.reorder.unsupported": "包含非文本内容,暂不支持排序",
45
- "steer.reorderFailed": "调整顺序失败,请重试。",
46
- "steer.reorderStale": "队列已变化,本次排序已取消,请重试。",
47
- "steer.dragReorder": "拖动调整顺序",
48
- "steer.pullBack": "打回输入框编辑",
49
- "steer.pullBack.unsupported": "包含非文本内容,暂不支持打回编辑",
50
- "steer.pullBack.composerBusy": "主输入框已有内容,请先发送或清空后再打回",
51
- "steer.pullBackFailed": "打回输入框失败,请重试。",
52
- "steer.badge.now": "打断中",
53
- "steer.badge.next": "插话中",
54
- "steer.badge.later": "排队",
55
- "steer.unavailable.running": "仅运行中可规划",
56
- "steer.clear": "取消并清空",
57
- "steer.clear.confirm": "确认清空?",
58
- "steer.clear.cancel": "取消清空",
59
- "steer.clear.aria": "取消当前执行并清空全部排队消息",
60
- "steer.clearFailed": "取消并清空失败,请重试。",
61
- "steer.freeze": "冻结追加",
62
- "steer.resume": "恢复追加",
63
- "steer.frozen": "已冻结:当前轮次完成后暂停,排队消息将在恢复后继续",
64
- "steer.frozenInput": "已冻结:输入已暂停,恢复后继续",
65
- "steer.frozenBadge": "已冻结",
66
- "steer.freezeFailed": "冻结失败,请重试。",
67
- "steer.resumeFailed": "恢复失败,请重试。"
68
- };
69
- /** English dictionary (keys mirror zh). */
70
- const en = {
71
- "family.title": "Input Traffic",
72
- "family.busyEnter": "busy-Enter behavior (managed by this plugin)",
73
- "family.desc": "Plain Enter queues while busy instead of interrupting; use the freeze/steer control in the composer to interrupt. Managed automatically — nothing to configure.",
74
- "queue.count": "{n} queued messages",
75
- "queue.edit": "Edit queued message",
76
- "queue.edit.unsupported": "Contains non-text content; editing is unsupported",
77
- "queue.save": "Save queued message",
78
- "queue.cancelEdit": "Cancel edit",
79
- "queue.remove": "Remove queued message",
80
- "queue.removeFailed": "Remove failed: the message may have started sending.",
81
- "queue.editFailed": "Edit failed: the message may have started sending.",
82
- "queue.editFailed.pulledBack": "Edit failed; the content was moved back to the composer, please review and resend.",
83
- "steer.inflight": "{n} inserting",
84
- "steer.now": "Interrupt and send",
85
- "steer.now.aria": "Red: interrupt the running action and send now",
86
- "steer.now.unsupported": "Contains non-text content; interrupting is unsupported",
87
- "steer.nowFailed": "Interrupt failed, please retry.",
88
- "steer.next": "Send after action",
89
- "steer.next.aria": "Yellow: insert after the current action finishes",
90
- "steer.nextFailed": "Steering failed, please retry.",
91
- "steer.later": "Queue for next turn",
92
- "steer.later.aria": "Green: queue; processed after all previously steered actions finish",
93
- "steer.revoke": "Pull back to queue",
94
- "steer.revoke.aria": "Green: revoke the insertion and queue for the next turn",
95
- "steer.revoke.unsupported": "Contains non-text content; revoking is unsupported",
96
- "steer.revokeFailed": "Revoke failed, please retry.",
97
- "steer.moveUp": "Move up",
98
- "steer.moveDown": "Move down",
99
- "steer.reorder.unsupported": "Contains non-text content; reordering is unsupported",
100
- "steer.reorderFailed": "Reorder failed, please retry.",
101
- "steer.reorderStale": "The queue changed; this reorder was cancelled, please retry.",
102
- "steer.dragReorder": "Drag to reorder",
103
- "steer.pullBack": "Edit in composer",
104
- "steer.pullBack.unsupported": "Contains non-text content; pulling back is unsupported",
105
- "steer.pullBack.composerBusy": "The composer already has content; send or clear it first",
106
- "steer.pullBackFailed": "Pull back failed, please retry.",
107
- "steer.badge.now": "interrupting",
108
- "steer.badge.next": "steering",
109
- "steer.badge.later": "queued",
110
- "steer.unavailable.running": "Planning requires a running session",
111
- "steer.clear": "Cancel and clear",
112
- "steer.clear.confirm": "Confirm clear?",
113
- "steer.clear.cancel": "Cancel clearing",
114
- "steer.clear.aria": "Cancel the current run and clear all queued messages",
115
- "steer.clearFailed": "Cancel and clear failed, please retry.",
116
- "steer.freeze": "Freeze & append",
117
- "steer.resume": "Resume & append",
118
- "steer.frozen": "Frozen: the current turn finishes, then the queue pauses until resumed",
119
- "steer.frozenInput": "Frozen: input paused, resume to continue",
120
- "steer.frozenBadge": "frozen",
121
- "steer.freezeFailed": "Freeze failed, please retry.",
122
- "steer.resumeFailed": "Resume failed, please retry."
14
+ /** Combined dictionary map covering all 9 languages. */
15
+ const dictionaries = {
16
+ zh: {
17
+ "family.title": "输入流量",
18
+ "family.busyEnter": "busy-Enter 行为(本插件接管)",
19
+ "family.desc": "普通回车在繁忙时进入排队(queue),不会打断当前回答;打断请用输入区的冻结/转向按钮。该行为由本插件自动接管,无需配置。",
20
+ "queue.count": "{n} 条排队消息",
21
+ "queue.edit": "编辑排队消息",
22
+ "queue.edit.unsupported": "包含非文本内容,暂不支持编辑",
23
+ "queue.save": "保存排队消息",
24
+ "queue.cancelEdit": "取消编辑",
25
+ "queue.remove": "删除排队消息",
26
+ "queue.removeFailed": "删除失败:这条消息可能已经开始发送。",
27
+ "queue.editFailed": "编辑失败:这条消息可能已经开始发送。",
28
+ "queue.editFailed.pulledBack": "编辑失败,内容已退回主输入框,请确认后重新发送。",
29
+ "steer.inflight": "{n} 条正在插入",
30
+ "steer.now": "打断并输入",
31
+ "steer.now.aria": "红色:打断当前动作并立即输入",
32
+ "steer.now.unsupported": "包含非文本内容,暂不支持打断",
33
+ "steer.nowFailed": "打断失败,请重试。",
34
+ "steer.next": "插话发送",
35
+ "steer.next.aria": "黄色:当前动作结束后插入输入",
36
+ "steer.nextFailed": "插话发送失败,请重试。",
37
+ "steer.later": "排队到下一轮",
38
+ "steer.later.aria": "绿色:排队,上一轮输入的动作都结束后再处理",
39
+ "steer.revoke": "收回排队",
40
+ "steer.revoke.aria": "绿色:撤销插入,收回排队(下一轮处理)",
41
+ "steer.revoke.unsupported": "包含非文本内容,暂不支持收回",
42
+ "steer.revokeFailed": "收回排队失败,请重试。",
43
+ "steer.moveUp": "上移",
44
+ "steer.moveDown": "下移",
45
+ "steer.reorder.unsupported": "包含非文本内容,暂不支持排序",
46
+ "steer.reorderFailed": "调整顺序失败,请重试。",
47
+ "steer.reorderStale": "队列已变化,本次排序已取消,请重试。",
48
+ "steer.dragReorder": "拖动调整顺序",
49
+ "steer.pullBack": "打回输入框编辑",
50
+ "steer.pullBack.unsupported": "包含非文本内容,暂不支持打回编辑",
51
+ "steer.pullBack.composerBusy": "主输入框已有内容,请先发送或清空后再打回",
52
+ "steer.pullBackFailed": "打回输入框失败,请重试。",
53
+ "steer.badge.now": "打断中",
54
+ "steer.badge.next": "插话中",
55
+ "steer.badge.later": "排队",
56
+ "steer.unavailable.running": "仅运行中可规划",
57
+ "steer.clear": "取消并清空",
58
+ "steer.clear.confirm": "确认清空?",
59
+ "steer.clear.cancel": "取消清空",
60
+ "steer.clear.aria": "取消当前执行并清空全部排队消息",
61
+ "steer.clearFailed": "取消并清空失败,请重试。",
62
+ "steer.freeze": "冻结追加",
63
+ "steer.resume": "恢复追加",
64
+ "steer.frozen": "已冻结:当前轮次完成后暂停,排队消息将在恢复后继续",
65
+ "steer.frozenInput": "已冻结:输入已暂停,恢复后继续",
66
+ "steer.frozenBadge": "已冻结",
67
+ "steer.freezeFailed": "冻结失败,请重试。",
68
+ "steer.resumeFailed": "恢复失败,请重试。"
69
+ },
70
+ en: {
71
+ "family.title": "Input Traffic",
72
+ "family.busyEnter": "busy-Enter behavior (managed by this plugin)",
73
+ "family.desc": "Plain Enter queues while busy instead of interrupting; use the freeze/steer control in the composer to interrupt. Managed automatically — nothing to configure.",
74
+ "queue.count": "{n} queued messages",
75
+ "queue.edit": "Edit queued message",
76
+ "queue.edit.unsupported": "Contains non-text content; editing is unsupported",
77
+ "queue.save": "Save queued message",
78
+ "queue.cancelEdit": "Cancel edit",
79
+ "queue.remove": "Remove queued message",
80
+ "queue.removeFailed": "Remove failed: the message may have started sending.",
81
+ "queue.editFailed": "Edit failed: the message may have started sending.",
82
+ "queue.editFailed.pulledBack": "Edit failed; the content was moved back to the composer, please review and resend.",
83
+ "steer.inflight": "{n} inserting",
84
+ "steer.now": "Interrupt and send",
85
+ "steer.now.aria": "Red: interrupt the running action and send now",
86
+ "steer.now.unsupported": "Contains non-text content; interrupting is unsupported",
87
+ "steer.nowFailed": "Interrupt failed, please retry.",
88
+ "steer.next": "Send after action",
89
+ "steer.next.aria": "Yellow: insert after the current action finishes",
90
+ "steer.nextFailed": "Steering failed, please retry.",
91
+ "steer.later": "Queue for next turn",
92
+ "steer.later.aria": "Green: queue; processed after all previously steered actions finish",
93
+ "steer.revoke": "Pull back to queue",
94
+ "steer.revoke.aria": "Green: revoke the insertion and queue for the next turn",
95
+ "steer.revoke.unsupported": "Contains non-text content; revoking is unsupported",
96
+ "steer.revokeFailed": "Revoke failed, please retry.",
97
+ "steer.moveUp": "Move up",
98
+ "steer.moveDown": "Move down",
99
+ "steer.reorder.unsupported": "Contains non-text content; reordering is unsupported",
100
+ "steer.reorderFailed": "Reorder failed, please retry.",
101
+ "steer.reorderStale": "The queue changed; this reorder was cancelled, please retry.",
102
+ "steer.dragReorder": "Drag to reorder",
103
+ "steer.pullBack": "Edit in composer",
104
+ "steer.pullBack.unsupported": "Contains non-text content; pulling back is unsupported",
105
+ "steer.pullBack.composerBusy": "The composer already has content; send or clear it first",
106
+ "steer.pullBackFailed": "Pull back failed, please retry.",
107
+ "steer.badge.now": "interrupting",
108
+ "steer.badge.next": "steering",
109
+ "steer.badge.later": "queued",
110
+ "steer.unavailable.running": "Planning requires a running session",
111
+ "steer.clear": "Cancel and clear",
112
+ "steer.clear.confirm": "Confirm clear?",
113
+ "steer.clear.cancel": "Cancel clearing",
114
+ "steer.clear.aria": "Cancel the current run and clear all queued messages",
115
+ "steer.clearFailed": "Cancel and clear failed, please retry.",
116
+ "steer.freeze": "Freeze & append",
117
+ "steer.resume": "Resume & append",
118
+ "steer.frozen": "Frozen: the current turn finishes, then the queue pauses until resumed",
119
+ "steer.frozenInput": "Frozen: input paused, resume to continue",
120
+ "steer.frozenBadge": "frozen",
121
+ "steer.freezeFailed": "Freeze failed, please retry.",
122
+ "steer.resumeFailed": "Resume failed, please retry."
123
+ },
124
+ ja: {
125
+ "family.title": "入力トラフィック",
126
+ "family.busyEnter": "busy-Enter 動作(本プラグインが管理)",
127
+ "family.desc": "通常の Enter はビジー時にキューへ入ります(割り込みなし)。割り込みは入力欄の凍結/ステアで。自動管理のため設定不要。",
128
+ "queue.count": "{n} 件のキューイング済みメッセージ",
129
+ "queue.edit": "キューイング済みメッセージを編集",
130
+ "queue.edit.unsupported": "非テキストコンテンツが含まれており、編集はサポートされていません",
131
+ "queue.save": "キューイング済みメッセージを保存",
132
+ "queue.cancelEdit": "編集をキャンセル",
133
+ "queue.remove": "キューイング済みメッセージを削除",
134
+ "queue.removeFailed": "削除失敗:メッセージの送信が既に開始されている可能性があります。",
135
+ "queue.editFailed": "編集失敗:メッセージの送信が既に開始されている可能性があります。",
136
+ "queue.editFailed.pulledBack": "編集失敗。コンテンツはコンポーザに戻されました。確認後再送信してください。",
137
+ "steer.inflight": "{n} 件挿入中",
138
+ "steer.now": "中断して送信",
139
+ "steer.now.aria": "赤:実行中のアクションを中断して即座に送信",
140
+ "steer.now.unsupported": "非テキストコンテンツが含まれており、中断はサポートされていません",
141
+ "steer.nowFailed": "中断失敗。再試行してください。",
142
+ "steer.next": "アクション後に送信",
143
+ "steer.next.aria": "黄:現在のアクション完了後に挿入",
144
+ "steer.nextFailed": "ステア失敗。再試行してください。",
145
+ "steer.later": "次のターンまでキューイング",
146
+ "steer.later.aria": "緑:キューイング。以前のステア済みアクションがすべて完了してから処理",
147
+ "steer.revoke": "キューに戻す",
148
+ "steer.revoke.aria": "緑:挿入を取り消し、次のターンまでキューイング",
149
+ "steer.revoke.unsupported": "非テキストコンテンツが含まれており、取り消しはサポートされていません",
150
+ "steer.revokeFailed": "取り消し失敗。再試行してください。",
151
+ "steer.moveUp": "上へ移動",
152
+ "steer.moveDown": "下へ移動",
153
+ "steer.reorder.unsupported": "非テキストコンテンツが含まれており、並べ替えはサポートされていません",
154
+ "steer.reorderFailed": "並べ替え失敗。再試行してください。",
155
+ "steer.reorderStale": "キューが変更されました。本次の並べ替えはキャンセルされました。再試行してください。",
156
+ "steer.dragReorder": "ドラッグして並べ替え",
157
+ "steer.pullBack": "コンポーザに送り直して編集",
158
+ "steer.pullBack.unsupported": "非テキストコンテンツが含まれており、送り直しはサポートされていません",
159
+ "steer.pullBack.composerBusy": "コンポーザに既にコンテンツがあります。送信またはクリアしてください",
160
+ "steer.pullBackFailed": "送り直し失敗。再試行してください。",
161
+ "steer.badge.now": "中断中",
162
+ "steer.badge.next": "ステア中",
163
+ "steer.badge.later": "キューイング済み",
164
+ "steer.unavailable.running": "実行中のみプランニング可能",
165
+ "steer.clear": "取り消して全消去",
166
+ "steer.clear.confirm": "消去を確認?",
167
+ "steer.clear.cancel": "消去をキャンセル",
168
+ "steer.clear.aria": "実行を停止し、すべてのキューイング済みメッセージを消去",
169
+ "steer.clearFailed": "取り消して全消去失敗。再試行してください。",
170
+ "steer.freeze": "凍結して追加",
171
+ "steer.resume": "再開して追加",
172
+ "steer.frozen": "凍結中:現在のターン完了後一時停止、再開後にキューが継続",
173
+ "steer.frozenInput": "凍結中:入力一時停止、再開後に継続",
174
+ "steer.frozenBadge": "凍結済み",
175
+ "steer.freezeFailed": "凍結失敗。再試行してください。",
176
+ "steer.resumeFailed": "再開失敗。再試行してください。"
177
+ },
178
+ ko: {
179
+ "family.title": "입력 트래픽",
180
+ "family.busyEnter": "busy-Enter 동작(이 플러그인이 관리)",
181
+ "family.desc": "일반 Enter는 사용 중일 때 큐에 들어가 현재 답변을 끊지 않습니다. 중단이 필요하면 입력 창의 동결/스티어 버튼을 사용하세요. 자동 관리되므로 설정이 없습니다.",
182
+ "queue.count": "{n}개 대기열 메시지",
183
+ "queue.edit": "대기열 메시지 편집",
184
+ "queue.edit.unsupported": "비텍스트 콘텐츠가 포함되어 있어 편집이 지원되지 않습니다",
185
+ "queue.save": "대기열 메시지 저장",
186
+ "queue.cancelEdit": "편집 취소",
187
+ "queue.remove": "대기열 메시지 삭제",
188
+ "queue.removeFailed": "삭제 실패: 메시지 전송이 이미 시작되었을 수 있습니다.",
189
+ "queue.editFailed": "편집 실패: 메시지 전송이 이미 시작되었을 수 있습니다.",
190
+ "queue.editFailed.pulledBack": "편집 실패. 콘텐츠가 컴포저로 돌아갔습니다. 확인 후 다시 전송하세요.",
191
+ "steer.inflight": "{n}개 삽입 중",
192
+ "steer.now": "중단 후 전송",
193
+ "steer.now.aria": "빨간색: 실행 중인 액션을 중단하고 즉시 전송",
194
+ "steer.now.unsupported": "비텍스트 콘텐츠가 포함되어 있어 중단이 지원되지 않습니다",
195
+ "steer.nowFailed": "중단 실패. 다시 시도하세요.",
196
+ "steer.next": "액션 후 전송",
197
+ "steer.next.aria": "노란색: 현재 액션 완료 후 삽입",
198
+ "steer.nextFailed": "스티어 실패. 다시 시도하세요.",
199
+ "steer.later": "다음 턴까지 대기",
200
+ "steer.later.aria": "초록색: 대기. 이전 스티어된 액션이 모두 완료된 후 처리",
201
+ "steer.revoke": "대기열로 되돌리기",
202
+ "steer.revoke.aria": "초록색: 삽입 취소, 다음 턴까지 대기",
203
+ "steer.revoke.unsupported": "비텍스트 콘텐츠가 포함되어 있어 취소가 지원되지 않습니다",
204
+ "steer.revokeFailed": "취소 실패. 다시 시도하세요.",
205
+ "steer.moveUp": "위로 이동",
206
+ "steer.moveDown": "아래로 이동",
207
+ "steer.reorder.unsupported": "비텍스트 콘텐츠가 포함되어 있어 재정렬이 지원되지 않습니다",
208
+ "steer.reorderFailed": "재정렬 실패. 다시 시도하세요.",
209
+ "steer.reorderStale": "대기열이 변경되었습니다. 이번 재정렬이 취소되었습니다. 다시 시도하세요.",
210
+ "steer.dragReorder": "드래그로 재정렬",
211
+ "steer.pullBack": "컴포저로 되돌려 편집",
212
+ "steer.pullBack.unsupported": "비텍스트 콘텐츠가 포함되어 있어 되돌리기가 지원되지 않습니다",
213
+ "steer.pullBack.composerBusy": "컴포저에 이미 콘텐츠가 있습니다. 먼저 전송하거나 비우세요",
214
+ "steer.pullBackFailed": "되돌리기 실패. 다시 시도하세요.",
215
+ "steer.badge.now": "중단 중",
216
+ "steer.badge.next": "스티어 중",
217
+ "steer.badge.later": "대기열",
218
+ "steer.unavailable.running": "실행 중에만 계획 가능",
219
+ "steer.clear": "취소 후 전체 지우기",
220
+ "steer.clear.confirm": "지우기 확인?",
221
+ "steer.clear.cancel": "지우기 취소",
222
+ "steer.clear.aria": "현재 실행을 중지하고 모든 대기열 메시지를 지우기",
223
+ "steer.clearFailed": "취소 후 전체 지우기 실패. 다시 시도하세요.",
224
+ "steer.freeze": "동결 후 추가",
225
+ "steer.resume": "재개 후 추가",
226
+ "steer.frozen": "동결됨: 현재 턴 완료 후 일시정지, 재개 시 대기열 계속",
227
+ "steer.frozenInput": "동결됨: 입력 일시정지, 재개 시 계속",
228
+ "steer.frozenBadge": "동결됨",
229
+ "steer.freezeFailed": "동결 실패. 다시 시도하세요.",
230
+ "steer.resumeFailed": "재개 실패. 다시 시도하세요."
231
+ },
232
+ fr: {
233
+ "family.title": "Trafic d'entrée",
234
+ "family.busyEnter": "Comportement busy-Enter (géré par ce plugin)",
235
+ "family.desc": "Entrée simple met en file d'attente quand occupé sans interrompre ; utilisez le bouton geler/rediriger du composeur pour interrompre. Géré automatiquement — rien à configurer.",
236
+ "queue.count": "{n} messages en file d'attente",
237
+ "queue.edit": "Modifier le message en file d'attente",
238
+ "queue.edit.unsupported": "Contient du contenu non textuel ; modification non prise en charge",
239
+ "queue.save": "Enregistrer le message en file d'attente",
240
+ "queue.cancelEdit": "Annuler la modification",
241
+ "queue.remove": "Supprimer le message en file d'attente",
242
+ "queue.removeFailed": "Échec de la suppression : le message a peut-être commencé à être envoyé.",
243
+ "queue.editFailed": "Échec de la modification : le message a peut-être commencé à être envoyé.",
244
+ "queue.editFailed.pulledBack": "Échec de la modification ; le contenu a été renvoyé au composeur, veuillez vérifier et renvoyer.",
245
+ "steer.inflight": "{n} en cours d'insertion",
246
+ "steer.now": "Interrompre et envoyer",
247
+ "steer.now.aria": "Rouge : interrompre l'action en cours et envoyer immédiatement",
248
+ "steer.now.unsupported": "Contient du contenu non textuel ; interruption non prise en charge",
249
+ "steer.nowFailed": "Échec de l'interruption, veuillez réessayer.",
250
+ "steer.next": "Envoyer après l'action",
251
+ "steer.next.aria": "Jaune : insérer après la fin de l'action en cours",
252
+ "steer.nextFailed": "Échec de la redirection, veuillez réessayer.",
253
+ "steer.later": "Mettre en file pour le prochain tour",
254
+ "steer.later.aria": "Vert : mettre en file ; traité après la fin de toutes les actions redirigées",
255
+ "steer.revoke": "Rappeler en file d'attente",
256
+ "steer.revoke.aria": "Vert : annuler l'insertion et mettre en file pour le prochain tour",
257
+ "steer.revoke.unsupported": "Contient du contenu non textuel ; rappel non pris en charge",
258
+ "steer.revokeFailed": "Échec du rappel, veuillez réessayer.",
259
+ "steer.moveUp": "Déplacer vers le haut",
260
+ "steer.moveDown": "Déplacer vers le bas",
261
+ "steer.reorder.unsupported": "Contient du contenu non textuel ; réordonnancement non pris en charge",
262
+ "steer.reorderFailed": "Échec du réordonnancement, veuillez réessayer.",
263
+ "steer.reorderStale": "La file a changé ; ce réordonnancement a été annulé, veuillez réessayer.",
264
+ "steer.dragReorder": "Glisser pour réordonner",
265
+ "steer.pullBack": "Renvoyer au composeur pour modification",
266
+ "steer.pullBack.unsupported": "Contient du contenu non textuel ; renvoi non pris en charge",
267
+ "steer.pullBack.composerBusy": "Le composeur contient déjà du contenu ; envoyez ou effacez d'abord",
268
+ "steer.pullBackFailed": "Échec du renvoi au composeur, veuillez réessayer.",
269
+ "steer.badge.now": "interruption",
270
+ "steer.badge.next": "redirection",
271
+ "steer.badge.later": "en file",
272
+ "steer.unavailable.running": "Planification possible uniquement en cours d'exécution",
273
+ "steer.clear": "Annuler et tout effacer",
274
+ "steer.clear.confirm": "Confirmer l'effacement ?",
275
+ "steer.clear.cancel": "Annuler l'effacement",
276
+ "steer.clear.aria": "Annuler l'exécution en cours et effacer tous les messages en file d'attente",
277
+ "steer.clearFailed": "Échec de l'annulation et de l'effacement, veuillez réessayer.",
278
+ "steer.freeze": "Geler et ajouter",
279
+ "steer.resume": "Reprendre et ajouter",
280
+ "steer.frozen": "Gélé : le tour en cours se termine puis la file est suspendue jusqu'à la reprise",
281
+ "steer.frozenInput": "Gélé : entrée suspendue, reprendre pour continuer",
282
+ "steer.frozenBadge": "gelé",
283
+ "steer.freezeFailed": "Échec du gel, veuillez réessayer.",
284
+ "steer.resumeFailed": "Échec de la reprise, veuillez réessayer."
285
+ },
286
+ de: {
287
+ "family.title": "Eingabeverkehr",
288
+ "family.busyEnter": "Busy-Enter-Verhalten (von diesem Plugin verwaltet)",
289
+ "family.desc": "Einfaches Enter reiht bei Beschäftigung ein, statt zu unterbrechen; zum Unterbrechen die Einfrieren/Steuern-Schaltfläche im Composer verwenden. Automatisch verwaltet — keine Konfiguration nötig.",
290
+ "queue.count": "{n} Nachrichten in der Warteschlange",
291
+ "queue.edit": "Warteschlangennachricht bearbeiten",
292
+ "queue.edit.unsupported": "Enthält Nicht-Text-Inhalt; Bearbeiten nicht unterstützt",
293
+ "queue.save": "Warteschlangennachricht speichern",
294
+ "queue.cancelEdit": "Bearbeitung abbrechen",
295
+ "queue.remove": "Warteschlangennachricht entfernen",
296
+ "queue.removeFailed": "Entfernen fehlgeschlagen: Die Nachricht wurde möglicherweise bereits gesendet.",
297
+ "queue.editFailed": "Bearbeiten fehlgeschlagen: Die Nachricht wurde möglicherweise bereits gesendet.",
298
+ "queue.editFailed.pulledBack": "Bearbeiten fehlgeschlagen; Inhalt wurde in den Composer zurückverschoben, bitte prüfen und erneut senden.",
299
+ "steer.inflight": "{n} werden eingefügt",
300
+ "steer.now": "Unterbrechen und senden",
301
+ "steer.now.aria": "Rot: Laufende Aktion unterbrechen und sofort senden",
302
+ "steer.now.unsupported": "Enthält Nicht-Text-Inhalt; Unterbrechen nicht unterstützt",
303
+ "steer.nowFailed": "Unterbrechen fehlgeschlagen, bitte erneut versuchen.",
304
+ "steer.next": "Nach Aktion senden",
305
+ "steer.next.aria": "Gelb: Nach Abschluss der aktuellen Aktion einfügen",
306
+ "steer.nextFailed": "Steuerung fehlgeschlagen, bitte erneut versuchen.",
307
+ "steer.later": "Für nächste Runde einreihen",
308
+ "steer.later.aria": "Grün: Einreihen; Verarbeitung nach Abschluss aller zuvor gesteuerten Aktionen",
309
+ "steer.revoke": "Zurück in Warteschlange",
310
+ "steer.revoke.aria": "Grün: Einfügung widerrufen und für nächste Runde einreihen",
311
+ "steer.revoke.unsupported": "Enthält Nicht-Text-Inhalt; Widerrufen nicht unterstützt",
312
+ "steer.revokeFailed": "Widerrufen fehlgeschlagen, bitte erneut versuchen.",
313
+ "steer.moveUp": "Nach oben",
314
+ "steer.moveDown": "Nach unten",
315
+ "steer.reorder.unsupported": "Enthält Nicht-Text-Inhalt; Umsortieren nicht unterstützt",
316
+ "steer.reorderFailed": "Umsortieren fehlgeschlagen, bitte erneut versuchen.",
317
+ "steer.reorderStale": "Warteschlange geändert; Umsortierung abgebrochen, bitte erneut versuchen.",
318
+ "steer.dragReorder": "Ziehen zum Umsortieren",
319
+ "steer.pullBack": "In Composer zurückholen",
320
+ "steer.pullBack.unsupported": "Enthält Nicht-Text-Inhalt; Zurückholen nicht unterstützt",
321
+ "steer.pullBack.composerBusy": "Composer enthält bereits Inhalt; zuerst senden oder leeren",
322
+ "steer.pullBackFailed": "Zurückholen fehlgeschlagen, bitte erneut versuchen.",
323
+ "steer.badge.now": "unterbricht",
324
+ "steer.badge.next": "steuert",
325
+ "steer.badge.later": "eingereiht",
326
+ "steer.unavailable.running": "Planung nur während der Ausführung möglich",
327
+ "steer.clear": "Abbrechen und leeren",
328
+ "steer.clear.confirm": "Leeren bestätigen?",
329
+ "steer.clear.cancel": "Leeren abbrechen",
330
+ "steer.clear.aria": "Aktuelle Ausführung abbrechen und alle Warteschlangennachrichten leeren",
331
+ "steer.clearFailed": "Abbrechen und Leeren fehlgeschlagen, bitte erneut versuchen.",
332
+ "steer.freeze": "Einfrieren & anhängen",
333
+ "steer.resume": "Fortsetzen & anhängen",
334
+ "steer.frozen": "Eingefroren: Aktuelle Runde endet, dann pausiert die Warteschlange bis zur Fortsetzung",
335
+ "steer.frozenInput": "Eingefroren: Eingabe pausiert, fortsetzen um weiterzumachen",
336
+ "steer.frozenBadge": "eingefroren",
337
+ "steer.freezeFailed": "Einfrieren fehlgeschlagen, bitte erneut versuchen.",
338
+ "steer.resumeFailed": "Fortsetzen fehlgeschlagen, bitte erneut versuchen."
339
+ },
340
+ it: {
341
+ "family.title": "Traffico di input",
342
+ "family.busyEnter": "Comportamento busy-Enter (gestito da questo plugin)",
343
+ "family.desc": "Invio semplice accoda quando occupato senza interrompere; usa il pulsante congela/devia nel compositore per interrompere. Gestito automaticamente — nessuna configurazione necessaria.",
344
+ "queue.count": "{n} messaggi in coda",
345
+ "queue.edit": "Modifica messaggio in coda",
346
+ "queue.edit.unsupported": "Contiene contenuto non testuale; modifica non supportata",
347
+ "queue.save": "Salva messaggio in coda",
348
+ "queue.cancelEdit": "Annulla modifica",
349
+ "queue.remove": "Rimuovi messaggio in coda",
350
+ "queue.removeFailed": "Rimozione fallita: il messaggio potrebbe aver iniziato l'invio.",
351
+ "queue.editFailed": "Modifica fallita: il messaggio potrebbe aver iniziato l'invio.",
352
+ "queue.editFailed.pulledBack": "Modifica fallita; il contenuto è stato riportato nel compositore, verificare e reinviare.",
353
+ "steer.inflight": "{n} in inserimento",
354
+ "steer.now": "Interrompi e invia",
355
+ "steer.now.aria": "Rosso: interrompi l'azione in corso e invia immediatamente",
356
+ "steer.now.unsupported": "Contiene contenuto non testuale; interruzione non supportata",
357
+ "steer.nowFailed": "Interruzione fallita, riprovare.",
358
+ "steer.next": "Invia dopo l'azione",
359
+ "steer.next.aria": "Giallo: inserisci al termine dell'azione corrente",
360
+ "steer.nextFailed": "Deviazione fallita, riprovare.",
361
+ "steer.later": "Accoda per il prossimo turno",
362
+ "steer.later.aria": "Verde: accoda; elaborato al termine di tutte le azioni deviate precedenti",
363
+ "steer.revoke": "Riporta in coda",
364
+ "steer.revoke.aria": "Verde: revoca l'inserimento e accoda per il prossimo turno",
365
+ "steer.revoke.unsupported": "Contiene contenuto non testuale; revoca non supportata",
366
+ "steer.revokeFailed": "Revoca fallita, riprovare.",
367
+ "steer.moveUp": "Sposta su",
368
+ "steer.moveDown": "Sposta giù",
369
+ "steer.reorder.unsupported": "Contiene contenuto non testuale; riordino non supportato",
370
+ "steer.reorderFailed": "Riordino fallito, riprovare.",
371
+ "steer.reorderStale": "La coda è cambiata; riordino annullato, riprovare.",
372
+ "steer.dragReorder": "Trascina per riordinare",
373
+ "steer.pullBack": "Riporta nel compositore per modifica",
374
+ "steer.pullBack.unsupported": "Contiene contenuto non testuale; riporto non supportato",
375
+ "steer.pullBack.composerBusy": "Il compositore contiene già contenuto; inviare o svuotare prima",
376
+ "steer.pullBackFailed": "Riporto nel compositore fallito, riprovare.",
377
+ "steer.badge.now": "interruzione",
378
+ "steer.badge.next": "deviazione",
379
+ "steer.badge.later": "in coda",
380
+ "steer.unavailable.running": "Pianificazione disponibile solo durante l'esecuzione",
381
+ "steer.clear": "Annulla e svuota",
382
+ "steer.clear.confirm": "Confermare lo svuotamento?",
383
+ "steer.clear.cancel": "Annulla svuotamento",
384
+ "steer.clear.aria": "Annulla l'esecuzione corrente e svuota tutti i messaggi in coda",
385
+ "steer.clearFailed": "Annullamento e svuotamento falliti, riprovare.",
386
+ "steer.freeze": "Congela e aggiungi",
387
+ "steer.resume": "Riprendi e aggiungi",
388
+ "steer.frozen": "Congelato: il turno corrente termina, poi la coda si sospende fino alla ripresa",
389
+ "steer.frozenInput": "Congelato: input sospeso, riprendere per continuare",
390
+ "steer.frozenBadge": "congelato",
391
+ "steer.freezeFailed": "Congelamento fallito, riprovare.",
392
+ "steer.resumeFailed": "Ripresa fallita, riprovare."
393
+ },
394
+ ru: {
395
+ "family.title": "Входящий поток",
396
+ "family.busyEnter": "Поведение busy-Enter (управляется этим плагином)",
397
+ "family.desc": "Обычный Enter ставит в очередь при занятости, не прерывая; для прерывания используйте кнопку заморозки/перенаправления в поле ввода. Управляется автоматически — настройка не требуется.",
398
+ "queue.count": "{n} сообщений в очереди",
399
+ "queue.edit": "Редактировать сообщение в очереди",
400
+ "queue.edit.unsupported": "Содержит нетекстовый контент; редактирование не поддерживается",
401
+ "queue.save": "Сохранить сообщение в очереди",
402
+ "queue.cancelEdit": "Отменить редактирование",
403
+ "queue.remove": "Удалить сообщение из очереди",
404
+ "queue.removeFailed": "Не удалось удалить: сообщение, возможно, уже отправляется.",
405
+ "queue.editFailed": "Не удалось отредактировать: сообщение, возможно, уже отправляется.",
406
+ "queue.editFailed.pulledBack": "Не удалось отредактировать; содержимое возвращено в поле ввода, проверьте и отправьте снова.",
407
+ "steer.inflight": "{n} вставляется",
408
+ "steer.now": "Прервать и отправить",
409
+ "steer.now.aria": "Красный: прервать текущее действие и отправить немедленно",
410
+ "steer.now.unsupported": "Содержит нетекстовый контент; прерывание не поддерживается",
411
+ "steer.nowFailed": "Не удалось прервать, повторите.",
412
+ "steer.next": "Отправить после действия",
413
+ "steer.next.aria": "Жёлтый: вставить после завершения текущего действия",
414
+ "steer.nextFailed": "Не удалось перенаправить, повторите.",
415
+ "steer.later": "В очередь на следующий ход",
416
+ "steer.later.aria": "Зелёный: в очередь; обработка после завершения всех предыдущих перенаправленных действий",
417
+ "steer.revoke": "Отозвать в очередь",
418
+ "steer.revoke.aria": "Зелёный: отменить вставку и поставить в очередь на следующий ход",
419
+ "steer.revoke.unsupported": "Содержит нетекстовый контент; отзыв не поддерживается",
420
+ "steer.revokeFailed": "Не удалось отозвать, повторите.",
421
+ "steer.moveUp": "Вверх",
422
+ "steer.moveDown": "Вниз",
423
+ "steer.reorder.unsupported": "Содержит нетекстовый контент; пересортировка не поддерживается",
424
+ "steer.reorderFailed": "Не удалось пересортировать, повторите.",
425
+ "steer.reorderStale": "Очередь изменилась; пересортировка отменена, повторите.",
426
+ "steer.dragReorder": "Перетащите для пересортировки",
427
+ "steer.pullBack": "Вернуть в поле ввода",
428
+ "steer.pullBack.unsupported": "Содержит нетекстовый контент; возврат не поддерживается",
429
+ "steer.pullBack.composerBusy": "В поле ввода уже есть содержимое; отправьте или очистите сначала",
430
+ "steer.pullBackFailed": "Не удалось вернуть в поле ввода, повторите.",
431
+ "steer.badge.now": "прерывание",
432
+ "steer.badge.next": "перенаправление",
433
+ "steer.badge.later": "в очереди",
434
+ "steer.unavailable.running": "Планирование доступно только во время выполнения",
435
+ "steer.clear": "Отменить и очистить",
436
+ "steer.clear.confirm": "Подтвердить очистку?",
437
+ "steer.clear.cancel": "Отменить очистку",
438
+ "steer.clear.aria": "Отменить текущее выполнение и очистить все сообщения в очереди",
439
+ "steer.clearFailed": "Не удалось отменить и очистить, повторите.",
440
+ "steer.freeze": "Заморозить и добавить",
441
+ "steer.resume": "Возобновить и добавить",
442
+ "steer.frozen": "Заморожено: текущий ход завершится, затем очередь приостановится до возобновления",
443
+ "steer.frozenInput": "Заморожено: ввод приостановлен, возобновите для продолжения",
444
+ "steer.frozenBadge": "заморожено",
445
+ "steer.freezeFailed": "Не удалось заморозить, повторите.",
446
+ "steer.resumeFailed": "Не удалось возобновить, повторите."
447
+ },
448
+ es: {
449
+ "family.title": "Tráfico de entrada",
450
+ "family.busyEnter": "Comportamiento busy-Enter (gestionado por este plugin)",
451
+ "family.desc": "Enter simple pone en cola cuando está ocupado sin interrumpir; usa el botón congelar/redirigir del compositor para interrumpir. Gestionado automáticamente — nada que configurar.",
452
+ "queue.count": "{n} mensajes en cola",
453
+ "queue.edit": "Editar mensaje en cola",
454
+ "queue.edit.unsupported": "Contiene contenido no textual; edición no compatible",
455
+ "queue.save": "Guardar mensaje en cola",
456
+ "queue.cancelEdit": "Cancelar edición",
457
+ "queue.remove": "Eliminar mensaje en cola",
458
+ "queue.removeFailed": "Error al eliminar: el mensaje puede haber comenzado a enviarse.",
459
+ "queue.editFailed": "Error al editar: el mensaje puede haber comenzado a enviarse.",
460
+ "queue.editFailed.pulledBack": "Error al editar; el contenido fue devuelto al compositor, revise y reenvíe.",
461
+ "steer.inflight": "{n} insertándose",
462
+ "steer.now": "Interrumpir y enviar",
463
+ "steer.now.aria": "Rojo: interrumpir la acción en curso y enviar inmediatamente",
464
+ "steer.now.unsupported": "Contiene contenido no textual; interrupción no compatible",
465
+ "steer.nowFailed": "Error al interrumpir, inténtelo de nuevo.",
466
+ "steer.next": "Enviar después de la acción",
467
+ "steer.next.aria": "Amarillo: insertar después de que termine la acción actual",
468
+ "steer.nextFailed": "Error al redirigir, inténtelo de nuevo.",
469
+ "steer.later": "Encolar para el próximo turno",
470
+ "steer.later.aria": "Verde: encolar; se procesa cuando terminen todas las acciones redirigidas previas",
471
+ "steer.revoke": "Devolver a la cola",
472
+ "steer.revoke.aria": "Verde: revocar la inserción y encolar para el próximo turno",
473
+ "steer.revoke.unsupported": "Contiene contenido no textual; revocación no compatible",
474
+ "steer.revokeFailed": "Error al revocar, inténtelo de nuevo.",
475
+ "steer.moveUp": "Mover arriba",
476
+ "steer.moveDown": "Mover abajo",
477
+ "steer.reorder.unsupported": "Contiene contenido no textual; reordenación no compatible",
478
+ "steer.reorderFailed": "Error al reordenar, inténtelo de nuevo.",
479
+ "steer.reorderStale": "La cola cambió; reordenación cancelada, inténtelo de nuevo.",
480
+ "steer.dragReorder": "Arrastrar para reordenar",
481
+ "steer.pullBack": "Devolver al compositor para editar",
482
+ "steer.pullBack.unsupported": "Contiene contenido no textual; devolución no compatible",
483
+ "steer.pullBack.composerBusy": "El compositor ya tiene contenido; envíe o vacíe primero",
484
+ "steer.pullBackFailed": "Error al devolver al compositor, inténtelo de nuevo.",
485
+ "steer.badge.now": "interrumpiendo",
486
+ "steer.badge.next": "redirigiendo",
487
+ "steer.badge.later": "en cola",
488
+ "steer.unavailable.running": "Planificación solo disponible durante la ejecución",
489
+ "steer.clear": "Cancelar y vaciar",
490
+ "steer.clear.confirm": "¿Confirmar vaciado?",
491
+ "steer.clear.cancel": "Cancelar vaciado",
492
+ "steer.clear.aria": "Cancelar la ejecución actual y vaciar todos los mensajes en cola",
493
+ "steer.clearFailed": "Error al cancelar y vaciar, inténtelo de nuevo.",
494
+ "steer.freeze": "Congelar y añadir",
495
+ "steer.resume": "Reanudar y añadir",
496
+ "steer.frozen": "Congelado: el turno actual termina y la cola se pausa hasta la reanudación",
497
+ "steer.frozenInput": "Congelado: entrada pausada, reanude para continuar",
498
+ "steer.frozenBadge": "congelado",
499
+ "steer.freezeFailed": "Error al congelar, inténtelo de nuevo.",
500
+ "steer.resumeFailed": "Error al reanudar, inténtelo de nuevo."
501
+ }
123
502
  };
124
503
  //#endregion
125
504
  //#region src/client/freeze-store.ts
@@ -210,8 +589,8 @@ window.__ModuleLoader__.load({
210
589
  for (const listener of listeners) listener();
211
590
  }
212
591
  //#endregion
213
- //#region \0dsh-css:E:\test\rewrite-agently\mine-dsh-plugins\_wt-020\dsh-input-traffic\src\client\steer-queue-dock.module.css.mjs
214
- const css$1 = ".jJPyLG_dock{box-sizing:border-box;width:min(calc(100% - var(--dsh-composer-side-clearance,16px) - var(--dsh-composer-side-clearance,16px) - var(--dsh-composer-dock-inset,8px) - var(--dsh-composer-dock-inset,8px)), calc(var(--dsh-chat-content-width,100%) - var(--dsh-composer-dock-inset,8px) - var(--dsh-composer-dock-inset,8px)));max-width:calc(var(--dsh-composer-card-max-width,var(--dsh-chat-content-width,100%)) - var(--dsh-composer-dock-inset,8px) - var(--dsh-composer-dock-inset,8px));padding:0 var(--dsh-composer-dock-inset,8px);flex:none;margin:0 auto}.jJPyLG_panel{background:var(--dsw-alias-bg-layer-1,#fffc);border:1px solid var(--dsw-alias-border-l2,#00000014);border-radius:10px;overflow:hidden}.jJPyLG_toolbar{border-bottom:1px solid var(--dsw-alias-border-l2,#0000000f);align-items:center;gap:8px;padding:4px 8px;display:flex}.jJPyLG_header{color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:2px 6px;font-size:12px;display:inline-flex}.jJPyLG_header:disabled{cursor:default}.jJPyLG_lead{color:var(--dsw-alias-label-tertiary,#9ca3af);display:inline-flex}.jJPyLG_count{font-weight:600}.jJPyLG_chevron{color:var(--dsw-alias-label-tertiary,#9ca3af);display:inline-flex}.jJPyLG_toolbarActions{margin-left:auto}.jJPyLG_clear{color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:4px;padding:3px 8px;font-size:12px;display:inline-flex}.jJPyLG_freeze{border:1px solid var(--dsw-alias-border-l3,#0000001f);color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;background:0 0;border-radius:6px;align-items:center;gap:4px;padding:3px 8px;font-size:12px;display:inline-flex}.jJPyLG_freeze[aria-pressed=true]{border-color:var(--dsw-alias-state-success-primary,#30a46c);color:var(--dsw-alias-state-success-primary,#30a46c)}.jJPyLG_freeze:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover,#0000000a)}.jJPyLG_freeze:disabled{opacity:.5;cursor:default}.jJPyLG_frozenBanner{border-bottom:1px solid var(--dsw-alias-border-l2,#0000000f);background:color-mix(in srgb, var(--dsw-alias-state-success-primary,#30a46c) 8%, transparent);color:var(--dsw-alias-state-success-primary,#30a46c);padding:4px 10px;font-size:12px}.jJPyLG_frozenList{margin:0;padding:4px;list-style:none}.jJPyLG_frozenRow{border-radius:6px;align-items:center;gap:8px;padding:4px 6px;display:flex}.jJPyLG_frozenMark{color:var(--dsw-alias-label-tertiary,#9ca3af);flex:none;margin-left:auto;font-size:11px}.jJPyLG_clear:hover:not(:disabled){border-color:var(--dsw-alias-border-l3,#0000001f);background:var(--dsw-alias-interactive-bg-hover,#0000000a)}.jJPyLG_clear:disabled{opacity:.5;cursor:default}.jJPyLG_clearConfirm{border-color:var(--dsw-alias-state-error-primary,#e5484d);color:var(--dsw-alias-state-error-primary,#e5484d)}.jJPyLG_clearConfirm:hover:not(:disabled){border-color:var(--dsw-alias-state-error-primary,#e5484d);background:color-mix(in srgb, var(--dsw-alias-state-error-primary,#e5484d) 8%, transparent)}.jJPyLG_clearCancel{color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:4px;padding:3px 8px;font-size:12px;display:inline-flex}.jJPyLG_clearCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover,#0000000a)}.jJPyLG_clearLabel{font-size:12px}.jJPyLG_list{margin:0;padding:4px;list-style:none}.jJPyLG_row{border-radius:6px;align-items:center;gap:8px;padding:4px 6px;display:flex}.jJPyLG_row[draggable=true]{cursor:grab}.jJPyLG_row[draggable=true]:active{cursor:grabbing}.jJPyLG_rowDragOver{outline:2px dashed var(--dsw-alias-border-l4,#00000040);outline-offset:-2px;background:var(--dsw-alias-interactive-bg-hover,#0000000d)}.jJPyLG_row:hover{background:var(--dsw-alias-interactive-bg-hover,#00000008)}.jJPyLG_row[data-editing]{align-items:flex-start}.jJPyLG_preview{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-primary,#1f2937);flex:1;font-size:13px;overflow:hidden}.jJPyLG_badge{white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:4px;padding:1px 6px;font-size:11px;line-height:16px;display:inline-flex}.jJPyLG_badgeLabel{color:inherit}.jJPyLG_badgeNow{color:var(--dsw-alias-state-error-primary,#e5484d);background:color-mix(in srgb, var(--dsw-alias-state-error-primary,#e5484d) 10%, transparent)}.jJPyLG_badgeNext{color:var(--dsw-alias-state-warn-primary,#e8a33d);background:color-mix(in srgb, var(--dsw-alias-state-warn-primary,#e8a33d) 12%, transparent)}.jJPyLG_badgeLater{color:var(--dsw-alias-state-success-primary,#30a46c);background:color-mix(in srgb, var(--dsw-alias-state-success-primary,#30a46c) 12%, transparent)}.jJPyLG_badgeNow .jJPyLG_dot{background:var(--dsw-alias-state-error-primary,#e5484d)}.jJPyLG_badgeNext .jJPyLG_dot{background:var(--dsw-alias-state-warn-primary,#e8a33d)}.jJPyLG_badgeLater .jJPyLG_dot{background:var(--dsw-alias-state-success-primary,#30a46c)}.jJPyLG_steeringList{margin:0;padding:0 4px 4px;list-style:none}.jJPyLG_steeringList .jJPyLG_row{opacity:.85}.jJPyLG_editor{border:1px solid var(--dsw-alias-border-l3,#00000026);background:var(--dsw-alias-bg-layer-2,#fff);resize:none;border-radius:6px;flex:1;min-width:0;max-height:160px;padding:4px 6px;font-size:13px;line-height:20px;overflow-y:auto}.jJPyLG_actions{align-items:center;gap:2px;display:inline-flex}.jJPyLG_action{width:24px;height:24px;color:var(--dsw-alias-label-tertiary,#9ca3af);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}.jJPyLG_action:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover,#0000000d);color:var(--dsw-alias-label-primary,#1f2937)}.jJPyLG_action:disabled{opacity:.4;cursor:default}.jJPyLG_plan{border-left:1px solid var(--dsw-alias-border-l2,#00000014);align-items:center;gap:2px;margin-left:4px;padding-left:6px;display:inline-flex}.jJPyLG_tier{cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;width:20px;height:20px;padding:0;display:inline-flex}.jJPyLG_tier:hover:not(:disabled){border-color:var(--dsw-alias-border-l4,#0003)}.jJPyLG_tier:disabled{cursor:default}.jJPyLG_tierNow{background:#e5484d1f;border-color:#e5484d}.jJPyLG_tierNext{background:#e8a33d1f;border-color:#e8a33d}.jJPyLG_tierLater{border-color:var(--dsw-alias-state-success-primary,#30a46c);background:color-mix(in srgb, var(--dsw-alias-state-success-primary,#30a46c) 12%, transparent)}.jJPyLG_dot{border-radius:50%;width:10px;height:10px}.jJPyLG_tierNow .jJPyLG_dot{background:#e5484d}.jJPyLG_tierNext .jJPyLG_dot{background:#e8a33d}.jJPyLG_tierLater .jJPyLG_dot{background:#30a46c}";
592
+ //#region \0dsh-css:E:\test\rewrite-agently\mine-dsh-plugins\dsh-input-traffic\src\client\steer-queue-dock.module.css.mjs
593
+ const css$1 = ".FNESVa_dock{box-sizing:border-box;width:min(calc(100% - var(--dsh-composer-side-clearance,16px) - var(--dsh-composer-side-clearance,16px) - var(--dsh-composer-dock-inset,8px) - var(--dsh-composer-dock-inset,8px)), calc(var(--dsh-chat-content-width,100%) - var(--dsh-composer-dock-inset,8px) - var(--dsh-composer-dock-inset,8px)));max-width:calc(var(--dsh-composer-card-max-width,var(--dsh-chat-content-width,100%)) - var(--dsh-composer-dock-inset,8px) - var(--dsh-composer-dock-inset,8px));padding:0 var(--dsh-composer-dock-inset,8px);flex:none;margin:0 auto}.FNESVa_panel{background:var(--dsw-alias-bg-layer-1,#fffc);border:1px solid var(--dsw-alias-border-l2,#00000014);border-radius:10px;overflow:hidden}.FNESVa_toolbar{border-bottom:1px solid var(--dsw-alias-border-l2,#0000000f);align-items:center;gap:8px;padding:4px 8px;display:flex}.FNESVa_header{color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:2px 6px;font-size:12px;display:inline-flex}.FNESVa_header:disabled{cursor:default}.FNESVa_lead{color:var(--dsw-alias-label-tertiary,#9ca3af);display:inline-flex}.FNESVa_count{font-weight:600}.FNESVa_chevron{color:var(--dsw-alias-label-tertiary,#9ca3af);display:inline-flex}.FNESVa_toolbarActions{margin-left:auto}.FNESVa_clear{color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:4px;padding:3px 8px;font-size:12px;display:inline-flex}.FNESVa_freeze{border:1px solid var(--dsw-alias-border-l3,#0000001f);color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;background:0 0;border-radius:6px;align-items:center;gap:4px;padding:3px 8px;font-size:12px;display:inline-flex}.FNESVa_freeze[aria-pressed=true]{border-color:var(--dsw-alias-state-success-primary,#30a46c);color:var(--dsw-alias-state-success-primary,#30a46c)}.FNESVa_freeze:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover,#0000000a)}.FNESVa_freeze:disabled{opacity:.5;cursor:default}.FNESVa_frozenBanner{border-bottom:1px solid var(--dsw-alias-border-l2,#0000000f);background:color-mix(in srgb, var(--dsw-alias-state-success-primary,#30a46c) 8%, transparent);color:var(--dsw-alias-state-success-primary,#30a46c);padding:4px 10px;font-size:12px}.FNESVa_frozenList{margin:0;padding:4px;list-style:none}.FNESVa_frozenRow{border-radius:6px;align-items:center;gap:8px;padding:4px 6px;display:flex}.FNESVa_frozenMark{color:var(--dsw-alias-label-tertiary,#9ca3af);flex:none;margin-left:auto;font-size:11px}.FNESVa_clear:hover:not(:disabled){border-color:var(--dsw-alias-border-l3,#0000001f);background:var(--dsw-alias-interactive-bg-hover,#0000000a)}.FNESVa_clear:disabled{opacity:.5;cursor:default}.FNESVa_clearConfirm{border-color:var(--dsw-alias-state-error-primary,#e5484d);color:var(--dsw-alias-state-error-primary,#e5484d)}.FNESVa_clearConfirm:hover:not(:disabled){border-color:var(--dsw-alias-state-error-primary,#e5484d);background:color-mix(in srgb, var(--dsw-alias-state-error-primary,#e5484d) 8%, transparent)}.FNESVa_clearCancel{color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:4px;padding:3px 8px;font-size:12px;display:inline-flex}.FNESVa_clearCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover,#0000000a)}.FNESVa_clearLabel{font-size:12px}.FNESVa_list{margin:0;padding:4px;list-style:none}.FNESVa_row{border-radius:6px;align-items:center;gap:8px;padding:4px 6px;display:flex}.FNESVa_row[draggable=true]{cursor:grab}.FNESVa_row[draggable=true]:active{cursor:grabbing}.FNESVa_rowDragOver{outline:2px dashed var(--dsw-alias-border-l4,#00000040);outline-offset:-2px;background:var(--dsw-alias-interactive-bg-hover,#0000000d)}.FNESVa_row:hover{background:var(--dsw-alias-interactive-bg-hover,#00000008)}.FNESVa_row[data-editing]{align-items:flex-start}.FNESVa_preview{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-primary,#1f2937);flex:1;font-size:13px;overflow:hidden}.FNESVa_badge{white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:4px;padding:1px 6px;font-size:11px;line-height:16px;display:inline-flex}.FNESVa_badgeLabel{color:inherit}.FNESVa_badgeNow{color:var(--dsw-alias-state-error-primary,#e5484d);background:color-mix(in srgb, var(--dsw-alias-state-error-primary,#e5484d) 10%, transparent)}.FNESVa_badgeNext{color:var(--dsw-alias-state-warn-primary,#e8a33d);background:color-mix(in srgb, var(--dsw-alias-state-warn-primary,#e8a33d) 12%, transparent)}.FNESVa_badgeLater{color:var(--dsw-alias-state-success-primary,#30a46c);background:color-mix(in srgb, var(--dsw-alias-state-success-primary,#30a46c) 12%, transparent)}.FNESVa_badgeNow .FNESVa_dot{background:var(--dsw-alias-state-error-primary,#e5484d)}.FNESVa_badgeNext .FNESVa_dot{background:var(--dsw-alias-state-warn-primary,#e8a33d)}.FNESVa_badgeLater .FNESVa_dot{background:var(--dsw-alias-state-success-primary,#30a46c)}.FNESVa_steeringList{margin:0;padding:0 4px 4px;list-style:none}.FNESVa_steeringList .FNESVa_row{opacity:.85}.FNESVa_editor{border:1px solid var(--dsw-alias-border-l3,#00000026);background:var(--dsw-alias-bg-layer-2,#fff);resize:none;border-radius:6px;flex:1;min-width:0;max-height:160px;padding:4px 6px;font-size:13px;line-height:20px;overflow-y:auto}.FNESVa_actions{align-items:center;gap:2px;display:inline-flex}.FNESVa_action{width:24px;height:24px;color:var(--dsw-alias-label-tertiary,#9ca3af);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}.FNESVa_action:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover,#0000000d);color:var(--dsw-alias-label-primary,#1f2937)}.FNESVa_action:disabled{opacity:.4;cursor:default}.FNESVa_plan{border-left:1px solid var(--dsw-alias-border-l2,#00000014);align-items:center;gap:2px;margin-left:4px;padding-left:6px;display:inline-flex}.FNESVa_tier{cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;width:20px;height:20px;padding:0;display:inline-flex}.FNESVa_tier:hover:not(:disabled){border-color:var(--dsw-alias-border-l4,#0003)}.FNESVa_tier:disabled{cursor:default}.FNESVa_tierNow{background:#e5484d1f;border-color:#e5484d}.FNESVa_tierNext{background:#e8a33d1f;border-color:#e8a33d}.FNESVa_tierLater{border-color:var(--dsw-alias-state-success-primary,#30a46c);background:color-mix(in srgb, var(--dsw-alias-state-success-primary,#30a46c) 12%, transparent)}.FNESVa_dot{border-radius:50%;width:10px;height:10px}.FNESVa_tierNow .FNESVa_dot{background:#e5484d}.FNESVa_tierNext .FNESVa_dot{background:#e8a33d}.FNESVa_tierLater .FNESVa_dot{background:#30a46c}";
215
594
  const tagId$1 = "dsh-input-traffic/steer-queue-dock.module.css";
216
595
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
217
596
  const tag = document.createElement("style");
@@ -221,42 +600,42 @@ window.__ModuleLoader__.load({
221
600
  document.head.appendChild(tag);
222
601
  }
223
602
  var steer_queue_dock_module_css_default = {
224
- "freeze": "jJPyLG_freeze",
225
- "clearLabel": "jJPyLG_clearLabel",
226
- "dock": "jJPyLG_dock",
227
- "clearConfirm": "jJPyLG_clearConfirm",
228
- "editor": "jJPyLG_editor",
229
- "plan": "jJPyLG_plan",
230
- "badgeNext": "jJPyLG_badgeNext",
231
- "frozenMark": "jJPyLG_frozenMark",
232
- "badge": "jJPyLG_badge",
233
- "list": "jJPyLG_list",
234
- "badgeNow": "jJPyLG_badgeNow",
235
- "clearCancel": "jJPyLG_clearCancel",
236
- "preview": "jJPyLG_preview",
237
- "steeringList": "jJPyLG_steeringList",
238
- "lead": "jJPyLG_lead",
239
- "tierNow": "jJPyLG_tierNow",
240
- "tierNext": "jJPyLG_tierNext",
241
- "action": "jJPyLG_action",
242
- "row": "jJPyLG_row",
243
- "badgeLater": "jJPyLG_badgeLater",
244
- "tier": "jJPyLG_tier",
245
- "frozenList": "jJPyLG_frozenList",
246
- "actions": "jJPyLG_actions",
247
- "tierLater": "jJPyLG_tierLater",
248
- "chevron": "jJPyLG_chevron",
249
- "rowDragOver": "jJPyLG_rowDragOver",
250
- "dot": "jJPyLG_dot",
251
- "panel": "jJPyLG_panel",
252
- "count": "jJPyLG_count",
253
- "toolbar": "jJPyLG_toolbar",
254
- "frozenRow": "jJPyLG_frozenRow",
255
- "header": "jJPyLG_header",
256
- "frozenBanner": "jJPyLG_frozenBanner",
257
- "clear": "jJPyLG_clear",
258
- "toolbarActions": "jJPyLG_toolbarActions",
259
- "badgeLabel": "jJPyLG_badgeLabel"
603
+ "dock": "FNESVa_dock",
604
+ "list": "FNESVa_list",
605
+ "toolbar": "FNESVa_toolbar",
606
+ "actions": "FNESVa_actions",
607
+ "badgeLabel": "FNESVa_badgeLabel",
608
+ "editor": "FNESVa_editor",
609
+ "count": "FNESVa_count",
610
+ "header": "FNESVa_header",
611
+ "frozenBanner": "FNESVa_frozenBanner",
612
+ "clearCancel": "FNESVa_clearCancel",
613
+ "rowDragOver": "FNESVa_rowDragOver",
614
+ "steeringList": "FNESVa_steeringList",
615
+ "clear": "FNESVa_clear",
616
+ "action": "FNESVa_action",
617
+ "frozenRow": "FNESVa_frozenRow",
618
+ "frozenMark": "FNESVa_frozenMark",
619
+ "plan": "FNESVa_plan",
620
+ "toolbarActions": "FNESVa_toolbarActions",
621
+ "freeze": "FNESVa_freeze",
622
+ "lead": "FNESVa_lead",
623
+ "preview": "FNESVa_preview",
624
+ "badgeLater": "FNESVa_badgeLater",
625
+ "tierNow": "FNESVa_tierNow",
626
+ "row": "FNESVa_row",
627
+ "panel": "FNESVa_panel",
628
+ "badgeNow": "FNESVa_badgeNow",
629
+ "dot": "FNESVa_dot",
630
+ "tierLater": "FNESVa_tierLater",
631
+ "badgeNext": "FNESVa_badgeNext",
632
+ "tier": "FNESVa_tier",
633
+ "tierNext": "FNESVa_tierNext",
634
+ "chevron": "FNESVa_chevron",
635
+ "badge": "FNESVa_badge",
636
+ "frozenList": "FNESVa_frozenList",
637
+ "clearLabel": "FNESVa_clearLabel",
638
+ "clearConfirm": "FNESVa_clearConfirm"
260
639
  };
261
640
  //#endregion
262
641
  //#region src/client/steer-queue-dock.tsx
@@ -1223,8 +1602,8 @@ window.__ModuleLoader__.load({
1223
1602
  globalThis.__DSH_SESSION_GUARD_BRIDGE__ = true;
1224
1603
  } catch {}
1225
1604
  //#endregion
1226
- //#region \0dsh-css:E:\test\rewrite-agently\mine-dsh-plugins\_wt-020\dsh-input-traffic\src\client\freeze-button.module.css.mjs
1227
- const css = "._5uus5a_freeze{border:1px solid var(--dsw-alias-border-l3,#0000001f);height:24px;color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;white-space:nowrap;background:0 0;border-radius:6px;align-items:center;gap:4px;padding:0 8px;font-size:12px;display:inline-flex}._5uus5a_freeze:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover,#0000000a)}._5uus5a_freeze[aria-pressed=true]{border-color:var(--dsw-alias-state-success-primary,#30a46c);color:var(--dsw-alias-state-success-primary,#30a46c);background:color-mix(in srgb, var(--dsw-alias-state-success-primary,#30a46c) 8%, transparent)}._5uus5a_label{font-size:12px}";
1605
+ //#region \0dsh-css:E:\test\rewrite-agently\mine-dsh-plugins\dsh-input-traffic\src\client\freeze-button.module.css.mjs
1606
+ const css = ".BUSMDW_freeze{border:1px solid var(--dsw-alias-border-l3,#0000001f);height:24px;color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;white-space:nowrap;background:0 0;border-radius:6px;align-items:center;gap:4px;padding:0 8px;font-size:12px;display:inline-flex}.BUSMDW_freeze:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover,#0000000a)}.BUSMDW_freeze[aria-pressed=true]{border-color:var(--dsw-alias-state-success-primary,#30a46c);color:var(--dsw-alias-state-success-primary,#30a46c);background:color-mix(in srgb, var(--dsw-alias-state-success-primary,#30a46c) 8%, transparent)}.BUSMDW_label{font-size:12px}";
1228
1607
  const tagId = "dsh-input-traffic/freeze-button.module.css";
1229
1608
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
1230
1609
  const tag = document.createElement("style");
@@ -1234,8 +1613,8 @@ window.__ModuleLoader__.load({
1234
1613
  document.head.appendChild(tag);
1235
1614
  }
1236
1615
  var freeze_button_module_css_default = {
1237
- "freeze": "_5uus5a_freeze",
1238
- "label": "_5uus5a_label"
1616
+ "freeze": "BUSMDW_freeze",
1617
+ "label": "BUSMDW_label"
1239
1618
  };
1240
1619
  //#endregion
1241
1620
  //#region src/client/freeze-button.tsx
@@ -1366,6 +1745,40 @@ window.__ModuleLoader__.load({
1366
1745
  return null;
1367
1746
  }
1368
1747
  //#endregion
1748
+ //#region src/client/compat.ts
1749
+ /**
1750
+ * Pin the busy-Enter field through whichever durable-settings service this
1751
+ * host line carries, then hand the resolved scope to `onScope`.
1752
+ *
1753
+ * Both variants are scoped sub-injects: on a host without the service the
1754
+ * fiber waits forever WITHOUT blocking the plugin's other faces (same posture
1755
+ * as the family tab's slot-inject when the family holder is absent).
1756
+ */
1757
+ function registerSettingsFaces(ctx, deps) {
1758
+ ctx.inject(["configForms"], (configForms) => {
1759
+ const scope = configForms.get(deps.namespace);
1760
+ scope.set(deps.field, deps.value);
1761
+ deps.onScope(scope);
1762
+ });
1763
+ ctx.inject(["settingsScope"], (settingsScope) => {
1764
+ const scope = settingsScope.bind({ namespace: deps.namespace });
1765
+ scope.set(deps.field, deps.value);
1766
+ deps.onScope(scope);
1767
+ });
1768
+ }
1769
+ /**
1770
+ * Draft back-fill normalized across host lines: prefers the direct
1771
+ * `.setDraft` (0.1.7+), falls back to the `.actions` parking spot (≤0.1.5).
1772
+ * Pure shape probing on the conversation row object — no version reads.
1773
+ */
1774
+ function draftWriter(conversation, actx) {
1775
+ return (text) => {
1776
+ const row = conversation.input.for(actx);
1777
+ if (typeof row.setDraft === "function") row.setDraft(text);
1778
+ else row.actions?.setDraft(text);
1779
+ };
1780
+ }
1781
+ //#endregion
1369
1782
  //#region src/client/index.ts
1370
1783
  /** Durable conversation settings namespace owned by ui-conversation. */
1371
1784
  const CONVERSATION_SETTINGS_NAMESPACE = "ui-conversation";
@@ -1397,13 +1810,18 @@ window.__ModuleLoader__.load({
1397
1810
  if (conversation === void 0) return Promise.reject(/* @__PURE__ */ new Error("steer resume: conversation service unavailable"));
1398
1811
  return conversation.send(text);
1399
1812
  }
1400
- /** Services required by the browser half. */
1813
+ /**
1814
+ * Services required by the browser half. Only the six-line-universal faces
1815
+ * live here — the durable-settings face (`configForms` on 0.1.7+,
1816
+ * `settingsScope` on ≤0.1.5) is resolved by scoped sub-injects inside the
1817
+ * compat waist, because a plugin-level inject of a per-line service would
1818
+ * leave the WHOLE fiber PENDING on the other line (silent total deactivation).
1819
+ */
1401
1820
  const inject = [
1402
1821
  "slots",
1403
1822
  "locale",
1404
1823
  "sessions",
1405
- "conversation",
1406
- "configForms"
1824
+ "conversation"
1407
1825
  ];
1408
1826
  /**
1409
1827
  * Client plugin body: dictionaries, busy-Enter pinning, and the two slot
@@ -1411,13 +1829,23 @@ window.__ModuleLoader__.load({
1411
1829
  * @param ctx - client root context.
1412
1830
  */
1413
1831
  function apply(ctx) {
1414
- ctx.effect(() => ctx.locale.register(NS, {
1415
- zh,
1416
- en
1417
- }), "dsh-input-traffic: dictionaries");
1832
+ ctx.effect(() => ctx.locale.register(NS, dictionaries), "dsh-input-traffic: dictionaries");
1418
1833
  const tFamily = ctx.locale.bind(NS);
1419
- const conversationSettings = ctx.configForms.get(CONVERSATION_SETTINGS_NAMESPACE);
1420
- conversationSettings.set(BUSY_ENTER_FIELD, "queue");
1834
+ registerSettingsFaces(ctx, {
1835
+ namespace: CONVERSATION_SETTINGS_NAMESPACE,
1836
+ field: BUSY_ENTER_FIELD,
1837
+ value: "queue",
1838
+ onScope: (scope) => {
1839
+ ctx.slots.inject("dsh-family.tab", () => ctx.slots.register({
1840
+ name: "dsh-family.tab",
1841
+ id: "input-traffic",
1842
+ order: 50,
1843
+ label: () => tFamily("family.title"),
1844
+ locale: NS,
1845
+ inject: () => ({ scope })
1846
+ }, InputTrafficFamilyCard));
1847
+ }
1848
+ });
1421
1849
  ctx.slots.inject("conversation.input.dock", () => ctx.slots.register({
1422
1850
  name: "conversation.input.dock",
1423
1851
  id: "queue",
@@ -1433,9 +1861,7 @@ window.__ModuleLoader__.load({
1433
1861
  updateQueue: (itemId, action) => conversation.updateQueue(itemId, action),
1434
1862
  cancel: () => conversation.cancel(),
1435
1863
  send: (text) => conversation.send(text),
1436
- setDraft: (text) => {
1437
- conversation.input.for(actx).setDraft(text);
1438
- },
1864
+ setDraft: draftWriter(conversation, actx),
1439
1865
  notify: (level, text) => {
1440
1866
  conversation.input.for(actx).notify(level, text);
1441
1867
  }
@@ -1458,9 +1884,7 @@ window.__ModuleLoader__.load({
1458
1884
  send: (text) => conversation.send(text),
1459
1885
  sendSteer: (text) => steerPrompt(actx, text),
1460
1886
  sessionId: String(sessionId),
1461
- setDraft: (text) => {
1462
- conversation.input.for(actx).setDraft(text);
1463
- },
1887
+ setDraft: draftWriter(conversation, actx),
1464
1888
  notify: (level, text) => {
1465
1889
  conversation.input.for(actx).notify(level, text);
1466
1890
  },
@@ -1470,14 +1894,6 @@ window.__ModuleLoader__.load({
1470
1894
  };
1471
1895
  }
1472
1896
  }, FreezeButton));
1473
- ctx.slots.inject("dsh-family.tab", () => ctx.slots.register({
1474
- name: "dsh-family.tab",
1475
- id: "input-traffic",
1476
- order: 50,
1477
- label: () => tFamily("family.title"),
1478
- locale: NS,
1479
- inject: () => ({ scope: conversationSettings })
1480
- }, InputTrafficFamilyCard));
1481
1897
  ctx.slots.inject("settings.general.item", () => ctx.slots.register({
1482
1898
  name: "settings.general.item",
1483
1899
  id: "composer-enter",