@krishivpb60/aether-ai-cli 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.
@@ -0,0 +1,30 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ branches: [ main ]
8
+
9
+ jobs:
10
+ build:
11
+ runs-on: ubuntu-latest
12
+
13
+ strategy:
14
+ matrix:
15
+ node-version: [18.x, 20.x, 22.x]
16
+
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - name: Use Node.js ${{ matrix.node-version }}
21
+ uses: actions/setup-node@v4
22
+ with:
23
+ node-version: ${{ matrix.node-version }}
24
+ cache: 'npm'
25
+
26
+ - name: Install dependencies
27
+ run: npm ci
28
+
29
+ - name: Run tests
30
+ run: npm test
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Krishiv PB (@Krylo-60)
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,74 @@
1
+ # Original User Request
2
+
3
+ ## Initial Request — 2026-06-25T09:32:46-04:00
4
+
5
+ An all-in-one CLI command-line assistant called Aether AI CLI (`aether`). It features high-fidelity interactive terminal chat (using custom spinner, cyberpunk theme), multi-mode reasoning selection, file attachment parsing, secure API key configuration, and robust local offline JS mathematical fallbacks.
6
+
7
+ Working directory: C:\Users\naina\.gemini\antigravity\scratch\aether-ai-cli
8
+ Integrity mode: benchmark
9
+
10
+ ## Requirements
11
+
12
+ ### R1. High-Fidelity Cyberpunk Interactive Terminal Chat
13
+ - Provide a CLI tool (`aether`) that starts a continuous, interactive terminal chat.
14
+ - Display a stylized cyberpunk banner and colors, spinner indicators during API requests, and render assistant responses in formatted markdown.
15
+ - Support key CLI flags and commands (such as `--help`, `/quit`, `/exit`, `/clear`, `/modes`, `/providers`, etc.).
16
+
17
+ ### R2. Dual Secure Configuration Management
18
+ - Allow users to store API keys and models locally in `~/.aether/config.json` via a CLI setup/config command.
19
+ - Support reading from environment variables (e.g., from `.env` or system variables) as a fallback/alternative so no API key errors occur.
20
+ - Mask all sensitive configuration values (like API keys) when listed/viewed.
21
+
22
+ ### R3. File Attachment & Context Parsing
23
+ - Support passing files to the CLI or during chat (e.g. via syntax like `/attach <path>` or a CLI parameter).
24
+ - Parse the content of common file types (text, code, json, csv) and inject it into the prompt context.
25
+
26
+ ### R4. Multi-Mode Reasoning & Routing
27
+ - Route user queries dynamically based on model availability and reasoning modes (e.g., Fast, Standard, Deep/Thinking reasoning).
28
+ - Support standard free and paid AI provider models (Gemini, Grok, etc.).
29
+
30
+ ### R5. Offline Mathematical Fallback
31
+ - When no internet connection is available or API calls fail, fallback to a local JavaScript-based math/logic evaluation engine to solve equations or execute simple logic locally.
32
+
33
+ ### R6. Git Initialization & GitHub Actions CI
34
+ - Initialize a local git repository in the workspace folder.
35
+ - Add all code files and create an initial commit.
36
+ - Define a GitHub Actions workflow `.github/workflows/ci.yml` to automatically run tests/linting.
37
+
38
+ ### R7. Programmatic Test Suite
39
+ - Create automated unit tests (using Node's test runner) under the `test/` directory to verify:
40
+ - Configuration loading (priority order: file vs. environment variables).
41
+ - Context parsing of files.
42
+ - Multi-mode routing.
43
+ - Offline math fallback logic.
44
+
45
+ ## Acceptance Criteria
46
+
47
+ ### Installation & Help
48
+ - [ ] Running `npm link` or global install allows starting the CLI using `aether`.
49
+ - [ ] Running `aether --help` outputs comprehensive usage instructions and options.
50
+
51
+ ### Interactive Chat & UI
52
+ - [ ] The CLI starts with a cyberpunk banner and colored interface.
53
+ - [ ] Spinning indicators are displayed while waiting for an API response.
54
+ - [ ] File attachments can be specified using a CLI argument or dynamic chat command (e.g., `/attach`).
55
+
56
+ ### Key Management
57
+ - [ ] Interactive configuration command successfully creates/updates `~/.aether/config.json`.
58
+ - [ ] A fallback mechanism works when `~/.aether/config.json` is absent but environment variables are set.
59
+ - [ ] Listing the configuration masks keys (showing only prefix/suffix with dots).
60
+
61
+ ### Math Fallback
62
+ - [ ] Running a math query when offline or with simulated network failure returns correct evaluation outputs from the local JS fallback engine.
63
+
64
+ ### CI/CD and Tests
65
+ - [ ] Running `npm test` executes the unit test suite and passes successfully.
66
+ - [ ] A `.github/workflows/ci.yml` workflow file exists and defines linting and testing steps.
67
+ - [ ] Git repository is initialized in the working directory and a clean initial commit has been made.
68
+
69
+ ## Follow-up — 2026-06-25T13:33:56Z
70
+
71
+ The user has specified an additional critical requirement:
72
+ "and also it should fell better then clude code and codex so it will be opensorce and free so it will blow i guess"
73
+
74
+ Ensure the CLI UX is absolutely premium, responsive, and visually stunning—outperforming tools like Claude Code and Codex CLI. It must feel extremely polished, fast, and feature-rich (cyberpunk ASCII art, interactive autocomplete/menu helpers, smooth animations, and perfect markdown rendering). Focus heavily on the UI polish and usability so that it stands out as a top-tier open-source tool.
package/README.md ADDED
@@ -0,0 +1,271 @@
1
+ # Aether AI CLI
2
+
3
+ > ⚡ **Universal AI Gateway** — 13+ providers, free & paid models, cyberpunk terminal
4
+
5
+ [![npm version](https://img.shields.io/npm/v/@krylo-60/aether-ai-cli.svg)](https://www.npmjs.com/package/@krylo-60/aether-ai-cli)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-cyan.svg)](LICENSE)
7
+ [![Node.js](https://img.shields.io/badge/Node.js-≥18.0.0-green.svg)](https://nodejs.org)
8
+
9
+ ```
10
+ ╔═══════════════════════════════════════════════════════════╗
11
+ ║ █████╗ ███████╗████████╗██╗ ██╗███████╗██████╗ ║
12
+ ║ ██╔══██╗██╔════╝╚══██╔══╝██║ ██║██╔════╝██╔══██╗ ║
13
+ ║ ███████║█████╗ ██║ ████████║█████╗ ██████╔╝ ║
14
+ ║ ██╔══██║██╔══╝ ██║ ██╔══██║██╔══╝ ██╔══██╗ ║
15
+ ║ ██║ ██║███████╗ ██║ ██║ ██║███████╗██║ ██║ ║
16
+ ║ ╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ║
17
+ ╚═══════════════════════════════════════════════════════════╝
18
+ ```
19
+
20
+ **Aether Core AI v110** is a production-ready, globally installable command-line AI assistant that connects to **any AI provider in the world** — both free and paid. Chat with GPT-4o, Claude, Gemini, Llama, Mixtral, DeepSeek, and 50+ more models, all from one terminal.
21
+
22
+ ---
23
+
24
+ ## ✨ Features
25
+
26
+ - 🌐 **13+ AI Providers** — OpenAI, Anthropic, Google, Groq, Together, Mistral, OpenRouter, DeepSeek, Cerebras, Cohere, Perplexity, Fireworks, xAI
27
+ - 🆓 **Free Models Included** — Groq, Together AI, Cerebras, OpenRouter, and Cohere all offer generous free tiers
28
+ - 💬 **Interactive Chat** — Full terminal chat with slash commands, mode switching, and file attachments
29
+ - ⚡ **Single-Shot Queries** — Quick one-off questions directly from the CLI
30
+ - 🧠 **4 Reasoning Modes** — Synthesis, Research, Architect, Titan Fusion — each with unique system prompts
31
+ - 📎 **File Context Injection** — Attach code files, logs, or documents for context-aware AI responses
32
+ - 🔄 **Failover Mesh** — Automatic failback across all configured providers
33
+ - 🔢 **Local Math Solver** — Evaluates mathematical expressions without an API call
34
+ - 🤖 **Krylo Companion** — Offline cyberpunk companion bot when no API keys are configured
35
+ - 🔐 **Your Keys, Your Control** — API keys stored locally on YOUR machine, never transmitted anywhere
36
+ - 📤 **Export Conversations** — Save full chat history as Markdown files
37
+ - 🎨 **Cyberpunk UI** — Neon colors, ASCII art, signal bars, and mode badges
38
+
39
+ ---
40
+
41
+ ## 🚀 Quick Start
42
+
43
+ ### Install globally
44
+
45
+ ```bash
46
+ npm install -g @krylo-60/aether-ai-cli
47
+ ```
48
+
49
+ ### Or run directly with npx
50
+
51
+ ```bash
52
+ npx @krylo-60/aether-ai-cli chat
53
+ ```
54
+
55
+ ### Setup (Interactive Wizard)
56
+
57
+ ```bash
58
+ aether setup
59
+ ```
60
+
61
+ The wizard walks you through configuring providers — **start with free ones!**
62
+
63
+ ### Or set keys manually
64
+
65
+ ```bash
66
+ # Free providers (recommended to start)
67
+ aether config set GROQ_API_KEY gsk_your_key_here
68
+ aether config set GOOGLE_API_KEY AIza_your_key_here
69
+ aether config set OPENROUTER_API_KEY sk-or-your_key_here
70
+
71
+ # Paid providers
72
+ aether config set OPENAI_API_KEY sk-your_key_here
73
+ aether config set ANTHROPIC_API_KEY sk-ant-your_key_here
74
+ ```
75
+
76
+ ### Start chatting
77
+
78
+ ```bash
79
+ aether chat
80
+ ```
81
+
82
+ ### Quick one-shot query
83
+
84
+ ```bash
85
+ aether ask "Explain quantum computing in simple terms"
86
+ ```
87
+
88
+ ---
89
+
90
+ ## 📦 Supported Providers
91
+
92
+ | Provider | Key | Free Tier | Default Model |
93
+ |----------|-----|-----------|---------------|
94
+ | **Groq** | `GROQ_API_KEY` | ✅ Generous | `llama-3.3-70b-versatile` |
95
+ | **Together AI** | `TOGETHER_API_KEY` | ✅ Free credits | `Meta-Llama-3.1-70B-Instruct-Turbo` |
96
+ | **Cerebras** | `CEREBRAS_API_KEY` | ✅ Free tier | `llama-3.3-70b` |
97
+ | **OpenRouter** | `OPENROUTER_API_KEY` | ✅ Free models | `llama-3.1-70b-instruct:free` |
98
+ | **Google Gemini** | `GOOGLE_API_KEY` | ✅ Free tier | `gemini-2.5-flash` |
99
+ | **Cohere** | `COHERE_API_KEY` | ✅ Dev free | `command-r-plus` |
100
+ | **Fireworks AI** | `FIREWORKS_API_KEY` | ✅ Free tier | `llama-v3p1-70b-instruct` |
101
+ | **OpenAI** | `OPENAI_API_KEY` | 💳 Paid | `gpt-4o` |
102
+ | **Anthropic** | `ANTHROPIC_API_KEY` | 💳 Paid | `claude-sonnet-4` |
103
+ | **xAI** | `XAI_API_KEY` | 💳 Paid | `grok-2` |
104
+ | **Mistral** | `MISTRAL_API_KEY` | 💳 Paid | `mistral-large-latest` |
105
+ | **DeepSeek** | `DEEPSEEK_API_KEY` | 💳 Paid | `deepseek-chat` |
106
+ | **Perplexity** | `PERPLEXITY_API_KEY` | 💳 Paid | `sonar` |
107
+
108
+ > 💡 **Tip:** Start with **Groq** (fastest, free) or **Google Gemini** (most capable free tier). You can configure multiple providers and Aether will automatically failover between them!
109
+
110
+ ---
111
+
112
+ ## 🎮 Commands
113
+
114
+ ### Core Commands
115
+
116
+ ```bash
117
+ aether chat # Interactive chat session
118
+ aether ask "your question" # Single-shot query
119
+ aether setup # Guided provider setup wizard
120
+ ```
121
+
122
+ ### Configuration
123
+
124
+ ```bash
125
+ aether config set <KEY> <value> # Set a config value
126
+ aether config get <KEY> # Get a config value
127
+ aether config list # List all config (keys masked)
128
+ aether config delete <KEY> # Delete a config key
129
+ aether config reset # Delete all config
130
+ aether config path # Show config file location
131
+ ```
132
+
133
+ ### Discovery
134
+
135
+ ```bash
136
+ aether providers # List all 13+ supported providers
137
+ aether providers --free # Show only free-tier providers
138
+ aether models # List all available models
139
+ aether models groq # Models for a specific provider
140
+ aether modes # List reasoning modes
141
+ aether status # System status & active providers
142
+ ```
143
+
144
+ ### Flags
145
+
146
+ ```bash
147
+ aether ask "prompt" --mode research # Use specific reasoning mode
148
+ aether ask "prompt" --file error.log # Attach file context
149
+ aether ask "prompt" --model gpt-4o # Override model
150
+ aether ask "prompt" --raw # Raw text output (for piping)
151
+ aether chat --mode architect # Start chat in specific mode
152
+ ```
153
+
154
+ ---
155
+
156
+ ## 💬 Chat Commands
157
+
158
+ Inside interactive chat mode, use these slash commands:
159
+
160
+ | Command | Description |
161
+ |---------|-------------|
162
+ | `/help` | Show all commands |
163
+ | `/mode <name>` | Switch reasoning mode |
164
+ | `/modes` | List all modes with signal bars |
165
+ | `/attach <file>` | Attach a file for context |
166
+ | `/files` | List attached files |
167
+ | `/clear` | Remove attached files |
168
+ | `/providers` | Show active providers |
169
+ | `/export` | Export chat to Markdown |
170
+ | `/status` | Session status |
171
+ | `/exit` | End session |
172
+
173
+ ---
174
+
175
+ ## 🧠 Reasoning Modes
176
+
177
+ | Mode | Layer | Style | Signal |
178
+ |------|-------|-------|--------|
179
+ | **Synthesis** | v2.5 | Balanced, clean, direct | ████████░░ 80% |
180
+ | **Research** | v104 | Deep analysis, evidence-based | █████████░ 85% |
181
+ | **Architect** | v55 | Systems thinking, debugging | █████████░ 90% |
182
+ | **Titan Fusion** | v110 | Premium, maximum signal density | █████████░ 95% |
183
+
184
+ ---
185
+
186
+ ## 🔐 Security
187
+
188
+ - **Your keys stay on YOUR machine** — stored at `~/.aether/config.json`
189
+ - **No keys are bundled** in the package
190
+ - **No telemetry** — zero data collection
191
+ - **Keys are masked** when displayed (`aether config list`)
192
+ - **Environment variables** also supported as fallback
193
+
194
+ ---
195
+
196
+ ## 🔄 Failover Mesh
197
+
198
+ Aether routes your prompt through all configured providers automatically:
199
+
200
+ ```
201
+ Your Prompt
202
+
203
+ [Provider 1] → Success? → Response ✓
204
+ ↓ (fail)
205
+ [Provider 2] → Success? → Response ✓
206
+ ↓ (fail)
207
+ [Provider N] → Success? → Response ✓
208
+ ↓ (all fail)
209
+ [Krylo Companion] → Local Response ✓
210
+ ```
211
+
212
+ If a provider returns an error (rate limit, quota, etc.), Aether automatically tries the next one. Configure multiple free providers for maximum resilience!
213
+
214
+ ---
215
+
216
+ ## 📁 File Attachment
217
+
218
+ Attach code files, logs, configs, or documents for context-aware responses:
219
+
220
+ ```bash
221
+ # From CLI
222
+ aether ask "What's wrong with this code?" --file buggy.js
223
+
224
+ # In chat mode
225
+ /attach error.log
226
+ What errors are in this file?
227
+ ```
228
+
229
+ **Supported file types:** `.js`, `.ts`, `.py`, `.html`, `.css`, `.json`, `.md`, `.txt`, `.log`, `.yaml`, `.xml`, `.toml`, `.sql`, `.go`, `.rs`, `.java`, `.c`, `.cpp`, `.rb`, `.php`, `.swift`, `.kt`, `.dart`, `.vue`, `.svelte`, `.sh`, `.bat`, `.ps1`, `.env`, `.csv`
230
+
231
+ ---
232
+
233
+ ## 🏗️ Development
234
+
235
+ ```bash
236
+ # Clone the repo
237
+ git clone https://github.com/Krylo-60/aether-ai-cli.git
238
+ cd aether-ai-cli
239
+
240
+ # Install dependencies
241
+ npm install
242
+
243
+ # Link for local development
244
+ npm link
245
+
246
+ # Test
247
+ aether --help
248
+ aether status
249
+ aether ask "hello"
250
+ ```
251
+
252
+ ---
253
+
254
+ ## 📄 License
255
+
256
+ MIT License — see [LICENSE](LICENSE) for details.
257
+
258
+ ---
259
+
260
+ ## 👨‍💻 Author
261
+
262
+ **Krishiv PB** ([@Krylo-60](https://github.com/Krylo-60))
263
+
264
+ > *"Stay cyberpunk. ⚡"*
265
+
266
+ ---
267
+
268
+ <p align="center">
269
+ <b>⚡ Aether Core AI v110 — Fusion Command Station ⚡</b><br>
270
+ <i>Universal AI Gateway for the Terminal</i>
271
+ </p>
@@ -0,0 +1 @@
1
+ # Aether AI CLI Pip Package Wrapper
@@ -0,0 +1,49 @@
1
+ import sys
2
+ import os
3
+ import subprocess
4
+ import shutil
5
+
6
+ def main():
7
+ # Find the Node.js entry point absolute path inside aether_pip/node_project
8
+ script_dir = os.path.dirname(os.path.abspath(__file__))
9
+ node_project_dir = os.path.join(script_dir, "node_project")
10
+ aether_js = os.path.join(node_project_dir, "bin", "aether.js")
11
+
12
+ # If not found globally, check dev layout relative to current working directory
13
+ if not os.path.exists(aether_js):
14
+ aether_js = os.path.join(os.getcwd(), "bin", "aether.js")
15
+ node_project_dir = os.getcwd()
16
+
17
+ if not shutil.which("node"):
18
+ print("Error: Node.js is required to run Aether AI CLI.", file=sys.stderr)
19
+ print("Please install Node.js (https://nodejs.org) and try again.", file=sys.stderr)
20
+ sys.exit(1)
21
+
22
+ # Check if node_modules exists in the node_project directory.
23
+ # If not, automatically run npm install inside that directory!
24
+ node_modules_dir = os.path.join(node_project_dir, "node_modules")
25
+ if not os.path.exists(node_modules_dir):
26
+ print("First-time launch check: Installing node dependencies via npm...")
27
+ npm_cmd = shutil.which("npm")
28
+ if not npm_cmd:
29
+ print("Error: npm is required to install Node dependencies.", file=sys.stderr)
30
+ print("Please install Node.js/npm and try again.", file=sys.stderr)
31
+ sys.exit(1)
32
+
33
+ # On Windows, run npm using shell=True to handle cmd/bat resolution
34
+ subprocess.run([npm_cmd, "install", "--no-audit", "--no-fund"], cwd=node_project_dir, shell=(os.name == "nt"))
35
+
36
+ try:
37
+ # Run node aether.js passing all command line arguments
38
+ cmd = ["node", aether_js] + sys.argv[1:]
39
+ result = subprocess.run(cmd, check=False)
40
+ sys.exit(result.returncode)
41
+ except KeyboardInterrupt:
42
+ print("\nSession terminated by user.")
43
+ sys.exit(0)
44
+ except Exception as e:
45
+ print(f"Error running Aether: {e}", file=sys.stderr)
46
+ sys.exit(1)
47
+
48
+ if __name__ == "__main__":
49
+ main()
package/bin/aether.js ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+
3
+ // ═══════════════════════════════════════════════════════════
4
+ // AETHER AI CLI — Entry Point
5
+ // Universal AI Gateway — 13+ Providers, Free & Paid
6
+ // ═══════════════════════════════════════════════════════════
7
+
8
+ import { createCLI } from "../src/cli.js";
9
+
10
+ createCLI(process.argv);
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@krishivpb60/aether-ai-cli",
3
+ "version": "1.0.0",
4
+ "description": "Aether Core AI — A cyberpunk command-line AI assistant with multi-mode reasoning, 12-node failover mesh, file context injection, and offline fallbacks.",
5
+ "main": "src/cli.js",
6
+ "bin": {
7
+ "aether": "bin/aether.js"
8
+ },
9
+ "type": "module",
10
+ "scripts": {
11
+ "start": "node bin/aether.js",
12
+ "test": "node --test"
13
+ },
14
+ "keywords": [
15
+ "ai",
16
+ "cli",
17
+ "gemini",
18
+ "grok",
19
+ "xai",
20
+ "chatbot",
21
+ "aether",
22
+ "cyberpunk",
23
+ "terminal",
24
+ "assistant"
25
+ ],
26
+ "author": "Krishiv PB <krylobloxyt@gmail.com> (https://github.com/Krylo-60)",
27
+ "license": "MIT",
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "git+https://github.com/Krylo-60/aether-ai-cli.git"
31
+ },
32
+ "homepage": "https://github.com/Krylo-60/aether-ai-cli#readme",
33
+ "publishConfig": {
34
+ "access": "public"
35
+ },
36
+ "engines": {
37
+ "node": ">=18.0.0"
38
+ },
39
+ "dependencies": {
40
+ "chalk": "^5.3.0",
41
+ "commander": "^12.1.0",
42
+ "marked": "^14.0.0",
43
+ "marked-terminal": "^7.2.0",
44
+ "ora": "^8.1.0"
45
+ }
46
+ }
package/setup.py ADDED
@@ -0,0 +1,51 @@
1
+ from setuptools import setup, find_packages
2
+ import os
3
+ import shutil
4
+
5
+ # Copy Node project files into aether_pip/node_project for clean packaging
6
+ dest_dir = os.path.join('aether_pip', 'node_project')
7
+ if os.path.exists(dest_dir):
8
+ shutil.rmtree(dest_dir)
9
+ os.makedirs(dest_dir)
10
+
11
+ # Copy directories
12
+ shutil.copytree('bin', os.path.join(dest_dir, 'bin'))
13
+ shutil.copytree('src', os.path.join(dest_dir, 'src'))
14
+ shutil.copyfile('package.json', os.path.join(dest_dir, 'package.json'))
15
+ if os.path.exists('package-lock.json'):
16
+ shutil.copyfile('package-lock.json', os.path.join(dest_dir, 'package-lock.json'))
17
+
18
+ def package_files(directory):
19
+ paths = []
20
+ for (path, directories, filenames) in os.walk(directory):
21
+ for filename in filenames:
22
+ rel_path = os.path.relpath(os.path.join(path, filename), 'aether_pip')
23
+ paths.append(rel_path)
24
+ return paths
25
+
26
+ setup(
27
+ name="aether-ai-cli",
28
+ version="1.0.0",
29
+ author="Krishiv PB",
30
+ author_email="krylobloxyt@gmail.com",
31
+ description="Aether Core AI v110 — Universal AI Gateway CLI (Python Wrapper)",
32
+ long_description=open("README.md", "r", encoding="utf-8").read() if os.path.exists("README.md") else "",
33
+ long_description_content_type="text/markdown",
34
+ url="https://github.com/Krylo-60/aether-ai-cli",
35
+ packages=find_packages(),
36
+ package_data={
37
+ "aether_pip": package_files(os.path.join('aether_pip', 'node_project')),
38
+ },
39
+ include_package_data=True,
40
+ entry_points={
41
+ "console_scripts": [
42
+ "aether-pip=aether_pip.cli:main",
43
+ ],
44
+ },
45
+ classifiers=[
46
+ "Programming Language :: Python :: 3",
47
+ "License :: OSI Approved :: MIT License",
48
+ "Operating System :: OS Independent",
49
+ ],
50
+ python_requires=">=3.6",
51
+ )