@michengai/dsh-codex-ui 0.2.100 → 0.2.101

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 CHANGED
@@ -4,6 +4,23 @@
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.101 — 2026-09-01
8
+
9
+ Companion release: `@michengai/dsh-codex-suite-installer@0.1.18`.
10
+
11
+ ### Fixed
12
+
13
+ - Restored the host pending-interaction store as a fallback for workspace, channel, and scheduled-task trees when `SessionSummary.pendingInteraction` is absent, so approvals, questions, and plan reviews remain visible in Web and Desktop sidebars.
14
+ - Kept valid `SessionSummary.pendingInteraction` values authoritative while preserving a stable empty-store fallback for older hosts that do not inject the hook.
15
+
16
+ ### Tests
17
+
18
+ - Added DOM integration coverage for all three trees using the real pending-interaction store path, alongside the existing `SessionSummary` snapshot coverage.
19
+
20
+ ### Dependencies
21
+
22
+ - The Suite Installer release workflow will resolve Codex UI `0.2.101` after this release is published.
23
+
7
24
  ## 0.2.100 — 2026-09-01
8
25
 
9
26
  Companion release: `@michengai/dsh-codex-suite-installer@0.1.17`.
@@ -4,6 +4,23 @@
4
4
 
5
5
  本日志记录 DSH Codex UI 及其一键安装器的最近发布;更早的变更可查看 [Git 提交历史](https://github.com/MichengAI/dsh-codex-ui/commits/main)。
6
6
 
7
+ ## 0.2.101 — 2026-09-01
8
+
9
+ 配套版本:`@michengai/dsh-codex-suite-installer@0.1.18`。
10
+
11
+ ### 修复
12
+
13
+ - 当 `SessionSummary.pendingInteraction` 缺失时,任务、频道和定时任务树恢复回退读取宿主待处理交互 Store,确保 Web 与 Desktop 侧栏继续显示等待审批、等待回答和计划待审状态。
14
+ - 有效的 `SessionSummary.pendingInteraction` 仍保持最高优先级;旧宿主未注入 Hook 时使用稳定空 Store 安全降级。
15
+
16
+ ### 测试
17
+
18
+ - 在原有 `SessionSummary` 快照覆盖之外,为三棵树补充真实待处理交互 Store 路径的 DOM 集成测试。
19
+
20
+ ### 依赖
21
+
22
+ - Suite Installer 发布 workflow 会在本版本发布后解析 Codex UI `0.2.101`。
23
+
7
24
  ## 0.2.100 — 2026-09-01
8
25
 
9
26
  配套版本:`@michengai/dsh-codex-suite-installer@0.1.17`。
package/dist/client.js CHANGED
@@ -655,6 +655,10 @@ window.__ModuleLoader__.load({
655
655
  }
656
656
  //#endregion
657
657
  //#region src/client/session-pending.ts
658
+ const EMPTY_PENDING_INTERACTIONS = /* @__PURE__ */ new Map();
659
+ function useEmptySessionPendingInteraction(selector) {
660
+ return selector(EMPTY_PENDING_INTERACTIONS);
661
+ }
658
662
  function visiblePendingKind(kind) {
659
663
  switch (kind) {
660
664
  case "approval":
@@ -663,6 +667,9 @@ window.__ModuleLoader__.load({
663
667
  default: return;
664
668
  }
665
669
  }
670
+ function pendingInteractionForSession(sessionId, pendingInteractions, summaryKind) {
671
+ return visiblePendingKind(summaryKind) ?? visiblePendingKind(pendingInteractions.get(sessionId)?.kind);
672
+ }
666
673
  //#endregion
667
674
  //#region src/client/pinned-workspaces.ts
668
675
  /** 浏览器本地持久化键;置顶只影响本插件中的工作区分区。 */
@@ -1436,8 +1443,9 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
1436
1443
  function CodexWorkspaceBrowser(props) {
1437
1444
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(HoverShell, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CodexWorkspaceTree, { ...props }) });
1438
1445
  }
1439
- function CodexWorkspaceTree({ wide, useSessions, useWorkspaces, t, archiveSession, deleteSession, deleteWorkspace, forkSession, insertSessionBefore, insertWorkspaceBefore, openPath, openSession, renameSession, renameWorkspace, startSession }) {
1446
+ function CodexWorkspaceTree({ wide, useSessions, useSessionPendingInteraction, useWorkspaces, t, archiveSession, deleteSession, deleteWorkspace, forkSession, insertSessionBefore, insertWorkspaceBefore, openPath, openSession, renameSession, renameWorkspace, startSession }) {
1440
1447
  const sessions = useSessions((state) => state);
1448
+ const pendingInteractions = (useSessionPendingInteraction ?? useEmptySessionPendingInteraction)((state) => state);
1441
1449
  const workspaces = useWorkspaces((state) => state);
1442
1450
  const [expanded, setExpanded] = (0, react.useState)(() => readTreeExpansionState(storage$1(), WORKSPACE_EXPANSION_STORAGE_KEY));
1443
1451
  const [pinnedWorkspaceIds, setPinnedWorkspaceIdsState] = (0, react.useState)(() => readPinnedWorkspaceIds(storage$1()));
@@ -1949,7 +1957,7 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
1949
1957
  isExpanded && shownIds.map((id) => {
1950
1958
  const session = sessions.byId[id];
1951
1959
  if (session === void 0) return null;
1952
- const pendingInteraction = visiblePendingKind(session.pendingInteraction);
1960
+ const pendingInteraction = pendingInteractionForSession(id, pendingInteractions, session.pendingInteraction);
1953
1961
  const path = session.cwd ?? workspace.path;
1954
1962
  const selected = sessions.current === id;
1955
1963
  const sessionMenuOpen = menu?.type === "session" && menu.id === id;
@@ -2362,7 +2370,7 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
2362
2370
  const title = session.displayTitle;
2363
2371
  const pinned = pinnedSessionIds.includes(id);
2364
2372
  const unread = unreadSessionIds.includes(id);
2365
- const pendingInteraction = visiblePendingKind(session.pendingInteraction);
2373
+ const pendingInteraction = pendingInteractionForSession(id, pendingInteractions, session.pendingInteraction);
2366
2374
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SessionRow, {
2367
2375
  id,
2368
2376
  title,
@@ -2869,8 +2877,9 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
2869
2877
  })
2870
2878
  });
2871
2879
  }
2872
- function ChannelBrowserTree({ openSession, archiveSession, deleteSession, forkSession, renameSession, useSessions, t, menu, setMenu }) {
2880
+ function ChannelBrowserTree({ openSession, archiveSession, deleteSession, forkSession, renameSession, useSessions, useSessionPendingInteraction, t, menu, setMenu }) {
2873
2881
  const sessions = useSessions((state) => state);
2882
+ const pendingInteractions = (useSessionPendingInteraction ?? useEmptySessionPendingInteraction)((state) => state);
2874
2883
  const [groups, setGroups] = (0, react.useState)([]);
2875
2884
  const [pollError, setPollError] = (0, react.useState)();
2876
2885
  const [expanded, setExpanded] = (0, react.useState)(() => readTreeExpansionState(browserStorage(), CHANNEL_EXPANSION_STORAGE_KEY));
@@ -2968,7 +2977,7 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
2968
2977
  const updatedAt = session.updatedAt ?? sessions.byId[id]?.updatedAt;
2969
2978
  const pinned = flags.pinnedSessionIds.includes(id);
2970
2979
  const unread = flags.unreadSessionIds.includes(id);
2971
- const pendingInteraction = visiblePendingKind(sessions.byId[id]?.pendingInteraction);
2980
+ const pendingInteraction = pendingInteractionForSession(id, pendingInteractions, sessions.byId[id]?.pendingInteraction);
2972
2981
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SessionRow, {
2973
2982
  id,
2974
2983
  title,
@@ -3125,8 +3134,9 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
3125
3134
  })]
3126
3135
  });
