Repository navigation
Conversation
There was a problem hiding this comment.
Reviewed head efab050c8d0cc00b5730961a94204ba198dd7a73 adversarially. The isolated Linux Python 3.11 suite passes (1,543 passed, 55 skipped), but three additional synthetic regression checks fail:
- [P1] Respect an explicit target home and require opt-in for Desktop writes (
claude.resolve_desktop_sessions_dir, default-path fallback;install_claude_artifact). Create an empty global~/.config/Claude/claude-code-sessions, then import a Codex session to Claude with a separatetarget_homeand no Desktop option. Alocal_<UUID>.jsonpointer is created in the global Desktop tree anyway. This changes an ordinary CLI import into a cross-store write outside the selected home. Do not auto-discover a global Desktop write target in this path. Require an explicit Desktop destination, and do not guess the account/organization from the newest pointer. - [P1] Pass the selected source UUID through the CLI loader (
cli.py, line 532). With two conversations inconversations.json,claude_cloud.parse_session(path, session_id=second_uuid)succeeds, buttransfer second_uuid --from claude-cloud --source-home conversations.json --to codex --home <isolated> --cwd <project>returns exit 2:discovered transcript metadata does not match the source UUID. The new optionalload_session(..., session_id=...)is never used here, so it always loads the first conversation. Thread the requested ID through every transfer path and reject ambiguous file conversion rather than silently choosing the first conversation. - [P2] Index every conversation in an export (
catalog._scan_new_portable_file, lines 2593–2596). Refreshing a directory containing that two-conversation export creates only the first conversation's row/title.claude_cloud.list_sessionsis never wired into the catalog. A root passed as the export file itself is also marked unavailable by the generic directory-only refresh guard. Use a multi-session inventory/source-reference path and add title selection, exact ID selection, and file/directory-root regression tests.
The existing tests only exercise Cloud conversion of a single selected/default conversation and explicit Desktop destinations. They do not cover these public CLI/catalog behaviors. There is also no actual Claude Desktop acceptance oracle for the generated pointers.
Desktop and cloud support expand the project's current terminal-harness scope; please discuss that separately in Discussions. These concrete correctness/isolation failures need resolving independently of that product decision.
— Codex (OpenAI coding agent, GPT-6.1-sol)
|
🟢 Contributor eligibility requirements met for @elijahr.
|
Summary
Adds support for Claude Desktop session discovery on import and migrating from Claude Cloud exports.
--to claude), writes the native Claude Code JSONL session to~/.claude/projects/and generates the companionlocal_<cliSessionId>.jsonpointer underclaude-code-sessions/<org_id>/<project_id>/so imported sessions appear simultaneously in both Claude Desktop and Claude Code CLI.claude-code-sessionsdirectories on macOS (~/Library/Application Support/Claude), Linux (~/.config/Claude), and Windows (%APPDATA%/Claude), with support for--claude-desktop-dirandCLAUDE_DESKTOP_CONFIG_DIR.cwd, falls back to the active org/project directory, or initializes the default00000000-0000-4000-8000-000000000001pair.AgentFormat.CLAUDE_CLOUD = "claude-cloud"read-only source adapter to ingest Claude.ai data export bundles (conversations.jsonor individual conversation JSON files).--from claude-cloudacrossinspect,convert,import, and catalog discovery.Validation
uv run ruff check .passed with 0 errors.uv run pytest -qpassed 1,543 tests, 55 skipped (100% pass rate).tests/test_claude_desktop.pyandtests/test_claude_cloud.pycovering desktop pointer generation, path resolution, collision handling, and cloud format ingestion.