From 1c1d5bae535502e3f414d72a6fa8e17d212037f1 Mon Sep 17 00:00:00 2001 From: clagentic <10177887+akuehner@users.noreply.github.com> Date: Thu, 11 Jun 2026 08:18:20 -0400 Subject: [PATCH] fix(lr-8657): repoint stale getPendingNavigate/peekPendingNavigate imports to pending-navigate.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #217 (lr-a3ca) extracted pendingNavigate state into lib/public/modules/pending-navigate.js, but two consumers kept importing getPendingNavigate/peekPendingNavigate from filebrowser.js — which now imports those names for internal use and does NOT re-export them. In the browser this is a fatal ESM resolution error: "The requested module './filebrowser.js' does not provide an export named 'getPendingNavigate'" App boot halts before connect() runs, so no WebSocket is ever opened and the "Reconnecting to server…" overlay never clears. Every authenticated user was hit on every load; the login page (standalone inline script) was unaffected, which masked it as a connection problem. Fix: import the two functions from pending-navigate.js in both consumers. - app.js: getPendingNavigate from ./modules/pending-navigate.js - app-messages.js: getPendingNavigate + peekPendingNavigate from ./pending-navigate.js Verified via headless browser against the live daemon: WS opens, overlay hides, app renders. lr-a3ca tests passed because they import the real module directly and never exercise the cross-module browser import graph. Co-Authored-By: Claude Opus 4.8 (1M context) --- lib/public/app.js | 3 ++- lib/public/modules/app-messages.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/public/app.js b/lib/public/app.js index 925fdc79..21062583 100644 --- a/lib/public/app.js +++ b/lib/public/app.js @@ -20,7 +20,8 @@ import { initRewind, setRewindMode, showRewindModal, clearPendingRewindUuid, add import { initNotifications, showDoneNotification, playDoneSound, isNotifAlertEnabled, isNotifSoundEnabled } from './modules/notifications.js'; import { initInput, clearPendingImages, handleInputSync, autoResize, builtinCommands, sendMessage, hasSendableContent, setScheduleBtnDisabled, setScheduleDelayMs, clearScheduleDelay } from './modules/input.js'; import { initQrCode, triggerShare } from './modules/qrcode.js'; -import { initFileBrowser, loadRootDirectory, refreshTree, handleFsList, handleFsRead, handleDirChanged, refreshIfOpen, handleFileChanged, handleFileHistory, handleGitDiff, handleFileAt, getPendingNavigate, closeFileViewer, resetFileBrowser } from './modules/filebrowser.js'; +import { initFileBrowser, loadRootDirectory, refreshTree, handleFsList, handleFsRead, handleDirChanged, refreshIfOpen, handleFileChanged, handleFileHistory, handleGitDiff, handleFileAt, closeFileViewer, resetFileBrowser } from './modules/filebrowser.js'; +import { getPendingNavigate } from './modules/pending-navigate.js'; import { initTerminal, openTerminal, closeTerminal, resetTerminals, handleTermList, handleTermCreated, handleTermOutput, handleTermResized, handleTermExited, handleTermClosed, sendTerminalCommand } from './modules/terminal.js'; import { initContextSources, updateTerminalList, updateBrowserTabList, handleContextSourcesState, getActiveSources, hasActiveSources } from './modules/context-sources.js'; import { initStickyNotes, handleNotesList, handleNoteCreated, handleNoteUpdated, handleNoteDeleted, openArchive, closeArchive, isArchiveOpen, hideNotes, showNotes, isNotesVisible, createNote } from './modules/sticky-notes.js'; diff --git a/lib/public/modules/app-messages.js b/lib/public/modules/app-messages.js index a49c9b9c..e857150d 100644 --- a/lib/public/modules/app-messages.js +++ b/lib/public/modules/app-messages.js @@ -19,7 +19,8 @@ import { handleFindInSessionResults } from './session-search.js'; import { handleInputSync, autoResize, resetAutoResize, builtinCommands, setScheduleBtnDisabled } from './input.js'; import { startThinking, appendThinking, stopThinking, resetThinkingGroup, createToolItem, updateToolExecuting, updateToolResult, markAllToolsDone, closeToolGroup, removeToolFromGroup, resetToolState, getTools, getPlanContent, setPlanContent, renderPlanBanner, renderPlanCard, getTodoTools, handleTodoWrite, handleTaskCreate, handleTaskUpdate, applyDeadSessionTodoCompaction, isPlanFilePath, enableMainInput, addTurnMeta, updateSubagentActivity, addSubagentToolEntry, markSubagentDone, initSubagentStop, updateSubagentProgress, updateSubagentTaskStatus, renderAskUserQuestion, markAskUserAnswered, renderPermissionRequest, markPermissionCancelled, markPermissionResolved, renderElicitationRequest, markElicitationResolved } from './tools.js'; import { showDoneNotification, playDoneSound, isNotifAlertEnabled, isNotifSoundEnabled } from './notifications.js'; -import { handleFsList, handleFsRead, handleFileChanged, handleDirChanged, handleFileHistory, handleGitDiff, handleFileAt, refreshIfOpen, getPendingNavigate, peekPendingNavigate, handleFsSearch } from './filebrowser.js'; +import { handleFsList, handleFsRead, handleFileChanged, handleDirChanged, handleFileHistory, handleGitDiff, handleFileAt, refreshIfOpen, handleFsSearch } from './filebrowser.js'; +import { getPendingNavigate, peekPendingNavigate } from './pending-navigate.js'; import { isProjectSettingsOpen, refreshProjectSettingsModels, handleInstructionsRead, handleInstructionsWrite, handleProjectEnv, handleProjectEnvSaved, handleProjectSharedEnv, handleProjectSharedEnvSaved, handleProjectOwnerChanged } from './project-settings.js'; import { updateSettingsModels, updateSettingsStats, updateDaemonConfig, handleSetPinResult, handleKeepAwakeChanged, handleAutoContinueChanged, handleRestartResult, handleShutdownResult, handleSharedEnv, handleSharedEnvSaved, handleGlobalClaudeMdRead, handleGlobalClaudeMdWrite } from './server-settings.js'; import { handleTermList, handleTermCreated, sendTerminalCommand, handleTermOutput, handleTermResized, handleTermExited, handleTermClosed } from './terminal.js';