Skip to content

Make remote sessions recover reliably under load#869

Merged
arul28 merged 53 commits into
mainfrom
codex/web-hydration-hotfix
Jul 22, 2026
Merged

Make remote sessions recover reliably under load#869
arul28 merged 53 commits into
mainfrom
codex/web-hydration-hotfix

Conversation

@arul28

@arul28 arul28 commented Jul 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • rotate capped PTY transcripts with monotonic logical offsets so long-lived terminals remain recoverable on mobile
  • guarantee sync fairness and request-scoped recovery so chat hydration cannot starve project changes or tear down the whole connection
  • harden relay leases, route recovery, web-client hydration, project switching, lane deletion, and desktop background work
  • preserve exact imported/resumed CLI launch settings and patch network-facing runtime dependencies

Validation

  • desktop typecheck, lint (0 errors), production build, and all 8 test shards: 8,495 passed / 2 intentional skips
  • ADE CLI typecheck, build, and full test suite: 2,141 passed
  • iOS full test suite: 817 passed
  • hosted web-client typecheck, tests, production build, and 284.2 KB entry graph
  • real node-pty rollover/restart benchmark beyond 16 MiB with disconnect, tail recovery, and continued monotonic live offsets
  • documentation validation: 199 files

Release

Prepared for desktop v1.2.34 and iOS 1.1.10 build 37.

Summary by CodeRabbit

  • New Features
    • Active-project boundary handling improves web sync handoff and switching correctness.
    • Added invalidation-only and compact invalidation for relay/web sync.
    • Codex/terminal resume + continue now carry fast mode and Codex policy/sandbox/config settings.
    • Worker-based usage ledger scanning with bounded input/output.
    • Project icon resolution now uses deadline/budget-aware worker flow with capped inline transport.
  • Bug Fixes
    • Relay endpoint retention during transient health issues; cleared on owner/authorization/sign-out changes.
    • More reliable chat pagination/deduplication, transcript hydration, and terminal snapshot ordering.
    • Safer cancellation/timeouts and improved single-flight for long-running actions and local-runtime calls.
    • Optional lane-list enrichment now respects time budgets without blocking core results.
    • Hosted web mode hides desktop Connections controls.

Greptile Summary

This PR improves remote-session recovery and responsiveness under load. The main changes are:

  • Monotonic PTY transcript rotation and crash recovery.
  • Bounded, fair chat hydration and project synchronization.
  • Safer relay leases, route retention, and project handoffs.
  • Worker-based usage and project-icon processing.
  • Exact CLI resume settings and updated network dependencies.

Confidence Score: 5/5

This looks safe to merge.

The restarted chat-stream fixes preserve distinct events when sequence numbers restart. The transcript recovery path keeps restored old bytes on their previous logical offset. No blocking issue was found in the updated fixes.

No files need additional attention.

T-Rex T-Rex Logs

What T-Rex did

  • Validated the pre-restart state with a logical window [8,385,874, 17,825,811), a retained file of 9,439,937 bytes, and a 4,096-byte snapshot ending with <ROLL_OVER_TAIL_01>.
  • Verified post-restart recovery, showing the end position 17,825,811 was recovered via both snapshot and range reads and the tail marker was preserved.
  • Observed continued live output at offset 17,825,831 with the PTY input echo <CONTINUED_LIVE_02>, and confirmed the retained window advanced monotonically while staying below 16 MiB.
  • Compared with the historical pre-change implementation, noted the absence of rollover/recovery APIs and recorded that a matching executable baseline capture could not be preserved due to the command transport disconnect.

View all artifacts

T-Rex Ran code and verified through T-Rex

Important Files Changed

Filename Overview
apps/desktop/src/renderer/webclient/adapter/agentChat.ts Adds bounded chat hydration, subscription limits, project-boundary cleanup, and content-sensitive event deduplication.
apps/desktop/src/renderer/webclient/adapter/personalChats.ts Uses content-sensitive event keys so restarted streams can reuse sequence numbers without losing distinct events.
apps/desktop/src/renderer/webclient/adapter/infra/chatEventDedup.ts Centralizes chat event identity across snapshot and live delivery paths.
apps/desktop/src/main/services/pty/ptyService.ts Adds logical transcript offsets, journal-based rollover recovery, process-tree cleanup, and complete resume launch overrides.

Reviews (8): Last reviewed commit: "fix: normalize persisted Codex permissio..." | Re-trigger Greptile

arul28 added 30 commits July 22, 2026 01:04
@vercel

vercel Bot commented Jul 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
ade Ignored Ignored Preview Jul 22, 2026 8:40pm

@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@arul28, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 17 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 1c077ad0-3785-4533-8297-60241fd3a34d

📥 Commits

Reviewing files that changed from the base of the PR and between 5400562 and 1df0a95.

📒 Files selected for processing (4)
  • apps/desktop/src/main/services/externalSessions/discoverCodex.ts
  • apps/desktop/src/main/services/externalSessions/discoverProviders.test.ts
  • apps/desktop/src/main/services/pty/ptyService.test.ts
  • apps/desktop/src/main/services/pty/ptyService.ts
📝 Walkthrough

Walkthrough

This PR updates relay endpoint retention, desktop runtime services, sync protocols, project icon and usage workers, GitHub and Codex resume handling, webclient project boundaries, packaging validation, and iOS synchronization and timeline behavior.

Changes

Relay Retention

