@michengai/dsh-codex-ui 0.2.98 → 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 +13 -0
- package/CHANGELOG.zh-CN.md +13 -0
- package/dist/client.js +31 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,19 @@
|
|
|
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
|
+
|
|
7
20
|
## 0.2.98 — 2026-09-01
|
|
8
21
|
|
|
9
22
|
Companion release: `@michengai/dsh-codex-suite-installer@0.1.15`.
|
package/CHANGELOG.zh-CN.md
CHANGED
|
@@ -4,6 +4,19 @@
|
|
|
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
|
+
|
|
7
20
|
## 0.2.98 — 2026-09-01
|
|
8
21
|
|
|
9
22
|
配套版本:`@michengai/dsh-codex-suite-installer@0.1.15`。
|
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
|
|
@@ -891,12 +918,12 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
|
|
|
891
918
|
style.textContent = CONVERSATION_HEADER_STYLE;
|
|
892
919
|
doc.head.append(style);
|
|
893
920
|
}
|
|
894
|
-
const CONVERSATION_DECORATION_SELECTOR = "header";
|
|
921
|
+
const CONVERSATION_DECORATION_SELECTOR = "header,[data-time-hover-root],[data-dcu-user-card],[data-dcu-user-source]";
|
|
895
922
|
function conversationDecorationMutation(records) {
|
|
896
923
|
const relevant = (node) => node instanceof Element && (node.matches(CONVERSATION_DECORATION_SELECTOR) || node.closest(CONVERSATION_DECORATION_SELECTOR) !== null || node.querySelector(CONVERSATION_DECORATION_SELECTOR) !== null);
|
|
897
924
|
return records.some((record) => relevant(record.target) || [...record.addedNodes].some(relevant) || [...record.removedNodes].some(relevant));
|
|
898
925
|
}
|
|
899
|
-
/**
|
|
926
|
+
/** 观察会话顶栏与用户气泡;只对相关子树变更按帧合并,流式回答不会触发全文档扫描。 */
|
|
900
927
|
function observeConversationHeader(doc = document) {
|
|
901
928
|
if (doc.head === null || doc.body === null) return () => {};
|
|
902
929
|
ensureStyle(doc);
|
|
@@ -910,6 +937,7 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
|
|
|
910
937
|
if (applying) return;
|
|
911
938
|
applying = true;
|
|
912
939
|
try {
|
|
940
|
+
restoreOfficialUserBubbles(doc);
|
|
913
941
|
placeConversationTabs(doc);
|
|
914
942
|
const tabs = findConversationTablist(doc);
|
|
915
943
|
if (tabs !== watchedTabs) {
|