Skip to content

feat(sidebar): show live Codex subagent progress - #12311

Open
parkavenue9639 wants to merge 1 commit into
stablyai:mainfrom
parkavenue9639:agent/codex-subagent-live-progress
Open

parkavenue9639 wants to merge 1 commit into
stablyai:mainfrom
parkavenue9639:agent/codex-subagent-live-progress

Conversation

@parkavenue9639

@parkavenue9639 parkavenue9639 commented Aug 3, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Make live Codex internal subagent rows clickable in both full and compact sidebar views and open the provider-assigned child session in a non-modal, read-only progress sheet.
  • Keep child discovery live across empty rosters, completion, interruption, and later dynamic spawns; derive working, waiting, and idle from the child rollout so a parked child does not keep its completed parent marked as running.
  • Scope full-history (fork_turns: "all") child rollouts at the provider-authored child start boundary. Parent user/assistant turns copied into the rollout stay hidden while the child's messages, reasoning, custom tool calls, and results remain live.
  • Capture transcript host authority at click time so local, managed-runtime, SSH-backed runtime, and folder-workspace routing cannot drift while the sheet is open. Legacy SSH, unknown ownership, and conflicting evidence fail closed.
  • Keep the inspected child visibly selected without changing parent terminal focus; shorten /root/<name> child labels while retaining canonical metadata in tooltips.

This is a focused follow-up to #9637. It does not close the remaining cross-worktree orchestration and deduplication scope in #8251.

Closes #12621

Refs #8251

Screenshots

Codex subagent live progress sheet

The screenshot was captured from an isolated Electron E2E profile with synthetic Codex rollouts; no user session history is included.

Testing

  • pnpm lint
  • pnpm typecheck (full typecheck inside pnpm build; typecheck:web repeated on the final commit)
  • pnpm test completed after rebasing onto upstream/main@41c4d8e8: 56,376 passed, 190 skipped, and 23 failed across nine unrelated files when launched inside an Orca-managed macOS terminal.
    • Controlled reruns cleared two environment/artifact-only failures: shell-startup-feature-channel passed 12/12 after clearing inherited Orca shell variables; the WSL separator passed 4/4 with the ignored cross-version checkout cache temporarily moved outside the scan and then restored.
    • The remaining 20 local failures are confined to seven upstream-only files with zero PR diff: three PTY shell-feature assertions receive an absent feature channel on current upstream, four macOS login-Bash assertions inherit local prompt hooks (git_branch / find_git_branch), and 13 happy-dom/xterm IME assertions do not activate or clear the expected composition overlay in this runtime.
  • Current Codex subagent regression: all 12 matching files / 51 tests passed.
  • Conflict-surface regression: 7 renderer/transcript files / 83 tests passed; the final model/lifecycle subset passed 3 files / 21 tests after commit hooks.
  • Expanded isolated Electron E2E matrix: 4 scenarios cover late rollout recovery, dynamic interruption/removal/rediscovery, concurrent child switching and live reasoning/custom-tool updates, independent completion, idle → working → waiting → working → complete, parent-state convergence, parent-session replacement/stale-watcher isolation, and parent/other-child history exclusion. Every scenario passed twice with 2 workers (8/8).
  • pnpm build passed after the rebase, including full typecheck, relay, CLI, Electron/Vite, built-skills verification, web projection, and macOS native helpers. The optional /usr/local/bin/orca-dev symlink refresh was denied without elevation, but the build continued and exited successfully.
  • Commit hooks: oxlint, React Doctor rules, and oxfmt.
  • git diff --check
  • Poll-cost follow-up rebased as fdaba84b6a: the 3 current poll/dynamic-lifecycle/transcript files / 11 tests passed; all 12 Codex subagent test files / 51 tests passed; full pnpm typecheck, full pnpm lint, formatting, and git diff --check passed. The server integration test covers transcript-only child discovery after more than 60 seconds of quiet polling and restoration of the 1-second cadence on the next Codex turn.

