utim-cli 1.46.8__tar.gz → 1.46.10__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 (68) hide show
  1. {utim_cli-1.46.8/utim_cli.egg-info → utim_cli-1.46.10}/PKG-INFO +1 -3
  2. {utim_cli-1.46.8 → utim_cli-1.46.10}/pyproject.toml +1 -3
  3. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/auth.py +40 -9
  4. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/utim.py +17 -4
  5. {utim_cli-1.46.8 → utim_cli-1.46.10/utim_cli.egg-info}/PKG-INFO +1 -3
  6. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli.egg-info/requires.txt +0 -2
  7. {utim_cli-1.46.8 → utim_cli-1.46.10}/CHANGELOG.md +0 -0
  8. {utim_cli-1.46.8 → utim_cli-1.46.10}/LICENSE +0 -0
  9. {utim_cli-1.46.8 → utim_cli-1.46.10}/MANIFEST.in +0 -0
  10. {utim_cli-1.46.8 → utim_cli-1.46.10}/README.md +0 -0
  11. {utim_cli-1.46.8 → utim_cli-1.46.10}/setup.cfg +0 -0
  12. {utim_cli-1.46.8 → utim_cli-1.46.10}/setup.py +0 -0
  13. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/__init__.py +0 -0
  14. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/agent.py +0 -0
  15. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/backup.py +0 -0
  16. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/blender_agent.py +0 -0
  17. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/bootstrap.py +0 -0
  18. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/client_utils.py +0 -0
  19. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/config.py +0 -0
  20. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/constants.py +0 -0
  21. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/context_pruner.py +0 -0
  22. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/doctor.py +0 -0
  23. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/knowledge_graph.py +0 -0
  24. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/local_db.py +0 -0
  25. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/logger.py +0 -0
  26. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/mcp_clean_wrapper.py +0 -0
  27. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/mcp_client.py +0 -0
  28. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/mcp_registry.json +0 -0
  29. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/orchestrator.py +0 -0
  30. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/reflection.py +0 -0
  31. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/report.py +0 -0
  32. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/scrapy_search.py +0 -0
  33. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/__init__.py +0 -0
  34. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/auth.py +0 -0
  35. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/db.py +0 -0
  36. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/email_utils.py +0 -0
  37. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/firebase.py +0 -0
  38. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/history.py +0 -0
  39. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/logging_config.py +0 -0
  40. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/models.py +0 -0
  41. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/rate_limit.py +0 -0
  42. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/router.py +0 -0
  43. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/routes/__init__.py +0 -0
  44. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/routes/auth_routes.py +0 -0
  45. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/routes/completion_routes.py +0 -0
  46. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/routes/credit_routes.py +0 -0
  47. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/routes/quota_routes.py +0 -0
  48. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/routes/session_routes.py +0 -0
  49. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/routes/share_routes.py +0 -0
  50. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/server/server.py +0 -0
  51. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/share.py +0 -0
  52. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/share_tui.py +0 -0
  53. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/situational_scoring.py +0 -0
  54. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/state.py +0 -0
  55. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/tools.py +0 -0
  56. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/tui/__init__.py +0 -0
  57. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/tui/history_dialog.py +0 -0
  58. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/tui/mcp_dialog.py +0 -0
  59. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/tui/model_dialog.py +0 -0
  60. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/tui/resume_dialog.py +0 -0
  61. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/tui/tools_dialog.py +0 -0
  62. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/tui/update_dialog.py +0 -0
  63. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/vector_memory.py +0 -0
  64. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli/workspace.py +0 -0
  65. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli.egg-info/SOURCES.txt +0 -0
  66. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli.egg-info/dependency_links.txt +0 -0
  67. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli.egg-info/entry_points.txt +0 -0
  68. {utim_cli-1.46.8 → utim_cli-1.46.10}/utim_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: utim-cli
3
- Version: 1.46.8
3
+ Version: 1.46.10
4
4
  Summary: UTIM – Universal Terminal Intelligence Manager. A powerful agentic AI coding assistant for your terminal.
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://utim.dev
@@ -32,8 +32,6 @@ Requires-Dist: rich>=13.0.0
32
32
  Requires-Dist: prompt_toolkit>=3.0.0
