neuroncli 2.1.0__tar.gz → 2.1.1__tar.gz
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.
- {neuroncli-2.1.0 → neuroncli-2.1.1}/PKG-INFO +13 -6
- {neuroncli-2.1.0 → neuroncli-2.1.1}/README.md +12 -5
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/auth.py +44 -7
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/config.py +1 -1
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli.egg-info/PKG-INFO +13 -6
- {neuroncli-2.1.0 → neuroncli-2.1.1}/pyproject.toml +1 -1
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/__init__.py +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/__main__.py +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/agent.py +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/cli.py +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/git_integration.py +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/ollama_client.py +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/openrouter_client.py +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/prompts.py +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/provider.py +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/session.py +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/tools.py +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/ui.py +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli.egg-info/SOURCES.txt +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli.egg-info/dependency_links.txt +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli.egg-info/entry_points.txt +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli.egg-info/requires.txt +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli.egg-info/top_level.txt +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/setup.cfg +0 -0
- {neuroncli-2.1.0 → neuroncli-2.1.1}/tests/test_agent.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: neuroncli
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.1
|
|
4
4
|
Summary: AI Coding Agent — Free Claude Code alternative powered by Kimi K2.5 + Ollama
|
|
5
5
|
Author-email: Rahul S <rahultech72216@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -34,17 +34,24 @@ Requires-Dist: requests>=2.28.0
|
|
|
34
34
|
## Install
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
|
-
#
|
|
37
|
+
# Windows
|
|
38
38
|
pip install neuroncli
|
|
39
39
|
|
|
40
|
-
#
|
|
40
|
+
# Linux / macOS (modern distros use pipx)
|
|
41
|
+
pipx install neuroncli
|
|
42
|
+
|
|
43
|
+
# If pipx not installed:
|
|
44
|
+
# sudo apt install pipx && pipx ensurepath (Debian/Ubuntu)
|
|
45
|
+
# sudo dnf install pipx && pipx ensurepath (Fedora)
|
|
46
|
+
# brew install pipx && pipx ensurepath (macOS)
|
|
47
|
+
|
|
48
|
+
# From source (any platform)
|
|
41
49
|
git clone https://github.com/RAHUL-DevelopeRR/neuroncli.git
|
|
42
|
-
cd neuroncli
|
|
43
|
-
pip install -e .
|
|
50
|
+
cd neuroncli && pip install -e .
|
|
44
51
|
```
|
|
45
52
|
|
|
46
53
|
```bash
|
|
47
|
-
# Linux/macOS
|
|
54
|
+
# Linux/macOS auto-install script
|
|
48
55
|
curl -fsSL https://raw.githubusercontent.com/RAHUL-DevelopeRR/neuroncli/master/install.sh | bash
|
|
49
56
|
```
|
|
50
57
|
|
|
@@ -9,17 +9,24 @@
|
|
|
9
9
|
## Install
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
#
|
|
12
|
+
# Windows
|
|
13
13
|
pip install neuroncli
|
|
14
14
|
|
|
15
|
-
#
|
|
15
|
+
# Linux / macOS (modern distros use pipx)
|
|
16
|
+
pipx install neuroncli
|
|
17
|
+
|
|
18
|
+
# If pipx not installed:
|
|
19
|
+
# sudo apt install pipx && pipx ensurepath (Debian/Ubuntu)
|
|
20
|
+
# sudo dnf install pipx && pipx ensurepath (Fedora)
|
|
21
|
+
# brew install pipx && pipx ensurepath (macOS)
|
|
22
|
+
|
|
23
|
+
# From source (any platform)
|
|
16
24
|
git clone https://github.com/RAHUL-DevelopeRR/neuroncli.git
|
|
17
|
-
cd neuroncli
|
|
18
|
-
pip install -e .
|
|
25
|
+
cd neuroncli && pip install -e .
|
|
19
26
|
```
|
|
20
27
|
|
|
21
28
|
```bash
|
|
22
|
-
# Linux/macOS
|
|
29
|
+
# Linux/macOS auto-install script
|
|
23
30
|
curl -fsSL https://raw.githubusercontent.com/RAHUL-DevelopeRR/neuroncli/master/install.sh | bash
|
|
24
31
|
```
|
|
25
32
|
|
|
@@ -189,7 +189,12 @@ def run_oauth_flow() -> str | None:
|
|
|
189
189
|
)
|
|
190
190
|
|
|
191
191
|
# Start callback server in background
|
|
192
|
-
|
|
192
|
+
try:
|
|
193
|
+
server = http.server.HTTPServer(("127.0.0.1", CALLBACK_PORT), _OAuthCallbackHandler)
|
|
194
|
+
except OSError:
|
|
195
|
+
# Port in use — another instance is running
|
|
196
|
+
print(f"\n \033[91m[X] Port {CALLBACK_PORT} is in use. Close other instances first.\033[0m")
|
|
197
|
+
return None
|
|
193
198
|
server.timeout = 120 # 2 minute timeout
|
|
194
199
|
|
|
195
200
|
print("\n \033[96m\033[1m[AUTH]\033[0m Opening browser for OpenRouter login...")
|
|
@@ -197,7 +202,10 @@ def run_oauth_flow() -> str | None:
|
|
|
197
202
|
print(f" \033[90m{auth_url[:80]}...\033[0m\n")
|
|
198
203
|
|
|
199
204
|
# Open browser
|
|
200
|
-
|
|
205
|
+
try:
|
|
206
|
+
webbrowser.open(auth_url)
|
|
207
|
+
except Exception:
|
|
208
|
+
print(" \033[90m(Browser could not be opened. Use the URL above.)\033[0m")
|
|
201
209
|
|
|
202
210
|
print(" \033[93mWaiting for authentication...\033[0m", end="", flush=True)
|
|
203
211
|
|
|
@@ -211,10 +219,10 @@ def run_oauth_flow() -> str | None:
|
|
|
211
219
|
|
|
212
220
|
code = _OAuthCallbackHandler.auth_code
|
|
213
221
|
if not code:
|
|
214
|
-
print(f"\n \033[91m[X]
|
|
215
|
-
return
|
|
222
|
+
print(f"\n \033[91m[X] OAuth timed out or failed.\033[0m")
|
|
223
|
+
return _manual_key_fallback()
|
|
216
224
|
|
|
217
|
-
print(f" \033[
|
|
225
|
+
print(f" \033[92mv\033[0m")
|
|
218
226
|
print(" \033[96mExchanging code for API key...\033[0m", end="", flush=True)
|
|
219
227
|
|
|
220
228
|
# Exchange code for key
|
|
@@ -222,16 +230,43 @@ def run_oauth_flow() -> str | None:
|
|
|
222
230
|
api_key = _exchange_code_for_key(code, code_verifier)
|
|
223
231
|
except RuntimeError as e:
|
|
224
232
|
print(f"\n \033[91m[X] {e}\033[0m")
|
|
225
|
-
return
|
|
233
|
+
return _manual_key_fallback()
|
|
226
234
|
|
|
227
235
|
# Store
|
|
228
236
|
store_api_key(api_key)
|
|
229
|
-
print(f" \033[
|
|
237
|
+
print(f" \033[92mv\033[0m")
|
|
230
238
|
print(f" \033[92m\033[1m[OK] API key saved to {CONFIG_FILE}\033[0m\n")
|
|
231
239
|
|
|
232
240
|
return api_key
|
|
233
241
|
|
|
234
242
|
|
|
243
|
+
def _manual_key_fallback() -> str | None:
|
|
244
|
+
"""Fallback: let user manually paste their OpenRouter API key."""
|
|
245
|
+
print(f"\n \033[96m\033[1m[MANUAL SETUP]\033[0m")
|
|
246
|
+
print(f" \033[90mOAuth didn't work. You can paste your key instead:\033[0m")
|
|
247
|
+
print(f" \033[90m1. Go to: https://openrouter.ai/settings/keys\033[0m")
|
|
248
|
+
print(f" \033[90m2. Click 'Create Key'\033[0m")
|
|
249
|
+
print(f" \033[90m3. Copy the key (starts with sk-or-...)\033[0m\n")
|
|
250
|
+
|
|
251
|
+
try:
|
|
252
|
+
key = input(" \033[93mPaste your API key (or Enter to skip): \033[0m").strip()
|
|
253
|
+
except (EOFError, KeyboardInterrupt):
|
|
254
|
+
return None
|
|
255
|
+
|
|
256
|
+
if not key:
|
|
257
|
+
print(f"\n \033[90mSkipped. Using Ollama fallback if available.\033[0m\n")
|
|
258
|
+
return None
|
|
259
|
+
|
|
260
|
+
if key.startswith("sk-or-") or key.startswith("sk-"):
|
|
261
|
+
store_api_key(key)
|
|
262
|
+
print(f" \033[92m\033[1m[OK] API key saved to {CONFIG_FILE}\033[0m\n")
|
|
263
|
+
return key
|
|
264
|
+
else:
|
|
265
|
+
print(f" \033[91m[X] Invalid key format. Expected 'sk-or-...' \033[0m")
|
|
266
|
+
print(f" \033[90mGet one at: https://openrouter.ai/settings/keys\033[0m\n")
|
|
267
|
+
return None
|
|
268
|
+
|
|
269
|
+
|
|
235
270
|
# ── Public API ────────────────────────────────────────────────────
|
|
236
271
|
|
|
237
272
|
def ensure_api_key() -> str | None:
|
|
@@ -240,6 +275,7 @@ def ensure_api_key() -> str | None:
|
|
|
240
275
|
1. OPENROUTER_API_KEY env var
|
|
241
276
|
2. ~/.neuroncli/config.json
|
|
242
277
|
3. Interactive OAuth PKCE flow (first-run)
|
|
278
|
+
4. Manual key paste (fallback if OAuth fails)
|
|
243
279
|
|
|
244
280
|
Returns the API key or None if all methods fail.
|
|
245
281
|
"""
|
|
@@ -261,3 +297,4 @@ def ensure_api_key() -> str | None:
|
|
|
261
297
|
print(" ╚════════════════════════════════════════════════╝\033[0m")
|
|
262
298
|
|
|
263
299
|
return run_oauth_flow()
|
|
300
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: neuroncli
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.1
|
|
4
4
|
Summary: AI Coding Agent — Free Claude Code alternative powered by Kimi K2.5 + Ollama
|
|
5
5
|
Author-email: Rahul S <rahultech72216@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -34,17 +34,24 @@ Requires-Dist: requests>=2.28.0
|
|
|
34
34
|
## Install
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
|
-
#
|
|
37
|
+
# Windows
|
|
38
38
|
pip install neuroncli
|
|
39
39
|
|
|
40
|
-
#
|
|
40
|
+
# Linux / macOS (modern distros use pipx)
|
|
41
|
+
pipx install neuroncli
|
|
42
|
+
|
|
43
|
+
# If pipx not installed:
|
|
44
|
+
# sudo apt install pipx && pipx ensurepath (Debian/Ubuntu)
|
|
45
|
+
# sudo dnf install pipx && pipx ensurepath (Fedora)
|
|
46
|
+
# brew install pipx && pipx ensurepath (macOS)
|
|
47
|
+
|
|
48
|
+
# From source (any platform)
|
|
41
49
|
git clone https://github.com/RAHUL-DevelopeRR/neuroncli.git
|
|
42
|
-
cd neuroncli
|
|
43
|
-
pip install -e .
|
|
50
|
+
cd neuroncli && pip install -e .
|
|
44
51
|
```
|
|
45
52
|
|
|
46
53
|
```bash
|
|
47
|
-
# Linux/macOS
|
|
54
|
+
# Linux/macOS auto-install script
|
|
48
55
|
curl -fsSL https://raw.githubusercontent.com/RAHUL-DevelopeRR/neuroncli/master/install.sh | bash
|
|
49
56
|
```
|
|
50
57
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|