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.
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/PKG-INFO +52 -21
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/README.md +51 -20
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/pyproject.toml +1 -1
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/__init__.py +1 -1
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/cli.py +46 -0
- netcodex_agent_exporter-0.3.2/src/netcodex/sources/locations.py +565 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/api.py +1 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/404/index.html +1 -1
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/404.html +1 -1
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/__next.__PAGE__.txt +2 -2
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/__next._full.txt +3 -3
- {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
- {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
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/__next._tree.txt +2 -2
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/0xs948yx7egqf.js +1 -0
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/16x2ab5tjuq8p.js +1 -0
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/1zrw-wzjvs1a7.js +1 -0
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/1zz7ddvqh9xr5.js +1 -0
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/24w1ykbgdtn0d.js +1 -0
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/27gsbatdo0vgh.js +10 -0
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/2cnskixvc-f-1.js +1 -0
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/2wfuz7opg3uv2.js +20 -0
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/_next/static/chunks/3rbfc1m17ic0f.css +1 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_not-found/__next._full.txt +2 -2
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_not-found/__next._head.txt +1 -1
- {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
- {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
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_not-found/__next._not-found.txt +1 -1
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_not-found/__next._tree.txt +2 -2
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_not-found/index.html +1 -1
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_not-found/index.txt +2 -2
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/app/__next._full.txt +3 -3
- {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
- {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
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/app/__next._tree.txt +2 -2
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/app/__next.app.__PAGE__.txt +2 -2
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/app/__next.app.txt +1 -1
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/app/index.html +1 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/app/index.txt +3 -3
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/index.html +1 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/index.txt +3 -3
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/install/__next._full.txt +3 -3
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/install/__next._head.txt +1 -1
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/install/__next._index.txt +2 -2
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/install/__next._tree.txt +2 -2
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/install/__next.install.__PAGE__.txt +1 -1
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/install/__next.install.txt +1 -1
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/install/index.html +2 -2
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/install/index.txt +3 -3
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/where/__next._full.txt +16 -0
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/where/__next._head.txt +5 -0
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/where/__next._index.txt +5 -0
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/where/__next._tree.txt +2 -0
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/where/__next.where.__PAGE__.txt +6 -0
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/where/__next.where.txt +5 -0
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/where/index.html +1 -0
- netcodex_agent_exporter-0.3.2/src/netcodex/web/desk/where/index.txt +16 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/local_api.py +55 -1
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/local_ui.py +2 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/golden/claude-conversation.md +1 -1
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/golden/claude-v2.md +1 -1
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/golden/codex-conversation.md +1 -1
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/golden/codex-v2-full.md +1 -1
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/golden/codex-v2.md +1 -1
- netcodex_agent_exporter-0.3.2/tests/test_locations.py +211 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_web_api.py +1 -0
- netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/_next/static/chunks/1c7l_q7rq2_nh.css +0 -1
- netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/_next/static/chunks/2in-76hszzdcc.js +0 -1
- netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/_next/static/chunks/2xmdff81jux0v.js +0 -9
- netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/_next/static/chunks/3-87v6ku7q1kc.js +0 -1
- netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/_next/static/chunks/3yy47dphzbvkm.js +0 -20
- netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/app/index.html +0 -1
- netcodex_agent_exporter-0.3.1/src/netcodex/web/desk/index.html +0 -1
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/.gitignore +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/LICENSE +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/scripts/netcodex_entry.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/incremental.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/models.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/renderers/__init__.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/renderers/markdown.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/renderers/quarkdown.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/security/__init__.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/security/redaction.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/services.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/__init__.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/aider.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/antigravity.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/claude.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/claude_ai.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/cline.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/codex.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/common.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/continue_dev.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/copilot_chat.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/copilot_cli.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/cursor.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/encrypted.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/gemini_cli.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/paths.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/sources/registry.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_next/static/chunks/0cz1d0mv5g_q7.js +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_next/static/chunks/0y-qmi6py9vt0.js +0 -0
- {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
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_next/static/chunks/15orcrkp-_9ct.js +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_next/static/chunks/1rxncug86bump.js +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_next/static/chunks/2nykiepra7i1k.js +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/_next/static/chunks/3z5q_p4msz2ha.js +0 -0
- {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
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/brand/netcodex-logo-v2-icon.png +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/brand/netcodex-logo-v2.png +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/desk/brand/netcodex-logo.png +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/src/netcodex/web/static/local.html +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/conftest.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/claude/normal-session.jsonl +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/claude/session-fixture.jsonl +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/codex/sessions/2026/06/07/rollout-fixture.jsonl +0 -0
- {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
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/codex_v2/session_index.jsonl +0 -0
- {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
- {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
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/golden/claude-conversation.qd +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/home/.continue/sessions/continue-1.json +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/home/.continue/sessions/sessions.json +0 -0
- {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
- {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
- {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
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/home/.gemini/tmp/projhash2/logs.json +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/fixtures/sources_v3/home/Downloads/claude-export/conversations.json +0 -0
- {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
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_cli.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_export_layout.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_golden_outputs.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_incremental.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_local_ui.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_redaction.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_registry_export_all.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_renderers.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_sources.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_sources_antigravity.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_sources_cli_tools.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_sources_v2.py +0 -0
- {netcodex_agent_exporter-0.3.1 → netcodex_agent_exporter-0.3.2}/tests/test_sources_vscode_family.py +0 -0
- {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.
|
|
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.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
|
51
|
-
|
|
|
52
|
-
|
|
|
53
|
-
|
|
|
54
|
-
|
|
|
55
|
-
|
|
|
56
|
-
|
|
|
57
|
-
|
|
|
58
|
-
|
|
|
59
|
-
|
|
|
60
|
-
|
|
|
61
|
-
|
|
|
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
|
|
102
|
-
|
|
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.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
|
23
|
-
|
|
|
24
|
-
|
|
|
25
|
-
|
|
|
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
|
|
66
|
-
|
|
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.
|
|
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"
|
|
@@ -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():
|