Skip to content

fix(core): ensure tool output cleanup on session deletion for legacy files#26263

Merged
cocosheng-g merged 2 commits intomainfrom
fix/21568-session-cleanup-artifacts
Apr 30, 2026
Merged

fix(core): ensure tool output cleanup on session deletion for legacy files#26263
cocosheng-g merged 2 commits intomainfrom
fix/21568-session-cleanup-artifacts

Conversation

@cocosheng-g
Copy link
Copy Markdown
Contributor

Summary

Fixes an issue where deleteSession() failed to clean up tool output directories when deleting legacy pretty-printed JSON session files.

Details

  • Updated ChatRecordingService.deleteSessionAndArtifacts in @google/gemini-cli-core to fall back to a full-file parse if the efficient first-line parse (used for JSONL) fails. This ensures the fullSessionId (UUID) is correctly extracted from legacy pretty-printed JSON files.
  • Hardened CLI cleanupExpiredSessions in @google/gemini-cli with the same robust parsing logic to ensure associated artifacts (logs, tool outputs) are removed during automatic cleanup of "corrupted" or expired sessions.
  • Ensured session files are unconditionally unlinked during deletion, even if an error occurs while attempting to delete artifacts.
  • Added comprehensive unit tests in ChatRecordingService.test.ts covering legacy format deletion and corrupted file handling.

Related Issues

Fixes #21568

How to Validate

  1. Manual Verification: Create a legacy-style pretty-printed JSON file (e.g., session-2026-01-01T00-00-12345678.json) in the project's chats directory.
  2. Add associated tool outputs in tool-outputs/session-<UUID>.
  3. Run gemini --delete-session 1.
  4. Confirm both the chat file and the tool-outputs directory are deleted.
  5. Unit Tests: Run npm test -w @google/gemini-cli-core -- src/services/chatRecordingService.test.ts and npm test -w @google/gemini-cli -- src/utils/sessionCleanup.test.ts.

Pre-Merge Checklist

  • Updated relevant documentation and README (if needed)
  • Added/updated tests (if needed)
  • Noted breaking changes (if any)
  • Validated on required platforms/methods:
    • MacOS
      • npm run

@cocosheng-g cocosheng-g requested a review from a team as a code owner April 30, 2026 15:02
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request addresses an issue where tool output directories were not being properly cleaned up when deleting legacy pretty-printed JSON session files. By introducing a more resilient parsing strategy that falls back to full-file reading when necessary, the system can now reliably extract session identifiers from older file formats. Additionally, the cleanup process has been improved to guarantee that session files are removed regardless of potential errors encountered during artifact deletion, improving overall system hygiene.

Highlights

  • Legacy File Parsing: Updated session deletion logic to include a fallback to full-file parsing when the initial first-line parse fails, ensuring compatibility with legacy pretty-printed JSON files.
  • Robust Cleanup: Hardened the CLI session cleanup utility to utilize the same robust parsing logic, ensuring associated artifacts are correctly identified and removed.
  • Guaranteed Deletion: Modified the deletion process to ensure session files are unlinked even if an error occurs during the artifact cleanup phase.
  • Testing: Added comprehensive unit tests to verify legacy format handling and corrupted file scenarios.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request enhances the session cleanup logic to support both JSONL and legacy pretty-printed JSON formats. It introduces a more robust deletion mechanism that ensures session files are unlinked even if artifact removal encounters errors, and adds corresponding test cases. Feedback was provided regarding the efficiency of file reading in sessionCleanup.ts, suggesting a chunked read approach similar to the one implemented in ChatRecordingService.ts to avoid loading large files entirely into memory.

Comment thread packages/cli/src/utils/sessionCleanup.ts Outdated
@cocosheng-g cocosheng-g force-pushed the fix/21568-session-cleanup-artifacts branch 2 times, most recently from 8cd3c68 to 0d0970d Compare April 30, 2026 15:19
@gemini-cli gemini-cli Bot added priority/p2 Important but can be addressed in a future release. area/core Issues related to User Interface, OS Support, Core Functionality labels Apr 30, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 30, 2026

