agent-decoder 0.3.2__tar.gz → 0.3.6__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.
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/.github/CODEOWNERS +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/.github/ISSUE_TEMPLATE/config.yml +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/.github/workflows/ci.yml +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/.github/workflows/publish.yml +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/.gitignore +8 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/.pre-commit-config.yaml +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/ARCHITECTURE.md +63 -11
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/CHANGELOG.md +45 -8
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/CONTRIBUTING.md +6 -6
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/LICENSE +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/Makefile +2 -2
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/PKG-INFO +56 -44
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/README.md +51 -40
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/SECURITY.md +3 -3
- {agent_decoder-0.3.2/clau_decode → agent_decoder-0.3.6/agent_decoder}/__init__.py +3 -3
- agent_decoder-0.3.6/docs/ad-poster.png +0 -0
- agent_decoder-0.3.6/docs/agent-runs.md +15 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/index.html +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/package-lock.json +2 -2
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/package.json +1 -1
- agent_decoder-0.3.6/frontend/public/site.webmanifest +1 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/App.tsx +14 -2
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/api/client.ts +2 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/api/types.ts +25 -3
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/assets/fonts/LICENSES.md +1 -1
- agent_decoder-0.3.6/frontend/src/components/ArtifactsPanel/ArtifactsPanel.tsx +191 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/ChatInput.tsx +3 -3
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/ChatInputBanners.tsx +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/ChatView.tsx +2 -2
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/ConversationHeader.tsx +22 -2
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/ModelPicker.tsx +3 -2
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/OwnershipBanner.tsx +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/__tests__/ChatViewLifecycle.test.tsx +10 -10
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/__tests__/NativeTerminalView.test.tsx +2 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/hooks/useRecaps.ts +6 -6
- agent_decoder-0.3.6/frontend/src/components/ChatView/nativeTerminal/__tests__/eraseScrollback.test.ts +64 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/nativeTerminal/xtermTerminal.ts +17 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Dashboard/DashboardEmpty.tsx +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Dashboard/DashboardSearch.tsx +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Dashboard/Hero.tsx +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Dashboard/fmt.ts +1 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/AssistantMessage.tsx +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/TextBlock.tsx +29 -7
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/__tests__/Ephemeral.test.tsx +4 -4
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/hooks/__tests__/useScrollController.test.tsx +29 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/hooks/useScrollController.ts +19 -14
- agent_decoder-0.3.6/frontend/src/components/Runs.css +26 -0
- agent_decoder-0.3.6/frontend/src/components/Runs.tsx +97 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Settings/RecapSettings.tsx +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Settings/RescanButton.tsx +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Settings/SettingsModal.tsx +7 -7
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Settings/__tests__/SettingsModal.test.tsx +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Sidebar/SearchOverlay.tsx +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Sidebar/SessionItem.tsx +2 -2
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Sidebar/ShortcutsPopup.tsx +1 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Sidebar/Sidebar.tsx +6 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Sidebar/SidebarHeader.tsx +1 -1
- agent_decoder-0.3.6/frontend/src/components/__tests__/Runs.test.tsx +50 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ui/icons.tsx +11 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/router.ts +2 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/store/index.ts +9 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/styles/theme.css +2 -2
- agent_decoder-0.3.6/frontend/src/utils/__tests__/artifacts.test.ts +35 -0
- agent_decoder-0.3.6/frontend/src/utils/artifacts.ts +66 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/utils/events.ts +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/utils/localStorage.ts +9 -6
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/vite.config.ts +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/pyproject.toml +23 -9
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/scripts/capture-move-bundle.sh +4 -4
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/__init__.py +2 -2
- agent_decoder-0.3.6/src/agent_decoder/__main__.py +11 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/_auth_env.py +4 -6
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/_pty_preexec.py +1 -1
- agent_decoder-0.3.6/src/agent_decoder/_tmux_capture.py +23 -0
- agent_decoder-0.3.6/src/agent_decoder/_tmux_exec.py +16 -0
- agent_decoder-0.3.6/src/agent_decoder/agent_runs.py +266 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/analytics/aggregator.py +1 -1
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/analytics/extractor.py +1 -1
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/analytics/fast.py +1 -1
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/analytics/pricing.py +29 -9
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/analytics/prompt.py +1 -1
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/analytics/service.py +1 -1
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/analytics/stats.py +1 -1
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/analytics/tips.py +1 -1
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/cli.py +13 -13
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/config.py +31 -12
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/db.py +361 -228
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/driver_manager.py +53 -78
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/drivers/base.py +16 -4
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/drivers/registry.py +4 -5
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/drivers/tmux_driver.py +27 -11
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/editor.py +2 -2
- agent_decoder-0.3.6/src/agent_decoder/execution_manager.py +414 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/locks.py +3 -3
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/migrate.py +12 -15
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/models.py +6 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/parser.py +16 -2
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/providers/__init__.py +1 -1
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/providers/base.py +6 -2
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/providers/claude.py +4 -2
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/providers/codex.py +8 -2
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/providers/registry.py +2 -2
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/pty_runner.py +155 -17
- agent_decoder-0.3.6/src/agent_decoder/query_parser.py +127 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/scanner.py +28 -2
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/server.py +249 -90
- agent_decoder-0.3.6/src/agent_decoder/static/assets/ArtifactsPanel-D-CqWycU.js +1 -0
- agent_decoder-0.3.2/src/clau_decode/static/assets/ChatView-BBVXuITs.js → agent_decoder-0.3.6/src/agent_decoder/static/assets/ChatView-CFunVM15.js +39 -39
- agent_decoder-0.3.6/src/agent_decoder/static/assets/Dashboard-CBe8ZXJ-.js +1 -0
- agent_decoder-0.3.6/src/agent_decoder/static/assets/FileViewer-CVtveC8R.js +1 -0
- agent_decoder-0.3.2/src/clau_decode/static/assets/HelpPopup-CPtECjYw.js → agent_decoder-0.3.6/src/agent_decoder/static/assets/HelpPopup-BYhBIvA6.js +1 -1
- agent_decoder-0.3.6/src/agent_decoder/static/assets/Runs-DvLUpR9O.js +1 -0
- agent_decoder-0.3.6/src/agent_decoder/static/assets/Runs-Y8oF-gxW.css +1 -0
- agent_decoder-0.3.2/src/clau_decode/static/assets/ScrollContainer-BT_Dzxah.js → agent_decoder-0.3.6/src/agent_decoder/static/assets/ScrollContainer-CA7-aYqv.js +1 -1
- agent_decoder-0.3.6/src/agent_decoder/static/assets/SearchOverlay-CF4dXG6x.js +1 -0
- agent_decoder-0.3.6/src/agent_decoder/static/assets/SessionItem-BUejVuL5.js +1 -0
- agent_decoder-0.3.6/src/agent_decoder/static/assets/SettingsModal-DWSMRQmn.js +1 -0
- agent_decoder-0.3.6/src/agent_decoder/static/assets/ShortcutsPopup-Df9bhfs6.js +1 -0
- agent_decoder-0.3.6/src/agent_decoder/static/assets/Sidebar-CJcwJziw.js +1 -0
- agent_decoder-0.3.6/src/agent_decoder/static/assets/fileType-BHvAriyJ.js +1 -0
- agent_decoder-0.3.6/src/agent_decoder/static/assets/formatRelative-CavTjOcy.js +1 -0
- agent_decoder-0.3.6/src/agent_decoder/static/assets/hljs-CvdnYs1C.js +35 -0
- agent_decoder-0.3.2/src/clau_decode/static/assets/index-BHdCOIkq.css → agent_decoder-0.3.6/src/agent_decoder/static/assets/index-Bo2bFwpv.css +1 -1
- agent_decoder-0.3.6/src/agent_decoder/static/assets/index-XPrlVfCr.js +5 -0
- agent_decoder-0.3.2/src/clau_decode/static/assets/react-Bi_azaFt.js → agent_decoder-0.3.6/src/agent_decoder/static/assets/react-CCIEwYL0.js +4 -4
- agent_decoder-0.3.6/src/agent_decoder/static/assets/renderSnippet-CcNMfZRd.js +1 -0
- agent_decoder-0.3.6/src/agent_decoder/static/assets/sessionCache-Cj3FsbQ4.js +1 -0
- agent_decoder-0.3.2/src/clau_decode/static/assets/shared-DdVGprvF.js → agent_decoder-0.3.6/src/agent_decoder/static/assets/shared-CAVcrZag.js +1 -1
- agent_decoder-0.3.6/src/agent_decoder/static/assets/ui-BVMZ0uWi.js +1 -0
- agent_decoder-0.3.6/src/agent_decoder/static/assets/useDebounce-CRtjXm0i.js +1 -0
- agent_decoder-0.3.6/src/agent_decoder/static/assets/useSessionDetail-D4HneaxZ.js +1 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/index.html +5 -6
- agent_decoder-0.3.6/src/agent_decoder/static/site.webmanifest +1 -0
- agent_decoder-0.3.6/src/agent_decoder/tmux_terminal.py +297 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/update_check.py +5 -4
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/analytics/test_aggregator.py +19 -19
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/analytics/test_cost.py +9 -9
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/analytics/test_extractor.py +11 -11
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/analytics/test_fast_parity.py +6 -6
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/analytics/test_integration.py +11 -11
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/analytics/test_pricing.py +42 -23
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/analytics/test_prompt.py +7 -7
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/analytics/test_service.py +5 -5
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/analytics/test_stats.py +17 -17
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/analytics/test_tips.py +23 -23
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/conftest.py +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/drivers/test_driver_manager.py +26 -9
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/drivers/test_tmux_driver.py +9 -9
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/fixtures/fake_claude_tui.py +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/providers/test_claude_adapter.py +4 -4
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/providers/test_codex_adapter.py +3 -3
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/providers/test_registry.py +6 -4
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_active_data_sources.py +1 -1
- agent_decoder-0.3.6/tests/test_agent_runs.py +272 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_analytics_ignores_ephemerals.py +3 -3
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_auth_env.py +3 -5
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_btw_capture.py +34 -34
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_cli.py +10 -10
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_codex_e2e.py +5 -5
- agent_decoder-0.3.6/tests/test_config_legacy_migration.py +34 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_db.py +204 -64
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_db_session_meta.py +2 -2
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_delete_sessions.py +3 -3
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_dev_import_path.py +3 -3
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_e2e.py +169 -11
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_editor.py +20 -20
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_ephemeral_messages.py +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_events_bus.py +1 -1
- agent_decoder-0.3.6/tests/test_execution_manager.py +408 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_export_ephemeral.py +6 -6
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_locks.py +18 -18
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_migrate.py +2 -2
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_parser.py +82 -34
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_pty_native.py +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_pty_runner.py +7 -7
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_pty_runner_btw.py +5 -5
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_pty_screen_state.py +1 -1
- agent_decoder-0.3.6/tests/test_query_parser.py +93 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_recaps.py +3 -3
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_reporter.py +31 -31
- agent_decoder-0.3.6/tests/test_scan_unchanged_files.py +178 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_scanner.py +79 -11
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_search_ephemeral.py +1 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_server.py +76 -4
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_server_capabilities.py +8 -8
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_server_open_terminal.py +3 -3
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_server_session_title.py +4 -4
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/test_update_check.py +9 -9
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/uv.lock +29 -2
- agent_decoder-0.3.2/docs/native-input-required-plan.md +0 -135
- agent_decoder-0.3.2/frontend/public/site.webmanifest +0 -1
- agent_decoder-0.3.2/src/clau_decode/__main__.py +0 -11
- agent_decoder-0.3.2/src/clau_decode/static/assets/Dashboard-3CYO4HQw.js +0 -1
- agent_decoder-0.3.2/src/clau_decode/static/assets/FileViewer-BwbDc3ky.js +0 -1
- agent_decoder-0.3.2/src/clau_decode/static/assets/SearchOverlay-DqI7aZaC.js +0 -1
- agent_decoder-0.3.2/src/clau_decode/static/assets/SessionItem-DlyKg80u.js +0 -1
- agent_decoder-0.3.2/src/clau_decode/static/assets/SettingsModal-CZBfMqx7.js +0 -1
- agent_decoder-0.3.2/src/clau_decode/static/assets/ShortcutsPopup-W7CPdCzW.js +0 -1
- agent_decoder-0.3.2/src/clau_decode/static/assets/Sidebar-BBswhEua.js +0 -1
- agent_decoder-0.3.2/src/clau_decode/static/assets/client-DTSXvAb8.js +0 -1
- agent_decoder-0.3.2/src/clau_decode/static/assets/formatRelative-j86webkr.js +0 -1
- agent_decoder-0.3.2/src/clau_decode/static/assets/hljs-B3O74O7Z.js +0 -35
- agent_decoder-0.3.2/src/clau_decode/static/assets/index-DfKltZ6z.js +0 -5
- agent_decoder-0.3.2/src/clau_decode/static/assets/renderSnippet-CqpQQugH.js +0 -1
- agent_decoder-0.3.2/src/clau_decode/static/assets/ui-BcGPjpYn.js +0 -1
- agent_decoder-0.3.2/src/clau_decode/static/site.webmanifest +0 -1
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/.editorconfig +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/.github/dependabot.yml +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/CODE_OF_CONDUCT.md +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/docs/demo-poster.jpg +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/playwright.config.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/public/android-chrome-192x192.png +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/public/android-chrome-512x512.png +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/public/app-icon.png +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/public/apple-touch-icon.png +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/public/favicon-16x16.png +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/public/favicon-32x32.png +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/public/favicon.ico +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/api/__tests__/client.test.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/api/sessionCache.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/assets/fonts/fira-code.woff2 +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/assets/fonts/ioskeley-mono.woff2 +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/assets/fonts/jetbrains-mono.woff2 +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/assets/fonts/julia-mono.woff2 +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/assets/fonts/libertinus-mono.woff2 +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/assets/fonts/monaspace-argon.woff2 +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/assets/fonts/source-code-pro.woff2 +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/assets/fonts/spline-sans-mono.woff2 +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/assets/fonts/xanh-mono.woff2 +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/ChatInputBar.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/EmptyState.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/MessageListContainerContext.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/MessageListLoader.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/NativeActionBanner.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/NativeTerminalView.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/ProviderThemeContext.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/__tests__/ChatInput.test.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/__tests__/ConversationHeader.test.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/__tests__/EmptyState.test.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/__tests__/NativeActionBanner.test.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/chatCard.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/hooks/__tests__/useRecaps.test.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/hooks/useExpandPreserveAnchor.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/hooks/useMessageHistory.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/hooks/useNativePty.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ChatView/hooks/useSessionOwnership.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Dashboard/ActivityStrip.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Dashboard/Dashboard.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Dashboard/FeaturedSession.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Dashboard/HeadlineInsight.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Dashboard/ModelRates.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Dashboard/ModelUsageStrip.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Dashboard/ProjectStrip.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Dashboard/SectionHeader.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Dashboard/Sparkline.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Dashboard/StatStrip.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Dashboard/TipCard.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Dashboard/TouchedFilesList.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ErrorBoundary.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/FileViewer/FileViewer.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/FileViewer/index.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/ConfirmDialog.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/EphemeralMessage.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/MessageList.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/SidechainBranch.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/StreamingIndicator.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/ThinkingBlock.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/ThoughtChain.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/ToolUseBlock.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/UserMessage.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/__tests__/TextBlock.test.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/__tests__/ToolUseBlock.test.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/__tests__/UserMessage.test.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/blockRenderers.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/groupMessages.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/hooks/__tests__/useSessionDetail.test.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/hooks/useCycle.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/hooks/useSessionDetail.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Messages/pairToolBlocks.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ScrollContainer.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Settings/NativePtyFontPicker.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Settings/PathEditor.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Settings/PermissionModeSection.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Settings/ProfileSection.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Settings/SortOrderSection.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Settings/shared.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Sidebar/FileExplorer.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Sidebar/HelpPopup.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Sidebar/NewTaskButton.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Sidebar/ProjectGroup.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Sidebar/__tests__/NewTaskButton.test.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Sidebar/__tests__/SearchOverlay.test.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Sidebar/__tests__/SessionItem.test.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Sidebar/__tests__/SessionItemRename.test.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Sidebar/hooks/__tests__/useRunnerStatuses.test.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Sidebar/hooks/useRunnerStatuses.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/Toast.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ui/ContextMenu.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ui/DelayedSkeleton.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ui/LoadingAnimation.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/components/ui/RenameInput.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/config/ui.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/constants/nativePtyFonts.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/main.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/store/__tests__/toggleExplorer.test.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/store/blocksState.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/styles/nativePtyFonts.css +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/test-setup.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/utils/__tests__/lazyWithRetry.test.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/utils/__tests__/sessionMeta.test.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/utils/fileType.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/utils/formatRelative.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/utils/hljs.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/utils/lazyWithRetry.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/utils/nativePtyFocus.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/utils/renderSnippet.tsx +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/utils/sessionMeta.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/utils/timestamps.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/src/utils/useDebounce.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/tests/ghostty-web.pw.ts +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/tsconfig.json +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/frontend/tsconfig.node.json +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/analytics/__init__.py +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/analytics/cost.py +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/analytics/models.py +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/btw_capture.py +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/drivers/__init__.py +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/events_bus.py +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/pty_native.py +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/pty_screen_state.py +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/recap_runner.py +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/reporter.py +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/android-chrome-192x192.png +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/android-chrome-512x512.png +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/app-icon.png +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/apple-touch-icon.png +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/assets/ChatView-BrP-ENHg.css +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/assets/fira-code-DGosTW8U.woff2 +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/assets/ioskeley-mono-C7VR2-sL.woff2 +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/assets/jetbrains-mono-V6pRDFza.woff2 +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/assets/julia-mono-Cbvba6sW.woff2 +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/assets/libertinus-mono-Coz17E-O.woff2 +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/assets/monaspace-argon-RS-2TGNg.woff2 +0 -0
- /agent_decoder-0.3.2/src/clau_decode/static/assets/nativePtyFonts-BaXKtUsn.js → /agent_decoder-0.3.6/src/agent_decoder/static/assets/nativePtyFonts-BxhRYj2G.js +0 -0
- /agent_decoder-0.3.2/src/clau_decode/static/assets/rolldown-runtime-S-ySWqyJ.js → /agent_decoder-0.3.6/src/agent_decoder/static/assets/rolldown-runtime-QTnfLwEv.js +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/assets/source-code-pro-DEXWLoHG.woff2 +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/assets/spline-sans-mono-mUpA6Mve.woff2 +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/assets/xanh-mono-Dsg19vWS.woff2 +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/favicon-16x16.png +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/favicon-32x32.png +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/static/favicon.ico +0 -0
- {agent_decoder-0.3.2/src/clau_decode → agent_decoder-0.3.6/src/agent_decoder}/watcher.py +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/__init__.py +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/analytics/__init__.py +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/drivers/__init__.py +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/drivers/fake_cli.py +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/fixtures/aaaaaaaa-0000-0000-0000-000000000001.jsonl +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/fixtures/bad-name.jsonl +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/fixtures/bbbbbbbb-0000-0000-0000-000000000002.jsonl +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/fixtures/btw_capture/live_zai_no_open_marker.bin +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/fixtures/btw_capture/multiline.bin +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/fixtures/codex/sample_rollout.jsonl +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/fixtures/session_with_usage.jsonl +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/fixtures/sidechain_session.jsonl +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/fixtures/simple_session.jsonl +0 -0
- {agent_decoder-0.3.2 → agent_decoder-0.3.6}/tests/providers/__init__.py +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
blank_issues_enabled: true
|
|
2
2
|
contact_links:
|
|
3
3
|
- name: Questions and general discussion
|
|
4
|
-
url: https://github.com/Comradery64/
|
|
4
|
+
url: https://github.com/Comradery64/Agent-Decoder/discussions
|
|
5
5
|
about: For usage questions, ideas in flux, or anything that isn't a clear bug or feature request, please use Discussions.
|
|
@@ -48,7 +48,7 @@ jobs:
|
|
|
48
48
|
|
|
49
49
|
- name: Tests (pytest with coverage)
|
|
50
50
|
# pyproject's [tool.pytest.ini_options] addopts already enables
|
|
51
|
-
# --cov=
|
|
51
|
+
# --cov=agent_decoder; append an XML report for Codecov upload.
|
|
52
52
|
run: uv run pytest --cov-report=xml
|
|
53
53
|
|
|
54
54
|
- name: Upload coverage to Codecov
|
|
@@ -32,7 +32,7 @@ jobs:
|
|
|
32
32
|
# deleted or overwritten.
|
|
33
33
|
run: |
|
|
34
34
|
TAG_VERSION="${GITHUB_REF_NAME#v}"
|
|
35
|
-
PKG_VERSION="$(grep -oP '(?<=^__version__ = ")[^"]+' src/
|
|
35
|
+
PKG_VERSION="$(grep -oP '(?<=^__version__ = ")[^"]+' src/agent_decoder/__init__.py)"
|
|
36
36
|
if [ "$TAG_VERSION" != "$PKG_VERSION" ]; then
|
|
37
37
|
echo "::error::Tag v$TAG_VERSION does not match __version__ ($PKG_VERSION)"
|
|
38
38
|
exit 1
|
|
@@ -50,4 +50,11 @@ demo-data/
|
|
|
50
50
|
demo-reel/
|
|
51
51
|
|
|
52
52
|
# Keep the built static assets — they ship with the package
|
|
53
|
-
!src/
|
|
53
|
+
!src/agent_decoder/static/
|
|
54
|
+
|
|
55
|
+
# Local scratch/handoff docs and agent config — never published
|
|
56
|
+
docs/archive/
|
|
57
|
+
/.handoff/
|
|
58
|
+
/.internal-archive/
|
|
59
|
+
/.claude/
|
|
60
|
+
/CLAUDE.md
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Architecture
|
|
2
2
|
|
|
3
|
-
This document describes the internal architecture of `
|
|
3
|
+
This document describes the internal architecture of `ring`. It
|
|
4
4
|
complements [`README.md`](README.md) (user-facing) with the technical detail a
|
|
5
5
|
contributor or reviewer needs to navigate the code.
|
|
6
6
|
|
|
7
7
|
## Overview
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Agent Decoder is a single-process, local-first application. A FastAPI server
|
|
10
10
|
(uvicorn, bound to `127.0.0.1:4242` by default) scans your AI coding
|
|
11
11
|
assistant's JSONL session files into a SQLite index, exposes them through a
|
|
12
12
|
JSON HTTP API plus a Server-Sent Events stream, and serves a pre-built React +
|
|
@@ -36,8 +36,8 @@ flowchart LR
|
|
|
36
36
|
|
|
37
37
|
subgraph Filesystem[Filesystem]
|
|
38
38
|
JSONL[~/.claude/projects/**/*.jsonl]
|
|
39
|
-
Cfg[~/.config/
|
|
40
|
-
Cache[~/.local/share/
|
|
39
|
+
Cfg[~/.config/agent-decoder/config.json]
|
|
40
|
+
Cache[~/.local/share/agent-decoder/index.db]
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
SPA -->|fetch + EventSource| Server
|
|
@@ -63,11 +63,11 @@ flowchart LR
|
|
|
63
63
|
2. The frontend router (`frontend/src/router.ts`) updates the URL hash to
|
|
64
64
|
`#/chat/<session_id>` and `App.tsx` reacts to the route change.
|
|
65
65
|
3. `frontend/src/api/client.ts` issues `GET /api/sessions/<session_id>`.
|
|
66
|
-
4. The FastAPI route (`src/
|
|
67
|
-
(`src/
|
|
66
|
+
4. The FastAPI route (`src/agent_decoder/server.py`) calls `Database.get_session_detail`
|
|
67
|
+
(`src/agent_decoder/db.py`), which reads the session row and its messages
|
|
68
68
|
from SQLite.
|
|
69
69
|
5. If the JSONL file's mtime has changed since the last index update, the
|
|
70
|
-
server re-parses the file via `parse_session` (`src/
|
|
70
|
+
server re-parses the file via `parse_session` (`src/agent_decoder/parser.py`)
|
|
71
71
|
and upserts the new messages back into SQLite before returning.
|
|
72
72
|
6. The route returns a `SessionDetail` JSON document; the React `ChatView`
|
|
73
73
|
component renders markdown, tool-use, thinking, and sidechain blocks.
|
|
@@ -77,7 +77,7 @@ flowchart LR
|
|
|
77
77
|
|
|
78
78
|
## Key directories
|
|
79
79
|
|
|
80
|
-
### Backend — `src/
|
|
80
|
+
### Backend — `src/agent_decoder/`
|
|
81
81
|
|
|
82
82
|
| Path | Role |
|
|
83
83
|
|------|------|
|
|
@@ -114,13 +114,13 @@ flowchart LR
|
|
|
114
114
|
|
|
115
115
|
## Storage
|
|
116
116
|
|
|
117
|
-
|
|
117
|
+
Agent Decoder follows the [XDG Base Directory
|
|
118
118
|
spec](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html):
|
|
119
119
|
|
|
120
120
|
| Purpose | Path (default) | Notes |
|
|
121
121
|
|---------|----------------|-------|
|
|
122
|
-
| User config | `~/.config/
|
|
123
|
-
| Session index | `~/.local/share/
|
|
122
|
+
| User config | `~/.config/agent-decoder/config.json` (or `$XDG_CONFIG_HOME/agent-decoder/config.json`) | Atomic writes (`*.tmp` → rename) |
|
|
123
|
+
| Session index | `~/.local/share/agent-decoder/index.db` (or `$XDG_DATA_HOME/agent-decoder/index.db`) | SQLite + FTS5; durable (holds stars/archives/titles). Use `--force-refresh` to rescan rather than deleting |
|
|
124
124
|
| Scanned sessions | `~/.claude/projects/**/*.jsonl` (configurable) | Read-only by default; written only via the runner or `--enable-edit` |
|
|
125
125
|
|
|
126
126
|
No remote storage. No outbound network calls except optional pricing-table
|
|
@@ -164,3 +164,55 @@ See [`SECURITY.md`](SECURITY.md) for the disclosure process and full scope.
|
|
|
164
164
|
pre-warmed in the background after first paint.
|
|
165
165
|
- **GZip middleware.** FastAPI compresses JSON responses over a few hundred
|
|
166
166
|
bytes, which keeps session-detail payloads small on large conversations.
|
|
167
|
+
|
|
168
|
+
### Shared interactive execution
|
|
169
|
+
|
|
170
|
+
`ExecutionManager` is the single server owner of Claude and Codex terminals.
|
|
171
|
+
It shares the session lock table, active Native terminal, sizing configuration,
|
|
172
|
+
and shutdown lifecycle. `pty_runner.PtyManager` supplies Claude's established
|
|
173
|
+
input policy (ownership, input acknowledgments/watchdog, `/model`, permissions,
|
|
174
|
+
and ephemeral `/btw` capture); `driver_manager.DriverSessionPolicy` supplies
|
|
175
|
+
Codex's launch/resume, state polling, and rollout adoption. Neither policy is
|
|
176
|
+
instantiated as another manager. The former `DriverManager` import resolves to
|
|
177
|
+
`ExecutionManager` for compatibility. Native input, resize, snapshot, status,
|
|
178
|
+
and termination routes all use the same owner. Provider capability checks still
|
|
179
|
+
run before focus/submit; read-only providers cannot acquire a terminal.
|
|
180
|
+
|
|
181
|
+
Both providers use the isolated `agent-decoder` tmux socket by default.
|
|
182
|
+
`AGENT_DECODER_TMUX_SOCKET` overrides it for isolated installations/tests.
|
|
183
|
+
Claude falls back to direct PTY when tmux is absent; internal consumers can
|
|
184
|
+
explicitly request `terminal_backend="direct"`. Codex requires tmux and retains
|
|
185
|
+
its runtime capability gate. Claude launch environments use a private temporary
|
|
186
|
+
file consumed and unlinked before exec; secrets do not appear in launch argv or
|
|
187
|
+
tmux metadata.
|
|
188
|
+
|
|
189
|
+
Normal server shutdown **detaches** attach clients, stops local watchdogs and
|
|
190
|
+
capture readers, releases server-owned Claude sidecars, and leaves tmux harnesses
|
|
191
|
+
running. Browser disconnect/idle does not reap tmux harnesses. Explicit kill
|
|
192
|
+
**terminates** the harness; kill also resolves a persistent terminal after a
|
|
193
|
+
server restart without spawning or first focusing it. Direct PTY cannot detach
|
|
194
|
+
and therefore terminates on shutdown. Claude reattachment checks session/cwd
|
|
195
|
+
metadata against the pane PID plus the OS process start identity and executable.
|
|
196
|
+
A changed process or a fresh foreign sidecar prevents adoption. Binary,
|
|
197
|
+
permission, or model configuration changes require a verified owned respawn;
|
|
198
|
+
live `/model` updates the persisted launch configuration. These checks coordinate
|
|
199
|
+
same-user processes, not mutually untrusted users sharing a tmux server.
|
|
200
|
+
|
|
201
|
+
Tmux redraws terminal output, which is suitable for Native hydration but changes
|
|
202
|
+
the escape sequences Claude's `/btw` parser needs. Claude therefore also uses
|
|
203
|
+
`pipe-pane` into a private Unix datagram receiver for the original byte stream.
|
|
204
|
+
The relay drains without waiting for the application; datagrams and receiver
|
|
205
|
+
work per loop turn are bounded. Sequence gaps or capture-buffer overflow fail
|
|
206
|
+
the pending ephemeral response instead of persisting partial text. A capture
|
|
207
|
+
owner token prevents an old client from stopping a replacement relay. Detach
|
|
208
|
+
removes the local socket and stops its relay; after a crash an orphaned relay
|
|
209
|
+
keeps draining/dropping until reattachment replaces it.
|
|
210
|
+
|
|
211
|
+
Limitations: pending ephemeral `/btw` output is not recovered across a server
|
|
212
|
+
crash/restart, and output during detach is not retained as a raw byte history;
|
|
213
|
+
reattachment hydrates the tmux screen while JSONL remains the content source.
|
|
214
|
+
A crashed process may leave a private temporary socket directory until OS temp
|
|
215
|
+
cleanup. Deliberately replacing/execing a managed pane into a different executable
|
|
216
|
+
requires explicit recovery rather than automatic ownership adoption. Real
|
|
217
|
+
provider auth/network smoke tests remain opt-in; behavioral tests use synthetic
|
|
218
|
+
CLIs and unique tmux sockets.
|
|
@@ -1,11 +1,45 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
All notable changes to Clau-Decode will be documented in this file.
|
|
3
|
+
All notable changes to Agent Decoder (formerly Clau-Decode) will be documented in this file.
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog 1.1.0](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). While the project is in the 0.x series, breaking changes may land in any minor release; we'll call them out clearly.
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.3.6] - 2026-11-06
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **Durable agent runs and a cross-provider Runs screen** (#52). Each managed execution attempt is recorded in an `agent_runs` table that is independent of the rebuildable session index; no screen or exit code is treated as proof of completion. Read it at `GET /api/runs` and `GET /api/runs/{id}`.
|
|
14
|
+
- **Unified Claude and Codex execution ownership** with persistent tmux terminals (#51), so both providers share one execution manager.
|
|
15
|
+
- **Artifacts panel** listing a session's images and written files.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- Share one syntax highlighter and cache rendered markdown, and toggle the artifacts panel without re-rendering the chat.
|
|
20
|
+
- Local agent and handoff files (`.handoff/`, `.claude/`, `CLAUDE.md`, ...) are excluded from sdist builds and gitignored.
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- **Periodic rescan no longer re-parses every Codex transcript each minute.** Codex rollouts are named `rollout-<timestamp>-<uuid>` but indexed under the session id inside the file, so the "has this file changed?" lookup by file name missed most of them and the server re-parsed gigabytes of unchanged transcripts on every pass (a ~14 s CPU spike every 60 s, plus `message_count` reset to 0 on large rollouts). Unchanged files are now skipped by path, including rollouts that share a session id.
|
|
25
|
+
- Dangling symlinks under `~/.claude/projects` are skipped quietly instead of logging a "No such file" warning on every rescan.
|
|
26
|
+
- Native terminal no longer snaps back to the bottom and wipes scrollback when a full-screen clear (`ESC[3J`) arrives while you are scrolled up. A real `/clear` at the bottom still clears. An ignored sequence is logged to the browser console (`agent-decoder: ignored ESC[3J …`) so the cause can be confirmed in real use.
|
|
27
|
+
|
|
28
|
+
## [0.3.5] - 2026-10-24
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- **BREAKING: the `clau-decode` command is gone — launch with `ring`.** Renamed the project to **Agent Decoder R.I.N.G.** (Replay, Inspect, Navigate, Grep). The launcher is now `ring`; the Python module is now `agent_decoder`.
|
|
33
|
+
- Config and index DB live in `agent-decoder/` dirs. Existing `clau-decode/` data is copied over on first run and left in place as a backup.
|
|
34
|
+
|
|
35
|
+
### Fixed
|
|
36
|
+
|
|
37
|
+
- Decoded view no longer snaps back to the bottom a few moments after you scroll up with the keyboard, touch, or scrollbar: a no-op follow-write at the bottom left an internal "programmatic scroll" flag stuck, so the next streamed update re-pinned you.
|
|
38
|
+
|
|
39
|
+
### Added
|
|
40
|
+
|
|
41
|
+
- Search query language: `"exact phrase"`, `-exclude`, `a OR b`, `prefix*`, and `role:` / `project:` / `session:` / `before:` / `after:` filters.
|
|
42
|
+
|
|
9
43
|
## [0.3.2] - 2026-09-07
|
|
10
44
|
|
|
11
45
|
### Added
|
|
@@ -238,10 +272,13 @@ Initial public release.
|
|
|
238
272
|
|
|
239
273
|
- License changed from MIT to [FSL-1.1-Apache-2.0](LICENSE). All prior unreleased history was developed under MIT; the 0.1.0 release and everything after it ship under FSL-1.1-Apache-2.0, which converts to Apache 2.0 two years after each release.
|
|
240
274
|
|
|
241
|
-
[
|
|
242
|
-
[0.3.
|
|
243
|
-
[0.3.
|
|
244
|
-
[0.3.
|
|
245
|
-
[0.3.
|
|
246
|
-
[0.
|
|
247
|
-
[0.1
|
|
275
|
+
[Unreleased]: https://github.com/Comradery64/Agent-Decoder/compare/v0.3.6...HEAD
|
|
276
|
+
[0.3.6]: https://github.com/Comradery64/Agent-Decoder/compare/v0.3.5...v0.3.6
|
|
277
|
+
[0.3.5]: https://github.com/Comradery64/Agent-Decoder/compare/v0.3.2...v0.3.5
|
|
278
|
+
[0.3.2]: https://github.com/Comradery64/Agent-Decoder/compare/v0.3.1.3...v0.3.2
|
|
279
|
+
[0.3.1.2]: https://github.com/Comradery64/Agent-Decoder/compare/v0.3.1.1...v0.3.1.2
|
|
280
|
+
[0.3.1.1]: https://github.com/Comradery64/Agent-Decoder/compare/v0.3.1...v0.3.1.1
|
|
281
|
+
[0.3.1]: https://github.com/Comradery64/Agent-Decoder/compare/v0.3.0...v0.3.1
|
|
282
|
+
[0.3.0]: https://github.com/Comradery64/Agent-Decoder/compare/v0.2.0...v0.3.0
|
|
283
|
+
[0.2.0]: https://github.com/Comradery64/Agent-Decoder/compare/v0.1.0...v0.2.0
|
|
284
|
+
[0.1.0]: https://github.com/Comradery64/Agent-Decoder/releases/tag/v0.1.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Contributing to
|
|
1
|
+
# Contributing to Agent Decoder
|
|
2
2
|
|
|
3
|
-
Thanks for your interest in
|
|
3
|
+
Thanks for your interest in Agent Decoder! This project is a local, privacy-focused tool for browsing AI coding assistant chat history. Contributions of all kinds are welcome.
|
|
4
4
|
|
|
5
5
|
## Ways to contribute
|
|
6
6
|
|
|
@@ -13,11 +13,11 @@ If you're not sure whether something is in scope, open an issue first and we can
|
|
|
13
13
|
|
|
14
14
|
## Development setup
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Agent Decoder has a Python 3.10+ backend (FastAPI + SQLite, tested with pytest) and a TypeScript frontend (React 18 + Vite, tested with vitest). You'll need Python 3.10+, [`uv`](https://docs.astral.sh/uv/), and Node.js 20+.
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
git clone https://github.com/Comradery64/
|
|
20
|
-
cd
|
|
19
|
+
git clone https://github.com/Comradery64/Agent-Decoder
|
|
20
|
+
cd Agent Decoder
|
|
21
21
|
|
|
22
22
|
# Install backend deps + build the frontend
|
|
23
23
|
make dev
|
|
@@ -73,7 +73,7 @@ Please confirm:
|
|
|
73
73
|
|
|
74
74
|
## Licensing
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
Agent Decoder is released under the [Functional Source License, Version 1.1, with the Apache 2.0 Future License](LICENSE) (FSL-1.1-Apache-2.0). By submitting a contribution you agree that it is offered under those same terms. There is no CLA — your `git` authorship is sufficient attribution. Please don't paste in code you don't have the right to license under FSL-1.1-Apache-2.0.
|
|
77
77
|
|
|
78
78
|
## Questions
|
|
79
79
|
|
|
@@ -9,7 +9,7 @@ FSL-1.1-Apache-2.0
|
|
|
9
9
|
Copyright 2026 Comradery64
|
|
10
10
|
|
|
11
11
|
Licensor: Comradery64
|
|
12
|
-
Licensed Work: clau-decode. The Licensed Work is © 2026 Comradery64.
|
|
12
|
+
Licensed Work: Agent Decoder R.I.N.G. (formerly clau-decode). The Licensed Work is © 2026 Comradery64.
|
|
13
13
|
Effective Date: 2026-05-13
|
|
14
14
|
Change Date: 2028-05-13
|
|
15
15
|
Change License: Apache License, Version 2.0
|
|
@@ -22,11 +22,11 @@ test:
|
|
|
22
22
|
|
|
23
23
|
# Run the app from source
|
|
24
24
|
run:
|
|
25
|
-
uv run
|
|
25
|
+
uv run ring
|
|
26
26
|
|
|
27
27
|
# Clean build artifacts
|
|
28
28
|
clean:
|
|
29
29
|
rm -rf frontend/node_modules frontend/dist
|
|
30
|
-
rm -rf src/
|
|
30
|
+
rm -rf src/agent_decoder/static/assets src/agent_decoder/static/index.html
|
|
31
31
|
rm -rf .pytest_cache
|
|
32
32
|
find . -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: agent-decoder
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.6
|
|
4
4
|
Summary: A local web UI for browsing and analyzing AI coding assistant chat history
|
|
5
|
-
Project-URL: Homepage, https://github.com/Comradery64/
|
|
6
|
-
Project-URL: Repository, https://github.com/Comradery64/
|
|
7
|
-
Project-URL: Issues, https://github.com/Comradery64/
|
|
5
|
+
Project-URL: Homepage, https://github.com/Comradery64/Agent-Decoder
|
|
6
|
+
Project-URL: Repository, https://github.com/Comradery64/Agent-Decoder
|
|
7
|
+
Project-URL: Issues, https://github.com/Comradery64/Agent-Decoder/issues
|
|
8
8
|
License: FSL-1.1-Apache-2.0
|
|
9
9
|
License-File: LICENSE
|
|
10
10
|
Keywords: ai-chat,analytics,chat-history,viewer
|
|
@@ -31,17 +31,23 @@ Requires-Dist: httpx>=0.27.0; extra == 'dev'
|
|
|
31
31
|
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
|
|
32
32
|
Requires-Dist: pytest-cov>=5.0.0; extra == 'dev'
|
|
33
33
|
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
34
|
+
Requires-Dist: ruff==0.15.12; extra == 'dev'
|
|
34
35
|
Description-Content-Type: text/markdown
|
|
35
36
|
|
|
36
|
-
<h1 align="center">
|
|
37
|
+
<h1 align="center">Agent Decoder R.I.N.G.</h1>
|
|
37
38
|
|
|
38
39
|
<p align="center">
|
|
39
|
-
<
|
|
40
|
+
<strong>Replay, Inspect, Navigate, Grep.</strong><br>
|
|
41
|
+
<em>Decode your agents' secret messages. "Send 10¢ and a box top!"</em>
|
|
40
42
|
</p>
|
|
41
43
|
|
|
42
44
|
<p align="center">
|
|
43
|
-
|
|
44
|
-
|
|
45
|
+
Browse, search, and analyze your AI coding assistant chat history — entirely local, entirely private.
|
|
46
|
+
</p>
|
|
47
|
+
|
|
48
|
+
<p align="center">
|
|
49
|
+
<a href="https://github.com/Comradery64/Agent-Decoder/actions/workflows/ci.yml">
|
|
50
|
+
<img alt="CI" src="https://img.shields.io/github/actions/workflow/status/Comradery64/Agent-Decoder/ci.yml?branch=main&label=CI&style=flat-square">
|
|
45
51
|
</a>
|
|
46
52
|
<a href="LICENSE">
|
|
47
53
|
<img alt="License" src="https://img.shields.io/badge/license-FSL--1.1--Apache--2.0-blue?style=flat-square">
|
|
@@ -49,32 +55,22 @@ Description-Content-Type: text/markdown
|
|
|
49
55
|
<a href="pyproject.toml">
|
|
50
56
|
<img alt="Python" src="https://img.shields.io/badge/python-3.10%2B-blue?style=flat-square">
|
|
51
57
|
</a>
|
|
52
|
-
<a href="https://github.com/Comradery64/
|
|
58
|
+
<a href="https://github.com/Comradery64/Agent-Decoder/blob/main/CHANGELOG.md">
|
|
53
59
|
<img alt="Changelog" src="https://img.shields.io/badge/changelog-keep--a--changelog-orange?style=flat-square">
|
|
54
60
|
</a>
|
|
55
61
|
</p>
|
|
56
62
|
|
|
57
63
|
<p align="center">
|
|
58
|
-
<
|
|
59
|
-
src="https://github.com/user-attachments/assets/6f5a9a09-fbab-467f-82b1-c2e642dc8726"
|
|
60
|
-
poster="https://github.com/Comradery64/Clau-Decode/raw/main/docs/demo-poster.jpg"
|
|
61
|
-
controls
|
|
62
|
-
muted
|
|
63
|
-
playsinline
|
|
64
|
-
width="820">
|
|
65
|
-
<a href="https://github.com/user-attachments/assets/6f5a9a09-fbab-467f-82b1-c2e642dc8726">
|
|
66
|
-
<img src="https://github.com/Comradery64/Clau-Decode/raw/main/docs/demo-poster.jpg" alt="Clau-Decode demo — click to play" width="820">
|
|
67
|
-
</a>
|
|
68
|
-
</video>
|
|
64
|
+
<img src="docs/ad-poster.png" alt="Agent Decoder R.I.N.G. retro-futurist ad poster" width="360">
|
|
69
65
|
</p>
|
|
70
66
|
|
|
71
67
|
---
|
|
72
68
|
|
|
73
|
-
## Why
|
|
69
|
+
## Why Agent Decoder?
|
|
74
70
|
|
|
75
71
|
Your AI coding assistant writes a small mountain of JSONL session files into
|
|
76
72
|
`~/.claude/projects/` — useful, but unreadable and impossible to search by hand.
|
|
77
|
-
|
|
73
|
+
Agent Decoder reads those files locally, indexes them into SQLite, and serves a
|
|
78
74
|
fast browser UI with full-text search, conversation rendering, analytics, and a
|
|
79
75
|
recap engine.
|
|
80
76
|
|
|
@@ -83,22 +79,22 @@ recap engine.
|
|
|
83
79
|
```bash
|
|
84
80
|
# Install as an isolated tool — its own virtualenv, on your PATH, nothing
|
|
85
81
|
# touches your system Python. Use whichever you already have:
|
|
86
|
-
uv tool install git+https://github.com/Comradery64/
|
|
82
|
+
uv tool install git+https://github.com/Comradery64/Agent-Decoder.git
|
|
87
83
|
# or:
|
|
88
|
-
pipx install git+https://github.com/Comradery64/
|
|
84
|
+
pipx install git+https://github.com/Comradery64/Agent-Decoder.git
|
|
89
85
|
|
|
90
|
-
|
|
86
|
+
ring # opens http://localhost:4242
|
|
91
87
|
|
|
92
88
|
# update later — re-pull the latest from main (git installs need --force;
|
|
93
89
|
# plain `upgrade`/`reinstall` won't fetch new commits):
|
|
94
|
-
uv tool install --force git+https://github.com/Comradery64/
|
|
90
|
+
uv tool install --force git+https://github.com/Comradery64/Agent-Decoder.git
|
|
95
91
|
# or:
|
|
96
|
-
pipx install --force git+https://github.com/Comradery64/
|
|
92
|
+
pipx install --force git+https://github.com/Comradery64/Agent-Decoder.git
|
|
97
93
|
```
|
|
98
94
|
|
|
99
95
|
Requires Python 3.10+. The wheel ships the pre-built frontend, so **no Node.js is needed** — only for development. All data stays on your machine — no telemetry.
|
|
100
96
|
|
|
101
|
-
> Just trying it out? Run without installing: `uvx --from git+https://github.com/Comradery64/
|
|
97
|
+
> Just trying it out? Run without installing: `uvx --from git+https://github.com/Comradery64/Agent-Decoder.git ring`
|
|
102
98
|
> Prefer not to install? Run it straight from a clone — see [Development](#development).
|
|
103
99
|
> Advanced: `pip install` works too, but only **inside an activated virtualenv** — never your system/Homebrew Python (PEP 668 will block it, and a global install can shadow other checkouts).
|
|
104
100
|
|
|
@@ -121,6 +117,22 @@ git fetch origin && git reset --hard origin/main
|
|
|
121
117
|
- `Cmd+K` global search across every session — content, tool use, file paths, thinking blocks
|
|
122
118
|
- Inline live-search bar on the home page for quick lookups
|
|
123
119
|
- Results show highlighted excerpts and jump directly to the matching message
|
|
120
|
+
- Query syntax (works in both search boxes):
|
|
121
|
+
|
|
122
|
+
| Type | Means |
|
|
123
|
+
|------|-------|
|
|
124
|
+
| `"exact phrase"` | match the words together, in order |
|
|
125
|
+
| `-word` / `-"a phrase"` | exclude messages containing it |
|
|
126
|
+
| `a OR b` | either term (plain spaces mean AND) |
|
|
127
|
+
| `deploy*` | prefix match |
|
|
128
|
+
| `role:user` / `-role:assistant` | only / not that role |
|
|
129
|
+
| `project:foo` / `-project:foo` | project id contains / doesn't contain `foo` |
|
|
130
|
+
| `session:<id>` | one session |
|
|
131
|
+
| `after:2026-01-01` `before:2026-02-01` | date range (ISO dates) |
|
|
132
|
+
|
|
133
|
+
Example: `"staging deploy" -rollback role:user after:2026-09-01`. A query needs at
|
|
134
|
+
least one positive term — `-word` or filters alone return nothing. Unknown
|
|
135
|
+
`key:` prefixes (like `http://x`) are searched as plain text.
|
|
124
136
|
|
|
125
137
|
### Conversation viewer
|
|
126
138
|
- Rendered markdown with code syntax highlighting
|
|
@@ -207,11 +219,11 @@ git fetch origin && git reset --hard origin/main
|
|
|
207
219
|
|
|
208
220
|
| Command | Description |
|
|
209
221
|
|---------|-------------|
|
|
210
|
-
| `
|
|
211
|
-
| `
|
|
212
|
-
| `
|
|
213
|
-
| `
|
|
214
|
-
| `
|
|
222
|
+
| `ring` | Launch the web UI (default) |
|
|
223
|
+
| `ring scan` | Rescan and print summary |
|
|
224
|
+
| `ring today` | Show today's token usage and cost |
|
|
225
|
+
| `ring stats` | Print statistical metrics |
|
|
226
|
+
| `ring tips` | Print optimization tips |
|
|
215
227
|
|
|
216
228
|
### Keyboard shortcuts
|
|
217
229
|
|
|
@@ -229,7 +241,7 @@ git fetch origin && git reset --hard origin/main
|
|
|
229
241
|
|
|
230
242
|
## Configuration
|
|
231
243
|
|
|
232
|
-
Settings are saved to `~/.config/
|
|
244
|
+
Settings are saved to `~/.config/agent-decoder/config.json`. Edit them in the UI,
|
|
233
245
|
or directly:
|
|
234
246
|
|
|
235
247
|
```json
|
|
@@ -242,14 +254,14 @@ or directly:
|
|
|
242
254
|
}
|
|
243
255
|
```
|
|
244
256
|
|
|
245
|
-
The session index lives at `~/.local/share/
|
|
246
|
-
survives cache clears). To force a full rescan, run `
|
|
257
|
+
The session index lives at `~/.local/share/agent-decoder/index.db` (durable, so it
|
|
258
|
+
survives cache clears). To force a full rescan, run `ring --force-refresh` —
|
|
247
259
|
prefer this over deleting the DB, which also discards stars, archives, and custom
|
|
248
260
|
titles.
|
|
249
261
|
|
|
250
262
|
## Architecture
|
|
251
263
|
|
|
252
|
-
|
|
264
|
+
Agent Decoder is a local-first FastAPI server that scans your AI coding
|
|
253
265
|
assistant's JSONL session files into a SQLite index, serves a React +
|
|
254
266
|
TypeScript SPA, and drives the Claude CLI through a hidden PTY for in-app
|
|
255
267
|
sessions.
|
|
@@ -259,17 +271,17 @@ See [`ARCHITECTURE.md`](ARCHITECTURE.md) for a system diagram and deeper notes.
|
|
|
259
271
|
## Development
|
|
260
272
|
|
|
261
273
|
```bash
|
|
262
|
-
git clone https://github.com/Comradery64/
|
|
263
|
-
cd
|
|
274
|
+
git clone https://github.com/Comradery64/Agent-Decoder
|
|
275
|
+
cd Agent Decoder
|
|
264
276
|
|
|
265
277
|
# Install backend deps (into an isolated .venv) + build the frontend
|
|
266
278
|
make dev # = uv sync && build frontend
|
|
267
279
|
|
|
268
280
|
# Run the app from source — in the project venv, so it always runs THIS
|
|
269
281
|
# checkout (no global install, no shadowing):
|
|
270
|
-
uv run
|
|
282
|
+
uv run ring --no-open
|
|
271
283
|
# equivalently, as a module from the checkout root:
|
|
272
|
-
uv run python -m
|
|
284
|
+
uv run python -m agent_decoder --no-open
|
|
273
285
|
# (make run wraps this)
|
|
274
286
|
|
|
275
287
|
# Run tests
|
|
@@ -306,9 +318,9 @@ process in [`SECURITY.md`](SECURITY.md) — do **not** open a public issue.
|
|
|
306
318
|
|
|
307
319
|
## Acknowledgements
|
|
308
320
|
|
|
309
|
-
|
|
321
|
+
Agent Decoder is **inspired by, and built around the file format of, [Claude](https://www.anthropic.com/claude) and Claude Code from [Anthropic](https://www.anthropic.com/)**. This project is not affiliated with, endorsed by, or sponsored by Anthropic, PBC. *Claude* and *Claude Code* are trademarks of Anthropic, PBC; all references in this project are nominative.
|
|
310
322
|
|
|
311
|
-
> *A personal note from the author* — I didn't write the code in this repository or build any of the underlying tools. I sat at my computer, typed into it, and kept asking it for more. The actual line-by-line authoring was done by AI coding assistants — Anthropic's [Claude](https://www.anthropic.com/claude) (Sonnet and Opus) and [Z.ai](https://z.ai/)'s GLM-5.1, with the latter doing a substantial share of the heavy lifting alongside them. They aren't in the lists below because they're AI models rather than libraries, but they deserve named credit here. The projects, products, and people below did the rest of the real work that made
|
|
323
|
+
> *A personal note from the author* — I didn't write the code in this repository or build any of the underlying tools. I sat at my computer, typed into it, and kept asking it for more. The actual line-by-line authoring was done by AI coding assistants — Anthropic's [Claude](https://www.anthropic.com/claude) (Sonnet and Opus) and [Z.ai](https://z.ai/)'s GLM-5.1, with the latter doing a substantial share of the heavy lifting alongside them. They aren't in the lists below because they're AI models rather than libraries, but they deserve named credit here. The projects, products, and people below did the rest of the real work that made Agent Decoder possible:
|
|
312
324
|
|
|
313
325
|
**Backend (Python)**
|
|
314
326
|
|
|
@@ -370,7 +382,7 @@ The Native view ships these monospace fonts so the in-app font picker works on a
|
|
|
370
382
|
- [Ruff](https://docs.astral.sh/ruff/) and [pre-commit](https://pre-commit.com/) — code style and pre-commit hooks
|
|
371
383
|
- [Editorconfig](https://editorconfig.org/) — consistent indentation across editors
|
|
372
384
|
|
|
373
|
-
Every project listed above is independently licensed by its respective authors; check each project's repository for terms. If we've missed an attribution, please [open an issue](https://github.com/Comradery64/
|
|
385
|
+
Every project listed above is independently licensed by its respective authors; check each project's repository for terms. If we've missed an attribution, please [open an issue](https://github.com/Comradery64/Agent-Decoder/issues).
|
|
374
386
|
|
|
375
387
|
## License
|
|
376
388
|
|