Additional real-session validation used Codex CLI 0.146.0 in an isolated dev profile. A child spawned with fork_turns: "all" showed its unique progress marker and live tool activity, did not show the unique parent-history marker, transitioned to Idle with its final result retained, disappeared from the dynamic child row after completion, and returned its result to a Done parent.

A second real-session matrix on the same CLI started three children with distinct long-running, short-running, and wait_agent paths. Orca showed the long child as Working and the parked child as Idle after the short child completed; completed rows disappeared independently. Switching the non-modal sheet from the completed long child to the waiting child replaced the transcript instead of merging it. After send_message resumed the parked child, its sheet retained only its own progress/wait/resume records, all live child rows cleared, and the parent converged to Done with REAL_PARENT_DONE_20260804.

Review Notes

The implementation was iterated against real dynamic child sessions, including children that start after the initial parent hook, park in wait_agent, resume, complete, disappear, and are followed by a new child. The generic Codex transcript view is unchanged by the parent-prefix filter; scoping is applied only in the subagent progress surface using the captured startedAt boundary.

The hook server keeps a 1-second incremental parent-rollout poll while the lead is working or a transcript child is tracked. With an empty roster and a non-working or pre-prompt lead, it backs off from 1 to 2 to 4 to 5 seconds, reducing steady quiet filesystem checks by 80%; child activity or any new Codex hook restores the 1-second cadence. The quiet poll stays capped instead of stopping because transcript-only late child creation can arrive without another hook. Reads reuse the existing cursor and byte/line bounds rather than rescanning whole files or all sessions.

The change considers macOS, Linux, Windows, local worktrees, folder workspaces, managed runtimes, runtime-owned SSH panes, and legacy SSH fail-closed behavior. It adds no Git commands or native dependencies.

Security Audit

  • The progress surface remains read-only and omits composer, send, interrupt, prompt-card, and PTY control paths.
  • No new IPC channel, credential access, shell execution, or transcript mutation is introduced.
  • Modal input is parsed into a narrow target shape. Runtime routing is pinned to captured authority; unknown, legacy SSH, malformed, or conflicting ownership becomes unavailable instead of falling back across hosts.
  • Full-history parent turns are excluded before rendering using the provider-authored child start boundary. If that trusted boundary is absent or invalid, the progress view exposes no transcript messages.
  • Transcript polling uses the hook-provided parent path, validated child session IDs, existing bounded JSONL readers, and existing Native Chat rendering.

Notes

  • Managed-runtime transcripts, including runtime-owned SSH panes, are supported when exact ownership resolves.
  • Legacy SSH workspaces intentionally show an unavailable state rather than risking a local transcript read.
  • Folder workspaces are covered for both local and managed-runtime ownership.
  • X handle: Not provided.

@parkavenue9639
parkavenue9639 marked this pull request as ready for review August 3, 2026 15:48
@coderabbitai

coderabbitai Bot commented Aug 3, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

Important

Review skipped

We couldn't safely recover the incremental review. No full review was started, and the last reviewed checkpoint was preserved. Retry later, or explicitly request a full review by commenting @coderabbitai full review.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This change adds Codex subagent progress tracking across the main process, shared state, and renderer. It adds lifecycle reconciliation for working, waiting, idle, and completed child states. The sidebar now creates validated progress targets, resolves local or runtime transcript routes, and renders read-only progress sheets. Subagent rows carry session metadata, display formatted labels, and expose selection state. Tests cover routing, transcript scoping, lifecycle polling, native-chat decoding, component behavior, and end-to-end concurrent and session-boundary flows.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 2.70% 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 The changes satisfy [#12621] by adding clickable rows, live read-only child transcripts, lifecycle handling, history filtering, routing, and selection.
Out of Scope Changes check ✅ Passed The implementation and tests support the linked feature objectives; no unrelated code changes are evident.
Title check ✅ Passed The title clearly summarizes the main change: adding live Codex subagent progress in the sidebar.
Description check ✅ Passed The description explains the feature, scope, linked issue, visual proof, testing, security, compatibility, and known limitations.

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
src/renderer/src/components/sidebar/WorktreeCardAgents.tsx (1)