Size Change: +1.8 kB (+0.01%)

Total Size: 33.9 MB

Filename Size Change
./bundle/chunk-7FXC36TH.js 0 B -3.43 kB (removed) 🏆
./bundle/chunk-BWV3CGS2.js 0 B -19.5 kB (removed) 🏆
./bundle/chunk-HQ2BNR2A.js 0 B -12.6 kB (removed) 🏆
./bundle/chunk-L5S7SMIL.js 0 B -2.72 MB (removed) 🏆
./bundle/chunk-NQJDCJAK.js 0 B -3.8 kB (removed) 🏆
./bundle/chunk-P7UOP2CB.js 0 B -14.7 MB (removed) 🏆
./bundle/chunk-QW2RJHD7.js 0 B -49.2 kB (removed) 🏆
./bundle/chunk-WCDXTSYE.js 0 B -655 kB (removed) 🏆
./bundle/core-F76P3CYN.js 0 B -48.2 kB (removed) 🏆
./bundle/devtoolsService-325LDILM.js 0 B -28 kB (removed) 🏆
./bundle/gemini-VVWQP7J3.js 0 B -580 kB (removed) 🏆
./bundle/interactiveCli-XP3M34EH.js 0 B -1.31 MB (removed) 🏆
./bundle/liteRtServerManager-NWL62OOM.js 0 B -2.11 kB (removed) 🏆
./bundle/oauth2-provider-N6WBYKWL.js 0 B -9.16 kB (removed) 🏆
./bundle/chunk-2BFBNHYT.js 3.8 kB +3.8 kB (new file) 🆕
./bundle/chunk-7PFHLJHL.js 657 kB +657 kB (new file) 🆕
./bundle/chunk-FBJAXTCP.js 2.72 MB +2.72 MB (new file) 🆕
./bundle/chunk-JCGUXKZU.js 3.43 kB +3.43 kB (new file) 🆕
./bundle/chunk-NCWQ5BVR.js 19.5 kB +19.5 kB (new file) 🆕
./bundle/chunk-TMNUVXJL.js 12.6 kB +12.6 kB (new file) 🆕
./bundle/chunk-XDMKHMTB.js 14.7 MB +14.7 MB (new file) 🆕
./bundle/chunk-Z4WLYMPQ.js 49.2 kB +49.2 kB (new file) 🆕
./bundle/core-IW5FUZ2X.js 48.2 kB +48.2 kB (new file) 🆕
./bundle/devtoolsService-CCEVRHES.js 28 kB +28 kB (new file) 🆕
./bundle/gemini-SMQ4A7SB.js 580 kB +580 kB (new file) 🆕
./bundle/interactiveCli-RRNR7GKL.js 1.31 MB +1.31 MB (new file) 🆕
./bundle/liteRtServerManager-YZEDNCY5.js 2.11 kB +2.11 kB (new file) 🆕
./bundle/oauth2-provider-LGXKFGIR.js 9.16 kB +9.16 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size Change
./bundle/bundled/third_party/index.js 8 MB 0 B
./bundle/chunk-34MYV7JD.js 2.45 kB 0 B
./bundle/chunk-5AUYMPVF.js 858 B 0 B
./bundle/chunk-5PS3AYFU.js 1.18 kB 0 B
./bundle/chunk-664ZODQF.js 124 kB 0 B
./bundle/chunk-DAHVX5MI.js 206 kB 0 B
./bundle/chunk-IUUIT4SU.js 56.5 kB 0 B
./bundle/chunk-RJTRUG2J.js 39.8 kB 0 B
./bundle/chunk-XRLFHCHC.js 1.97 MB 0 B
./bundle/cleanup-FAXUYKKI.js 0 B -932 B (removed) 🏆
./bundle/devtools-36NN55EP.js 696 kB 0 B
./bundle/dist-T73EYRDX.js 356 B 0 B
./bundle/events-XB7DADIJ.js 418 B 0 B
./bundle/examples/hooks/scripts/on-start.js 188 B 0 B
./bundle/examples/mcp-server/example.js 1.43 kB 0 B
./bundle/gemini.js 5.1 kB 0 B
./bundle/getMachineId-bsd-TXG52NKR.js 1.55 kB 0 B
./bundle/getMachineId-darwin-7OE4DDZ6.js 1.55 kB 0 B
./bundle/getMachineId-linux-SHIFKOOX.js 1.34 kB 0 B
./bundle/getMachineId-unsupported-5U5DOEYY.js 1.06 kB 0 B
./bundle/getMachineId-win-6KLLGOI4.js 1.72 kB 0 B
./bundle/memoryDiscovery-FN3IAPBT.js 980 B 0 B
./bundle/multipart-parser-KPBZEGQU.js 11.7 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/client/main.js 222 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.js 229 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.js 13.4 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/types.js 132 B 0 B
./bundle/sandbox-macos-permissive-open.sb 890 B 0 B
./bundle/sandbox-macos-permissive-proxied.sb 1.31 kB 0 B
./bundle/sandbox-macos-restrictive-open.sb 3.36 kB 0 B
./bundle/sandbox-macos-restrictive-proxied.sb 3.56 kB 0 B
./bundle/sandbox-macos-strict-open.sb 4.82 kB 0 B
./bundle/sandbox-macos-strict-proxied.sb 5.02 kB 0 B
./bundle/src-QVCVGIUX.js 47 kB 0 B
./bundle/start-PCSSMGDB.js 0 B -652 B (removed) 🏆
./bundle/tree-sitter-7U6MW5PS.js 274 kB 0 B
./bundle/tree-sitter-bash-34ZGLXVX.js 1.84 MB 0 B
./bundle/cleanup-7HKMD4GY.js 932 B +932 B (new file) 🆕
./bundle/start-FMJPDYHS.js 652 B +652 B (new file) 🆕

