Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6768dd42d5
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| <Route path="/skills" element={<Skills />} /> | ||
| <Route path="/cron" element={<Cron />} /> | ||
| <Route path="/dreams" element={<Dreams />} /> | ||
| <Route path="/dreams" element={devModeUnlocked ? <Dreams /> : <Navigate to="/" replace />} /> |
There was a problem hiding this comment.
Delay guarded Dreams redirect until settings hydrate
This unconditional guard can mis-route users who open #/dreams with Developer Mode already enabled in persisted main-process settings: devModeUnlocked starts as false in the renderer store and is only corrected later by async init(), so the first render executes <Navigate ... replace> and permanently rewrites the URL to / before hydration completes. In that startup path, authorized users lose deep-link access to Dreams even though their saved setting allows it.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: dca22c1392
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| logger.info('Gateway ready fallback triggered; probing health before marking ready'); | ||
| try { | ||
| await this.rpc('health', {}, 5_000); |
There was a problem hiding this comment.
Use the correct RPC method in gateway-ready fallback probe
The new fallback probe calls this.rpc('health', {}, 5_000), but the Gateway client in this repo uses system.health as the health RPC (electron/gateway/client.ts), so this probe can consistently fail on runtimes that only implement the namespaced method. In the exact scenario this fallback is meant to cover (no gateway:ready event), repeated probe failures keep gatewayReady false indefinitely, which leaves Dreams and other gateway-gated UI/actions disabled even though the process is running.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4488dbff05
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (refreshInFlightRef.current && !options?.force) { | ||
| return refreshInFlightRef.current; |
There was a problem hiding this comment.
Prevent action refresh from reusing stale in-flight load
refreshAll() now returns the existing in-flight promise by default, so if a user runs a maintenance action while the initial Dreams load is still pending, the post-action await refreshAll() path reuses the pre-action request instead of fetching fresh state. In that startup/refresh overlap, the success toast is shown but diary/metrics can remain stale until a manual refresh. Please ensure post-mutation refreshes force a new fetch (or block actions while loading) so action results are reflected immediately.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 08adb07d00
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const isConfiguredExternal = Boolean(pEntries[pluginId]); | ||
| const isInstalledExternal = installedExtensionIds.has(pluginId); | ||
| if (!isConfiguredExternal && !isInstalledExternal) { | ||
| console.log(`[sanitize] Removed missing external plugin from plugins.allow: ${pluginId}`); |
There was a problem hiding this comment.
Preserve allowlisted plugins loaded from custom paths
The new plugins.allow pruning treats an external plugin as valid only when it has a plugins.entries[pluginId] block or a directory under ~/.openclaw/extensions, so plugins loaded via plugins.load.paths can now be removed as “missing” even when their path is valid. In setups that rely on path-loaded extensions with a restrictive allowlist, this sanitization will silently drop the allow entry and the plugin will be blocked on next Gateway start.
Useful? React with 👍 / 👎.
| onClick={() => void refreshAll({ force: true })} | ||
| disabled={!gatewayRunning} | ||
| className={QUIET_BUTTON_CLASS} |
There was a problem hiding this comment.
Prevent overlapping forced Dreams refresh requests
This refresh button always triggers refreshAll({ force: true }) while remaining enabled during loading, which allows users to start multiple concurrent refresh RPCs. Because those requests resolve asynchronously and update the same state, an older request can finish after a newer one and overwrite the UI with stale diary/metrics data.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c8c6368495
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| setDreaming((current) => ({ ...(current ?? {}), enabled })); | ||
| setLastActionMessage(message); | ||
| toast.success(message); |
There was a problem hiding this comment.
Force a post-toggle Dreams refresh to avoid stale page state
After config.patch succeeds, the UI only flips dreaming.enabled locally and never re-reads doctor.memory.status / doctor.memory.dreamDiary. In the common case where enabling/disabling Dreams changes phase schedules, counts, or diary state asynchronously, users see a success toast but stale metrics and phase cards until they manually refresh. Triggering refreshAll({ force: true }) after a successful toggle would keep the native page consistent with Gateway state.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4596d2a4b2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const candidates = [ | ||
| join(pluginPath, 'openclaw.plugin.json'), | ||
| join(dirname(pluginPath), 'openclaw.plugin.json'), | ||
| ]; |
There was a problem hiding this comment.
Resolve loaded plugin manifests against config directory
The new allowlist-pruning path can silently drop valid external plugins when plugins.load/plugins.load.paths uses relative paths. readPluginManifestIdFromPath joins candidates directly from pluginPath, so relative values are resolved against the Electron process CWD instead of the OpenClaw config location; lookup then fails, discoverLoadedPluginIdsFromConfig misses the plugin ID, and the later plugins.allow cleanup removes it as “missing.” This breaks setups that rely on relative plugin load paths even though those paths are intentionally preserved elsewhere in sanitization.
Useful? React with 👍 / 👎.
Summary
/dreamsnavigation when Developer Mode is disabledconfig.get+config.patch, including raw patch transport supportplugins.allowentries, and escaped workspace skill symlinksgateway.readygrace window so long synchronous Gateway initialization can complete instead of restart-loopingTest plan
pnpm run typecheckpnpm exec vitest run tests/unit/openclaw-auth.test.ts tests/unit/skills-symlink-cleanup.test.ts tests/unit/gateway-manager-heartbeat.test.ts tests/unit/gateway-ready-fallback.test.tspnpm run lint:checkpnpm run build:vitepnpm exec playwright test tests/e2e/openclaw-dreams.spec.tsgit diff --checksystem-presence,doctor.memory.status, anddoctor.memory.dreamDiaryreturn after Gateway startupNotes
lint:checkpasses with one pre-existing warning insrc/pages/Chat/ChatInput.tsxaboutselectedSkillin a hook dependency array.dist/index.html; rerunning after the build completed passed all 3 Dreams specs.