dsh-input-traffic 0.6.0 → 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/CHANGELOG.ja.md +94 -87
- package/CHANGELOG.ko.md +94 -87
- package/CHANGELOG.md +18 -8
- package/INSTALL.ja.md +151 -151
- package/INSTALL.ko.md +151 -151
- package/README.en.md +9 -7
- package/README.ja.md +192 -187
- package/README.ko.md +186 -181
- package/README.md +9 -6
- package/dsh.plugin.json +16 -16
- package/lib/client.js +646 -226
- package/lib/client.js.map +1 -1
- package/lib/types/client/compat.d.ts +68 -0
- package/lib/types/client/compat.d.ts.map +1 -0
- package/lib/types/client/compat.js +37 -0
- package/lib/types/client/compat.js.map +1 -0
- package/lib/types/client/freeze-button.d.ts +3 -3
- package/lib/types/client/freeze-button.d.ts.map +1 -1
- package/lib/types/client/freeze-button.js +12 -4
- package/lib/types/client/freeze-button.js.map +1 -1
- package/lib/types/client/index.d.ts +19 -8
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/index.js +37 -22
- package/lib/types/client/index.js.map +1 -1
- package/lib/types/client/locales.d.ts +12 -0
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/client/locales.js +277 -0
- package/lib/types/client/locales.js.map +1 -1
- package/lib/types/client/steer-queue-dock.d.ts +11 -1
- package/lib/types/client/steer-queue-dock.d.ts.map +1 -1
- package/lib/types/client/steer-queue-dock.js +53 -36
- package/lib/types/client/steer-queue-dock.js.map +1 -1
- package/locale/de.json +1 -0
- package/locale/en.json +1 -0
- package/locale/es.json +1 -0
- package/locale/fr.json +1 -0
- package/locale/it.json +1 -0
- package/locale/ja.json +1 -0
- package/locale/ko.json +1 -0
- package/locale/ru.json +1 -0
- package/locale/zh.json +1 -0
- package/package.json +31 -52
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
|
-
/**
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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\
|
|
214
|
-
const css$1 = ".
|
|
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
|
-
"
|
|
225
|
-
"
|
|
226
|
-
"
|
|
227
|
-
"
|
|
228
|
-
"
|
|
229
|
-
"
|
|
230
|
-
"
|
|
231
|
-
"
|
|
232
|
-
"
|
|
233
|
-
"
|
|
234
|
-
"
|
|
235
|
-
"steeringList": "
|
|
236
|
-
"
|
|
237
|
-
"
|
|
238
|
-
"
|
|
239
|
-
"
|
|
240
|
-
"
|
|
241
|
-
"
|
|
242
|
-
"
|
|
243
|
-
"
|
|
244
|
-
"
|
|
245
|
-
"
|
|
246
|
-
"
|
|
247
|
-
"
|
|
248
|
-
"
|
|
249
|
-
"
|
|
250
|
-
"
|
|
251
|
-
"
|
|
252
|
-
"
|
|
253
|
-
"
|
|
254
|
-
"
|
|
255
|
-
"
|
|
256
|
-
"
|
|
257
|
-
"
|
|
258
|
-
"
|
|
259
|
-
"
|
|
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
|
|
@@ -285,6 +664,22 @@ window.__ModuleLoader__.load({
|
|
|
285
664
|
* run while preserving the queue (keepInbox), resume re-arms the driver by
|
|
286
665
|
* re-sending the first queued row so the preserved work continues.
|
|
287
666
|
*/
|
|
667
|
+
/**
|
|
668
|
+
* Suppress the OFFICIAL queue dock entirely: our shadowing entry owns the
|
|
669
|
+
* `queue` cell, so the official dock is only ever mounted as a crash fallback
|
|
670
|
+
* — and its per-row 插话发送 duplicates our yellow tier. Hide the whole
|
|
671
|
+
* container by its css-module class (the `_7yHdaG` hash is baked into the
|
|
672
|
+
* host build and stable across restarts), plus the aria-label match as a
|
|
673
|
+
* second net in case the host rehashes.
|
|
674
|
+
*/
|
|
675
|
+
const HIDE_OFFICIAL_QUEUE_CSS = "[class*=\"_7yHdaG_dock\"]{display:none!important}";
|
|
676
|
+
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"dsh-input-traffic/hide-official-steer\"]") === null) {
|
|
677
|
+
const tag = document.createElement("style");
|
|
678
|
+
tag.dataset.plugin = "dsh-input-traffic";
|
|
679
|
+
tag.dataset.pluginCss = "dsh-input-traffic/hide-official-steer";
|
|
680
|
+
tag.textContent = HIDE_OFFICIAL_QUEUE_CSS;
|
|
681
|
+
document.head.appendChild(tag);
|
|
682
|
+
}
|
|
288
683
|
/** Busy marker for a whole-queue rebuild (reorder); locks every row action. */
|
|
289
684
|
const REORDER_MARK = "__reorder__";
|
|
290
685
|
/** localStorage key for the manual collapse state (dsh-queue-plus parity). */
|
|
@@ -311,15 +706,33 @@ window.__ModuleLoader__.load({
|
|
|
311
706
|
el.style.height = `${el.scrollHeight}px`;
|
|
312
707
|
}
|
|
313
708
|
/**
|
|
709
|
+
* Concatenate a queued row's text blocks; null when the row carries anything
|
|
710
|
+
* non-text (attachments) or no content — mirrors the host queue dock's own
|
|
711
|
+
* helper (ui-conversation client.js `textOf`). Wire rows do NOT carry a
|
|
712
|
+
* `.text` field; the text lives in `content` blocks.
|
|
713
|
+
*/
|
|
714
|
+
function textOf(content) {
|
|
715
|
+
if (content === void 0 || content.length === 0) return null;
|
|
716
|
+
if (!content.every((block) => block.type === "text")) return null;
|
|
717
|
+
const joined = content.map((block) => block.text ?? "").join("");
|
|
718
|
+
return joined === "" ? null : joined;
|
|
719
|
+
}
|
|
720
|
+
/**
|
|
314
721
|
* Queue strip with three-tier planning: one item renders directly; multiple
|
|
315
722
|
* items default to a collapsible count header; an empty queue renders nothing.
|
|
316
723
|
*/
|
|
317
|
-
function SteerQueueDock({ sessionId, useSession, input, updateQueue, cancel, send, setDraft, notify, t }) {
|
|
318
|
-
const inbox =
|
|
319
|
-
const queue = (0, react.useMemo)(() => inbox.
|
|
320
|
-
|
|
724
|
+
function SteerQueueDock({ sessionId, useSession, useProjection, input, updateQueue, cancel, send, setDraft, notify, t }) {
|
|
725
|
+
const inbox = useProjection("inbox");
|
|
726
|
+
const queue = (0, react.useMemo)(() => (inbox?.["next-turn"] ?? []).map((row) => ({
|
|
727
|
+
...row,
|
|
728
|
+
text: textOf(row.content) ?? row.text ?? null
|
|
729
|
+
})), [inbox]);
|
|
730
|
+
const steering = (0, react.useMemo)(() => (inbox?.["next-step"] ?? []).map((row) => ({
|
|
731
|
+
...row,
|
|
732
|
+
text: textOf(row.content) ?? row.text ?? null
|
|
733
|
+
})), [inbox]);
|
|
321
734
|
const running = useSession((s) => s.running);
|
|
322
|
-
const queueMutable = useSession((s) => s.subagent === null);
|
|
735
|
+
const queueMutable = useSession((s) => s.subagent === null || s.subagent.address.mode === "continuable");
|
|
323
736
|
const [editing, setEditing] = (0, react.useState)(null);
|
|
324
737
|
const [busy, setBusy] = (0, react.useState)(null);
|
|
325
738
|
const [clearing, setClearing] = (0, react.useState)(false);
|
|
@@ -369,7 +782,6 @@ window.__ModuleLoader__.load({
|
|
|
369
782
|
const planDisabled = !queueMutable || !running || frozen;
|
|
370
783
|
const nothingPending = queue.length === 0 && steering.length === 0;
|
|
371
784
|
const reorderUnsupported = queue.some((row) => row.text === null);
|
|
372
|
-
const composerEmpty = input.draft.trim() === "";
|
|
373
785
|
const applyAction = async (itemId, action, failure) => {
|
|
374
786
|
setBusy(itemId);
|
|
375
787
|
try {
|
|
@@ -383,7 +795,7 @@ window.__ModuleLoader__.load({
|
|
|
383
795
|
}
|
|
384
796
|
};
|
|
385
797
|
const saveEdit = async () => {
|
|
386
|
-
if (editing === null || editing.text.trim() === "") return;
|
|
798
|
+
if (editing === null || typeof editing.text !== "string" || editing.text.trim() === "") return;
|
|
387
799
|
const itemId = editing.id;
|
|
388
800
|
const text = editing.text;
|
|
389
801
|
setBusy(itemId);
|
|
@@ -527,23 +939,6 @@ window.__ModuleLoader__.load({
|
|
|
527
939
|
updatePendingAt(sid, index, text);
|
|
528
940
|
setEditing(null);
|
|
529
941
|
};
|
|
530
|
-
/**
|
|
531
|
-
* Pull one queued row back into the composer draft for editing: the text
|
|
532
|
-
* back-fills the input box and the row leaves the queue; the user edits and
|
|
533
|
-
* resubmits it as a fresh message.
|
|
534
|
-
*/
|
|
535
|
-
const pullBackToComposer = async (row) => {
|
|
536
|
-
if (row.text === null) return;
|
|
537
|
-
setDraft(row.text);
|
|
538
|
-
setBusy(row.id);
|
|
539
|
-
try {
|
|
540
|
-
await updateQueue(row.id, { kind: "remove" });
|
|
541
|
-
} catch {
|
|
542
|
-
notify("error", t("steer.pullBackFailed"));
|
|
543
|
-
} finally {
|
|
544
|
-
setBusy((current) => current === row.id ? null : current);
|
|
545
|
-
}
|
|
546
|
-
};
|
|
547
942
|
const clearAll = async () => {
|
|
548
943
|
setClearing(true);
|
|
549
944
|
const pending = [...queue, ...steering];
|
|
@@ -919,7 +1314,7 @@ window.__ModuleLoader__.load({
|
|
|
919
1314
|
}
|
|
920
1315
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
921
1316
|
className: steer_queue_dock_module_css_default.preview,
|
|
922
|
-
children: row.
|
|
1317
|
+
children: row.text
|
|
923
1318
|
}),
|
|
924
1319
|
queueMutable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
925
1320
|
className: steer_queue_dock_module_css_default.actions,
|
|
@@ -986,23 +1381,6 @@ window.__ModuleLoader__.load({
|
|
|
986
1381
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineMedium, {})
|
|
987
1382
|
})
|
|
988
1383
|
}),
|
|
989
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
990
|
-
label: t("steer.pullBack"),
|
|
991
|
-
side: "bottom",
|
|
992
|
-
delayMs: 500,
|
|
993
|
-
disabled: row.text === null || !composerEmpty,
|
|
994
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
995
|
-
type: "button",
|
|
996
|
-
className: steer_queue_dock_module_css_default.action,
|
|
997
|
-
"aria-label": t("steer.pullBack"),
|
|
998
|
-
title: row.text === null ? t("steer.pullBack.unsupported") : !composerEmpty ? t("steer.pullBack.composerBusy") : void 0,
|
|
999
|
-
disabled: busy !== null || frozen || row.text === null || !composerEmpty,
|
|
1000
|
-
onClick: () => {
|
|
1001
|
-
pullBackToComposer(row);
|
|
1002
|
-
},
|
|
1003
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineMedium, {})
|
|
1004
|
-
})
|
|
1005
|
-
}),
|
|
1006
1384
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
1007
1385
|
label: t("queue.edit"),
|
|
1008
1386
|
side: "bottom",
|
|
@@ -1017,7 +1395,7 @@ window.__ModuleLoader__.load({
|
|
|
1017
1395
|
onClick: () => {
|
|
1018
1396
|
if (row.text !== null) setEditing({
|
|
1019
1397
|
id: row.id,
|
|
1020
|
-
text: row.text
|
|
1398
|
+
text: row.text ?? ""
|
|
1021
1399
|
});
|
|
1022
1400
|
},
|
|
1023
1401
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutlineMedium, { size: 14 })
|
|
@@ -1125,7 +1503,7 @@ window.__ModuleLoader__.load({
|
|
|
1125
1503
|
}),
|
|
1126
1504
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1127
1505
|
className: steer_queue_dock_module_css_default.preview,
|
|
1128
|
-
children: row.
|
|
1506
|
+
children: row.text
|
|
1129
1507
|
}),
|
|
1130
1508
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1131
1509
|
className: steer_queue_dock_module_css_default.actions,
|
|
@@ -1224,8 +1602,8 @@ window.__ModuleLoader__.load({
|
|
|
1224
1602
|
globalThis.__DSH_SESSION_GUARD_BRIDGE__ = true;
|
|
1225
1603
|
} catch {}
|
|
1226
1604
|
//#endregion
|
|
1227
|
-
//#region \0dsh-css:E:\test\rewrite-agently\mine-dsh-plugins\
|
|
1228
|
-
const css = ".
|
|
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}";
|
|
1229
1607
|
const tagId = "dsh-input-traffic/freeze-button.module.css";
|
|
1230
1608
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
1231
1609
|
const tag = document.createElement("style");
|
|
@@ -1235,8 +1613,8 @@ window.__ModuleLoader__.load({
|
|
|
1235
1613
|
document.head.appendChild(tag);
|
|
1236
1614
|
}
|
|
1237
1615
|
var freeze_button_module_css_default = {
|
|
1238
|
-
"freeze": "
|
|
1239
|
-
"label": "
|
|
1616
|
+
"freeze": "BUSMDW_freeze",
|
|
1617
|
+
"label": "BUSMDW_label"
|
|
1240
1618
|
};
|
|
1241
1619
|
//#endregion
|
|
1242
1620
|
//#region src/client/freeze-button.tsx
|
|
@@ -1261,16 +1639,20 @@ window.__ModuleLoader__.load({
|
|
|
1261
1639
|
* Freeze/resume toggle for the peak-hour scenario.
|
|
1262
1640
|
* @param props - slot props; the session snapshot drives the detach list.
|
|
1263
1641
|
*/
|
|
1264
|
-
function FreezeButton({
|
|
1642
|
+
function FreezeButton({ useProjection, updateQueue, cancel, send, sendSteer, sessionId, setComposerBlock, notify, t }) {
|
|
1265
1643
|
const sid = sessionId ?? "";
|
|
1266
1644
|
const { frozen } = (0, react.useSyncExternalStore)(freezeStore.subscribe, () => freezeStore.getSnapshot(sid));
|
|
1267
|
-
const
|
|
1645
|
+
const inbox = useProjection("inbox");
|
|
1268
1646
|
const freeze = async () => {
|
|
1269
|
-
const
|
|
1270
|
-
const
|
|
1647
|
+
const steeredIds = new Set((inbox?.["next-step"] ?? []).map((row) => row.id));
|
|
1648
|
+
const rows = [...inbox?.["next-turn"] ?? [], ...inbox?.["next-step"] ?? []].map((row) => ({
|
|
1649
|
+
...row,
|
|
1650
|
+
text: textOf(row.content) ?? row.text ?? null
|
|
1651
|
+
}));
|
|
1652
|
+
const pending = rows.flatMap((row) => typeof row.text === "string" && row.text !== "" ? [{
|
|
1271
1653
|
text: row.text,
|
|
1272
|
-
tier: row.
|
|
1273
|
-
}]);
|
|
1654
|
+
tier: steeredIds.has(row.id) ? "safe_point" : "queue"
|
|
1655
|
+
}] : []);
|
|
1274
1656
|
await Promise.all(rows.map((row) => updateQueue(row.id, { kind: "remove" }).catch(() => void 0)));
|
|
1275
1657
|
freezeStore.set(sid, {
|
|
1276
1658
|
frozen: true,
|
|
@@ -1363,6 +1745,40 @@ window.__ModuleLoader__.load({
|
|
|
1363
1745
|
return null;
|
|
1364
1746
|
}
|
|
1365
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
|
|
1366
1782
|
//#region src/client/index.ts
|
|
1367
1783
|
/** Durable conversation settings namespace owned by ui-conversation. */
|
|
1368
1784
|
const CONVERSATION_SETTINGS_NAMESPACE = "ui-conversation";
|
|
@@ -1373,8 +1789,9 @@ window.__ModuleLoader__.load({
|
|
|
1373
1789
|
*
|
|
1374
1790
|
* List rows render sorted by `order` ascending, so a value above every other
|
|
1375
1791
|
* contributor keeps the strip as the bottom-most entry of the band — directly
|
|
1376
|
-
* on top of the composer card. Known contributors
|
|
1377
|
-
* `
|
|
1792
|
+
* on top of the composer card. Known contributors (stable across hosts
|
|
1793
|
+
* 0.1.5-rc.1 → 0.2.0-rc.2): `todo` 0, official `queue` 20,
|
|
1794
|
+
* `dsh-perm-gate.notice` 30, `dsh-tidy-display-entry` 0. DSH has no "last"
|
|
1378
1795
|
* slot semantics, so this is a convention, not a
|
|
1379
1796
|
* structural guarantee: a third party registering a larger value could still
|
|
1380
1797
|
* land below us.
|
|
@@ -1393,13 +1810,18 @@ window.__ModuleLoader__.load({
|
|
|
1393
1810
|
if (conversation === void 0) return Promise.reject(/* @__PURE__ */ new Error("steer resume: conversation service unavailable"));
|
|
1394
1811
|
return conversation.send(text);
|
|
1395
1812
|
}
|
|
1396
|
-
/**
|
|
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
|
+
*/
|
|
1397
1820
|
const inject = [
|
|
1398
1821
|
"slots",
|
|
1399
1822
|
"locale",
|
|
1400
1823
|
"sessions",
|
|
1401
|
-
"conversation"
|
|
1402
|
-
"configForms"
|
|
1824
|
+
"conversation"
|
|
1403
1825
|
];
|
|
1404
1826
|
/**
|
|
1405
1827
|
* Client plugin body: dictionaries, busy-Enter pinning, and the two slot
|
|
@@ -1407,13 +1829,23 @@ window.__ModuleLoader__.load({
|
|
|
1407
1829
|
* @param ctx - client root context.
|
|
1408
1830
|
*/
|
|
1409
1831
|
function apply(ctx) {
|
|
1410
|
-
ctx.effect(() => ctx.locale.register(NS,
|
|
1411
|
-
zh,
|
|
1412
|
-
en
|
|
1413
|
-
}), "dsh-input-traffic: dictionaries");
|
|
1832
|
+
ctx.effect(() => ctx.locale.register(NS, dictionaries), "dsh-input-traffic: dictionaries");
|
|
1414
1833
|
const tFamily = ctx.locale.bind(NS);
|
|
1415
|
-
|
|
1416
|
-
|
|
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
|
+
});
|
|
1417
1849
|
ctx.slots.inject("conversation.input.dock", () => ctx.slots.register({
|
|
1418
1850
|
name: "conversation.input.dock",
|
|
1419
1851
|
id: "queue",
|
|
@@ -1429,9 +1861,7 @@ window.__ModuleLoader__.load({
|
|
|
1429
1861
|
updateQueue: (itemId, action) => conversation.updateQueue(itemId, action),
|
|
1430
1862
|
cancel: () => conversation.cancel(),
|
|
1431
1863
|
send: (text) => conversation.send(text),
|
|
1432
|
-
setDraft: (
|
|
1433
|
-
conversation.input.for(actx).setDraft(text);
|
|
1434
|
-
},
|
|
1864
|
+
setDraft: draftWriter(conversation, actx),
|
|
1435
1865
|
notify: (level, text) => {
|
|
1436
1866
|
conversation.input.for(actx).notify(level, text);
|
|
1437
1867
|
}
|
|
@@ -1454,9 +1884,7 @@ window.__ModuleLoader__.load({
|
|
|
1454
1884
|
send: (text) => conversation.send(text),
|
|
1455
1885
|
sendSteer: (text) => steerPrompt(actx, text),
|
|
1456
1886
|
sessionId: String(sessionId),
|
|
1457
|
-
setDraft: (
|
|
1458
|
-
conversation.input.for(actx).setDraft(text);
|
|
1459
|
-
},
|
|
1887
|
+
setDraft: draftWriter(conversation, actx),
|
|
1460
1888
|
notify: (level, text) => {
|
|
1461
1889
|
conversation.input.for(actx).notify(level, text);
|
|
1462
1890
|
},
|
|
@@ -1466,14 +1894,6 @@ window.__ModuleLoader__.load({
|
|
|
1466
1894
|
};
|
|
1467
1895
|
}
|
|
1468
1896
|
}, FreezeButton));
|
|
1469
|
-
ctx.slots.inject("dsh-family.tab", () => ctx.slots.register({
|
|
1470
|
-
name: "dsh-family.tab",
|
|
1471
|
-
id: "input-traffic",
|
|
1472
|
-
order: 50,
|
|
1473
|
-
label: () => tFamily("family.title"),
|
|
1474
|
-
locale: NS,
|
|
1475
|
-
inject: () => ({ scope: conversationSettings })
|
|
1476
|
-
}, InputTrafficFamilyCard));
|
|
1477
1897
|
ctx.slots.inject("settings.general.item", () => ctx.slots.register({
|
|
1478
1898
|
name: "settings.general.item",
|
|
1479
1899
|
id: "composer-enter",
|