ownkey 0.8.0 → 1.0.0
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 +39 -166
- package/dist/commands/suggest.d.ts.map +1 -1
- package/dist/commands/suggest.js +51 -17
- package/dist/commands/suggest.js.map +1 -1
- package/dist/core/apply/engine.d.ts +1 -1
- package/dist/core/apply/engine.d.ts.map +1 -1
- package/dist/core/apply/engine.js +29 -12
- package/dist/core/apply/engine.js.map +1 -1
- package/dist/db/client.d.ts +1 -0
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +5 -1
- package/dist/db/client.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/storage/local.d.ts +71 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +170 -0
- package/dist/storage/local.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,208 +1,81 @@
|
|
|
1
|
-
|
|
1
|
+
# OwnKey CLI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> AI-powered code analysis that works with or without a database
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/ownkey)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
7
|
|
|
7
|
-
**
|
|
8
|
+
**OwnKey** is a local-first AI coding agent that analyzes your codebase and provides intelligent suggestions for bugs, security issues, performance improvements, and code quality.
|
|
8
9
|
|
|
9
|
-
[
|
|
10
|
-
[](https://opensource.org/licenses/MIT)
|
|
11
|
-
[](https://www.npmjs.com/package/ownkey)
|
|
12
|
-
|
|
13
|
-
*Intelligent code analysis powered by AI • Your code never leaves your machine*
|
|
14
|
-
|
|
15
|
-
[Quick Start](#-quick-start) • [Features](#-features) • [Installation](#-installation) • [Commands](#-commands)
|
|
16
|
-
|
|
17
|
-
</div>
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
> ✨ **v0.8.0** - Now with Ollama! Run completely offline with local LLMs.
|
|
22
|
-
|
|
23
|
-
## 🚀 Quick Start
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
# Install
|
|
27
|
-
npm install -g ownkey
|
|
28
|
-
|
|
29
|
-
# Configure (choose your provider)
|
|
30
|
-
ownkey config
|
|
31
|
-
|
|
32
|
-
# Analyze your code
|
|
33
|
-
ownkey suggest .
|
|
34
|
-
|
|
35
|
-
# Apply AI suggestions (auto-fix)
|
|
36
|
-
ownkey apply <suggestion-id>
|
|
37
|
-
```
|
|
10
|
+
🌐 **[Full Documentation](https://ownkey.qzz.io)**
|
|
38
11
|
|
|
39
12
|
## ✨ Features
|
|
40
13
|
|
|
41
|
-
- 🤖 **
|
|
42
|
-
- 🔒 **Privacy-First** -
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
- 🔐 **Secure** - API keys stored in OS keychain or encrypted
|
|
48
|
-
- 📂 **Smart Scanning** - Respects .gitignore and custom patterns
|
|
49
|
-
|
|
50
|
-
## ⚡ AI Providers
|
|
51
|
-
|
|
52
|
-
<div align="center">
|
|
53
|
-
|
|
54
|
-
| Provider | Status | Best For | API Key Required |
|
|
55
|
-
|:--------:|:------:|:--------:|:----------------:|
|
|
56
|
-
| **🟢 Google Gemini** | ✅ Available | Fast & accurate | [Get Key](https://aistudio.google.com/app/apikey) |
|
|
57
|
-
| **🔵 OpenAI** | ✅ Available | GPT models | [Get Key](https://platform.openai.com/api-keys) |
|
|
58
|
-
| **🟣 Anthropic Claude** | ✅ Available | Advanced reasoning | [Get Key](https://console.anthropic.com/) |
|
|
59
|
-
| **🟠 Ollama** | ✅ Available | Offline & free | [Install Ollama](https://ollama.ai) |
|
|
14
|
+
- 🤖 **Multi-Provider AI** - Supports Google Gemini, OpenAI, Anthropic Claude, and Ollama
|
|
15
|
+
- 🔒 **Privacy-First** - Works completely offline with local-only mode
|
|
16
|
+
- 💾 **Optional Database** - Supabase integration for persistent history (optional)
|
|
17
|
+
- 🚀 **Auto-Model Detection** - Instantly supports new AI models without CLI updates
|
|
18
|
+
- 🎯 **Smart Suggestions** - Identifies bugs, security issues, performance problems, and more
|
|
19
|
+
- ⚡ **Apply & Undo** - Safely apply suggestions with automatic backups
|
|
60
20
|
|
|
61
|
-
|
|
21
|
+
## 🚀 Quick Start
|
|
62
22
|
|
|
63
|
-
|
|
23
|
+
### Installation
|
|
64
24
|
|
|
65
25
|
```bash
|
|
66
26
|
npm install -g ownkey
|
|
67
27
|
```
|
|
68
28
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
### `ownkey config`
|
|
72
|
-
|
|
73
|
-
Configure AI provider and database (optional).
|
|
29
|
+
### Basic Usage
|
|
74
30
|
|
|
75
31
|
```bash
|
|
76
|
-
|
|
77
|
-
ownkey config --provider gemini
|
|
78
|
-
ownkey config --reset # Reset to defaults
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
### `ownkey scan [path]`
|
|
82
|
-
|
|
83
|
-
Scan a project directory.
|
|
84
|
-
|
|
85
|
-
```bash
|
|
86
|
-
ownkey scan . # Scan current directory
|
|
87
|
-
ownkey scan ./src # Scan specific folder
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
### `ownkey suggest [path]`
|
|
91
|
-
|
|
92
|
-
Generate AI-powered code suggestions.
|
|
32
|
+
# Configure with your AI provider
|
|
33
|
+
ownkey config --provider gemini --api-key YOUR_API_KEY
|
|
93
34
|
|
|
94
|
-
|
|
95
|
-
ownkey suggest .
|
|
96
|
-
ownkey suggest --local-only # Skip database storage
|
|
97
|
-
ownkey suggest --max-files 20 # Limit files analyzed
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
### `ownkey apply <suggestion-id>`
|
|
35
|
+
# Analyze your code
|
|
36
|
+
ownkey suggest .
|
|
101
37
|
|
|
102
|
-
Apply
|
|
38
|
+
# Apply a suggestion
|
|
39
|
+
ownkey apply local-123456789-0
|
|
103
40
|
|
|
104
|
-
|
|
105
|
-
ownkey
|
|
106
|
-
ownkey apply abc123 --auto # Auto-apply
|
|
107
|
-
ownkey apply abc123 --dry-run # Preview only
|
|
41
|
+
# Undo if needed
|
|
42
|
+
ownkey undo
|
|
108
43
|
```
|
|
109
44
|
|
|
110
|
-
###
|
|
45
|
+
### Local-Only Mode
|
|
111
46
|
|
|
112
|
-
|
|
47
|
+
No database required! OwnKey automatically stores suggestions in `~/.ownkey/storage/`:
|
|
113
48
|
|
|
114
49
|
```bash
|
|
115
|
-
ownkey
|
|
116
|
-
ownkey undo abc123 # Undo specific backup
|
|
117
|
-
ownkey undo --list # List recent applies
|
|
50
|
+
ownkey suggest . --local-only
|
|
118
51
|
```
|
|
119
52
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
Run OwnKey completely offline with local LLMs!
|
|
123
|
-
|
|
124
|
-
### Setup
|
|
125
|
-
|
|
126
|
-
1. **Install Ollama**
|
|
127
|
-
- Windows: Download from [ollama.ai](https://ollama.ai)
|
|
128
|
-
- macOS: `brew install ollama`
|
|
129
|
-
- Linux: `curl https://ollama.ai/install.sh | sh`
|
|
130
|
-
|
|
131
|
-
2. **Pull a Model**
|
|
132
|
-
```bash
|
|
133
|
-
ollama pull deepseek-coder # Recommended for code
|
|
134
|
-
# OR
|
|
135
|
-
ollama pull codellama # Alternative
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
3. **Configure OwnKey**
|
|
139
|
-
```bash
|
|
140
|
-
ownkey config --provider ollama
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
4. **Use Offline**
|
|
144
|
-
```bash
|
|
145
|
-
ownkey suggest . # Works without internet!
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
### Recommended Models
|
|
149
|
-
|
|
150
|
-
- **deepseek-coder** - Best for code analysis
|
|
151
|
-
- **codellama** - Meta's code model
|
|
152
|
-
- **llama3** - General purpose
|
|
153
|
-
- **qwen-coder** - Alibaba's code model
|
|
53
|
+
### With Database (Optional)
|
|
154
54
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
- API keys stored in OS keychain (macOS/Linux) or encrypted (Windows)
|
|
158
|
-
- Code never sent to cloud (except when using cloud providers)
|
|
159
|
-
- Ollama runs 100% locally
|
|
160
|
-
- Optional database (your own Supabase instance)
|
|
161
|
-
|
|
162
|
-
## 📊 What OwnKey Detects
|
|
163
|
-
|
|
164
|
-
- 🐛 **Bugs** - Logic errors, off-by-one errors, null pointers
|
|
165
|
-
- 🔒 **Security** - SQL injection, XSS, insecure dependencies
|
|
166
|
-
- ⚡ **Performance** - Inefficient algorithms, memory leaks
|
|
167
|
-
- ✅ **Tests** - Missing test coverage
|
|
168
|
-
- 📝 **Documentation** - Missing comments, unclear code
|
|
169
|
-
- 🎨 **Style** - Code quality improvements
|
|
170
|
-
|
|
171
|
-
## 🌐 Database (Optional)
|
|
172
|
-
|
|
173
|
-
OwnKey can store analysis history in your own Supabase database.
|
|
55
|
+
For persistent history across devices:
|
|
174
56
|
|
|
175
57
|
```bash
|
|
176
58
|
ownkey config --supabase-url YOUR_URL --supabase-key YOUR_KEY
|
|
59
|
+
ownkey suggest .
|
|
177
60
|
```
|
|
178
61
|
|
|
179
|
-
|
|
62
|
+
## 📚 Documentation
|
|
180
63
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
64
|
+
Visit **[ownkey.qzz.io](https://ownkey.qzz.io)** for complete documentation:
|
|
65
|
+
|
|
66
|
+
- [Getting Started](https://ownkey.qzz.io/docs/getting-started)
|
|
67
|
+
- [AI Providers Setup](https://ownkey.qzz.io/docs/providers)
|
|
68
|
+
- [Commands Reference](https://ownkey.qzz.io/docs/commands)
|
|
69
|
+
- [Database Setup](https://ownkey.qzz.io/docs/database)
|
|
184
70
|
|
|
185
71
|
## 🤝 Contributing
|
|
186
72
|
|
|
187
|
-
Contributions welcome! Please
|
|
73
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
188
74
|
|
|
189
75
|
## 📄 License
|
|
190
76
|
|
|
191
|
-
MIT
|
|
192
|
-
|
|
193
|
-
## 🔗 Links
|
|
194
|
-
|
|
195
|
-
- [Documentation](https://ownkey.dev) *(coming soon)*
|
|
196
|
-
- [GitHub](https://github.com/ArpitK24/OwnKey)
|
|
197
|
-
- [npm](https://www.npmjs.com/package/ownkey)
|
|
198
|
-
- [Issues](https://github.com/ArpitK24/OwnKey/issues)
|
|
77
|
+
MIT © [OwnKey](https://ownkey.qzz.io)
|
|
199
78
|
|
|
200
79
|
---
|
|
201
80
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
Made with ❤️ by the OwnKey team
|
|
205
|
-
|
|
206
|
-
**Privacy-first • AI-powered • Developer-friendly**
|
|
207
|
-
|
|
208
|
-
</div>
|
|
81
|
+
**[Website](https://ownkey.qzz.io)** • **[Documentation](https://ownkey.qzz.io/docs)** • **[GitHub](https://github.com/ArpitK24/ownkey-cli)**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../src/commands/suggest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../src/commands/suggest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,cAAc,SAmLrB,CAAC"}
|
package/dist/commands/suggest.js
CHANGED
|
@@ -7,6 +7,7 @@ import { AIProviderFactory } from '../ai/factory.js';
|
|
|
7
7
|
import { dbOps } from '../db/operations.js';
|
|
8
8
|
import { dbClient } from '../db/client.js';
|
|
9
9
|
import chalk from 'chalk';
|
|
10
|
+
import { localStorage } from '../storage/local.js';
|
|
10
11
|
export const suggestCommand = new Command('suggest')
|
|
11
12
|
.description('Generate AI-powered suggestions for your code')
|
|
12
13
|
.argument('[path]', 'Path to analyze', '.')
|
|
@@ -75,26 +76,57 @@ export const suggestCommand = new Command('suggest')
|
|
|
75
76
|
console.log(` ${suggestion.content}`);
|
|
76
77
|
console.log();
|
|
77
78
|
}
|
|
78
|
-
// Step 6: Store
|
|
79
|
+
// Step 6: Store suggestions (hybrid: database + local file)
|
|
80
|
+
let storedIds = [];
|
|
81
|
+
// Try database first (if connected)
|
|
79
82
|
if (dbClient.isConnected()) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if (project) {
|
|
86
|
-
const run = await dbOps.createRun(project.id, `suggest ${path}`);
|
|
87
|
-
for (const suggestion of suggestions) {
|
|
88
|
-
const stored = await dbOps.createSuggestion(project.id, suggestion);
|
|
89
|
-
if (stored && run) {
|
|
90
|
-
await dbOps.linkRunSuggestion(run.id, stored.id);
|
|
91
|
-
}
|
|
83
|
+
try {
|
|
84
|
+
logger.verbose('Storing suggestions in database...');
|
|
85
|
+
let project = await dbOps.getProjectByPath(targetPath);
|
|
86
|
+
if (!project) {
|
|
87
|
+
project = await dbOps.createProject(projectName, targetPath);
|
|
92
88
|
}
|
|
93
|
-
if (
|
|
94
|
-
await dbOps.
|
|
89
|
+
if (project) {
|
|
90
|
+
const run = await dbOps.createRun(project.id, `suggest ${path}`);
|
|
91
|
+
for (const suggestion of suggestions) {
|
|
92
|
+
try {
|
|
93
|
+
const stored = await dbOps.createSuggestion(project.id, suggestion);
|
|
94
|
+
if (stored && run) {
|
|
95
|
+
await dbOps.linkRunSuggestion(run.id, stored.id);
|
|
96
|
+
storedIds.push(stored.id);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
logger.warn(`Failed to store suggestion: ${err.message}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (run) {
|
|
104
|
+
await dbOps.updateRunStatus(run.id, 'completed', `Generated ${suggestions.length} suggestions`);
|
|
105
|
+
}
|
|
95
106
|
}
|
|
107
|
+
logger.success('Saved to database');
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
logger.warn('Database save failed, using local storage only');
|
|
111
|
+
logger.debug(`Database error: ${error.message}`);
|
|
96
112
|
}
|
|
97
113
|
}
|
|
114
|
+
// Always save to local file (cache or primary storage)
|
|
115
|
+
try {
|
|
116
|
+
const localStored = await localStorage.saveSuggestions(targetPath, projectName, suggestions);
|
|
117
|
+
if (!dbClient.isConnected()) {
|
|
118
|
+
// Local-only mode: show IDs to user
|
|
119
|
+
storedIds = localStored.map(s => s.id);
|
|
120
|
+
logger.success('Saved locally');
|
|
121
|
+
console.log(chalk.gray(`\n 💾 Suggestion IDs: ${storedIds.slice(0, 3).join(', ')}${storedIds.length > 3 ? '...' : ''}`));
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
logger.verbose('Also cached locally for quick access');
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
logger.warn(`Failed to save locally: ${error.message}`);
|
|
129
|
+
}
|
|
98
130
|
// Summary
|
|
99
131
|
console.log(chalk.bold('\n✨ Analysis Complete!\n'));
|
|
100
132
|
console.log(` Total suggestions: ${chalk.green(suggestions.length)}`);
|
|
@@ -123,8 +155,10 @@ export const suggestCommand = new Command('suggest')
|
|
|
123
155
|
process.exit(1);
|
|
124
156
|
}
|
|
125
157
|
finally {
|
|
126
|
-
//
|
|
127
|
-
|
|
158
|
+
// Only disconnect if database was connected
|
|
159
|
+
if (dbClient.isConnected()) {
|
|
160
|
+
await dbClient.disconnect();
|
|
161
|
+
}
|
|
128
162
|
}
|
|
129
163
|
});
|
|
130
164
|
//# sourceMappingURL=suggest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../src/commands/suggest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../src/commands/suggest.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ export declare class ApplyEngine {
|
|
|
21
21
|
*/
|
|
22
22
|
applySuggestion(suggestionId: string, options?: ApplyOptions): Promise<ApplyEngineResult>;
|
|
23
23
|
/**
|
|
24
|
-
* Load suggestion from database
|
|
24
|
+
* Load suggestion from database OR local storage
|
|
25
25
|
*/
|
|
26
26
|
private loadSuggestion;
|
|
27
27
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/core/apply/engine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD,MAAM,WAAW,YAAY;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,qBAAa,WAAW;IACpB,OAAO,CAAC,aAAa,CAAgB;;IAMrC;;OAEG;IACG,eAAe,CACjB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,YAAiB,GAC3B,OAAO,CAAC,iBAAiB,CAAC;IAuI7B;;OAEG;YACW,cAAc;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/core/apply/engine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD,MAAM,WAAW,YAAY;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,qBAAa,WAAW;IACpB,OAAO,CAAC,aAAa,CAAgB;;IAMrC;;OAEG;IACG,eAAe,CACjB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,YAAiB,GAC3B,OAAO,CAAC,iBAAiB,CAAC;IAuI7B;;OAEG;YACW,cAAc;IAoC5B;;OAEG;YACW,WAAW;IA6BzB;;OAEG;IACH,gBAAgB,IAAI,aAAa;CAGpC"}
|
|
@@ -125,23 +125,40 @@ export class ApplyEngine {
|
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
127
|
/**
|
|
128
|
-
* Load suggestion from database
|
|
128
|
+
* Load suggestion from database OR local storage
|
|
129
129
|
*/
|
|
130
130
|
async loadSuggestion(suggestionId) {
|
|
131
|
-
if
|
|
132
|
-
|
|
131
|
+
// Try database first (if connected)
|
|
132
|
+
if (dbClient.isConnected()) {
|
|
133
|
+
try {
|
|
134
|
+
const sql = dbClient.getClient();
|
|
135
|
+
if (sql) {
|
|
136
|
+
const results = await sql `
|
|
137
|
+
SELECT diff FROM suggestions WHERE id = ${suggestionId}
|
|
138
|
+
`;
|
|
139
|
+
if (results.length > 0) {
|
|
140
|
+
logger.verbose('Loaded suggestion from database');
|
|
141
|
+
return results[0];
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
logger.warn(`Failed to load from database: ${error.message}`);
|
|
147
|
+
}
|
|
133
148
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
149
|
+
// Fall back to local storage
|
|
150
|
+
try {
|
|
151
|
+
const { localStorage } = await import('../../storage/local.js');
|
|
152
|
+
const stored = await localStorage.loadSuggestion(suggestionId);
|
|
153
|
+
if (stored && stored.diff) {
|
|
154
|
+
logger.verbose('Loaded suggestion from local storage');
|
|
155
|
+
return { diff: stored.diff };
|
|
156
|
+
}
|
|
137
157
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
`;
|
|
141
|
-
if (results.length === 0) {
|
|
142
|
-
return null;
|
|
158
|
+
catch (error) {
|
|
159
|
+
logger.warn(`Failed to load from local storage: ${error.message}`);
|
|
143
160
|
}
|
|
144
|
-
return
|
|
161
|
+
return null;
|
|
145
162
|
}
|
|
146
163
|
/**
|
|
147
164
|
* Record apply operation in database
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/core/apply/engine.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/core/apply/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/db/client.d.ts
CHANGED
package/dist/db/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAYlD,qBAAa,cAAc;IACvB,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,EAAE,CAA2C;IACrD,OAAO,CAAC,WAAW,CAAkB;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAYlD,qBAAa,cAAc;IACvB,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,EAAE,CAA2C;IACrD,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,eAAe,CAAkB;IAEnC,OAAO,CAAC,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDlD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBjC,KAAK,IAAI,UAAU,CAAC,OAAO,OAAO,CAAC;IAUnC,WAAW,IAAI,OAAO;IAItB,eAAe,IAAI,OAAO;IAI1B,SAAS,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,GAAG,IAAI;YAIjC,aAAa;YAuDb,YAAY;CAsB7B;AAED,eAAO,MAAM,QAAQ,gBAAuB,CAAC"}
|
package/dist/db/client.js
CHANGED
|
@@ -13,6 +13,7 @@ export class DatabaseClient {
|
|
|
13
13
|
sql = null;
|
|
14
14
|
db = null;
|
|
15
15
|
isLocalOnly = false;
|
|
16
|
+
isDisconnecting = false;
|
|
16
17
|
async connect(localOnly = false) {
|
|
17
18
|
if (localOnly) {
|
|
18
19
|
this.isLocalOnly = true;
|
|
@@ -60,15 +61,18 @@ export class DatabaseClient {
|
|
|
60
61
|
}
|
|
61
62
|
async disconnect() {
|
|
62
63
|
try {
|
|
63
|
-
if (this.sql) {
|
|
64
|
+
if (this.sql && !this.isDisconnecting) {
|
|
65
|
+
this.isDisconnecting = true;
|
|
64
66
|
await this.sql.end();
|
|
65
67
|
this.sql = null;
|
|
66
68
|
this.db = null;
|
|
69
|
+
this.isDisconnecting = false;
|
|
67
70
|
logger.verbose('Database connection closed');
|
|
68
71
|
}
|
|
69
72
|
}
|
|
70
73
|
catch (error) {
|
|
71
74
|
// Ignore errors during disconnect
|
|
75
|
+
this.isDisconnecting = false;
|
|
72
76
|
logger.verbose(`Error during disconnect: ${error.message}`);
|
|
73
77
|
}
|
|
74
78
|
}
|
package/dist/db/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,OAAO,cAAc;IACf,GAAG,GAAwB,IAAI,CAAC;IAChC,EAAE,GAAsC,IAAI,CAAC;IAC7C,WAAW,GAAY,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,7 @@ const program = new Command();
|
|
|
14
14
|
program
|
|
15
15
|
.name('ownkey')
|
|
16
16
|
.description('Local-first AI coding agent for intelligent codebase analysis')
|
|
17
|
-
.version('0.
|
|
17
|
+
.version('1.0.0');
|
|
18
18
|
// Global options
|
|
19
19
|
program.option('--local-only', 'Run without database persistence');
|
|
20
20
|
program.option('--verbose', 'Enable verbose logging');
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Suggestion } from '../types/index.js';
|
|
2
|
+
export interface StoredSuggestion extends Suggestion {
|
|
3
|
+
id: string;
|
|
4
|
+
projectPath: string;
|
|
5
|
+
projectName: string;
|
|
6
|
+
createdAt: string;
|
|
7
|
+
}
|
|
8
|
+
export interface BackupInfo {
|
|
9
|
+
id: string;
|
|
10
|
+
filePath: string;
|
|
11
|
+
originalContent: string;
|
|
12
|
+
modifiedContent: string;
|
|
13
|
+
suggestionId: string;
|
|
14
|
+
createdAt: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Local file storage for suggestions and backups
|
|
18
|
+
* Automatically creates ~/.ownkey/storage/ directory
|
|
19
|
+
* Works as primary storage in local-only mode or cache when database is available
|
|
20
|
+
*/
|
|
21
|
+
export declare class LocalStorage {
|
|
22
|
+
private storageDir;
|
|
23
|
+
private suggestionsFile;
|
|
24
|
+
private backupsDir;
|
|
25
|
+
constructor();
|
|
26
|
+
/**
|
|
27
|
+
* Initialize storage directories
|
|
28
|
+
* Creates ~/.ownkey/storage/ if it doesn't exist
|
|
29
|
+
*/
|
|
30
|
+
init(): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Save suggestions to local file
|
|
33
|
+
* Automatically cleans up old suggestions (7 days, max 100 per project)
|
|
34
|
+
*/
|
|
35
|
+
saveSuggestions(projectPath: string, projectName: string, suggestions: Suggestion[]): Promise<StoredSuggestion[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Load a single suggestion by ID
|
|
38
|
+
*/
|
|
39
|
+
loadSuggestion(id: string): Promise<StoredSuggestion | null>;
|
|
40
|
+
/**
|
|
41
|
+
* Load all suggestions for a specific project
|
|
42
|
+
*/
|
|
43
|
+
loadSuggestionsForProject(projectPath: string): Promise<StoredSuggestion[]>;
|
|
44
|
+
/**
|
|
45
|
+
* Load all suggestions from local file
|
|
46
|
+
*/
|
|
47
|
+
private loadAllSuggestions;
|
|
48
|
+
/**
|
|
49
|
+
* Save a backup for undo functionality
|
|
50
|
+
*/
|
|
51
|
+
saveBackup(backup: Omit<BackupInfo, 'id' | 'createdAt'>): Promise<BackupInfo>;
|
|
52
|
+
/**
|
|
53
|
+
* Load a backup by ID
|
|
54
|
+
*/
|
|
55
|
+
loadBackup(id: string): Promise<BackupInfo | null>;
|
|
56
|
+
/**
|
|
57
|
+
* Clear all local suggestions
|
|
58
|
+
*/
|
|
59
|
+
clear(): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Get storage statistics
|
|
62
|
+
*/
|
|
63
|
+
getStats(): Promise<{
|
|
64
|
+
totalSuggestions: number;
|
|
65
|
+
projectCount: number;
|
|
66
|
+
oldestSuggestion: string | null;
|
|
67
|
+
newestSuggestion: string | null;
|
|
68
|
+
}>;
|
|
69
|
+
}
|
|
70
|
+
export declare const localStorage: LocalStorage;
|
|
71
|
+
//# sourceMappingURL=local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/storage/local.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,UAAU,CAAS;;IAS3B;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB3B;;;OAGG;IACG,eAAe,CACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,UAAU,EAAE,GAC1B,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAgD9B;;OAEG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAKlE;;OAEG;IACG,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAKjF;;OAEG;YACW,kBAAkB;IAUhC;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAgBnF;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAaxD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QACtB,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;KACnC,CAAC;CAaL;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { writeFile, readFile, mkdir } from 'fs/promises';
|
|
2
|
+
import { existsSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { homedir } from 'os';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
/**
|
|
7
|
+
* Local file storage for suggestions and backups
|
|
8
|
+
* Automatically creates ~/.ownkey/storage/ directory
|
|
9
|
+
* Works as primary storage in local-only mode or cache when database is available
|
|
10
|
+
*/
|
|
11
|
+
export class LocalStorage {
|
|
12
|
+
storageDir;
|
|
13
|
+
suggestionsFile;
|
|
14
|
+
backupsDir;
|
|
15
|
+
constructor() {
|
|
16
|
+
// Automatically use user's home directory
|
|
17
|
+
this.storageDir = join(homedir(), '.ownkey', 'storage');
|
|
18
|
+
this.suggestionsFile = join(this.storageDir, 'suggestions.json');
|
|
19
|
+
this.backupsDir = join(this.storageDir, 'backups');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Initialize storage directories
|
|
23
|
+
* Creates ~/.ownkey/storage/ if it doesn't exist
|
|
24
|
+
*/
|
|
25
|
+
async init() {
|
|
26
|
+
try {
|
|
27
|
+
// Create storage directory
|
|
28
|
+
if (!existsSync(this.storageDir)) {
|
|
29
|
+
await mkdir(this.storageDir, { recursive: true });
|
|
30
|
+
logger.verbose(`Created storage directory: ${this.storageDir}`);
|
|
31
|
+
}
|
|
32
|
+
// Create backups directory
|
|
33
|
+
if (!existsSync(this.backupsDir)) {
|
|
34
|
+
await mkdir(this.backupsDir, { recursive: true });
|
|
35
|
+
logger.verbose(`Created backups directory: ${this.backupsDir}`);
|
|
36
|
+
}
|
|
37
|
+
// Create suggestions file
|
|
38
|
+
if (!existsSync(this.suggestionsFile)) {
|
|
39
|
+
await writeFile(this.suggestionsFile, JSON.stringify([], null, 2));
|
|
40
|
+
logger.verbose(`Created suggestions file: ${this.suggestionsFile}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
logger.error(`Failed to initialize storage: ${error.message}`);
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Save suggestions to local file
|
|
50
|
+
* Automatically cleans up old suggestions (7 days, max 100 per project)
|
|
51
|
+
*/
|
|
52
|
+
async saveSuggestions(projectPath, projectName, suggestions) {
|
|
53
|
+
await this.init();
|
|
54
|
+
const timestamp = Date.now();
|
|
55
|
+
const stored = suggestions.map((s, index) => ({
|
|
56
|
+
...s,
|
|
57
|
+
id: `local-${timestamp}-${index}`,
|
|
58
|
+
projectPath,
|
|
59
|
+
projectName,
|
|
60
|
+
createdAt: new Date().toISOString(),
|
|
61
|
+
}));
|
|
62
|
+
// Read existing suggestions
|
|
63
|
+
const existing = await this.loadAllSuggestions();
|
|
64
|
+
// Filter: keep only recent suggestions (7 days) and limit per project (100)
|
|
65
|
+
const sevenDaysAgo = Date.now() - 7 * 24 * 60 * 60 * 1000;
|
|
66
|
+
const filtered = existing.filter(s => new Date(s.createdAt).getTime() > sevenDaysAgo);
|
|
67
|
+
// Group by project and limit to 100 per project
|
|
68
|
+
const byProject = new Map();
|
|
69
|
+
for (const s of filtered) {
|
|
70
|
+
const list = byProject.get(s.projectPath) || [];
|
|
71
|
+
list.push(s);
|
|
72
|
+
byProject.set(s.projectPath, list);
|
|
73
|
+
}
|
|
74
|
+
// Keep only last 100 per project
|
|
75
|
+
const limited = [];
|
|
76
|
+
for (const [, list] of byProject.entries()) {
|
|
77
|
+
const sorted = list.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
|
|
78
|
+
limited.push(...sorted.slice(0, 100));
|
|
79
|
+
}
|
|
80
|
+
// Add new suggestions
|
|
81
|
+
const updated = [...limited, ...stored];
|
|
82
|
+
// Save to file
|
|
83
|
+
await writeFile(this.suggestionsFile, JSON.stringify(updated, null, 2));
|
|
84
|
+
logger.verbose(`Saved ${stored.length} suggestions locally`);
|
|
85
|
+
return stored;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Load a single suggestion by ID
|
|
89
|
+
*/
|
|
90
|
+
async loadSuggestion(id) {
|
|
91
|
+
const all = await this.loadAllSuggestions();
|
|
92
|
+
return all.find(s => s.id === id) || null;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Load all suggestions for a specific project
|
|
96
|
+
*/
|
|
97
|
+
async loadSuggestionsForProject(projectPath) {
|
|
98
|
+
const all = await this.loadAllSuggestions();
|
|
99
|
+
return all.filter(s => s.projectPath === projectPath);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Load all suggestions from local file
|
|
103
|
+
*/
|
|
104
|
+
async loadAllSuggestions() {
|
|
105
|
+
try {
|
|
106
|
+
await this.init();
|
|
107
|
+
const content = await readFile(this.suggestionsFile, 'utf-8');
|
|
108
|
+
return JSON.parse(content);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Save a backup for undo functionality
|
|
116
|
+
*/
|
|
117
|
+
async saveBackup(backup) {
|
|
118
|
+
await this.init();
|
|
119
|
+
const backupInfo = {
|
|
120
|
+
...backup,
|
|
121
|
+
id: `backup-${Date.now()}`,
|
|
122
|
+
createdAt: new Date().toISOString(),
|
|
123
|
+
};
|
|
124
|
+
const backupFile = join(this.backupsDir, `${backupInfo.id}.json`);
|
|
125
|
+
await writeFile(backupFile, JSON.stringify(backupInfo, null, 2));
|
|
126
|
+
logger.verbose(`Saved backup: ${backupInfo.id}`);
|
|
127
|
+
return backupInfo;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Load a backup by ID
|
|
131
|
+
*/
|
|
132
|
+
async loadBackup(id) {
|
|
133
|
+
try {
|
|
134
|
+
const backupFile = join(this.backupsDir, `${id}.json`);
|
|
135
|
+
if (!existsSync(backupFile)) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
const content = await readFile(backupFile, 'utf-8');
|
|
139
|
+
return JSON.parse(content);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Clear all local suggestions
|
|
147
|
+
*/
|
|
148
|
+
async clear() {
|
|
149
|
+
await this.init();
|
|
150
|
+
await writeFile(this.suggestionsFile, JSON.stringify([], null, 2));
|
|
151
|
+
logger.info('Cleared all local suggestions');
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get storage statistics
|
|
155
|
+
*/
|
|
156
|
+
async getStats() {
|
|
157
|
+
const all = await this.loadAllSuggestions();
|
|
158
|
+
const projects = new Set(all.map(s => s.projectPath));
|
|
159
|
+
const dates = all.map(s => new Date(s.createdAt).getTime()).sort();
|
|
160
|
+
return {
|
|
161
|
+
totalSuggestions: all.length,
|
|
162
|
+
projectCount: projects.size,
|
|
163
|
+
oldestSuggestion: dates.length > 0 ? new Date(dates[0]).toISOString() : null,
|
|
164
|
+
newestSuggestion: dates.length > 0 ? new Date(dates[dates.length - 1]).toISOString() : null,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Singleton instance
|
|
169
|
+
export const localStorage = new LocalStorage();
|
|
170
|
+
//# sourceMappingURL=local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/storage/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAkB5C;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACb,UAAU,CAAS;IACnB,eAAe,CAAS;IACxB,UAAU,CAAS;IAE3B;QACI,0CAA0C;QAC1C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI;QACN,IAAI,CAAC;YACD,2BAA2B;YAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClD,MAAM,CAAC,OAAO,CAAC,8BAA8B,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YACpE,CAAC;YAED,2BAA2B;YAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClD,MAAM,CAAC,OAAO,CAAC,8BAA8B,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YACpE,CAAC;YAED,0BAA0B;YAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;gBACpC,MAAM,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnE,MAAM,CAAC,OAAO,CAAC,6BAA6B,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;YACxE,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,iCAAkC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1E,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CACjB,WAAmB,EACnB,WAAmB,EACnB,WAAyB;QAEzB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAElB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAuB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9D,GAAG,CAAC;YACJ,EAAE,EAAE,SAAS,SAAS,IAAI,KAAK,EAAE;YACjC,WAAW;YACX,WAAW;YACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC,CAAC,CAAC;QAEJ,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAEjD,4EAA4E;QAC5E,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC1D,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAC5B,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,YAAY,CACtD,CAAC;QAEF,gDAAgD;QAChD,MAAM,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAC;QACxD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;QAED,iCAAiC;QACjC,MAAM,OAAO,GAAuB,EAAE,CAAC;QACvC,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC9B,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CACpE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,sBAAsB;QACtB,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC;QAExC,eAAe;QACf,MAAM,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAExE,MAAM,CAAC,OAAO,CAAC,SAAS,MAAM,CAAC,MAAM,sBAAsB,CAAC,CAAC;QAC7D,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,EAAU;QAC3B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5C,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,yBAAyB,CAAC,WAAmB;QAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5C,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB;QAC5B,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,MAA4C;QACzD,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAElB,MAAM,UAAU,GAAe;YAC3B,GAAG,MAAM;YACT,EAAE,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,EAAE;YAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QAClE,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjE,MAAM,CAAC,OAAO,CAAC,iBAAiB,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,EAAU;QACvB,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACvD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACP,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QAMV,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAEtD,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAEnE,OAAO;YACH,gBAAgB,EAAE,GAAG,CAAC,MAAM;YAC5B,YAAY,EAAE,QAAQ,CAAC,IAAI;YAC3B,gBAAgB,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;YAC5E,gBAAgB,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;SAC9F,CAAC;IACN,CAAC;CACJ;AAED,qBAAqB;AACrB,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC"}
|