3127
3136
  }
3128
- function ScheduleBrowserTree({ openSession, archiveSession, deleteSession, forkSession, renameSession, useSessions, useWorkspaces, t, openTaskSettings, menu, setMenu }) {
3137
+ function ScheduleBrowserTree({ openSession, archiveSession, deleteSession, forkSession, renameSession, useSessions, useSessionPendingInteraction, useWorkspaces, t, openTaskSettings, menu, setMenu }) {
3129
3138
  const sessions = useSessions((state) => state);
3139
+ const pendingInteractions = (useSessionPendingInteraction ?? useEmptySessionPendingInteraction)((state) => state);
3130
3140
  const workspaces = useWorkspaces((state) => state);
3131
3141
  const [expanded, setExpanded] = (0, react.useState)(() => readTreeExpansionState(browserStorage(), SCHEDULE_EXPANSION_STORAGE_KEY));
3132
3142
  const [groupMenu, setGroupMenu] = (0, react.useState)();
@@ -3259,7 +3269,7 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
3259
3269
  const title = session.title;
3260
3270
  const pinned = flags.pinnedSessionIds.includes(id);
3261
3271
  const unread = flags.unreadSessionIds.includes(id);
3262
- const pendingInteraction = visiblePendingKind(sessions.byId[id]?.pendingInteraction);
3272
+ const pendingInteraction = pendingInteractionForSession(id, pendingInteractions, sessions.byId[id]?.pendingInteraction);
3263
3273
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SessionRow, {
3264
3274
  id,
3265
3275
  title,
@@ -3873,7 +3883,7 @@ html[data-dcu-official-turn-navigator-supported=true] .dcu-turn-navigator,html:h
3873
3883
  });
3874
3884
  });
