Skip to content

fix(web): improve responsive desktop UI - #198

Merged
elkaix merged 4 commits into
mainfrom
fix/responsive-changes-editor
Aug 26, 2026
Merged

fix(web): improve responsive desktop UI#198
elkaix merged 4 commits into
mainfrom
fix/responsive-changes-editor

Conversation

@elkaix

@elkaix elkaix commented Aug 25, 2026

Copy link
Copy Markdown
Member

Related Issue

Direct maintainer request; no issue was created.

Problem

Narrow Changes panels could hide the line-number gutter or keep horizontal scroll between files. The prompt timeline could also enter the chat reading column, and the small sidebar robot did not align with the collapse control.

What changed

  • Hide the prompt timeline before it overlaps chat content.
  • Wrap narrow diff lines, keep the gutter visible, and reset horizontal scroll for each file.
  • Replace the sidebar robot with the aligned Pythinker Code banner.
  • Rebuild and verify the committed desktop web bundle.
  • Add focused regression coverage for the responsive layout and banner contract.

Verification

  • pnpm --filter @pymodel/pythinker-web run test (84 files, 989 tests)
  • pnpm exec vitest run apps/desktop/tests/updater.spec.ts (25 tests)
  • Web style, Vue typecheck, tsgo, root lint, build, and web-asset checks
  • Live Electron verification for the Changes panel and sidebar alignment
  • Mock desktop bridge verification for the update notice and download-progress dialog

Checklist

  • I have read the CONTRIBUTING document.
  • This is a direct maintainer request; no related issue was created.
  • I have added tests that prove my feature works.
  • Ran gen-changesets skill.
  • Ran gen-docs skill; the existing desktop guide already covers the update flow, and this layout fix needs no documentation change.

Summary by CodeRabbit

  • New Features

    • Added a branded sidebar banner and desktop update card with version details, availability status, and download progress.
    • Download dialogs now show percentage completion and transfer speed.
    • Added responsive wrapping for narrow code diffs while preserving line numbers and sticky gutters.
    • Improved conversation navigation clipping behavior on smaller layouts.
    • Expanded diagram and language-format support in the web editor bundle.
  • Bug Fixes

    • Reset diff scroll position when loading or switching files.
    • Updated settings navigation order and update icon presentation.

Keep narrow Changes views readable and prevent the prompt rail from entering chat content.

Replace the sidebar robot with the aligned Pythinker Code banner and rebuild the desktop web bundle.
@coderabbitai

coderabbitai Bot commented Aug 25, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: b38134c9-ce87-478a-a4b5-bfa0a1df5996

📥 Commits

Reviewing files that changed from the base of the PR and between 79ec444 and 59c9106.