285-289: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider extracting the shared activation resolver.

The same three-way activation ternary exists here and at lines 350-354. The Codex branch also allocates a new closure on every render, so memoized rows re-render even when their props are unchanged. A single memoized resolver keeps both views aligned and preserves row memoization.

♻️ Proposed refactor
+  const resolveRowActivation = useCallback(
+    (agent: DashboardAgentRowData) =>
+      agent.rowSource === 'retained'
+        ? handleActivateRetainedAgent
+        : agent.subagentSession?.provider === 'codex'
+          ? () => handleOpenCodexSubagentProgress(agent)
+          : handleActivateAgentTab,
+    [handleActivateAgentTab, handleActivateRetainedAgent, handleOpenCodexSubagentProgress]
+  )

Then use onActivate={resolveRowActivation(agent)} in both render paths.


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 91e529f8-4edd-48cd-bd83-beccb6d6165e

📥 Commits

Reviewing files that changed from the base of the PR and between e08eba6 and 8254880.

📒 Files selected for processing (18)
  • src/renderer/src/components/dashboard/DashboardAgentRow.tsx
  • src/renderer/src/components/dashboard/useDashboardData.ts
  • src/renderer/src/components/sidebar/CodexSubagentProgressSheet.test.tsx
  • src/renderer/src/components/sidebar/CodexSubagentProgressSheet.tsx
  • src/renderer/src/components/sidebar/WorktreeCardAgents.activation.test.tsx
  • src/renderer/src/components/sidebar/WorktreeCardAgents.tsx
  • src/renderer/src/components/sidebar/codex-subagent-progress-host-authority.test.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-host-authority.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-route.test.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-route.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-target.test.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-target.ts
  • src/renderer/src/components/sidebar/index.tsx
  • src/renderer/src/components/sidebar/useWorktreeAgentRows.test.ts
  • src/renderer/src/components/sidebar/worktree-card-compact-agent-row.tsx
  • src/renderer/src/components/sidebar/worktree-subagent-child-rows.ts
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/store/slices/ui.ts

@parkavenue9639
parkavenue9639 marked this pull request as draft August 4, 2026 03:38
@parkavenue9639
parkavenue9639 marked this pull request as ready for review August 4, 2026 04:46

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
src/main/agent-hooks/server-codex-subagent-transcript.test.ts (1)

225-242: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider extracting a local hook POST helper.

This block repeats the port, token header, and body shape used by the other tests in this file. A local postCodexHook(server, payload) helper, like the one in src/main/agent-hooks/server-codex-subagent-dynamic-lifecycle.test.ts, keeps the new test focused on the lifecycle assertions.


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 23724f25-c105-4670-89a5-617b5ca09d98

📥 Commits

Reviewing files that changed from the base of the PR and between 8254880 and 97f3498f2d8ed421d5c12363c7cb91e4d28e5e68.

📒 Files selected for processing (36)
  • src/main/agent-hooks/server-codex-subagent-dynamic-lifecycle.test.ts
  • src/main/agent-hooks/server-codex-subagent-transcript.test.ts
  • src/main/agent-hooks/server.ts
  • src/main/native-chat/transcript-line-decoders-codex.ts
  • src/main/native-chat/transcript-reader.test.ts
  • src/renderer/src/assets/main.css
  • src/renderer/src/components/agent-child-disclosure-label.ts
  • src/renderer/src/components/codex-subagent-display-label.ts
  • src/renderer/src/components/dashboard/DashboardAgentChildDisclosure.tsx
  • src/renderer/src/components/dashboard/DashboardAgentRow.tsx
  • src/renderer/src/components/sidebar/CodexSubagentProgressSheet.test.tsx
  • src/renderer/src/components/sidebar/CodexSubagentProgressSheet.tsx
  • src/renderer/src/components/sidebar/WorktreeCardAgents.activation.test.tsx
  • src/renderer/src/components/sidebar/WorktreeCardAgents.tsx
  • src/renderer/src/components/sidebar/codex-subagent-progress-selection.test.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-selection.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-target.test.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-target.ts
  • src/renderer/src/components/sidebar/codex-subagent-transcript-scope.test.ts
  • src/renderer/src/components/sidebar/codex-subagent-transcript-scope.ts
  • src/renderer/src/components/sidebar/worktree-card-compact-agent-row.subagent.test.tsx
  • src/renderer/src/components/sidebar/worktree-card-compact-agent-row.tsx
  • src/renderer/src/components/ui/sheet.test.tsx
  • src/renderer/src/components/ui/sheet.tsx
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/zh.json
  • src/shared/agent-hook-listener.ts
  • src/shared/codex-subagent-roster.test.ts
  • src/shared/codex-subagent-roster.ts
  • src/shared/codex-subagent-transcript-lifecycle.ts
  • src/shared/codex-subagent-transcript.test.ts
  • src/shared/codex-subagent-transcript.ts
  • tests/e2e/codex-subagent-sidebar-lifecycle.spec.ts
