Remove docker/setup-buildx-action step which requires special
Docker daemon configuration. Use plain docker build commands
instead for better compatibility with Gitea Actions runner.
This simplifies the workflow and works with the standard
catthehacker/ubuntu:act-latest images that have Docker CLI
pre-installed.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add Gitea Actions workflow to automatically build and push Docker
images to Gitea container registry.
New files:
- .gitea/workflows/build.yaml: Automated Docker build workflow
- Triggers on push to main, tags, and manual dispatch
- Builds Docker image from Dockerfile
- Tags appropriately (commit SHA, tags, latest)
- Pushes to Gitea registry at 10.0.1.10
- CONTAINER_REGISTRY.md: Complete documentation for:
- Enabling Gitea container registry
- Setting up CI/CD with Gitea Actions
- Creating and using personal access tokens
- Pulling and pushing images
- Troubleshooting common issues
The workflow is compatible with the existing Dockerfile and provides
automated builds similar to the GitLab CI pipeline.
Prerequisites:
- Gitea container registry enabled
- GITEA_TOKEN secret configured with write:package scope
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Replace PS1 export with NIX_PROJECT_SHELL environment variable for
better integration with shell prompt configurations.
Also add trailing newline to flake.nix for proper formatting.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Update all user-facing documentation to reflect the migration from
Anthropic API to OpenRouter.
Changes:
- Update README.md to reference OpenRouter instead of Anthropic in:
- Features section
- Architecture diagram comments
- Configuration instructions
- API key acquisition links
- Update main.py docstring to use OPENROUTER_API_KEY
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Replace direct Anthropic API integration with OpenRouter to enable
more flexible LLM provider access while maintaining Claude 3.5 Sonnet.
Changes:
- Replace anthropic package with openai in requirements.txt
- Update config to use OPENROUTER_API_KEY instead of ANTHROPIC_API_KEY
- Migrate LLMAnalyzer from Anthropic client to OpenAI client with
OpenRouter base URL (https://openrouter.ai/api/v1)
- Update model identifier to OpenRouter format: anthropic/claude-3.5-sonnet
- Convert API calls from messages.create() to chat.completions.create()
- Update response parsing to match OpenAI format
- Rename API key parameter in CompanyAnalyzer from anthropic_api_key
to openrouter_api_key
- Update all tests to mock OpenAI client instead of Anthropic
- Fix client initialization to accept direct API key parameter
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Updated README.md with complete documentation:
- Project overview and features
- Architecture diagram
- Installation instructions (NixOS + manual)
- Configuration guide with API key setup
- Usage examples (basic + single patent)
- Testing instructions
- How it works explanation
- Updated roadmap with completed items
- Development guidelines
Makes the project immediately usable for other developers.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Created CompanyAnalyzer class that orchestrates the complete pipeline:
1. Retrieves patents via SERP API
2. Downloads and parses PDFs
3. Minimizes content (removes bloat)
4. Analyzes portfolio with LLM
5. Returns performance estimation
Features:
- Full company portfolio analysis
- Single patent analysis support
- Robust error handling (continues on partial failures)
- Progress logging for user visibility
Updated main.py with clean example usage demonstrating the high-level API.
Added comprehensive test suite (7 tests) covering:
- Full pipeline integration
- Error handling at each stage
- Single patent analysis
- Edge cases (no patents, all failures)
All 26 tests passing.
This completes the core functionality for patent-based company
performance estimation.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implemented LLMAnalyzer class using Anthropic's Claude API for:
- Single patent content analysis
- Portfolio-wide analysis across multiple patents
- Configurable API key management via environment variables
Key features:
- Uses Claude 3.5 Sonnet for high-quality analysis
- Structured prompts for innovation assessment
- Token limits optimized per use case (1024 for single, 2048 for portfolio)
- Analyzes: innovation quality, market potential, strategic direction
Updated config.py to support ANTHROPIC_API_KEY environment variable.
Added comprehensive test suite (6 tests) covering:
- Initialization from config and direct API key
- Single patent analysis
- Portfolio analysis
- Token limit validation
All 19 tests passing.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added pytest and pytest-mock to requirements.txt for testing infrastructure.
Created tests/ directory with comprehensive test coverage for:
- Text cleaning functions (figure references, whitespace, line numbers)
- Section extraction logic (abstract, claims, case sensitivity)
All 8 tests passing. This provides a foundation for test-driven
development as we continue building the LLM integration.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Removed SPARC/patent_api.py as it contained duplicate implementations
of parse_patent_pdf, extract_section, and clean_patent_text functions
that are already present in SPARC/serp_api.py as static methods.
The serp_api.py implementation is actively used in main.py, while
patent_api.py was unused legacy code.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>