opencode-rag-plugin 1.5.2 → 1.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ReadMe.md +89 -229
- package/dist/describer/describer.js +3 -3
- package/dist/describer/describer.js.map +1 -1
- package/dist/opencode/tools.d.ts +62 -0
- package/dist/opencode/tools.js +511 -0
- package/dist/opencode/tools.js.map +1 -0
- package/dist/plugin.js +63 -4
- package/dist/plugin.js.map +1 -1
- package/package.json +1 -1
package/ReadMe.md
CHANGED
|
@@ -1,179 +1,69 @@
|
|
|
1
1
|
# OpenCodeRAG
|
|
2
2
|
|
|
3
|
-
OpenCodeRAG is a
|
|
4
|
-
It features a seamless integration with [OpenCode](https://opencode.ai) and offers a CLI interface for external usage.
|
|
3
|
+
OpenCodeRAG is a **local-first RAG plugin** for semantic code search. It converts your codebase into vector indices and retrieves relevant code chunks on natural language queries. The primary aim is to save tokens by replacing full-file reads with targeted chunk retrieval and to speed-up tool calls for large codebases. Integrates seamlessly with [OpenCode](https://opencode.ai) and works standalone via CLI.
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
> ⚠️ **Note:** Don't confuse this with the npm-package `opencode-rag`, which is a discontinued project of a different author. Ensure you are using **`opencode-rag-plugin`**.
|
|
9
|
-
|
|
10
|
-
**Why Using OpenCodeRAG?**
|
|
11
|
-
OpenCodeRAG aims to reduce LLM token usage by replacing expensive full-file reads with targeted, vector-similarity-based chunk retrieval.
|
|
12
|
-
Large codebases benefit massively in performance. It runs perfectly on a local dedicated GPU, but modern CPUs handle most workloads just fine.
|
|
13
|
-
When using only locally hosted embedding models and LLMs, your codebase also remains 100% private.
|
|
14
|
-
|
|
15
|
-
---
|
|
5
|
+
You don't need a dedicated GPU to run embedding LLMs, smaller models can still run performant on modern CPUs.
|
|
16
6
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
- [Quick Start](#-quick-start)
|
|
20
|
-
- [How it Works](#-how-it-works)
|
|
21
|
-
- [OpenCode Integration](#-opencode-integration)
|
|
22
|
-
- [Configuration](#-configuration)
|
|
23
|
-
- [CLI Usage (Standalone)](#-cli-interface)
|
|
24
|
-
- [Supported Languages](#-supported-languages)
|
|
25
|
-
- [Developer Guide & Architecture](#-developer-guide--architecture)
|
|
26
|
-
- [Privacy & Security](#-privacy--security)
|
|
7
|
+
[](https://www.npmjs.com/package/opencode-rag-plugin)
|
|
27
8
|
|
|
28
|
-
|
|
9
|
+
> ⚠️ **Note:** Don't confuse this with the npm package `opencode-rag` (a discontinued project by a different author).
|
|
29
10
|
|
|
30
11
|
## Quick Start
|
|
31
12
|
|
|
32
|
-
### Prerequisites
|
|
33
|
-
- **Node.js v22+** (required for native ESM and `fetch`).
|
|
34
|
-
- **[Ollama](https://ollama.ai)** running locally (default model: `embeddinggemma`) OR an OpenAI-compatible API.
|
|
35
|
-
- **[OpenCode](https://opencode.ai)** if you want to use the automated agent features.
|
|
36
|
-
|
|
37
|
-
### Installation
|
|
38
|
-
|
|
39
13
|
```bash
|
|
40
|
-
# 1. Clone
|
|
14
|
+
# 1. Clone and install
|
|
41
15
|
git clone https://github.com/your-org/OpenCodeRAG.git
|
|
42
16
|
cd OpenCodeRAG
|
|
17
|
+
npm install --legacy-peer-deps
|
|
18
|
+
npm run build
|
|
19
|
+
./install.sh # global install (optional)
|
|
43
20
|
|
|
44
|
-
# 2.
|
|
45
|
-
./install.sh # Linux/macOS
|
|
46
|
-
.\install.ps1 # Windows
|
|
47
|
-
|
|
48
|
-
# 3. Initialize in your project
|
|
21
|
+
# 2. Initialize in your project
|
|
49
22
|
cd /path/to/your/project
|
|
50
23
|
opencode-rag init
|
|
51
24
|
|
|
52
|
-
#
|
|
53
|
-
nano opencoderag.json
|
|
54
|
-
|
|
55
|
-
# 4. Index your workspace
|
|
25
|
+
# 3. Index your workspace
|
|
56
26
|
opencode-rag index
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
*(To uninstall, simply run `./install.sh uninstall` or `.\install.ps1 uninstall`)*
|
|
60
|
-
|
|
61
|
-
---
|
|
62
|
-
|
|
63
|
-
## How it Works
|
|
64
|
-
|
|
65
|
-
OpenCodeRAG intelligently processes your query in OpenCode and your codebase for high-precision retrieval:
|
|
66
|
-
1. **AST-aware chunking:** Intelligently splits code into functions, methods, and classes using `tree-sitter`.
|
|
67
|
-
2. **Local Vector Database:** Uses LanceDB to store embeddings locally without any cloud dependencies.
|
|
68
|
-
3. **Hybrid Search:** Combines TF×IDF keyword matching with vector similarity for superior precision on identifiers.
|
|
69
|
-
4. **Incremental Indexing:** Only updates files that have changed, ensuring that the vector database stays up-to-date.
|
|
70
|
-
|
|
71
|
-
---
|
|
72
27
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
When are using OpenCode, the plugin enhances your agent with two main features:
|
|
76
|
-
|
|
77
|
-
### 1. Auto-Injection (Background Context)
|
|
78
|
-
After every message you send, the plugin effectively searches your vector-indexed codebase:
|
|
79
|
-
- **High-confidence results (score ≥ 0.75):** Actual code chunks are injected directly into your prompt, giving the agent instant context without a tool-call round-trip.
|
|
80
|
-
- **Lower-confidence results:** A compact list of suggested files is appended instead (e.g., `src/plugin.ts (lines 10-42)`).
|
|
81
|
-
|
|
82
|
-
### 2. Direct Tool Call (`opencode-rag-context`)
|
|
83
|
-
Any OpenCode agent can actively invoke the RAG tool to fetch specific code chunks, filter by exact file paths, or target specific programming languages.
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## Configuration
|
|
88
|
-
|
|
89
|
-
Running `opencode-rag init` creates the config file `opencode-rag.json` in your project root. You only need to define the values you want to override.
|
|
90
|
-
|
|
91
|
-
### Embedding Providers
|
|
92
|
-
```json
|
|
93
|
-
{
|
|
94
|
-
"embedding": {
|
|
95
|
-
"provider": "ollama",
|
|
96
|
-
"baseUrl": "http://localhost:11434/api",
|
|
97
|
-
"timeoutMs": 30000
|
|
98
|
-
}
|
|
99
|
-
}
|
|
28
|
+
# 4. Search
|
|
29
|
+
opencode-rag query "authentication middleware"
|
|
100
30
|
```
|
|
101
|
-
* **Ollama (Default):** Local, private, no API key needed. *(Increase `timeoutMs` if your model has a slow cold start)*.
|
|
102
|
-
* **OpenAI:** Set `provider` to `"openai"`, change `baseUrl` to `"https://api.openai.com/v1"`, and provide your `apiKey`.
|
|
103
|
-
|
|
104
|
-
### Plugin Settings
|
|
105
|
-
|
|
106
|
-
| Option | Default | Description |
|
|
107
|
-
|--------|---------|-------------|
|
|
108
|
-
| `openCode.readOverride` | `false` | If `true`, overrides OpenCode's default file reader to append RAG chunks as supplementary context. |
|
|
109
|
-
| `openCode.autoInject.enabled` | `true` | Turn background auto-injection on/off. |
|
|
110
|
-
| `openCode.autoInject.minScore` | `0.75` | Minimum relevance score to inject actual code (0–1). |
|
|
111
|
-
| `retrieval.topK` | `10` | Default number of chunks fetched per query. |
|
|
112
|
-
| `retrieval.hybridSearch.enabled` | `true` | Enables combined TF×IDF + vector search. |
|
|
113
|
-
### TUI Settings Menu
|
|
114
|
-
|
|
115
|
-
When running inside OpenCode, the plugin provides a settings panel accessible from the OpenCode sidebar:
|
|
116
|
-
- **Retrieval**: `topK`, `minScore`, `maxChunks`
|
|
117
|
-
- **Embedding**: Model picker dropdown (populated from OpenCode's registered providers) with custom manual entry
|
|
118
|
-
- **LLM Descriptions**: Enable/disable toggle, model picker dropdown
|
|
119
|
-
|
|
120
|
-
Settings are persisted to `${storePath}/runtime-overrides.json` and take precedence over `opencode-rag.json`. The plugin reloads these on a 5-second TTL.
|
|
121
|
-
|
|
122
|
-
### API Key Auto-Resolution
|
|
123
|
-
|
|
124
|
-
If you set `embedding.provider` or `description.provider` to `"openai"` but don't specify an `apiKey` in `opencode-rag.json`, the plugin automatically resolves the key from OpenCode's own provider configuration (`.opencode/opencode.json`, `opencode.json`, or `~/.config/opencode/opencode.jsonc`).
|
|
125
31
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
|
150
|
-
|
|
151
|
-
|
|
|
152
|
-
|
|
|
153
|
-
|
|
|
154
|
-
|
|
|
155
|
-
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
```json
|
|
163
|
-
{
|
|
164
|
-
"logging": {
|
|
165
|
-
"level": "info", // Options: "debug", "info", or "error"
|
|
166
|
-
"logFilePath": "./.opencode/opencode-rag.log"
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
```
|
|
170
|
-
</details>
|
|
171
|
-
|
|
172
|
-
### `AGENTS.md` Setup
|
|
173
|
-
To ensure the OpenCode agent knows how to leverage the plugin, add this snippet to your workspace's `AGENTS.md`:
|
|
174
|
-
|
|
175
|
-
<details>
|
|
176
|
-
<summary>Click to view the AGENTS.md snippet</summary>
|
|
32
|
+
**Prerequisites:** Node.js v22+, [Ollama](https://ollama.ai) (default) or other LLM-hosters with installed embedding model (e.g. embeddinggemma).
|
|
33
|
+
|
|
34
|
+
## Key Features
|
|
35
|
+
|
|
36
|
+
| Feature | Description |
|
|
37
|
+
|---|---|
|
|
38
|
+
| **AST chunking** | 17 languages via tree-sitter (TS, JS, Python, Java, Go, Rust, C/C++, C#, Ruby, Kotlin, Swift, JSON, HTML, CSS, XML) |
|
|
39
|
+
| **Document support** | Markdown, LaTeX, PDF, DOCX, DOC, Excel |
|
|
40
|
+
| **Hybrid search** | Vector similarity + TF×IDF keyword fusion |
|
|
41
|
+
| **OpenCode plugin** | Auto-inject context, read-tool override, TUI settings |
|
|
42
|
+
| **Incremental indexing** | File-hash manifest, background watcher, auto-rebuild on corruption |
|
|
43
|
+
| **Privacy-first** | All processing stays local with Ollama |
|
|
44
|
+
| **CLI** | `index`, `query`, `status`, `list`, `show`, `dump`, `clear`, `init` |
|
|
45
|
+
| **Proxy-aware** | Corporate proxy support with raw-socket localhost bypass |
|
|
46
|
+
| **OpenAI / Cohere** | Alternate embedding providers with API key auto-resolution |
|
|
47
|
+
|
|
48
|
+
## Documentation
|
|
49
|
+
|
|
50
|
+
| Document | Contents |
|
|
51
|
+
|---|---|
|
|
52
|
+
| [Architecture](doc/architecture.md) | Module design, data flow, tech stack |
|
|
53
|
+
| [Installation](doc/installation.md) | Full install guide, global setup, uninstall |
|
|
54
|
+
| [Configuration](doc/configuration.md) | All options: embedding, indexing, retrieval, description, plugin |
|
|
55
|
+
| [Chunking](doc/chunking.md) | Language matrix, adding new chunkers, custom chunkers |
|
|
56
|
+
| [Embedding](doc/embedding.md) | Providers, model recommendations, proxy, dimension probing |
|
|
57
|
+
| [Retrieval](doc/retrieval.md) | Pipeline, hybrid search, score fusion, caching |
|
|
58
|
+
| [Plugin](doc/plugin.md) | OpenCode integration, tools, hooks, TUI, troubleshooting |
|
|
59
|
+
| [CLI Reference](doc/cli.md) | All commands, options, examples |
|
|
60
|
+
| [Development](doc/development.md) | Setup, testing, conventions, adding providers |
|
|
61
|
+
| [Troubleshooting](doc/troubleshooting.md) | Common issues, logging, debugging |
|
|
62
|
+
| [Roadmap](doc/roadmap.md) | Completed items, short/mid/long-term plans |
|
|
63
|
+
|
|
64
|
+
## AGENTS.md Setup
|
|
65
|
+
|
|
66
|
+
Add this to your workspace's `AGENTS.md` so OpenCode agents know how to use the plugin:
|
|
177
67
|
|
|
178
68
|
```markdown
|
|
179
69
|
## OpenCodeRAG Plugin
|
|
@@ -181,97 +71,67 @@ To ensure the OpenCode agent knows how to leverage the plugin, add this snippet
|
|
|
181
71
|
This workspace has OpenCodeRAG installed for semantic code retrieval.
|
|
182
72
|
|
|
183
73
|
### `opencode-rag-context` tool
|
|
184
|
-
Before planning, editing, or answering
|
|
74
|
+
Before planning, editing, or answering, use this tool to retrieve relevant code
|
|
75
|
+
chunks with file paths, line ranges, and surrounding implementation.
|
|
185
76
|
- `query` (required) — narrow, specific search, e.g. `"authentication middleware setup"`
|
|
186
77
|
- `pathHints` (optional) — up to 10 path filters, e.g. `["src/auth/"]`
|
|
187
78
|
- `languageHints` (optional) — up to 10 language filters, e.g. `["typescript"]`
|
|
188
79
|
- `topK` (optional) — result count (1–25, default 10)
|
|
189
80
|
|
|
190
|
-
###
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
-
|
|
195
|
-
-
|
|
196
|
-
|
|
197
|
-
</details>
|
|
198
|
-
|
|
199
|
-
---
|
|
200
|
-
|
|
201
|
-
## CLI Interface
|
|
202
|
-
|
|
203
|
-
The CLI interface (`opencode-rag`) provides full access to build, manage, and search your project's vector database, even without using OpenCode.
|
|
204
|
-
This is mainly intended for testing/debugging purposes, but can also be integrated into your own applications or scripts.
|
|
205
|
-
|
|
206
|
-
```bash
|
|
207
|
-
# Index the workspace (incremental by default)
|
|
208
|
-
opencode-rag index
|
|
209
|
-
|
|
210
|
-
# Watch for file changes and re-index automatically
|
|
211
|
-
opencode-rag index --watch
|
|
212
|
-
|
|
213
|
-
# Force a complete rebuild of the index
|
|
214
|
-
opencode-rag index --force
|
|
81
|
+
### `search_semantic` tool
|
|
82
|
+
Search indexed code by meaning, not keywords. Use for conceptual questions like
|
|
83
|
+
"How does authentication work?" or "Where is the chunking logic?".
|
|
84
|
+
- `query` (required) — natural language description of what you're looking for
|
|
85
|
+
- `pathHints` (optional) — up to 10 path filters
|
|
86
|
+
- `languageHints` (optional) — up to 10 language filters
|
|
87
|
+
- `topK` (optional) — result count (1–25, default 10)
|
|
215
88
|
|
|
216
|
-
|
|
217
|
-
|
|
89
|
+
### `get_file_skeleton` tool
|
|
90
|
+
Get a quick structural overview of a file without reading the full contents.
|
|
91
|
+
Returns functions, classes, interfaces, and other declarations with line numbers.
|
|
92
|
+
- `filePath` (required) — path to the file (relative to workspace root or absolute)
|
|
218
93
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
94
|
+
### `find_usages` tool
|
|
95
|
+
**Essential before editing a function or type.** Find every line in the
|
|
96
|
+
indexed codebase that references a given symbol, with surrounding context.
|
|
97
|
+
- `symbolName` (required) — the symbol to search for (function, variable, class, etc.)
|
|
98
|
+
- `pathHint` (optional) — narrow search to a specific directory
|
|
99
|
+
- `topK` (optional) — max results (1–50, default 30)
|
|
222
100
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
opencode-rag dump --limit 50 # dump all chunks (paginated)
|
|
101
|
+
### Indexing
|
|
102
|
+
- Changed files are auto-indexed in the background (debounced 5s).
|
|
103
|
+
- If searches return no results, run `opencode-rag index` in the terminal.
|
|
227
104
|
```
|
|
228
105
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
## Supported Languages
|
|
232
|
-
|
|
233
|
-
OpenCodeRAG uses advanced AST (Abstract Syntax Tree) parsing via `tree-sitter` for major languages, falling back to regex or line-based chunking for others.
|
|
106
|
+
## OpenCode Integration
|
|
234
107
|
|
|
235
|
-
|
|
236
|
-
* **Regex / Structure Support:** Markdown, Razor, `.sln`, LaTeX, PDF, Word (`.docx`/`.doc`), Excel.
|
|
237
|
-
* **Fallback:** Raw text blocks (100 lines/chunk).
|
|
108
|
+
When using OpenCode, the plugin enhances your agent with two main features:
|
|
238
109
|
|
|
239
|
-
|
|
110
|
+
### 1. Auto-Injection (Background Context)
|
|
111
|
+
After every message you send, the plugin effectively searches your vector-indexed codebase:
|
|
112
|
+
- **High-confidence results (score ≥ 0.75):** Actual code chunks are injected directly into your prompt, giving the agent instant context without a tool-call round-trip.
|
|
113
|
+
- **Lower-confidence results:** A compact list of suggested files is appended instead (e.g., `src/plugin.ts (lines 10-42)`).
|
|
240
114
|
|
|
241
|
-
|
|
115
|
+
### 2. Specialized Agent Tools
|
|
242
116
|
|
|
243
|
-
|
|
117
|
+
The plugin registers several tools that OpenCode agents can invoke for code retrieval and analysis:
|
|
244
118
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
```
|
|
119
|
+
| Tool | Purpose | Best Use Case |
|
|
120
|
+
|------|---------|--------------|
|
|
121
|
+
| `opencode-rag-context` | General-purpose code retrieval | Any code search with optional path/language filters |
|
|
122
|
+
| `search_semantic` | Conceptual code search | *"How does authentication work?"*, *"Where is the chunking logic?"* |
|
|
123
|
+
| `get_file_skeleton` | Quick file overview via AST parsing | Orienting in an unfamiliar file without reading it entirely |
|
|
124
|
+
| `find_usages` | Symbol reference search | **Essential before editing** — shows every call site with context |
|
|
125
|
+
| `read` (optional) | RAG-enhanced file read | Full file contents with supplementary context chunks |
|
|
253
126
|
|
|
254
|
-
|
|
255
|
-
- **Runtime:** Node.js v22 + `tsx` (ESM), TypeScript 5.8
|
|
256
|
-
- **Chunking:** `web-tree-sitter` (WASM) + grammars
|
|
257
|
-
- **Vector DB:** LanceDB (`@lancedb/lancedb`) stored locally (`.opencode/rag_db`)
|
|
258
|
-
- **Tests:** Node built-in test runner (`npm test`)
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
### Adding Custom Chunkers
|
|
262
|
-
You can easily inject custom chunkers without modifying the source code via `opencode-rag.json`:
|
|
263
|
-
```json
|
|
264
|
-
{
|
|
265
|
-
"chunkers": [
|
|
266
|
-
{ "module": "./path/to/my-chunker.js", "extensions": [".xyz"] }
|
|
267
|
-
]
|
|
268
|
-
}
|
|
269
|
-
```
|
|
127
|
+
The system prompt automatically lists all available tools so agents know when to use each one.
|
|
270
128
|
|
|
271
129
|
---
|
|
272
130
|
|
|
273
131
|
## Privacy & Security
|
|
274
132
|
|
|
275
|
-
**100%
|
|
276
|
-
|
|
133
|
+
**100% local by default.** Embeddings are generated locally via Ollama. The vector database stays in your project directory. **No source code or embeddings leave your machine** unless you explicitly configure a third-party API.
|
|
134
|
+
|
|
135
|
+
## License
|
|
277
136
|
|
|
137
|
+
MIT
|
|
@@ -58,11 +58,11 @@ export class LLMDescriptionProvider {
|
|
|
58
58
|
return parseBatchResponse(responseText, chunks);
|
|
59
59
|
}
|
|
60
60
|
async chatRequest(messages, timeoutMs) {
|
|
61
|
-
const baseUrl = this.config.baseUrl.replace(/\/+$/, "")
|
|
61
|
+
const baseUrl = this.config.baseUrl.replace(/\/+$/, "");
|
|
62
62
|
const isOllama = this.config.provider === "ollama";
|
|
63
63
|
const url = isOllama
|
|
64
|
-
? `${baseUrl}/
|
|
65
|
-
: `${baseUrl}/v1/chat/completions`;
|
|
64
|
+
? `${baseUrl}/chat`
|
|
65
|
+
: `${baseUrl}${baseUrl.endsWith("/v1") ? "" : "/v1"}/chat/completions`;
|
|
66
66
|
const body = isOllama
|
|
67
67
|
? { model: this.config.model, messages, stream: false }
|
|
68
68
|
: { model: this.config.model, messages };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"describer.js","sourceRoot":"","sources":["../../src/describer/describer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"describer.js","sourceRoot":"","sources":["../../src/describer/describer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Specialized tool factories for autonomous agent workflows.
|
|
3
|
+
*
|
|
4
|
+
* Provides smaller, focused tools that are more efficient for agentic use:
|
|
5
|
+
* - search_semantic → conceptual code search
|
|
6
|
+
* - get_file_skeleton → quick structural overview of a file
|
|
7
|
+
* - find_usages → find where a symbol is used/referenced
|
|
8
|
+
*
|
|
9
|
+
* These complement the general-purpose opencode-rag-context tool.
|
|
10
|
+
*/
|
|
11
|
+
import type { ToolDefinition } from "@opencode-ai/plugin";
|
|
12
|
+
import type { EmbeddingProvider, VectorStore, KeywordIndex } from "../core/interfaces.js";
|
|
13
|
+
import type { RagConfig } from "../core/config.js";
|
|
14
|
+
import { retrieve } from "../retriever/retriever.js";
|
|
15
|
+
export interface SearchSemanticToolOptions {
|
|
16
|
+
store: VectorStore;
|
|
17
|
+
embedder: EmbeddingProvider;
|
|
18
|
+
cfg: RagConfig;
|
|
19
|
+
keywordIndex?: KeywordIndex;
|
|
20
|
+
retrieveFn?: typeof retrieve;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create the `search_semantic` tool.
|
|
24
|
+
*
|
|
25
|
+
* Purpose: Answers conceptual questions about the codebase.
|
|
26
|
+
* "How does authentication work?" → returns relevant chunks.
|
|
27
|
+
*
|
|
28
|
+
* Internally uses the same RAG pipeline as opencode-rag-context but
|
|
29
|
+
* exposes a clean, focused interface for agents.
|
|
30
|
+
*/
|
|
31
|
+
export declare function createSearchSemanticTool(options: SearchSemanticToolOptions): ToolDefinition;
|
|
32
|
+
export interface FileSkeletonToolOptions {
|
|
33
|
+
worktree: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Create the `get_file_skeleton` tool.
|
|
37
|
+
*
|
|
38
|
+
* Purpose: Quickly orient in a file without reading it entirely.
|
|
39
|
+
* Returns a structural outline (functions, classes, interfaces, etc.)
|
|
40
|
+
* with line numbers, using tree-sitter for parsing.
|
|
41
|
+
*/
|
|
42
|
+
export declare function createFileSkeletonTool(options: FileSkeletonToolOptions): ToolDefinition;
|
|
43
|
+
export interface FindUsagesToolOptions {
|
|
44
|
+
store: VectorStore;
|
|
45
|
+
embedder: EmbeddingProvider;
|
|
46
|
+
cfg: RagConfig;
|
|
47
|
+
keywordIndex?: KeywordIndex;
|
|
48
|
+
retrieveFn?: typeof retrieve;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Create the `find_usages` tool.
|
|
52
|
+
*
|
|
53
|
+
* Purpose: Find where a specific symbol/identifier is used or referenced
|
|
54
|
+
* in the codebase. Essential for agents before they modify a function.
|
|
55
|
+
*
|
|
56
|
+
* Strategy:
|
|
57
|
+
* 1. Use the keyword index for exact/similar token matches (fast, precise)
|
|
58
|
+
* 2. Fall back to vector search for broader referral discovery
|
|
59
|
+
* 3. Within matching chunks, extract the specific lines containing the symbol
|
|
60
|
+
* plus 2 lines of surrounding context
|
|
61
|
+
*/
|
|
62
|
+
export declare function createFindUsagesTool(options: FindUsagesToolOptions): ToolDefinition;
|
|
@@ -0,0 +1,511 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Specialized tool factories for autonomous agent workflows.
|
|
3
|
+
*
|
|
4
|
+
* Provides smaller, focused tools that are more efficient for agentic use:
|
|
5
|
+
* - search_semantic → conceptual code search
|
|
6
|
+
* - get_file_skeleton → quick structural overview of a file
|
|
7
|
+
* - find_usages → find where a symbol is used/referenced
|
|
8
|
+
*
|
|
9
|
+
* These complement the general-purpose opencode-rag-context tool.
|
|
10
|
+
*/
|
|
11
|
+
import { tool } from "@opencode-ai/plugin/tool";
|
|
12
|
+
import { retrieve } from "../retriever/retriever.js";
|
|
13
|
+
import { Parser } from "web-tree-sitter";
|
|
14
|
+
import { initParser, loadLanguage, walkTree } from "../chunker/grammar.js";
|
|
15
|
+
import { readFileSync } from "node:fs";
|
|
16
|
+
import { resolve, isAbsolute } from "node:path";
|
|
17
|
+
const SKELETON_CONFIGS = {
|
|
18
|
+
".ts": { grammarName: "typescript", nodeTypes: ["function_declaration", "method_definition", "class_declaration", "interface_declaration", "type_alias_declaration", "enum_declaration"] },
|
|
19
|
+
".tsx": { grammarName: "typescript", nodeTypes: ["function_declaration", "method_definition", "class_declaration", "interface_declaration", "type_alias_declaration", "enum_declaration", "arrow_function"] },
|
|
20
|
+
".mts": { grammarName: "typescript", nodeTypes: ["function_declaration", "method_definition", "class_declaration", "interface_declaration", "type_alias_declaration", "enum_declaration"] },
|
|
21
|
+
".cts": { grammarName: "typescript", nodeTypes: ["function_declaration", "method_definition", "class_declaration", "interface_declaration", "type_alias_declaration", "enum_declaration"] },
|
|
22
|
+
".js": { grammarName: "javascript", nodeTypes: ["function_declaration", "method_definition", "class_declaration", "arrow_function"] },
|
|
23
|
+
".jsx": { grammarName: "javascript", nodeTypes: ["function_declaration", "method_definition", "class_declaration", "arrow_function"] },
|
|
24
|
+
".mjs": { grammarName: "javascript", nodeTypes: ["function_declaration", "method_definition", "class_declaration", "arrow_function"] },
|
|
25
|
+
".cjs": { grammarName: "javascript", nodeTypes: ["function_declaration", "method_definition", "class_declaration", "arrow_function"] },
|
|
26
|
+
".py": { grammarName: "python", nodeTypes: ["function_definition", "class_definition", "decorated_definition"] },
|
|
27
|
+
".java": { grammarName: "java", nodeTypes: ["class_declaration", "method_declaration", "interface_declaration", "enum_declaration"] },
|
|
28
|
+
".go": { grammarName: "go", nodeTypes: ["function_declaration", "method_declaration", "type_declaration", "type_spec"] },
|
|
29
|
+
".rs": { grammarName: "rust", nodeTypes: ["function_item", "struct_item", "enum_item", "impl_item", "trait_item", "type_item"] },
|
|
30
|
+
".c": { grammarName: "c", nodeTypes: ["function_definition", "struct_specifier", "enum_specifier"] },
|
|
31
|
+
".cpp": { grammarName: "cpp", nodeTypes: ["function_definition", "class_specifier", "struct_specifier", "enum_specifier"] },
|
|
32
|
+
".cxx": { grammarName: "cpp", nodeTypes: ["function_definition", "class_specifier", "struct_specifier", "enum_specifier"] },
|
|
33
|
+
".h": { grammarName: "cpp", nodeTypes: ["function_definition", "class_specifier", "struct_specifier", "enum_specifier"] },
|
|
34
|
+
".hpp": { grammarName: "cpp", nodeTypes: ["function_definition", "class_specifier", "struct_specifier", "enum_specifier"] },
|
|
35
|
+
".cs": { grammarName: "c-sharp", nodeTypes: ["class_declaration", "method_declaration", "interface_declaration", "enum_declaration", "struct_declaration"] },
|
|
36
|
+
".rb": { grammarName: "ruby", nodeTypes: ["method", "class", "module"] },
|
|
37
|
+
".swift": { grammarName: "swift", nodeTypes: ["function_declaration", "class_declaration", "struct_declaration", "enum_declaration", "protocol_declaration"] },
|
|
38
|
+
".kt": { grammarName: "kotlin", nodeTypes: ["function_declaration", "class_declaration", "interface_declaration", "object_declaration"] },
|
|
39
|
+
".kts": { grammarName: "kotlin", nodeTypes: ["function_declaration", "class_declaration", "interface_declaration", "object_declaration"] },
|
|
40
|
+
".css": { grammarName: "css", nodeTypes: ["rule_set"] },
|
|
41
|
+
".md": { grammarName: "markdown", nodeTypes: ["atx_heading"] },
|
|
42
|
+
};
|
|
43
|
+
/** Regex-based fallback for languages without tree-sitter WASM support. */
|
|
44
|
+
const REGEX_SKELETON = {
|
|
45
|
+
".json": [/^(\s*)"(\w+)":/gm],
|
|
46
|
+
".yaml": [/^(\w+):/gm],
|
|
47
|
+
".yml": [/^(\w+):/gm],
|
|
48
|
+
".toml": [/^\[(\w+)\]/gm],
|
|
49
|
+
".sh": [/^(function\s+\w+|^\w+\s*\(\)\s*\{)/gm],
|
|
50
|
+
".bash": [/^(function\s+\w+|^\w+\s*\(\)\s*\{)/gm],
|
|
51
|
+
".zsh": [/^(function\s+\w+|^\w+\s*\(\)\s*\{)/gm],
|
|
52
|
+
".sql": [/^(CREATE|ALTER|DROP|SELECT|INSERT|UPDATE|DELETE)\s/gim],
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Return the file extension from a path (lowercase).
|
|
56
|
+
*/
|
|
57
|
+
function getExtension(filePath) {
|
|
58
|
+
const dot = filePath.lastIndexOf(".");
|
|
59
|
+
return dot >= 0 ? filePath.slice(dot).toLowerCase() : "";
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Resolve a file path relative to the workspace root.
|
|
63
|
+
*/
|
|
64
|
+
function resolveFilePath(filePath, worktree) {
|
|
65
|
+
if (isAbsolute(filePath))
|
|
66
|
+
return filePath;
|
|
67
|
+
return resolve(worktree, filePath);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Extract structural outline from source code using tree-sitter.
|
|
71
|
+
* Falls back to regex patterns for languages without WASM grammars.
|
|
72
|
+
*/
|
|
73
|
+
async function extractSkeleton(content, ext) {
|
|
74
|
+
const config = SKELETON_CONFIGS[ext];
|
|
75
|
+
if (!config) {
|
|
76
|
+
// Fallback: use regex patterns
|
|
77
|
+
const patterns = REGEX_SKELETON[ext];
|
|
78
|
+
if (!patterns) {
|
|
79
|
+
// Last fallback: line count
|
|
80
|
+
const lines = content.split("\n");
|
|
81
|
+
return [{ type: "file", name: `${lines.length} lines`, startLine: 1, endLine: lines.length }];
|
|
82
|
+
}
|
|
83
|
+
const items = [];
|
|
84
|
+
for (const pattern of patterns) {
|
|
85
|
+
let match;
|
|
86
|
+
// Reset lastIndex
|
|
87
|
+
pattern.lastIndex = 0;
|
|
88
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
89
|
+
const name = match[1] ?? match[0].trim();
|
|
90
|
+
const lineNum = content.slice(0, match.index).split("\n").length;
|
|
91
|
+
items.push({ type: ext.slice(1), name, startLine: lineNum, endLine: lineNum });
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Deduplicate by name
|
|
95
|
+
const seen = new Set();
|
|
96
|
+
return items.filter((item) => {
|
|
97
|
+
const key = `${item.type}:${item.name}`;
|
|
98
|
+
if (seen.has(key))
|
|
99
|
+
return false;
|
|
100
|
+
seen.add(key);
|
|
101
|
+
return true;
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
// Tree-sitter skeleton extraction
|
|
105
|
+
await initParser();
|
|
106
|
+
const lang = await loadLanguage(config.grammarName);
|
|
107
|
+
const parser = new Parser();
|
|
108
|
+
parser.setLanguage(lang);
|
|
109
|
+
const tree = parser.parse(content);
|
|
110
|
+
if (!tree)
|
|
111
|
+
return [];
|
|
112
|
+
const nodeTypes = new Set(config.nodeTypes);
|
|
113
|
+
const astNodes = walkTree(tree.rootNode, nodeTypes, content, 15);
|
|
114
|
+
return astNodes.map((node) => ({
|
|
115
|
+
type: node.type,
|
|
116
|
+
name: extractNodeName(node.text, node.type),
|
|
117
|
+
startLine: node.startLine,
|
|
118
|
+
endLine: node.endLine,
|
|
119
|
+
}));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Extract a human-readable name from a code node.
|
|
123
|
+
* For declarations, this is typically the identifier after the keyword.
|
|
124
|
+
*/
|
|
125
|
+
function extractNodeName(text, nodeType) {
|
|
126
|
+
// Try first line only for large nodes
|
|
127
|
+
const firstLine = text.split("\n")[0] ?? text;
|
|
128
|
+
// Common patterns: "function foo(...)" or "class Foo ..." or "foo(...)" (arrow, method)
|
|
129
|
+
const nameMatch = firstLine.match(/^(?:export\s+)?(?:async\s+)?(?:function\s+)?(?:\w+\s+)?(?:(\w+))\s*(?:[<(]|$)/);
|
|
130
|
+
if (nameMatch) {
|
|
131
|
+
// Skip keywords
|
|
132
|
+
const keywordSet = new Set(["export", "async", "function", "class", "interface", "type", "enum", "struct", "impl", "trait", "def", "fun", "fn"]);
|
|
133
|
+
if (!keywordSet.has(nameMatch[1])) {
|
|
134
|
+
return nameMatch[1];
|
|
135
|
+
}
|
|
136
|
+
// Try next word
|
|
137
|
+
const secondMatch = firstLine.match(/^(?:export\s+)?(?:async\s+)?(?:function|class|interface|type|enum|struct|trait|impl|def|fun|fn)\s+(\w+)/);
|
|
138
|
+
if (secondMatch)
|
|
139
|
+
return secondMatch[1];
|
|
140
|
+
}
|
|
141
|
+
// Last resort: return first 80 chars of first line
|
|
142
|
+
return firstLine.length > 80 ? firstLine.slice(0, 77) + "..." : firstLine;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Format a skeleton outline as a compact markdown string.
|
|
146
|
+
*/
|
|
147
|
+
function formatSkeleton(items) {
|
|
148
|
+
if (items.length === 0)
|
|
149
|
+
return "_(no structural elements found)_";
|
|
150
|
+
const lines = [];
|
|
151
|
+
let prevDepth = 0;
|
|
152
|
+
for (const item of items) {
|
|
153
|
+
const depth = item.type === "file" ? 0 : 1;
|
|
154
|
+
const indent = " ".repeat(depth);
|
|
155
|
+
const lineRange = item.startLine === item.endLine
|
|
156
|
+
? `L${item.startLine}`
|
|
157
|
+
: `L${item.startLine}-${item.endLine}`;
|
|
158
|
+
const icon = typeIcon(item.type);
|
|
159
|
+
if (depth <= prevDepth) {
|
|
160
|
+
// Close previous block if needed
|
|
161
|
+
}
|
|
162
|
+
lines.push(`${indent}${icon} \`${item.name}\` ${lineRange}`);
|
|
163
|
+
prevDepth = depth;
|
|
164
|
+
}
|
|
165
|
+
return lines.join("\n");
|
|
166
|
+
}
|
|
167
|
+
function typeIcon(type) {
|
|
168
|
+
if (type.includes("class") || type === "struct_specifier" || type === "struct_item" || type === "struct_declaration")
|
|
169
|
+
return "□";
|
|
170
|
+
if (type.includes("interface") || type === "protocol_declaration" || type === "trait_item")
|
|
171
|
+
return "◇";
|
|
172
|
+
if (type.includes("function") || type === "method" || type === "method_declaration" || type === "method_definition" || type === "arrow_function")
|
|
173
|
+
return "ƒ";
|
|
174
|
+
if (type.includes("enum"))
|
|
175
|
+
return "§";
|
|
176
|
+
if (type.includes("type") || type === "type_alias_declaration")
|
|
177
|
+
return "τ";
|
|
178
|
+
if (type === "impl_item")
|
|
179
|
+
return "⊞";
|
|
180
|
+
if (type === "rule_set")
|
|
181
|
+
return "#";
|
|
182
|
+
if (type === "atx_heading")
|
|
183
|
+
return "¶";
|
|
184
|
+
return "·";
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Create the `search_semantic` tool.
|
|
188
|
+
*
|
|
189
|
+
* Purpose: Answers conceptual questions about the codebase.
|
|
190
|
+
* "How does authentication work?" → returns relevant chunks.
|
|
191
|
+
*
|
|
192
|
+
* Internally uses the same RAG pipeline as opencode-rag-context but
|
|
193
|
+
* exposes a clean, focused interface for agents.
|
|
194
|
+
*/
|
|
195
|
+
export function createSearchSemanticTool(options) {
|
|
196
|
+
const { store, embedder, cfg, keywordIndex } = options;
|
|
197
|
+
const retrieveFn = options.retrieveFn ?? retrieve;
|
|
198
|
+
return tool({
|
|
199
|
+
description: "Search the indexed codebase by meaning, not just keywords. " +
|
|
200
|
+
"Use this for conceptual questions like 'How does authentication work?' " +
|
|
201
|
+
"or 'Where is the chunking logic implemented?'. " +
|
|
202
|
+
"Returns the most relevant code snippets with file paths and line numbers.",
|
|
203
|
+
args: {
|
|
204
|
+
query: tool.schema.string().min(1, "A search query is required."),
|
|
205
|
+
pathHints: tool.schema.array(tool.schema.string().min(1)).max(10).optional(),
|
|
206
|
+
languageHints: tool.schema.array(tool.schema.string().min(1)).max(10).optional(),
|
|
207
|
+
topK: tool.schema.number().int().min(1).max(25).optional(),
|
|
208
|
+
},
|
|
209
|
+
async execute(args) {
|
|
210
|
+
try {
|
|
211
|
+
const count = await store.count();
|
|
212
|
+
if (count === 0) {
|
|
213
|
+
return {
|
|
214
|
+
title: "Semantic search",
|
|
215
|
+
output: "The code index is empty. Run indexing first, then try your search again.",
|
|
216
|
+
metadata: { tool: "search_semantic", query: args.query, chunks: 0, indexed: false },
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
// Build a retrieval query with optional hints
|
|
220
|
+
const parts = [args.query.trim()];
|
|
221
|
+
if (args.pathHints?.length)
|
|
222
|
+
parts.push(`Path hints: ${args.pathHints.join(", ")}`);
|
|
223
|
+
if (args.languageHints?.length)
|
|
224
|
+
parts.push(`Language hints: ${args.languageHints.join(", ")}`);
|
|
225
|
+
const query = parts.join("\n");
|
|
226
|
+
const topK = args.topK ?? cfg.retrieval.topK;
|
|
227
|
+
const retrieveOpts = {
|
|
228
|
+
topK,
|
|
229
|
+
minScore: cfg.retrieval.minScore,
|
|
230
|
+
keywordIndex,
|
|
231
|
+
keywordWeight: cfg.retrieval.hybridSearch?.keywordWeight,
|
|
232
|
+
queryPrefix: cfg.embedding.queryPrefix,
|
|
233
|
+
};
|
|
234
|
+
const results = await retrieveFn(query, embedder, store, retrieveOpts);
|
|
235
|
+
if (results.length === 0) {
|
|
236
|
+
return {
|
|
237
|
+
title: "Semantic search",
|
|
238
|
+
output: "No indexed code matched your query. Try different terms or broaden the search.",
|
|
239
|
+
metadata: { tool: "search_semantic", query: args.query, topK, chunks: 0, indexed: true },
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
// Compact formatting
|
|
243
|
+
const formatted = results.map((r) => {
|
|
244
|
+
const m = r.chunk.metadata;
|
|
245
|
+
const desc = r.chunk.description ? `> ${r.chunk.description}\n` : "";
|
|
246
|
+
return [
|
|
247
|
+
`**${m.filePath}:${m.startLine}-${m.endLine}** (${m.language}, relevance: ${r.score.toFixed(2)})`,
|
|
248
|
+
desc,
|
|
249
|
+
"```" + m.language,
|
|
250
|
+
r.chunk.content,
|
|
251
|
+
"```",
|
|
252
|
+
].join("\n");
|
|
253
|
+
}).join("\n\n");
|
|
254
|
+
return {
|
|
255
|
+
title: `Semantic search (${results.length} chunks)`,
|
|
256
|
+
output: `**Semantic search results** for: "${args.query}"\n\n${formatted}`,
|
|
257
|
+
metadata: {
|
|
258
|
+
tool: "search_semantic",
|
|
259
|
+
query: args.query,
|
|
260
|
+
topK,
|
|
261
|
+
chunks: results.length,
|
|
262
|
+
indexed: true,
|
|
263
|
+
},
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
catch (err) {
|
|
267
|
+
return {
|
|
268
|
+
title: "Semantic search",
|
|
269
|
+
output: "Search failed. The index may need to be rebuilt.",
|
|
270
|
+
metadata: { tool: "search_semantic", error: String(err) },
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Create the `get_file_skeleton` tool.
|
|
278
|
+
*
|
|
279
|
+
* Purpose: Quickly orient in a file without reading it entirely.
|
|
280
|
+
* Returns a structural outline (functions, classes, interfaces, etc.)
|
|
281
|
+
* with line numbers, using tree-sitter for parsing.
|
|
282
|
+
*/
|
|
283
|
+
export function createFileSkeletonTool(options) {
|
|
284
|
+
const { worktree } = options;
|
|
285
|
+
return tool({
|
|
286
|
+
description: "Get a quick structural overview of a source file — functions, classes, " +
|
|
287
|
+
"interfaces, methods, and other top-level declarations with their line numbers. " +
|
|
288
|
+
"Use this to orient yourself in a file before reading the full contents. " +
|
|
289
|
+
"Supports TypeScript, JavaScript, Python, Java, Go, Rust, C/C++, C#, Ruby, Swift, Kotlin, and more.",
|
|
290
|
+
args: {
|
|
291
|
+
filePath: tool.schema.string().min(1, "A file path is required."),
|
|
292
|
+
},
|
|
293
|
+
async execute(args) {
|
|
294
|
+
try {
|
|
295
|
+
const resolvedPath = resolveFilePath(args.filePath, worktree);
|
|
296
|
+
const content = readFileSync(resolvedPath, "utf-8");
|
|
297
|
+
const ext = getExtension(args.filePath);
|
|
298
|
+
const skeleton = await extractSkeleton(content, ext);
|
|
299
|
+
// Build a summary line
|
|
300
|
+
const declCounts = new Map();
|
|
301
|
+
for (const item of skeleton) {
|
|
302
|
+
const baseType = item.type.replace(/_declaration$|_definition$|_specifier$|_item$/, "");
|
|
303
|
+
declCounts.set(baseType, (declCounts.get(baseType) ?? 0) + 1);
|
|
304
|
+
}
|
|
305
|
+
const summary = [...declCounts.entries()]
|
|
306
|
+
.map(([t, c]) => `${c} ${t}`)
|
|
307
|
+
.join(", ");
|
|
308
|
+
return {
|
|
309
|
+
title: `Skeleton — ${args.filePath}`,
|
|
310
|
+
output: `**${args.filePath}** \n${skeleton.length} structural elements (${summary || "—"})\n\n` +
|
|
311
|
+
formatSkeleton(skeleton) +
|
|
312
|
+
`\n\n_Use the read tool for full content._`,
|
|
313
|
+
metadata: {
|
|
314
|
+
tool: "get_file_skeleton",
|
|
315
|
+
filePath: args.filePath,
|
|
316
|
+
elements: skeleton.length,
|
|
317
|
+
language: ext.slice(1),
|
|
318
|
+
},
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
catch (err) {
|
|
322
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
323
|
+
return {
|
|
324
|
+
title: "Skeleton",
|
|
325
|
+
output: `Could not read file: ${message}`,
|
|
326
|
+
metadata: { tool: "get_file_skeleton", filePath: args.filePath, error: message },
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
},
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Create the `find_usages` tool.
|
|
334
|
+
*
|
|
335
|
+
* Purpose: Find where a specific symbol/identifier is used or referenced
|
|
336
|
+
* in the codebase. Essential for agents before they modify a function.
|
|
337
|
+
*
|
|
338
|
+
* Strategy:
|
|
339
|
+
* 1. Use the keyword index for exact/similar token matches (fast, precise)
|
|
340
|
+
* 2. Fall back to vector search for broader referral discovery
|
|
341
|
+
* 3. Within matching chunks, extract the specific lines containing the symbol
|
|
342
|
+
* plus 2 lines of surrounding context
|
|
343
|
+
*/
|
|
344
|
+
export function createFindUsagesTool(options) {
|
|
345
|
+
const { store, embedder, cfg, keywordIndex } = options;
|
|
346
|
+
const retrieveFn = options.retrieveFn ?? retrieve;
|
|
347
|
+
/**
|
|
348
|
+
* Given a list of lines and a symbol, return the lines that reference it
|
|
349
|
+
* with 2 lines of surrounding context. Avoids returning the definition line.
|
|
350
|
+
*/
|
|
351
|
+
function extractUsageLines(lines, symbol, definitionLine) {
|
|
352
|
+
const usages = [];
|
|
353
|
+
for (let i = 0; i < lines.length; i++) {
|
|
354
|
+
const line = lines[i];
|
|
355
|
+
const lineNum = i + 1;
|
|
356
|
+
// Skip the definition line
|
|
357
|
+
if (definitionLine !== undefined && lineNum === definitionLine)
|
|
358
|
+
continue;
|
|
359
|
+
// Check if line contains the symbol as a word (not just substring)
|
|
360
|
+
const symbolPattern = new RegExp(`\\b${escapeRegex(symbol)}\\b`);
|
|
361
|
+
if (!symbolPattern.test(line))
|
|
362
|
+
continue;
|
|
363
|
+
// Gather context lines (2 before, 2 after)
|
|
364
|
+
const ctxStart = Math.max(0, i - 2);
|
|
365
|
+
const ctxEnd = Math.min(lines.length, i + 3);
|
|
366
|
+
const contextLines = lines.slice(ctxStart, ctxEnd).map((l) => l.trimEnd());
|
|
367
|
+
usages.push({
|
|
368
|
+
line: lineNum,
|
|
369
|
+
content: line.trimEnd(),
|
|
370
|
+
context: contextLines,
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
return usages;
|
|
374
|
+
}
|
|
375
|
+
async function searchViaKeywordIndex(symbol, topK) {
|
|
376
|
+
if (!keywordIndex)
|
|
377
|
+
return [];
|
|
378
|
+
return keywordIndex.search(symbol, topK);
|
|
379
|
+
}
|
|
380
|
+
async function searchViaVectorStore(symbol, topK) {
|
|
381
|
+
const count = await store.count();
|
|
382
|
+
if (count === 0)
|
|
383
|
+
return [];
|
|
384
|
+
return retrieveFn(symbol, embedder, store, {
|
|
385
|
+
topK,
|
|
386
|
+
minScore: 0,
|
|
387
|
+
keywordIndex: undefined,
|
|
388
|
+
queryPrefix: cfg.embedding.queryPrefix,
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
function escapeRegex(s) {
|
|
392
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
393
|
+
}
|
|
394
|
+
return tool({
|
|
395
|
+
description: "Find usages and references of a symbol (function, variable, class, etc.) " +
|
|
396
|
+
"across the indexed codebase. Essential before editing a function or type — " +
|
|
397
|
+
"it shows every line that references the symbol with surrounding context. " +
|
|
398
|
+
"Use this to understand the impact of a change.",
|
|
399
|
+
args: {
|
|
400
|
+
symbolName: tool.schema.string().min(1, "A symbol name is required."),
|
|
401
|
+
pathHint: tool.schema.string().optional(),
|
|
402
|
+
topK: tool.schema.number().int().min(1).max(50).optional(),
|
|
403
|
+
},
|
|
404
|
+
async execute(args) {
|
|
405
|
+
const symbolName = args.symbolName.trim();
|
|
406
|
+
const topK = args.topK ?? 30;
|
|
407
|
+
try {
|
|
408
|
+
// Phase 1: keyword index search (fast, precise)
|
|
409
|
+
const kwResults = await searchViaKeywordIndex(symbolName, topK);
|
|
410
|
+
// Phase 2: vector store search (broader)
|
|
411
|
+
const vsResults = await searchViaVectorStore(symbolName, topK * 2);
|
|
412
|
+
// Merge results: prefer keyword matches, deduplicate
|
|
413
|
+
const seen = new Set();
|
|
414
|
+
const merged = [];
|
|
415
|
+
const addIfNew = (r) => {
|
|
416
|
+
const key = `${r.chunk.metadata.filePath}:${r.chunk.metadata.startLine}`;
|
|
417
|
+
if (seen.has(key))
|
|
418
|
+
return;
|
|
419
|
+
seen.add(key);
|
|
420
|
+
merged.push(r);
|
|
421
|
+
};
|
|
422
|
+
for (const r of kwResults)
|
|
423
|
+
addIfNew(r);
|
|
424
|
+
for (const r of vsResults)
|
|
425
|
+
addIfNew(r);
|
|
426
|
+
if (merged.length === 0) {
|
|
427
|
+
return {
|
|
428
|
+
title: `Usages of "${symbolName}"`,
|
|
429
|
+
output: `No usages found for \`${symbolName}\`. The symbol may not be indexed or may not exist in the codebase.`,
|
|
430
|
+
metadata: { tool: "find_usages", symbolName, matches: 0 },
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
const fileGroups = new Map();
|
|
434
|
+
for (const result of merged) {
|
|
435
|
+
const m = result.chunk.metadata;
|
|
436
|
+
const lines = result.chunk.content.split("\n");
|
|
437
|
+
// Try to find where the symbol is *defined* in this chunk
|
|
438
|
+
const defPattern = new RegExp(`(?:function|class|interface|type|enum|const|let|var|def|fun|fn)\\s+${escapeRegex(symbolName)}\\b`);
|
|
439
|
+
let definitionLine;
|
|
440
|
+
for (let i = 0; i < lines.length; i++) {
|
|
441
|
+
if (defPattern.test(lines[i])) {
|
|
442
|
+
definitionLine = m.startLine + i;
|
|
443
|
+
break;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
const usages = extractUsageLines(lines, symbolName, definitionLine);
|
|
447
|
+
if (usages.length === 0)
|
|
448
|
+
continue;
|
|
449
|
+
let group = fileGroups.get(m.filePath);
|
|
450
|
+
if (!group) {
|
|
451
|
+
group = { filePath: m.filePath, language: m.language, usages: [] };
|
|
452
|
+
fileGroups.set(m.filePath, group);
|
|
453
|
+
}
|
|
454
|
+
for (const u of usages) {
|
|
455
|
+
// Avoid duplicates within the same file
|
|
456
|
+
if (!group.usages.some((g) => g.line === u.line)) {
|
|
457
|
+
group.usages.push(u);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
if (fileGroups.size === 0) {
|
|
462
|
+
return {
|
|
463
|
+
title: `Usages of "${symbolName}"`,
|
|
464
|
+
output: `No usages found for \`${symbolName}\`. The symbol appears in indexed chunks but no reference lines were found.`,
|
|
465
|
+
metadata: { tool: "find_usages", symbolName, matches: 0 },
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
// Format output
|
|
469
|
+
const lines = [];
|
|
470
|
+
const totalMatches = [...fileGroups.values()].reduce((s, g) => s + g.usages.length, 0);
|
|
471
|
+
lines.push(`**Usages of \`${symbolName}\`** — ${totalMatches} references across ${fileGroups.size} files\n`);
|
|
472
|
+
for (const [filePath, group] of fileGroups) {
|
|
473
|
+
// Sort usages by line number
|
|
474
|
+
group.usages.sort((a, b) => a.line - b.line);
|
|
475
|
+
lines.push(`### ${filePath} (${group.language})\n`);
|
|
476
|
+
lines.push("| Line | Code |");
|
|
477
|
+
lines.push("|------|------|");
|
|
478
|
+
for (const usage of group.usages) {
|
|
479
|
+
const ctx = usage.context;
|
|
480
|
+
const codeLine = ctx[Math.min(2, ctx.length - 1)] ?? usage.content;
|
|
481
|
+
const escaped = codeLine.length > 100
|
|
482
|
+
? codeLine.slice(0, 97) + "..."
|
|
483
|
+
: codeLine;
|
|
484
|
+
lines.push(`| ${usage.line} | \`${escaped}\` |`);
|
|
485
|
+
}
|
|
486
|
+
lines.push("");
|
|
487
|
+
}
|
|
488
|
+
lines.push("---\n");
|
|
489
|
+
lines.push(`_Use \`get_file_skeleton\` for a quick file overview or \`search_semantic\` for broader context._`);
|
|
490
|
+
return {
|
|
491
|
+
title: `Usages of "${symbolName}" (${totalMatches} matches)`,
|
|
492
|
+
output: lines.join("\n"),
|
|
493
|
+
metadata: {
|
|
494
|
+
tool: "find_usages",
|
|
495
|
+
symbolName,
|
|
496
|
+
matches: totalMatches,
|
|
497
|
+
files: fileGroups.size,
|
|
498
|
+
},
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
catch (err) {
|
|
502
|
+
return {
|
|
503
|
+
title: `Usages of "${symbolName}"`,
|
|
504
|
+
output: `Search failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
505
|
+
metadata: { tool: "find_usages", symbolName, error: String(err) },
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
},
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/opencode/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.js
CHANGED
|
@@ -9,6 +9,7 @@ import { appendDebugLog } from "./core/fileLogger.js";
|
|
|
9
9
|
import { loadRuntimeOverrides, applyRuntimeOverrides } from "./core/runtime-overrides.js";
|
|
10
10
|
import { createBackgroundIndexer } from "./watcher.js";
|
|
11
11
|
import { createRagReadTool } from "./opencode/create-read-tool.js";
|
|
12
|
+
import { createSearchSemanticTool, createFileSkeletonTool, createFindUsagesTool, } from "./opencode/tools.js";
|
|
12
13
|
import { resolveApiKey } from "./core/resolve-api-key.js";
|
|
13
14
|
import { existsSync } from "node:fs";
|
|
14
15
|
import path from "node:path";
|
|
@@ -408,9 +409,59 @@ export function createRagHooks(options) {
|
|
|
408
409
|
}
|
|
409
410
|
},
|
|
410
411
|
});
|
|
412
|
+
// ── Register tools ─────────────────────────────────────────────────────
|
|
411
413
|
const tools = {
|
|
412
414
|
[CONTEXT_TOOL_NAME]: retrievalTool,
|
|
413
415
|
};
|
|
416
|
+
// Specialized agent tools
|
|
417
|
+
const effectiveCfg = getEffectiveCfg();
|
|
418
|
+
try {
|
|
419
|
+
const searchSemanticTool = createSearchSemanticTool({
|
|
420
|
+
store,
|
|
421
|
+
embedder,
|
|
422
|
+
cfg: effectiveCfg,
|
|
423
|
+
keywordIndex,
|
|
424
|
+
retrieveFn: dependencies.retrieve,
|
|
425
|
+
});
|
|
426
|
+
tools["search_semantic"] = searchSemanticTool;
|
|
427
|
+
}
|
|
428
|
+
catch (err) {
|
|
429
|
+
appendDebugLog(options.logFilePath, {
|
|
430
|
+
scope: "plugin",
|
|
431
|
+
message: "Failed to register search_semantic tool",
|
|
432
|
+
error: err,
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
try {
|
|
436
|
+
const fileSkeletonTool = createFileSkeletonTool({
|
|
437
|
+
worktree: options.worktree,
|
|
438
|
+
});
|
|
439
|
+
tools["get_file_skeleton"] = fileSkeletonTool;
|
|
440
|
+
}
|
|
441
|
+
catch (err) {
|
|
442
|
+
appendDebugLog(options.logFilePath, {
|
|
443
|
+
scope: "plugin",
|
|
444
|
+
message: "Failed to register get_file_skeleton tool",
|
|
445
|
+
error: err,
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
try {
|
|
449
|
+
const findUsagesTool = createFindUsagesTool({
|
|
450
|
+
store,
|
|
451
|
+
embedder,
|
|
452
|
+
cfg: effectiveCfg,
|
|
453
|
+
keywordIndex,
|
|
454
|
+
retrieveFn: dependencies.retrieve,
|
|
455
|
+
});
|
|
456
|
+
tools["find_usages"] = findUsagesTool;
|
|
457
|
+
}
|
|
458
|
+
catch (err) {
|
|
459
|
+
appendDebugLog(options.logFilePath, {
|
|
460
|
+
scope: "plugin",
|
|
461
|
+
message: "Failed to register find_usages tool",
|
|
462
|
+
error: err,
|
|
463
|
+
});
|
|
464
|
+
}
|
|
414
465
|
if (readOverride) {
|
|
415
466
|
const readTool = createRagReadTool({
|
|
416
467
|
worktree: options.worktree,
|
|
@@ -428,6 +479,11 @@ export function createRagHooks(options) {
|
|
|
428
479
|
message: "Read override enabled — RAG-backed read tool registered",
|
|
429
480
|
});
|
|
430
481
|
}
|
|
482
|
+
const toolNames = Object.keys(tools).join(", ");
|
|
483
|
+
appendDebugLog(options.logFilePath, {
|
|
484
|
+
scope: "plugin",
|
|
485
|
+
message: `Registered tools: ${toolNames}`,
|
|
486
|
+
});
|
|
431
487
|
return {
|
|
432
488
|
async event({ event }) {
|
|
433
489
|
//appendVerboseLog(options.logFilePath, "event", "opencode event received", event);
|
|
@@ -439,11 +495,14 @@ export function createRagHooks(options) {
|
|
|
439
495
|
message: "system guidance injected",
|
|
440
496
|
});
|
|
441
497
|
const guidance = [
|
|
442
|
-
"OpenCodeRAG
|
|
443
|
-
"
|
|
444
|
-
"
|
|
498
|
+
"OpenCodeRAG tools are available:",
|
|
499
|
+
"- `opencode-rag-context`: general-purpose code retrieval (use for any code search)",
|
|
500
|
+
"- `search_semantic`: search code by concept/meaning (\"How does auth work?\")",
|
|
501
|
+
"- `get_file_skeleton`: quick structural outline of a file without reading it entirely",
|
|
502
|
+
"- `find_usages`: find where a symbol is referenced in the codebase (essential before editing)",
|
|
503
|
+
"Use these tools before planning, editing, or answering when you need code provenance.",
|
|
445
504
|
];
|
|
446
|
-
output.system.unshift(guidance.join("
|
|
505
|
+
output.system.unshift(guidance.join("\n"));
|
|
447
506
|
},
|
|
448
507
|
async "chat.message"(input, output) {
|
|
449
508
|
try {
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAkB,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAqB,CAAC;AACjD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA0C,CAAC;AAE7E,MAAM,iBAAiB,GAAG,sBAAsB,CAAC;AACjD,MAAM,cAAc,GAAG,gCAAgC,CAAC;AASxD,SAAS,gBAAgB,CACvB,WAAmB,EACnB,KAAa,EACb,OAAe,EACf,OAAiB;IAEjB,cAAc,CAAC,WAAW,EAAE;QAC1B,KAAK;QACL,OAAO,EAAE,OAAO;YACd,CAAC,CAAC,GAAG,OAAO,KAAK,gBAAgB,CAAC,OAAO,CAAC,EAAE;YAC5C,CAAC,CAAC,OAAO;KACZ,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc,EAAE,MAAM,GAAG,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEnC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,GAAG,MAAM,MAAM,CAAC;IACzB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACzF,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACrC,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE,CAAC;QACjC,OAAO,GAAG,MAAM,WAAW,CAAC;IAC9B,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,MAAM,IAAI,CAAC;QACvB,CAAC;QAED,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvG,OAAO,GAAG,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,CAAC;YAED,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE,CAAC;gBAChC,OAAO,GAAG,MAAM,aAAa,CAAC;YAChC,CAAC;YAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/F,CAAC;YAED,OAAO,GAAG,MAAM,MAAM,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QAC7D,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC;QACjE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,GAAG,MAAM,IAAI,CAAC;QACvB,CAAC;QAED,OAAO,OAAO;aACX,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE;YACrB,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/G,OAAO,GAAG,MAAM,GAAG,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,CAAC;YAED,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,GAAG,MAAM,GAAG,GAAG,aAAa,CAAC;YACtC,CAAC;YAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,GAAG,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YACpE,CAAC;YAED,OAAO,GAAG,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QACrE,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,MAAc;IACnD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO,IAAI;SACR,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC;SACjC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,SAAiB;IACxC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,KAAK,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE,6BAA6B,EAAE,oBAAoB,CAAC,EAAE,CAAC;QAC7F,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,sBAAsB,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YAC5D,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAChC,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,kBAAkB,CAAC,EAAE;gBACvE,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,8BAA8B,UAAU,EAAE;gBACnD,KAAK,EAAE,GAAG;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC3C,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,aAAa,CACpB,OAA6C;IAE7C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAE/E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,cAAc,iBAAiB,OAAO,CAAC,MAAM,2BAA2B,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrH,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEpB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC3B,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,QAAQ,YAAY,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAC5F,CAAC;QACF,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAuB,EACvB,QAAgB,EAChB,SAAiB,EACjB,SAAiB;IAEjB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEpE,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAE5C,MAAM,WAAW,GAAG,CAAC,KAAqB,EAAU,EAAE;QACpD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;QACtC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;QAE7B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,gDAAgD,KAAK,CAAC,MAAM,SAAS,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,WAAW,CAAC,IAAI,QAAQ,WAAW,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,eAAe,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5O,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEpB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACxE,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,QAAQ,YAAY,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACrG,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,IAAI,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,cAAc,CAAC,SAAS,CAAC,GAAG,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpE,QAAQ,CAAC,GAAG,EAAE,CAAC;QACf,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAA0B;IACrD,MAAM,KAAK,GAAa,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAE7C,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACtG,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,eAAe,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9G,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,mBAAmB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,aAAa,CAAC,OAAuB;IAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,GAAG,GAAG;YACV,KAAK,CAAC,QAAQ,CAAC,QAAQ;YACvB,KAAK,CAAC,QAAQ,CAAC,SAAS;YACxB,KAAK,CAAC,QAAQ,CAAC,OAAO;YACtB,KAAK,CAAC,OAAO;SACd,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEZ,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,KAAa,EACb,QAA2B,EAC3B,KAAkB,EAClB,IAAY,EACZ,aAA8B,QAAQ,EACtC,QAAQ,GAAG,CAAC,EACZ,YAA2B,EAC3B,aAAsB,EACtB,WAAoB;IAEpB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACzC,OAAO,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC;AAC1G,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,KAAa,EACb,QAA2B,EAC3B,KAAkB,EAClB,GAAc,EACd,aAA8B,QAAQ,EACtC,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,EACzB,UAAmB,EACnB,YAA2B,EAC3B,WAAoB;IAEpB,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC;IACxC,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,aAAa,CAAC;IACrD,MAAM,cAAc,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;IAChI,MAAM,YAAY,GAAG,UAAU;QAC7B,CAAC,CAAC,MAAM,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,CAAC;QAC/G,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,aAAa,CAAC,CAAC,GAAG,cAAc,EAAE,GAAG,YAAY,CAAC,CAAC;SACvD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAC7C,CAAC;AAQD,MAAM,mBAAmB,GAA0B;IACjD,cAAc;IACd,WAAW,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC;IACvD,QAAQ;CACT,CAAC;AAcF,SAAS,cAAc,CAAC,OAAuB,EAAE,QAAgB;IAC/D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiD,CAAC;IAEzE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC5C,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE;gBACtB,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC;gBAC/B,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;SAClC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SACnE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;QACxG,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,KAAK,IAAI,WAAW,OAAO,IAAI,OAAO,eAAe,SAAS,GAAG,CAAC,CAAC;IAC1F,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,UAAU,iBAAiB,8CAA8C,CAAC,CAAC;IACtF,IAAI,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAC7B,KAAmI,EACnI,MAAiD;IAEjD,4DAA4D;IAC5D,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,MAAM,CAAC,OAAkC,CAAC;QACtD,mCAAmC;QACnC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC;QACjF,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,SAAS,GAAG,KAAK;iBACpB,MAAM,CAAC,CAAC,CAAC,EAAgC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC;iBAChF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBACtD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC/B,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,sCAAsC;QACtC,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,OAAO,GAAG,CAAC,OAAO,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAA8B;IAC3D,MAAM,YAAY,GAA0B;QAC1C,GAAG,mBAAmB;QACtB,GAAG,OAAO,CAAC,YAAY;KACxB,CAAC;IACF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAE1C,qDAAqD;IACrD,IAAI,eAAe,GAAG,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9D,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,MAAM,gBAAgB,GAAG,IAAI,CAAC;IAE9B,SAAS,eAAe;QACtB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,kBAAkB,GAAG,gBAAgB,EAAE,CAAC;YACvD,eAAe,GAAG,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC1D,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAClC,CAAC;QACD,OAAO,qBAAqB,CAAC,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAC7D,CAAC;IAED,0CAA0C;IAC1C,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrD,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAA+D,CAAC;IAErG,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE;QAClC,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,6BAA6B;KACvC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC;IAEtE,MAAM,aAAa,GAAG,IAAI,CAAC;QACzB,WAAW,EACT,gLAAgL;QAClL,IAAI,EAAE;YACJ,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,gCAAgC,CAAC;YACpE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;YAC5E,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;YAChF,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;SAC3D;QACD,KAAK,CAAC,OAAO,CAAC,IAAI;YAChB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;gBAClC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;oBAChB,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,iBAAiB,EAAE,+CAA+C,EAAE;wBACxG,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;wBAC/B,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;wBACvC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI;qBACpD,CAAC,CAAC;oBAEH,OAAO;wBACL,KAAK,EAAE,qBAAqB;wBAC5B,MAAM,EACJ,2FAA2F;wBAC7F,QAAQ,EAAE;4BACR,KAAK,EAAE,IAAI,CAAC,KAAK;4BACjB,MAAM,EAAE,CAAC;4BACT,OAAO,EAAE,KAAK;yBACf;qBACF,CAAC;gBACJ,CAAC;gBAED,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;gBACvC,MAAM,KAAK,GAAG,mBAAmB,CAAC;oBAChC,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,aAAa,EAAE,IAAI,CAAC,aAAa;iBAClC,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC;gBACtD,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAE3K,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,iBAAiB,EAAE,6CAA6C,EAAE;wBACtG,KAAK;wBACL,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;wBAC/B,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;wBACvC,IAAI;qBACL,CAAC,CAAC;oBAEH,OAAO;wBACL,KAAK,EAAE,qBAAqB;wBAC5B,MAAM,EAAE,GAAG,cAAc,0CAA0C;wBACnE,QAAQ,EAAE;4BACR,KAAK,EAAE,IAAI,CAAC,KAAK;4BACjB,MAAM,EAAE,CAAC;4BACT,OAAO,EAAE,IAAI;yBACd;qBACF,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;gBAEtC,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,iBAAiB,EAAE,kCAAkC,EAAE;oBAC3F,KAAK;oBACL,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;oBAC/B,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;oBACvC,IAAI;oBACJ,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;wBAChC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ;wBACxC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS;wBAC1C,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO;wBACtC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ;wBACxC,KAAK,EAAE,MAAM,CAAC,KAAK;qBACpB,CAAC,CAAC;oBACH,MAAM;iBACP,CAAC,CAAC;gBAEH,OAAO;oBACL,KAAK,EAAE,wBAAwB,OAAO,CAAC,MAAM,SAAS,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;oBACxF,MAAM;oBACN,QAAQ,EAAE;wBACR,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,IAAI;wBACJ,MAAM,EAAE,OAAO,CAAC,MAAM;wBACtB,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;wBAC/B,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;qBACxC;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE;oBAClC,KAAK,EAAE,iBAAiB;oBACxB,OAAO,EAAE,4BAA4B;oBACrC,KAAK,EAAE,GAAG;iBACX,CAAC,CAAC;gBAEH,OAAO;oBACL,KAAK,EAAE,qBAAqB;oBAC5B,MAAM,EACJ,uGAAuG;oBACzG,QAAQ,EAAE;wBACR,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,MAAM,EAAE,CAAC;wBACT,OAAO,EAAE,KAAK;qBACf;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,0EAA0E;IAC1E,MAAM,KAAK,GAAmC;QAC5C,CAAC,iBAAiB,CAAC,EAAE,aAAa;KACnC,CAAC;IAEF,0BAA0B;IAC1B,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;YAClD,KAAK;YACL,QAAQ;YACR,GAAG,EAAE,YAAY;YACjB,YAAY;YACZ,UAAU,EAAE,YAAY,CAAC,QAAQ;SAClC,CAAC,CAAC;QACH,KAAK,CAAC,iBAAiB,CAAC,GAAG,kBAAkB,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE;YAClC,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,yCAAyC;YAClD,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;YAC9C,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;QACH,KAAK,CAAC,mBAAmB,CAAC,GAAG,gBAAgB,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE;YAClC,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,2CAA2C;YACpD,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,oBAAoB,CAAC;YAC1C,KAAK;YACL,QAAQ;YACR,GAAG,EAAE,YAAY;YACjB,YAAY;YACZ,UAAU,EAAE,YAAY,CAAC,QAAQ;SAClC,CAAC,CAAC;QACH,KAAK,CAAC,aAAa,CAAC,GAAG,cAAc,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE;YAClC,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,qCAAqC;YAC9C,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;IACL,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,iBAAiB,CAAC;YACjC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,GAAG;YACnB,QAAQ;YACR,KAAK;YACL,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,kBAAkB;YAClB,qBAAqB;YACrB,YAAY;SACb,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;QACzB,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE;YAClC,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,yDAAyD;SACnE,CAAC,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE;QAClC,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,qBAAqB,SAAS,EAAE;KAC1C,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE;YACnB,mFAAmF;QACrF,CAAC;QACD,IAAI,EAAE,KAAK;QACX,KAAK,CAAC,oCAAoC,CAAC,MAAM,EAAE,MAAM;YACvD,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE;gBAClC,KAAK,EAAE,oCAAoC;gBAC3C,OAAO,EAAE,0BAA0B;aACpC,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG;gBACf,kCAAkC;gBAClC,oFAAoF;gBACpF,+EAA+E;gBAC/E,uFAAuF;gBACvF,+FAA+F;gBAC/F,uFAAuF;aACxF,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM;YAChC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBACnD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO;gBAE9B,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAE9C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;gBAClC,IAAI,KAAK,KAAK,CAAC;oBAAE,OAAO;gBAExB,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;gBACvC,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC;gBACtD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;oBACjE,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,IAAI;oBACjC,QAAQ,EAAE,YAAY,CAAC,SAAS,CAAC,QAAQ;oBACzC,YAAY;oBACZ,aAAa,EAAE,SAAS,EAAE,aAAa;oBACvC,WAAW,EAAE,YAAY,CAAC,SAAS,CAAC,WAAW;iBAChD,CAAC,CAAC;gBAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO;gBAEjC,MAAM,aAAa,GAAG,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACvD,IAAI,cAAkC,CAAC;gBAEvC,IAAI,aAAa,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;oBACrC,MAAM,QAAQ,GAAG,aAAa,EAAE,QAAQ,IAAI,IAAI,CAAC;oBACjD,MAAM,SAAS,GAAG,aAAa,EAAE,SAAS,IAAI,CAAC,CAAC;oBAChD,MAAM,SAAS,GAAG,aAAa,EAAE,SAAS,IAAI,IAAI,CAAC;oBACnD,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC;oBAElE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC9B,cAAc,GAAG,uBAAuB,CACtC,cAAc,EACd,OAAO,CAAC,QAAQ,EAChB,SAAS,EACT,SAAS,CACV,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpB,cAAc,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC7D,CAAC;gBAED,IAAI,CAAC,cAAc;oBAAE,OAAO;gBAE5B,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAK,MAAM,EAAE,OAAmC,EAAE,KAAK,CAAC;gBACnF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAA4B,CAAC;oBAClD,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACnC,KAAK,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,OAAO,cAAc,EAAE,CAAC;oBACpD,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE;oBAClC,KAAK,EAAE,cAAc;oBACrB,OAAO,EAAE,iCAAiC;oBAC1C,KAAK,EAAE,GAAG;iBACX,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,SAAiB,EAAE,WAAmB;IACpE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IACtE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,cAAc,CAAC,WAAW,EAAE;YAC1B,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,yBAAyB,KAAK,CAAC,KAAK,EAAE,UAAU;SAC1D,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,cAAc,CAAC,WAAW,EAAE;YAC1B,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,8CAA8C;YACvD,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;QACH,OAAO,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAID,MAAM,CAAC,MAAM,SAAS,GAAW,KAAK,EACpC,KAAkB,EAClB,QAAkC,EAClB,EAAE;IAClB,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;IAErF,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAEtE,mDAAmD;IACnD,MAAM,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,qBAAqB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAE3D,6FAA6F;IAC7F,MAAM,eAAe,GAAG,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC;IACxD,MAAM,iBAAiB,GAAG,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7D,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,eAAe,IAAI,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACtD,cAAc,CAAC,WAAW,EAAE;YAC1B,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,8CAA8C,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,0BAA0B,EAAE;SAC5I,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,iBAAiB,IAAI,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QAC3D,cAAc,CAAC,WAAW,EAAE;YAC1B,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,gDAAgD,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,0BAA0B,EAAE;SAC9I,CAAC,CAAC;IACL,CAAC;IAED,kFAAkF;IAClF,MAAM,eAAe,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAChE,IAAI,eAAe,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,cAAc,CAAC,WAAW,EAAE;gBAC1B,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,6CAA6C;gBACtD,KAAK,EAAE,GAAG;aACX,CAAC,CAAC;QACL,CAAC;QACD,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,cAAc,CAAC,WAAW,EAAE;QAC1B,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,+BAA+B,KAAK,CAAC,SAAS,EAAE;KAC1D,CAAC,CAAC;IAEH,iEAAiE;IACjE,MAAM,QAAQ,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IAC9C,IAAI,eAAe,GAAG,GAAG,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC;QACjE,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAChF,eAAe,GAAI,KAAK,CAAC,CAAC,CAAc,CAAC,MAAM,CAAC;QAClD,CAAC;QACD,cAAc,CAAC,WAAW,EAAE;YAC1B,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,qBAAqB,eAAe,EAAE;SAChD,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,cAAc,CAAC,WAAW,EAAE;YAC1B,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,2CAA2C,eAAe,EAAE;YACrE,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAE3D,iDAAiD;IACjD,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAEpE,mDAAmD;IACnD,MAAM,iBAAiB,GAAG,YAAY,CAAC,WAAW,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAiB,EAAE,OAAO,EAAE,4BAA4B,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IACnL,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,OAAO;QACnD,CAAC,CAAC,yBAAyB,CAAC,iBAAiB,CAAC;QAC9C,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,KAAK,GAAG,cAAc,CAAC;QAC3B,GAAG,EAAE,YAAY;QACjB,SAAS;QACT,WAAW;QACX,QAAQ,EAAE,KAAK,CAAC,SAAS;QACzB,QAAQ;QACR,KAAK;QACL,YAAY;QACZ,mBAAmB;KACpB,CAAC,CAAC;IAEH,2CAA2C;IAC3C,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAChH,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,uBAAuB,CAAC;YACtC,GAAG,EAAE,KAAK,CAAC,SAAS;YACpB,SAAS;YACT,MAAM,EAAE,YAAY;YACpB,KAAK;YACL,QAAQ;YACR,WAAW;YACX,YAAY;YACZ,mBAAmB;SACpB,CAAC,CAAC;QAEH,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
|