🚧 Files skipped from review as they are similar to previous changes (5)
  • src/renderer/src/components/sidebar/codex-subagent-progress-target.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-target.test.ts
  • src/renderer/src/components/sidebar/CodexSubagentProgressSheet.tsx
  • src/renderer/src/components/sidebar/WorktreeCardAgents.activation.test.tsx
  • src/renderer/src/components/sidebar/WorktreeCardAgents.tsx

Comment thread src/shared/codex-subagent-transcript-lifecycle.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
tests/e2e/helpers/codex-subagent-rollout-fixture.ts (1)

149-151: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Include the response body in the hook failure message.

Three specs depend on this helper. When the hook server rejects a post, the current message reports only the status code. A 400 or 401 then gives no reason. Read the body and add it to the error.

♻️ Proposed change
   if (response.status !== 204) {
-    throw new Error(`Codex hook POST returned ${response.status}`)
+    const body = await response.text().catch(() => '')
+    throw new Error(
+      `Codex hook POST returned ${response.status}${body ? `: ${body.slice(0, 500)}` : ''}`
+    )
   }

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a10d1ae3-e9b5-455f-b6ba-9955b8cf0a29

📥 Commits

Reviewing files that changed from the base of the PR and between 97f3498f2d8ed421d5c12363c7cb91e4d28e5e68 and 39a1faf384cc5833a14d0c51c93e8917a6c62044.

📒 Files selected for processing (3)
  • tests/e2e/codex-subagent-concurrent-progress.spec.ts
  • tests/e2e/codex-subagent-state-and-session.spec.ts
  • tests/e2e/helpers/codex-subagent-rollout-fixture.ts

Comment thread tests/e2e/helpers/codex-subagent-rollout-fixture.ts
@AmethystLiang

Copy link
Copy Markdown
Contributor

Thanks for the PR

@parkavenue9639

Copy link
Copy Markdown
Contributor Author

Thank you, @AmethystLiang! I also tagged you in the community discussion where I raised this missing capability. This is a high-frequency workflow for me—I often need to open a Codex subagent from the sidebar and follow its live progress—so I would really appreciate a review when you have a chance. Thanks again!

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
tests/e2e/codex-subagent-state-and-session.spec.ts (2)

78-80: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider adding an explicit timeout to the parent-row assertion.

Line 78 waits up to 15 s for the child row to reach Idle. Line 79 then asserts the parent row shows Done with the default timeout. The parent status derives from a separate polling pass, so it can settle after the child row. The same pattern repeats at Lines 91, 118, and 125. If the CI default timeout is short, these assertions can flake.

♻️ Proposed change
-    await expect(parentAgentRow(orcaPage, context.prompt).getByLabel('Done')).toBeVisible()
+    await expect(parentAgentRow(orcaPage, context.prompt).getByLabel('Done')).toBeVisible({
+      timeout: 15_000
+    })

122-127: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Reuse the existing childRow locator.

Line 41 already defines childRow for the same session id. Line 122 recreates the locator. Reuse childRow for consistency.