⛔ Files ignored due to path filters (5)
  • apps/pythinker-code/dist-web/brand/pythinker_code_banner_dark.svg is excluded by !**/*.svg
  • apps/pythinker-code/dist-web/brand/pythinker_code_banner_light.svg is excluded by !**/*.svg
  • apps/pythinker-web/public/brand/pythinker_code_banner_dark.svg is excluded by !**/*.svg
  • apps/pythinker-web/public/brand/pythinker_code_banner_light.svg is excluded by !**/*.svg
  • apps/pythinker-web/src/icons/pythinker/update_icon.svg is excluded by !**/*.svg
📒 Files selected for processing (112)
  • .changeset/fix-responsive-changes-editor.md
  • .changeset/show-desktop-update-card.md
  • .changeset/update-sidebar-brand.md
  • apps/pythinker-code/dist-web/.web-bundle-manifest.json
  • apps/pythinker-code/dist-web/assets/CodeBlockNode-C7jR0J2m.js
  • apps/pythinker-code/dist-web/assets/DesignSystemView-P3HoRLfC.js
  • apps/pythinker-code/dist-web/assets/Tooltip-CLyA1YAm.js
  • apps/pythinker-code/dist-web/assets/abnfDiagram-VCTEODGH-DAOVWhtD.js
  • apps/pythinker-code/dist-web/assets/arc-C9kGDsHG.js
  • apps/pythinker-code/dist-web/assets/architectureDiagram-5GKGNRK7-C3COQboU.js
  • apps/pythinker-code/dist-web/assets/blockDiagram-NRAW4CY4-DSI_Fvpm.js
  • apps/pythinker-code/dist-web/assets/c4Diagram-UCG6FXSJ-Dt7mW_Z3.js
  • apps/pythinker-code/dist-web/assets/channel-BGV9mmHc.js
  • apps/pythinker-code/dist-web/assets/channel-C7v8EKJy.js
  • apps/pythinker-code/dist-web/assets/chunk-2Q5K7J3B-Bg28ghmP.js
  • apps/pythinker-code/dist-web/assets/chunk-5VM5RSS4-B8flMvBf.js
  • apps/pythinker-code/dist-web/assets/chunk-F27PBJKO-BzGtMoW6.js
  • apps/pythinker-code/dist-web/assets/chunk-G27WJ6UU-Cbpne8GZ.js
  • apps/pythinker-code/dist-web/assets/chunk-JWPE2WC7-BiGYuZFw.js
  • apps/pythinker-code/dist-web/assets/chunk-LCL6LL3I-b2hDZtgB.js
  • apps/pythinker-code/dist-web/assets/chunk-POPQ4Y6H-JsMacXFo.js
  • apps/pythinker-code/dist-web/assets/chunk-SVP7TREG-Bc90kP4W.js
  • apps/pythinker-code/dist-web/assets/chunk-XXDRQBXY-BbpUqFGB.js
  • apps/pythinker-code/dist-web/assets/classDiagram-DTDB5LWJ-DHmaOoJN.js
  • apps/pythinker-code/dist-web/assets/classDiagram-DTDB5LWJ-hc3sEZdf.js
  • apps/pythinker-code/dist-web/assets/classDiagram-v2-JRS7N3AN-DHmaOoJN.js
  • apps/pythinker-code/dist-web/assets/classDiagram-v2-JRS7N3AN-hc3sEZdf.js
  • apps/pythinker-code/dist-web/assets/cose-bilkent-JH36ORCC-DFzhDDeX.js
  • apps/pythinker-code/dist-web/assets/cssMode-BFwUzMep.js
  • apps/pythinker-code/dist-web/assets/cynefin-OW5HDTMX-Boi5zAiu.js
  • apps/pythinker-code/dist-web/assets/cynefinDiagram-5FMLGOSQ-Dpd8cx0W.js
  • apps/pythinker-code/dist-web/assets/dagre-3AP2YEHR-qmxZzkLX.js
  • apps/pythinker-code/dist-web/assets/diagram-S7CK7UJ4-DUGU9taE.js
  • apps/pythinker-code/dist-web/assets/diagram-UQ7AKVKN-f53ckDlZ.js
  • apps/pythinker-code/dist-web/assets/diagram-VSXAHHWV-DJYevX-G.js
  • apps/pythinker-code/dist-web/assets/diagram-VX7I27RA-CsQVvj_k.js
  • apps/pythinker-code/dist-web/assets/diagram-Z3DM3KII-Dqbla7W7.js
  • apps/pythinker-code/dist-web/assets/ebnfDiagram-PWID7BFC-Db4Pq78M.js
  • apps/pythinker-code/dist-web/assets/editor.main-DxL1lUco.js
  • apps/pythinker-code/dist-web/assets/erDiagram-SSCWMZ5O-DocaCN0Y.js
  • apps/pythinker-code/dist-web/assets/flowDiagram-A5DVABFB-C-KlZvw9.js
  • apps/pythinker-code/dist-web/assets/freemarker2-CYjijS7G.js
  • apps/pythinker-code/dist-web/assets/ganttDiagram-EL5Y4UJY-C-Ukn8Xo.js
  • apps/pythinker-code/dist-web/assets/gitGraphDiagram-WWUBYQGX-CEFgNmAv.js
  • apps/pythinker-code/dist-web/assets/handlebars-d9PVuOro.js
  • apps/pythinker-code/dist-web/assets/html-BIenp_Fm.js
  • apps/pythinker-code/dist-web/assets/htmlMode-BUR_oSe-.js
  • apps/pythinker-code/dist-web/assets/index-B1U6qhwi.js
  • apps/pythinker-code/dist-web/assets/index-BJ-XokWt.js
  • apps/pythinker-code/dist-web/assets/index-BSXXB0lM.css
  • apps/pythinker-code/dist-web/assets/index-By0Njn6s.js
  • apps/pythinker-code/dist-web/assets/index-D5X1412T.js
  • apps/pythinker-code/dist-web/assets/index-Dl7pgGFR.css
  • apps/pythinker-code/dist-web/assets/index10-CQ9z1F-f.js
  • apps/pythinker-code/dist-web/assets/index11-B3yU8_c7.js
  • apps/pythinker-code/dist-web/assets/index5-B-0r-jcu.js
  • apps/pythinker-code/dist-web/assets/index6-BSAKxtuo.js
  • apps/pythinker-code/dist-web/assets/index7-BEKow6uQ.js
  • apps/pythinker-code/dist-web/assets/index8--DW3Uu8G.js
  • apps/pythinker-code/dist-web/assets/infoDiagram-RXCK75RN-DhVxocud.js
  • apps/pythinker-code/dist-web/assets/ishikawaDiagram-5VMMS53U-B3DIiFf3.js
  • apps/pythinker-code/dist-web/assets/javascript-BoWgoYsx.js
  • apps/pythinker-code/dist-web/assets/journeyDiagram-EYS64GPL-DCnp7KSY.js
  • apps/pythinker-code/dist-web/assets/jsonMode-DIeVZgJP.js
  • apps/pythinker-code/dist-web/assets/kanban-definition-3QL26DDD-BU9NqBjl.js
  • apps/pythinker-code/dist-web/assets/layout-CwSsnVuk.js
  • apps/pythinker-code/dist-web/assets/linear-DSIDo4rw.js
  • apps/pythinker-code/dist-web/assets/liquid-Cdk2Pn_t.js
  • apps/pythinker-code/dist-web/assets/lspLanguageFeatures-Bh4Y_YOB.js
  • apps/pythinker-code/dist-web/assets/mdx-BqCoZCcE.js
  • apps/pythinker-code/dist-web/assets/mermaid.core-tbJS5IL6.js
  • apps/pythinker-code/dist-web/assets/mindmap-definition-FBJOCRG2-DNo1y4xK.js
  • apps/pythinker-code/dist-web/assets/pegDiagram-XKGWAZYB-C29sY7zi.js
  • apps/pythinker-code/dist-web/assets/pieDiagram-E7YTZNPT-D4s9UhG1.js
  • apps/pythinker-code/dist-web/assets/python-MgDX47UN.js
  • apps/pythinker-code/dist-web/assets/quadrantDiagram-AXDQQJYC-BumY9uCz.js
  • apps/pythinker-code/dist-web/assets/railroadDiagram-O6MQD6OU-Elhx9L44.js
  • apps/pythinker-code/dist-web/assets/razor-DW97gz-h.js
  • apps/pythinker-code/dist-web/assets/requirementDiagram-EFPCY7ZU-DleNnWl6.js
  • apps/pythinker-code/dist-web/assets/sankeyDiagram-P5KCCOFB-BD7Oa66B.js
  • apps/pythinker-code/dist-web/assets/sequenceDiagram-WJ2MYXX4-CB7fG9XA.js
  • apps/pythinker-code/dist-web/assets/sizeCapture-X5ZJPWSS-7BEKE58p.js
  • apps/pythinker-code/dist-web/assets/stateDiagram-HBIQ2CUA-DxIbsOiA.js
  • apps/pythinker-code/dist-web/assets/stateDiagram-v2-4QOOHH4V-s_O8-VHp.js
  • apps/pythinker-code/dist-web/assets/stateDiagram-v2-4QOOHH4V-zVmlaZPo.js
  • apps/pythinker-code/dist-web/assets/swimlanes-XN3QIQJK-DCUdhPbM.js
  • apps/pythinker-code/dist-web/assets/swimlanesDiagram-VK2B7HYN-ClGMa8pf.js
  • apps/pythinker-code/dist-web/assets/swimlanesDiagram-VK2B7HYN-vbVuYLTV.js
  • apps/pythinker-code/dist-web/assets/timeline-definition-24CTP7MA-DlWMEGEf.js
  • apps/pythinker-code/dist-web/assets/tsMode-B3153nTz.js
  • apps/pythinker-code/dist-web/assets/typescript-BAuz-rWY.js
  • apps/pythinker-code/dist-web/assets/vennDiagram-4TSXK5OY-C8s_wlqC.js
  • apps/pythinker-code/dist-web/assets/vue.runtime.esm-bundler-DvG7LCCj.js
  • apps/pythinker-code/dist-web/assets/wardleyDiagram-VM6X3IG4-Bhi0aEe_.js
  • apps/pythinker-code/dist-web/assets/xml-eNO1UeDZ.js
  • apps/pythinker-code/dist-web/assets/xychartDiagram-S5SC5T6Z-CsNrC_SW.js
  • apps/pythinker-code/dist-web/assets/yaml-MqtvO_El.js
  • apps/pythinker-code/dist-web/index.html
  • apps/pythinker-web/src/components/Sidebar.vue
  • apps/pythinker-web/src/components/UpdateDialog.vue
  • apps/pythinker-web/src/components/chat/ConversationToc.vue
  • apps/pythinker-web/src/components/chat/DiffView.vue
  • apps/pythinker-web/src/components/chat/HighlightedCode.vue
  • apps/pythinker-web/src/components/settings/SettingsDialog.vue
  • apps/pythinker-web/src/i18n/locales/en/update.ts
  • apps/pythinker-web/src/lib/icons.test.ts
  • apps/pythinker-web/src/lib/icons.ts
  • apps/pythinker-web/test/app-shell-contracts.test.ts
  • apps/pythinker-web/test/conversation-toc.test.ts
  • apps/pythinker-web/test/diff-view.test.ts
  • apps/pythinker-web/test/settings-ui.test.ts
  • apps/pythinker-web/test/update-dialog.test.ts

📝 Walkthrough

Walkthrough

The change adds responsive diff wrapping, sidebar branding and update-card UI, download progress details, TOC overlap handling, icon and localization updates, tests, release changesets, and regenerated web assets.

Changes

UI behavior and update flows

Layer / File(s) Summary
Responsive diff rendering and scroll handling
apps/pythinker-web/src/components/chat/DiffView.vue, apps/pythinker-web/src/components/chat/HighlightedCode.vue, apps/pythinker-web/test/diff-view.test.ts
Diff lines wrap in narrow containers, gutters remain sticky, and horizontal scroll resets after file or loading changes.
Sidebar branding and update presentation
apps/pythinker-web/src/components/Sidebar.vue, apps/pythinker-web/src/components/settings/SettingsDialog.vue, apps/pythinker-web/src/lib/icons.ts, apps/pythinker-web/src/i18n/locales/en/update.ts
The sidebar uses a banner brand and structured update card. The update icon, labels, version badge, shimmer behavior, and tab ordering are updated.
Download progress display
apps/pythinker-web/src/components/UpdateDialog.vue, apps/pythinker-web/test/update-dialog.test.ts
The update dialog displays transferred bytes, percentage, and download speed with responsive metadata styling.
TOC clipping and contract coverage
apps/pythinker-web/src/components/chat/ConversationToc.vue, apps/pythinker-web/test/conversation-toc.test.ts, apps/pythinker-web/test/app-shell-contracts.test.ts, apps/pythinker-web/test/settings-ui.test.ts, apps/pythinker-web/src/lib/icons.test.ts, .changeset/*
TOC clipping accounts for overlap with the reading column. Tests cover the updated sidebar, settings tab, icon, and layout behavior. Patch changesets document the UI updates.

Generated editor and diagram modules

Layer / File(s) Summary
Generated Mermaid diagram modules
apps/pythinker-code/dist-web/assets/*Diagram*.js, apps/pythinker-code/dist-web/assets/*diagram*.js
The bundle adds Sankey, state, swimlane, timeline, Venn, Wardley, and xychart diagram modules, including parsers, databases, renderers, styles, and exported diagram definitions.
Generated editor runtime modules
apps/pythinker-code/dist-web/assets/tsMode-*.js, apps/pythinker-code/dist-web/assets/typescript-*.js, apps/pythinker-code/dist-web/assets/xml-*.js, apps/pythinker-code/dist-web/assets/yaml-*.js, apps/pythinker-code/dist-web/assets/vue.runtime*.js
The bundle adds TypeScript language services, TypeScript/XML/YAML definitions, and the Vue runtime export module.
Generated runtime helpers
apps/pythinker-code/dist-web/assets/channel-*.js, apps/pythinker-code/dist-web/assets/sizeCapture-*.js
The bundle adds Mermaid channel parsing and guarded SVG node-size capture support.

Hashed asset wiring

Layer / File(s) Summary
Regenerated bundle references
apps/pythinker-code/dist-web/.web-bundle-manifest.json, apps/pythinker-code/dist-web/index.html, apps/pythinker-code/dist-web/assets/*.js
Generated assets now reference the current hashed editor, Mermaid, language, CSS, shared runtime, and dynamically loaded chunks. Runtime implementations remain unchanged in the updated reference-only modules.

Estimated code review effort: 4 (Complex) | ~45 minutes

Warning

Some tools did not complete. Review the errors below.

🔧 ast-grep (0.45.2)
apps/pythinker-code/dist-web/assets/cynefin-OW5HDTMX-Boi5zAiu.js

ast-grep timed out on this file

apps/pythinker-code/dist-web/.web-bundle-manifest.json

ast-grep did not scan this file: retry isolation stopped after a systemic timeout or after exhausting the retry isolation budget

apps/pythinker-code/dist-web/assets/CodeBlockNode-C7jR0J2m.js

ast-grep did not scan this file: retry isolation stopped after a systemic timeout or after exhausting the retry isolation budget

  • 39 others

Comment @coderabbitai help to get the list of available commands.

@pkg-pr-new

pkg-pr-new Bot commented Aug 25, 2026

Copy link
Copy Markdown
pnpm dlx https://pkg.pr.new/@pymodel/pythinker-code@59c9106
npx https://pkg.pr.new/@pymodel/pythinker-code@59c9106

commit: 59c9106

@elkaix
elkaix enabled auto-merge (squash) August 25, 2026 22:02
Comment thread apps/pythinker-code/dist-web/assets/chunk-G27WJ6UU-D9Kyn8Lp.js Fixed
Comment thread apps/pythinker-code/dist-web/assets/chunk-G27WJ6UU-D9Kyn8Lp.js Fixed
elkaix added 2 commits August 25, 2026 18:14
Present available updates as a dedicated sidebar card while preserving macOS title-bar clearance. Compact download progress and reuse the update icon in Settings.
@elkaix
elkaix disabled auto-merge August 25, 2026 23:43
@elkaix
elkaix enabled auto-merge (squash) August 25, 2026 23:43
Comment thread apps/pythinker-code/dist-web/assets/chunk-G27WJ6UU-Cbpne8GZ.js
Comment thread apps/pythinker-code/dist-web/assets/chunk-G27WJ6UU-Cbpne8GZ.js
@elkaix
elkaix merged commit 6be446e into main Aug 26, 2026
25 of 26 checks passed
@elkaix
elkaix deleted the fix/responsive-changes-editor branch August 26, 2026 00:15
elkaix added a commit that referenced this pull request Aug 26, 2026
## Problem
The responsive desktop UI fixes (#198) landed after desktop 0.3.3 was
tagged, so no shipped build has them.

## Changes
- Bump `apps/desktop/package.json` to 0.3.4 so `desktop-v0.3.4` can be
tagged after merge.

[skip changeset]

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
  * Updated the desktop application to version 0.3.4.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
elkaix pushed a commit that referenced this pull request Aug 27, 2026
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @pymodel/pythinker-code@1.4.0

### Minor Changes

- [#188](#188)
[`0097afc`](0097afc)
Thanks [@elkaix](https://github.com/elkaix)! - Remove the
`--allow-remote-terminals` flag from `pythinker web`; PTY terminal
routes now stay available on loopback binds only.

- [#188](#188)
[`0097afc`](0097afc)
Thanks [@elkaix](https://github.com/elkaix)! - Add
`PYTHINKER_CODE_INFINITE_RETRY=1` to retry every failed model request
indefinitely with backoff instead of failing the turn, for long
unattended runs.

- [#208](#208)
[`bd0eadd`](bd0eadd)
Thanks [@elkaix](https://github.com/elkaix)! - Add an option to reveal
saved plan files in your file manager. Select Reveal in file manager
from a saved plan.

### Patch Changes

- [#188](#188)
[`0097afc`](0097afc)
Thanks [@elkaix](https://github.com/elkaix)! - Silence the
MaxListenersExceededWarning that could appear during long agent turns
with many parallel tool calls.

- [#188](#188)
[`0097afc`](0097afc)
Thanks [@elkaix](https://github.com/elkaix)! - Fix messages sent from
one web client not appearing on other clients connected to the same
session.

- [#207](#207)
[`3a1d761`](3a1d761)
Thanks [@elkaix](https://github.com/elkaix)! - Fix context usage updates
in interactive clients.

- [#214](#214)
[`48510be`](48510be)
Thanks [@elkaix](https://github.com/elkaix)! - Complete a Codex sign-in
as soon as the browser tab becomes visible again, not only when the
window regains focus.

- [#201](#201)
[`5f087d8`](5f087d8)
Thanks [@elkaix](https://github.com/elkaix)! - Make the chat prompt
anchor a compact line index that opens prompt and response previews.

- [#188](#188)
[`0097afc`](0097afc)
Thanks [@elkaix](https://github.com/elkaix)! - Persist a picked thinking
effort as the default only up to the model's own default effort; a more
expensive pick stays session-only.

- [#204](#204)
[`2d76cad`](2d76cad)
Thanks [@elkaix](https://github.com/elkaix)! - Fix prompt anchor
selection when a conversation has two prompts.

- [#198](#198)
[`6be446e`](6be446e)
Thanks [@elkaix](https://github.com/elkaix)! - Wrap narrow Changes
editor lines while keeping line numbers visible.

- [#207](#207)
[`3a1d761`](3a1d761)
Thanks [@elkaix](https://github.com/elkaix)! - Fix session history after
steering or undoing a turn.

- [#211](#211)
[`7040eed`](7040eed)
Thanks [@elkaix](https://github.com/elkaix)! - Add a setting to pin
every subagent to the selected model, use the dark banner in every
sidebar, and show Pythinker desktop updates as one continuous download.

- [#188](#188)
[`0097afc`](0097afc)
Thanks [@elkaix](https://github.com/elkaix)! - Show the /plugins
marketplace catalog as soon as it loads, with latest-version lookups
running in the background.

- [#192](#192)
[`8b6cc70`](8b6cc70)
Thanks [@elkaix](https://github.com/elkaix)! - Preserve subagent model
aliases when provider models refresh.

- [#215](#215)
[`e4ed37f`](e4ed37f)
Thanks [@elkaix](https://github.com/elkaix)! - Fix a resumed session
showing a stale "manually stopped" or failed state when its last turn
had actually completed.

- [#198](#198)
[`6be446e`](6be446e)
Thanks [@elkaix](https://github.com/elkaix)! - Show available desktop
updates as a sidebar button with release notes and update controls.

- [#192](#192)
[`8b6cc70`](8b6cc70)
Thanks [@elkaix](https://github.com/elkaix)! - Stop goal turns when
automatic context compaction is cancelled or fails.

- [#192](#192)
[`8b6cc70`](8b6cc70)
Thanks [@elkaix](https://github.com/elkaix)! - Let subagents inherit the
calling agent model from the Agent settings tab.

- [#188](#188)
[`0097afc`](0097afc)
Thanks [@elkaix](https://github.com/elkaix)! - Fix foreground subagents
being reported as background tasks on the task list.

- [#201](#201)
[`5f087d8`](5f087d8)
Thanks [@elkaix](https://github.com/elkaix)! - Use theme-matched
Pythinker banners in the sidebar.

- [#207](#207)
[`3a1d761`](3a1d761)
Thanks [@elkaix](https://github.com/elkaix)! - Fix loss of large tool
outputs in long conversations.

- [#213](#213)
[`0753f13`](0753f13)
Thanks [@elkaix](https://github.com/elkaix)! - Fix the "manually
stopped" state lingering after undoing the interrupted turn.

- [#198](#198)
[`6be446e`](6be446e)
Thanks [@elkaix](https://github.com/elkaix)! - Replace the sidebar robot
icon with the Pythinker Code banner.
## pythinker@0.9.6

### Patch Changes

- [#188](#188)
[`0097afc`](0097afc)
Thanks [@elkaix](https://github.com/elkaix)! - Persist a picked thinking
effort as the default only up to the model's own default effort; a more
expensive pick stays session-only.

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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.

1 participant