Generate a mermaid call graph of project. Attempt to identify dead code and duplicate functions.
Create a Mermaid `flowchart TD` diagram visualizing the functional structure and call flow of the current software project.
**Diagram Content:**
* **Structure:** Use subgraphs to represent files or modules containing functions/methods from the primary source code directories (e.g., `src/`, `app/`, exclude tests, dependencies).
* **Functions:** Represent key functions/methods within their respective subgraphs as nodes (labeled `FileName.functionName` or `ClassName.methodName`).
* **Function Purpose:** For each function node, provide a concise description. *Prioritize* extracting this from existing code comments (docstrings, JSDoc). If comments are absent, *attempt* to infer the purpose based on name and code, clearly marking it as inferred (e.g., "[inferred] Does X"). Display the function purpose as a tooltip associated with the node rather than directly in the node label to maintain visual clarity.
* **Call Relationships:** Draw directed arrows between function nodes to indicate direct calls made *within* the analyzed project source code.
**Analysis & Highlighting:**
* **Unused Functions:** Clearly identify and visually distinguish function nodes that are not called by any other analyzed function (potential dead code).
* **Similar Functionality:** *Attempt* to identify functions that appear to perform highly similar tasks, even if not syntactically identical. Highlight these nodes distinctly and potentially add a note about suspected similarity.
* **Highlighting** Use Mermaid classDef statements to define distinct styles (e.g., different border color/stroke, fill color) for 'unused' and 'similar' function nodes, and apply these classes to the relevant nodes in the diagram.
**Scope**
* Focus analysis on primary source code, explicitly excluding test suites, configuration files, and third-party libraries unless instructed otherwise.
* Exclude any files excluded by .gitignore
**Output:**
* Use Github flavored markdown.
* Document has the following layout:
* A mermaid graph of the call graph.
* A table listing all functions with a brief summary of their purpose.
* A table listing dead code (unused functions).
* A table listing similar functions.
* Save it as `docs/CALLGRAPH.md`.
**Process:**
Follow this step by step process:
1. Start by creating a list of all appropriate source files. If a file tree wasn't provided in the prompt create one first.
2. For each file, parse out function definitions and their direct calls.
3. Build the graph structure.
4. For each function analyze it's purpose and add a summary to each function on the graph.
5. Analyze for unused functions and similar functionality.
6. Generate the markdown output.
a. Generate mermaid graph
b. Generate list of functions with their purposes in markdown table
c. List dead code in markdown table
d. List similar functions in markdown table