@michengai/dsh-codex-ui 0.2.97 → 0.2.99
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.md +25 -0
- package/CHANGELOG.zh-CN.md +25 -0
- package/dist/client.js +32 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,31 @@
|
|
|
4
4
|
|
|
5
5
|
This changelog records recent releases of DSH Codex UI and its one-click installer. Earlier changes remain available in the [Git history](https://github.com/MichengAI/dsh-codex-ui/commits/main).
|
|
6
6
|
|
|
7
|
+
## 0.2.99 — 2026-09-01
|
|
8
|
+
|
|
9
|
+
Companion release: `@michengai/dsh-codex-suite-installer@0.1.16`.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- Restored full rendering for user question bubbles in the main conversation body so long prompts are not hidden by overflow, max-height, or multi-line clamp rules.
|
|
14
|
+
- Kept the official DSH user bubble DOM intact while applying a stable compatibility marker to newly mounted user bubbles.
|
|
15
|
+
|
|
16
|
+
### Dependencies
|
|
17
|
+
|
|
18
|
+
- The Suite Installer release workflow will resolve Codex UI `0.2.99` after this release is published.
|
|
19
|
+
|
|
20
|
+
## 0.2.98 — 2026-09-01
|
|
21
|
+
|
|
22
|
+
Companion release: `@michengai/dsh-codex-suite-installer@0.1.15`.
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- Kept the segmented conversation-tab slider aligned with the host-selected view by recognizing the tab list itself as a synchronization root, preventing the highlight from remaining on Chat after selecting Trace or Context.
|
|
27
|
+
|
|
28
|
+
### Dependencies
|
|
29
|
+
|
|
30
|
+
- Prepared Suite Installer `0.1.15` to resolve Codex UI `0.2.98` after this release is published.
|
|
31
|
+
|
|
7
32
|
## 0.2.97 — 2026-09-01
|
|
8
33
|
|
|
9
34
|
Companion release: `@michengai/dsh-codex-suite-installer@0.1.14`.
|
package/CHANGELOG.zh-CN.md
CHANGED
|
@@ -4,6 +4,31 @@
|
|
|
4
4
|
|
|
5
5
|
本日志记录 DSH Codex UI 及其一键安装器的最近发布;更早的变更可查看 [Git 提交历史](https://github.com/MichengAI/dsh-codex-ui/commits/main)。
|
|
6
6
|
|
|
7
|
+
## 0.2.99 — 2026-09-01
|
|
8
|
+
|
|
9
|
+
配套版本:`@michengai/dsh-codex-suite-installer@0.1.16`。
|
|
10
|
+
|
|
11
|
+
### 修复
|
|
12
|
+
|
|
13
|
+
- 恢复主会话正文中用户提问气泡的完整显示,避免长问题被溢出、高度上限或多行省略规则截断。
|
|
14
|
+
- 保留 DSH 官方用户气泡 DOM,只为新增用户气泡补充稳定兼容标记。
|
|
15
|
+
|
|
16
|
+
### 依赖
|
|
17
|
+
|
|
18
|
+
- Suite Installer 发布 workflow 会在本版本发布后解析 Codex UI `0.2.99`。
|
|
19
|
+
|
|
20
|
+
## 0.2.98 — 2026-09-01
|
|
21
|
+
|
|
22
|
+
配套版本:`@michengai/dsh-codex-suite-installer@0.1.15`。
|
|
23
|
+
|
|
24
|
+
### 修复
|
|
25
|
+
|
|
26
|
+
- 让会话分段页签的滑块能够以页签容器自身作为同步根节点,选中“轨迹”或“上下文”后高亮背景不再停留在“对话”。
|
|
27
|
+
|
|
28
|
+
### 依赖
|
|
29
|
+
|
|
30
|
+
- 准备 Suite Installer `0.1.15`,在本版本发布后解析 Codex UI `0.2.98`。
|
|
31
|
+
|
|
7
32
|
## 0.2.97 — 2026-09-01
|
|
8
33
|
|
|
9
34
|
配套版本:`@michengai/dsh-codex-suite-installer@0.1.14`。
|
package/dist/client.js
CHANGED
|
@@ -736,10 +736,37 @@ window.__ModuleLoader__.load({
|
|
|
736
736
|
//#region src/client/conversation-bubbles.ts
|
|
737
737
|
/** 撤回旧版 Codex 用户卡片,恢复 DSH 官方问题气泡。 */
|
|
738
738
|
const USER_BUBBLE_STYLE_ID = "dcu-user-bubble-style";
|
|
739
|
+
const USER_BUBBLE_EXPAND_STYLE_ID = "dcu-user-bubble-expand-style";
|
|
740
|
+
const USER_BUBBLE_EXPAND_STYLE = `
|
|
741
|
+
[data-time-hover-root]:not([data-turn-tail]),[data-time-hover-root]:not([data-turn-tail])>:first-child{overflow:visible!important}
|
|
742
|
+
[data-dcu-expandable-user-bubble]{max-height:none!important;overflow:visible!important;display:block!important;white-space:pre-wrap!important;overflow-wrap:anywhere!important;word-break:break-word!important;text-overflow:clip!important;-webkit-line-clamp:unset!important;-webkit-box-orient:initial!important}
|
|
743
|
+
`;
|
|
744
|
+
function ensureExpandableStyle(doc) {
|
|
745
|
+
if (doc.getElementById("dcu-user-bubble-expand-style") !== null) return;
|
|
746
|
+
const style = doc.createElement("style");
|
|
747
|
+
style.id = USER_BUBBLE_EXPAND_STYLE_ID;
|
|
748
|
+
style.textContent = USER_BUBBLE_EXPAND_STYLE;
|
|
749
|
+
doc.head.append(style);
|
|
750
|
+
}
|
|
751
|
+
function matchingElements(root, selector) {
|
|
752
|
+
const items = [...root.querySelectorAll(selector)];
|
|
753
|
+
if (root instanceof HTMLElement && root.matches(selector)) items.unshift(root);
|
|
754
|
+
return items;
|
|
755
|
+
}
|
|
756
|
+
function markExpandableUserBubbles(root) {
|
|
757
|
+
for (const row of matchingElements(root, "[data-time-hover-root]:not([data-turn-tail])")) {
|
|
758
|
+
const bubble = row.firstElementChild?.lastElementChild;
|
|
759
|
+
if (!(bubble instanceof HTMLElement) || bubble.textContent?.trim() === "") continue;
|
|
760
|
+
bubble.dataset.dcuExpandableUserBubble = "";
|
|
761
|
+
}
|
|
762
|
+
}
|
|
739
763
|
function restoreOfficialUserBubbles(root) {
|
|
740
|
-
|
|
764
|
+
const doc = "getElementById" in root ? root : root.ownerDocument;
|
|
765
|
+
doc?.getElementById(USER_BUBBLE_STYLE_ID)?.remove();
|
|
766
|
+
if (doc !== void 0 && doc !== null && doc.head !== null) ensureExpandableStyle(doc);
|
|
741
767
|
for (const card of root.querySelectorAll("[data-dcu-user-card]")) card.remove();
|
|
742
768
|
for (const source of root.querySelectorAll("[data-dcu-user-source]")) delete source.dataset.dcuUserSource;
|
|
769
|
+
markExpandableUserBubbles(root);
|
|
743
770
|
}
|
|
744
771
|
//#endregion
|
|
745
772
|
//#region src/client/conversation-header.ts
|
|
@@ -776,6 +803,7 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
|
|
|
776
803
|
const FOLDER_SVG = "<svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"none\" aria-hidden=\"true\"><path fill=\"currentColor\" transform=\"translate(1.5 2.429)\" d=\"M5.05582 0.518756L4.50669 0.86654L5.05582 0.518756ZM13 9.4837L13.65 9.4837L13.65 3.53962L13 3.53962L12.35 3.53962L12.35 9.4837L13 9.4837ZM11.3264 1.86603L11.3264 1.21603L6.52313 1.21603L6.52313 1.86603L6.52313 2.51603L11.3264 2.51603L11.3264 1.86603ZM5.58054 1.34727L6.12968 0.999489L5.60495 0.170972L5.05582 0.518756L4.50669 0.86654L5.03141 1.69506L5.58054 1.34727ZM4.11323 1.23058e-13L4.11323 -0.65L1.67359 -0.65L1.67359 5.00699e-14L1.67359 0.65L4.11323 0.65L4.11323 1.23058e-13ZM0 1.67359L-0.65 1.67359L-0.65 9.4837L0 9.4837L0.65 9.4837L0.65 1.67359L0 1.67359ZM11.3264 11.1573L11.3264 10.5073L1.67359 10.5073L1.67359 11.1573L1.67359 11.8073L11.3264 11.8073L11.3264 11.1573ZM0 9.4837L-0.65 9.4837C-0.65 10.767 0.390308 11.8073 1.67359 11.8073L1.67359 11.1573L1.67359 10.5073C1.10828 10.5073 0.65 10.049 0.65 9.4837L0 9.4837ZM1.67359 5.00699e-14L1.67359 -0.65C0.390307 -0.65 -0.65 0.390309 -0.65 1.67359L0 1.67359L0.65 1.67359C0.65 1.10828 1.10828 0.65 1.67359 0.65L1.67359 5.00699e-14ZM5.05582 0.518756L5.60495 0.170972C5.28121 -0.340193 4.71829 -0.65 4.11323 -0.65L4.11323 1.23058e-13L4.11323 0.65C4.27282 0.65 4.4213 0.731715 4.50669 0.86654L5.05582 0.518756ZM6.52313 1.86603L6.52313 1.21603C6.36354 1.21603 6.21507 1.13431 6.12968 0.999489L5.58054 1.34727L5.03141 1.69506C5.35515 2.20622 5.91808 2.51603 6.52313 2.51603L6.52313 1.86603ZM13 3.53962L13.65 3.53962C13.65 2.25634 12.6097 1.21603 11.3264 1.21603L11.3264 1.86603L11.3264 2.51603C11.8917 2.51603 12.35 2.97431 12.35 3.53962L13 3.53962ZM13 9.4837L12.35 9.4837C12.35 10.049 11.8917 10.5073 11.3264 10.5073L11.3264 11.1573L11.3264 11.8073C12.6097 11.8073 13.65 10.767 13.65 9.4837L13 9.4837Z\"/></svg>";
|
|
777
804
|
const MORE_SVG = "<svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" aria-hidden=\"true\"><circle cx=\"4\" cy=\"8\" r=\"1.15\" fill=\"currentColor\"/><circle cx=\"8\" cy=\"8\" r=\"1.15\" fill=\"currentColor\"/><circle cx=\"12\" cy=\"8\" r=\"1.15\" fill=\"currentColor\"/></svg>";
|
|
778
805
|
function findConversationTablist(root) {
|
|
806
|
+
if ("matches" in root && typeof root.matches === "function" && root.matches("[role=tablist]")) return root;
|
|
779
807
|
return root.querySelector("header [role=tablist]") ?? void 0;
|
|
780
808
|
}
|
|
781
809
|
/** 只给宿主页签打内联标记,视觉重排交给样式表;DOM 结构保持宿主原样。 */
|
|
@@ -890,12 +918,12 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
|
|
|
890
918
|
style.textContent = CONVERSATION_HEADER_STYLE;
|
|
891
919
|
doc.head.append(style);
|
|
892
920
|
}
|
|
893
|
-
const CONVERSATION_DECORATION_SELECTOR = "header";
|
|
921
|
+
const CONVERSATION_DECORATION_SELECTOR = "header,[data-time-hover-root],[data-dcu-user-card],[data-dcu-user-source]";
|
|
894
922
|
function conversationDecorationMutation(records) {
|
|
895
923
|
const relevant = (node) => node instanceof Element && (node.matches(CONVERSATION_DECORATION_SELECTOR) || node.closest(CONVERSATION_DECORATION_SELECTOR) !== null || node.querySelector(CONVERSATION_DECORATION_SELECTOR) !== null);
|
|
896
924
|
return records.some((record) => relevant(record.target) || [...record.addedNodes].some(relevant) || [...record.removedNodes].some(relevant));
|
|
897
925
|
}
|
|
898
|
-
/**
|
|
926
|
+
/** 观察会话顶栏与用户气泡;只对相关子树变更按帧合并,流式回答不会触发全文档扫描。 */
|
|
899
927
|
function observeConversationHeader(doc = document) {
|
|
900
928
|
if (doc.head === null || doc.body === null) return () => {};
|
|
901
929
|
ensureStyle(doc);
|
|
@@ -909,6 +937,7 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
|
|
|
909
937
|
if (applying) return;
|
|
910
938
|
applying = true;
|
|
911
939
|
try {
|
|
940
|
+
restoreOfficialUserBubbles(doc);
|
|
912
941
|
placeConversationTabs(doc);
|
|
913
942
|
const tabs = findConversationTablist(doc);
|
|
914
943
|
if (tabs !== watchedTabs) {
|