@ritwikamit/cl8 0.1.0-alpha.10
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/LICENSE +21 -0
- package/README.md +547 -0
- package/dist/agents/Agent.d.ts +27 -0
- package/dist/agents/Agent.d.ts.map +1 -0
- package/dist/agents/Agent.js +197 -0
- package/dist/agents/Agent.js.map +1 -0
- package/dist/agents/Executor.d.ts +12 -0
- package/dist/agents/Executor.d.ts.map +1 -0
- package/dist/agents/Executor.js +65 -0
- package/dist/agents/Executor.js.map +1 -0
- package/dist/agents/Planner.d.ts +14 -0
- package/dist/agents/Planner.d.ts.map +1 -0
- package/dist/agents/Planner.js +105 -0
- package/dist/agents/Planner.js.map +1 -0
- package/dist/agents/Reflector.d.ts +19 -0
- package/dist/agents/Reflector.d.ts.map +1 -0
- package/dist/agents/Reflector.js +97 -0
- package/dist/agents/Reflector.js.map +1 -0
- package/dist/agents/index.d.ts +5 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/bin/cl8.d.ts +3 -0
- package/dist/bin/cl8.d.ts.map +1 -0
- package/dist/bin/cl8.js +19 -0
- package/dist/bin/cl8.js.map +1 -0
- package/dist/bin/jarvis.d.ts +3 -0
- package/dist/bin/jarvis.d.ts.map +1 -0
- package/dist/bin/jarvis.js +19 -0
- package/dist/bin/jarvis.js.map +1 -0
- package/dist/cli/commands/chat.d.ts +12 -0
- package/dist/cli/commands/chat.d.ts.map +1 -0
- package/dist/cli/commands/chat.js +52 -0
- package/dist/cli/commands/chat.js.map +1 -0
- package/dist/cli/commands/config.d.ts +8 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +69 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +90 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/session.d.ts +6 -0
- package/dist/cli/commands/session.d.ts.map +1 -0
- package/dist/cli/commands/session.js +70 -0
- package/dist/cli/commands/session.js.map +1 -0
- package/dist/cli/hooks/useHistory.d.ts +14 -0
- package/dist/cli/hooks/useHistory.d.ts.map +1 -0
- package/dist/cli/hooks/useHistory.js +67 -0
- package/dist/cli/hooks/useHistory.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +115 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/env.d.ts +7 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +56 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/index.d.ts +10 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +125 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/Boot.d.ts +34 -0
- package/dist/core/Boot.d.ts.map +1 -0
- package/dist/core/Boot.js +97 -0
- package/dist/core/Boot.js.map +1 -0
- package/dist/core/Engine.d.ts +40 -0
- package/dist/core/Engine.d.ts.map +1 -0
- package/dist/core/Engine.js +127 -0
- package/dist/core/Engine.js.map +1 -0
- package/dist/core/Loop.d.ts +22 -0
- package/dist/core/Loop.d.ts.map +1 -0
- package/dist/core/Loop.js +221 -0
- package/dist/core/Loop.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/ConversationMemory.d.ts +24 -0
- package/dist/memory/ConversationMemory.d.ts.map +1 -0
- package/dist/memory/ConversationMemory.js +134 -0
- package/dist/memory/ConversationMemory.js.map +1 -0
- package/dist/memory/SessionManager.d.ts +19 -0
- package/dist/memory/SessionManager.d.ts.map +1 -0
- package/dist/memory/SessionManager.js +104 -0
- package/dist/memory/SessionManager.js.map +1 -0
- package/dist/memory/VectorMemory.d.ts +16 -0
- package/dist/memory/VectorMemory.d.ts.map +1 -0
- package/dist/memory/VectorMemory.js +87 -0
- package/dist/memory/VectorMemory.js.map +1 -0
- package/dist/memory/index.d.ts +4 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +10 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/plugins/PluginLoader.d.ts +9 -0
- package/dist/plugins/PluginLoader.d.ts.map +1 -0
- package/dist/plugins/PluginLoader.js +86 -0
- package/dist/plugins/PluginLoader.js.map +1 -0
- package/dist/plugins/PluginManager.d.ts +18 -0
- package/dist/plugins/PluginManager.d.ts.map +1 -0
- package/dist/plugins/PluginManager.js +63 -0
- package/dist/plugins/PluginManager.js.map +1 -0
- package/dist/plugins/index.d.ts +11 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +16 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/providers/BaseProvider.d.ts +17 -0
- package/dist/providers/BaseProvider.d.ts.map +1 -0
- package/dist/providers/BaseProvider.js +33 -0
- package/dist/providers/BaseProvider.js.map +1 -0
- package/dist/providers/GeminiProvider.d.ts +14 -0
- package/dist/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/providers/GeminiProvider.js +79 -0
- package/dist/providers/GeminiProvider.js.map +1 -0
- package/dist/providers/OllamaProvider.d.ts +14 -0
- package/dist/providers/OllamaProvider.d.ts.map +1 -0
- package/dist/providers/OllamaProvider.js +131 -0
- package/dist/providers/OllamaProvider.js.map +1 -0
- package/dist/providers/OpenAIProvider.d.ts +13 -0
- package/dist/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/providers/OpenAIProvider.js +109 -0
- package/dist/providers/OpenAIProvider.js.map +1 -0
- package/dist/providers/index.d.ts +23 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +57 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/services/AuditService.d.ts +23 -0
- package/dist/services/AuditService.d.ts.map +1 -0
- package/dist/services/AuditService.js +73 -0
- package/dist/services/AuditService.js.map +1 -0
- package/dist/services/SecurityService.d.ts +15 -0
- package/dist/services/SecurityService.d.ts.map +1 -0
- package/dist/services/SecurityService.js +60 -0
- package/dist/services/SecurityService.js.map +1 -0
- package/dist/services/ToolService.d.ts +19 -0
- package/dist/services/ToolService.d.ts.map +1 -0
- package/dist/services/ToolService.js +85 -0
- package/dist/services/ToolService.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +10 -0
- package/dist/services/index.js.map +1 -0
- package/dist/tools/BaseTool.d.ts +12 -0
- package/dist/tools/BaseTool.d.ts.map +1 -0
- package/dist/tools/BaseTool.js +25 -0
- package/dist/tools/BaseTool.js.map +1 -0
- package/dist/tools/FileTool.d.ts +14 -0
- package/dist/tools/FileTool.d.ts.map +1 -0
- package/dist/tools/FileTool.js +136 -0
- package/dist/tools/FileTool.js.map +1 -0
- package/dist/tools/SearchTool.d.ts +10 -0
- package/dist/tools/SearchTool.d.ts.map +1 -0
- package/dist/tools/SearchTool.js +117 -0
- package/dist/tools/SearchTool.js.map +1 -0
- package/dist/tools/ShellTool.d.ts +8 -0
- package/dist/tools/ShellTool.d.ts.map +1 -0
- package/dist/tools/ShellTool.js +87 -0
- package/dist/tools/ShellTool.js.map +1 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +29 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types/agent.d.ts +49 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +3 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/config.d.ts +52 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +3 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/memory.d.ts +47 -0
- package/dist/types/memory.d.ts.map +1 -0
- package/dist/types/memory.js +3 -0
- package/dist/types/memory.js.map +1 -0
- package/dist/types/plugin.d.ts +31 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +3 -0
- package/dist/types/plugin.js.map +1 -0
- package/dist/types/provider.d.ts +43 -0
- package/dist/types/provider.d.ts.map +1 -0
- package/dist/types/provider.js +3 -0
- package/dist/types/provider.js.map +1 -0
- package/dist/types/tool.d.ts +41 -0
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js +3 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/ui/MarkdownRenderer.d.ts +17 -0
- package/dist/ui/MarkdownRenderer.d.ts.map +1 -0
- package/dist/ui/MarkdownRenderer.js +148 -0
- package/dist/ui/MarkdownRenderer.js.map +1 -0
- package/dist/ui/Spinner.d.ts +14 -0
- package/dist/ui/Spinner.d.ts.map +1 -0
- package/dist/ui/Spinner.js +79 -0
- package/dist/ui/Spinner.js.map +1 -0
- package/dist/ui/StreamingOutput.d.ts +15 -0
- package/dist/ui/StreamingOutput.d.ts.map +1 -0
- package/dist/ui/StreamingOutput.js +48 -0
- package/dist/ui/StreamingOutput.js.map +1 -0
- package/dist/ui/context-monitor.d.ts +11 -0
- package/dist/ui/context-monitor.d.ts.map +1 -0
- package/dist/ui/context-monitor.js +39 -0
- package/dist/ui/context-monitor.js.map +1 -0
- package/dist/ui/index.d.ts +14 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +30 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/onboarding.d.ts +9 -0
- package/dist/ui/onboarding.d.ts.map +1 -0
- package/dist/ui/onboarding.js +40 -0
- package/dist/ui/onboarding.js.map +1 -0
- package/dist/ui/pixel-logo.d.ts +2 -0
- package/dist/ui/pixel-logo.d.ts.map +1 -0
- package/dist/ui/pixel-logo.js +32 -0
- package/dist/ui/pixel-logo.js.map +1 -0
- package/dist/ui/spinner-manager.d.ts +18 -0
- package/dist/ui/spinner-manager.d.ts.map +1 -0
- package/dist/ui/spinner-manager.js +109 -0
- package/dist/ui/spinner-manager.js.map +1 -0
- package/dist/ui/splash-screen/gradient-logo.d.ts +2 -0
- package/dist/ui/splash-screen/gradient-logo.d.ts.map +1 -0
- package/dist/ui/splash-screen/gradient-logo.js +20 -0
- package/dist/ui/splash-screen/gradient-logo.js.map +1 -0
- package/dist/ui/splash.d.ts +18 -0
- package/dist/ui/splash.d.ts.map +1 -0
- package/dist/ui/splash.js +68 -0
- package/dist/ui/splash.js.map +1 -0
- package/dist/ui/startup-tips.json +22 -0
- package/dist/ui/status-bar.d.ts +17 -0
- package/dist/ui/status-bar.d.ts.map +1 -0
- package/dist/ui/status-bar.js +54 -0
- package/dist/ui/status-bar.js.map +1 -0
- package/dist/ui/theme-manager.d.ts +22 -0
- package/dist/ui/theme-manager.d.ts.map +1 -0
- package/dist/ui/theme-manager.js +91 -0
- package/dist/ui/theme-manager.js.map +1 -0
- package/dist/ui/types.d.ts +19 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/types.js +3 -0
- package/dist/ui/types.js.map +1 -0
- package/dist/ui/typing-animation.d.ts +9 -0
- package/dist/ui/typing-animation.d.ts.map +1 -0
- package/dist/ui/typing-animation.js +36 -0
- package/dist/ui/typing-animation.js.map +1 -0
- package/dist/ui/workspace-panel.d.ts +5 -0
- package/dist/ui/workspace-panel.d.ts.map +1 -0
- package/dist/ui/workspace-panel.js +30 -0
- package/dist/ui/workspace-panel.js.map +1 -0
- package/dist/utils/crypto.d.ts +6 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +54 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +57 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +88 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 JarvisCLI Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,547 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# โก CL8
|
|
4
|
+
|
|
5
|
+
### Terminal-First AI Coding & Automation Assistant
|
|
6
|
+
|
|
7
|
+
*Inspired by Claude Code ยท Gemini CLI ยท OpenAI Codex CLI ยท OpenHands ยท Aider ยท Cursor*
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
[](https://github.com/ritwikamit/cl8/actions/workflows/ci.yml)
|
|
12
|
+
[](https://www.npmjs.com/package/@ritwikamit/cl8)
|
|
13
|
+
[](https://www.npmjs.com/package/@ritwikamit/cl8)
|
|
14
|
+
[](LICENSE)
|
|
15
|
+
[](https://www.typescriptlang.org/)
|
|
16
|
+
[](https://nodejs.org/)
|
|
17
|
+
[](CONTRIBUTING.md)
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
**[Features](#features) ยท [Architecture](#architecture) ยท [Quick Start](#quick-start) ยท [Commands](#commands) ยท [Configuration](#configuration) ยท [Plugins](#plugin-system) ยท [Contributing](CONTRIBUTING.md)**
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
## ๐ Overview
|
|
28
|
+
|
|
29
|
+
**CL8** is a production-grade, terminal-native AI agent that lives in your command line. It understands natural language, writes and edits code, executes commands, searches your codebase, and automates complex multi-step workflows โ all from the comfort of your terminal.
|
|
30
|
+
|
|
31
|
+
Unlike browser-based AI tools, CL8 operates **directly in your development environment**. It reads your files, understands your project structure, runs shell commands, and makes changes โ with appropriate safety controls every step of the way.
|
|
32
|
+
|
|
33
|
+
### Why CL8?
|
|
34
|
+
|
|
35
|
+
- **Terminal-native** โ No browser, no IDE plugin. Your terminal is your workspace.
|
|
36
|
+
- **Multi-provider** โ Switch between OpenAI, Google Gemini, or local Ollama models.
|
|
37
|
+
- **Agentic workflow** โ Plan, execute, reflect, and iterate autonomously.
|
|
38
|
+
- **Plugin architecture** โ Extend with custom tools and MCP-compatible servers.
|
|
39
|
+
- **Security-first** โ Sandboxed execution, command approval, and audit logging.
|
|
40
|
+
- **Persistent sessions** โ Conversations survive process restarts with SQLite-backed memory.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## โจ Features
|
|
45
|
+
|
|
46
|
+
### ๐ค AI-Powered Chat
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
50
|
+
โ cl8> explain the authentication flow โ
|
|
51
|
+
โ โ
|
|
52
|
+
โ ๐ Analyzing your auth system... โ
|
|
53
|
+
โ โ
|
|
54
|
+
โ The authentication flow uses JWT tokens โ
|
|
55
|
+
โ with refresh rotation... โ
|
|
56
|
+
โ โ
|
|
57
|
+
โ Files analyzed: โ
|
|
58
|
+
โ โข src/auth/middleware.ts โ
|
|
59
|
+
โ โข src/auth/service.ts โ
|
|
60
|
+
โ โข src/auth/types.ts โ
|
|
61
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
- Natural language interaction
|
|
65
|
+
- Streaming responses with markdown rendering
|
|
66
|
+
- Syntax-highlighted code blocks
|
|
67
|
+
- Multi-line input support
|
|
68
|
+
- Command history and slash commands
|
|
69
|
+
|
|
70
|
+
### ๐ป Code Generation & Editing
|
|
71
|
+
|
|
72
|
+
- Generate code from natural language descriptions
|
|
73
|
+
- Read, write, and edit files with surgical precision
|
|
74
|
+
- Multi-file refactoring and corrections
|
|
75
|
+
- Code explanation and documentation generation
|
|
76
|
+
- Pattern-based search and replace
|
|
77
|
+
|
|
78
|
+
### ๐ ๏ธ Terminal Execution
|
|
79
|
+
|
|
80
|
+
- Execute shell commands directly from chat
|
|
81
|
+
- Command approval prompts for dangerous operations
|
|
82
|
+
- Live streaming of command output
|
|
83
|
+
- Secure command sandboxing
|
|
84
|
+
- Blocked command detection
|
|
85
|
+
|
|
86
|
+
### ๐ Codebase Search
|
|
87
|
+
|
|
88
|
+
- Regex pattern searching across files
|
|
89
|
+
- File glob pattern matching
|
|
90
|
+
- Respects `.gitignore` patterns
|
|
91
|
+
- Directory-aware search scope
|
|
92
|
+
|
|
93
|
+
### ๐ง Agent Loop
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
User Prompt
|
|
97
|
+
โ
|
|
98
|
+
โผ
|
|
99
|
+
โโโโโโโโโโโโโโโ
|
|
100
|
+
โ Planner โ โโ Break down task into steps
|
|
101
|
+
โโโโโโโโฌโโโโโโโ
|
|
102
|
+
โ
|
|
103
|
+
โผ
|
|
104
|
+
โโโโโโโโโโโโโโโ
|
|
105
|
+
โ Executor โ โโ Execute each step with tools
|
|
106
|
+
โโโโโโโโฌโโโโโโโ
|
|
107
|
+
โ
|
|
108
|
+
โผ
|
|
109
|
+
โโโโโโโโโโโโโโโ
|
|
110
|
+
โ Reflector โ โโ Evaluate results, replan if needed
|
|
111
|
+
โโโโโโโโฌโโโโโโโ
|
|
112
|
+
โ
|
|
113
|
+
โผ
|
|
114
|
+
Final Response
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### ๐ฆ Plugin System
|
|
118
|
+
|
|
119
|
+
- Dynamic plugin loading from directories
|
|
120
|
+
- Plugin manifests for metadata
|
|
121
|
+
- Tool registration API
|
|
122
|
+
- Hooks for lifecycle events
|
|
123
|
+
- MCP compatibility layer (future)
|
|
124
|
+
|
|
125
|
+
### ๐พ Memory & Persistence
|
|
126
|
+
|
|
127
|
+
- Conversation history with automatic compaction
|
|
128
|
+
- Session management with resume capability
|
|
129
|
+
- Token usage tracking
|
|
130
|
+
- Workspace-scoped memory
|
|
131
|
+
- Vector memory for semantic search (abstraction)
|
|
132
|
+
|
|
133
|
+
### ๐ Security
|
|
134
|
+
|
|
135
|
+
- Workspace sandboxing โ files outside workspace are protected
|
|
136
|
+
- Command approval prompts for dangerous operations
|
|
137
|
+
- Blocked command detection and prevention
|
|
138
|
+
- API key encryption at rest
|
|
139
|
+
- Full audit logging of all tool calls
|
|
140
|
+
- Configurable approval modes: `ask`, `auto`, `deny`
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## ๐๏ธ Architecture
|
|
145
|
+
|
|
146
|
+
CL8 follows a **layered, service-oriented architecture** designed for modularity and extensibility.
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
150
|
+
โ CLI Layer โ
|
|
151
|
+
โ Commander.js ยท Chalk ยท Ora ยท Inquirer โ
|
|
152
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
|
|
153
|
+
โ Agent Layer โ
|
|
154
|
+
โ Planner โ Executor โ Reflector โ Agent โ
|
|
155
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
|
|
156
|
+
โ Tool Layer โ
|
|
157
|
+
โ FileTool ยท ShellTool ยท SearchTool ยท Plugin โ
|
|
158
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
|
|
159
|
+
โ Service Layer โ
|
|
160
|
+
โ ToolService ยท SecurityService ยท AuditService โ
|
|
161
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
|
|
162
|
+
โ Provider Layer โ
|
|
163
|
+
โ OpenAI ยท Gemini ยท Ollama (abstracted) โ
|
|
164
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
|
|
165
|
+
โ Memory Layer โ
|
|
166
|
+
โ Conversation ยท Session ยท Vector โ
|
|
167
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
|
|
168
|
+
โ Plugin Layer โ
|
|
169
|
+
โ PluginManager ยท PluginLoader ยท MCP (future) โ
|
|
170
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Core Loop
|
|
174
|
+
|
|
175
|
+
The agentic loop is the heart of CL8:
|
|
176
|
+
|
|
177
|
+
1. **Plan** โ The Planner receives user input and available tools, then decomposes the task into sequential steps using the LLM.
|
|
178
|
+
|
|
179
|
+
2. **Execute** โ The Executor runs each step through the appropriate tool (file, shell, search), collecting results.
|
|
180
|
+
|
|
181
|
+
3. **Reflect** โ The Reflector evaluates execution results, detects failures, and decides whether to replan or generate a final response.
|
|
182
|
+
|
|
183
|
+
4. **Respond** โ The agent synthesizes a final response summarizing what was done and the results.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## ๐ Folder Structure
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
cl8/
|
|
191
|
+
โ
|
|
192
|
+
โโโ src/
|
|
193
|
+
โ โโโ agents/ # Agent orchestration
|
|
194
|
+
โ โ โโโ Agent.ts # Main agent (loop coordinator)
|
|
195
|
+
โ โ โโโ Planner.ts # Task decomposition
|
|
196
|
+
โ โ โโโ Executor.ts # Step execution
|
|
197
|
+
โ โ โโโ Reflector.ts # Result evaluation
|
|
198
|
+
โ โ
|
|
199
|
+
โ โโโ cli/ # CLI framework
|
|
200
|
+
โ โ โโโ index.ts # Commander.js setup
|
|
201
|
+
โ โ โโโ commands/ # Command implementations
|
|
202
|
+
โ โ โโโ chat.ts # Interactive session
|
|
203
|
+
โ โ โโโ init.ts # First-time setup
|
|
204
|
+
โ โ โโโ session.ts # Session management
|
|
205
|
+
โ โ โโโ config.ts # Configuration management
|
|
206
|
+
โ โ
|
|
207
|
+
โ โโโ config/ # Configuration
|
|
208
|
+
โ โ โโโ index.ts # Config loader (JSON store + .env)
|
|
209
|
+
โ โ โโโ env.ts # Environment variable helpers
|
|
210
|
+
โ โ
|
|
211
|
+
โ โโโ core/ # Core engine
|
|
212
|
+
โ โ โโโ Engine.ts # Service orchestration
|
|
213
|
+
โ โ โโโ Loop.ts # Interactive REPL loop
|
|
214
|
+
โ โ
|
|
215
|
+
โ โโโ memory/ # Persistence
|
|
216
|
+
โ โ โโโ ConversationMemory.ts # Message history
|
|
217
|
+
โ โ โโโ SessionManager.ts # Session lifecycle
|
|
218
|
+
โ โ โโโ VectorMemory.ts # Semantic search (abstraction)
|
|
219
|
+
โ โ
|
|
220
|
+
โ โโโ plugins/ # Plugin system
|
|
221
|
+
โ โ โโโ PluginManager.ts # Plugin lifecycle
|
|
222
|
+
โ โ โโโ PluginLoader.ts # Dynamic loading
|
|
223
|
+
โ โ
|
|
224
|
+
โ โโโ providers/ # AI provider abstraction
|
|
225
|
+
โ โ โโโ BaseProvider.ts # Abstract interface
|
|
226
|
+
โ โ โโโ OpenAIProvider.ts # OpenAI / GPT
|
|
227
|
+
โ โ โโโ GeminiProvider.ts # Google Gemini
|
|
228
|
+
โ โ โโโ OllamaProvider.ts # Local models
|
|
229
|
+
โ โ
|
|
230
|
+
โ โโโ services/ # Business logic
|
|
231
|
+
โ โ โโโ ToolService.ts # Tool dispatch
|
|
232
|
+
โ โ โโโ SecurityService.ts # Security & approval
|
|
233
|
+
โ โ โโโ AuditService.ts # Logging & audit
|
|
234
|
+
โ โ
|
|
235
|
+
โ โโโ tools/ # Tool implementations
|
|
236
|
+
โ โ โโโ BaseTool.ts # Abstract tool
|
|
237
|
+
โ โ โโโ FileTool.ts # File read/write/edit
|
|
238
|
+
โ โ โโโ ShellTool.ts # Command execution
|
|
239
|
+
โ โ โโโ SearchTool.ts # Code search
|
|
240
|
+
โ โ
|
|
241
|
+
โ โโโ types/ # TypeScript type definitions
|
|
242
|
+
โ โ โโโ agent.ts # Agent types
|
|
243
|
+
โ โ โโโ config.ts # Configuration types
|
|
244
|
+
โ โ โโโ memory.ts # Memory types
|
|
245
|
+
โ โ โโโ plugin.ts # Plugin types
|
|
246
|
+
โ โ โโโ provider.ts # Provider types
|
|
247
|
+
โ โ โโโ tool.ts # Tool types
|
|
248
|
+
โ โ
|
|
249
|
+
โ โโโ ui/ # Terminal UI
|
|
250
|
+
โ โ โโโ MarkdownRenderer.ts # Markdown โ terminal
|
|
251
|
+
โ โ โโโ Spinner.ts # Loading spinners
|
|
252
|
+
โ โ โโโ StreamingOutput.ts # Stream management
|
|
253
|
+
โ โ
|
|
254
|
+
โ โโโ utils/ # Utilities
|
|
255
|
+
โ โ โโโ crypto.ts # Encryption, IDs, hashing
|
|
256
|
+
โ โ โโโ logger.ts # Winston logger
|
|
257
|
+
โ โ
|
|
258
|
+
โ โโโ bin/ # Entry point
|
|
259
|
+
โ โโโ cl8.ts # CLI binary
|
|
260
|
+
โ
|
|
261
|
+
โโโ plugins/ # User-installed plugins
|
|
262
|
+
โโโ examples/ # Plugin examples
|
|
263
|
+
โโโ scripts/ # Build/utility scripts
|
|
264
|
+
โโโ tests/ # Test suite
|
|
265
|
+
โโโ docs/ # Documentation
|
|
266
|
+
โโโ logs/ # Application logs
|
|
267
|
+
โ
|
|
268
|
+
โโโ .env.example # Environment template
|
|
269
|
+
โโโ .github/workflows/ # CI/CD pipelines
|
|
270
|
+
โโโ CONTRIBUTING.md # Contribution guide
|
|
271
|
+
โโโ LICENSE # MIT license
|
|
272
|
+
โโโ README.md # You are here
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## ๐ Quick Start
|
|
278
|
+
|
|
279
|
+
### Prerequisites
|
|
280
|
+
|
|
281
|
+
- **Node.js** v18.0.0 or higher
|
|
282
|
+
- **npm** v9.0.0 or higher
|
|
283
|
+
- An API key for your preferred AI provider (optional for Ollama)
|
|
284
|
+
|
|
285
|
+
### โก One-Liner Install
|
|
286
|
+
|
|
287
|
+
**Windows (PowerShell)**:
|
|
288
|
+
```powershell
|
|
289
|
+
# Option A: Run instantly with npx (no install needed)
|
|
290
|
+
npx @ritwikamit/cl8
|
|
291
|
+
|
|
292
|
+
# Option B: Install globally
|
|
293
|
+
npm install -g @ritwikamit/cl8
|
|
294
|
+
cl8
|
|
295
|
+
|
|
296
|
+
# Option C: Automated installer
|
|
297
|
+
irm https://raw.githubusercontent.com/ritwikamit/cl8/main/scripts/install.ps1 | iex
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
**macOS / Linux**:
|
|
301
|
+
```bash
|
|
302
|
+
# Option A: Run instantly with npx (no install needed)
|
|
303
|
+
npx @ritwikamit/cl8
|
|
304
|
+
|
|
305
|
+
# Option B: Install globally
|
|
306
|
+
npm install -g @ritwikamit/cl8
|
|
307
|
+
cl8
|
|
308
|
+
|
|
309
|
+
# Option C: Automated installer
|
|
310
|
+
curl -fsSL https://raw.githubusercontent.com/ritwikamit/cl8/main/scripts/install.sh | bash
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
### 2. Configure Your AI Provider
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
# Run the setup wizard
|
|
317
|
+
cl8 init
|
|
318
|
+
|
|
319
|
+
# Or configure manually by creating .env:
|
|
320
|
+
cp .env.example .env
|
|
321
|
+
# Then edit .env with your API keys
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### 3. Start Using CL8
|
|
325
|
+
|
|
326
|
+
```text
|
|
327
|
+
cl8
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### 4. Example Commands
|
|
331
|
+
|
|
332
|
+
Once CL8 is running, try these:
|
|
333
|
+
|
|
334
|
+
```text
|
|
335
|
+
cl8> Explain what this project does
|
|
336
|
+
|
|
337
|
+
cl8> Find all TODO comments in the codebase
|
|
338
|
+
|
|
339
|
+
cl8> Create a new React component for a login form
|
|
340
|
+
|
|
341
|
+
cl8> Debug the test failure in src/tests/auth.test.ts
|
|
342
|
+
|
|
343
|
+
cl8> Refactor the database service to use connection pooling
|
|
344
|
+
|
|
345
|
+
cl8> /help # Show all available commands
|
|
346
|
+
cl8> /clear # Clear the conversation
|
|
347
|
+
cl8> /status # Show session information
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
## ๐ Commands
|
|
353
|
+
|
|
354
|
+
### CLI Commands
|
|
355
|
+
|
|
356
|
+
| Command | Description |
|
|
357
|
+
|---------|-------------|
|
|
358
|
+
| `cl8` or `cl8 chat` | Start interactive chat session |
|
|
359
|
+
| `cl8 init` | Initialize configuration wizard |
|
|
360
|
+
| `cl8 session --list` | List recent sessions |
|
|
361
|
+
| `cl8 session --show <id>` | Show session details |
|
|
362
|
+
| `cl8 session --resume <id>` | Resume a session |
|
|
363
|
+
| `cl8 config --show` | Show current configuration |
|
|
364
|
+
| `cl8 config --set <key> --value <val>` | Set configuration value |
|
|
365
|
+
| `cl8 config --reset` | Reset to defaults |
|
|
366
|
+
| `cl8 doctor` | Check system health |
|
|
367
|
+
| `cl8 --version` | Show version |
|
|
368
|
+
| `cl8 --help` | Show help |
|
|
369
|
+
|
|
370
|
+
### Slash Commands (in chat)
|
|
371
|
+
|
|
372
|
+
| Command | Description |
|
|
373
|
+
|---------|-------------|
|
|
374
|
+
| `/help` | Show available slash commands |
|
|
375
|
+
| `/clear` | Clear the conversation |
|
|
376
|
+
| `/reset` | Reset the agent state |
|
|
377
|
+
| `/status` | Show current session info |
|
|
378
|
+
| `/session` | Show session details |
|
|
379
|
+
| `/tokens` | Show token usage |
|
|
380
|
+
| `/mode <ask\|auto\|deny>` | Set approval mode |
|
|
381
|
+
| `/exit` | Exit CL8 |
|
|
382
|
+
|
|
383
|
+
### CLI Options
|
|
384
|
+
|
|
385
|
+
```text
|
|
386
|
+
cl8 chat [options]
|
|
387
|
+
|
|
388
|
+
Options:
|
|
389
|
+
-p, --provider <provider> AI provider (openai, gemini, ollama)
|
|
390
|
+
-m, --model <model> Model name (e.g. gpt-4o, gemini-2.0-flash)
|
|
391
|
+
-w, --workspace <path> Workspace directory
|
|
392
|
+
-s, --session <id> Resume a previous session
|
|
393
|
+
-h, --help Display help
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## โ๏ธ Configuration
|
|
399
|
+
|
|
400
|
+
### Environment Variables (.env)
|
|
401
|
+
|
|
402
|
+
| Variable | Description | Default |
|
|
403
|
+
|----------|-------------|---------|
|
|
404
|
+
| `OPENAI_API_KEY` | OpenAI API key | โ |
|
|
405
|
+
| `OPENAI_MODEL` | OpenAI model name | `gpt-4o` |
|
|
406
|
+
| `GEMINI_API_KEY` | Google Gemini API key | โ |
|
|
407
|
+
| `GEMINI_MODEL` | Gemini model name | `gemini-2.0-flash` |
|
|
408
|
+
| `OLLAMA_BASE_URL` | Ollama server URL | `http://localhost:11434` |
|
|
409
|
+
| `OLLAMA_MODEL` | Ollama model name | `codellama` |
|
|
410
|
+
| `CL8_DEFAULT_PROVIDER` | Default AI provider | `openai` |
|
|
411
|
+
| `CL8_WORKSPACE` | Workspace directory | `./workspace` |
|
|
412
|
+
| `CL8_APPROVAL_MODE` | Command approval (`ask`, `auto`, `deny`) | `ask` |
|
|
413
|
+
| `CL8_LOG_LEVEL` | Logging level | `info` |
|
|
414
|
+
| `CL8_PLUGIN_DIRS` | Plugin directories | `./plugins` |
|
|
415
|
+
|
|
416
|
+
### Approval Modes
|
|
417
|
+
|
|
418
|
+
| Mode | Behavior |
|
|
419
|
+
|------|----------|
|
|
420
|
+
| `ask` | Prompt for approval on dangerous commands (default, safest) |
|
|
421
|
+
| `auto` | Auto-approve commands with guardrails |
|
|
422
|
+
| `deny` | Block all command execution (read-only mode) |
|
|
423
|
+
|
|
424
|
+
---
|
|
425
|
+
|
|
426
|
+
## ๐ Plugin System
|
|
427
|
+
|
|
428
|
+
CL8 features a dynamic plugin system that allows you to extend its capabilities.
|
|
429
|
+
|
|
430
|
+
### Plugin Structure
|
|
431
|
+
|
|
432
|
+
```
|
|
433
|
+
plugins/
|
|
434
|
+
my-plugin/
|
|
435
|
+
manifest.json # Plugin metadata
|
|
436
|
+
index.js # Compiled entry point
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
### Manifest Format
|
|
440
|
+
|
|
441
|
+
```json
|
|
442
|
+
{
|
|
443
|
+
"name": "my-plugin",
|
|
444
|
+
"version": "1.0.0",
|
|
445
|
+
"description": "Description of your plugin",
|
|
446
|
+
"author": "Your Name",
|
|
447
|
+
"license": "MIT",
|
|
448
|
+
"entry": "index.js"
|
|
449
|
+
}
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
### Plugin API
|
|
453
|
+
|
|
454
|
+
Plugins receive a `PluginAPI` object with:
|
|
455
|
+
|
|
456
|
+
- `registerTool(tool)` โ Register a custom tool
|
|
457
|
+
- `getTools()` โ List registered tools
|
|
458
|
+
- `log(level, message)` โ Log through CL8's logger
|
|
459
|
+
- `config` โ Plugin configuration from manifest
|
|
460
|
+
|
|
461
|
+
---
|
|
462
|
+
|
|
463
|
+
## ๐งช Development
|
|
464
|
+
|
|
465
|
+
```bash
|
|
466
|
+
# Type check
|
|
467
|
+
npm run typecheck
|
|
468
|
+
|
|
469
|
+
# Lint
|
|
470
|
+
npm run lint
|
|
471
|
+
|
|
472
|
+
# Run tests
|
|
473
|
+
npm test
|
|
474
|
+
|
|
475
|
+
# Watch mode
|
|
476
|
+
npm run build:watch
|
|
477
|
+
|
|
478
|
+
# Development with hot reload
|
|
479
|
+
npm run dev
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
---
|
|
483
|
+
|
|
484
|
+
## ๐ฃ๏ธ Roadmap
|
|
485
|
+
|
|
486
|
+
- [x] Interactive chat with streaming responses
|
|
487
|
+
- [x] Multi-provider AI support (OpenAI, Gemini, Ollama)
|
|
488
|
+
- [x] File system tools (read, write, edit, search)
|
|
489
|
+
- [x] Shell command execution with security controls
|
|
490
|
+
- [x] Agent loop (Plan โ Execute โ Reflect)
|
|
491
|
+
- [x] Session persistence and management
|
|
492
|
+
- [x] Plugin architecture
|
|
493
|
+
- [x] Audit logging and security
|
|
494
|
+
- [ ] MCP (Model Context Protocol) support
|
|
495
|
+
- [ ] GitHub integration (PR review, issue management)
|
|
496
|
+
- [ ] Web search and browsing capabilities
|
|
497
|
+
- [ ] Docker sandbox for command execution
|
|
498
|
+
- [ ] Vector database for semantic memory
|
|
499
|
+
- [ ] Multi-agent orchestration
|
|
500
|
+
- [ ] VS Code extension integration
|
|
501
|
+
- [ ] Linux and macOS native packages
|
|
502
|
+
- [ ] Configuration UI (TUI)
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
|
|
506
|
+
## ๐ค Contributing
|
|
507
|
+
|
|
508
|
+
Please read our [Contributing Guide](CONTRIBUTING.md) for details on:
|
|
509
|
+
|
|
510
|
+
- Setting up a development environment
|
|
511
|
+
- Code style and conventions
|
|
512
|
+
- Testing requirements
|
|
513
|
+
- Pull request process
|
|
514
|
+
|
|
515
|
+
All contributions are welcome! ๐
|
|
516
|
+
|
|
517
|
+
---
|
|
518
|
+
|
|
519
|
+
## ๐ License
|
|
520
|
+
|
|
521
|
+
This project is licensed under the MIT License โ see the [LICENSE](LICENSE) file for details.
|
|
522
|
+
|
|
523
|
+
---
|
|
524
|
+
|
|
525
|
+
## ๐ Acknowledgments
|
|
526
|
+
|
|
527
|
+
CL8 stands on the shoulders of giants. It draws inspiration from:
|
|
528
|
+
|
|
529
|
+
- **[Claude Code](https://docs.anthropic.com/en/docs/claude-code)** by Anthropic โ Agentic coding in the terminal
|
|
530
|
+
- **[Gemini CLI](https://github.com/google-gemini/gemini-cli)** by Google โ Open-source AI agent
|
|
531
|
+
- **[OpenAI Codex CLI](https://github.com/openai/codex)** by OpenAI โ Coding agent runtime
|
|
532
|
+
- **[OpenHands](https://github.com/All-Hands-AI/OpenHands)** โ Open platform for AI software developers
|
|
533
|
+
- **[Aider](https://github.com/Aider-AI/aider)** by Paul Gauthier โ AI pair programming
|
|
534
|
+
- **[Cursor](https://cursor.sh)** โ AI-first code editor
|
|
535
|
+
- **[Cline](https://github.com/cline/cline)** โ Autonomous coding agent
|
|
536
|
+
|
|
537
|
+
Built with โค๏ธ for the open-source community.
|
|
538
|
+
|
|
539
|
+
---
|
|
540
|
+
|
|
541
|
+
<div align="center">
|
|
542
|
+
|
|
543
|
+
**โญ Star us on GitHub โ it helps!**
|
|
544
|
+
|
|
545
|
+
[Report Bug](https://github.com/ritwikamit/cl8/issues) ยท [Request Feature](https://github.com/ritwikamit/cl8/issues)
|
|
546
|
+
|
|
547
|
+
</div>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ToolService } from '../services/ToolService.js';
|
|
2
|
+
import { BaseProvider } from '../providers/BaseProvider.js';
|
|
3
|
+
import { AgentMessage, AgentState, AgentConfig } from '../types/agent.js';
|
|
4
|
+
import { ToolDefinition } from '../types/tool.js';
|
|
5
|
+
export declare class Agent {
|
|
6
|
+
private planner;
|
|
7
|
+
private executor;
|
|
8
|
+
private reflector;
|
|
9
|
+
private provider;
|
|
10
|
+
private toolService;
|
|
11
|
+
private config;
|
|
12
|
+
private state;
|
|
13
|
+
private logger;
|
|
14
|
+
constructor(provider: BaseProvider, toolService: ToolService, tools: ToolDefinition[], config?: Partial<AgentConfig>);
|
|
15
|
+
private createInitialState;
|
|
16
|
+
processUserInput(input: string, sessionId: string, workspace: string, history?: AgentMessage[]): Promise<AsyncIterable<string>>;
|
|
17
|
+
private processUserInputStream;
|
|
18
|
+
private runAgentLoop;
|
|
19
|
+
private isSimpleQuery;
|
|
20
|
+
private parsePlanSteps;
|
|
21
|
+
private inferTool;
|
|
22
|
+
private canAutoExecute;
|
|
23
|
+
getState(): AgentState;
|
|
24
|
+
reset(): void;
|
|
25
|
+
getConfig(): AgentConfig;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=Agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Agent.d.ts","sourceRoot":"","sources":["../../src/agents/Agent.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EACL,YAAY,EACZ,UAAU,EACV,WAAW,EAIZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAe,MAAM,kBAAkB,CAAC;AAkB/D,qBAAa,KAAK;IAChB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,MAAM,CAAe;gBAG3B,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,cAAc,EAAE,EACvB,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC;IAW/B,OAAO,CAAC,kBAAkB;IASpB,gBAAgB,CACpB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,YAAY,EAAO,GAC3B,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAIlB,sBAAsB;YAqBtB,YAAY;IAmG3B,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,cAAc;IAatB,QAAQ,IAAI,UAAU;IAItB,KAAK,IAAI,IAAI;IAIb,SAAS,IAAI,WAAW;CAGzB"}
|