opspilot-ai 0.1.0__py3-none-any.whl

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.
@@ -0,0 +1,408 @@
1
+ Metadata-Version: 2.4
2
+ Name: opspilot-ai
3
+ Version: 0.1.0
4
+ Summary: AI-powered production incident analysis tool using multi-agent systems
5
+ Home-page: https://github.com/choudharikiranv15/opspilot
6
+ Author: Kiran Vijaykumar Choudhari
7
+ Author-email: Kiran Vijaykumar Choudhari <choudharikiranv2003@gmail.com>
8
+ License: MIT
9
+ Project-URL: Homepage, https://github.com/choudharikiranv15/opspilot
10
+ Project-URL: Documentation, https://github.com/choudharikiranv15/opspilot#readme
11
+ Project-URL: Repository, https://github.com/choudharikiranv15/opspilot
12
+ Project-URL: Bug Tracker, https://github.com/choudharikiranv15/opspilot/issues
13
+ Project-URL: Changelog, https://github.com/choudharikiranv15/opspilot/releases
14
+ Keywords: ai,mlops,devops,incident-analysis,sre,production-monitoring,agentic-ai,multi-agent,llm,observability,incident-response,automation
15
+ Classifier: Development Status :: 3 - Alpha
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: Intended Audience :: System Administrators
18
+ Classifier: Topic :: Software Development :: Debuggers
19
+ Classifier: Topic :: System :: Monitoring
20
+ Classifier: Topic :: Software Development :: Quality Assurance
21
+ Classifier: License :: OSI Approved :: MIT License
22
+ Classifier: Operating System :: OS Independent
23
+ Classifier: Programming Language :: Python :: 3
24
+ Classifier: Programming Language :: Python :: 3.8
25
+ Classifier: Programming Language :: Python :: 3.9
26
+ Classifier: Programming Language :: Python :: 3.10
27
+ Classifier: Programming Language :: Python :: 3.11
28
+ Classifier: Programming Language :: Python :: 3.12
29
+ Classifier: Environment :: Console
30
+ Classifier: Typing :: Typed
31
+ Requires-Python: >=3.8
32
+ Description-Content-Type: text/markdown
33
+ License-File: LICENSE
34
+ Requires-Dist: typer>=0.9.0
35
+ Requires-Dist: rich>=13.0.0
36
+ Requires-Dist: requests>=2.28.0
37
+ Requires-Dist: python-dotenv>=1.0.0
38
+ Provides-Extra: dev
39
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
40
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
41
+ Requires-Dist: black>=23.0.0; extra == "dev"
42
+ Requires-Dist: flake8>=6.0.0; extra == "dev"
43
+ Requires-Dist: build>=0.10.0; extra == "dev"
44
+ Requires-Dist: twine>=4.0.0; extra == "dev"
45
+ Provides-Extra: redis
46
+ Requires-Dist: redis>=4.5.0; extra == "redis"
47
+ Provides-Extra: aws
48
+ Requires-Dist: boto3>=1.26.0; extra == "aws"
49
+ Provides-Extra: k8s
50
+ Requires-Dist: kubernetes>=25.0.0; extra == "k8s"
51
+ Provides-Extra: all
52
+ Requires-Dist: redis>=4.5.0; extra == "all"
53
+ Requires-Dist: boto3>=1.26.0; extra == "all"
54
+ Requires-Dist: kubernetes>=25.0.0; extra == "all"
55
+ Dynamic: author
56
+ Dynamic: home-page
57
+ Dynamic: license-file
58
+ Dynamic: requires-python
59
+
60
+ # OpsPilot πŸ€–
61
+
62
+ > An intelligent agentic AI CLI tool for automated incident analysis and error resolution
63
+
64
+ OpsPilot is your AI-powered Site Reliability Engineer that analyzes your projects, identifies runtime issues, and suggests safe fixesβ€”all through a simple command-line interface.
65
+
66
+ ---
67
+
68
+ ## 🎯 What is OpsPilot?
69
+
70
+ OpsPilot uses a **multi-agent AI architecture** to understand your project's context, form hypotheses about runtime issues, and provide evidence-based fix recommendations. Think of it as having an experienced SRE on your team, available 24/7.
71
+
72
+ ### Key Capabilities
73
+
74
+ - **πŸ” Intelligent Context Gathering** - Automatically analyzes logs, environment variables, Docker configs, dependencies, and project structure
75
+ - **🧠 Multi-Agent Architecture** - 4 specialized agents (Planner, Verifier, Fixer, Remediation) working collaboratively
76
+ - **🌐 Multi-Provider LLM Support** - Automatic fallback across Ollama, OpenRouter, Gemini, and HuggingFace
77
+ - **βœ… Evidence-Based Verification** - Validates hypotheses with collected evidence and confidence scoring
78
+ - **πŸ› οΈ Safe Fix Suggestions** - Provides dry-run suggestions with detailed rationale (never auto-applies changes)
79
+ - **πŸ’Ύ Redis-Based Memory** - Auto-expiring incident history with user isolation and sub-second lookups
80
+ - **🚨 Severity Classification** - Automatic P0/P1/P2/P3 incident prioritization
81
+ - **☁️ Production Log Fetching** - S3, Kubernetes, CloudWatch, and HTTP endpoint support
82
+ - **πŸ“Š Deployment Correlation** - Links incidents to recent Git deployments for faster root cause analysis
83
+
84
+ ---
85
+
86
+ ## πŸš€ Quick Start
87
+
88
+ ### Prerequisites
89
+
90
+ - Python 3.8 or higher
91
+ - At least ONE of the following LLM providers:
92
+ - [Ollama](https://ollama.ai/) (local, free, recommended)
93
+ - Google Gemini API key (free tier)
94
+ - OpenRouter API key (free models available)
95
+ - HuggingFace API token (free tier)
96
+
97
+ ### Installation
98
+
99
+ ```bash
100
+ # Clone repository
101
+ git clone https://github.com/yourusername/opspilot.git
102
+ cd opspilot
103
+
104
+ # Basic installation
105
+ pip install -e .
106
+
107
+ # With Redis support (recommended for production)
108
+ pip install -e ".[redis]"
109
+
110
+ # With all integrations (Redis + AWS + Kubernetes)
111
+ pip install -e ".[all]"
112
+ ```
113
+
114
+ ### LLM Setup
115
+
116
+ **Option 1: Ollama (Recommended - Local & Free)**
117
+ ```bash
118
+ # Install Ollama
119
+ curl -fsSL https://ollama.ai/install.sh | sh
120
+
121
+ # Pull Llama 3 model
122
+ ollama pull llama3
123
+ ```
124
+
125
+ **Option 2: Cloud Providers (FREE tiers)**
126
+ ```bash
127
+ # Copy environment template
128
+ cp .env.example .env
129
+
130
+ # Add your API keys to .env
131
+ # GOOGLE_API_KEY=your-key-here
132
+ # OPENROUTER_API_KEY=your-key-here
133
+ # HUGGINGFACE_API_KEY=your-key-here
134
+ ```
135
+
136
+ See [FREE_LLM_SETUP.md](FREE_LLM_SETUP.md) for detailed setup instructions.
137
+
138
+ ### Usage
139
+
140
+ Navigate to your project directory and run:
141
+
142
+ ```bash
143
+ # Basic analysis
144
+ opspilot analyze
145
+
146
+ # Analyze with production logs from S3
147
+ opspilot analyze --log-source s3://my-bucket/logs/app.log
148
+
149
+ # Analyze with deployment correlation
150
+ opspilot analyze --deployment-analysis --since-hours 48
151
+
152
+ # JSON output for automation
153
+ opspilot analyze --json --mode quick
154
+
155
+ # Verbose output for debugging
156
+ opspilot analyze --verbose --debug
157
+ ```
158
+
159
+ **Example Output:**
160
+
161
+ ```
162
+ Similar issues detected from past runs:
163
+ - Redis connection issue caused by network or Redis server downtime (confidence 0.8)
164
+
165
+ OpsPilot initialized
166
+ Project detected: /your/project
167
+
168
+ Planner Agent reasoning...
169
+ Hypothesis: Redis connection issue
170
+ Confidence: 0.9
171
+
172
+ Evidence collected:
173
+ {'log_errors': {'ERROR': 1, 'Timeout': 1}, 'uses_redis': True}
174
+
175
+ Verifying hypothesis...
176
+ Supported: True
177
+ Confidence: 0.8
178
+ Reason: The presence of Redis connection-related errors (Timeout) and the system's use of Redis support the hypothesis.
179
+
180
+ Generating safe fix suggestions (dry-run)...
181
+
182
+ File: .env
183
+ Increase Redis timeout to reduce transient timeout errors under load.
184
+ --- a/.env
185
+ +++ b/.env
186
+ @@
187
+ -REDIS_TIMEOUT=1
188
+ +REDIS_TIMEOUT=5
189
+
190
+ File: app/config/redis.py
191
+ Enable connection pooling and reasonable timeouts to improve reliability.
192
+ --- a/app/config/redis.py
193
+ +++ b/app/config/redis.py
194
+ @@
195
+ -redis.Redis(host=host, port=port)
196
+ +redis.Redis(host=host, port=port, socket_timeout=5, max_connections=20)
197
+ ```
198
+
199
+ ---
200
+
201
+ ## πŸ—οΈ Architecture
202
+
203
+ OpsPilot implements a **multi-agent agentic architecture** with four specialized agents:
204
+
205
+ 1. **Planner Agent** - Analyzes project context and forms hypotheses about root causes
206
+ 2. **Verifier Agent** - Collects evidence and validates hypotheses with confidence scoring
207
+ 3. **Fixer Agent** - Generates safe, actionable fix suggestions
208
+ 4. **Remediation Agent** - Creates 3-tier action plans (immediate, short-term, long-term)
209
+
210
+ **Multi-Provider LLM System:**
211
+ - Automatic fallback routing across 4 providers
212
+ - Connection pooling for high availability
213
+ - Provider health metrics and monitoring
214
+
215
+ **Redis-Based Memory:**
216
+ - User-isolated incident storage with SHA-256 project hashing
217
+ - Automatic TTL expiration (configurable, default 30 days)
218
+ - Sub-second similarity search with sorted sets
219
+ - Severity-based indexing (P0/P1/P2/P3)
220
+
221
+ See [ARCHITECTURE.md](ARCHITECTURE.md) for detailed design documentation.
222
+
223
+ ---
224
+
225
+ ## 🧩 How It Works
226
+
227
+ ### 1. Context Collection
228
+ OpsPilot gathers information from multiple sources:
229
+ - **Logs**: Recent error logs and exceptions
230
+ - **Environment**: Environment variables and configurations
231
+ - **Dependencies**: Project dependencies (requirements.txt, package.json)
232
+ - **Docker**: Dockerfile and docker-compose configurations
233
+ - **Structure**: Project file tree and organization
234
+
235
+ ### 2. Hypothesis Generation
236
+ The Planner agent uses LLM reasoning to:
237
+ - Analyze collected context
238
+ - Identify patterns and anomalies
239
+ - Form hypotheses about root causes
240
+ - Assign confidence scores (0.0 - 1.0)
241
+
242
+ ### 3. Evidence-Based Verification
243
+ The Verifier agent:
244
+ - Collects concrete evidence (log errors, missing configs, etc.)
245
+ - Cross-references with the hypothesis
246
+ - Updates confidence based on evidence strength
247
+ - Provides reasoning for the verdict
248
+
249
+ ### 4. Safe Fix Suggestions
250
+ If confidence β‰₯ 0.6, the Fixer agent:
251
+ - Generates actionable fix suggestions as diffs
252
+ - Explains the rationale for each fix
253
+ - Provides domain-specific solutions (e.g., Redis timeout fixes)
254
+ - **Never auto-applies changes** (dry-run only for safety)
255
+
256
+ ### 5. Learning from History
257
+ OpsPilot maintains Redis-based memory of past issues:
258
+ - Stores hypotheses, confidence scores, and evidence with automatic TTL
259
+ - User-isolated storage using project path hashing
260
+ - Detects similar issues in future runs with sub-second lookups
261
+ - Automatic expiration prevents stale incident data
262
+ - Falls back to file-based storage if Redis unavailable
263
+
264
+ ---
265
+
266
+ ## πŸŽ“ Technology Stack
267
+
268
+ - **LLM Integration**: Multi-provider system (Ollama, OpenRouter, Gemini, HuggingFace) with automatic fallback
269
+ - **Memory Layer**: Redis (with file-based fallback) for incident history and similarity detection
270
+ - **CLI Framework**: Typer + Rich (professional terminal output)
271
+ - **Cloud Integration**: AWS (S3, CloudWatch), Kubernetes, HTTP endpoints
272
+ - **AI Pattern**: Multi-agent agentic architecture with 4 specialized agents
273
+ - **Reasoning**: Evidence-based decision making with P0/P1/P2/P3 severity classification
274
+ - **Prompt Engineering**: Robust JSON extraction with retry logic and safe parsing
275
+ - **Testing**: pytest with 45+ unit tests and integration test coverage
276
+
277
+ ---
278
+
279
+ ## πŸ“‹ Project Structure
280
+
281
+ ```
282
+ opspilot/
283
+ β”œβ”€β”€ agents/ # Four specialized AI agents
284
+ β”‚ β”œβ”€β”€ planner.py # Hypothesis generation
285
+ β”‚ β”œβ”€β”€ verifier.py # Evidence-based verification
286
+ β”‚ β”œβ”€β”€ fixer.py # Safe fix suggestions
287
+ β”‚ └── remediation.py # 3-tier remediation plans
288
+ β”œβ”€β”€ context/ # Context gathering modules
289
+ β”‚ β”œβ”€β”€ logs.py # Log analysis
290
+ β”‚ β”œβ”€β”€ env.py # Environment variables
291
+ β”‚ β”œβ”€β”€ deps.py # Dependency detection
292
+ β”‚ β”œβ”€β”€ docker.py # Docker configuration
293
+ β”‚ β”œβ”€β”€ project.py # Project structure
294
+ β”‚ β”œβ”€β”€ production_logs.py # Multi-source log fetching (S3, K8s, CloudWatch)
295
+ β”‚ β”œβ”€β”€ deployment_history.py # Git-based deployment correlation
296
+ β”‚ └── pattern_analysis.py # Error pattern detection & severity classification
297
+ β”œβ”€β”€ utils/ # Shared utilities
298
+ β”‚ β”œβ”€β”€ llm_providers.py # Multi-provider LLM router with fallback
299
+ β”‚ └── llm.py # Backward-compatible LLM wrapper
300
+ β”œβ”€β”€ tools/ # Evidence collection utilities
301
+ β”‚ β”œβ”€β”€ log_tools.py # Log error analysis
302
+ β”‚ β”œβ”€β”€ env_tools.py # Environment validation
303
+ β”‚ └── dep_tools.py # Dependency checking
304
+ β”œβ”€β”€ diffs/ # Domain-specific fix templates
305
+ β”œβ”€β”€ memory.py # File-based memory (fallback)
306
+ β”œβ”€β”€ memory_redis.py # Redis-based memory with user isolation
307
+ β”œβ”€β”€ tests/ # Comprehensive test suite (45+ tests)
308
+ β”‚ β”œβ”€β”€ test_pattern_analysis.py
309
+ β”‚ β”œβ”€β”€ test_production_logs.py
310
+ β”‚ β”œβ”€β”€ test_remediation.py
311
+ β”‚ └── test_llm_providers.py
312
+ └── cli.py # Command-line interface
313
+ ```
314
+
315
+ ---
316
+
317
+ ## πŸ”’ Safety & Design Principles
318
+
319
+ - **Dry-Run Only**: Never automatically applies changes to your code
320
+ - **Evidence-Based**: All suggestions backed by concrete evidence
321
+ - **Confidence Scoring**: Transparent about certainty levels (0.0 - 1.0)
322
+ - **Privacy-Focused**: Prefers local LLM (Ollama) with automatic fallback to cloud
323
+ - **User Isolation**: Redis memory uses SHA-256 project hashing for complete data separation
324
+ - **Auto-Expiring Data**: Incidents automatically expire after configurable TTL (default 30 days)
325
+ - **High Availability**: Multi-provider LLM system with automatic failover
326
+ - **Modular Design**: Easy to extend with new agents, providers, or context sources
327
+ - **Production-Ready**: Comprehensive test coverage, error handling, and graceful degradation
328
+
329
+ ---
330
+
331
+ ## πŸ› οΈ Development
332
+
333
+ ### Running from Source
334
+
335
+ ```bash
336
+ # Install in development mode
337
+ pip install -e .
338
+
339
+ # Run the CLI
340
+ opspilot analyze
341
+ ```
342
+
343
+ ### Requirements
344
+
345
+ - Python 3.8+
346
+ - At least one LLM provider (see Quick Start)
347
+ - Optional: Redis for production incident memory
348
+
349
+ ### Running Tests
350
+
351
+ ```bash
352
+ # Install test dependencies
353
+ pip install -e ".[dev]"
354
+
355
+ # Run all tests
356
+ pytest
357
+
358
+ # Run with coverage
359
+ pytest --cov=opspilot tests/
360
+
361
+ # Run specific test file
362
+ pytest tests/test_llm_providers.py
363
+ ```
364
+
365
+ ---
366
+
367
+ ## πŸ—ΊοΈ Roadmap
368
+
369
+ - [x] Multi-provider LLM support with automatic fallback
370
+ - [x] Comprehensive test coverage (45+ tests)
371
+ - [x] Redis-based memory with user isolation
372
+ - [x] Production log fetching (S3, K8s, CloudWatch)
373
+ - [x] Deployment correlation analysis
374
+ - [x] Severity classification (P0/P1/P2/P3)
375
+ - [ ] Plugin system for custom agents
376
+ - [ ] Web API for remote usage
377
+ - [ ] More domain-specific fix templates (PostgreSQL, MongoDB, etc.)
378
+ - [ ] Real-time metrics dashboard
379
+ - [ ] Slack/PagerDuty integration for incident alerts
380
+
381
+ ---
382
+
383
+ ## πŸ“„ License
384
+
385
+ MIT License - see [LICENSE](LICENSE) for details
386
+
387
+ ---
388
+
389
+ ## 🀝 Contributing
390
+
391
+ Contributions are welcome! This project is under active development. Please:
392
+
393
+ 1. Fork the repository
394
+ 2. Create a feature branch
395
+ 3. Make your changes
396
+ 4. Submit a pull request
397
+
398
+ For major changes, please open an issue first to discuss your ideas.
399
+
400
+ ---
401
+
402
+ ## πŸ“§ Contact
403
+
404
+ For questions or feedback, please open an issue on GitHub.
405
+
406
+ ---
407
+
408
+ **Built with ❀️ using agentic AI principles**
@@ -0,0 +1,35 @@
1
+ opspilot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ opspilot/cli.py,sha256=daojuqoPFYJO1y7GuSMweCoJFRqy_6X7DdQqq-KQijI,15053
3
+ opspilot/config.py,sha256=in9q7xd7RKBbJeMJ5AOQ1S9Op5_d3TaP_MRtlQWWo20,530
4
+ opspilot/memory.py,sha256=PS5_oqt1VNSkJgAoeDOboZKO0hRuhiLEi_OLRHl-z68,628
5
+ opspilot/memory_redis.py,sha256=MtKu1EzjUOVvAOBE2V2e_wLk0K4R5gwPFy-mI1l4CyQ,9578
6
+ opspilot/state.py,sha256=mUJ10xeIB55ujHROsu63MwWLF2qc8azjdWzvtB5AEZI,490
7
+ opspilot/agents/fixer.py,sha256=1VYDDG7YKnuzEHYb2SmGgC5AVSfZf4pxy-FnaOzhmfU,986
8
+ opspilot/agents/planner.py,sha256=Wt_0tAeYKNH8dEb-lQEYk3m4dxYxu5do8x5CZT7nlA0,2049
9
+ opspilot/agents/remediation.py,sha256=daTlhaYZpXFyD_F1iuXvnN4ij0e405uvJ8FbFEqRmo8,7706
10
+ opspilot/agents/verifier.py,sha256=R4H_rm8CG3qGJhK6kPzKUjom869_bfaWDcyy9lP1AQk,1664
11
+ opspilot/context/__init__.py,sha256=h2zikX8F8Z_hkPqyE_WPpr_NI43r2h4bgfvEVpLMMMc,806
12
+ opspilot/context/deployment_history.py,sha256=Ni8XTrq4PzRacmLVVnAnlD47SatcvMDh45Ei_R5VRKc,10642
13
+ opspilot/context/deps.py,sha256=pXKsqbZ5yHFDZWRJh0lJV1YCez0B-vqGoCTtIBIrv6E,339
14
+ opspilot/context/docker.py,sha256=A1AymC5-CckQbgs8s7kRZcrGqydjWYmQI9hfxVWqlyI,443
15
+ opspilot/context/env.py,sha256=DAO7YWwbCu9mIAZtgG7ChJV2lJBQz5PTm9j0PGvYiws,455
16
+ opspilot/context/logs.py,sha256=zk4hdiOcheWGfl8z9ylZvPUECa5vV-eTecNzPDC3Jvw,442
17
+ opspilot/context/production_logs.py,sha256=9E-fCiH66Oc0Vn1bTHFzDK4XTYV7Z0HtCycmIC6G6-M,7294
18
+ opspilot/context/project.py,sha256=t8j5Nqe7h-F5foZvp2KJfR5BEnWM5R6QqcI-GMEen_0,522
19
+ opspilot/diffs/redis.py,sha256=Yeia00eXv6kuBHbIMpt8efZ2jRm6N2luCg5SHVAY9o0,637
20
+ opspilot/graph/engine.py,sha256=R9Dt6Xn6jevSzFfm98q5C-lrTninY0mOqwWLtI0QQWw,762
21
+ opspilot/graph/nodes.py,sha256=Ejb3MzhqySOU8j939A-9ZAbFAvgV9zofj3AkVZlc8so,1248
22
+ opspilot/tools/__init__.py,sha256=9GHbKc-l-DNzWJAEkIgn_erPXSNh880hhDOXC0AfSus,1651
23
+ opspilot/tools/dep_tools.py,sha256=UAVWoQeOPBjB5OiCgiTFk2c_69_NJ7vo33NAbxXVJpA,149
24
+ opspilot/tools/env_tools.py,sha256=GLeJgrTrbZcjPurRWXQ5BWZiO4aUJdlkT1iYaAs1nD4,173
25
+ opspilot/tools/log_tools.py,sha256=n-JtGvZrtBbk6HUisVAHl2LPfHG90xF0ogtglVepmMA,283
26
+ opspilot/tools/pattern_analysis.py,sha256=e6N48iMiYWwhmH_3Bbdqhr49n19jPRPrwBWv-9THXcE,5243
27
+ opspilot/utils/__init__.py,sha256=jDlOFqPTvm9jo4RsaLBrSmanD3QYogfnIr30hTiXY7Y,36
28
+ opspilot/utils/llm.py,sha256=RsiBVw7iemZNxtJktUBCPpVY-E_9peImf6Gm6P81WSE,544
29
+ opspilot/utils/llm_providers.py,sha256=q4MkGK03Mn_TcttJQaNfoMhSgVpBn-dMLm2AmHXt5Sc,15623
30
+ opspilot_ai-0.1.0.dist-info/licenses/LICENSE,sha256=HEWOzX-yJ9Pctxca1nGhcPAg8Htk1PuJPPOPqcfHUe0,1083
31
+ opspilot_ai-0.1.0.dist-info/METADATA,sha256=Ap8Ktb3I8Ft2bjhibpEHdzc1VJGPe6w7mWp23L_x5fU,14442
32
+ opspilot_ai-0.1.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
33
+ opspilot_ai-0.1.0.dist-info/entry_points.txt,sha256=2nttMUdFdShzdN0EkLNgtMNbWDWdO2hHyDzdiCWZolo,46
34
+ opspilot_ai-0.1.0.dist-info/top_level.txt,sha256=u_uSy6eFmJW-9xWnxieGZn5LN_xjXOPMhlKu8BEscdA,9
35
+ opspilot_ai-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.10.2)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ opspilot = opspilot.cli:app
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Kiran Vijaykumar Choudhari
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.
@@ -0,0 +1 @@
1
+ opspilot