From a2dc5021bcd4da8c29c6e47e5dbd4a45ae7c7cfc Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Sun, 26 Apr 2026 14:27:06 +0300 Subject: [PATCH] fix: stabilize model and task UI hints Keep thinking shortcut hint visible without layout shift Restore JSON file icons across shared file lists Use task status icons in the input status row --- bun.lock | 18 ++++++++-------- package.json | 2 +- packages/ui/package.json | 2 +- .../ui/src/assets/icons/file-types/json.svg | 2 +- .../ui/src/assets/icons/file-types/sprite.svg | 6 +++--- .../ui/src/components/chat/ModelControls.tsx | 21 ++++++++++++++++--- packages/ui/src/components/chat/StatusRow.tsx | 18 ++++++++++++++-- packages/vscode/package.json | 2 +- packages/web/package.json | 2 +- 9 files changed, 51 insertions(+), 22 deletions(-) diff --git a/bun.lock b/bun.lock index b3234d02..7c0efe1a 100644 --- a/bun.lock +++ b/bun.lock @@ -33,7 +33,7 @@ "@ibm/plex": "^6.4.1", "@lezer/highlight": "^1.2.3", "@octokit/rest": "^22.0.1", - "@opencode-ai/sdk": "^1.4.19", + "@opencode-ai/sdk": "^1.4.25", "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", @@ -95,7 +95,7 @@ }, "packages/desktop": { "name": "@openchamber/desktop", - "version": "1.9.6", + "version": "1.9.8", "devDependencies": { "@tauri-apps/cli": "^2", "@types/node": "^24.3.1", @@ -104,7 +104,7 @@ }, "packages/electron": { "name": "@openchamber/electron", - "version": "1.9.6", + "version": "1.9.8", "dependencies": { "@openchamber/web": "workspace:*", "electron-context-menu": "^4.1.2", @@ -119,7 +119,7 @@ }, "packages/ui": { "name": "@openchamber/ui", - "version": "1.9.6", + "version": "1.9.8", "dependencies": { "@base-ui/react": "^1.4.0", "@codemirror/autocomplete": "^6.20.0", @@ -150,7 +150,7 @@ "@fontsource/ibm-plex-sans": "^5.1.1", "@ibm/plex": "^6.4.1", "@lezer/highlight": "^1.2.3", - "@opencode-ai/sdk": "^1.4.19", + "@opencode-ai/sdk": "^1.4.25", "@pierre/diffs": "1.1.0-beta.13", "@remixicon/react": "^4.7.0", "@simplewebauthn/browser": "13.3.0", @@ -218,10 +218,10 @@ }, "packages/vscode": { "name": "openchamber", - "version": "1.9.6", + "version": "1.9.8", "dependencies": { "@openchamber/ui": "workspace:*", - "@opencode-ai/sdk": "^1.4.19", + "@opencode-ai/sdk": "^1.4.25", "adm-zip": "^0.5.16", "jsonc-parser": "^3.3.1", "react": "^19.1.1", @@ -241,14 +241,14 @@ }, "packages/web": { "name": "@openchamber/web", - "version": "1.9.6", + "version": "1.9.8", "bin": { "openchamber": "./bin/cli.js", }, "dependencies": { "@clack/prompts": "^1.1.0", "@octokit/rest": "^22.0.1", - "@opencode-ai/sdk": "^1.4.19", + "@opencode-ai/sdk": "^1.4.25", "@simplewebauthn/server": "13.3.0", "adm-zip": "^0.5.16", "better-sqlite3": "^11.7.0", diff --git a/package.json b/package.json index 360b0dc3..1a4fc74d 100644 --- a/package.json +++ b/package.json @@ -94,7 +94,7 @@ "@ibm/plex": "^6.4.1", "@lezer/highlight": "^1.2.3", "@octokit/rest": "^22.0.1", - "@opencode-ai/sdk": "^1.4.19", + "@opencode-ai/sdk": "^1.4.25", "@base-ui/react": "^1.4.0", "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", diff --git a/packages/ui/package.json b/packages/ui/package.json index 5ba98343..d7fd49f0 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -39,7 +39,7 @@ "@fontsource/ibm-plex-sans": "^5.1.1", "@ibm/plex": "^6.4.1", "@lezer/highlight": "^1.2.3", - "@opencode-ai/sdk": "^1.4.19", + "@opencode-ai/sdk": "^1.4.25", "@pierre/diffs": "1.1.0-beta.13", "@base-ui/react": "^1.4.0", "@remixicon/react": "^4.7.0", diff --git a/packages/ui/src/assets/icons/file-types/json.svg b/packages/ui/src/assets/icons/file-types/json.svg index 2590b943..9200a609 100644 --- a/packages/ui/src/assets/icons/file-types/json.svg +++ b/packages/ui/src/assets/icons/file-types/json.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/ui/src/assets/icons/file-types/sprite.svg b/packages/ui/src/assets/icons/file-types/sprite.svg index c46adade..fcfbfb0d 100644 --- a/packages/ui/src/assets/icons/file-types/sprite.svg +++ b/packages/ui/src/assets/icons/file-types/sprite.svg @@ -4533,10 +4533,10 @@ - - + + - + diff --git a/packages/ui/src/components/chat/ModelControls.tsx b/packages/ui/src/components/chat/ModelControls.tsx index d338e288..cb5d8fa3 100644 --- a/packages/ui/src/components/chat/ModelControls.tsx +++ b/packages/ui/src/components/chat/ModelControls.tsx @@ -2409,9 +2409,24 @@ export const ModelControls: React.FC = ({ {/* Keyboard hints footer */}
- {t('chat.modelControls.keyboardHint', { - thinking: highlightedSupportsThinking ? ` • ${t('chat.modelControls.keyboardHintThinking')}` : '', - })} + {(() => { + const thinkingMarker = '__MODEL_THINKING_HINT__'; + const thinkingHint = ` • ${t('chat.modelControls.keyboardHintThinking')}`; + const hintParts = t('chat.modelControls.keyboardHint', { thinking: thinkingMarker }).split(thinkingMarker); + + return ( + <> + {hintParts[0]} + + {thinkingHint} + + {hintParts[1]} + + ); + })()}
diff --git a/packages/ui/src/components/chat/StatusRow.tsx b/packages/ui/src/components/chat/StatusRow.tsx index 7a329b6e..80556e52 100644 --- a/packages/ui/src/components/chat/StatusRow.tsx +++ b/packages/ui/src/components/chat/StatusRow.tsx @@ -233,6 +233,10 @@ export const StatusRow: React.FC = ({ }, [isExpanded]); const toggleExpanded = () => setIsExpanded((prev) => !prev); + const todoSummaryLabel = t('chat.statusRow.summary.activeLeft', { + active: statusSummary.active, + left: statusSummary.left, + }); // Abort button for mobile/vscode const abortButton = showAbort && onAbort ? ( @@ -252,6 +256,8 @@ export const StatusRow: React.FC = ({ type="button" onClick={toggleExpanded} className="flex items-center gap-1 flex-shrink-0 text-muted-foreground" + aria-label={todoSummaryLabel} + title={todoSummaryLabel} > {/* Desktop: show task text; Mobile/VSCode: just "Tasks" */} {!isCompact && activeTodo ? ( @@ -261,8 +267,16 @@ export const StatusRow: React.FC = ({ ) : ( {t('chat.statusRow.tasksTitle')} )} - - {t('chat.statusRow.summary.activeLeft', { active: statusSummary.active, left: statusSummary.left })} + {isExpanded ? ( diff --git a/packages/vscode/package.json b/packages/vscode/package.json index 8f5925dd..fa2e98ad 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -243,7 +243,7 @@ }, "dependencies": { "@openchamber/ui": "workspace:*", - "@opencode-ai/sdk": "^1.4.19", + "@opencode-ai/sdk": "^1.4.25", "adm-zip": "^0.5.16", "jsonc-parser": "^3.3.1", "react": "^19.1.1", diff --git a/packages/web/package.json b/packages/web/package.json index 82a124a5..bd302084 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -25,7 +25,7 @@ "dependencies": { "@clack/prompts": "^1.1.0", "@octokit/rest": "^22.0.1", - "@opencode-ai/sdk": "^1.4.19", + "@opencode-ai/sdk": "^1.4.25", "@simplewebauthn/server": "13.3.0", "adm-zip": "^0.5.16", "better-sqlite3": "^11.7.0",