Layer / File(s) Summary
Directory and publisher retention
apps/account-directory/..., apps/ade-cli/src/services/account/...
Registration validates relay-retention hints, directory upserts preserve eligible relay endpoints, and publisher state clears across ownership, sign-out, authorization, and disposal transitions.

Desktop Runtime and Project Services

Layer / File(s) Summary
Project scopes, icons, and timeout policies
apps/ade-cli/src/services/projects/..., apps/ade-cli/src/multiProjectRpcServer.ts, apps/desktop/src/main/services/projects/..., apps/desktop/src/main/services/localRuntime/...
Sync-host switching gains timeout and rollback handling; icon resolution gains worker execution, budgets, caching, and size caps; local-runtime registration and IPC timeout policies are centralized.
GitHub, Git, and Codex resume plumbing
apps/desktop/src/main/services/github/..., apps/desktop/src/main/services/git/..., apps/desktop/src/main/services/externalSessions/..., apps/desktop/src/main/services/pty/..., terminal components
GitHub and Git operations use asynchronous resolution and caching, while Codex launch metadata is discovered, normalized, propagated, and persisted through resume flows.
Usage ledger scanning and aggregation
apps/desktop/src/main/services/usage/..., apps/desktop/tsup.config.ts, apps/ade-cli/tsup.config.ts
Usage scans can run in bounded workers, refreshes support cancellation and backoff, and daily SQL queries aggregate records by local date.

Sync and Webclient

Layer / File(s) Summary
Sync protocol and scheduling
apps/ade-cli/src/services/sync/..., apps/desktop/src/shared/types/sync.ts, apps/desktop/src/renderer/webclient/sync/...
Adds invalidation-only capabilities, bounded invalidation batches, per-peer polling, priority deferral, cursor helpers, serialized inbound handling, and bounded transcript scanning.
Webclient project and chat lifecycle
apps/desktop/src/renderer/webclient/adapter/..., apps/desktop/src/renderer/webclient/shell/..., apps/desktop/src/renderer/components/account/..., apps/desktop/src/renderer/components/app/...
Hosted mode hides desktop connection controls; active-project boundaries replace adapter bindings and reset streams; chat subscriptions use deduplication, LRU eviction, and visible-session pinning.

iOS

Layer / File(s) Summary
Sync and timeline behavior
apps/ios/ADE/..., apps/ios/ADETests/...
Terminal snapshots install subscriptions during response acceptance, connection text is simplified, structured error categories are recognized, and mobile timeline tool cards use shared rendering behavior.

Estimated code review effort: 5 (Critical) | ~150 minutes

Possibly related PRs

  • arul28/ADE#34: Both modify sync host protocol capabilities, peer handling, and connection hardening.
  • arul28/ADE#253: Both propagate Codex fast-mode and launch configuration through session and PTY resume flows.
  • arul28/ADE#556: Both modify packaging validation for bundled ADE CLI runtime artifacts.

Suggested labels: desktop, ios, docs, ci

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 3.98% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title matches the PR’s core focus on improving remote session recovery and resilience under load.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/web-hydration-hotfix

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
apps/desktop/src/main/services/github/githubService.ts (2)

121-164: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

readGhHostsFileToken's process-wide cache is never invalidated on forceRefresh.

cacheGhHostsToken/processGhHostsTokenCache correctly bounds and TTLs the hosts.yml lookup, but nothing in computeStatus's forceRefresh branch (lines 1040-1047), setToken, or clearToken clears this module-level cache. Since readGitHubCliAuthToken checks readGhHostsFileToken() before ever exec'ing gh auth token and returns immediately if a (possibly stale) cached token is found, a user who rotates their token via gh auth login/gh auth refresh outside ADE won't see it reflected by "Force Refresh" in Settings until the hosts-cache TTL naturally expires — the explicit forceRefresh contract is silently defeated for this fallback path.

🐛 Proposed fix: clear the hosts cache on forceRefresh
 function cacheGhHostsToken(hostsPath: string, token: string | null): void {
   ...
 }
