feat: session chat history view with message bubbles#278
Merged
Conversation
- Rename channels: nightly-prod → beta, nightly-test → nightly
- New artifact naming: nexu-simplest-openclaw-desktop-{version}-{channel}-{arch}.{ext}
- Add latest artifacts: nexu-simplest-openclaw-desktop-latest-{channel}-{arch}.{ext}
- Patch latest-mac.yml to match new filenames for auto-update
- Remove desktop-nightly-test.yml, add desktop-beta.yml
Channel mapping:
- nightly: test environment (nexu.powerformer.net)
- beta: prod environment (nexu.io)
- stable: prod environment (nexu.io)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace all "Nexu Desktop" references with "Nexu" so that app.setName matches the electron-builder productName. This avoids userData path drift — Electron derives the storage directory from app.name, and a mismatch would silently move the data root on upgrade. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…nels For nightly and beta builds, patch package.json version at build time (e.g. 0.1.1 → 0.1.1-nightly.20260319) so each daily build has a unique version and electron-updater can detect it as an update. Stable channel is unchanged — uses the version from package.json as-is. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…channels # Conflicts: # apps/desktop/main/index.ts
Avoid confusion with generic "test" / "prod" naming. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix Sentry DSN lookup to match renamed nexu-test/nexu-prod environments - Add build-config.json generation to desktop-release.yml (was missing) - Add checksum upload to R2 in desktop-build.yml (parity with release) - Stagger cron: nightly UTC 00:00, beta UTC 18:00 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove duplicate app.setName("Nexu Desktop") / app.dock.show() calls
(merge artifact). Set app name to "Nexu" once before any getPath() calls
to avoid userData/logs path inconsistency.
Update CI check scripts to match the new logs/userData directory name.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…s endpoint
Replace the sidecar file-polling config sync with direct WS push using
OpenClaw's config.apply RPC. Config changes now take effect in <1s instead
of 5-15s.
Key changes:
- New openclaw-service.ts: unified WS communication module with pushConfig,
getChannelsStatus, getChannelReadiness APIs
- publishPoolConfigSnapshot() now pushes config via WS after DB write
- Channel readiness endpoint (GET /channels/{id}/readiness) for frontend polling
- Frontend polls readiness after channel connect with progressive toast feedback
- Remove runPollLoop from gateway sidecar (config push replaces file polling)
- Various channel connection robustness fixes (transactions, upsert, etc.)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…channels # Conflicts: # apps/web/src/pages/home.tsx # pnpm-lock.yaml
# Conflicts: # apps/desktop/main/runtime/manifests.ts # apps/desktop/scripts/prepare-pglite-sidecar.mjs # apps/web/lib/api/sdk.gen.ts # apps/web/lib/api/types.gen.ts
- Add chat history API: controller reads JSONL session files and exposes
GET /api/v1/sessions/{id}/messages endpoint
- Add legacy API runtime session routes via OpenClaw WS RPC
- Rewrite sessions page as chat view with user/assistant message bubbles
(user right-aligned dark, assistant left-aligned light with brand avatar)
- Add SidebarSession mapping layer for unified sidebar data source
- Reduce sidebar polling to 10s, chat history polls at 5s
- Add i18n keys for chat view (en + zh-CN)
- Fix merge issues: channel readiness API rename, import ordering
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Deploying nexu-docs with
|
| Latest commit: |
da5a1d6
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://2230ca77.nexu-docs.pages.dev |
| Branch Preview URL: | https://feat-session-chat-history.nexu-docs.pages.dev |
…isplay - Load workspace root .env in controller for LiteLLM env vars (fixes desktop sidecar not reading LITELLM_BASE_URL/API_KEY) - Inject LiteLLM provider and prefix bare model IDs with litellm/ (fixes "Unknown model: anthropic/claude-sonnet-4") - Infer session title and channelType from JSONL first user message (shows sender name instead of UUID in sidebar) - Strip OpenClaw metadata blocks from user message display (removes Conversation/Sender metadata and timestamp prefixes) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Resolves conflicts in openclaw-service, pool-config-service, sdk.gen, channel-connect-modal, inline-model-selector, switch, i18n, index.css, workspace-layout, and home page. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
mrcfps
approved these changes
Mar 20, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
GET /api/v1/sessions/{id}/messagesendpoint in controller — reads JSONL session files directly from OpenClaw state dir and returns parsed user/assistant messagessessions.list,chat.history) for SaaS pathSidebarSessionunified mapping layer, reduce polling to 10sTest plan
pnpm typecheck && pnpm lintpassespnpm devstarts successfully🤖 Generated with Claude Code