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.
Files changed (25) hide show
  1. {neuroncli-2.1.0 → neuroncli-2.1.1}/PKG-INFO +13 -6
  2. {neuroncli-2.1.0 → neuroncli-2.1.1}/README.md +12 -5
  3. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/auth.py +44 -7
  4. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/config.py +1 -1
  5. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli.egg-info/PKG-INFO +13 -6
  6. {neuroncli-2.1.0 → neuroncli-2.1.1}/pyproject.toml +1 -1
  7. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/__init__.py +0 -0
  8. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/__main__.py +0 -0
  9. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/agent.py +0 -0
  10. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/cli.py +0 -0
  11. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/git_integration.py +0 -0
  12. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/ollama_client.py +0 -0
  13. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/openrouter_client.py +0 -0
  14. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/prompts.py +0 -0
  15. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/provider.py +0 -0
  16. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/session.py +0 -0
  17. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/tools.py +0 -0
  18. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli/ui.py +0 -0
  19. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli.egg-info/SOURCES.txt +0 -0
  20. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli.egg-info/dependency_links.txt +0 -0
  21. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli.egg-info/entry_points.txt +0 -0
  22. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli.egg-info/requires.txt +0 -0
  23. {neuroncli-2.1.0 → neuroncli-2.1.1}/neuroncli.egg-info/top_level.txt +0 -0
  24. {neuroncli-2.1.0 → neuroncli-2.1.1}/setup.cfg +0 -0
  25. {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.0
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
- # From PyPI (all platforms)
37
+ # Windows
38
38
  pip install neuroncli
39
39
 
40
- # Or from source
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 one-liner
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
- # From PyPI (all platforms)
12
+ # Windows
13
13
  pip install neuroncli
14
14
 
15
- # Or from source
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 one-liner
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
- server = http.server.HTTPServer(("127.0.0.1", CALLBACK_PORT), _OAuthCallbackHandler)
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
- webbrowser.open(auth_url)
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] Authentication timed out or failed.\033[0m")
215
- return None
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[92m✓\033[0m")
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 None
233
+ return _manual_key_fallback()
226
234
 
227
235
  # Store
228
236
  store_api_key(api_key)
229
- print(f" \033[92m✓\033[0m")
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
+
@@ -109,4 +109,4 @@ class AgentConfig:
109
109
  # ── App-wide constants ────────────────────────────────────────────
110
110
 
111
111
  APP_NAME = "NeuronCLI"
112
- VERSION = "2.1.0"
112
+ VERSION = "2.1.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: neuroncli
3
- Version: 2.1.0
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
- # From PyPI (all platforms)
37
+ # Windows
38
38
  pip install neuroncli
39
39
 
40
- # Or from source
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 one-liner
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
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "neuroncli"
7
- version = "2.1.0"
7
+ version = "2.1.1"
8
8
  description = "AI Coding Agent — Free Claude Code alternative powered by Kimi K2.5 + Ollama"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes