Skip to content

feat: export session to file and import via flag#26514

Merged
cocosheng-g merged 23 commits into
mainfrom
issue-23663
May 8, 2026
Merged

feat: export session to file and import via flag#26514
cocosheng-g merged 23 commits into
mainfrom
issue-23663

Conversation

@cocosheng-g
Copy link
Copy Markdown
Contributor

@cocosheng-g cocosheng-g commented May 5, 2026

Summary

This PR implements session export to a JSON file and import from a JSON file functionality, resolving issue #23663. It allows users to save their active conversation history and restore it later, even across different worktrees or environments.

Key Features

  • Export Session: Added a new built-in slash command /export-session <path> to save the current conversation record to a JSON file.
  • Import Session: Added a CLI flag --session-file <path> to bootstrap a new session from an exported JSON file.
  • Progress Feedback: Implemented a progress spinner for the /export-session command and a confirmation message in the history upon successful import.
  • Validation: Enforced mutual exclusivity between --session-file, --resume, and --session-id flags to prevent ambiguous configurations.
  • Robustness: Implemented "best effort" parsing for session imports, making it resilient to future structural changes and ensuring only relevant conversation messages are restored.

Details

  • UI Components: Created ExportSessionMessage.tsx for real-time export feedback.
  • Command Logic: Integrated setPendingItem into exportSessionCommand.ts for consistent UI behavior.
  • Config: Updated packages/cli/src/config/config.ts with enhanced validation logic.
  • Filtering: Refined history restoration in gemini.tsx to exclude transient system messages (e.g., update notifications) during import.

Related Issues

Closes #23663

How to Validate

  1. Build the package (npm run build).
  2. Start a session: gemini.
  3. Export: /export-session my-backup.json. Observe the progress spinner.
  4. Import: gemini --session-file my-backup.json. Observe history restoration and the "Imported session from..." confirmation message.
  5. Verify exclusivity: gemini --resume latest --session-file my-backup.json (Should fail with error message).
  6. Run tests: npm test -w packages/cli.

Pre-Merge Checklist

  • Updated relevant documentation (README/docs/)
  • Added comprehensive unit tests
  • Verified linting and formatting
  • Manually verified end-to-end workflow

@cocosheng-g cocosheng-g requested a review from a team as a code owner May 5, 2026 17:19
@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 introduces functionality to export and import conversation sessions, addressing issue #23663. By enabling users to persist their chat history to a file and resume it in a new session, this change improves workflow flexibility and session portability without compromising the original data.

Highlights

  • Session Export Command: Introduced a new /export-session <path> command that allows users to save the current active conversation to a JSON file.
  • Session Import Flag: Added a new --session-file <path> CLI flag to enable importing and resuming conversations from a previously exported JSON file.
  • Safe Import Logic: Implemented logic to ensure imported sessions are assigned a new local ID and path, preserving the integrity of the original exported file.
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 the 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 counterproductive. 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 implements session export and import functionality, allowing users to save conversations to JSON files via the /export-session command and resume them using the --session-file flag. Review feedback suggests updating the CliArgs interface to prevent TypeScript compilation errors, reusing the existing Storage instance in the export command to avoid redundancy, and updating session timestamps and persistence logic when importing to maintain UI consistency and history.

Comment thread packages/cli/src/config/config.ts
Comment thread packages/cli/src/ui/commands/exportSessionCommand.ts Outdated
Comment thread packages/cli/src/gemini.tsx
@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 implements session export and import functionality, allowing users to save active conversations to JSON files and resume them via a new CLI flag. The changes include a new /export-session command and logic to handle session restoration while maintaining data isolation. Feedback suggests using object destructuring for more maintainable metadata handling, updating the project hash on import to ensure correct session categorization, and fixing minor indentation issues for better readability.

Comment thread packages/cli/src/gemini.tsx Outdated
Comment thread packages/cli/src/gemini.tsx Outdated
Comment thread packages/cli/src/gemini.tsx Outdated
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 5, 2026

Size Change: +5.81 kB (+0.02%)

Total Size: 34 MB

Filename Size Change
./bundle/chunk-7DP53QUW.js 0 B -2.78 MB (removed) 🏆
./bundle/chunk-CU65WPCX.js 0 B -3.43 kB (removed) 🏆
./bundle/chunk-F334ZGJX.js 0 B -19.5 kB (removed) 🏆
./bundle/chunk-GFLFE6T6.js 0 B -49.2 kB (removed) 🏆
./bundle/chunk-LTKMPO5I.js 0 B -12.5 kB (removed) 🏆
./bundle/chunk-ULSQK5RQ.js 0 B -3.8 kB (removed) 🏆
./bundle/chunk-VOTFE6OJ.js 0 B -14.8 MB (removed) 🏆
./bundle/chunk-WNHPOQQI.js 0 B -658 kB (removed) 🏆
./bundle/core-CQW7I7GP.js 0 B -48.8 kB (removed) 🏆
./bundle/devtoolsService-GRUSXWI7.js 0 B -28 kB (removed) 🏆
./bundle/gemini-NQRNFRNM.js 0 B -584 kB (removed) 🏆
./bundle/interactiveCli-FKRSGTXQ.js 0 B -1.29 MB (removed) 🏆
./bundle/liteRtServerManager-BIXC7P5O.js 0 B -2.11 kB (removed) 🏆
./bundle/oauth2-provider-LT4O4KOI.js 0 B -9.16 kB (removed) 🏆
./bundle/chunk-3ZVWEWVS.js 658 kB +658 kB (new file) 🆕
./bundle/chunk-5HEARWYH.js 3.8 kB +3.8 kB (new file) 🆕
./bundle/chunk-GHU5SYGZ.js 49.2 kB +49.2 kB (new file) 🆕
./bundle/chunk-GICOQCID.js 3.43 kB +3.43 kB (new file) 🆕
./bundle/chunk-SHC6ZXM2.js 19.5 kB +19.5 kB (new file) 🆕
./bundle/chunk-W24QD2JA.js 12.5 kB +12.5 kB (new file) 🆕
./bundle/chunk-WIYMQK7U.js 2.78 MB +2.78 MB (new file) 🆕
./bundle/chunk-ZJSY7C7X.js 14.8 MB +14.8 MB (new file) 🆕
./bundle/core-JZXBGNKP.js 48.8 kB +48.8 kB (new file) 🆕
./bundle/devtoolsService-K4GAXUBF.js 28 kB +28 kB (new file) 🆕
./bundle/gemini-N3LFASHL.js 586 kB +586 kB (new file) 🆕
./bundle/interactiveCli-TWEABSCG.js 1.29 MB +1.29 MB (new file) 🆕
./bundle/liteRtServerManager-A6VSLCYV.js 2.11 kB +2.11 kB (new file) 🆕
./bundle/oauth2-provider-D7EULIYN.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-VJSUVOZ4.js 1.97 MB 0 B
./bundle/cleanup-W73Q52VV.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-NGHTMHWQ.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-AWPC6QG3.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-2DIGJRJA.js 932 B +932 B (new file) 🆕
./bundle/start-VCUZ4B7O.js 652 B +652 B (new file) 🆕

compressed-size-action

@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 May 5, 2026
@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 introduces functionality to import and export chat sessions. It adds a new --session-file CLI option to initialize a session from a JSON file and a /export-session slash command to save the current session state. Feedback suggests enforcing mutual exclusivity between the --session-file, --resume, and --session-id flags in the CLI configuration to prevent ambiguous startup behavior.

Comment thread packages/cli/src/config/config.ts
@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 introduces functionality to export and import chat sessions. It adds a new /export-session slash command to save the current session to a JSON file and a --session-file CLI flag to initialize a new session from an exported file. The changes include mutual exclusivity logic for session flags, updated session resolution to handle file imports with message filtering, and new UI components to display export status. I have no feedback to provide as no review comments were submitted.

@cocosheng-g cocosheng-g enabled auto-merge May 6, 2026 19:35
@cocosheng-g cocosheng-g added this pull request to the merge queue May 8, 2026
Merged via the queue into main with commit 3805640 May 8, 2026
27 checks passed
@cocosheng-g cocosheng-g deleted the issue-23663 branch May 8, 2026 16:07
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.

feat: Export session to file for sharing

2 participants