+
+function clearGhHostsTokenCache(): void {
+  processGhHostsTokenCache.clear();
+}
     const computeStatus = async (opts: { forceRefresh?: boolean } = {}): Promise<GitHubStatus> => {
     if (opts.forceRefresh) {
       cachedStatus = null;
       cachedAt = 0;
       cachedStatusTokenDigest = null;
       sharedGhAuth.authCache = null;
       sharedGhAuth.statusCache.clear();
+      clearGhHostsTokenCache();
     }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/desktop/src/main/services/github/githubService.ts` around lines 121 -
164, Invalidate processGhHostsTokenCache at the start of computeStatus’s
forceRefresh branch so readGhHostsFileToken cannot return a stale hosts.yml
token during an explicit refresh. Reuse the existing cache symbol and preserve
normal TTL-based caching for non-refresh calls; do not change setToken or
clearToken behavior unless needed to support this forceRefresh invalidation.

654-685: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

readAuthTokenSync bypasses ADE_DISABLE_GH_AUTH_FALLBACK, unlike the async readAuthToken/readGhAuthToken/readGitHubCliAuthToken paths.

Both readGhAuthToken (line 607-610) and readGitHubCliAuthToken (line 154-156) explicitly short-circuit to "no token" when ADE_DISABLE_GH_AUTH_FALLBACK === "1". readAuthTokenSync, however, unconditionally calls readGhHostsFileToken() whenever there's no valid sharedGhAuth.authCache entry, with no check of that env var. This means the synchronous getTokenOrThrow() can silently resolve a token sourced from hosts.yml even when the flag is set specifically to disable that fallback for getTokenOrThrowAsync()/readAuthToken() — a real behavioral inconsistency between the sync and async token getters that share the same conceptual contract.

🐛 Proposed fix: honor the disable flag in the sync path too
   const readAuthTokenSync = (): GitHubTokenLookup => {
     const primary = readPrimaryAuthToken();
     if (primary) return primary;
+    if (process.env.ADE_DISABLE_GH_AUTH_FALLBACK === "1") {
+      return { token: null, ghCliPath: null, ghAuthError: null, source: "none", patTokenStored: false };
+    }
     const cachedGh = sharedGhAuth.authCache && sharedGhAuth.authCache.expiresAt > Date.now()
       ? sharedGhAuth.authCache
       : null;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/desktop/src/main/services/github/githubService.ts` around lines 654 -
685, Update readAuthTokenSync so it honors ADE_DISABLE_GH_AUTH_FALLBACK before
calling readGhHostsFileToken, matching the existing behavior in readAuthToken
and readGhAuthToken. When the flag is set to "1", skip hosts.yml fallback and
preserve the no-token result unless a valid cached authentication entry is
available.
🧹 Nitpick comments (5)
apps/desktop/src/renderer/components/terminals/TerminalsPage.tsx (1)

575-590: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract the continuation launch→PTY payload builder. Both continuation entry points hand-build the same conditional sendArgs fields (model, reasoningEffort, fastMode with codexFastMode fallback, permissionMode, codexApprovalPolicy/Sandbox/ConfigSource). Keeping two copies risks the codex-config/fast-mode forwarding silently diverging between the Work-tab and Lane paths. Extract a shared helper (e.g. buildContinuationLaunchArgs(launch)) returning the partial payload and spread it at both sites.

  • apps/desktop/src/renderer/components/terminals/TerminalsPage.tsx#L575-L590: replace the inline ...(launch?...) spreads with ...buildContinuationLaunchArgs(launch).
  • apps/desktop/src/renderer/components/lanes/useLaneWorkSessions.ts#L789-L804: replace the identical inline spreads with the same helper.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/desktop/src/renderer/components/terminals/TerminalsPage.tsx` around
lines 575 - 590, The continuation launch payload fields are duplicated across
both PTY entry points. Add a shared buildContinuationLaunchArgs(launch) helper
preserving the existing model, reasoningEffort, fastMode with codexFastMode
fallback, permission, sandbox, and config-source mappings, then spread its
result at apps/desktop/src/renderer/components/terminals/TerminalsPage.tsx lines
575-590 and apps/desktop/src/renderer/components/lanes/useLaneWorkSessions.ts
lines 789-804, replacing the duplicated inline spreads at both sites.
apps/desktop/src/main/services/lanes/laneListSnapshotService.ts (1)

74-93: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract the shared lane cache-key serialization. Both key builders serialize the identical lane field set (id, parentLaneId, branchRef, baseRef, worktreePath, archivedAt) sorted by id. Keeping two copies risks the caches keying on different fields over time, silently diverging cache-hit behavior. Consider a shared helper (e.g. serializeLaneCacheFields(lanes)) reused by both.

  • apps/desktop/src/main/services/lanes/laneListSnapshotService.ts#L74-L93: call the shared helper for the lanes portion, keeping the option-flag fields local to optionalLaneEnrichmentKey.
  • apps/desktop/src/main/services/lanes/rebaseSuggestionService.ts#L31-L43: call the shared helper, retaining the "default" branch for the no-lanes case.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/desktop/src/main/services/lanes/laneListSnapshotService.ts` around lines
74 - 93, Extract the shared lane-field serialization into a helper such as
serializeLaneCacheFields and reuse it in both key builders; in
apps/desktop/src/main/services/lanes/laneListSnapshotService.ts lines 74-93, use
it for the lanes portion while keeping option flags local to
optionalLaneEnrichmentKey, and in
apps/desktop/src/main/services/lanes/rebaseSuggestionService.ts lines 31-43, use
it while preserving the "default" no-lanes branch.
apps/ios/ADETests/ADETests.swift (1)

15948-15986: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Test name contradicts its own assertion.

testWorkFilteredSessionsHidesStaleStandaloneCliRowsButKeepsChatOwnedShells now asserts filtered.map(\.id) == ["chat-parent", "shell-child", "legacy-cli"] — i.e. the stale standalone CLI row (legacy-cli) is kept, not hidden. The function name still promises it's hidden, which will mislead anyone debugging a future regression in this filter.

✏️ Suggested rename
-  func testWorkFilteredSessionsHidesStaleStandaloneCliRowsButKeepsChatOwnedShells() {
+  func testWorkFilteredSessionsShowsStaleStandaloneCliRowsAndKeepsChatOwnedShells() {
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/ios/ADETests/ADETests.swift` around lines 15948 - 15986, Rename
testWorkFilteredSessionsHidesStaleStandaloneCliRowsButKeepsChatOwnedShells to
accurately reflect that the filtered results retain the stale standalone CLI row
alongside the chat-owned shell. Keep the test setup and assertion unchanged.
apps/desktop/src/main/services/github/githubService.ts (1)

785-857: 🚀 Performance & Scalability | 🔵 Trivial

LGTM! The forceRefresh de-dup path (await the in-flight probe, re-check for a newer one, then delete-and-recompute) correctly handles the common races; the transient-failure cooldown and bounded statusCache eviction are also sound, and match the added test coverage (retries transient status failures after a short shared cooldown, does not extend the shared cooldown for an invalid gh token).

One minor edge case worth noting for awareness: if two forceRefresh calls race with no existing in-flight entry for the key, both will proceed to compute independently (the second statusInFlight.set overwrites the first), so a duplicate network probe can occur. This is a minor inefficiency, not a correctness bug, so no action needed unless duplicate GitHub API calls under refresh races become a real cost concern.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/desktop/src/main/services/github/githubService.ts` around lines 785 -
857, Consider the forceRefresh branch in readSharedGithubStatusProbe: concurrent
refreshes with no existing in-flight entry can start duplicate probes because
each overwrites statusInFlight. If deduplication is required, coordinate refresh
callers through a shared in-flight promise before starting
computeGithubStatusProbe, while preserving the existing newer-refresh and cache
invalidation behavior.
apps/desktop/src/main/services/chat/agentChatService.test.ts (1)

21922-21927: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Duplicate event member in the inline type-predicate literal.

The type-predicate return annotation repeats the same event: Extract<...> member twice:

(entry): entry is AgentChatEventEnvelope & {
  event: Extract<AgentChatEventEnvelope["event"], { type: "approval_request" }>;
  event: Extract<AgentChatEventEnvelope["event"], { type: "approval_request" }>;
} => entry.event.type === "approval_request",

Looks like an accidental copy/paste duplicate line rather than intentional. Even if this doesn't produce a hard compiler error (duplicate-key checks are strictest for object literals/interfaces, less so for anonymous type literals), it's dead, confusing code that should be removed.

🧹 Proposed fix
       const liveRingEvent = await waitForEvent(
         emitted,
         (entry): entry is AgentChatEventEnvelope & {
-          event: Extract<AgentChatEventEnvelope["event"], { type: "approval_request" }>;
           event: Extract<AgentChatEventEnvelope["event"], { type: "approval_request" }>;
         } => entry.event.type === "approval_request",
       );
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/desktop/src/main/services/chat/agentChatService.test.ts` around lines
21922 - 21927, Remove the duplicated event member from the inline type predicate
used by waitForEvent in the liveRingEvent declaration, leaving a single event:
Extract<...> property while preserving the approval_request type guard.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/desktop/src/main/services/localRuntime/localRuntimeTimeoutPolicy.ts`:
- Line 2: Increase LOCAL_RUNTIME_IPC_PROJECT_SETUP_TIMEOUT_MS to cover two
120-second ensureProject attempts plus reasonable headroom, preventing the setup
budget from expiring during a valid retry. Update the related timeout tests to
assert the new budget and preserve existing timeout behavior elsewhere.

In `@apps/desktop/src/main/services/usage/usageTrackingService.ts`:
- Around line 2942-2951: The provider refresh gate in the usage tracking flow
must also trigger when project-scoped costs are not ready. Update
providerNeedsRefresh to account for projectCostsReady when scope is "project",
while preserving the existing missing-history behavior and avoiding refreshes
for ready project costs.

---

Outside diff comments:
In `@apps/desktop/src/main/services/github/githubService.ts`:
- Around line 121-164: Invalidate processGhHostsTokenCache at the start of
computeStatus’s forceRefresh branch so readGhHostsFileToken cannot return a
stale hosts.yml token during an explicit refresh. Reuse the existing cache
symbol and preserve normal TTL-based caching for non-refresh calls; do not
change setToken or clearToken behavior unless needed to support this
forceRefresh invalidation.
- Around line 654-685: Update readAuthTokenSync so it honors
ADE_DISABLE_GH_AUTH_FALLBACK before calling readGhHostsFileToken, matching the
existing behavior in readAuthToken and readGhAuthToken. When the flag is set to
"1", skip hosts.yml fallback and preserve the no-token result unless a valid
cached authentication entry is available.

---

Nitpick comments:
In `@apps/desktop/src/main/services/chat/agentChatService.test.ts`:
- Around line 21922-21927: Remove the duplicated event member from the inline
type predicate used by waitForEvent in the liveRingEvent declaration, leaving a
single event: Extract<...> property while preserving the approval_request type
guard.

In `@apps/desktop/src/main/services/github/githubService.ts`:
- Around line 785-857: Consider the forceRefresh branch in
readSharedGithubStatusProbe: concurrent refreshes with no existing in-flight
entry can start duplicate probes because each overwrites statusInFlight. If
deduplication is required, coordinate refresh callers through a shared in-flight
promise before starting computeGithubStatusProbe, while preserving the existing
newer-refresh and cache invalidation behavior.

In `@apps/desktop/src/main/services/lanes/laneListSnapshotService.ts`:
- Around line 74-93: Extract the shared lane-field serialization into a helper
such as serializeLaneCacheFields and reuse it in both key builders; in
apps/desktop/src/main/services/lanes/laneListSnapshotService.ts lines 74-93, use
it for the lanes portion while keeping option flags local to
optionalLaneEnrichmentKey, and in
apps/desktop/src/main/services/lanes/rebaseSuggestionService.ts lines 31-43, use
it while preserving the "default" no-lanes branch.

In `@apps/desktop/src/renderer/components/terminals/TerminalsPage.tsx`:
- Around line 575-590: The continuation launch payload fields are duplicated
across both PTY entry points. Add a shared buildContinuationLaunchArgs(launch)
helper preserving the existing model, reasoningEffort, fastMode with
codexFastMode fallback, permission, sandbox, and config-source mappings, then
spread its result at
apps/desktop/src/renderer/components/terminals/TerminalsPage.tsx lines 575-590
and apps/desktop/src/renderer/components/lanes/useLaneWorkSessions.ts lines
789-804, replacing the duplicated inline spreads at both sites.

In `@apps/ios/ADETests/ADETests.swift`:
- Around line 15948-15986: Rename
testWorkFilteredSessionsHidesStaleStandaloneCliRowsButKeepsChatOwnedShells to
accurately reflect that the filtered results retain the stale standalone CLI row
alongside the chat-owned shell. Keep the test setup and assertion unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 29ebe679-0b27-422c-957e-92768e0bc00f

📥 Commits

Reviewing files that changed from the base of the PR and between 8935fd2 and db39d66.

⛔ Files ignored due to path filters (13)
  • CHANGELOG.md is excluded by !*.md
  • apps/ade-cli/package-lock.json is excluded by !**/package-lock.json, !**/package-lock.json
  • apps/desktop/package-lock.json is excluded by !**/package-lock.json, !**/package-lock.json
  • changelog/index.mdx is excluded by !changelog/**
  • changelog/v1.2.34.mdx is excluded by !changelog/**
  • docs.json is excluded by !docs.json
  • docs/ARCHITECTURE.md is excluded by !docs/**
  • docs/features/project-home/README.md is excluded by !docs/**
  • docs/features/remote-runtime/README.md is excluded by !docs/**
  • docs/features/sync-and-multi-device/README.md is excluded by !docs/**
  • docs/features/sync-and-multi-device/crdt-model.md is excluded by !docs/**
  • docs/features/sync-and-multi-device/ios-companion.md is excluded by !docs/**
  • docs/features/web-client/README.md is excluded by !docs/**
📒 Files selected for processing (98)
  • apps/account-directory/src/directory.ts
  • apps/account-directory/test/directory.test.ts
  • apps/ade-cli/src/cli.test.ts
  • apps/ade-cli/src/cli.ts
  • apps/ade-cli/src/headlessLinearServices.ts
  • apps/ade-cli/src/jsonrpc.test.ts
  • apps/ade-cli/src/multiProjectRpcServer.test.ts
  • apps/ade-cli/src/multiProjectRpcServer.ts
  • apps/ade-cli/src/services/account/accountMachinePublisherService.test.ts
  • apps/ade-cli/src/services/account/accountMachinePublisherService.ts
  • apps/ade-cli/src/services/projects/projectCatalog.ts
  • apps/ade-cli/src/services/projects/projectIconResolver.test.ts
  • apps/ade-cli/src/services/projects/projectIconResolver.ts
  • apps/ade-cli/src/services/projects/projectScope.test.ts
  • apps/ade-cli/src/services/projects/projectScope.ts
  • apps/ade-cli/src/services/sync/syncHostService.test.ts
  • apps/ade-cli/src/services/sync/syncHostService.ts
  • apps/ade-cli/src/services/sync/syncRemoteCommandService.test.ts
  • apps/ade-cli/src/services/sync/syncRemoteCommandService.ts
  • apps/ade-cli/src/services/sync/syncService.ts
  • apps/ade-cli/tsup.config.ts
  • apps/desktop/src/main/main.ts
  • apps/desktop/src/main/services/chat/agentChatService.test.ts
  • apps/desktop/src/main/services/chat/agentChatService.ts
  • apps/desktop/src/main/services/externalSessions/discoverCodex.ts
  • apps/desktop/src/main/services/externalSessions/discoverProviders.test.ts
  • apps/desktop/src/main/services/externalSessions/discoveryUtils.ts
  • apps/desktop/src/main/services/externalSessions/externalSessionsService.test.ts
  • apps/desktop/src/main/services/externalSessions/externalSessionsService.ts
  • apps/desktop/src/main/services/git/git.ts
  • apps/desktop/src/main/services/github/githubService.test.ts
  • apps/desktop/src/main/services/github/githubService.ts
  • apps/desktop/src/main/services/ipc/ipcTimeouts.test.ts
  • apps/desktop/src/main/services/ipc/ipcTimeouts.ts
  • apps/desktop/src/main/services/ipc/registerIpc.ts
  • apps/desktop/src/main/services/ipc/runtimeBridge.ts
  • apps/desktop/src/main/services/lanes/laneListSnapshotService.test.ts
  • apps/desktop/src/main/services/lanes/laneListSnapshotService.ts
  • apps/desktop/src/main/services/lanes/rebaseSuggestionService.ts
  • apps/desktop/src/main/services/localRuntime/localRuntimeConnectionPool.test.ts
  • apps/desktop/src/main/services/localRuntime/localRuntimeConnectionPool.ts
  • apps/desktop/src/main/services/localRuntime/localRuntimeTimeoutPolicy.ts
  • apps/desktop/src/main/services/projects/projectIconResolver.test.ts
  • apps/desktop/src/main/services/projects/projectIconResolver.ts
  • apps/desktop/src/main/services/projects/projectIconThumbnail.ts
  • apps/desktop/src/main/services/projects/projectScaffoldService.test.ts
  • apps/desktop/src/main/services/projects/projectScaffoldService.ts
  • apps/desktop/src/main/services/prs/prService.test.ts
  • apps/desktop/src/main/services/prs/prService.ts
  • apps/desktop/src/main/services/pty/ptyService.test.ts
  • apps/desktop/src/main/services/pty/ptyService.ts
  • apps/desktop/src/main/services/sessions/sessionService.test.ts
  • apps/desktop/src/main/services/sessions/sessionService.ts
  • apps/desktop/src/main/services/sync/syncRemoteCommandService.test.ts
  • apps/desktop/src/main/services/sync/syncService.test.ts
  • apps/desktop/src/main/services/usage/usageLedgerWorker.ts
  • apps/desktop/src/main/services/usage/usageLedgerWorkerClient.test.ts
  • apps/desktop/src/main/services/usage/usageLedgerWorkerClient.ts
  • apps/desktop/src/main/services/usage/usageStatsStore.ts
  • apps/desktop/src/main/services/usage/usageTrackingService.test.ts
  • apps/desktop/src/main/services/usage/usageTrackingService.ts
  • apps/desktop/src/renderer/components/account/AccountPage.test.tsx
  • apps/desktop/src/renderer/components/account/AccountPage.tsx
  • apps/desktop/src/renderer/components/app/TopBar.test.tsx
  • apps/desktop/src/renderer/components/app/TopBar.tsx
  • apps/desktop/src/renderer/components/chat/AgentChatPane.test.tsx
  • apps/desktop/src/renderer/components/chat/AgentChatPane.tsx
  • apps/desktop/src/renderer/components/lanes/useLaneWorkSessions.ts
  • apps/desktop/src/renderer/components/terminals/TerminalsPage.tsx
  • apps/desktop/src/renderer/components/terminals/WorkViewArea.test.tsx
  • apps/desktop/src/renderer/components/terminals/WorkViewArea.tsx
  • apps/desktop/src/renderer/components/terminals/cliLaunch.test.ts
  • apps/desktop/src/renderer/webclient/adapter/__tests__/adapter.test.ts
  • apps/desktop/src/renderer/webclient/adapter/agentChat.ts
  • apps/desktop/src/renderer/webclient/adapter/index.ts
  • apps/desktop/src/renderer/webclient/adapter/infra/chatEventDedup.ts
  • apps/desktop/src/renderer/webclient/adapter/infra/invalidation.ts
  • apps/desktop/src/renderer/webclient/adapter/infra/registries.ts
  • apps/desktop/src/renderer/webclient/adapter/personalChats.ts
  • apps/desktop/src/renderer/webclient/adapter/sessionsPty.ts
  • apps/desktop/src/renderer/webclient/adapter/types.ts
  • apps/desktop/src/renderer/webclient/shell/WebClientRoot.tsx
  • apps/desktop/src/renderer/webclient/shell/__tests__/WebClientRoot.test.tsx
  • apps/desktop/src/renderer/webclient/sync/__tests__/sync.test.ts
  • apps/desktop/src/renderer/webclient/sync/client.ts
  • apps/desktop/src/renderer/webclient/sync/connection.ts
  • apps/desktop/src/shared/cliLaunch.ts
  • apps/desktop/src/shared/types/externalSessions.ts
  • apps/desktop/src/shared/types/sessions.ts
  • apps/desktop/src/shared/types/sync.ts
  • apps/desktop/tsup.config.ts
  • apps/ios/ADE/Services/SyncService.swift
  • apps/ios/ADE/Views/Settings/SettingsConnectionHeader.swift
  • apps/ios/ADE/Views/Work/WorkEventMapping.swift
  • apps/ios/ADE/Views/Work/WorkNavigationAndTranscriptHelpers.swift
  • apps/ios/ADE/Views/Work/WorkStatusAndFormattingHelpers.swift
  • apps/ios/ADETests/ADETests.swift
  • apps/ios/ADETests/SyncRecoveryPolicyTests.swift

Comment thread apps/desktop/src/main/services/localRuntime/localRuntimeTimeoutPolicy.ts Outdated
Comment thread apps/desktop/src/main/services/usage/usageTrackingService.ts Outdated
@arul28

arul28 commented Jul 22, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 046cbce152

ℹ️ 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".

Comment thread apps/desktop/src/main/services/usage/usageLedgerWorkerClient.ts Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
apps/desktop/src/main/services/localRuntime/localRuntimeConnectionPool.ts (1)

1275-1281: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Reuse localRuntimeActionTimeoutMs instead of duplicating the daemon-timeout logic.

This inline selection is an exact copy of localRuntimeActionTimeoutMs(domain, action) in localRuntimeTimeoutPolicy.ts. The IPC layer already derives its budget from that helper (localRuntimeActionIpcTimeoutMs), so keeping a second hand-rolled copy here risks the daemon-side and renderer-side budgets silently diverging if the fallback rules change.

♻️ Proposed refactor
-      const actionKey = `${request.domain}.${request.action}`;
-      const actionCallOptions = {
-        timeoutMs: longRunningLocalRuntimeActionTimeoutMs(actionKey)
-          ?? (request.domain === "file"
-            ? LOCAL_RUNTIME_FILE_ACTION_TIMEOUT_MS
-            : LOCAL_RUNTIME_ACTION_TIMEOUT_MS),
-      };
+      const actionCallOptions = {
+        timeoutMs: localRuntimeActionTimeoutMs(request.domain, request.action),
+      };

Update the import block (lines 43-48) to pull in localRuntimeActionTimeoutMs; longRunningLocalRuntimeActionTimeoutMs, LOCAL_RUNTIME_FILE_ACTION_TIMEOUT_MS, and LOCAL_RUNTIME_ACTION_TIMEOUT_MS can be dropped if unused elsewhere in this file.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/desktop/src/main/services/localRuntime/localRuntimeConnectionPool.ts`
around lines 1275 - 1281, Update the actionCallOptions construction near
actionKey to use localRuntimeActionTimeoutMs(request.domain, request.action)
instead of duplicating the inline fallback selection. Adjust the imports by
adding localRuntimeActionTimeoutMs and removing
longRunningLocalRuntimeActionTimeoutMs, LOCAL_RUNTIME_FILE_ACTION_TIMEOUT_MS,
and LOCAL_RUNTIME_ACTION_TIMEOUT_MS if no longer used elsewhere in the file.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@apps/desktop/src/main/services/localRuntime/localRuntimeConnectionPool.ts`:
- Around line 1275-1281: Update the actionCallOptions construction near
actionKey to use localRuntimeActionTimeoutMs(request.domain, request.action)
instead of duplicating the inline fallback selection. Adjust the imports by
adding localRuntimeActionTimeoutMs and removing
longRunningLocalRuntimeActionTimeoutMs, LOCAL_RUNTIME_FILE_ACTION_TIMEOUT_MS,
and LOCAL_RUNTIME_ACTION_TIMEOUT_MS if no longer used elsewhere in the file.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 27ecd56c-69dc-4e33-9e98-e00afd628983

📥 Commits

Reviewing files that changed from the base of the PR and between db39d66 and 046cbce.

⛔ Files ignored due to path filters (2)
  • CHANGELOG.md is excluded by !*.md
  • changelog/v1.2.34.mdx is excluded by !changelog/**
📒 Files selected for processing (19)
  • apps/desktop/src/main/services/chat/agentChatService.test.ts
  • apps/desktop/src/main/services/github/githubService.test.ts
  • apps/desktop/src/main/services/github/githubService.ts
  • apps/desktop/src/main/services/ipc/ipcTimeouts.test.ts
  • apps/desktop/src/main/services/ipc/ipcTimeouts.ts
  • apps/desktop/src/main/services/lanes/laneCacheKey.test.ts
  • apps/desktop/src/main/services/lanes/laneCacheKey.ts
  • apps/desktop/src/main/services/lanes/laneListSnapshotService.ts
  • apps/desktop/src/main/services/lanes/rebaseSuggestionService.ts
  • apps/desktop/src/main/services/localRuntime/localRuntimeConnectionPool.test.ts
  • apps/desktop/src/main/services/localRuntime/localRuntimeConnectionPool.ts
  • apps/desktop/src/main/services/localRuntime/localRuntimeTimeoutPolicy.ts
  • apps/desktop/src/main/services/usage/usageTrackingService.test.ts
  • apps/desktop/src/main/services/usage/usageTrackingService.ts
  • apps/desktop/src/renderer/components/lanes/useLaneWorkSessions.ts
  • apps/desktop/src/renderer/components/terminals/TerminalsPage.tsx
  • apps/desktop/src/renderer/components/terminals/cliLaunch.test.ts
  • apps/desktop/src/renderer/components/terminals/cliLaunch.ts
  • apps/ios/ADETests/ADETests.swift
🚧 Files skipped from review as they are similar to previous changes (7)
  • apps/desktop/src/renderer/components/terminals/TerminalsPage.tsx
  • apps/desktop/src/renderer/components/lanes/useLaneWorkSessions.ts
  • apps/desktop/src/main/services/chat/agentChatService.test.ts
  • apps/desktop/src/main/services/lanes/laneListSnapshotService.ts
  • apps/desktop/src/main/services/lanes/rebaseSuggestionService.ts
  • apps/ios/ADETests/ADETests.swift
  • apps/desktop/src/main/services/usage/usageTrackingService.ts

@arul28

arul28 commented Jul 22, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Swish!

Reviewed commit: 88e800ead4

ℹ️ 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".

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
apps/desktop/src/renderer/components/terminals/cliLaunch.ts (1)

78-115: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add test coverage for recoverImportedContinuationLaunch's caching/TTL/dedup behavior.

Only mergeContinuationLaunch appears covered by tests per the provided context; the cache dedup, TTL-expiry re-fetch, and size-bound eviction logic in recoverImportedContinuationLaunch has no visible tests, despite being the more subtle/stateful piece (see the race condition flagged above).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/desktop/src/renderer/components/terminals/cliLaunch.ts` around lines 78
- 115, Add tests for recoverImportedContinuationLaunch covering concurrent calls
deduplicating to one list request, cached results being reused within
CONTINUATION_LAUNCH_LOOKUP_TTL_MS, expired entries triggering a fresh request,
and eviction when continuationLaunchLookups exceeds
CONTINUATION_LAUNCH_LOOKUP_MAX_ENTRIES. Also verify failed requests remove their
cache entry so later calls can retry.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/desktop/scripts/ensure-ade-cli-build.cjs`:
- Around line 58-63: Update oldestMtimeMs around fs.readdirSync so
directory-read errors are caught and return 0, matching the existing failed
statSync fallback; preserve the current empty-directory and recursive reduction
behavior when reading succeeds.

In `@apps/desktop/scripts/packaged-ade-cli-resources.cjs`:
- Around line 20-29: Expand directory sources into concrete destination-relative
payload files before validation. In
apps/desktop/scripts/packaged-ade-cli-resources.cjs:20-29, add and use a
recursive expansion helper; in
apps/desktop/scripts/after-pack-runtime-fixes.cjs:394-399 and
apps/desktop/scripts/validate-mac-artifacts.mjs:37-41, require every expanded
file; in apps/desktop/scripts/validate-win-artifacts.mjs:38-42, derive expected
artifacts from those files, and at 205-207 retain a concrete required-payload
check instead of accepting any non-empty ADE CLI resource configuration.

In `@apps/desktop/src/renderer/components/terminals/cliLaunch.ts`:
- Around line 95-104: Update the catch handler in the continuation launch lookup
flow to delete the cache entry only when it still references the rejecting
request’s own promise. Preserve newer entries created after TTL expiration,
while retaining the existing error propagation and cleanup behavior for the
current entry.

---

Nitpick comments:
In `@apps/desktop/src/renderer/components/terminals/cliLaunch.ts`:
- Around line 78-115: Add tests for recoverImportedContinuationLaunch covering
concurrent calls deduplicating to one list request, cached results being reused
within CONTINUATION_LAUNCH_LOOKUP_TTL_MS, expired entries triggering a fresh
request, and eviction when continuationLaunchLookups exceeds
CONTINUATION_LAUNCH_LOOKUP_MAX_ENTRIES. Also verify failed requests remove their
cache entry so later calls can retry.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 20d41dc1-8f3f-414b-88b4-99a13f3f2e4f

📥 Commits

Reviewing files that changed from the base of the PR and between 046cbce and 88e800e.

⛔ Files ignored due to path filters (6)
  • docs/ARCHITECTURE.md is excluded by !docs/**
  • docs/features/ade-code/README.md is excluded by !docs/**
  • docs/features/onboarding-and-settings/usage-tracking.md is excluded by !docs/**
  • docs/features/sync-and-multi-device/README.md is excluded by !docs/**
  • docs/features/terminals-and-sessions/pty-and-processes.md is excluded by !docs/**
  • docs/features/web-client/README.md is excluded by !docs/**
📒 Files selected for processing (25)
  • apps/ade-cli/scripts/verify-built-cli.mjs
  • apps/ade-cli/src/cli.test.ts
  • apps/ade-cli/src/cli.ts
  • apps/ade-cli/src/tuiClient/__tests__/adeApi.test.ts
  • apps/ade-cli/src/tuiClient/adeApi.ts
  • apps/ade-cli/src/tuiClient/app.tsx
  • apps/ade-cli/tsup.config.ts
  • apps/desktop/package.json
  • apps/desktop/scripts/after-pack-runtime-fixes.cjs
  • apps/desktop/scripts/ensure-ade-cli-build.cjs
  • apps/desktop/scripts/packaged-ade-cli-resources.cjs
  • apps/desktop/scripts/validate-mac-artifacts.mjs
  • apps/desktop/scripts/validate-win-artifacts.mjs
  • apps/desktop/src/main/services/localRuntime/localRuntimeConnectionPool.test.ts
  • apps/desktop/src/main/services/localRuntime/localRuntimeConnectionPool.ts
  • apps/desktop/src/main/services/usage/usageLedgerWorker.ts
  • apps/desktop/src/main/services/usage/usageLedgerWorkerClient.test.ts
  • apps/desktop/src/main/services/usage/usageLedgerWorkerClient.ts
  • apps/desktop/src/main/services/usage/usageLedgerWorkerEntry.ts
  • apps/desktop/src/renderer/components/terminals/TerminalView.test.tsx
  • apps/desktop/src/renderer/components/terminals/WorkViewArea.tsx
  • apps/desktop/src/renderer/components/terminals/cliLaunch.test.ts
  • apps/desktop/src/renderer/components/terminals/cliLaunch.ts
  • apps/desktop/src/shared/cliLaunch.ts
  • apps/desktop/tsup.config.ts
🚧 Files skipped from review as they are similar to previous changes (6)
  • apps/desktop/tsup.config.ts
  • apps/ade-cli/tsup.config.ts
  • apps/ade-cli/src/cli.ts
  • apps/desktop/src/main/services/usage/usageLedgerWorker.ts
  • apps/desktop/src/renderer/components/terminals/cliLaunch.test.ts
  • apps/desktop/src/main/services/usage/usageLedgerWorkerClient.ts

Comment thread apps/desktop/scripts/ensure-ade-cli-build.cjs Outdated
Comment thread apps/desktop/scripts/packaged-ade-cli-resources.cjs
Comment thread apps/desktop/src/renderer/components/terminals/cliLaunch.ts Outdated
@arul28

arul28 commented Jul 22, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 05af0a1158

ℹ️ 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".

Comment thread apps/desktop/src/main/services/externalSessions/discoverCodex.ts Outdated
@arul28

arul28 commented Jul 22, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b39d902606

ℹ️ 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".

Comment thread apps/desktop/src/shared/types/externalSessions.ts
Comment thread apps/desktop/src/shared/types/externalSessions.ts
@arul28

arul28 commented Jul 22, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5400562406

ℹ️ 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".

Comment thread apps/desktop/src/main/services/externalSessions/discoverCodex.ts Outdated
@arul28

arul28 commented Jul 22, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a43c4eab0b

ℹ️ 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".

Comment thread apps/desktop/src/main/services/pty/ptyService.ts Outdated
@arul28

arul28 commented Jul 22, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@arul28
arul28 merged commit 73e8d63 into main Jul 22, 2026
14 checks passed
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Nice work!

Reviewed commit: 1df0a95226

ℹ️ 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".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant