Skip to content

Commit 4dcbaf1

Browse files
fix: 修复 ACP 模式下 messageSelector require 失败导致 submitMessage 崩溃
ACP 模式不加载完整的 React/Ink UI 组件,导致 require('src/components/MessageSelector.js') 返回 undefined。添加 try-catch 和 optional chaining fallback。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 0b30473 commit 4dcbaf1

1 file changed

Lines changed: 12 additions & 5 deletions

File tree

src/QueryEngine.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,13 @@ import {
8686

8787
// Lazy: MessageSelector.tsx pulls React/ink; only needed for message filtering at query time
8888
/* eslint-disable @typescript-eslint/no-require-imports */
89-
const messageSelector =
90-
(): typeof import('src/components/MessageSelector.js') =>
91-
require('src/components/MessageSelector.js')
89+
const messageSelector = (): typeof import('src/components/MessageSelector.js') | null => {
90+
try {
91+
return require('src/components/MessageSelector.js')
92+
} catch {
93+
return null
94+
}
95+
}
9296

9397
import {
9498
localCommandOutputToSDKAssistantMessage,
@@ -466,12 +470,13 @@ export class QueryEngine {
466470
}
467471

468472
// Filter messages that should be acknowledged after transcript
473+
const _selector = messageSelector()
469474
const replayableMessages = messagesFromUserInput.filter(
470475
msg =>
471476
(msg.type === 'user' &&
472477
!msg.isMeta && // Skip synthetic caveat messages
473478
!msg.toolUseResult && // Skip tool results (they'll be acked from query)
474-
messageSelector().selectableUserMessagesFilter(msg)) || // Skip non-user-authored messages (task notifications, etc.)
479+
(_selector?.selectableUserMessagesFilter(msg) ?? true)) || // Skip non-user-authored messages (task notifications, etc.)
475480
(msg.type === 'system' && msg.subtype === 'compact_boundary'), // Always ack compact boundaries
476481
)
477482
const messagesToAck = replayUserMessages ? replayableMessages : []
@@ -643,8 +648,10 @@ export class QueryEngine {
643648
}
644649

645650
if (fileHistoryEnabled() && persistSession) {
651+
const _sel = messageSelector()
652+
const _filter = _sel?.selectableUserMessagesFilter ?? ((_msg: unknown) => true)
646653
messagesFromUserInput
647-
.filter(messageSelector().selectableUserMessagesFilter)
654+
.filter(_filter)
648655
.forEach(message => {
649656
void fileHistoryMakeSnapshot(
650657
(updater: (prev: FileHistoryState) => FileHistoryState) => {

0 commit comments

Comments
 (0)