commits
- Remove textual and flask dependencies from main deps
- Remove coverage options from pytest config
- Add pytest to dev dependency group
- Remove links_cmd and threads_cmd commands
- Update command imports and exports
- Apply code formatting improvements across all files
- Streamline dependency management for CLI-focused tool
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major refactoring of the links system to store links/backlinks directly in entry JSON files
instead of separate metadata. Replaced the old index command with a new threads command
that visualizes conversation threads using both terminal and web interfaces.
Key changes:
- Add links and backlinks fields to AtomEntry model
- Rewrite links command to update individual entry files with extracted URLs
- Implement bidirectional link tracking (outbound links and inbound backlinks)
- Remove old index command and reference_parser module
- Create new threads command with:
- Thread detection using connected components algorithm
- Link type categorization (self/user/external references)
- Textual-based terminal UI for browsing threads
- Flask web server with D3.js force-directed graph visualization
- Enhanced cross-user attraction in force simulation for clearer conversation threads
- Add Flask and textual as dependencies
The web visualization includes user/link filtering, interactive tooltips, drag/zoom support,
and visual emphasis on cross-user conversations through stronger attraction forces and
thicker link lines.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Consolidate references.json, url_mapping.json, and links.json into unified links.json
- Eliminate duplication by storing each URL only once with metadata flags
- Add is_tracked_post flag and target_username to distinguish internal/external links
- Update all commands (links, index, threads, info) to use unified structure
- Maintain all existing functionality while reducing file I/O and complexity
- Update documentation and help text to reflect changes
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Changed links.json structure to map URLs to lists of atom IDs instead of single IDs
- Added proper deduplication to avoid storing duplicate entry IDs for same URL
- Fixed url_mapping.json by converting HttpUrl objects to strings for proper comparison
- Added debug output to show registered URLs count for troubleshooting
- Updated filtering logic to handle new list-based link structure
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit implements a comprehensive link processing and threading system:
- Add thicket.yaml to .gitignore for local configuration
- Implement link extraction command (links_cmd.py) with URL categorization
- Add reference index building (index_cmd.py) for cross-blog threading
- Create info command for detailed entry information
- Add reference_parser.py for link analysis and threading logic
- Enhance CLI with --tsv flag for tab-separated output format
- Update architecture documentation with threading system details
- Expand CLAUDE.md with uv package management instructions
The system now supports email-style threaded views of blog conversations
by tracking cross-references between different blogs and users.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Recreated utils.py with proper UTF-8 encoding
- CLI now runs successfully with uv run -m thicket
- All commands and help text working correctly
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Core Features:
- Modern CLI with Typer + Rich for beautiful terminal output
- Universal feed parser supporting RSS/Atom with auto-discovery
- Git storage system with structured JSON entries
- Duplicate management with manual curation
- Comprehensive test suite with pytest
Components:
- Data models: Pydantic models for config, feeds, users
- Core logic: FeedParser and GitStore classes
- CLI commands: init, add, sync, list, duplicates
- Tests: Complete test coverage for all components
- Documentation: README with usage examples
Architecture:
- src/thicket/ package structure
- Async HTTP with httpx for feed fetching
- HTML sanitization with bleach for security
- Modern Python packaging with pyproject.toml
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Modern Python stack: Typer + Rich + GitPython + feedparser + pydantic
- Feed auto-discovery: extracts user metadata from Atom/RSS feeds
- Duplicate management: manual curation via duplicates.json
- Git store: single branch, permanent history, sanitized filenames
- Cron-friendly: designed for scheduled execution
- Complete data models and CLI command structure
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove textual and flask dependencies from main deps
- Remove coverage options from pytest config
- Add pytest to dev dependency group
- Remove links_cmd and threads_cmd commands
- Update command imports and exports
- Apply code formatting improvements across all files
- Streamline dependency management for CLI-focused tool
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major refactoring of the links system to store links/backlinks directly in entry JSON files
instead of separate metadata. Replaced the old index command with a new threads command
that visualizes conversation threads using both terminal and web interfaces.
Key changes:
- Add links and backlinks fields to AtomEntry model
- Rewrite links command to update individual entry files with extracted URLs
- Implement bidirectional link tracking (outbound links and inbound backlinks)
- Remove old index command and reference_parser module
- Create new threads command with:
- Thread detection using connected components algorithm
- Link type categorization (self/user/external references)
- Textual-based terminal UI for browsing threads
- Flask web server with D3.js force-directed graph visualization
- Enhanced cross-user attraction in force simulation for clearer conversation threads
- Add Flask and textual as dependencies
The web visualization includes user/link filtering, interactive tooltips, drag/zoom support,
and visual emphasis on cross-user conversations through stronger attraction forces and
thicker link lines.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Consolidate references.json, url_mapping.json, and links.json into unified links.json
- Eliminate duplication by storing each URL only once with metadata flags
- Add is_tracked_post flag and target_username to distinguish internal/external links
- Update all commands (links, index, threads, info) to use unified structure
- Maintain all existing functionality while reducing file I/O and complexity
- Update documentation and help text to reflect changes
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Changed links.json structure to map URLs to lists of atom IDs instead of single IDs
- Added proper deduplication to avoid storing duplicate entry IDs for same URL
- Fixed url_mapping.json by converting HttpUrl objects to strings for proper comparison
- Added debug output to show registered URLs count for troubleshooting
- Updated filtering logic to handle new list-based link structure
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit implements a comprehensive link processing and threading system:
- Add thicket.yaml to .gitignore for local configuration
- Implement link extraction command (links_cmd.py) with URL categorization
- Add reference index building (index_cmd.py) for cross-blog threading
- Create info command for detailed entry information
- Add reference_parser.py for link analysis and threading logic
- Enhance CLI with --tsv flag for tab-separated output format
- Update architecture documentation with threading system details
- Expand CLAUDE.md with uv package management instructions
The system now supports email-style threaded views of blog conversations
by tracking cross-references between different blogs and users.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Core Features:
- Modern CLI with Typer + Rich for beautiful terminal output
- Universal feed parser supporting RSS/Atom with auto-discovery
- Git storage system with structured JSON entries
- Duplicate management with manual curation
- Comprehensive test suite with pytest
Components:
- Data models: Pydantic models for config, feeds, users
- Core logic: FeedParser and GitStore classes
- CLI commands: init, add, sync, list, duplicates
- Tests: Complete test coverage for all components
- Documentation: README with usage examples
Architecture:
- src/thicket/ package structure
- Async HTTP with httpx for feed fetching
- HTML sanitization with bleach for security
- Modern Python packaging with pyproject.toml
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Modern Python stack: Typer + Rich + GitPython + feedparser + pydantic
- Feed auto-discovery: extracts user metadata from Atom/RSS feeds
- Duplicate management: manual curation via duplicates.json
- Git store: single branch, permanent history, sanitized filenames
- Cron-friendly: designed for scheduled execution
- Complete data models and CLI command structure
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>