compressed-size-action

@cocosheng-g cocosheng-g force-pushed the fix/21568-session-cleanup-artifacts branch 2 times, most recently from 09b90bb to 55514de Compare April 30, 2026 15:30
@cocosheng-g
Copy link
Copy Markdown
Contributor Author

/gemini review

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request updates the session cleanup and recording services to support both .json and .jsonl file formats. It introduces a more robust session ID extraction process that attempts to read the first line of a file (optimized for JSONL) before falling back to a full file read for legacy pretty-printed JSON. Additionally, the ChatRecordingService was updated to ensure session files are unlinked even if artifact deletion fails, and new tests were added to verify handling of legacy and corrupted files. I have no feedback to provide.

…files

Fixes #21568. Robustly parse session files during deletion to extract sessionId and clean up artifacts, even for legacy pretty-printed JSON files.
@cocosheng-g cocosheng-g force-pushed the fix/21568-session-cleanup-artifacts branch from 55514de to d6efef2 Compare April 30, 2026 15:50
@cocosheng-g cocosheng-g enabled auto-merge April 30, 2026 16:00
@cocosheng-g cocosheng-g added this pull request to the merge queue Apr 30, 2026
Merged via the queue into main with commit 7125d2c Apr 30, 2026
27 checks passed
@cocosheng-g cocosheng-g deleted the fix/21568-session-cleanup-artifacts branch April 30, 2026 20:27
TirthNaik-99 pushed a commit to TirthNaik-99/gemini-cli that referenced this pull request May 4, 2026
kimjune01 pushed a commit to kimjune01/gemini-cli-claude that referenced this pull request May 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/core Issues related to User Interface, OS Support, Core Functionality priority/p2 Important but can be addressed in a future release.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

deleteSession() does not clean tool output directories (UUID / filename mismatch)

2 participants