Skip to content

Commit 0f5848e

Browse files
committed
fix(presenter): clear lock when policy-state resolution rejects
1 parent 86c41a8 commit 0f5848e

1 file changed

Lines changed: 14 additions & 2 deletions

File tree

‎src/core/assistant-message/presentAssistantMessage.ts‎

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,20 @@ export async function presentAssistantMessage(cline: Task) {
162162
// or model-excluded since then must not execute here. Partial blocks are
163163
// validated on completion, matching the tool_use case.
164164
if (!mcpBlock.partial) {
165-
const state = await cline.providerRef.deref()?.getState()
166-
const taskMode = await cline.getTaskMode()
165+
let state:
166+
| Awaited<ReturnType<NonNullable<ReturnType<typeof cline.providerRef.deref>>["getState"]>>
167+
| undefined
168+
let taskMode: Awaited<ReturnType<typeof cline.getTaskMode>>
169+
try {
170+
state = await cline.providerRef.deref()?.getState()
171+
taskMode = await cline.getTaskMode()
172+
} catch (error) {
173+
// getState() can reject (e.g. CustomModesManager.getCustomModes does an
174+
// uncaught globalState.update). Clear the lock so future presenter calls
175+
// are not permanently blocked.
176+
cline.presentAssistantMessageLocked = false
177+
throw error
178+
}
167179
const modelInfo = cline.api.getModel()
168180

169181
try {

0 commit comments

Comments
 (0)