t1066: Open Tech Explorer provider agent and tech-stack-helper.sh#1544
t1066: Open Tech Explorer provider agent and tech-stack-helper.sh#1544marcusquinn merged 2 commits intomainfrom
Conversation
…1066) - Create tools/research/providers/openexplorer.md subagent with full API docs, detection method analysis, common schema mapping, and provider comparison - Create tech-stack-helper.sh with multi-provider architecture, OpenExplorer integration (search/tech/category/analyse commands), caching, and Playwright fallback for the React SPA - Document strengths (free, open-source, metadata-rich) and gaps (small dataset, ~72 techs vs 1500+ in Wappalyzer, no version detection)
|
Warning Rate limit exceeded
⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary of ChangesHello @marcusquinn, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request introduces a new Highlights
Changelog
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
🔍 Code Quality Report�[0;35m[MONITOR]�[0m Code Review Monitoring Report �[0;34m[INFO]�[0m Latest Quality Status: �[0;34m[INFO]�[0m Recent monitoring activity: 📈 Current Quality Metrics
Generated on: Mon Feb 16 21:08:11 UTC 2026 Generated by AI DevOps Framework Code Review Monitoring |
|
There was a problem hiding this comment.
Code Review
This pull request introduces a new tech-stack-helper.sh script for technology discovery and corresponding documentation. The script is well-structured and uses a multi-provider architecture, which is great. My review focuses on improving its robustness and maintainability. I've identified a critical issue regarding temporary file cleanup that could lead to resource leaks. I also have suggestions to improve error handling visibility and align with the repository's shell scripting style guide for variable declarations. The accompanying documentation is clear and comprehensive.
|
|
||
| # Create a temporary Playwright script | ||
| local tmp_script | ||
| tmp_script="$(mktemp /tmp/oe-analyse-XXXXXX.mjs)" |
There was a problem hiding this comment.
The temporary script file created with mktemp is not guaranteed to be cleaned up if the script fails or is interrupted after the file is created but before rm -f is called. This can lead to orphaned files in the /tmp directory. The repository style guide mandates using trap for cleaning up temporary files to ensure cleanup always occurs.
| tmp_script="$(mktemp /tmp/oe-analyse-XXXXXX.mjs)" | |
| tmp_script="$(mktemp /tmp/oe-analyse-XXXXXX.mjs)" | |
| trap 'rm -f "$tmp_script"' EXIT |
References
- Temp files must have
trapcleanup (RETURN or EXIT) (Line 33) (link)
| # ============================================================================= | ||
|
|
||
| print_header() { | ||
| local msg="$1" |
There was a problem hiding this comment.
The repository style guide requires declaring and assigning local variables from function arguments in separate steps for exit code safety. This pattern should be applied consistently across all functions in the script that process arguments (e.g., normalise_url, cache_key, etc.).
| local msg="$1" | |
| local msg | |
| msg="$1" |
References
- Use
local var="$1"pattern in functions (declare and assign separately for exit code safety) (Line 11) (link)
| if result="$( | ||
| npx --yes playwright test --reporter=list 2>/dev/null | ||
| node "$tmp_script" "$normalised" 2>/dev/null | ||
| )"; then |
There was a problem hiding this comment.
The use of 2>/dev/null on the node command suppresses all error output from the Playwright script, making it very difficult to debug failures. While the if condition will catch the failure, the underlying cause will be hidden. The repository style guide discourages blanket error suppression.
| if result="$( | |
| npx --yes playwright test --reporter=list 2>/dev/null | |
| node "$tmp_script" "$normalised" 2>/dev/null | |
| )"; then | |
| if result="$( | |
| npx --yes playwright test --reporter=list 2>/dev/null | |
| node "$tmp_script" "$normalised" | |
| )"; then |
References
2>/dev/nullis acceptable ONLY when redirecting to log files, not blanket suppression (Line 50) (link)



Summary
tools/research/providers/openexplorer.mdsubagent documenting OpenExplorer.tech as a free, open-source tech stack discovery providertech-stack-helper.shwith multi-provider architecture, OpenExplorer integration (search/tech/category/analyse commands), result caching, and Playwright fallback for the React SPADetails
OpenExplorer.tech is a community-driven platform (React + Supabase + Chrome Extension) that detects ~72 technologies via client-side JS object inspection, DOM patterns, and metadata analysis. The Supabase API requires auth credentials, so the helper script provides:
ShellCheck: zero violations. All commands tested and verified.
Ref #1527