Skip to content

feat(ui): collapse scheduled job sessions into accordion in chat history - #11265

Merged
lifeizhou-ap merged 6 commits into
aaif-goose:mainfrom
JoshFialkoff:feature/scheduled-jobs-accordion
Aug 20, 2026
Merged

lifeizhou-ap merged 6 commits into
aaif-goose:mainfrom
JoshFialkoff:feature/scheduled-jobs-accordion

Conversation

@JoshFialkoff

@JoshFialkoff JoshFialkoff commented Aug 15, 2026 •

Copy link
Copy Markdown
Contributor

Summary

This PR groups scheduled job chats into a collapsible accordion at the bottom of the chat history list, making it easier to find human-created conversations.

Part of #10961 (consolidating #10530 and #10697).

Changes

  • Backend data mapping: sessionType from ACP metadata is now exposed on SessionListItem
  • Session splitting: Sessions are split into human-created vs scheduled jobs
  • Accordion UI: Scheduled jobs render in a collapsed-by-default "Scheduled Jobs" section below the regular session list
  • Search compatibility: When searching, all sessions appear together in normal date groups (no accordion split)
  • i18n: Added sessions.scheduledJobs and sessions.scheduledJobsCount message keys

Why

Scheduled jobs can create many chat sessions over time. Without grouping, they push human-created chats down the list and make them harder to locate. The accordion keeps human chats prominent while keeping scheduled sessions accessible.

Testing

  • Verify that human-created sessions still appear grouped by date at the top
  • Verify that scheduled sessions appear in a collapsed "Scheduled Jobs" accordion after all human-session groups
  • Verify that older human date groups load before the scheduled accordion appears, so scheduled history cannot block human-history pagination
  • Verify that expanding the accordion shows scheduled sessions grouped by date
  • Verify that searching blends both types together in standard date groups
  • pnpm i18n:check

- Map sessionType from ACP metadata into SessionListItem
- Split session list into human-created and scheduled sessions
- Render human sessions first with existing date-group pagination
- Add collapsible 'Scheduled Jobs' accordion at the bottom of the list
- When searching, show all sessions normally without the accordion split
- Add i18n strings for scheduled jobs label and count

