From d2ccf84219a9e3d6449b085c6e3d66d7c05968a2 Mon Sep 17 00:00:00 2001 From: huangqiaoqi Date: Tue, 20 Jan 2026 14:42:24 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=EF=BC=9A=20=E4=BF=AE=E5=A4=8D=E4=B8=AD=E6=96=87=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E6=B3=95=E6=8B=BC=E9=9F=B3=E7=BB=84=E5=90=88=E9=98=B6?= =?UTF-8?q?=E6=AE=B5=E6=8C=89=20Enter=20=E8=AF=AF=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E5=8F=91=E9=80=81/=E8=87=AA=E5=8A=A8=E8=A1=A5=E5=85=A8?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9A=E5=9C=A8=20IME=20=E7=BB=84?= =?UTF-8?q?=E5=90=88=E8=BE=93=E5=85=A5=E6=9C=9F=E9=97=B4=E8=B7=B3=E8=BF=87?= =?UTF-8?q?=20Enter/=E8=87=AA=E5=8A=A8=E8=A1=A5=E5=85=A8=E5=A4=84=E7=90=86?= =?UTF-8?q?=E3=80=82=20=E7=9B=B8=E5=85=B3=E6=96=87=E4=BB=B6=EF=BC=9Asrc/ut?= =?UTF-8?q?ils/keys.ts=E3=80=81src/features/composer/components/Composer.t?= =?UTF-8?q?sx=E3=80=81src/features/composer/hooks/useComposerAutocompleteS?= =?UTF-8?q?tate.ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 17 +++++++---------- src/features/composer/components/Composer.tsx | 4 ++++ .../hooks/useComposerAutocompleteState.ts | 4 ++++ src/utils/keys.ts | 18 ++++++++++++++++++ 4 files changed, 33 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index b8d2c5026..ba2bb6a1d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -478,6 +478,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -521,6 +522,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -2001,8 +2003,7 @@ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -2138,6 +2139,7 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -2603,7 +2605,6 @@ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "dequal": "^2.0.3" } @@ -3397,8 +3398,7 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/dunder-proto": { "version": "1.0.1", @@ -5255,6 +5255,7 @@ "integrity": "sha512-SNSQteBL1IlV2zqhwwolaG9CwhIhTvVHWg3kTss/cLE7H/X4644mtPQqYvCfsSrGQWt9hSZcgOXX8bOZaMN+kA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@asamuzakjp/dom-selector": "^6.7.2", "cssstyle": "^5.3.1", @@ -5460,7 +5461,6 @@ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -6821,7 +6821,6 @@ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -6837,7 +6836,6 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10" }, @@ -6850,8 +6848,7 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/prismjs": { "version": "1.30.0", diff --git a/src/features/composer/components/Composer.tsx b/src/features/composer/components/Composer.tsx index 574a7baf0..0910ce6be 100644 --- a/src/features/composer/components/Composer.tsx +++ b/src/features/composer/components/Composer.tsx @@ -6,6 +6,7 @@ import type { ThreadTokenUsage, } from "../../../types"; import { computeDictationInsertion } from "../../../utils/dictation"; +import { isComposingEvent } from "../../../utils/keys"; import { useComposerAutocompleteState } from "../hooks/useComposerAutocompleteState"; import { ComposerInput } from "./ComposerInput"; import { ComposerMetaBar } from "./ComposerMetaBar"; @@ -262,6 +263,9 @@ export function Composer({ onTextChange={handleTextChange} onSelectionChange={handleSelectionChange} onKeyDown={(event) => { + if (isComposingEvent(event)) { + return; + } if (event.key === "Enter" && event.shiftKey) { event.preventDefault(); const textarea = textareaRef.current; diff --git a/src/features/composer/hooks/useComposerAutocompleteState.ts b/src/features/composer/hooks/useComposerAutocompleteState.ts index 452b07012..f0e30a1cb 100644 --- a/src/features/composer/hooks/useComposerAutocompleteState.ts +++ b/src/features/composer/hooks/useComposerAutocompleteState.ts @@ -8,6 +8,7 @@ import { findPromptArgRangeAtCursor, getPromptArgumentHint, } from "../../../utils/customPrompts"; +import { isComposingEvent } from "../../../utils/keys"; type Skill = { name: string; description?: string }; type UseComposerAutocompleteStateArgs = { @@ -270,6 +271,9 @@ export function useComposerAutocompleteState({ if (disabled) { return; } + if (isComposingEvent(event)) { + return; + } if (isAutocompleteOpen) { if (event.key === "ArrowDown") { event.preventDefault(); diff --git a/src/utils/keys.ts b/src/utils/keys.ts index 3aa7657f9..28e700818 100644 --- a/src/utils/keys.ts +++ b/src/utils/keys.ts @@ -12,3 +12,21 @@ export function matchesHoldKey(event: KeyboardEvent, holdKey: string) { return false; } } + +type ComposingEvent = { + isComposing?: boolean; + keyCode?: number; + nativeEvent?: { + isComposing?: boolean; + keyCode?: number; + }; +}; + +export function isComposingEvent(event: ComposingEvent) { + return Boolean( + event.isComposing || + event.keyCode === 229 || + event.nativeEvent?.isComposing || + event.nativeEvent?.keyCode === 229, + ); +} From 06bdb48ef4fd1e3bf6d8adc40517b72f9a743c49 Mon Sep 17 00:00:00 2001 From: huangqiaoqi Date: Tue, 20 Jan 2026 23:27:29 +0800 Subject: [PATCH 2/2] =?UTF-8?q?Fix=20IME=20composing=20Enter=20so=20Enter?= =?UTF-8?q?=20doesn=E2=80=99t=20send=20or=20trigger=20autocomplete=20while?= =?UTF-8?q?=20typing=20pinyin.=20Add=20isComposingEvent=20helper=20and=20g?= =?UTF-8?q?uard=20Enter=20handling=20in=20composer=20+=20autocomplete.=20(?= =?UTF-8?q?src/utils/keys.ts,=20src/features/composer/components/Composer.?= =?UTF-8?q?tsx,=20src/features/composer/hooks/useComposerAutocompleteState?= =?UTF-8?q?.ts)=20Make=20the=20Home=20usage=20chart=20tooltip=20follow=20t?= =?UTF-8?q?he=20current=20theme=20by=20using=20var(--surface-popover)=20in?= =?UTF-8?q?stead=20of=20a=20fixed=20dark=20background.=20(src/styles/home.?= =?UTF-8?q?css)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/styles/home.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/styles/home.css b/src/styles/home.css index ba687d5a9..35c881537 100644 --- a/src/styles/home.css +++ b/src/styles/home.css @@ -216,7 +216,7 @@ bottom: 100%; left: 50%; transform: translate(-50%, -8px); - background: rgba(15, 18, 24, 0.95); + background: var(--surface-popover); color: var(--text-stronger); border: 1px solid var(--border-subtle); border-radius: 8px;