chore: sync upstream doctly/switchboard (v0.0.29)#1
Merged
Conversation
xterm.js defaults to Unicode 6.1 width tables which treat emoji as single-width, causing all subsequent characters on the line to shift. The unicode-graphemes addon uses UAX #29 grapheme clustering (Unicode 15) for correct cell-width calculation. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
…race All 4 matrix jobs were running electron-builder with --publish always in parallel, racing to find-or-create the draft release for the tag. Each non-winner created its own duplicate draft, scattering mac/win assets (latest-mac.yml, .dmg, .zip, .exe) across drafts that no one publishes. Result on v0.0.27: the "Latest" release shipped with only Linux assets, and electron-updater 404s on latest-mac.yml. Now matrix jobs always run --publish never and upload artifacts (now including latest*.yml and .blockmap files needed by electron-updater). A single publish job, gated on tag push, downloads all artifacts and creates one draft release with gh release create. One publisher, one release, no race. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
v0.0.27's release was missing the macOS and Windows artifacts due to a race in the publish pipeline — all 4 matrix jobs ran electron-builder with --publish always in parallel, each creating its own duplicate draft release. The "Latest" release that won the race only contained the Linux assets, breaking electron-updater for mac/win clients (404 on latest-mac.yml). No app-code changes from 0.0.27. The pipeline is now split: the matrix builds with --publish never and a single follow-up job creates one draft release with all artifacts. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
5 idle terminals with cursorBlink: true cause ~28% CPU from constant WebGL repaint cycles. With blink disabled, idle terminals drop to near-zero. Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
…sidebar entries (doctly#41) Switchboard's folder-name regex only replaced `/` and `_`, while the Claude CLI replaces every non-alphanumeric character (and applies a 200-char cap with a hash suffix on overflow). For project paths containing spaces, dots, backslashes, colons, etc., the two sides produced different folder names under ~/.claude/projects/, surfacing as undismissable duplicate projects in the sidebar. - Add encode-project-path.js mirroring the CLI's algorithm exactly (reverse-engineered from claude 2.1.126: /[^a-zA-Z0-9]/g, 200-char cap, (h<<5)-h+c|0 hash suffix on overflow). Deterministic and pure. - Mirror the encoder in public/utils.js for the renderer. - Route all 10 call sites through encodeProjectPath(). - Fix session-cache.js phantom-project bug: only insert a project entry after the archive filter passes, so folders whose sessions are all archived don't appear as empty undismissable projects in the sidebar. Fixes doctly#38. Supersedes doctly#37 (also covers Windows drive paths). Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
…disable cursor blink to cut idle CPU
Claude Code writes auto-generated titles as type:"ai-title"/aiTitle entries, but readSessionFile only parsed type:"custom-title". Sessions with an AI title but no user-set title fell back to the raw first prompt. User-set customTitle still takes precedence. Fixes #33 Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
# Conflicts: # .github/workflows/build.yml # package-lock.json # package.json # schedule-ipc.js
7 tasks
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
Merge
doctly/switchboard:main(upstream) into the fork. Picks up bug fixes and improvements from v0.0.26 → v0.0.29.Notable upstream changes pulled in
fix add-project on Windows drive paths)ai-titleJSONL entries so session names display@xterm/addon-unicode-graphemesencode-project-path.js(used bysession-cache.jsandschedule-ipc.js)electron-updaterdependencyConflict resolution notes
package.json: kept fork's pinned-version style; added@xterm/[email protected]and[email protected]; preserved fork-only deps (dompurify) and scripts (apply-branding,build:win:portable,preinstall-guard).package-lock.json: regenerated against the mergedpackage.jsonvianpm install --package-lock-only.schedule-ipc.js: kept BOTHassertPathAllowed(fork's path-guard hardening) ANDencodeProjectPath(upstream's CLI-compatible folder naming). Defence-in-depth + correct behaviour..github/workflows/build.yml: kept deleted (fork has its own release flow).Open upstream PRs intentionally NOT pulled
Test plan
npm test→ 131/131 passing🤖 Generated with Claude Code