Prepare DesktopClaw v0.1.3 release#14
Conversation
There was a problem hiding this comment.
Pull request overview
Prepares the DesktopClaw v0.1.3 release by expanding the renderer UX (activity indicator + drawer, improved speech bubble/readback), updating packaging to include macOS artifacts in GitHub Actions, and refreshing release/docs + GitHub Pages content.
Changes:
- Adds an in-app activity indicator + drawer and refines the speech bubble layout/readback behavior.
- Adds macOS packaging (DMG/ZIP) to the release workflow alongside Windows artifacts.
- Updates the GitHub Pages landing page + bumps version/release notes; removes a tracked troubleshooting log snapshot.
Reviewed changes
Copilot reviewed 11 out of 17 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/renderer/ui_shell.js | Adds bubble accessibility attributes, new presentBubble API, and layout syncing via CSS variables. |
| src/renderer/tts_engine.js | Adds duplicate-speak suppression via in-flight promise caching (contains a blocking bug). |
| src/renderer/styles.css | Introduces task indicator/drawer styling and adjusts bubble + session stack layout constraints. |
| src/renderer/renderer.js | Implements RequestManager task history entries + drawer rendering and readback bubble integration. |
| src/renderer/index.html | Adds task indicator button and task drawer container elements. |
| site/index.html | Replaces GitHub Pages content with a new branded landing page + interactive state preview (has an a11y issue). |
| RELEASE_NOTES.md | Updates release notes for v0.1.3 scope (UX, site, packaging). |
| README.md | Updates install/platform notes and documents macOS dist command/artifacts. |
| package.json | Bumps version to 0.1.3; adds dist:mac; adds electron-builder mac target. |
| package-lock.json | Bumps locked package version to 0.1.3. |
| .github/workflows/release.yml | Splits release pipeline into Windows/macOS build jobs + a release job that publishes all artifacts. |
| build/troubleshooting/desktopclaw-log-snapshot-20260611-192001.txt | Removes tracked local log snapshot from the repo. |
| this.inFlightText = value; | ||
| this.inFlightPromise = speechPromise?.finally?.(() => { | ||
| if (this.inFlightPromise === speechPromise) { | ||
| this.inFlightPromise = null; | ||
| this.inFlightText = ''; | ||
| } | ||
| }) || null; |
| <div class="state-row${i === currentState ? ' active' : ''}" | ||
| onclick="applyState(${i}, true)" | ||
| role="button" | ||
| aria-label="${s.label}: ${s.desc}"> |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 752933aa42
ℹ️ 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".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| this.inFlightPromise = speechPromise?.finally?.(() => { | ||
| if (this.inFlightPromise === speechPromise) { |
There was a problem hiding this comment.
Clear completed TTS cache after playback
Because finally() returns a new promise, this.inFlightPromise is assigned to the wrapper promise while speechPromise still refers to the original playback promise, so this comparison is never true when playback settles. After the first successful readback, inFlightText remains set forever; any later response with the same text is treated as already in flight and returns the stale resolved promise without speaking.
Useful? React with 👍 / 👎.
| const idlePassthrough = | ||
| config?.clickThroughWhenIdle && lastState === 'idle' && !composerOpen && !settingsOpen && !historyOpen && !diagnosticsOpen; | ||
| config?.clickThroughWhenIdle && lastState === 'idle' && !composerOpen && !settingsOpen && !historyOpen && !diagnosticsOpen && !taskDrawerOpen; |
There was a problem hiding this comment.
Keep task indicator clickable in idle pass-through mode
When clickThroughWhenIdle is enabled, this idle pass-through condition ignores the newly added visible #task-indicator. After a task completes and the app returns to idle with the drawer closed, moving over the indicator still calls setIgnoreMouse(true), so clicks pass through to the desktop and the user cannot open the activity history from the indicator.
Useful? React with 👍 / 👎.
Summary
Verification
Release