@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: b03fd5fc62

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +1041 to +1043
{isScheduledExpanded && (
<div className="space-y-8">
{memoizedScheduledDateGroups.map((group) => (

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Keep scheduled runs from blocking older human sessions

When the history spans more than the initial 15 human date groups and this accordion is expanded, this branch renders every scheduled group after only those 15 groups. Because handleScroll adds further human groups only when the viewport is within 200px of the absolute bottom, users must scroll through the entire scheduled history before older human conversations are loaded, which defeats the purpose of keeping scheduled runs out of their way. Load the remaining human groups independently or place the expanded content where it cannot gate the human-history pagination.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Fixed in b56f75e. The scheduled accordion is now rendered only after every human date group is visible, so expanded scheduled history cannot block pagination to older human sessions.

@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: b56f75ef8b

ℹ️ 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 on lines +1021 to +1023
<button
onClick={() => setIsScheduledExpanded((v) => !v)}
className="sticky top-0 z-10 w-full flex items-center justify-between bg-background-primary/95 backdrop-blur-sm py-2 px-1 rounded-lg hover:bg-background-secondary transition-colors cursor-pointer"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Expose the accordion state to assistive technology

For screen-reader users, expanding this disclosure leaves the button's accessible name unchanged and exposes no expanded/collapsed state, so they cannot determine whether the scheduled sessions are currently visible. Add an aria-expanded value tied to isScheduledExpanded (and preferably aria-controls targeting the collapsible region).

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Fixed in the latest push. The disclosure button now exposes aria-expanded and references the collapsible region through aria-controls.

@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: 3838283fe8

ℹ️ 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 on lines +3843 to +3846
"defaultMessage": "Scheduled Jobs"
},
"sessions.scheduledJobsCount": {
"defaultMessage": "{count,plural,one{{count} job} other{{count} jobs}}"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Translate the scheduled-session labels

For every non-English catalog changed here (de, es, fr, hi, id, it, ja, ko, ms, pt, ru, tr, vi, zh-CN, and zh-TW), both new messages are copied verbatim from English. Users selecting any of these supported locales therefore see an English accordion label and count amid the translated chat-history UI; languages such as Russian also lose their required plural categories. Supply locale-appropriate labels and plural forms instead of duplicating the English messages.

Useful? React with 👍 / 👎.

@lifeizhou-ap
lifeizhou-ap added this pull request to the merge queue Aug 20, 2026
Merged via the queue into aaif-goose:main with commit 6cd2664 Aug 20, 2026
23 checks passed
jbg added a commit that referenced this pull request Aug 20, 2026
* origin/main: (50 commits)
  chore(deps): bump the ui-minor-and-patch group across 1 directory with 53 updates (#11386)
  fix(security): bound call graph traversal (#11193)
  fix: pin arrayref to known-good commit (#11389)
  feat(providers): add SayGM as declarative OpenAI-compatible provider (#11267)
  feat(providers): custom provider cost fields drive cost tracking (config-declared pricing fallback) (#11220)
  fix(deps): repair dangling syn reference in Cargo.lock (#11385)
  fix(flake): add cudaforge hash for git dependency (#10910)
  feat: auto-focus chat input when user starts typing (#11184)
  fix(security): fail closed on invalid Codex ACP mode (#11362)
  fix(mcp): keep stdio extensions alive across worker exits (#10364)
  feat(ui): collapse scheduled job sessions into accordion in chat history (#11265)
  fix: bound retry command diagnostics (#11365)
  Disable thinking for tool call labels (#11207)
  fix(review): contain REVIEW.md discovery (#11367)
  fix(acp): preserve tool result audience metadata (#11375)
  test(providers): isolate environment-proxy test in its own binary (#11262)
  fix(security): bind Foundry API keys to request origin (#11347)
  fix: canonicalize mangled tool names before permission inspection (follow-up to #10230) (#10285)
  feat(providers): add Lynkr as a declarative OpenAI-compatible provider (#11372)
  fix: sanitize Pi imported output (#10990)
  ...

# Conflicts:
#	crates/goose/src/agents/state_machine/tests/hooks_lifecycle.rs
jbg added a commit that referenced this pull request Aug 20, 2026
* origin/main: (59 commits)
  chore(deps): bump the ui-minor-and-patch group across 1 directory with 53 updates (#11386)
  fix(security): bound call graph traversal (#11193)
  fix: pin arrayref to known-good commit (#11389)
  feat(providers): add SayGM as declarative OpenAI-compatible provider (#11267)
  feat(providers): custom provider cost fields drive cost tracking (config-declared pricing fallback) (#11220)
  fix(deps): repair dangling syn reference in Cargo.lock (#11385)
  fix(flake): add cudaforge hash for git dependency (#10910)
  feat: auto-focus chat input when user starts typing (#11184)
  fix(security): fail closed on invalid Codex ACP mode (#11362)
  fix(mcp): keep stdio extensions alive across worker exits (#10364)
  feat(ui): collapse scheduled job sessions into accordion in chat history (#11265)
  fix: bound retry command diagnostics (#11365)
  Disable thinking for tool call labels (#11207)
  fix(review): contain REVIEW.md discovery (#11367)
  fix(acp): preserve tool result audience metadata (#11375)
  test(providers): isolate environment-proxy test in its own binary (#11262)
  fix(security): bind Foundry API keys to request origin (#11347)
  fix: canonicalize mangled tool names before permission inspection (follow-up to #10230) (#10285)
  feat(providers): add Lynkr as a declarative OpenAI-compatible provider (#11372)
  fix: sanitize Pi imported output (#10990)
  ...
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.

3 participants