3875
3885
  /** Codex 风格的 DSH 侧栏,只替换导航外观,项目浏览和设置仍由 DSH 官方组件提供。 */
3876
- function CodexSidebar({ collapsed, width, openSession, startSession, toggleSidebar, archiveSession, deleteSession, forkSession, renameSession, openPath, companionSlots, renderSlot, t, useSessions, useWorkspaces }) {
3886
+ function CodexSidebar({ collapsed, width, openSession, startSession, toggleSidebar, archiveSession, deleteSession, forkSession, renameSession, openPath, companionSlots, renderSlot, t, useSessions, useSessionPendingInteraction, useWorkspaces }) {
3877
3887
  const compact = collapsed || width < 80;
3878
3888
  const [visualCompact, setVisualCompact] = (0, react.useState)(compact);
3879
3889
  const [collapsing, setCollapsing] = (0, react.useState)(false);
@@ -4157,6 +4167,7 @@ html[data-dcu-official-turn-navigator-supported=true] .dcu-turn-navigator,html:h
4157
4167
  forkSession,
4158
4168
  renameSession,
4159
4169
  useSessions,
4170
+ useSessionPendingInteraction,
4160
4171
  t
4161
4172
  })
4162
4173
  }) : imTab === "schedule" && showSchedule ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
@@ -4168,6 +4179,7 @@ html[data-dcu-official-turn-navigator-supported=true] .dcu-turn-navigator,html:h
4168
4179
  forkSession,
4169
4180
  renameSession,
4170
4181
  useSessions,
4182
+ useSessionPendingInteraction,
4171
4183
  useWorkspaces,
4172
4184
  t,
4173
4185
  overviewContent: scheduleOverviewSlot,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@michengai/dsh-codex-ui",
3
- "version": "0.2.100",
3
+ "version": "0.2.101",
4
4
  "description": "以 Codex 风格重构 DSH Web 侧栏的独立客户端插件",
5
5
  "license": "Apache-2.0",
6
6
  "publishConfig": {