You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Resolve merge conflict in docs/loop/feature-ledger.md: adopt main's canonical
ledger and prepend this PR's starter-suggestions (#73) row. No code changes.
| starter-suggestions | Starter prompt suggestions on the empty conversation | Claude Code Desktop "prompt suggestions" / ChatGPT & Codex example prompts | frontend-only | pr-open |[#72](https://github.com/modelstudioai/openwork/issues/72)|[#73](https://github.com/modelstudioai/openwork/pull/73)| loop/starter-suggestions | 2026-07-09 | New `EmptyStateSuggestions` chip row rendered under the centered empty-state composer in `ChatDisplay` (only while composer is empty). Clicking a chip seeds the composer via the existing controlled draft channel (`onInputChange`) + focuses it — does NOT auto-send. 4 suggestions, 8 new i18n keys ×7 locales. typecheck:all / `bun test` zero-delta vs main (11 electron-typecheck + 56-test pre-existing baseline byte-identical); renderer build ✅; i18n parity ✅; lint 0 errors on touched files. CDP assertion `e2e/assertions/starter-suggestions.assert.ts` included; **could not execute locally** (Electron binary egress-blocked: `github.com` releases 403). |
36
-
| copy-message | "Copy" (copy-as-Markdown) action on assistant/agent responses | Codex desktop "Copy as Markdown" (openai/codex #2880, #17241) + Claude/ChatGPT desktop per-message copy | frontend-only | pr-open | [#70](https://github.com/modelstudioai/openwork/issues/70) | [#71](https://github.com/modelstudioai/openwork/pull/71) | loop/copy-message | 2026-07-08 | User messages + code blocks were already copyable, but full assistant responses had only a pop-out button — no copy. Extracted `AssistantMessage` component in `ChatDisplay.tsx` (owns `copied` state, mirrors the existing `ErrorMessage` extraction) with a hover copy button next to pop-out; copies raw `message.content` via `navigator.clipboard.writeText`, 2s "copied" check state, `toast.copyFailed` on error. **Zero new i18n keys** (reuses `common.copy`/`common.copied`/`toast.copyFailed`). Added a general `seed` hook to the e2e harness (`app.ts`/`runner.ts`) so assertions can pre-seed an on-disk session the embedded `SessionManager` loads on boot (no backend). typecheck:all zero-delta; `bun test` 56-failure set byte-identical to main; renderer build ✅; i18n parity ✅ (1544 keys); eslint 0 errors. CDP assertion (`copy-message.assert.ts`) seeds a user+assistant session, opens it, clicks the copy button, and asserts the exact response markdown reaches the (stubbed) clipboard + the button enters its copied state; **could not run locally** (org egress policy 403s the Electron binary download — same block as prior rounds). |
37
-
| interface-zoom | Interface zoom (⌘+ / ⌘- / ⌘0) to scale the whole app | Claude/VS Code/Codex desktop zoom | frontend-only | pr-open |[#68](https://github.com/modelstudioai/openwork/issues/68)|[#69](https://github.com/modelstudioai/openwork/pull/69)| — | 2026-07-09 | Opened by a prior run; reconciled from GitHub. Awaiting review. |
38
-
| increase-contrast | "Increase contrast" accessibility setting in Appearance | macOS / Windows / Claude desktop increase-contrast | frontend-only | pr-open |[#66](https://github.com/modelstudioai/openwork/issues/66)|[#67](https://github.com/modelstudioai/openwork/pull/67)| — | 2026-07-09 | Opened by a prior run; reconciled from GitHub. Awaiting review. |
39
-
| chat-text-size | "Chat text size" (Small / Default / Large) in Appearance | ChatGPT / Claude desktop text-size | frontend-only | pr-open |[#64](https://github.com/modelstudioai/openwork/issues/64)|[#65](https://github.com/modelstudioai/openwork/pull/65)| — | 2026-07-09 | Opened by a prior run; reconciled from GitHub. Awaiting review. |
40
-
| conversation-width | "Conversation width" (Comfortable / Wide / Full) in Appearance | ChatGPT / Claude desktop conversation width | frontend-only | pr-open |[#62](https://github.com/modelstudioai/openwork/issues/62)|[#63](https://github.com/modelstudioai/openwork/pull/63)| — | 2026-07-09 | Opened by a prior run; reconciled from GitHub. Awaiting review. |
41
-
| composer-word-count | Live word / character count in the chat composer | ChatGPT / editors composer counters | frontend-only | pr-open |[#60](https://github.com/modelstudioai/openwork/issues/60)|[#61](https://github.com/modelstudioai/openwork/pull/61)| — | 2026-07-09 | Opened by a prior run; reconciled from GitHub. Awaiting review. |
42
-
| shortcuts-search | Search box on the Settings → Keyboard Shortcuts page | VS Code / Codex desktop shortcuts search | frontend-only | pr-open |[#58](https://github.com/modelstudioai/openwork/issues/58)|[#59](https://github.com/modelstudioai/openwork/pull/59)| — | 2026-07-09 | Opened by a prior run; reconciled from GitHub. Awaiting review. |
43
-
| recent-commands | Surface recently-used commands in the Command Palette (⌘K) | Claude Code Desktop / VS Code recent commands | frontend-only | pr-open |[#56](https://github.com/modelstudioai/openwork/issues/56)|[#57](https://github.com/modelstudioai/openwork/pull/57)| — | 2026-07-09 | Opened by a prior run; reconciled from GitHub. Awaiting review. |
44
-
| thinking-menu-shortcut | Keyboard shortcut (⌘⇧E) to open the composer thinking menu | Claude Code Desktop effort menu ⌘⇧E | frontend-only | pr-open |[#54](https://github.com/modelstudioai/openwork/issues/54)|[#55](https://github.com/modelstudioai/openwork/pull/55)| loop/thinking-menu-shortcut | 2026-07-09 | Opened by a prior run; reconciled from GitHub. Awaiting review. |
45
-
| prompt-history | Recall previously-sent prompts with Up / Down in the composer | Claude Code / ChatGPT / shell history | frontend-only | pr-open |[#52](https://github.com/modelstudioai/openwork/issues/52)|[#53](https://github.com/modelstudioai/openwork/pull/53)| — | 2026-07-09 | Opened by a prior run; reconciled from GitHub. Awaiting review. |
46
-
| session-search-shortcut | Cmd+F / `app.search` should activate in-conversation session search | OpenWork internal bug report | frontend-only | proposed |[#43](https://github.com/modelstudioai/openwork/issues/43)| — | — | 2026-07-09 | Open loop-bot issue (bug), no PR yet. Not selected this round. |
47
-
| reduce-motion | "Reduce motion" accessibility setting in Appearance | Claude desktop / macOS / Windows reduce-motion + `prefers-reduced-motion`| frontend-only | merged |[#50](https://github.com/modelstudioai/openwork/issues/50)|[#51](https://github.com/modelstudioai/openwork/pull/51)| loop/reduce-motion | 2026-07-08 |**Merged** into `main` (2026-07-06). Renderer-only pref (localStorage) applied app-wide via `<MotionConfig reducedMotion>` + `data-reduce-motion` on `<html>` + global CSS guard. Off ⇒ `reducedMotion="user"` (still honors OS). New `ReduceMotionProvider` in `main.tsx`; toggle in Appearance→Interface; 2 new i18n keys ×7 locales. |
37
+
| scroll-to-bottom | "Jump to latest" (scroll-to-bottom) button in the chat transcript | Claude Code Desktop / ChatGPT / Codex desktop jump-to-latest affordance | frontend-only | pr-open | [#46](https://github.com/modelstudioai/openwork/issues/46) | [#47](https://github.com/modelstudioai/openwork/pull/47) | loop/scroll-to-bottom | 2026-07-02 | Reuses existing `ChatDisplay` scroll state (`distanceFromBottom`, `isStickToBottomRef`, `messagesEndRef`); floating `AnimatePresence` button shown when >200px from bottom. One new i18n key `chat.scrollToBottom` across all 6 locales. Added a reusable `seed(profileDirs)` hook to the e2e harness (`app.ts`/`runner.ts`) so assertions can pre-seed an on-disk session (backend-independent) — the scroll assertion seeds a 40-message session, opens it, scrolls up, asserts the button appears, clicks it, asserts return-to-bottom + hide. typecheck/`bun test` zero-delta vs main (11 pre-existing tsc errors, 56 pre-existing test fails, identical sets); renderer build ✅. **CDP could not run locally**: the Electron binary download is 403'd by the sandbox egress policy (github release host), so the app can't launch here — assertion transpiles and is included for CI/reviewer. |
38
+
| thinking-level-picker | Thinking-level (reasoning effort) picker in the chat composer | Claude Code Desktop effort menu (⌘⇧E) + OpenWork's own model picker | frontend-only | merged |[#44](https://github.com/modelstudioai/openwork/issues/44)|[#45](https://github.com/modelstudioai/openwork/pull/45)| loop/thinking-level-picker | 2026-07-02 | Merged into `main`. `thinkingLevel`/`onThinkingLevelChange` already plumbed to `FreeFormInput`; only the UI trigger was missing. Reuses `thinking.*` + `settings.ai.thinking` i18n keys (zero new keys). typecheck/`bun test` zero-delta vs main. |
48
39
| composer-expand | Expand / collapse (maximize) toggle for the chat composer | Claude/ChatGPT/Codex desktop composer maximize | frontend-only | pr-open |[#48](https://github.com/modelstudioai/openwork/issues/48)|[#49](https://github.com/modelstudioai/openwork/pull/49)| loop/composer-expand | 2026-07-03 | Opened by a prior run. Adds `isComposerExpanded` toggle in `FreeFormInput`; 2 new i18n keys. Awaiting review. |
49
-
| scroll-to-bottom | "Jump to latest" (scroll-to-bottom) button in the chat transcript | Claude Code / ChatGPT / Codex desktop | frontend-only | pr-open |[#46](https://github.com/modelstudioai/openwork/issues/46)|[#47](https://github.com/modelstudioai/openwork/pull/47)| loop/scroll-to-bottom | 2026-07-02 | Opened by a prior run. Floating jump button in `ChatDisplay` + `seed()` harness hook. Awaiting review. |
50
-
| thinking-level-picker | Thinking-level (reasoning effort) picker in the chat composer | Claude Code Desktop effort menu (⌘⇧E) + OpenWork's own model picker | frontend-only | merged |[#44](https://github.com/modelstudioai/openwork/issues/44)|[#45](https://github.com/modelstudioai/openwork/pull/45)| loop/thinking-level-picker | 2026-07-03 |**Merged** into `main` (2026-07-02). `thinkingLevel`/`onThinkingLevelChange` already plumbed to `FreeFormInput`; only the UI trigger was missing. Reuses `thinking.*` + `settings.ai.thinking` i18n keys (zero new keys). |
51
40
| command-palette | Global command palette (⌘K/Ctrl+K) to search & run any action | Claude Code Desktop ⌘K / VS Code & Codex ⌘⇧P / Linear ⌘K | frontend-only | merged |[#41](https://github.com/modelstudioai/openwork/issues/41)|[#42](https://github.com/modelstudioai/openwork/pull/42)| loop/command-palette | 2026-07-02 | Merged into `main`. Reuses action registry `execute()` + cmdk primitives; zero new i18n keys. CDP e2e 2/2 pass. typecheck/test +0 vs main. |
52
41
| settings-search | Searchable/filterable settings navigation | Claude Code Desktop / VS Code / Codex desktop settings search | frontend-only | merged |[#39](https://github.com/modelstudioai/openwork/issues/39)|[#40](https://github.com/modelstudioai/openwork/pull/40)| loop/settings-search | 2026-07-01 | Merged into `main`. Filters `SettingsNavigator` by title+description; reuses `common.search`/`common.noResultsFound` (no new locale keys). Also hardened `e2e/app.ts` teardown (per-launch profile dir + setsid process-group kill) so multiple CDP assertions run under headless xvfb. |
0 commit comments