dsh-input-traffic 0.5.3 → 0.5.5
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 +16 -0
- package/CHANGELOG.ko.md +16 -0
- package/CHANGELOG.md +19 -0
- package/dsh.plugin.json +16 -16
- package/lib/client.js +103 -99
- package/lib/client.js.map +1 -1
- 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 +12 -7
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/index.js +3 -2
- package/lib/types/client/index.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 +60 -43
- package/lib/types/client/steer-queue-dock.js.map +1 -1
- package/package.json +140 -127
package/CHANGELOG.ja.md
CHANGED
|
@@ -6,6 +6,22 @@
|
|
|
6
6
|
- [日本語 changelog](./CHANGELOG.ja.md)
|
|
7
7
|
- [한국어 changelog](./CHANGELOG.ko.md)
|
|
8
8
|
|
|
9
|
+
## 0.5.5 — 2026-09-30
|
|
10
|
+
|
|
11
|
+
### 修正: キュー行を inbox プロジェクションから読むよう修正(実機 0.1.7-rc.2 で検証)
|
|
12
|
+
|
|
13
|
+
- 実ホストではキュー行がセッションスナップショットに存在しないため、useProjection('inbox') から読むよう修正(公式 QueueDock と同一)。従来の鏡像フィールド参照は実機で必ずクラッシュし、公式キューへフォールバックしていた。
|
|
14
|
+
- 損壊した「入力へ戻す」ボタンを削除(黄ティアが挿入の唯一の入口)。ティア色をリテラル値に固定(スキンのトークン再定義で黄色が不可視になる問題)。
|
|
15
|
+
|
|
16
|
+
## 0.5.4 — 2026-09-29
|
|
17
|
+
|
|
18
|
+
### 修正:0.1.7 ライン devDeps 基線の整合 + dock アイコン描画クラッシュ
|
|
19
|
+
|
|
20
|
+
- 古い devDeps 3 件を 0.1.7 ラインに引き上げ:`client-ui-primitives ^0.0.1-rc.1`(`^0.0.x` は 0.1.x に到達不能)、`client-store` / `util-workspace-path ^0.1.2-alpha.2`(プレリリース解決の滞留)→ すべて `^0.1.7-rc.1`(実装 rc.2)。
|
|
21
|
+
- ソース側も primitives の `*16`/`*14` アイコン export 改名(0.1.7-rc.1 から `*Medium`/`*Regular` 系のみ)に追従:8 か所を `*Medium` に変更。
|
|
22
|
+
- **本バージョンは公開済み 0.5.3 の壊れた tarball を置き換える**:0.5.3 の bundle は primitives 0.1.7 に存在しないアイコン export を外部参照しており、実 0.1.7 ホストで dock 描画が即クラッシュする——陳腐な devDeps ピンがビルド時の偽装グリーンに隠していた。
|
|
23
|
+
- テスト環境の堅牢化:ホスト専用パスのスタブ + micromark/mdast スタックの明示 devDep + `react-dom` を 18 にピン(5 スイート 59 ケースすべて実実行)。
|
|
24
|
+
|
|
9
25
|
## 0.2.8 — 2026-08-24
|
|
10
26
|
|
|
11
27
|
### 追加:日夜モード自動適応
|
package/CHANGELOG.ko.md
CHANGED
|
@@ -6,6 +6,22 @@
|
|
|
6
6
|
- [日本語 changelog](./CHANGELOG.ja.md)
|
|
7
7
|
- [한국어 changelog](./CHANGELOG.ko.md)
|
|
8
8
|
|
|
9
|
+
## 0.5.5 — 2026-09-30
|
|
10
|
+
|
|
11
|
+
### 修正: キュー行を inbox プロジェクションから読むよう修正(実機 0.1.7-rc.2 で検証)
|
|
12
|
+
|
|
13
|
+
- 実ホストではキュー行がセッションスナップショットに存在しないため、useProjection('inbox') から読むよう修正(公式 QueueDock と同一)。従来の鏡像フィールド参照は実機で必ずクラッシュし、公式キューへフォールバックしていた。
|
|
14
|
+
- 損壊した「入力へ戻す」ボタンを削除(黄ティアが挿入の唯一の入口)。ティア色をリテラル値に固定(スキンのトークン再定義で黄色が不可視になる問題)。
|
|
15
|
+
|
|
16
|
+
## 0.5.4 — 2026-09-29
|
|
17
|
+
|
|
18
|
+
### 수정: 0.1.7 라인 devDeps 기준 정렬 + dock 아이콘 렌더링 크래시
|
|
19
|
+
|
|
20
|
+
- 낡은 devDeps 3건을 0.1.7 라인으로 정렬: `client-ui-primitives ^0.0.1-rc.1`(`^0.0.x`는 0.1.x에 도달 불가), `client-store` / `util-workspace-path ^0.1.2-alpha.2`(프리릴리스 해석 정체) → 모두 `^0.1.7-rc.1`(실설치 rc.2).
|
|
21
|
+
- 소스도 primitives의 `*16`/`*14` 아이콘 export 개명(0.1.7-rc.1부터 `*Medium`/`*Regular` 계열만 존재)에 맞춰 8곳을 `*Medium`으로 변경.
|
|
22
|
+
- **이 버전은 게시된 0.5.3의 깨진 tarball을 대체합니다**: 0.5.3의 bundle은 primitives 0.1.7에 존재하지 않는 아이콘 export를 외부 참조하여, 실 0.1.7 호스트에서 dock 렌더링이 즉시 크래시——낡은 devDeps 고정이 빌드 시점의 가짜 그린으로 가려져 있었습니다.
|
|
23
|
+
- 테스트 환경 강화: 호스트 전용 경로 스텁 + micromark/mdast 스택 명시 devDep + `react-dom` 18 고정(5 스위트 59 케이스 모두 실실행).
|
|
24
|
+
|
|
9
25
|
## 0.2.8 — 2026-08-24
|
|
10
26
|
|
|
11
27
|
### 추가: 주야 모드 자동 적응
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
所有重要变更与 bug 修复记录于此。版本遵循语义化版本(`dsh plugin --profile web add dsh-input-traffic` 安装)。
|
|
4
4
|
|
|
5
|
+
## 0.5.5 — 2026-09-30
|
|
6
|
+
|
|
7
|
+
### 修复:队列行改读 inbox 投影(真实宿主渲染修复,实测 0.1.7-rc.2)
|
|
8
|
+
|
|
9
|
+
- 真实宿主的排队行不在会话快照上:组件改从 useProjection('inbox') 读取(next-turn=排队/绿档,next-step=插话/黄档),与官方 QueueDock 同源。此前读取的 s.queue 为类型镜像自造字段,行渲染必崩并回退官方队列。
|
|
10
|
+
- queueMutable 与官方判定对齐:continuable 子代理上下文同样可操作(此前整块操作按钮会在子代理会话中消失)。
|
|
11
|
+
- 移除真机上失效的「打回输入框」按钮(setDraft 为未文档化面);黄色档位是唯一插话入口。
|
|
12
|
+
- 行文本改由 content 块派生(textOf,对齐官方 textOf/previewOf),修复行预览空白。
|
|
13
|
+
- 三色档位圆点固定字面量配色:自定义皮肤(如 ui-skin-maid-atelier)重定义 warn 别名 token 会把黄点洗成不可见。
|
|
14
|
+
- CSS 压制官方 QueueDock 容器(仅崩溃回退态的可见性兜底);修复 verify-assembly 陈旧断言(settingsScope → configForms)。
|
|
15
|
+
## 0.5.4 — 2026-09-29
|
|
16
|
+
|
|
17
|
+
### 修复:0.1.7 线 devDeps 基线对齐 + dock 图标渲染崩溃
|
|
18
|
+
|
|
19
|
+
- devDeps 三处陈旧钉版拉平到 0.1.7 线:`client-ui-primitives ^0.0.1-rc.1`(`^0.0.x` 永远装不到 0.1.x)、`client-store` / `util-workspace-path ^0.1.2-alpha.2`(预发布解析规则卡死)→ 全部 `^0.1.7-rc.1`(实装 rc.2)。
|
|
20
|
+
- 源码跟进 primitives `*16`/`*14` 图标导出改名(0.1.7-rc.1 起只剩 `*Medium`/`*Regular` 族):8 处改用 `*Medium`。
|
|
21
|
+
- **此版本替换已发布 0.5.3 的坏 tarball**:0.5.3 的 bundle 外部引用了 primitives 0.1.7 中不存在的图标导出名,在真实 0.1.7 宿主上 dock 渲染即崩——陈旧 devDeps 钉版把它掩盖成构建期假绿。
|
|
22
|
+
- 测试环境加固:宿主专属路径桩化 + micromark/mdast 栈显式 devDep + `react-dom` 钉 18(5 套件 59 用例全部真实执行)。
|
|
23
|
+
|
|
5
24
|
## 0.4.1 — 2026-09-20
|
|
6
25
|
|
|
7
26
|
### 修复:等待队列尾部按钮被「调整对话宽度」把手抢走点击
|
package/dsh.plugin.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "dsh-external/dsh-input-traffic",
|
|
3
|
-
"version": "0.5.
|
|
4
|
-
"main": "./lib/index.js",
|
|
5
|
-
"description": "Busy-time input queue: three-tier planning, drag-to-reorder, interject/interrupt, batch clear, session freeze.",
|
|
6
|
-
"engines": {
|
|
7
|
-
"dsh": ">=0.1.7-rc.1 <0.1.8-0"
|
|
8
|
-
},
|
|
9
|
-
"contributes": {
|
|
10
|
-
"tools": [],
|
|
11
|
-
"skills": []
|
|
12
|
-
},
|
|
13
|
-
"client": {
|
|
14
|
-
"main": "./lib/client.js"
|
|
15
|
-
}
|
|
16
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "dsh-external/dsh-input-traffic",
|
|
3
|
+
"version": "0.5.5",
|
|
4
|
+
"main": "./lib/index.js",
|
|
5
|
+
"description": "Busy-time input queue: three-tier planning, drag-to-reorder, interject/interrupt, batch clear, session freeze.",
|
|
6
|
+
"engines": {
|
|
7
|
+
"dsh": ">=0.1.7-rc.1 <0.1.8-0"
|
|
8
|
+
},
|
|
9
|
+
"contributes": {
|
|
10
|
+
"tools": [],
|
|
11
|
+
"skills": []
|
|
12
|
+
},
|
|
13
|
+
"client": {
|
|
14
|
+
"main": "./lib/client.js"
|
|
15
|
+
}
|
|
16
|
+
}
|
package/lib/client.js
CHANGED
|
@@ -211,7 +211,7 @@ window.__ModuleLoader__.load({
|
|
|
211
211
|
}
|
|
212
212
|
//#endregion
|
|
213
213
|
//#region \0dsh-css:E:\test\rewrite-agently\mine-dsh-plugins\dsh-input-traffic\src\client\steer-queue-dock.module.css.mjs
|
|
214
|
-
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_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
|
|
214
|
+
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
215
|
const tagId$1 = "dsh-input-traffic/steer-queue-dock.module.css";
|
|
216
216
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
|
|
217
217
|
const tag = document.createElement("style");
|
|
@@ -222,41 +222,41 @@ window.__ModuleLoader__.load({
|
|
|
222
222
|
}
|
|
223
223
|
var steer_queue_dock_module_css_default = {
|
|
224
224
|
"frozenRow": "FNESVa_frozenRow",
|
|
225
|
-
"
|
|
226
|
-
"
|
|
227
|
-
"frozenList": "FNESVa_frozenList",
|
|
225
|
+
"tier": "FNESVa_tier",
|
|
226
|
+
"tierNext": "FNESVa_tierNext",
|
|
228
227
|
"editor": "FNESVa_editor",
|
|
229
|
-
"list": "FNESVa_list",
|
|
230
|
-
"badgeLater": "FNESVa_badgeLater",
|
|
231
|
-
"clearConfirm": "FNESVa_clearConfirm",
|
|
232
|
-
"tierNow": "FNESVa_tierNow",
|
|
233
|
-
"clearCancel": "FNESVa_clearCancel",
|
|
234
|
-
"clearLabel": "FNESVa_clearLabel",
|
|
235
|
-
"plan": "FNESVa_plan",
|
|
236
|
-
"preview": "FNESVa_preview",
|
|
237
|
-
"badgeNow": "FNESVa_badgeNow",
|
|
238
228
|
"dock": "FNESVa_dock",
|
|
239
|
-
"
|
|
229
|
+
"actions": "FNESVa_actions",
|
|
230
|
+
"freeze": "FNESVa_freeze",
|
|
240
231
|
"action": "FNESVa_action",
|
|
232
|
+
"steeringList": "FNESVa_steeringList",
|
|
233
|
+
"clearConfirm": "FNESVa_clearConfirm",
|
|
241
234
|
"tierLater": "FNESVa_tierLater",
|
|
242
|
-
"
|
|
243
|
-
"
|
|
244
|
-
"
|
|
235
|
+
"frozenList": "FNESVa_frozenList",
|
|
236
|
+
"plan": "FNESVa_plan",
|
|
237
|
+
"badgeNext": "FNESVa_badgeNext",
|
|
238
|
+
"toolbar": "FNESVa_toolbar",
|
|
239
|
+
"list": "FNESVa_list",
|
|
240
|
+
"chevron": "FNESVa_chevron",
|
|
241
|
+
"frozenMark": "FNESVa_frozenMark",
|
|
242
|
+
"frozenBanner": "FNESVa_frozenBanner",
|
|
243
|
+
"badge": "FNESVa_badge",
|
|
245
244
|
"header": "FNESVa_header",
|
|
245
|
+
"clearCancel": "FNESVa_clearCancel",
|
|
246
|
+
"clearLabel": "FNESVa_clearLabel",
|
|
246
247
|
"panel": "FNESVa_panel",
|
|
247
|
-
"
|
|
248
|
+
"rowDragOver": "FNESVa_rowDragOver",
|
|
249
|
+
"preview": "FNESVa_preview",
|
|
248
250
|
"badgeLabel": "FNESVa_badgeLabel",
|
|
249
|
-
"
|
|
251
|
+
"badgeLater": "FNESVa_badgeLater",
|
|
250
252
|
"lead": "FNESVa_lead",
|
|
251
|
-
"actions": "FNESVa_actions",
|
|
252
|
-
"dot": "FNESVa_dot",
|
|
253
|
-
"badgeNext": "FNESVa_badgeNext",
|
|
254
253
|
"clear": "FNESVa_clear",
|
|
255
|
-
"
|
|
256
|
-
"
|
|
257
|
-
"
|
|
258
|
-
"
|
|
259
|
-
"
|
|
254
|
+
"tierNow": "FNESVa_tierNow",
|
|
255
|
+
"dot": "FNESVa_dot",
|
|
256
|
+
"row": "FNESVa_row",
|
|
257
|
+
"badgeNow": "FNESVa_badgeNow",
|
|
258
|
+
"count": "FNESVa_count",
|
|
259
|
+
"toolbarActions": "FNESVa_toolbarActions"
|
|
260
260
|
};
|
|
261
261
|
//#endregion
|
|
262
262
|
//#region src/client/steer-queue-dock.tsx
|
|
@@ -285,6 +285,22 @@ window.__ModuleLoader__.load({
|
|
|
285
285
|
* run while preserving the queue (keepInbox), resume re-arms the driver by
|
|
286
286
|
* re-sending the first queued row so the preserved work continues.
|
|
287
287
|
*/
|
|
288
|
+
/**
|
|
289
|
+
* Suppress the OFFICIAL queue dock entirely: our shadowing entry owns the
|
|
290
|
+
* `queue` cell, so the official dock is only ever mounted as a crash fallback
|
|
291
|
+
* — and its per-row 插话发送 duplicates our yellow tier. Hide the whole
|
|
292
|
+
* container by its css-module class (the `_7yHdaG` hash is baked into the
|
|
293
|
+
* host build and stable across restarts), plus the aria-label match as a
|
|
294
|
+
* second net in case the host rehashes.
|
|
295
|
+
*/
|
|
296
|
+
const HIDE_OFFICIAL_QUEUE_CSS = "[class*=\"_7yHdaG_dock\"]{display:none!important}";
|
|
297
|
+
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"dsh-input-traffic/hide-official-steer\"]") === null) {
|
|
298
|
+
const tag = document.createElement("style");
|
|
299
|
+
tag.dataset.plugin = "dsh-input-traffic";
|
|
300
|
+
tag.dataset.pluginCss = "dsh-input-traffic/hide-official-steer";
|
|
301
|
+
tag.textContent = HIDE_OFFICIAL_QUEUE_CSS;
|
|
302
|
+
document.head.appendChild(tag);
|
|
303
|
+
}
|
|
288
304
|
/** Busy marker for a whole-queue rebuild (reorder); locks every row action. */
|
|
289
305
|
const REORDER_MARK = "__reorder__";
|
|
290
306
|
/** localStorage key for the manual collapse state (dsh-queue-plus parity). */
|
|
@@ -311,15 +327,33 @@ window.__ModuleLoader__.load({
|
|
|
311
327
|
el.style.height = `${el.scrollHeight}px`;
|
|
312
328
|
}
|
|
313
329
|
/**
|
|
330
|
+
* Concatenate a queued row's text blocks; null when the row carries anything
|
|
331
|
+
* non-text (attachments) or no content — mirrors the host queue dock's own
|
|
332
|
+
* helper (ui-conversation client.js `textOf`). Wire rows do NOT carry a
|
|
333
|
+
* `.text` field; the text lives in `content` blocks.
|
|
334
|
+
*/
|
|
335
|
+
function textOf(content) {
|
|
336
|
+
if (content === void 0 || content.length === 0) return null;
|
|
337
|
+
if (!content.every((block) => block.type === "text")) return null;
|
|
338
|
+
const joined = content.map((block) => block.text ?? "").join("");
|
|
339
|
+
return joined === "" ? null : joined;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
314
342
|
* Queue strip with three-tier planning: one item renders directly; multiple
|
|
315
343
|
* items default to a collapsible count header; an empty queue renders nothing.
|
|
316
344
|
*/
|
|
317
|
-
function SteerQueueDock({ sessionId, useSession, input, updateQueue, cancel, send, setDraft, notify, t }) {
|
|
318
|
-
const inbox =
|
|
319
|
-
const queue = (0, react.useMemo)(() => inbox.
|
|
320
|
-
|
|
345
|
+
function SteerQueueDock({ sessionId, useSession, useProjection, input, updateQueue, cancel, send, setDraft, notify, t }) {
|
|
346
|
+
const inbox = useProjection("inbox");
|
|
347
|
+
const queue = (0, react.useMemo)(() => (inbox?.["next-turn"] ?? []).map((row) => ({
|
|
348
|
+
...row,
|
|
349
|
+
text: textOf(row.content) ?? row.text ?? null
|
|
350
|
+
})), [inbox]);
|
|
351
|
+
const steering = (0, react.useMemo)(() => (inbox?.["next-step"] ?? []).map((row) => ({
|
|
352
|
+
...row,
|
|
353
|
+
text: textOf(row.content) ?? row.text ?? null
|
|
354
|
+
})), [inbox]);
|
|
321
355
|
const running = useSession((s) => s.running);
|
|
322
|
-
const queueMutable = useSession((s) => s.subagent === null);
|
|
356
|
+
const queueMutable = useSession((s) => s.subagent === null || s.subagent.address.mode === "continuable");
|
|
323
357
|
const [editing, setEditing] = (0, react.useState)(null);
|
|
324
358
|
const [busy, setBusy] = (0, react.useState)(null);
|
|
325
359
|
const [clearing, setClearing] = (0, react.useState)(false);
|
|
@@ -369,7 +403,6 @@ window.__ModuleLoader__.load({
|
|
|
369
403
|
const planDisabled = !queueMutable || !running || frozen;
|
|
370
404
|
const nothingPending = queue.length === 0 && steering.length === 0;
|
|
371
405
|
const reorderUnsupported = queue.some((row) => row.text === null);
|
|
372
|
-
const composerEmpty = input.draft.trim() === "";
|
|
373
406
|
const applyAction = async (itemId, action, failure) => {
|
|
374
407
|
setBusy(itemId);
|
|
375
408
|
try {
|
|
@@ -383,7 +416,7 @@ window.__ModuleLoader__.load({
|
|
|
383
416
|
}
|
|
384
417
|
};
|
|
385
418
|
const saveEdit = async () => {
|
|
386
|
-
if (editing === null || editing.text.trim() === "") return;
|
|
419
|
+
if (editing === null || typeof editing.text !== "string" || editing.text.trim() === "") return;
|
|
387
420
|
const itemId = editing.id;
|
|
388
421
|
const text = editing.text;
|
|
389
422
|
setBusy(itemId);
|
|
@@ -527,23 +560,6 @@ window.__ModuleLoader__.load({
|
|
|
527
560
|
updatePendingAt(sid, index, text);
|
|
528
561
|
setEditing(null);
|
|
529
562
|
};
|
|
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
563
|
const clearAll = async () => {
|
|
548
564
|
setClearing(true);
|
|
549
565
|
const pending = [...queue, ...steering];
|
|
@@ -577,7 +593,7 @@ window.__ModuleLoader__.load({
|
|
|
577
593
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
578
594
|
className: steer_queue_dock_module_css_default.lead,
|
|
579
595
|
"aria-hidden": true,
|
|
580
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
596
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconQueueOutlineMedium, {})
|
|
581
597
|
}),
|
|
582
598
|
queue.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
583
599
|
className: steer_queue_dock_module_css_default.count,
|
|
@@ -586,7 +602,7 @@ window.__ModuleLoader__.load({
|
|
|
586
602
|
queue.length > 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
587
603
|
className: steer_queue_dock_module_css_default.chevron,
|
|
588
604
|
"aria-hidden": true,
|
|
589
|
-
children: expanded ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
605
|
+
children: expanded ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineMedium, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronUpOutlineMedium, {})
|
|
590
606
|
})
|
|
591
607
|
]
|
|
592
608
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -611,7 +627,7 @@ window.__ModuleLoader__.load({
|
|
|
611
627
|
"aria-label": confirmClear ? t("steer.clear.confirm") : t("steer.clear"),
|
|
612
628
|
disabled: clearing || busy !== null || nothingPending,
|
|
613
629
|
onClick: armClear,
|
|
614
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
630
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineMedium, { size: 14 }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
615
631
|
className: steer_queue_dock_module_css_default.clearLabel,
|
|
616
632
|
children: confirmClear ? t("steer.clear.confirm") : t("steer.clear")
|
|
617
633
|
})]
|
|
@@ -662,7 +678,7 @@ window.__ModuleLoader__.load({
|
|
|
662
678
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
663
679
|
className: steer_queue_dock_module_css_default.lead,
|
|
664
680
|
"aria-hidden": true,
|
|
665
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
681
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconQueueOutlineMedium, {})
|
|
666
682
|
}),
|
|
667
683
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SteerBadge, {
|
|
668
684
|
tier: entry.tier === "force" ? "now" : entry.tier === "safe_point" ? "next" : "later",
|
|
@@ -712,7 +728,7 @@ window.__ModuleLoader__.load({
|
|
|
712
728
|
onClick: () => {
|
|
713
729
|
saveFrozenEdit(i);
|
|
714
730
|
},
|
|
715
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
731
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineMedium, { size: 14 })
|
|
716
732
|
})
|
|
717
733
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
718
734
|
label: t("queue.cancelEdit"),
|
|
@@ -725,7 +741,7 @@ window.__ModuleLoader__.load({
|
|
|
725
741
|
onClick: () => {
|
|
726
742
|
setEditing(null);
|
|
727
743
|
},
|
|
728
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
744
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutlineMedium, { size: 14 })
|
|
729
745
|
})
|
|
730
746
|
})] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
731
747
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
@@ -739,7 +755,7 @@ window.__ModuleLoader__.load({
|
|
|
739
755
|
"aria-label": t("steer.moveUp"),
|
|
740
756
|
disabled: i === 0,
|
|
741
757
|
onClick: () => movePending(sid, i, i - 1),
|
|
742
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
758
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronUpOutlineMedium, {})
|
|
743
759
|
})
|
|
744
760
|
}),
|
|
745
761
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
@@ -753,7 +769,7 @@ window.__ModuleLoader__.load({
|
|
|
753
769
|
"aria-label": t("steer.moveDown"),
|
|
754
770
|
disabled: i === frozenPending.length - 1,
|
|
755
771
|
onClick: () => movePending(sid, i, i + 1),
|
|
756
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
772
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineMedium, {})
|
|
757
773
|
})
|
|
758
774
|
}),
|
|
759
775
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
@@ -770,7 +786,7 @@ window.__ModuleLoader__.load({
|
|
|
770
786
|
text
|
|
771
787
|
});
|
|
772
788
|
},
|
|
773
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
789
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutlineMedium, { size: 14 })
|
|
774
790
|
})
|
|
775
791
|
}),
|
|
776
792
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
@@ -782,7 +798,7 @@ window.__ModuleLoader__.load({
|
|
|
782
798
|
className: steer_queue_dock_module_css_default.action,
|
|
783
799
|
"aria-label": t("queue.remove"),
|
|
784
800
|
onClick: () => removePendingAt(sid, i),
|
|
785
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
801
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineMedium, { size: 14 })
|
|
786
802
|
})
|
|
787
803
|
}),
|
|
788
804
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
@@ -885,7 +901,7 @@ window.__ModuleLoader__.load({
|
|
|
885
901
|
queue.length === 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
886
902
|
className: steer_queue_dock_module_css_default.lead,
|
|
887
903
|
"aria-hidden": true,
|
|
888
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
904
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconQueueOutlineMedium, {})
|
|
889
905
|
}),
|
|
890
906
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SteerBadge, {
|
|
891
907
|
tier: badgeFor("queued"),
|
|
@@ -919,7 +935,7 @@ window.__ModuleLoader__.load({
|
|
|
919
935
|
}
|
|
920
936
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
921
937
|
className: steer_queue_dock_module_css_default.preview,
|
|
922
|
-
children: row.
|
|
938
|
+
children: row.text
|
|
923
939
|
}),
|
|
924
940
|
queueMutable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
925
941
|
className: steer_queue_dock_module_css_default.actions,
|
|
@@ -935,7 +951,7 @@ window.__ModuleLoader__.load({
|
|
|
935
951
|
onClick: () => {
|
|
936
952
|
saveEdit();
|
|
937
953
|
},
|
|
938
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
954
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineMedium, { size: 14 })
|
|
939
955
|
})
|
|
940
956
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
941
957
|
label: t("queue.cancelEdit"),
|
|
@@ -949,7 +965,7 @@ window.__ModuleLoader__.load({
|
|
|
949
965
|
onClick: () => {
|
|
950
966
|
setEditing(null);
|
|
951
967
|
},
|
|
952
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
968
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutlineMedium, { size: 14 })
|
|
953
969
|
})
|
|
954
970
|
})] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
955
971
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
@@ -966,7 +982,7 @@ window.__ModuleLoader__.load({
|
|
|
966
982
|
onClick: () => {
|
|
967
983
|
reorder(row.id, -1);
|
|
968
984
|
},
|
|
969
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
985
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronUpOutlineMedium, {})
|
|
970
986
|
})
|
|
971
987
|
}),
|
|
972
988
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
@@ -983,24 +999,7 @@ window.__ModuleLoader__.load({
|
|
|
983
999
|
onClick: () => {
|
|
984
1000
|
reorder(row.id, 1);
|
|
985
1001
|
},
|
|
986
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
987
|
-
})
|
|
988
|
-
}),
|
|
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.IconRightUpOutline16, {})
|
|
1002
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineMedium, {})
|
|
1004
1003
|
})
|
|
1005
1004
|
}),
|
|
1006
1005
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
@@ -1017,10 +1016,10 @@ window.__ModuleLoader__.load({
|
|
|
1017
1016
|
onClick: () => {
|
|
1018
1017
|
if (row.text !== null) setEditing({
|
|
1019
1018
|
id: row.id,
|
|
1020
|
-
text: row.text
|
|
1019
|
+
text: row.text ?? ""
|
|
1021
1020
|
});
|
|
1022
1021
|
},
|
|
1023
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
1022
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutlineMedium, { size: 14 })
|
|
1024
1023
|
})
|
|
1025
1024
|
}),
|
|
1026
1025
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
@@ -1035,7 +1034,7 @@ window.__ModuleLoader__.load({
|
|
|
1035
1034
|
onClick: () => {
|
|
1036
1035
|
applyAction(row.id, { kind: "remove" }, t("queue.removeFailed"));
|
|
1037
1036
|
},
|
|
1038
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
1037
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineMedium, { size: 14 })
|
|
1039
1038
|
})
|
|
1040
1039
|
}),
|
|
1041
1040
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
@@ -1117,7 +1116,7 @@ window.__ModuleLoader__.load({
|
|
|
1117
1116
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1118
1117
|
className: steer_queue_dock_module_css_default.lead,
|
|
1119
1118
|
"aria-hidden": true,
|
|
1120
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
1119
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconQueueOutlineMedium, {})
|
|
1121
1120
|
}),
|
|
1122
1121
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SteerBadge, {
|
|
1123
1122
|
tier: badgeFor("steering"),
|
|
@@ -1125,7 +1124,7 @@ window.__ModuleLoader__.load({
|
|
|
1125
1124
|
}),
|
|
1126
1125
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1127
1126
|
className: steer_queue_dock_module_css_default.preview,
|
|
1128
|
-
children: row.
|
|
1127
|
+
children: row.text
|
|
1129
1128
|
}),
|
|
1130
1129
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1131
1130
|
className: steer_queue_dock_module_css_default.actions,
|
|
@@ -1235,8 +1234,8 @@ window.__ModuleLoader__.load({
|
|
|
1235
1234
|
document.head.appendChild(tag);
|
|
1236
1235
|
}
|
|
1237
1236
|
var freeze_button_module_css_default = {
|
|
1238
|
-
"
|
|
1239
|
-
"
|
|
1237
|
+
"freeze": "BUSMDW_freeze",
|
|
1238
|
+
"label": "BUSMDW_label"
|
|
1240
1239
|
};
|
|
1241
1240
|
//#endregion
|
|
1242
1241
|
//#region src/client/freeze-button.tsx
|
|
@@ -1261,16 +1260,20 @@ window.__ModuleLoader__.load({
|
|
|
1261
1260
|
* Freeze/resume toggle for the peak-hour scenario.
|
|
1262
1261
|
* @param props - slot props; the session snapshot drives the detach list.
|
|
1263
1262
|
*/
|
|
1264
|
-
function FreezeButton({
|
|
1263
|
+
function FreezeButton({ useProjection, updateQueue, cancel, send, sendSteer, sessionId, setComposerBlock, notify, t }) {
|
|
1265
1264
|
const sid = sessionId ?? "";
|
|
1266
1265
|
const { frozen } = (0, react.useSyncExternalStore)(freezeStore.subscribe, () => freezeStore.getSnapshot(sid));
|
|
1267
|
-
const
|
|
1266
|
+
const inbox = useProjection("inbox");
|
|
1268
1267
|
const freeze = async () => {
|
|
1269
|
-
const
|
|
1270
|
-
const
|
|
1268
|
+
const steeredIds = new Set((inbox?.["next-step"] ?? []).map((row) => row.id));
|
|
1269
|
+
const rows = [...inbox?.["next-turn"] ?? [], ...inbox?.["next-step"] ?? []].map((row) => ({
|
|
1270
|
+
...row,
|
|
1271
|
+
text: textOf(row.content) ?? row.text ?? null
|
|
1272
|
+
}));
|
|
1273
|
+
const pending = rows.flatMap((row) => typeof row.text === "string" && row.text !== "" ? [{
|
|
1271
1274
|
text: row.text,
|
|
1272
|
-
tier: row.
|
|
1273
|
-
}]);
|
|
1275
|
+
tier: steeredIds.has(row.id) ? "safe_point" : "queue"
|
|
1276
|
+
}] : []);
|
|
1274
1277
|
await Promise.all(rows.map((row) => updateQueue(row.id, { kind: "remove" }).catch(() => void 0)));
|
|
1275
1278
|
freezeStore.set(sid, {
|
|
1276
1279
|
frozen: true,
|
|
@@ -1373,8 +1376,9 @@ window.__ModuleLoader__.load({
|
|
|
1373
1376
|
*
|
|
1374
1377
|
* List rows render sorted by `order` ascending, so a value above every other
|
|
1375
1378
|
* contributor keeps the strip as the bottom-most entry of the band — directly
|
|
1376
|
-
* on top of the composer card. Known contributors
|
|
1377
|
-
* `
|
|
1379
|
+
* on top of the composer card. Known contributors (stable across hosts
|
|
1380
|
+
* 0.1.5-rc.1 → 0.2.0-rc.2): `todo` 0, official `queue` 20,
|
|
1381
|
+
* `dsh-perm-gate.notice` 30, `dsh-tidy-display-entry` 0. DSH has no "last"
|
|
1378
1382
|
* slot semantics, so this is a convention, not a
|
|
1379
1383
|
* structural guarantee: a third party registering a larger value could still
|
|
1380
1384
|
* land below us.
|