33
33
  Requires-Dist: mcp>=0.1.0
34
34
  Requires-Dist: nest-asyncio>=1.5.0
35
- Requires-Dist: python-multipart>=0.0.7
36
- Requires-Dist: slowapi>=0.1.9
37
35
  Requires-Dist: sqlalchemy>=2.0.0
38
36
  Provides-Extra: search
39
37
  Requires-Dist: scrapy>=2.11.0; extra == "search"
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "utim-cli"
7
- version = "1.46.8"
7
+ version = "1.46.10"
8
8
  description = "UTIM – Universal Terminal Intelligence Manager. A powerful agentic AI coding assistant for your terminal."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -34,8 +34,6 @@ dependencies = [
34
34
  "prompt_toolkit>=3.0.0",
35
35
  "mcp>=0.1.0",
36
36
  "nest-asyncio>=1.5.0",
37
- "python-multipart>=0.0.7",
38
- "slowapi>=0.1.9",
39
37
  "sqlalchemy>=2.0.0",
40
38
  ]
41
39
 
@@ -141,15 +141,46 @@ def login() -> None:
141
141
  poll_interval = data.get("poll_interval", 3)
142
142
 
143
143
  # Step 2 — show the user what to do
144
- print(f"\n {BOLD}To sign in, visit:{RESET}")
145
- print(f"\n {BLUE}{verify_url}{RESET}\n")
146
- print(f" Or visit {BLUE}{WEB_URL}/activate{RESET} and enter code:")
147
- print(f"\n {YELLOW}{BOLD}{user_code}{RESET}\n")
148
- print(f" {DIM}Waiting for you to authorize in the browser… (expires in {expires_in // 60} minutes){RESET}\n")
149
- sys.stdout.flush()
150
-
151
- # Try to open the browser in background (convenience — not required)
152
- threading.Thread(target=webbrowser.open, args=(verify_url,), daemon=True).start()
144
+ import os as _os
145
+ import subprocess as _sub
146
+ _is_termux = (
147
+ (_os.environ.get("PREFIX", "").find("com.termux") != -1) or
148
+ _os.path.exists("/data/data/com.termux")
149
+ )
150
+
151
+ if _is_termux:
152
+ # On Termux: opening a browser programmatically doesn't work.
153
+ # Instead, copy the link to clipboard and ask user to open it manually.
154
+ try:
155
+ _sub.run(
156
+ ["termux-clipboard-set", verify_url],
157
+ timeout=3, check=False,
158
+ stdout=_sub.DEVNULL, stderr=_sub.DEVNULL,
159
+ )
160
+ clipboard_notice = f" {GREEN}✓ Sign-in link copied to clipboard!{RESET}"
161
+ except Exception:
162
+ clipboard_notice = f" {YELLOW}(Could not copy automatically — copy the link above manually){RESET}"
163
+
164
+ print(f"\n {BOLD}{'─' * 48}{RESET}")
165
+ print(f"\n {BOLD}UTIM Sign-In — Android / Termux{RESET}\n")
166
+ print(f" 1. Open your browser and paste this link:\n")
167
+ print(f" {BLUE}{verify_url}{RESET}\n")
168
+ print(f" 2. Or go to {BLUE}{WEB_URL}/activate{RESET}")
169
+ print(f" and enter this code:\n")
170
+ print(f" {YELLOW}{BOLD} {user_code} {RESET}\n")
171
+ print(clipboard_notice)
172
+ print(f"\n {DIM}Waiting for you to authorize… (expires in {expires_in // 60} min){RESET}\n")
173
+ print(f" {BOLD}{'─' * 48}{RESET}\n")
174
+ sys.stdout.flush()
175
+ else:
176
+ print(f"\n {BOLD}To sign in, visit:{RESET}")
177
+ print(f"\n {BLUE}{verify_url}{RESET}\n")
178
+ print(f" Or visit {BLUE}{WEB_URL}/activate{RESET} and enter code:")
179
+ print(f"\n {YELLOW}{BOLD}{user_code}{RESET}\n")
180
+ print(f" {DIM}Waiting for you to authorize in the browser… (expires in {expires_in // 60} minutes){RESET}\n")
181
+ sys.stdout.flush()
182
+ # Try to open the browser in background (desktop only)
183
+ threading.Thread(target=webbrowser.open, args=(verify_url,), daemon=True).start()
153
184
 
154
185
  # Step 3 — poll in background thread, signal main thread via Event
155
186
  result: dict = {}
@@ -596,7 +596,7 @@ def _print_animated_banner(animated: bool = True):
596
596
  else:
597
597
  console.print(f"[bold {color}]{BANNER_BIG}[/bold {color}]")
598
598
 
599
- console.print(f" [bold white]U Think I Make[/bold white] [dim]v1.46.8[/dim]")
599
+ console.print(f" [bold white]U Think I Make[/bold white] [dim]v1.46.10[/dim]")
600
600
  user_email = config.email
601
601
  user_type = "UTIM Community"
602
602
  api_key = config.get("api_key")
@@ -1334,12 +1334,25 @@ def _handle_command(cmd: str, orchestrator: Orchestrator, app_ref) -> None:
1334
1334
  console.print(f"\n[yellow]⚠ You are already logged in as [bold]{config.email}[/bold].[/yellow]")
1335
1335
  console.print("[dim]Run [white]/logout[/white] first if you want to switch accounts.[/dim]\n")
1336
1336
  else:
1337
+ import os as _os
1338
+ _is_termux = (
1339
+ (_os.environ.get("PREFIX", "").find("com.termux") != -1) or
1340
+ _os.path.exists("/data/data/com.termux")
1341
+ )
1342
+
1337
1343
  def _do_login():
1338
1344
  try:
1339
1345
  auth.login()
1340
1346
  except Exception as exc:
1341
1347
  console.print(f"\n [bold red]✗ Login failed: {exc}[/bold red]\n")
1342
- run_in_terminal(_do_login)
1348
+
1349
+ if _is_termux:
1350
+ # On Termux, run directly — run_in_terminal suspends prompt_toolkit's
1351
+ # input handler for the entire polling duration (up to 10 min), making
1352
+ # the input area vanish and the CLI appear frozen.
1353
+ _do_login()
1354
+ else:
1355
+ run_in_terminal(_do_login)
1343
1356
  orchestrator.email = config.email
1344
1357
  orchestrator.token = config.token
1345
1358
 
@@ -2740,7 +2753,7 @@ def check_and_update_background():
2740
2753
  return
2741
2754
 
2742
2755
  latest_ver = resp.json().get("version", "")
2743
- current_ver = "1.46.8"
2756
+ current_ver = "1.46.10"
2744
2757
 
2745
2758
  def parse_ver(v):
2746
2759
  return [int(x) for x in v.split(".") if x.isdigit()]
@@ -2939,7 +2952,7 @@ app = typer.Typer()
2939
2952
  def version_callback(value: bool):
2940
2953
  if value:
2941
2954
  import typer
2942
- print("U Think I Make v1.46.8")
2955
+ print("U Think I Make v1.46.10")
2943
2956
  raise typer.Exit()
2944
2957
 
2945
2958
  @app.callback(invoke_without_command=True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: utim-cli
3
- Version: 1.46.8
3
+ Version: 1.46.10
4
4
  Summary: UTIM – Universal Terminal Intelligence Manager. A powerful agentic AI coding assistant for your terminal.
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://utim.dev
@@ -32,8 +32,6 @@ Requires-Dist: rich>=13.0.0
32
32
  Requires-Dist: prompt_toolkit>=3.0.0
33
33
  Requires-Dist: mcp>=0.1.0
34
34
  Requires-Dist: nest-asyncio>=1.5.0
35
- Requires-Dist: python-multipart>=0.0.7
36
- Requires-Dist: slowapi>=0.1.9
37
35
  Requires-Dist: sqlalchemy>=2.0.0
38
36
  Provides-Extra: search
39
37
  Requires-Dist: scrapy>=2.11.0; extra == "search"
@@ -10,8 +10,6 @@ rich>=13.0.0
10
10
  prompt_toolkit>=3.0.0
11
11
  mcp>=0.1.0
12
12
  nest-asyncio>=1.5.0
13
- python-multipart>=0.0.7
14
- slowapi>=0.1.9
15
13
  sqlalchemy>=2.0.0
16
14
 
17
15
  [full]
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