Metadata-Version: 2.4
Name: code-weaver
Version: 0.1.2.post7.dev0
Summary: Extensible MCP server for semantic code search with plugin architecture supporting multiple embedding providers, vector databases, and data sources.
Project-URL: Changelog, https://github.com/knitli/codeweaver/blob/main/CHANGELOG.md
Project-URL: Homepage, https://knitli.com
Project-URL: Issues, https://github.com/knitli/codeweaver/issues
Project-URL: Repository, https://github.com/knitli/codeweaver
Author: Knitli Inc.
Author-email: Adam Poulemanos <adam@knit.li>
License-Expression: MIT OR Apache-2.0
License-File: LICENSE-Apache-2.0
License-File: LICENSE-MIT
License-File: LICENSES/Apache-2.0.txt
License-File: LICENSES/MIT.txt
Keywords: agents,ai,anthropic,artificial intelligence,ast-grep,azure,bedrock,claude,code analysis,code embeddings,code indexing,code intelligence,code search,code understanding,codebase,codebase analysis,codebase management,cohere,docarray,embedding,embeddings,extensible,fastembed,fastmcp,framework,genai,google,grok,groq,huggingface,hybrid search,information retrieval,large language models,llama,llms,mcp,mcp protocol,mcp server,mistral,model context protocol,natural language processing,nlp,openai,perplexity,platform,plugin architecture,pydantic,pydantic-ai,qdrant,rerank,retrieval,search,semantic search,sentence transformers,tree-sitter,vector,vector database,vector embeddings,vector search,vector store,voyageai
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: License :: OSI Approved :: Apache Software License
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Database
Classifier: Topic :: Database :: Database Engines/Servers
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Text Processing :: Indexing
Classifier: Topic :: Utilities
Classifier: Typing :: Typed
Requires-Python: >=3.12
Requires-Dist: anyio>4.12.0
Requires-Dist: ast-grep-py>=0.40.3
Requires-Dist: blake3>=1.0.8
Requires-Dist: code-weaver-daemon==0.1.2.post7.dev0
Requires-Dist: code-weaver-tokenizers==0.1.2.post7.dev0
Requires-Dist: cyclopts>=4.10.1
Requires-Dist: fastembed==0.7.4; python_version < '3.14'
Requires-Dist: fastmcp<4.0.0,>=3.0.0
Requires-Dist: lateimport>=1.0.1
Requires-Dist: mcp>=1.23.3
Requires-Dist: numpy>=2.4.4
Requires-Dist: platformdirs>=4.9.4
Requires-Dist: posthog>=7.9.12
Requires-Dist: psutil>=7.2.2
Requires-Dist: py-cpuinfo>=9.0.0
Requires-Dist: pydantic-ai-slim>=1.68.0
Requires-Dist: pydantic-settings[toml,yaml]>=2.13.1
Requires-Dist: pydantic==2.12.5
Requires-Dist: qdrant-client==1.17.1
Requires-Dist: rich>=14.3.3
Requires-Dist: rignore>=0.7.6
Requires-Dist: sentence-transformers==5.2.0; python_version >= '3.14'
Requires-Dist: tenacity>=9.1.4
Requires-Dist: textcase>=0.4.5
Requires-Dist: tomli-w>=1.2.0
Requires-Dist: typing-extensions>=4.15.0; python_version < '3.13'
Requires-Dist: uuid7>=0.1.0; python_version < '3.14'
Requires-Dist: uvicorn[standard]>=0.40.0
Requires-Dist: uvloop>=0.22.1; platform_python_implementation == 'CPython' and platform_system != 'Windows'
Requires-Dist: voyageai==0.3.7; python_version < '3.14'
Requires-Dist: watchfiles>=1.1.1
Provides-Extra: anthropic
Requires-Dist: pydantic-ai-slim[anthropic]; extra == 'anthropic'
Provides-Extra: auth-eunomia
Requires-Dist: eunomia-mcp; extra == 'auth-eunomia'
Provides-Extra: auth-permitio
Requires-Dist: permit-fastmcp; extra == 'auth-permitio'
Provides-Extra: aws-secrets-manager
Requires-Dist: pydantic-settings[aws-secrets-manager,toml,yaml]; extra == 'aws-secrets-manager'
Provides-Extra: azure-key-vault
Requires-Dist: pydantic-settings[azure-key-vault,toml,yaml]; extra == 'azure-key-vault'
Provides-Extra: bedrock
Requires-Dist: boto3==1.42.19; extra == 'bedrock'
Requires-Dist: pydantic-ai-slim[bedrock]; extra == 'bedrock'
Provides-Extra: cohere
Requires-Dist: cohere==5.20.7; extra == 'cohere'
Requires-Dist: pydantic-ai-slim[cohere]; extra == 'cohere'
Provides-Extra: common-extras
Requires-Dist: boto3==1.42.19; extra == 'common-extras'
Requires-Dist: cohere==5.20.7; extra == 'common-extras'
Requires-Dist: ddgs; extra == 'common-extras'
Requires-Dist: eunomia-mcp; extra == 'common-extras'
Requires-Dist: exa-py; extra == 'common-extras'
Requires-Dist: google-genai==1.56.0; extra == 'common-extras'
Requires-Dist: huggingface-hub>=1.0.0; extra == 'common-extras'
Requires-Dist: mistralai==1.10.0; extra == 'common-extras'
Requires-Dist: openai==2.28.0; extra == 'common-extras'
Requires-Dist: permit-fastmcp; (python_version != '3.13') and extra == 'common-extras'
Requires-Dist: pydantic-ai-slim[anthropic]; extra == 'common-extras'
Requires-Dist: pydantic-ai-slim[bedrock]; extra == 'common-extras'
Requires-Dist: pydantic-ai-slim[cohere]; extra == 'common-extras'
Requires-Dist: pydantic-ai-slim[google]; extra == 'common-extras'
Requires-Dist: pydantic-ai-slim[groq]; extra == 'common-extras'
Requires-Dist: pydantic-ai-slim[huggingface]; extra == 'common-extras'
Requires-Dist: pydantic-ai-slim[mistral]; extra == 'common-extras'
Requires-Dist: pydantic-ai-slim[openai]; extra == 'common-extras'
Requires-Dist: pydantic-ai-slim[retries]; extra == 'common-extras'
Requires-Dist: pydantic-ai-slim[xai]; extra == 'common-extras'
Requires-Dist: pydantic-settings[aws-secrets-manager,azure-key-vault,gcp-secret-manager,toml,yaml]; (python_version != '3.13') and extra == 'common-extras'
Requires-Dist: pydantic-settings[aws-secrets-manager,gcp-secret-manager,toml,yaml]; (python_version == '3.13') and extra == 'common-extras'
Requires-Dist: sentence-transformers; extra == 'common-extras'
Requires-Dist: tavily-python; extra == 'common-extras'
Provides-Extra: duckduckgo
Requires-Dist: ddgs; extra == 'duckduckgo'
Provides-Extra: exa
Requires-Dist: exa-py; extra == 'exa'
Provides-Extra: fastembed
Requires-Dist: fastembed; (python_version < '3.14') and extra == 'fastembed'
Requires-Dist: py-cpuinfo; extra == 'fastembed'
Provides-Extra: fastembed-gpu
Requires-Dist: fastembed-gpu; (python_version < '3.14') and extra == 'fastembed-gpu'
Requires-Dist: py-cpuinfo; extra == 'fastembed-gpu'
Provides-Extra: full
Requires-Dist: boto3==1.42.19; extra == 'full'
Requires-Dist: cohere==5.20.7; extra == 'full'
Requires-Dist: ddgs; extra == 'full'
Requires-Dist: eunomia-mcp; extra == 'full'
Requires-Dist: exa-py; extra == 'full'
Requires-Dist: google-genai==1.56.0; extra == 'full'
Requires-Dist: huggingface-hub>=1.0.0; extra == 'full'
Requires-Dist: mistralai==1.10.0; extra == 'full'
Requires-Dist: openai==2.28.0; extra == 'full'
Requires-Dist: permit-fastmcp; (python_version != '3.13') and extra == 'full'
Requires-Dist: pydantic-ai-slim[anthropic]; extra == 'full'
Requires-Dist: pydantic-ai-slim[bedrock]; extra == 'full'
Requires-Dist: pydantic-ai-slim[cohere]; extra == 'full'
Requires-Dist: pydantic-ai-slim[google]; extra == 'full'
Requires-Dist: pydantic-ai-slim[groq]; extra == 'full'
Requires-Dist: pydantic-ai-slim[huggingface]; extra == 'full'
Requires-Dist: pydantic-ai-slim[mistral]; extra == 'full'
Requires-Dist: pydantic-ai-slim[openai]; extra == 'full'
Requires-Dist: pydantic-ai-slim[retries]; extra == 'full'
Requires-Dist: pydantic-ai-slim[xai]; extra == 'full'
Requires-Dist: pydantic-settings[aws-secrets-manager,azure-key-vault,gcp-secret-manager,toml,yaml]; (python_version != '3.13') and extra == 'full'
Requires-Dist: pydantic-settings[aws-secrets-manager,gcp-secret-manager,toml,yaml]; (python_version == '3.13') and extra == 'full'
Requires-Dist: sentence-transformers; extra == 'full'
Requires-Dist: tavily-python; extra == 'full'
Provides-Extra: full-gpu
Requires-Dist: boto3==1.42.19; extra == 'full-gpu'
Requires-Dist: cohere==5.20.7; extra == 'full-gpu'
Requires-Dist: ddgs; extra == 'full-gpu'
Requires-Dist: eunomia-mcp; extra == 'full-gpu'
Requires-Dist: exa-py; extra == 'full-gpu'
Requires-Dist: fastembed-gpu; (python_version < '3.14') and extra == 'full-gpu'
Requires-Dist: google-genai==1.56.0; extra == 'full-gpu'
Requires-Dist: huggingface-hub>=1.0.0; extra == 'full-gpu'
Requires-Dist: mistralai==1.10.0; extra == 'full-gpu'
Requires-Dist: openai==2.28.0; extra == 'full-gpu'
Requires-Dist: permit-fastmcp; (python_version != '3.13') and extra == 'full-gpu'
Requires-Dist: pydantic-ai-slim[anthropic]; extra == 'full-gpu'
Requires-Dist: pydantic-ai-slim[bedrock]; extra == 'full-gpu'
Requires-Dist: pydantic-ai-slim[cohere]; extra == 'full-gpu'
Requires-Dist: pydantic-ai-slim[google]; extra == 'full-gpu'
Requires-Dist: pydantic-ai-slim[groq]; extra == 'full-gpu'
Requires-Dist: pydantic-ai-slim[huggingface]; extra == 'full-gpu'
Requires-Dist: pydantic-ai-slim[mistral]; extra == 'full-gpu'
Requires-Dist: pydantic-ai-slim[openai]; extra == 'full-gpu'
Requires-Dist: pydantic-ai-slim[retries]; extra == 'full-gpu'
Requires-Dist: pydantic-ai-slim[xai]; extra == 'full-gpu'
Requires-Dist: pydantic-settings[aws-secrets-manager,azure-key-vault,gcp-secret-manager,toml,yaml]; (python_version != '3.13') and extra == 'full-gpu'
Requires-Dist: pydantic-settings[aws-secrets-manager,gcp-secret-manager,toml,yaml]; (python_version == '3.13') and extra == 'full-gpu'
Requires-Dist: sentence-transformers; extra == 'full-gpu'
Requires-Dist: tavily-python; extra == 'full-gpu'
Provides-Extra: gcp-secret-manager
Requires-Dist: pydantic-settings[gcp-secret-manager,toml,yaml]; extra == 'gcp-secret-manager'
Provides-Extra: google
Requires-Dist: google-genai==1.56.0; extra == 'google'
Requires-Dist: pydantic-ai-slim[google]; extra == 'google'
Provides-Extra: gpu-support
Requires-Dist: fastembed-gpu; (python_version < '3.14') and extra == 'gpu-support'
Provides-Extra: groq
Requires-Dist: pydantic-ai-slim[groq]; extra == 'groq'
Provides-Extra: huggingface
Requires-Dist: huggingface-hub>=1.0.0; extra == 'huggingface'
Requires-Dist: pydantic-ai-slim[huggingface]; extra == 'huggingface'
Provides-Extra: in-memory
Requires-Dist: qdrant-client; extra == 'in-memory'
Requires-Dist: tokenizers; extra == 'in-memory'
Provides-Extra: mistral
Requires-Dist: mistralai==1.10.0; extra == 'mistral'
Requires-Dist: pydantic-ai-slim[mistral]; extra == 'mistral'
Provides-Extra: openai
Requires-Dist: openai==2.28.0; extra == 'openai'
Requires-Dist: pydantic-ai-slim[openai]; extra == 'openai'
Provides-Extra: qdrant
Requires-Dist: qdrant-client; extra == 'qdrant'
Provides-Extra: recommended
Requires-Dist: fastembed; (python_version < '3.14') and extra == 'recommended'
Requires-Dist: py-cpuinfo; extra == 'recommended'
Requires-Dist: sentence-transformers; extra == 'recommended'
Requires-Dist: tavily; extra == 'recommended'
Requires-Dist: tokenizers; extra == 'recommended'
Requires-Dist: voyageai; (python_version < '3.14') and extra == 'recommended'
Provides-Extra: recommended-local-only
Requires-Dist: ddgs; extra == 'recommended-local-only'
Requires-Dist: fastembed; (python_version < '3.14') and extra == 'recommended-local-only'
Requires-Dist: py-cpuinfo; extra == 'recommended-local-only'
Requires-Dist: pydantic-ai-slim[openai,retries]; extra == 'recommended-local-only'
Requires-Dist: sentence-transformers; extra == 'recommended-local-only'
Requires-Dist: tokenizers; extra == 'recommended-local-only'
Provides-Extra: sentence-transformers
Requires-Dist: py-cpuinfo; extra == 'sentence-transformers'
Requires-Dist: sentence-transformers; extra == 'sentence-transformers'
Provides-Extra: tavily
Requires-Dist: tavily; extra == 'tavily'
Provides-Extra: voyageai
Requires-Dist: voyageai; (python_version < '3.14') and extra == 'voyageai'
Provides-Extra: xai
Requires-Dist: pydantic-ai-slim[xai]; extra == 'xai'
Description-Content-Type: text/markdown

