netcodex-agent-exporter 0.3.1__tar.gz → 0.3.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/PKG-INFO +52 -21
  2. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/README.md +51 -20
  3. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/pyproject.toml +1 -1
  4. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/__init__.py +1 -1
  5. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/cli.py +46 -0
  6. netcodex_agent_exporter-0.3.2/src/netcodex/sources/locations.py +565 -0
  7. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/api.py +1 -0
  8. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/404/index.html +1 -1
  9. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/404.html +1 -1
  10. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/__next.__PAGE__.txt +2 -2
  11. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/__next._full.txt +3 -3
  12. {netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/app → netcodex_agent_exporter-0.3.2/src/netcodex/web/desk}/__next._head.txt +1 -1
  13. {netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/app → netcodex_agent_exporter-0.3.2/src/netcodex/web/desk}/__next._index.txt +2 -2
  14. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/__next._tree.txt +2 -2
  15. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/0xs948yx7egqf.js +1 -0
  16. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/16x2ab5tjuq8p.js +1 -0
  17. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/1zrw-wzjvs1a7.js +1 -0
  18. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/1zz7ddvqh9xr5.js +1 -0
  19. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/24w1ykbgdtn0d.js +1 -0
  20. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/27gsbatdo0vgh.js +10 -0
  21. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/2cnskixvc-f-1.js +1 -0
  22. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/2wfuz7opg3uv2.js +20 -0
  23. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/3rbfc1m17ic0f.css +1 -0
  24. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_not-found/__next._full.txt +2 -2
  25. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_not-found/__next._head.txt +1 -1
  26. {netcodex_agent_exporter-0.3.1/src/netcodex/web/desk → netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_not-found}/__next._index.txt +2 -2
  27. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_not-found/__next._not-found.__PAGE__.txt +1 -1
  28. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_not-found/__next._not-found.txt +1 -1
  29. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_not-found/__next._tree.txt +2 -2
  30. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_not-found/index.html +1 -1
  31. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_not-found/index.txt +2 -2
  32. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/app/__next._full.txt +3 -3
  33. {netcodex_agent_exporter-0.3.1/src/netcodex/web/desk → netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/app}/__next._head.txt +1 -1
  34. {netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/_not-found → netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/app}/__next._index.txt +2 -2
  35. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/app/__next._tree.txt +2 -2
  36. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/app/__next.app.__PAGE__.txt +2 -2
  37. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/app/__next.app.txt +1 -1
  38. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/app/index.html +1 -0
  39. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/app/index.txt +3 -3
  40. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/index.html +1 -0
  41. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/index.txt +3 -3
  42. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/install/__next._full.txt +3 -3
  43. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/install/__next._head.txt +1 -1
  44. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/install/__next._index.txt +2 -2
  45. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/install/__next._tree.txt +2 -2
  46. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/install/__next.install.__PAGE__.txt +1 -1
  47. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/install/__next.install.txt +1 -1
  48. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/install/index.html +2 -2
  49. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/install/index.txt +3 -3
  50. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/where/__next._full.txt +16 -0
  51. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/where/__next._head.txt +5 -0
  52. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/where/__next._index.txt +5 -0
  53. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/where/__next._tree.txt +2 -0
  54. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/where/__next.where.__PAGE__.txt +6 -0
  55. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/where/__next.where.txt +5 -0
  56. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/where/index.html +1 -0
  57. netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/where/index.txt +16 -0
  58. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/local_api.py +55 -1
  59. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/local_ui.py +2 -0
  60. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/golden/claude-conversation.md +1 -1
  61. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/golden/claude-v2.md +1 -1
  62. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/golden/codex-conversation.md +1 -1
  63. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/golden/codex-v2-full.md +1 -1
  64. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/golden/codex-v2.md +1 -1
  65. netcodex_agent_exporter-0.3.2/tests/test_locations.py +211 -0
  66. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_web_api.py +1 -0
  67. netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/_next/static/chunks/1c7l_q7rq2_nh.css +0 -1
  68. netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/_next/static/chunks/2in-76hszzdcc.js +0 -1
  69. netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/_next/static/chunks/2xmdff81jux0v.js +0 -9
  70. netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/_next/static/chunks/3-87v6ku7q1kc.js +0 -1
  71. netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/_next/static/chunks/3yy47dphzbvkm.js +0 -20
  72. netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/app/index.html +0 -1
  73. netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/index.html +0 -1
  74. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/.gitignore +0 -0
  75. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/LICENSE +0 -0
  76. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/scripts/netcodex_entry.py +0 -0
  77. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/incremental.py +0 -0
  78. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/models.py +0 -0
  79. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/renderers/__init__.py +0 -0
  80. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/renderers/markdown.py +0 -0
  81. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/renderers/quarkdown.py +0 -0
  82. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/security/__init__.py +0 -0
  83. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/security/redaction.py +0 -0
  84. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/services.py +0 -0
  85. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/__init__.py +0 -0
  86. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/aider.py +0 -0
  87. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/antigravity.py +0 -0
  88. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/claude.py +0 -0
  89. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/claude_ai.py +0 -0
  90. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/cline.py +0 -0
  91. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/codex.py +0 -0
  92. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/common.py +0 -0
  93. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/continue_dev.py +0 -0
  94. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/copilot_chat.py +0 -0
  95. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/copilot_cli.py +0 -0
  96. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/cursor.py +0 -0
  97. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/encrypted.py +0 -0
  98. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/gemini_cli.py +0 -0
  99. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/paths.py +0 -0
  100. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/registry.py +0 -0
  101. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/__init__.py +0 -0
  102. {netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/_next/static/QDvqk36mcKcX8Tfw5H4iP → netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/I0mRqzUWWnK0TU4TefL86}/_buildManifest.js +0 -0
  103. {netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/_next/static/QDvqk36mcKcX8Tfw5H4iP → netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/I0mRqzUWWnK0TU4TefL86}/_clientMiddlewareManifest.js +0 -0
  104. {netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/_next/static/QDvqk36mcKcX8Tfw5H4iP → netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/I0mRqzUWWnK0TU4TefL86}/_ssgManifest.js +0 -0
  105. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_next/static/chunks/05-c3ty_6dwfk.js +0 -0
  106. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_next/static/chunks/0cz1d0mv5g_q7.js +0 -0
  107. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_next/static/chunks/0y-qmi6py9vt0.js +0 -0
  108. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_next/static/chunks/14mrh2-p_w84d.js +0 -0
  109. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_next/static/chunks/15orcrkp-_9ct.js +0 -0
  110. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_next/static/chunks/1rxncug86bump.js +0 -0
  111. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_next/static/chunks/2nykiepra7i1k.js +0 -0
  112. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_next/static/chunks/3z5q_p4msz2ha.js +0 -0
  113. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_next/static/chunks/turbopack-1_6kmb9wb6nxy.js +0 -0
  114. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/brand/netcodex-logo-v2-icon.png +0 -0
  115. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/brand/netcodex-logo-v2.png +0 -0
  116. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/brand/netcodex-logo.png +0 -0
  117. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/static/local.html +0 -0
  118. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/conftest.py +0 -0
  119. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/claude/normal-session.jsonl +0 -0
  120. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/claude/session-fixture.jsonl +0 -0
  121. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/claude_v2/home/.claude/projects/C--Users-Example-app/aaaaaaaa-1111-4222-8333-444444444444/subagents/agent-a1b2.jsonl +0 -0
  122. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/claude_v2/home/.claude/projects/C--Users-Example-app/aaaaaaaa-1111-4222-8333-444444444444/subagents/agent-a1b2.meta.json +0 -0
  123. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/claude_v2/home/.claude/projects/C--Users-Example-app/aaaaaaaa-1111-4222-8333-444444444444.jsonl +0 -0
  124. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/claude_v2/home/.claude/projects/C--Users-Example-app/bbbbbbbb-1111-4222-8333-444444444444.jsonl +0 -0
  125. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/claude_v2/home/AppData/Roaming/Claude/claude-code-sessions/acct-1/org-1/local_d1.json +0 -0
  126. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/claude_v2/home/AppData/Roaming/Claude/local-agent-mode-sessions/acct-1/org-1/local_c1/.claude/projects/-sessions-keen-gauss/cccccccc-1111-4222-8333-444444444444.jsonl +0 -0
  127. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/claude_v2/home/AppData/Roaming/Claude/local-agent-mode-sessions/acct-1/org-1/local_c1.json +0 -0
  128. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/codex/sessions/2026/06/07/rollout-fixture.jsonl +0 -0
  129. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/codex_v2/archived_sessions/rollout-2026-06-01T09-00-00-99999999-8888-4777-8666-555555555555.jsonl +0 -0
  130. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/codex_v2/session_index.jsonl +0 -0
  131. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/codex_v2/sessions/2026/06/08/rollout-2026-06-08T10-00-00-11111111-2222-4333-8444-555555555555.jsonl +0 -0
  132. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/codex_v2/sessions/2026/06/08/rollout-2026-06-08T10-00-10-66666666-7777-4888-9999-aaaaaaaaaaaa.jsonl +0 -0
  133. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/golden/claude-conversation.qd +0 -0
  134. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/appdata/Code/User/globalStorage/kilocode.kilo-code/tasks/1781000100000/api_conversation_history.json +0 -0
  135. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/appdata/Code/User/globalStorage/kilocode.kilo-code/tasks/1781000100000/ui_messages.json +0 -0
  136. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/appdata/Code/User/workspaceStorage/0a1b2c3d/chatSessions/copilot-session-1.jsonl +0 -0
  137. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/appdata/Code/User/workspaceStorage/0a1b2c3d/chatSessions/empty-session.json +0 -0
  138. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/appdata/Code/User/workspaceStorage/0a1b2c3d/chatSessions/legacy-session.json +0 -0
  139. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/appdata/Code/User/workspaceStorage/0a1b2c3d/workspace.json +0 -0
  140. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/home/.continue/sessions/continue-1.json +0 -0
  141. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/home/.continue/sessions/sessions.json +0 -0
  142. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/home/.copilot/session-state/cli-session-1/events.jsonl +0 -0
  143. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/home/.copilot/session-state/cli-session-1/workspace.yaml +0 -0
  144. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/home/.gemini/tmp/projhash1/chats/session-2026-06-13T10-00-abc.json +0 -0
  145. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/home/.gemini/tmp/projhash2/logs.json +0 -0
  146. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/home/Downloads/claude-export/conversations.json +0 -0
  147. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/home/code/webshop/.aider.chat.history.md +0 -0
  148. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_cli.py +0 -0
  149. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_export_layout.py +0 -0
  150. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_golden_outputs.py +0 -0
  151. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_incremental.py +0 -0
  152. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_local_ui.py +0 -0
  153. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_redaction.py +0 -0
  154. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_registry_export_all.py +0 -0
  155. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_renderers.py +0 -0
  156. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_sources.py +0 -0
  157. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_sources_antigravity.py +0 -0
  158. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_sources_cli_tools.py +0 -0
  159. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_sources_v2.py +0 -0
  160. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_sources_vscode_family.py +0 -0
  161. {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_workflow_manifest.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: netcodex-agent-exporter
3
- Version: 0.3.1
3
+ Version: 0.3.2
4
4
  Summary: Local-first exporter for AI agent conversations (Codex, Claude Code, Copilot, Cline, Cursor, Gemini CLI and more) to Markdown.
5
5
  Project-URL: Homepage, https://gitlab.com/netcodex-tech/agent-conversation-exporter
6
6
  Project-URL: Repository, https://gitlab.com/netcodex-tech/agent-conversation-exporter
@@ -41,24 +41,44 @@ and Codex into Markdown, Quarkdown and PDF.
41
41
 
42
42
  ## Status
43
43
 
44
- Version 0.2 ("correct exports"). Supported sources:
45
-
46
- | Source | Where it is read from | Client labels (`tool`) |
47
- | --- | --- | --- |
48
- | Codex CLI / VS Code extension / Codex Desktop | `$CODEX_HOME` or `~/.codex`: newest `state_*.sqlite` (`threads`, `thread_spawn_edges`), `session_index.jsonl` titles, rollout JSONL in `sessions/` and `archived_sessions/` | `codex-cli`, `codex-vscode`, `codex-desktop` |
49
- | Claude Code CLI / VS Code | `$CLAUDE_CONFIG_DIR/projects` or `~/.claude/projects/**/<session>.jsonl`; subagents in `<session>/subagents/agent-*.jsonl` are grouped under their parent | `claude-code-cli`, `claude-code-vscode` |
50
- | Claude desktop "Code" tab | Same JSONL, titled from `%APPDATA%/Claude/claude-code-sessions/**/local_*.json` | `claude-desktop` |
51
- | Claude desktop Cowork | `%APPDATA%/Claude/local-agent-mode-sessions/**/local_<id>.json` + `local_<id>/.claude/projects/**/*.jsonl` | `claude-cowork` |
52
- | GitHub Copilot Chat (`copilot-chat`) | `<editor>/User/workspaceStorage/*/chatSessions/*.jsonl` (operation log) or `.json`, `globalStorage/emptyWindowChatSessions` in every VS Code-family editor | `copilot-chat-<editor>` |
53
- | Cline / Roo Code / Kilo Code (`cline`) | `<editor>/User/globalStorage/<extension>/tasks/<id>/api_conversation_history.json` | `cline-*`, `roo-code-*`, `kilo-code-*` |
54
- | Cursor (`cursor`) | `Cursor/User/globalStorage/state.vscdb` (`cursorDiskKV` composer + bubbles) | `cursor` |
55
- | GitHub Copilot CLI (`copilot-cli`) | `~/.copilot/session-state/<id>/events.jsonl` | `copilot-cli` |
56
- | Gemini CLI (`gemini-cli`) | `~/.gemini/tmp/<hash>/chats/session-*.json`, `logs.json` | `gemini-cli` |
57
- | Continue (`continue`) | `~/.continue/sessions/*.json` | `continue` |
58
- | Aider (`aider`) | `.aider.chat.history.md` in repos under `NETCODEX_AIDER_PATHS` or the home folder (depth 3) | `aider` |
59
- | claude.ai chats (`claude-ai`) | Official export ZIP / `conversations.json` from `NETCODEX_CLAUDE_AI_EXPORT` or `~/Downloads` | `claude-ai` |
60
- | Google Antigravity (`antigravity`) | `~/.gemini/antigravity/conversation_summaries.db` + `conversations/*.db` (schemaless protobuf, best effort; legacy encrypted `.pb` skipped) | `antigravity` |
61
- | Trae, Windsurf (`trae`, `windsurf`) | Encrypted stores: reported by `netcodex sources`, not exported | - |
44
+ Version 0.3. Supported tools, where each one keeps its chats, and how to import them
45
+ (`netcodex where` prints the same table with the paths that exist on your machine).
46
+
47
+ ### Where are my chats?
48
+
49
+ <!-- netcodex:where:start (generated by scripts/export_locations.py) -->
50
+ | Tool | Status | Windows | macOS / Linux | Import via |
51
+ | --- | --- | --- | --- | --- |
52
+ | Codex CLI / VS Code / Desktop | supported; override: `CODEX_HOME` | `%USERPROFILE%\.codex\sessions\YYYY\MM\DD\rollout-*.jsonl`<br>`%USERPROFILE%\.codex\archived_sessions\rollout-*.jsonl`<br>`%USERPROFILE%\.codex\state_*.sqlite`<br>`%USERPROFILE%\.codex\session_index.jsonl` | `~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl`<br>`~/.codex/archived_sessions/rollout-*.jsonl`<br>`~/.codex/state_*.sqlite`<br>`~/.codex/session_index.jsonl` | Upload files, Local sources, CLI |
53
+ | Claude Code CLI / VS Code | supported; override: `CLAUDE_CONFIG_DIR` | `%USERPROFILE%\.claude\projects\<project>\<session>.jsonl` | `~/.claude/projects/<project>/<session>.jsonl` | Upload files, Local sources, CLI |
54
+ | Claude Desktop (Code tab) | supported; override: `CLAUDE_CONFIG_DIR` | `%APPDATA%\Claude\claude-code-sessions\**\local_*.json`<br>`%USERPROFILE%\.claude\projects\<project>\<session>.jsonl` | `<config>/Claude/claude-code-sessions/**/local_*.json`<br>`~/.claude/projects/<project>/<session>.jsonl` | Local sources, CLI |
55
+ | Claude Cowork | supported | `%APPDATA%\Claude\local-agent-mode-sessions\**\local_<id>.json`<br>`%APPDATA%\Claude\local-agent-mode-sessions\**\local_<id>\.claude\projects\**\*.jsonl` | `<config>/Claude/local-agent-mode-sessions/**/local_<id>.json`<br>`<config>/Claude/local-agent-mode-sessions/**/local_<id>/.claude/projects/**/*.jsonl` | Local sources, CLI |
56
+ | Claude.ai (official data export) | supported; override: `NETCODEX_CLAUDE_AI_EXPORT` | `%USERPROFILE%\Downloads\data-*.zip`<br>`%USERPROFILE%\Downloads\<folder>\conversations.json` | `~/Downloads/data-*.zip`<br>`~/Downloads/<folder>/conversations.json` | Local sources, CLI |
57
+ | GitHub Copilot Chat | supported | `%APPDATA%\<editor>\User\workspaceStorage\<hash>\chatSessions\*.jsonl`<br>`%APPDATA%\<editor>\User\workspaceStorage\<hash>\chatSessions\*.json`<br>`%APPDATA%\<editor>\User\globalStorage\emptyWindowChatSessions\*.json` | `<config>/<editor>/User/workspaceStorage/<hash>/chatSessions/*.jsonl`<br>`<config>/<editor>/User/workspaceStorage/<hash>/chatSessions/*.json`<br>`<config>/<editor>/User/globalStorage/emptyWindowChatSessions/*.json` | Local sources, CLI |
58
+ | GitHub Copilot CLI | supported | `%USERPROFILE%\.copilot\session-state\<id>\events.jsonl` | `~/.copilot/session-state/<id>/events.jsonl` | Local sources, CLI |
59
+ | Cline / Roo Code / Kilo Code | supported | `%APPDATA%\<editor>\User\globalStorage\saoudrizwan.claude-dev\tasks\<id>\api_conversation_history.json`<br>`%APPDATA%\<editor>\User\globalStorage\rooveterinaryinc.roo-cline\tasks\<id>\api_conversation_history.json`<br>`%APPDATA%\<editor>\User\globalStorage\kilocode.kilo-code\tasks\<id>\api_conversation_history.json` | `<config>/<editor>/User/globalStorage/saoudrizwan.claude-dev/tasks/<id>/api_conversation_history.json`<br>`<config>/<editor>/User/globalStorage/rooveterinaryinc.roo-cline/tasks/<id>/api_conversation_history.json`<br>`<config>/<editor>/User/globalStorage/kilocode.kilo-code/tasks/<id>/api_conversation_history.json` | Local sources, CLI |
60
+ | Cursor | supported | `%APPDATA%\Cursor\User\globalStorage\state.vscdb` | `<config>/Cursor/User/globalStorage/state.vscdb` | Local sources, CLI |
61
+ | Gemini CLI | supported | `%USERPROFILE%\.gemini\tmp\<hash>\chats\session-*.json`<br>`%USERPROFILE%\.gemini\tmp\<hash>\logs.json` | `~/.gemini/tmp/<hash>/chats/session-*.json`<br>`~/.gemini/tmp/<hash>/logs.json` | Local sources, CLI |
62
+ | Continue | supported | `%USERPROFILE%\.continue\sessions\*.json` | `~/.continue/sessions/*.json` | Local sources, CLI |
63
+ | Aider | supported; override: `NETCODEX_AIDER_PATHS` | `<repo>\.aider.chat.history.md` | `<repo>/.aider.chat.history.md` | Local sources, CLI |
64
+ | Google Antigravity | best effort | `%USERPROFILE%\.gemini\antigravity\conversation_summaries.db`<br>`%USERPROFILE%\.gemini\antigravity\conversations\*.db` | `~/.gemini/antigravity/conversation_summaries.db`<br>`~/.gemini/antigravity/conversations/*.db` | Local sources, CLI |
65
+ | Trae | encrypted, not supported | `%APPDATA%\Trae\ModularData\ai-agent\database.db`<br>`%APPDATA%\Trae CN\ModularData\ai-agent\database.db` | `<config>/Trae/ModularData/ai-agent/database.db`<br>`<config>/Trae CN/ModularData/ai-agent/database.db` | - |
66
+ | Windsurf | encrypted, not supported | `%USERPROFILE%\.codeium\windsurf\cascade\*.pb` | `~/.codeium/windsurf/cascade/*.pb` | - |
67
+
68
+ `<config>` is `~/Library/Application Support` on macOS and `~/.config` on Linux. `<editor>` is any VS Code-family editor: Code, Code - Insiders, VSCodium, Cursor, Windsurf, Trae, Trae CN, Antigravity, Kiro, Positron.
69
+ <!-- netcodex:where:end -->
70
+
71
+ Find them on your machine with `netcodex where` (`--json`, `--patterns`), or open the desk
72
+ (`netcodex ui`) and click **Where are my chats?**: it lists every tool with its status, the
73
+ resolved folder on this computer (Copy path / Open folder) and what to import. Encrypted
74
+ stores (current Trae, Windsurf) are reported but cannot be exported. claude.ai chats are not
75
+ stored locally: request the official data export (Settings > Privacy > Export data) and save
76
+ the `data-*.zip` / `conversations.json` in Downloads or point `NETCODEX_CLAUDE_AI_EXPORT` at it.
77
+
78
+ Client labels written to the `tool` field: `codex-cli`, `codex-vscode`, `codex-desktop`,
79
+ `claude-code-cli`, `claude-code-vscode`, `claude-desktop`, `claude-cowork`,
80
+ `copilot-chat-<editor>`, `cline-*`, `roo-code-*`, `kilo-code-*`, `cursor`, `copilot-cli`,
81
+ `gemini-cli`, `continue`, `aider`, `claude-ai`, `antigravity`.
62
82
 
63
83
  All parsers map to one canonical model (`Conversation` -> `Turn` -> `MessagePart`
64
84
  with `text`, `tool_call`, `tool_result`, `reasoning`, `image`, `attachment`,
@@ -98,8 +118,12 @@ netcodex --version
98
118
  JSONL/SQLite/ZIP files with source auto-detection, a **Local sources** tab that reads the
99
119
  detected tools directly (Codex, Claude Code, Copilot, Cline, Cursor, Gemini CLI, ...),
100
120
  MD/QD/PDF formats with Quarkdown templates, the Upload > Analyze > Review > Export > Done
101
- tracker, a system activity log, the Markdown/HTML preview and the export summary with the
102
- ZIP download. QD and PDF need the Quarkdown CLI; the desk says so when it is missing.
121
+ tracker, a system activity log, the preview and the export summary with the ZIP download.
122
+ The preview shows the Quarkdown HTML for QD/PDF exports and a rendered (sanitized) Markdown
123
+ view for Markdown-only exports, plus the Markdown source tab. **Where are my chats?** (header
124
+ button and Upload rail link) lists every supported tool with its status, the folder found on
125
+ this computer (Copy path / Open folder) and what to import. QD and PDF need the Quarkdown CLI;
126
+ the desk says so when it is missing.
103
127
 
104
128
  Everything runs on 127.0.0.1: `--host` with a non-loopback address is refused unless
105
129
  `--allow-remote` is given, API calls need the per-launch token from the URL (exchanged
@@ -125,6 +149,8 @@ uv run netcodex --help
125
149
 
126
150
  ```powershell
127
151
  uv run netcodex sources # registered sources, found / not found
152
+ uv run netcodex where # where each tool keeps its chats, and what is on this machine
153
+ uv run netcodex where --json # same, machine-readable (also: sources --paths)
128
154
  uv run netcodex scan --sources all
129
155
  uv run netcodex analyze --source auto --json
130
156
  uv run netcodex export --all --out exports # every available source, every session
@@ -155,6 +181,11 @@ uv run netcodex watch --out exports --interval 60 # Ctrl+C to stop
155
181
 
156
182
  Large exports use worker processes (`--jobs`, default automatic, up to 4).
157
183
 
184
+ The "Where are my chats?" table above, `netcodex where`, the desk help panel and the public
185
+ `/where` page all come from `netcodex.sources.locations`. After changing it, regenerate the
186
+ README table and `web/lib/chat-locations.json` with `uv run python scripts/export_locations.py`
187
+ (a test fails while they are out of date).
188
+
158
189
  Sources live in a registry (`netcodex.sources.registry`). Store locations come
159
190
  from a per-platform path matrix (`netcodex.sources.paths`: Windows
160
191
  `%APPDATA%`, macOS `~/Library/Application Support`, Linux `~/.config`) that also
@@ -5,24 +5,44 @@ and Codex into Markdown, Quarkdown and PDF.
5
5
 
6
6
  ## Status
7
7
 
8
- Version 0.2 ("correct exports"). Supported sources:
9
-
10
- | Source | Where it is read from | Client labels (`tool`) |
11
- | --- | --- | --- |
12
- | Codex CLI / VS Code extension / Codex Desktop | `$CODEX_HOME` or `~/.codex`: newest `state_*.sqlite` (`threads`, `thread_spawn_edges`), `session_index.jsonl` titles, rollout JSONL in `sessions/` and `archived_sessions/` | `codex-cli`, `codex-vscode`, `codex-desktop` |
13
- | Claude Code CLI / VS Code | `$CLAUDE_CONFIG_DIR/projects` or `~/.claude/projects/**/<session>.jsonl`; subagents in `<session>/subagents/agent-*.jsonl` are grouped under their parent | `claude-code-cli`, `claude-code-vscode` |
14
- | Claude desktop "Code" tab | Same JSONL, titled from `%APPDATA%/Claude/claude-code-sessions/**/local_*.json` | `claude-desktop` |
15
- | Claude desktop Cowork | `%APPDATA%/Claude/local-agent-mode-sessions/**/local_<id>.json` + `local_<id>/.claude/projects/**/*.jsonl` | `claude-cowork` |
16
- | GitHub Copilot Chat (`copilot-chat`) | `<editor>/User/workspaceStorage/*/chatSessions/*.jsonl` (operation log) or `.json`, `globalStorage/emptyWindowChatSessions` in every VS Code-family editor | `copilot-chat-<editor>` |
17
- | Cline / Roo Code / Kilo Code (`cline`) | `<editor>/User/globalStorage/<extension>/tasks/<id>/api_conversation_history.json` | `cline-*`, `roo-code-*`, `kilo-code-*` |
18
- | Cursor (`cursor`) | `Cursor/User/globalStorage/state.vscdb` (`cursorDiskKV` composer + bubbles) | `cursor` |
19
- | GitHub Copilot CLI (`copilot-cli`) | `~/.copilot/session-state/<id>/events.jsonl` | `copilot-cli` |
20
- | Gemini CLI (`gemini-cli`) | `~/.gemini/tmp/<hash>/chats/session-*.json`, `logs.json` | `gemini-cli` |
21
- | Continue (`continue`) | `~/.continue/sessions/*.json` | `continue` |
22
- | Aider (`aider`) | `.aider.chat.history.md` in repos under `NETCODEX_AIDER_PATHS` or the home folder (depth 3) | `aider` |
23
- | claude.ai chats (`claude-ai`) | Official export ZIP / `conversations.json` from `NETCODEX_CLAUDE_AI_EXPORT` or `~/Downloads` | `claude-ai` |
24
- | Google Antigravity (`antigravity`) | `~/.gemini/antigravity/conversation_summaries.db` + `conversations/*.db` (schemaless protobuf, best effort; legacy encrypted `.pb` skipped) | `antigravity` |
25
- | Trae, Windsurf (`trae`, `windsurf`) | Encrypted stores: reported by `netcodex sources`, not exported | - |
8
+ Version 0.3. Supported tools, where each one keeps its chats, and how to import them
9
+ (`netcodex where` prints the same table with the paths that exist on your machine).
10
+
11
+ ### Where are my chats?
12
+
13
+ <!-- netcodex:where:start (generated by scripts/export_locations.py) -->
14
+ | Tool | Status | Windows | macOS / Linux | Import via |
15
+ | --- | --- | --- | --- | --- |
16
+ | Codex CLI / VS Code / Desktop | supported; override: `CODEX_HOME` | `%USERPROFILE%\.codex\sessions\YYYY\MM\DD\rollout-*.jsonl`<br>`%USERPROFILE%\.codex\archived_sessions\rollout-*.jsonl`<br>`%USERPROFILE%\.codex\state_*.sqlite`<br>`%USERPROFILE%\.codex\session_index.jsonl` | `~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl`<br>`~/.codex/archived_sessions/rollout-*.jsonl`<br>`~/.codex/state_*.sqlite`<br>`~/.codex/session_index.jsonl` | Upload files, Local sources, CLI |
17
+ | Claude Code CLI / VS Code | supported; override: `CLAUDE_CONFIG_DIR` | `%USERPROFILE%\.claude\projects\<project>\<session>.jsonl` | `~/.claude/projects/<project>/<session>.jsonl` | Upload files, Local sources, CLI |
18
+ | Claude Desktop (Code tab) | supported; override: `CLAUDE_CONFIG_DIR` | `%APPDATA%\Claude\claude-code-sessions\**\local_*.json`<br>`%USERPROFILE%\.claude\projects\<project>\<session>.jsonl` | `<config>/Claude/claude-code-sessions/**/local_*.json`<br>`~/.claude/projects/<project>/<session>.jsonl` | Local sources, CLI |
19
+ | Claude Cowork | supported | `%APPDATA%\Claude\local-agent-mode-sessions\**\local_<id>.json`<br>`%APPDATA%\Claude\local-agent-mode-sessions\**\local_<id>\.claude\projects\**\*.jsonl` | `<config>/Claude/local-agent-mode-sessions/**/local_<id>.json`<br>`<config>/Claude/local-agent-mode-sessions/**/local_<id>/.claude/projects/**/*.jsonl` | Local sources, CLI |
20
+ | Claude.ai (official data export) | supported; override: `NETCODEX_CLAUDE_AI_EXPORT` | `%USERPROFILE%\Downloads\data-*.zip`<br>`%USERPROFILE%\Downloads\<folder>\conversations.json` | `~/Downloads/data-*.zip`<br>`~/Downloads/<folder>/conversations.json` | Local sources, CLI |
21
+ | GitHub Copilot Chat | supported | `%APPDATA%\<editor>\User\workspaceStorage\<hash>\chatSessions\*.jsonl`<br>`%APPDATA%\<editor>\User\workspaceStorage\<hash>\chatSessions\*.json`<br>`%APPDATA%\<editor>\User\globalStorage\emptyWindowChatSessions\*.json` | `<config>/<editor>/User/workspaceStorage/<hash>/chatSessions/*.jsonl`<br>`<config>/<editor>/User/workspaceStorage/<hash>/chatSessions/*.json`<br>`<config>/<editor>/User/globalStorage/emptyWindowChatSessions/*.json` | Local sources, CLI |
22
+ | GitHub Copilot CLI | supported | `%USERPROFILE%\.copilot\session-state\<id>\events.jsonl` | `~/.copilot/session-state/<id>/events.jsonl` | Local sources, CLI |
23
+ | Cline / Roo Code / Kilo Code | supported | `%APPDATA%\<editor>\User\globalStorage\saoudrizwan.claude-dev\tasks\<id>\api_conversation_history.json`<br>`%APPDATA%\<editor>\User\globalStorage\rooveterinaryinc.roo-cline\tasks\<id>\api_conversation_history.json`<br>`%APPDATA%\<editor>\User\globalStorage\kilocode.kilo-code\tasks\<id>\api_conversation_history.json` | `<config>/<editor>/User/globalStorage/saoudrizwan.claude-dev/tasks/<id>/api_conversation_history.json`<br>`<config>/<editor>/User/globalStorage/rooveterinaryinc.roo-cline/tasks/<id>/api_conversation_history.json`<br>`<config>/<editor>/User/globalStorage/kilocode.kilo-code/tasks/<id>/api_conversation_history.json` | Local sources, CLI |
24
+ | Cursor | supported | `%APPDATA%\Cursor\User\globalStorage\state.vscdb` | `<config>/Cursor/User/globalStorage/state.vscdb` | Local sources, CLI |
25
+ | Gemini CLI | supported | `%USERPROFILE%\.gemini\tmp\<hash>\chats\session-*.json`<br>`%USERPROFILE%\.gemini\tmp\<hash>\logs.json` | `~/.gemini/tmp/<hash>/chats/session-*.json`<br>`~/.gemini/tmp/<hash>/logs.json` | Local sources, CLI |
26
+ | Continue | supported | `%USERPROFILE%\.continue\sessions\*.json` | `~/.continue/sessions/*.json` | Local sources, CLI |
27
+ | Aider | supported; override: `NETCODEX_AIDER_PATHS` | `<repo>\.aider.chat.history.md` | `<repo>/.aider.chat.history.md` | Local sources, CLI |
28
+ | Google Antigravity | best effort | `%USERPROFILE%\.gemini\antigravity\conversation_summaries.db`<br>`%USERPROFILE%\.gemini\antigravity\conversations\*.db` | `~/.gemini/antigravity/conversation_summaries.db`<br>`~/.gemini/antigravity/conversations/*.db` | Local sources, CLI |
29
+ | Trae | encrypted, not supported | `%APPDATA%\Trae\ModularData\ai-agent\database.db`<br>`%APPDATA%\Trae CN\ModularData\ai-agent\database.db` | `<config>/Trae/ModularData/ai-agent/database.db`<br>`<config>/Trae CN/ModularData/ai-agent/database.db` | - |
30
+ | Windsurf | encrypted, not supported | `%USERPROFILE%\.codeium\windsurf\cascade\*.pb` | `~/.codeium/windsurf/cascade/*.pb` | - |
31
+
32
+ `<config>` is `~/Library/Application Support` on macOS and `~/.config` on Linux. `<editor>` is any VS Code-family editor: Code, Code - Insiders, VSCodium, Cursor, Windsurf, Trae, Trae CN, Antigravity, Kiro, Positron.
33
+ <!-- netcodex:where:end -->
34
+
35
+ Find them on your machine with `netcodex where` (`--json`, `--patterns`), or open the desk
36
+ (`netcodex ui`) and click **Where are my chats?**: it lists every tool with its status, the
37
+ resolved folder on this computer (Copy path / Open folder) and what to import. Encrypted
38
+ stores (current Trae, Windsurf) are reported but cannot be exported. claude.ai chats are not
39
+ stored locally: request the official data export (Settings > Privacy > Export data) and save
40
+ the `data-*.zip` / `conversations.json` in Downloads or point `NETCODEX_CLAUDE_AI_EXPORT` at it.
41
+
42
+ Client labels written to the `tool` field: `codex-cli`, `codex-vscode`, `codex-desktop`,
43
+ `claude-code-cli`, `claude-code-vscode`, `claude-desktop`, `claude-cowork`,
44
+ `copilot-chat-<editor>`, `cline-*`, `roo-code-*`, `kilo-code-*`, `cursor`, `copilot-cli`,
45
+ `gemini-cli`, `continue`, `aider`, `claude-ai`, `antigravity`.
26
46
 
27
47
  All parsers map to one canonical model (`Conversation` -> `Turn` -> `MessagePart`
28
48
  with `text`, `tool_call`, `tool_result`, `reasoning`, `image`, `attachment`,
@@ -62,8 +82,12 @@ netcodex --version
62
82
  JSONL/SQLite/ZIP files with source auto-detection, a **Local sources** tab that reads the
63
83
  detected tools directly (Codex, Claude Code, Copilot, Cline, Cursor, Gemini CLI, ...),
64
84
  MD/QD/PDF formats with Quarkdown templates, the Upload > Analyze > Review > Export > Done
65
- tracker, a system activity log, the Markdown/HTML preview and the export summary with the
66
- ZIP download. QD and PDF need the Quarkdown CLI; the desk says so when it is missing.
85
+ tracker, a system activity log, the preview and the export summary with the ZIP download.
86
+ The preview shows the Quarkdown HTML for QD/PDF exports and a rendered (sanitized) Markdown
87
+ view for Markdown-only exports, plus the Markdown source tab. **Where are my chats?** (header
88
+ button and Upload rail link) lists every supported tool with its status, the folder found on
89
+ this computer (Copy path / Open folder) and what to import. QD and PDF need the Quarkdown CLI;
90
+ the desk says so when it is missing.
67
91
 
68
92
  Everything runs on 127.0.0.1: `--host` with a non-loopback address is refused unless
69
93
  `--allow-remote` is given, API calls need the per-launch token from the URL (exchanged
@@ -89,6 +113,8 @@ uv run netcodex --help
89
113
 
90
114
  ```powershell
91
115
  uv run netcodex sources # registered sources, found / not found
116
+ uv run netcodex where # where each tool keeps its chats, and what is on this machine
117
+ uv run netcodex where --json # same, machine-readable (also: sources --paths)
92
118
  uv run netcodex scan --sources all
93
119
  uv run netcodex analyze --source auto --json
94
120
  uv run netcodex export --all --out exports # every available source, every session
@@ -119,6 +145,11 @@ uv run netcodex watch --out exports --interval 60 # Ctrl+C to stop
119
145
 
120
146
  Large exports use worker processes (`--jobs`, default automatic, up to 4).
121
147
 
148
+ The "Where are my chats?" table above, `netcodex where`, the desk help panel and the public
149
+ `/where` page all come from `netcodex.sources.locations`. After changing it, regenerate the
150
+ README table and `web/lib/chat-locations.json` with `uv run python scripts/export_locations.py`
151
+ (a test fails while they are out of date).
152
+
122
153
  Sources live in a registry (`netcodex.sources.registry`). Store locations come
123
154
  from a per-platform path matrix (`netcodex.sources.paths`: Windows
124
155
  `%APPDATA%`, macOS `~/Library/Application Support`, Linux `~/.config`) that also
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "netcodex-agent-exporter"
3
- version = "0.3.1"
3
+ version = "0.3.2"
4
4
  description = "Local-first exporter for AI agent conversations (Codex, Claude Code, Copilot, Cline, Cursor, Gemini CLI and more) to Markdown."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -2,5 +2,5 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.3.1"
5
+ __version__ = "0.3.2"
6
6
 
@@ -91,12 +91,58 @@ def analyze(
91
91
  typer.echo(f"warning: {warning}")
92
92
 
93
93
 
94
+ @app.command("where")
95
+ def where(
96
+ json_output: bool = typer.Option(False, "--json", help="Print machine-readable JSON."),
97
+ counts: bool = typer.Option(True, "--count/--no-count", help="Count the conversations found in each place."),
98
+ patterns: bool = typer.Option(False, "--patterns", help="Also print the generic path patterns for this OS."),
99
+ markdown: bool = typer.Option(False, "--markdown", help="Print the machine-independent Markdown table."),
100
+ ) -> None:
101
+ """Where are my chats? Storage folder of every supported tool, and what exists on this machine."""
102
+
103
+ from netcodex.sources.locations import STATUS_LABELS, machine_payload, markdown_table
104
+
105
+ if markdown:
106
+ typer.echo(markdown_table(), nl=False)
107
+ return
108
+ payload = machine_payload(with_counts=counts)
109
+ if json_output:
110
+ typer.echo(json.dumps(payload, indent=2))
111
+ return
112
+ platform = payload["platform"]
113
+ rows = []
114
+ for tool in payload["tools"]:
115
+ found = [item["path"] for item in tool["resolved"]]
116
+ detected = "" if tool["detected"] is None else str(tool["detected"])
117
+ rows.append((tool["name"], STATUS_LABELS[tool["status"]], detected, found, tool))
118
+ name_width = max(len(row[0]) for row in rows)
119
+ status_width = max(len(row[1]) for row in rows)
120
+ count_width = max(len("found"), *(len(row[2]) for row in rows))
121
+ typer.echo(f"{'tool':<{name_width}} {'status':<{status_width}} {'found':>{count_width}} path on this machine")
122
+ for name, status, detected, found, tool in rows:
123
+ first = found[0] if found else "(not found)"
124
+ typer.echo(f"{name:<{name_width}} {status:<{status_width}} {detected:>{count_width}} {first}")
125
+ indent = " " * (name_width + status_width + count_width + 6)
126
+ for extra in found[1:]:
127
+ typer.echo(f"{indent}{extra}")
128
+ if patterns:
129
+ for pattern in tool["patterns"][platform]:
130
+ typer.echo(f"{indent}pattern: {pattern}")
131
+ if payload["env_set"]:
132
+ typer.echo(f"overrides in effect: {', '.join(payload['env_set'])}")
133
+ typer.echo("found = conversations detected (encrypted tools: encrypted files). Details: netcodex where --json")
134
+
135
+
94
136
  @app.command("sources")
95
137
  def list_sources(
96
138
  json_output: bool = typer.Option(False, "--json", help="Print machine-readable JSON."),
139
+ paths: bool = typer.Option(False, "--paths", help="Show where each tool stores its chats (same as `where`)."),
97
140
  ) -> None:
98
141
  """List registered sources, whether their local store exists, and where they are read from."""
99
142
 
143
+ if paths:
144
+ where(json_output=json_output, counts=True, patterns=False, markdown=False)
145
+ return
100
146
  matrix = path_matrix()
101
147
  payload = []
102
148
  for info in registered():