<div align="center">

# 🔍 AI Code Sherlock

**AI-powered IDE assistant for intelligent code analysis, surgical patching and autonomous improvement pipelines**

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![Python](https://img.shields.io/badge/Python-3.11+-blue.svg)](https://python.org)
[![PyQt6](https://img.shields.io/badge/UI-PyQt6-green.svg)](https://pypi.org/project/PyQt6/)
[![Ollama](https://img.shields.io/badge/AI-Ollama%20%7C%20OpenAI%20%7C%20API-purple.svg)](https://ollama.ai)
[![Version](https://img.shields.io/badge/version-3.0.0-brightgreen.svg)](https://github.com/signupss/ai-code-sherlock/releases)

[🌐 Website](https://codesherlock.dev/) · [⬇ Download](https://github.com/signupss/ai-code-sherlock/releases/latest) · [📖 Docs](#-quick-start) · [🐛 Issues](https://github.com/signupss/ai-code-sherlock/issues)

![AI Code Sherlock Screenshot](screenshot.png)

</div>

---

## ✨ What is AI Code Sherlock?

AI Code Sherlock is a desktop IDE assistant and **visual AI Workflow Constructor** that works like a detective for your codebase. It uses local (Ollama) or cloud AI models to analyze errors, generate surgical patches, and run autonomous improvement pipelines — without ever rewriting your whole file.

**Key idea:** instead of regenerating entire files, the AI outputs only `[SEARCH_BLOCK] → [REPLACE_BLOCK]` patches — precise, reviewable, and safe.

**v3.0 adds:** a fully visual drag-and-drop **Workflow Constructor** — build infinite-complexity AI agent pipelines with 50+ node types, browser/desktop automation, conditional logic, loops, and variables. No code required.

---

## 🚀 Features

| Feature | Description |
|---------|-------------|
| ⚙️ **Auto-Improve Pipeline** | Set a goal, run a script, let AI iterate autonomously up to N times |
| 🕵️ **Sherlock Mode** | Automated root-cause analysis with confidence scoring |
| ⚡ **Surgical Patching** | Exact SEARCH/REPLACE — never rewrites whole files |
| 🧠 **Multi-Model Engine** | Ollama (offline), any OpenAI-compatible API, ZennoPoster File Signal |
| 🗜️ **Context Compression** | 120k tokens → 4k without losing signal using AST skeleton extraction |
| 🗂️ **Error Map** | Persistent database of errors + confirmed solutions |
| 📉 **Log Compressor** | Smart log compression preserving 100% of errors and tracebacks |
| ⏱️ **Version Control** | Every patch backed up automatically, one-click restore |
| 🔄 **Universal File Reader** | Reads xlsx, parquet, numpy, pickle, HTML, JSON for AI context |
| 🌍 **i18n** | Full English / Russian UI, switch live in Settings |
| 🎨 **Themes** | 4 UI themes (Dark, Light, Monokai, Dracula) + custom accent color, font size |
| 🏗️ **Workflow Constructor** | Visual drag-and-drop AI agent pipeline builder — 50+ node types, unlimited complexity |
| 🤖 **AI Agent Nodes** | Code Writer, Reviewer, Planner, Tester, Orchestrator, Patcher, Image Gen/Analyst, and more |
| 🔀 **Automation Snippets** | If/Else, Loop, Switch, Variable Set, HTTP Request, Delay, Log, Notifications, JS Snippets |
| 🌐 **Browser Automation** | Launch, click, screenshot, profile management — all as visual nodes |
| 🖥️ **Desktop Automation** | Open programs, click by image, screenshot, run actions — all visual nodes |
| 📋 **Lists & Tables** | Project-scoped lists and tables with file-backed persistence and runtime access |
| 🔗 **Conditional Routing** | LLM router, conditional branches, fallback agents, retry with backoff |
| 🧩 **Skill Registry** | Built-in and custom skills injected into agent system prompts automatically |
| 🔄 **Infinite Loop Guard** | Auto-detects repeated errors in pipeline logs, kills process, rolls back, re-patches |
| 📖 **Companion Scripts** | Add read-only context scripts to pipeline — AI sees them but never runs or patches them |
| 🤝 **Consensus Engine** | Query multiple models simultaneously, pick the best answer |
| 📡 **Signal Monitor** | Real-time ZennoPoster folder watcher |
| 🧩 **New Project Wizard** | Create a project with correct language, files auto-generated by AI |
| ▶️ **Live Script Execution** | Run any script with real-time output streaming + interactive stdin |

---

## 📦 Quick Start

### Requirements

- Python **3.11+**
- Windows 10/11, macOS 12+, or Linux Ubuntu 20+

### Installation

```bash
# 1. Clone the repository
git clone https://github.com/signupss/ai-code-sherlock.git
cd ai-code-sherlock

# 2. Install dependencies
pip install -r requirements.txt

# 3. Run
python main.py
```

### Windows — double-click launcher

```
run.bat
```

### Optional heavy dependencies (install only if needed)

```bash
# Excel file reading
pip install openpyxl

# Parquet / Feather / DataFrame files
pip install pandas pyarrow

# NumPy .npy/.npz files
pip install numpy

# PyTorch model files (.pt/.pth)
pip install torch --index-url https://download.pytorch.org/whl/cpu

# HDF5 model files
pip install h5py
```

---

## 🤖 Supported AI Models

### Ollama (offline, no API key needed)

```bash
ollama serve
ollama pull deepseek-coder-v2   # best for code
ollama pull llama3.2
ollama pull codestral
ollama pull qwen2.5-coder:7b
```

### Cloud APIs (OpenAI-compatible)

| Provider | Base URL | Model example |
|----------|----------|---------------|
| OpenAI | `https://api.openai.com` | `gpt-4o` |
| Anthropic (via proxy) | `https://api.openai.com` | `claude-3-5-sonnet` |
| Groq | `https://api.groq.com/openai` | `llama-3.3-70b-versatile` |
| Together AI | `https://api.together.xyz` | `mixtral-8x7b` |
| Mistral | `https://api.mistral.ai` | `codestral-latest` |
| Gemini (via proxy) | `https://generativelanguage.googleapis.com/v1beta/openai` | `gemini-2.0-flash` |
| LM Studio | `http://localhost:1234` | any local model |
| Kobold.cpp | `http://localhost:5001` | any local model |

### File Signal (ZennoPoster IPC)

Drop a `.txt` prompt into a request folder, poll the response folder. Works with any AI reachable by ZennoPoster, Selenium scripts, or any other automation tool.

---

## ▶️ Live Script Execution & Interactive Stdin

Click **▶ Run Script** in the toolbar to run the active file (or pick any script). Output streams live into the **📋 Logs** tab — color-coded by stream:

| Color | Meaning |
|-------|---------|
| White | stdout |
| Red | stderr |
| Purple | System events (start / finish) |
| Yellow | User input echo (`>> text`) |

### Interactive stdin

While the script is running, an **input field** activates at the bottom of the Logs tab. Type anything and press `Enter` or click `⏎` to send it to the running process — exactly as if you typed it in a terminal.

Works natively with all language input mechanisms:
- Python `input()`, `sys.stdin.read()`
- Bash `read VAR`
- Node.js `readline` / `process.stdin`
- Ruby `gets`, `$stdin.gets`
- PHP `fgets(STDIN)`
- Go `fmt.Scan`, `bufio.NewReader(os.Stdin)`
- And any other language that reads from stdin

The stdin pipe stays **open for the full duration** of the script. The input field is automatically disabled once the script exits.

### How it works internally

```
Qt main thread          Worker event loop (asyncio)
─────────────────       ──────────────────────────────────
send_stdin("show\n") → asyncio.run_coroutine_threadsafe
                      → queue.put("show\n")
                      → _stdin_pump() drains queue
                      → proc.stdin.write(...)
                      → proc.stdin.drain()
```

The queue-based pump runs as a third coroutine alongside the stdout/stderr readers — **no race conditions, no closed-pipe errors**.

### Supported script languages

| Language | Extension(s) | Interpreter |
|----------|-------------|-------------|
| Python | `.py` | `python -u` (unbuffered) |
| JavaScript | `.js` `.mjs` `.cjs` | `node` |
| TypeScript | `.ts` | `ts-node` / `npx ts-node` |
| Ruby | `.rb` | `ruby` |
| PHP | `.php` | `php` |
| Perl | `.pl` `.pm` | `perl` |
| Lua | `.lua` | `lua` / `lua5.4` |
| R | `.r` `.rscript` | `Rscript` |
| Julia | `.jl` | `julia` |
| Go | `.go` | `go run` |
| Java | `.java` | `java` (single-file, Java 11+) |
| Bash / Shell | `.sh` `.bash` | `bash` |
| Batch | `.bat` `.cmd` | `cmd /c` |
| PowerShell | `.ps1` | `powershell -ExecutionPolicy Bypass` |
| Any `#!` file | *(no extension)* | Shebang line auto-detected |
| Executable | *(chmod +x)* | Direct execution |

> **Shebang fallback:** if the extension is unknown, Sherlock reads the first line of the file. If it starts with `#!`, that interpreter is used automatically.

---

## 🆕 New Project Mode

When you create a **New Project**, AI Sherlock can generate complete files from scratch:

1. Click **📋 New Project** in the toolbar
2. Select a folder and project name
3. Choose **New Project** mode in the wizard
4. Describe what you want in the chat:
   > *"Create main.py — a script that parses CSV files and outputs statistics"*

AI will generate the file with the correct extension, save it to the project folder, and open it in the editor automatically.

---

## ⚙️ Auto-Improve Pipeline

The most powerful feature — runs your script, reads output, generates a patch, validates syntax, applies it, and repeats autonomously.

```
Goal:     "achieve f1 > 0.85 on validation set"
Script:   train_model.py
Strategy: SAFE_RATCHET
Max iter: 20
```

### 8 AI Strategies

| Strategy | When to use |
|----------|-------------|
| 🛡️ Conservative | Only fix errors, minimal changes |
| ⚖️ Balanced | Fix + moderate improvements (default) |
| 🔥 Aggressive | Maximum changes, refactor logic |
| 🧭 Explorer | Different approach every iteration |
| 📈 Exploit | Double down on what already worked |
| 🔒 Safe Ratchet | Apply only if metrics improve |
| 🔬 Hypothesis | Form hypothesis → test → validate |
| 🎭 Ensemble | Generate 3 variants, pick best |

---

## ✂️ Patch Format

The AI generates structured SEARCH/REPLACE blocks:

```
[SEARCH_BLOCK]
    result = data[0]["value"]
[REPLACE_BLOCK]
    if not data:
        return None
    result = data[0]["value"]
[END_PATCH]
```

**New file creation** — empty SEARCH_BLOCK:

```
Создаю `main.py`:
[SEARCH_BLOCK]
[REPLACE_BLOCK]
import pandas as pd

def main():
    df = pd.read_csv("data.csv")
    print(df.describe())

if __name__ == "__main__":
    main()
[END_PATCH]
```

The engine finds the exact match (or normalized whitespace fallback), validates it's unambiguous, creates a backup, applies the patch, runs syntax check — all before saving.

---

## 🤝 Consensus Engine

Query multiple models simultaneously and combine results:

| Mode | Description |
|------|-------------|
| 🗳️ Vote | Patches agreed on by ≥ N models win |
| 🏆 Best-of-N | Pick response with most valid patches |
| 🔀 Merge | Combine unique patches from all models |
| ⚖️ Judge | One model reads all responses, picks best |

---

## 🔍 Sherlock Mode

Enable the **🔍 Sherlock Mode** toggle to activate root-cause analysis:

```
Input:  error logs + relevant code
Output: hypothesis + minimal patch + confidence score
```

Example output:
```
Clue: data[0] accessed before empty-list guard at line 47
Root cause: function called with empty list on edge case
Confidence: HIGH (92%) — stack trace unambiguous
```

---

## 🏗️ Architecture

```
AI Code Sherlock/
├── constructor/                        # ── Visual constructor (node-based logic/agent editor)
│   ├── graphics/                       # Constructor graphical core (PyQt/PySide)
│   │   ├── __init__.py
│   │   ├── items.py                    # Visual items (nodes, connectors)
│   │   ├── minimap.py                  # Minimap for navigating large schemas
│   │   ├── scene.py                    # Graphical scene (canvas) of the editor
│   │   └── view.py                     # Viewport (zoom and pan controls)
│   ├── panels/                         # Constructor UI panels
│   │   ├── __init__.py
│   │   ├── properties.py               # Properties panel for the selected node/agent
│   │   └── variables.py                # Global and local schema variables management
│   ├── runtime/                        # Execution environment for visual schemas
│   │   ├── __init__.py
│   │   ├── debugger.py                 # Visual debugger (step-by-step node execution)
│   │   └── engine.py                   # Execution engine for built schemas
│   ├── __init__.py
│   ├── browser_module.py               # Web automation integration module for the constructor
│   ├── commands.py                     # Command pattern (Undo/Redo for constructor actions)
│   ├── constants.py                    # ══════ Visual editor constants ══════
│   ├── project_dashboard.py            # Dashboard for managing schemas and workflows
│   └── project_manager.py              # Saving/loading constructor states
├── core/                               # ── Application Core ──────────────────────────
│   ├── __init__.py
│   ├── interfaces.py                   # Abstract interfaces (ABC)
│   └── models.py                       # Domain data models (dataclasses/pydantic)
├── providers/                          # ── LLM API Providers ───────────────────────
│   ├── __init__.py
│   └── providers.py                    # API wrappers (OpenAI, Anthropic, local models)
├── services/                           # ── Business logic and background services ───────────
│   ├── __init__.py
│   ├── agent_models.py                 # Logic models and prompts for custom AI agents
│   ├── auto_improve_engine.py          # Autonomous code improvement pipeline orchestrator
│   ├── consensus_engine.py             # Multi-LLM consensus system
│   ├── engine.py                       # PatchEngine, PromptEngine, ContextCompressor, ModelManager
│   ├── error_map.py                    # Persistent error database (knowledge accumulation)
│   ├── file_converter.py               # Universal file to AI text converter
│   ├── log_compressor.py               # Smart log compression to save tokens
│   ├── logger_service.py               # Centralized logging service
│   ├── pipeline_models.py              # Data models for execution pipelines
│   ├── project_manager.py              # Project state, AST skeleton builder
│   ├── providers.py                    # LLM provider request router
│   ├── response_filter.py              # AI response sanitizer (unicode cleanup, code block parsing)
│   ├── script_runner.py                # Async script runner (15+ languages, interactive stdin)
│   ├── settings_manager.py             # Atomic JSON settings management
│   ├── signal_watcher.py               # File system monitoring (incl. ZennoPoster folders)
│   ├── skill_registry.py               # Registry of skills and tools for AI agents
│   ├── version_control.py              # Local file backup and restore system
│   └── workflow_runtime.py             # Runtime environment for complex multi-step tasks
├── skill_example/						# Agent skill example files
├── tests/                              # ── Automated Tests ─────────────────
│   ├── __init__.py
│   ├── test_all.py                     # 55+ unit tests (basic imports and core checks)
│   ├── test_new_services.py            # Tests for new modules (agents, constructor)
│   └── test_pipeline.py                # Pipeline integration tests
├── ui/                                 # ── User Interface (UI) ──────────
│   ├── dialogs/                        # Dialog windows
│   │   ├── __init__.py
│   │   ├── agent_constructor.py        # Main window for the AI agent creation wizard
│   │   ├── custom_strategy_editor.py   # Editor for custom refactoring strategies
│   │   ├── error_map_dialog.py         # View and edit the error knowledge base
│   │   ├── new_project_wizard.py       # New project creation wizard
│   │   ├── patch_preview.py            # Diff viewer (before/after AI patch application)
│   │   ├── pipeline_dialog.py          # Pipeline setup and execution
│   │   ├── settings_dialog.py          # Global application settings
│   │   └── version_history.py          # View and rollback local file versions
│   ├── panels/                         # Main window dock panels
│   │   ├── __init__.py
│   │   └── auto_run_panel.py           # Real-time pipeline log viewing panel
│   ├── styles/                         # UI Themes
│   │   ├── __init__.py
│   │   └── dark_theme.qss              # Dark theme (Qt Style Sheets)
│   ├── widgets/                        # Custom widgets
│   │   ├── __init__.py
│   │   ├── code_editor.py              # Code editor (line numbers, syntax highlighting)
│   │   ├── file_tree.py                # Project file manager with lazy-loading
│   │   └── syntax_highlighter.py       # Syntax highlighting logic
│   ├── __init__.py
│   ├── i18n.py                         # Multilingual support (EN/RU localizations)
│   ├── main_window.py                  # Main IDE application window with workspaces
│   └── theme_manager.py                # Dynamic theme switching and application (QSS)
├── main.py                             # ── Application Entry Point ─────────────────
├── README.md                           # Project documentation
├── requirements.txt                    # ── Core dependencies ───────────────
├── run.bat                             # Windows startup script
└── run.sh                              # Linux/macOS startup script
```

---

## 🖥️ UI Panels

The main window is split into four panels:

| Panel | Contents |
|-------|----------|
| **Left** | File tree — lazy-loading explorer with search, bookmarks, context menu |
| **Center-left** | Code editor — syntax highlight, line numbers, multi-tab, run button per file |
| **Center-right** | Chat / Logs / Context / Signals / Auto-run tabs |
| **Right** | AI Patches — preview, apply, reject, status tracking |

### Center-right tab details

| Tab | Description |
|-----|-------------|
| 💬 **Chat** | Streaming AI responses, save-as-file button, all chat history |
| 📋 **Logs** | Structured logger + live script output with interactive stdin field |
| 📦 **Context** | Shows exactly which files and tokens were sent to AI |
| 📡 **Signals** | Real-time ZennoPoster folder event monitor |
| ⚡ **Auto-run** | Pipeline control — Live Log · AI Analysis · Patches sub-tabs |

All text panels have **scrollbars enabled** and auto-scroll to the latest output.

---

## ⌨️ Keyboard Shortcuts

| Shortcut | Action |
|----------|--------|
| `Ctrl+Enter` | Send message to AI |
| `Ctrl+S` | Save active file |
| `Ctrl+O` | Open file |
| `Ctrl+Shift+O` | Open project folder |
| `Ctrl+F` | Search in editor |

---

## 🧪 Tests

```bash
pip install pytest pytest-asyncio
python -m pytest tests/test_all.py -v
```

55+ tests covering: PatchEngine, ContextCompressor, PromptEngine, SettingsManager, FileSignalService, StructuredLogger, VersionControl, ConsensusEngine.

---

## 📋 Settings Location

```
Windows:  C:\Users\<user>\.ai_code_sherlock\settings.json
Linux:    ~/.ai_code_sherlock/settings.json
macOS:    ~/.ai_code_sherlock/settings.json
```

---

## 🔄 Changelog

### v3.0.0 — Workflow Constructor
- 🏗️ **Visual Workflow Constructor** — drag-and-drop canvas for building AI agent pipelines of any complexity
- 🤖 **50+ Node Types** — AI agents (Code Writer, Reviewer, Planner, Tester, Orchestrator, Patcher, Image Gen/Analyst, Verifier, Custom) + automation snippets
- 🔀 **Full Control Flow** — If/Condition, Switch, Loop, Variable Set, HTTP Request, Delay, Log Message, Notifications, JS Snippets
- 🌐 **Browser Automation Nodes** — Launch browser, click, screenshot, profile operations — all as draggable nodes
- 🖥️ **Desktop Program Automation** — Open program, click by image, screenshot, run actions — all visual
- 📋 **Lists & Tables** — Project-level lists and tables with static/on_start/always load modes, file-backed
- 🔗 **Smart Edge Routing** — LLM router, conditional branches, fallback agents, retry with exponential backoff
- 🧩 **Skill Registry** — Built-in and user-created skills automatically injected into agent prompts
- 🐛 **Breakpoints & Debugger** — Step-through execution, variable inspection, pause/resume/step
- 🌍 **Globals** — Cross-thread global variables accessible from all workflow nodes
- 🎨 **4 UI Themes** — Dark (Tokyo Night), Light, Monokai, Dracula + custom accent color
- 🔁 **Infinite Loop Guard** — Auto-detects repeated pipeline errors, kills runaway process, rolls back
- 📌 **Notes & Start Nodes** — Canvas annotations and workflow entry points
- 🏷️ **Undo/Redo** — Full history for all canvas and property changes (Ctrl+Z / Ctrl+Y)

### v2.3.1
- 🌍 **System i18n**: Added full localization for exit confirmation dialogs and "Unsaved Changes" warnings.
- 🛠️ **UI Polish**: Fixed untranslated strings in the main application menu and system popups.
- 🛡️ **Shutdown Safety**: Improved file state checking before closing the application to prevent data loss.

### v2.3.0
- 🎨 **Light / Monokai / Dracula themes** — full 4-theme support with live switching, accent color picker, all dialogs and editor respond instantly without restart
- 🔄 **Infinite loop guard** — pipeline detects repeated error lines (threshold configurable), auto-kills the process, rolls back the last patch, tells AI exactly what happened and asks for a different approach
- 📖 **Companion Scripts** — new `Context AI` script role in Pipeline: AI reads the file for architectural understanding but never runs or patches it — prevents validator breakage when patching primary scripts
- 🌐 **Full light-theme coverage** — all dialogs (Pipeline, Settings, Error Map, Patch Preview, Version History, New Project Wizard) now use `get_color()` — zero hardcoded dark hex values
- 📊 **Editor scrollbars** — code editor scrollbars now respect the active theme palette
- 🐛 **Theme switch without restart** — `unpolish/polish` + deferred `QTimer` repaint ensures all widgets update immediately on theme change
- 🐛 **ACTIVE badge fix** — title bar badge now updates color correctly on theme switch

### v2.2.0
- ▶️ **Live Script Execution** — script output now streams to the Logs tab in real-time (stdout white, stderr red)
- ⌨️ **Interactive stdin** — type into the Logs tab input field to send text to a running script; works for all 15+ supported languages
- 🔧 **Queue-based stdin pump** — no race conditions; stdin pipe stays open for the full script duration; `asyncio.run_coroutine_threadsafe` + `asyncio.Queue` architecture
- 🌐 **15+ script languages** — added JS, TS, Ruby, PHP, Perl, Lua, R, Julia, Go, Java, PowerShell; shebang auto-detection for unknown extensions
- 📜 **Scroll fixed** — all sub-panels (Logs, Context, Signals, Auto-run sub-tabs) now have proper scroll policies
- 🌍 **i18n expanded** — new translation strings for stdin field, script runner messages, auto-run panel placeholders and tab labels
- 🐛 **Bug fix** — `_run_task` now uses `self._script_runner` (shared instance) instead of creating a new local `ScriptRunner`, which broke `send_stdin`
- 🐛 **Bug fix** — `asyncio.get_event_loop()` replaced with `asyncio.get_running_loop()` for correct loop capture inside coroutines
- 🐛 **Bug fix** — removed `proc.stdin.close()` after auto_input sequences, which was permanently closing the pipe

### v2.1.0
- 🆕 New Project Mode — AI generates complete files from description
- 🤝 Consensus Engine — Vote / Best-of-N / Merge / Judge modes
- 🌍 Full EN/RU i18n — live language switch without restart
- 💾 Save-as-File button on every AI response bubble
- 🎯 Patch targets row — add multiple files per request
- 🧩 Custom AI strategy editor

---

## 💙 Support the Project

AI Code Sherlock is free and open-source. If it saves you time or helps your workflow, consider supporting development — every contribution helps keep the project alive and actively maintained.

### ☕ Crypto Donations

| Network | Address |
|---------|---------|
| **USDT (TRC-20)** | `TGXNyinqWRmGXf2QmeDjL87qZg5xKt9JgM` |
| **USDT (ERC-20)** | `0x57dca387baf12e97aff94e0f8345ada3dc282a77` |
| **BTC** | `15NzxNTWmausgf8WXkpM2sxA2sCywAorcs` |
| **ETH (ERC-20)** | `0x57dca387baf12e97aff94e0f8345ada3dc282a77` |
| **TON** | `UQCWAY7uVT6VE8YUEWCSMe9ZHtbiR3AQ39gFVmLWRnBnejNr` |

> 💬 If you'd like to be listed as a sponsor in the README, open an [Issue](https://github.com/signupss/ai-code-sherlock/issues) with the title `[Sponsor]` after donating.

---

## 🤝 Contributing

Pull requests are welcome! For major changes, please open an issue first to discuss what you'd like to change.

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/my-feature`)
3. Commit your changes (`git commit -m 'Add my feature'`)
4. Push to the branch (`git push origin feature/my-feature`)
5. Open a Pull Request

---

## 📄 License

MIT License — see [LICENSE](LICENSE) for details.

---

<div align="center">

Built with ❤️ for developers who demand precision

⭐ **Star the repo if AI Code Sherlock helps you!** ⭐

</div>
