Skip to content

feat(sidechat): expose opt-in content surfaces for GenUI - #1033

Merged
taekchef merged 10 commits into
omdsh-dev:devfrom
sunxiuguo:feat/genui-sidechat-surface-354
Oct 28, 2026
Merged

taekchef merged 10 commits into
omdsh-dev:devfrom
sunxiuguo:feat/genui-sidechat-surface-354

Conversation

@sunxiuguo

@sunxiuguo sunxiuguo commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Related to omdsh-dev/dsh-genui#354 and the scoped direction. This is the BetterSidebar provider half, targeting dev.

Current head: d953b7c3d57f2312abbdf52ec366f8879087ea9f. It preserves the two original contribution commits, incorporates the maintainer’s assist resolution, and merges current dev (43db17f2) without retargeting or replacing this PR. The tree remains identical to the assist tree, 3bc6583bbf8714e232e069c068e172193594d3b4; all 637 tracked file entries were verified after publication.

  • Expose a narrow opt-in Side Chat surface through the existing BetterSidebar service. Without a consumer, host Markdown rendering remains the default.
  • Preserve source, child thread, assistant event sequence, and original text-block identity. Reasoning blocks do not renumber text blocks; stale transcript responses are rejected after a thread switch.
  • Bind actions to the owning child conversation. Hidden, replaced, or disposed surfaces revoke old callbacks, with no fallback to the main conversation.
  • Document the service boundary and add provider, visibility, lifecycle, cache, restore-boundary, and consumer-type regressions. No second GenUI renderer or forged main-chat DOM attributes.

The resolution retains the upstream row-object rewrite cache and media helpers, passes the separate GenUI row binding, and forwards streaming={!row.settled}. The inherited fork fixtures remain consistent with the regression proving that ordinary restore markers must not discard child history.

Current-tree local validation

Full-history Linux checkout, Node 24.19.0, repository-pinned pnpm 11.8.0, frozen official-registry dependencies. Runtime checks below validated the exact published source tree before the metadata-only merge commit.

  • Complete fresh-process-per-file coverage: all 234 files, 2,874 passed, 17 existing platform skips, zero failures. Each file ran once in this profile. Assertion-name multisets and existing skip sets matched the complete aggregate collection; no assertions were weakened or new skips added.
  • Single-invocation aggregate remains non-green: 2,872 passed, 17 skipped, 2 failed. The two nested pnpm pack / tsdown builds were killed before the package assertions. Both pack tests passed in the fresh-process profile; that result is not being substituted for a successful stock aggregate invocation.
  • Full-project tsc --noEmit passed with the unchanged tsconfig and compact Node memory/GC settings. Whole-checkout lint and the repository’s consumer-type script passed.
  • Declaration generation and all seven bundle targets with documented serial scheduling passed. The initial concurrent build was killed. Normal pnpm pack, including its unchanged prepare lifecycle, passed; this is not a claim that the earlier stock build attempt succeeded.
  • Focused provider coverage passed 13 files / 293 tests; independent focused coverage passed 6 files / 44 tests. Negative controls produced the intended streaming and restore failures, after which original source bytes were restored and verified.
  • A separate browser-only new-API fixture passed under the existing skipLibCheck convention. Strict browser-root consumption remains limited by existing host Node declarations and upstream Cosmokit type diagnostics; no strict-browser-clean claim is made.
  • Linux real-rg path/CR/Unicode assertions passed. Both fd probes explicitly skipped because fd is absent; this does not establish Windows or fd coverage.

These are our local results, separate from the maintainer’s reported macOS results.

Historical validation before the assist update

The following receipts concern earlier heads and are retained for provenance, not current-head acceptance.

Original implementation

At 9a11166, typecheck, build, and packing passed in the isolated source copy; 14 changed files were verified byte-for-byte after publication. The initial full test run was 2,706 passed, 17 skipped, 7 failed: six required unavailable Git history and one was HOME-dependent. Paired unchanged-dev/candidate checks under a fresh owned HOME produced 65 passed and the same six Git-history failures on each, with the media case passing on both. Those historical runs were not all green. Independent real-component integration passed 8 jsdom cases, not browser acceptance.

Previous-head real dual-plugin acceptance

The earlier provider head 34fbad8a75ca4e80af0375800378bcf7c4119d1d, including its restored-history correction, was built and packed in Node 22 and 24 lanes of GenUI run 39816456694, at GenUI dbc6cc73aecf70f2b26875c759511837b803c66d. That run completed 6/6 jobs successfully. Both exact packs were installed normally in the real rc.2 source-layout web host, with 475 installed Sidebar files matching packed bytes in each lane.

Both browser lanes verified 12 independent main/A/B form values, original text blocks 0/2 and fence indexes 0/1, native tab/conversation away-and-return, and button plus submit in each owning child. Four successful HTTP responses settled exact payloads durably in the correct children only. Parent and away sessions remained unchanged through a one-second quiet window; four replay calls consumed both scripts, and cleanup completed. Synthetic receipts and screenshots were independently reviewed.