♻️ Proposed change
-    await expect(childAgentRow(orcaPage, childId)).toHaveCount(0, {
+    await expect(childRow).toHaveCount(0, {
       timeout: 15_000
     })

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 4a0a20c4-9e3e-4997-a4d8-1c41aa080d85

📥 Commits

Reviewing files that changed from the base of the PR and between b3965f3 and 588112d34da08a43ff7f0cbab3e5d61698f4adee.

📒 Files selected for processing (48)
  • src/main/agent-hooks/server-codex-subagent-dynamic-lifecycle.test.ts
  • src/main/agent-hooks/server-codex-subagent-transcript.test.ts
  • src/main/agent-hooks/server.ts
  • src/main/native-chat/transcript-reader.test.ts
  • src/renderer/src/assets/main.css
  • src/renderer/src/components/agent-child-disclosure-label.ts
  • src/renderer/src/components/codex-subagent-display-label.ts
  • src/renderer/src/components/dashboard/DashboardAgentChildDisclosure.tsx
  • src/renderer/src/components/dashboard/DashboardAgentRow.test.tsx
  • src/renderer/src/components/dashboard/DashboardAgentRow.tsx
  • src/renderer/src/components/dashboard/useDashboardData.ts
  • src/renderer/src/components/sidebar/CodexSubagentProgressSheet.test.tsx
  • src/renderer/src/components/sidebar/CodexSubagentProgressSheet.tsx
  • src/renderer/src/components/sidebar/WorktreeCardAgents.activation.test.tsx
  • src/renderer/src/components/sidebar/WorktreeCardAgents.tsx
  • src/renderer/src/components/sidebar/codex-subagent-progress-host-authority.test.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-host-authority.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-route.test.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-route.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-selection.test.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-selection.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-target.test.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-target.ts
  • src/renderer/src/components/sidebar/codex-subagent-transcript-scope.test.ts
  • src/renderer/src/components/sidebar/codex-subagent-transcript-scope.ts
  • src/renderer/src/components/sidebar/index.tsx
  • src/renderer/src/components/sidebar/useWorktreeAgentRows.test.ts
  • src/renderer/src/components/sidebar/worktree-card-compact-agent-row.subagent.test.tsx
  • src/renderer/src/components/sidebar/worktree-card-compact-agent-row.tsx
  • src/renderer/src/components/sidebar/worktree-subagent-child-rows.ts
  • src/renderer/src/components/ui/sheet.test.tsx
  • src/renderer/src/components/ui/sheet.tsx
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/zh.json
  • src/renderer/src/store/slices/ui.ts
  • src/shared/agent-hook-listener.ts
  • src/shared/codex-subagent-roster.test.ts
  • src/shared/codex-subagent-roster.ts
  • src/shared/codex-subagent-transcript-lifecycle.ts
  • src/shared/codex-subagent-transcript.test.ts
  • src/shared/codex-subagent-transcript.ts
  • tests/e2e/codex-subagent-concurrent-progress.spec.ts
  • tests/e2e/codex-subagent-sidebar-lifecycle.spec.ts
  • tests/e2e/codex-subagent-state-and-session.spec.ts
  • tests/e2e/helpers/codex-subagent-rollout-fixture.ts
🚧 Files skipped from review as they are similar to previous changes (46)
  • src/shared/codex-subagent-transcript.test.ts
  • src/renderer/src/components/sidebar/useWorktreeAgentRows.test.ts
  • src/renderer/src/components/codex-subagent-display-label.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-selection.test.ts
  • src/renderer/src/store/slices/ui.ts
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/components/agent-child-disclosure-label.ts
  • src/renderer/src/components/ui/sheet.test.tsx
  • src/renderer/src/components/sidebar/codex-subagent-progress-route.ts
  • src/renderer/src/components/ui/sheet.tsx
  • src/renderer/src/components/sidebar/CodexSubagentProgressSheet.test.tsx
  • src/renderer/src/components/sidebar/codex-subagent-progress-host-authority.test.ts
  • src/renderer/src/components/dashboard/useDashboardData.ts
  • src/renderer/src/components/sidebar/index.tsx
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/assets/main.css
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/components/sidebar/worktree-subagent-child-rows.ts
  • src/renderer/src/components/sidebar/worktree-card-compact-agent-row.subagent.test.tsx
  • tests/e2e/codex-subagent-sidebar-lifecycle.spec.ts
  • src/main/native-chat/transcript-reader.test.ts
  • src/renderer/src/components/sidebar/codex-subagent-transcript-scope.ts
  • src/renderer/src/components/sidebar/worktree-card-compact-agent-row.tsx
  • src/renderer/src/components/sidebar/CodexSubagentProgressSheet.tsx
  • src/renderer/src/components/sidebar/codex-subagent-progress-target.test.ts
  • src/renderer/src/components/dashboard/DashboardAgentChildDisclosure.tsx
  • src/shared/agent-hook-listener.ts
  • src/main/agent-hooks/server-codex-subagent-transcript.test.ts
  • src/renderer/src/components/sidebar/codex-subagent-progress-target.ts
  • src/renderer/src/i18n/locales/zh.json
  • src/renderer/src/components/sidebar/codex-subagent-progress-host-authority.ts
  • src/renderer/src/components/sidebar/codex-subagent-transcript-scope.test.ts
  • src/main/agent-hooks/server-codex-subagent-dynamic-lifecycle.test.ts
  • src/main/agent-hooks/server.ts
  • tests/e2e/codex-subagent-concurrent-progress.spec.ts
  • src/renderer/src/components/dashboard/DashboardAgentRow.test.tsx
  • src/shared/codex-subagent-roster.ts
  • tests/e2e/helpers/codex-subagent-rollout-fixture.ts
  • src/shared/codex-subagent-transcript-lifecycle.ts
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/components/sidebar/codex-subagent-progress-route.test.ts
  • src/shared/codex-subagent-roster.test.ts
  • src/renderer/src/components/dashboard/DashboardAgentRow.tsx
  • src/renderer/src/components/sidebar/WorktreeCardAgents.tsx
  • src/renderer/src/components/sidebar/WorktreeCardAgents.activation.test.tsx
  • src/shared/codex-subagent-transcript.ts

Comment thread tests/e2e/codex-subagent-state-and-session.spec.ts
@parkavenue9639
parkavenue9639 force-pushed the agent/codex-subagent-live-progress branch from 588112d to ebf835a Compare August 14, 2026 08:07
@parkavenue9639
parkavenue9639 force-pushed the agent/codex-subagent-live-progress branch 2 times, most recently from 74f3894 to 38eb09f Compare August 19, 2026 06:43
@nwparker nwparker removed the P2 label Aug 19, 2026
Rebased onto upstream/main (d5dc7b9): the original 11 branch commits
are folded into this one. Adaptations the new base required:

- agent-hook-listener split (stablyai#16187): hasCodexParentTranscript moved to
  providers/codex-state.ts and refreshCodexSubagentTranscriptStatus to
  providers/codex-events.ts.
- server.ts split into agent-hooks/server/*: the poll loop now lives in
  server-status-retries.ts on top of CodexSubagentPollScheduler, which
  gained an optional per-entry delayMs so the quiet-roster backoff
  (1s -> 5s) coexists with the shared coalesced timer.
- renderer store split: the codex-subagent-progress modal type moved to
  slices/ui/ui-slice-contract-contextual.ts.
- compact row: canonical-label tooltip now composes with upstream's
  monitoring ordering; row activation moved to
  use-codex-subagent-row-activation.ts to stay under max-lines.
- tests adapted: TooltipProvider wraps (AgentStateDot tooltip),
  useNow-based freshness (mocked in the sheet test), scheduler-backed
  poll assertions, pane-agent-identity inventory entry.
@parkavenue9639
parkavenue9639 force-pushed the agent/codex-subagent-live-progress branch from 38eb09f to a59e657 Compare September 20, 2026 15:47

This branch has not been deployed

No deployments
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.

[Feature]: Open Codex sub-agent rows to inspect live progress

4 participants