<!--
SPDX-FileCopyrightText: 2025 Knitli Inc.
SPDX-FileContributor: Adam Poulemanos <adam@knit.li>

SPDX-License-Identifier: MIT OR Apache-2.0
-->

<div align="center">

<picture>
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/knitli/codeweaver/refs/heads/main/docs-site/src/assets/codeweaver-reverse.svg">
  <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/knitli/codeweaver/refs/heads/main/docs-site/src/assets/codeweaver-primary.svg">
  <img alt="CodeWeaver logo" src="https://raw.githubusercontent.com/knitli/codeweaver/refs/heads/main/docs-site/src/assets/codeweaver-primary.svg" height="150px" width="150px">
</picture>

# CodeWeaver

### Exquisite Context for Agents — Infrastructure that is Extensible, Predictable, and Resilient.

[![Python Version][badge_python]][link_python]
[![License][badge_license]][link_license]
[![Release][badge_release]][link_release]
[![MCP Compatible][badge_mcp]][link_mcp]
[![codecov](https://codecov.io/github/knitli/codeweaver/graph/badge.svg?token=EO3DQVHVVH)](https://codecov.io/github/knitli/codeweaver)

[Documentation][nav_docs] •
[Installation][nav_install] •
[Features][nav_features] •
[Comparison][nav_comparison]

</div>

---

## What It Does

**CodeWeaver gives Claude and other AI agents precise context from your codebase.** Not keyword grep. Not whole-file dumps. Actual structural understanding through hybrid semantic search.

CodeWeaver is **Professional Context Infrastructure**. With 100% Dependency Injection (DI) and a Pydantic-driven configuration system, it provides the reliability and extensibility required for industrial-grade AI deployments.

**Example:**
```
Without CodeWeaver:
  Claude: "Let me search for 'auth'... here are 50 files mentioning authentication"
  Result: Generic code, wrong context, wasted tokens

With CodeWeaver:
  You: "Where do we validate OAuth tokens?"
  Claude gets: The exact 3 functions across 2 files, with surrounding context
  Result: Precise answers, focused context, 60-80% token reduction
```

> CodeWeaver is no longer in alpha!
> 
> **Early Release (0.x)**: CodeWeaver is in active development. APIs may change between minor versions. It's very well-tested but still in 'it works on my machine' territory. [Use it, break it, help shape it][issues].

---

## How CodeWeaver Stacks Up

### Quick Reference Matrix

| Feature | CodeWeaver | Legacy Search Tools |
| :--- | :--- | :--- |
| **Search Type** | Hybrid (Semantic + AST + Keyword) | Keyword Only |
| **Context Quality** | **Exquisite** / High-Precision | Noisy / Irrelevant |
| **Extensibility** | **DI-Driven** (Zero-Code Provider Swap) | Hardcoded |
| **Reliability** | **Resilient** (Automatic Local Fallback) | Fails on API Timeout |
| **Token Usage** | **Optimized** (60–80% Reduction) | Wasted on Noise |

---

## 🚀 Getting Started

### Quick Install

Using the [CLI](#cli) with [uv][uv_tool]:
```bash
# Add CodeWeaver to your project
uv add code-weaver

# Initialize with a profile (recommended uses Voyage AI)
cw init --profile recommended

# Verify setup
cw doctor

# Start the background daemon
cw start
```

> **📝 Note**: `cw init` supports different **Profiles**:
> - `recommended`: High-precision search (Voyage AI + Qdrant)
> - `quickstart`: 100% local, private, and free (FastEmbed + Local Qdrant)
>
> **Want full offline?** See the [Local-Only Guide][local_only_guide].

🐳 **Prefer Docker?** [See Docker setup guide →][docker_guide]

---

## ✨ Features

<table>
<tr>
<td width="50%">

### 🔍 Exquisite Context
- **Hybrid search** (sparse + dense vectors)
- **AST-level understanding** (27 languages)
- **Reciprocal Rank Fusion (RRF)**
- **Language-aware chunking** (166+ languages)

</td>
<td width="50%">

### 🛡️ Industrial Resilience
- **Automatic local fallback** (FastEmbed)
- **Circuit breaker pattern** for APIs
- **Works airgapped** (no cloud required)
- **Pydantic-driven validation** at boot-time

</td>
</tr>
<tr>
<td>

### 🧩 Universal Extensibility
- **100% DI-driven architecture**
- **17+ integrated providers**
- **Custom provider API**
- **Zero-code provider swapping**

</td>
<td>

### 🛠️ Developer Experience
- **Live indexing** with file watching
- **Diagnostic tool** (`cw doctor`)
- **Multiple CLI aliases** (`cw` / `codeweaver`)
- **Selectable profiles** for easy setup

</td>
</tr>
</table>

---

## 💭 Philosophy: Context is Oxygen

AI agents face **too much irrelevant context**, causing token waste, missed patterns, and hallucinations. CodeWeaver addresses this with one focused capability: **structural + semantic code understanding that you control.**

- **Curation over Collection:** Give agents exactly what they need, nothing more.
- **Privacy-First:** Your code stays local if you want it to.
- **Infrastructure over Tooling:** Built to be the reliable foundation for your AI stack.

📖 [Read the detailed rationale →][why_codeweaver]

---
<div align="center">

**Official Documentation: [docs.knitli.com/codeweaver/](https://docs.knitli.com/codeweaver/)**

**Built with ❤️ by [Knitli][knitli_site]**

[⬆ Back to top][nav_top]

</div>

<!-- Badges -->

[badge_license]: <https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-green.svg> "License Badge"
[badge_mcp]: <https://img.shields.io/badge/MCP-compatible-purple.svg> "MCP Compatible Badge"
[badge_python]: <https://img.shields.io/badge/python-3.12%2B-blue.svg> "Python Version Badge"
[badge_release]: <https://img.shields.io/pypi/v/code-weaver.svg> "PyPI Version"

<!-- Other links -->

[api_find_code]: <https://github.com/knitli/codeweaver/blob/main/src/codeweaver/agent_api/find_code/README.md> "find_code API Documentation"
[arch_find_code]: <https://github.com/knitli/codeweaver/blob/main/src/codeweaver/agent_api/find_code/ARCHITECTURE.md> "find_code Architecture"
[bashandbone]: <https://github.com/bashandbone> "Adam Poulemanos' GitHub Profile"
[codecov]: <https://codecov.io/gh/knitli/codeweaver/graph/badge.svg?token=EO3DQVHVVH> "Code Coverage"
[changelog]: <https://github.com/knitli/codeweaver/blob/main/CHANGELOG.md> "Changelog"
[cla]: <https://github.com/knitli/codeweaver/blob/main/CONTRIBUTORS_LICENSE_AGREEMENT.md> "Contributor License Agreement"
[cli_guide]: <https://github.com/knitli/codeweaver/blob/main/docs/CLI.md> "Command Line Reference"
[config_schema]: <https://github.com/knitli/codeweaver/blob/main/schema/codeweaver.schema.json> "The CodeWeaver Config Schema"
[docker_guide]: <https://docs.knitli.com/codeweaver/guides/docker/> "Docker Setup Guide"
[docker_notes]: <https://github.com/knitli/codeweaver/blob/main/docs/docker/DOCKER_BUILD_NOTES.md> "Docker Build Notes"
[enhancement_label]: <https://github.com/knitli/codeweaver/labels/enhancement> "Enhancement Issues"
[issues]: <https://github.com/knitli/codeweaver/issues> "Report an Issue"
[knitli_blog]: <https://blog.knitli.com> "Knitli Blog"
[knitli_github]: <https://github.com/knitli> "Knitli GitHub Organization"
[knitli_linkedin]: <https://linkedin.com/company/knitli> "Knitli LinkedIn"
[knitli_site]: <https://knitli.com> "Knitli Website"
[knitli_x]: <https://x.com/knitli_inc> "Knitli X/Twitter"
[link_license]: <https://github.com/knitli/codeweaver/blob/main/LICENSE> "License File"
[link_mcp]: <https://modelcontextprotocol.io> "Model Context Protocol Website"
[link_python]: <https://www.python.org/downloads/> "Python Downloads"
[link_release]: <https://github.com/knitli/codeweaver/releases> "CodeWeaver Releases"
[mcp]: <https://modelcontextprotocol.io> "Learn About the Model Context Protocol"
[local_only_guide]: <https://docs.knitli.com/codeweaver/guides/local-only/> "Local-Only Operation Guide"
[nav_contributing]: <#-contributing> "Contributing Section"
[nav_docs]: <https://docs.knitli.com/codeweaver/> "CodeWeaver Documentation"
[nav_comparison]: <#-quick_reference_matrix> "How CodeWeaver Compares"
[nav_features]: <#-features> "Features Section"
[nav_how_it_works]: <#-how-it-works> "How It Works Section"
[nav_install]: <#-getting-started> "Installation Section"
[nav_top]: <#codeweaver> "Back to Top"
[privacy_policy]: <https://github.com/knitli/codeweaver/blob/main/PRIVACY_POLICY.md> "Privacy Policy"
[providers_list]: <https://github.com/knitli/codeweaver/blob/main/overrides/partials/providers.md> "Full Provider List"
[qdrant]: <https://qdrant.tech> "Qdrant Website"
[repo]: <https://github.com/knitli/codeweaver> "CodeWeaver Repository"
[reuse_spec]: <https://reuse.software> "REUSE Specification"
[sbom]: <https://github.com/knitli/codeweaver/blob/main/sbom.spdx> "Software Bill of Materials"
[sponsor]: <https://github.com/sponsors/knitli> "Sponsor Knitli"
[telemetry_impl]: <https://github.com/knitli/codeweaver/blob/main/src/codeweaver/common/telemetry/> "Telemetry Implementation"
[telemetry_readme]: <https://github.com/knitli/codeweaver/blob/main/src/codeweaver/common/telemetry/README.md> "Telemetry README"
[uv_tool]: <https://astral.sh/uv> "uv Package Manager"
[voyage_ai]: <http://voyage.ai> "Voyage AI Website"
[why_codeweaver]: <https://docs.knitli.com/codeweaver/why/> "Why CodeWeaver"
[wiki_ast]: <https://en.wikipedia.org/wiki/Abstract_syntax_tree> "About Abstract Syntax Trees"