This established the scoped workflow for that previous provider/consumer pair. It used synthetic keyless replay, not live model traffic, rc.1-specific mount coverage, or Desktop/native-link validation. It has not yet been repeated for the current provider tree.

Outstanding CI and acceptance

Current-head Sidebar CI run 40451557984 is action_required, with zero jobs run at the latest readback.

Still pending:

  • Normal Node 22 CI, including the stock single-invocation suite and build.
  • Real Windows parity and fd/rg engine checks.
  • Pinned rc.1 packed plugin-mount and aggregate-mount gates, including native reload, editor loading, terminal uniqueness, and web-profile exclusions.
  • Refreshed real dual-plugin browser acceptance using this exact provider and the current GenUI consumer.

The PR remains for normal review and CI. No gate waiver, automatic merge, release, or current-head host-acceptance claim is requested.

Implementation and separate source review were AI-assisted. The current automated Codex review reports that it could not complete; that is not a passed review.

@sunxiuguo
sunxiuguo marked this pull request as ready for review October 22, 2026 16:57
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ⚠️ Failed 2026-10-27T04:47:39.506872Z
We couldn’t complete this review. Comment @codex review to try again.
d953b7c New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

omdsh-dev#1035 (seed trim on a model switch) and omdsh-dev#1044 (local images and deliveries)
merged after v0.28.0 and ship in v0.28.1; the changelog and the release
notes now list them and credit their author.
Updated WeChat group QR code in README_ZH.md.
…rewrite pass and streaming parse inside the GenUI row component
@taekchef

Copy link
Copy Markdown
Collaborator

This was generated by AI during triage.

@sunxiuguo 这个分支与 main 的冲突已经解好并验证通过,结果放在 assist/genui-sidechat-surface-354:它就是你当前的分支头(34fbad8)加上一个合并 main 的 merge commit,你的提交原样保留。由于 PR 未开启「允许维护者修改」,我无法直接推到你的 fork 分支,你可以一条命令快进采纳:

git pull --ff-only https://github.com/omdsh-dev/DSH-better-sidebar.git assist/genui-sidechat-surface-354

冲突处理(全部在 SideChatView.tsx,其余文件自动合并干净):

  • 保留 main 的 RowSurface 行级 helpers(按 row 对象缓存的 rewrite、交付文件打开/媒体 URL),GenUI 的行绑定改名为 genuiRowSurface 作为 renderRow 第四参传入,行 key 继续带 threadId 前缀;
  • SidechatAssistantRow 组件内部改用 main 的 row 级 rewrite 签名,并补上 main 新增的 streaming={!row.settled} 增量解析,data-genui-surface 挂载逻辑不变;
  • main 侧两个 spec(sidechat-transcript、sidechat-present-card)里代表继承 fork 边界的 session/end-seed fixture 补上了 { inherited: true } 标记,与本分支 threadOwnLogEvents 只认打标记边界的协议对齐(sidechat-resume-boundary.spec.ts 已同时覆盖打标记与不打标记两种)。

验证:tsc --noEmit 通过;全量 vitest 2873 通过,唯一失败是 fs-operations 的 symlink 用例——它在干净的 origin/main 上同样失败,是 macOS 本地环境问题,与本分支无关。

如果你更希望维护侧直接从这个分支开替代 PR(保留你的提交署名、关掉本 PR),也可以,分支是现成的。

Preserve original contribution and reviewed assist merge; retain PR base dev.

Copy link
Copy Markdown
Contributor Author

Thanks @taekchef. I’ve incorporated your assist merge, preserving both original commits, and merged current dev while keeping this PR and its dev base.

The published head is d953b7c, with parents fc717fbb and 43db17f2. Its source tree is identical to your assist branch; the resolution itself is unchanged.

Local validation of that exact tree in a full-history Linux/Node 24 checkout:

  • All 234 test files ran once in separate fresh processes: 2,874 passed, 17 existing platform skips, zero failures. Assertion names and skips were checked against the complete aggregate collection; no assertions were weakened or new skips added.
  • The single-invocation aggregate remains 2,872 passed, 17 skipped, 2 failed: nested pnpm pack / tsdown processes were killed before the package assertions. Both pack tests passed in the fresh-process run, but I’m retaining the aggregate failures rather than calling that invocation green.
  • Full-project typecheck, lint, the repository’s consumer-type check, declaration generation, all seven bundle targets with serial scheduling, and normal pnpm pack passed.

These checks cover the unchanged tree before the metadata-only merge commit. The new CI run is currently action_required, with zero jobs run.

The earlier real dual-plugin receipts cover 34fbad8, not this new head. Refreshed dual-plugin acceptance, Windows/engine parity, and the pinned rc.1 mount/aggregate/native-reload/editor/terminal gates remain open. This update is for normal review and CI, with no request to waive those gates or merge automatically.

Implementation and separate source review were AI-assisted. The automated Codex review currently reports that it could not complete; I am not treating that as a passed review.

@taekchef
taekchef merged commit 60c3fff into omdsh-dev:dev Oct 28, 2026
taekchef added a commit that referenced this pull request Oct 28, 2026
Preserve the original provider PR #1033 commits and contributor attribution.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants