utim-cli 1.46.0__tar.gz → 1.46.5__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 (67) hide show
  1. {utim_cli-1.46.0/utim_cli.egg-info → utim_cli-1.46.5}/PKG-INFO +1 -1
  2. {utim_cli-1.46.0 → utim_cli-1.46.5}/pyproject.toml +1 -1
  3. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/auth.py +5 -0
  4. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/router.py +6 -1
  5. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/tui/model_dialog.py +8 -52
  6. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/utim.py +3 -3
  7. {utim_cli-1.46.0 → utim_cli-1.46.5/utim_cli.egg-info}/PKG-INFO +1 -1
  8. {utim_cli-1.46.0 → utim_cli-1.46.5}/CHANGELOG.md +0 -0
  9. {utim_cli-1.46.0 → utim_cli-1.46.5}/LICENSE +0 -0
  10. {utim_cli-1.46.0 → utim_cli-1.46.5}/MANIFEST.in +0 -0
  11. {utim_cli-1.46.0 → utim_cli-1.46.5}/README.md +0 -0
  12. {utim_cli-1.46.0 → utim_cli-1.46.5}/setup.cfg +0 -0
  13. {utim_cli-1.46.0 → utim_cli-1.46.5}/setup.py +0 -0
  14. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/__init__.py +0 -0
  15. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/agent.py +0 -0
  16. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/backup.py +0 -0
  17. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/blender_agent.py +0 -0
  18. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/bootstrap.py +0 -0
  19. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/client_utils.py +0 -0
  20. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/config.py +0 -0
  21. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/constants.py +0 -0
  22. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/context_pruner.py +0 -0
  23. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/doctor.py +0 -0
  24. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/knowledge_graph.py +0 -0
  25. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/logger.py +0 -0
  26. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/mcp_clean_wrapper.py +0 -0
  27. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/mcp_client.py +0 -0
  28. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/mcp_registry.json +0 -0
  29. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/orchestrator.py +0 -0
  30. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/reflection.py +0 -0
  31. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/report.py +0 -0
  32. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/scrapy_search.py +0 -0
  33. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/__init__.py +0 -0
  34. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/auth.py +0 -0
  35. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/db.py +0 -0
  36. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/email_utils.py +0 -0
  37. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/firebase.py +0 -0
  38. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/history.py +0 -0
  39. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/logging_config.py +0 -0
  40. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/models.py +0 -0
  41. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/rate_limit.py +0 -0
  42. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/routes/__init__.py +0 -0
  43. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/routes/auth_routes.py +0 -0
  44. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/routes/completion_routes.py +0 -0
  45. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/routes/credit_routes.py +0 -0
  46. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/routes/quota_routes.py +0 -0
  47. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/routes/session_routes.py +0 -0
  48. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/routes/share_routes.py +0 -0
  49. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/server/server.py +0 -0
  50. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/share.py +0 -0
  51. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/share_tui.py +0 -0
  52. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/situational_scoring.py +0 -0
  53. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/state.py +0 -0
  54. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/tools.py +0 -0
  55. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/tui/__init__.py +0 -0
  56. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/tui/history_dialog.py +0 -0
  57. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/tui/mcp_dialog.py +0 -0
  58. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/tui/resume_dialog.py +0 -0
  59. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/tui/tools_dialog.py +0 -0
  60. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/tui/update_dialog.py +0 -0
  61. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/vector_memory.py +0 -0
  62. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli/workspace.py +0 -0
  63. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli.egg-info/SOURCES.txt +0 -0
  64. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli.egg-info/dependency_links.txt +0 -0
  65. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli.egg-info/entry_points.txt +0 -0
  66. {utim_cli-1.46.0 → utim_cli-1.46.5}/utim_cli.egg-info/requires.txt +0 -0
  67. {utim_cli-1.46.0 → utim_cli-1.46.5}/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.0
3
+ Version: 1.46.5
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "utim-cli"
7
- version = "1.46.0"
7
+ version = "1.46.5"
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"
@@ -92,6 +92,11 @@ def login() -> None:
92
92
  """
93
93
  Sign in by prompting the user to copy their UTIM API key from the web dashboard.
94
94
  """
95
+ # Sleep briefly to ensure prompt_toolkit's terminal-suspension/clearing sequences
96
+ # are fully processed by the terminal emulator before we print.
97
+ import time
98
+ time.sleep(0.3)
99
+
95
100
  # ANSI escape codes for formatting
96
101
  PURPLE = "\033[1;35m"
97
102
  BLUE = "\033[1;34m"
@@ -62,7 +62,12 @@ if allowed_origins_env:
62
62
  else:
63
63
  # Default to secure origins in prod, wildcard in dev
64
64
  is_prod = os.environ.get("RAILWAY_ENVIRONMENT_NAME", "").lower() in ("production", "prod") or os.environ.get("NODE_ENV") == "production"
65
- allowed_origins = ["https://utim.dev", "https://api.utim.dev"] if is_prod else ["*"]
65
+ allowed_origins = [
66
+ "https://utim.dev",
67
+ "https://api.utim.dev",
68
+ "http://localhost:5173",
69
+ "http://localhost:3000"
70
+ ] if is_prod else ["*"]
66
71
 
67
72
  app.add_middleware(
68
73
  CORSMiddleware,
@@ -128,32 +128,6 @@ def _dialog_model_main(orchestrator, target="main"):
128
128
  }
129
129
  if is_paid_plan:
130
130
  approved_set.update({
131
- "recraft/recraft-v4.1",
132
- "recraft/recraft-v4.1-pro",
133
- "recraft/recraft-v4.1-utility",
134
- "recraft/recraft-v4.1-utility-pro",
135
- "recraft/recraft-v4.1-vector",
136
- "recraft/recraft-v4.1-pro-vector",
137
- "x-ai/grok-imagine-image-quality",
138
- "microsoft/mai-image-2.5",
139
- "sourceful/riverflow-v2.5-fast",
140
- "sourceful/riverflow-v2.5-pro",
141
- "google/gemini-3-pro-image",
142
- "google/gemini-3.1-flash-image",
143
- "openai/gpt-image-1",
144
- "openai/gpt-image-1-mini",
145
- "openai/gpt-image-2",
146
- "google/gemini-2.5-flash-image",
147
- "openai/gpt-5-image",
148
- "openai/gpt-5-image-mini",
149
- "google/gemini-3-pro-image-preview",
150
- "black-forest-labs/flux.2-pro",
151
- "black-forest-labs/flux.2-flex",
152
- "black-forest-labs/flux.2-max",
153
- "bytedance-seed/seedream-4.5",
154
- "black-forest-labs/flux.2-klein-4b",
155
- "sourceful/riverflow-v2-fast",
156
- "sourceful/riverflow-v2-pro",
157
131
  "anthropic/claude-sonnet-4.6",
158
132
  "inclusionai/ling-2.6-flash",
159
133
  "xiaomi/mimo-v2.5",
@@ -207,32 +181,6 @@ def _dialog_model_main(orchestrator, target="main"):
207
181
  }
208
182
  if is_paid_plan:
209
183
  approved_set.update({
210
- "recraft/recraft-v4.1",
211
- "recraft/recraft-v4.1-pro",
212
- "recraft/recraft-v4.1-utility",
213
- "recraft/recraft-v4.1-utility-pro",
214
- "recraft/recraft-v4.1-vector",
215
- "recraft/recraft-v4.1-pro-vector",
216
- "x-ai/grok-imagine-image-quality",
217
- "microsoft/mai-image-2.5",
218
- "sourceful/riverflow-v2.5-fast",
219
- "sourceful/riverflow-v2.5-pro",
220
- "google/gemini-3-pro-image",
221
- "google/gemini-3.1-flash-image",
222
- "openai/gpt-image-1",
223
- "openai/gpt-image-1-mini",
224
- "openai/gpt-image-2",
225
- "google/gemini-2.5-flash-image",
226
- "openai/gpt-5-image",
227
- "openai/gpt-5-image-mini",
228
- "google/gemini-3-pro-image-preview",
229
- "black-forest-labs/flux.2-pro",
230
- "black-forest-labs/flux.2-flex",
231
- "black-forest-labs/flux.2-max",
232
- "bytedance-seed/seedream-4.5",
233
- "black-forest-labs/flux.2-klein-4b",
234
- "sourceful/riverflow-v2-fast",
235
- "sourceful/riverflow-v2-pro",
236
184
  DEFAULT_MODEL,
237
185
  "anthropic/claude-sonnet-4.6",
238
186
  "inclusionai/ling-2.6-flash",
@@ -586,12 +534,20 @@ def _dialog_model_main(orchestrator, target="main"):
586
534
  mid = rm.get("id")
587
535
  if mid:
588
536
  live_descs[mid] = rm.get("description", "")
537
+ # Dynamically approve all free models for both free and paid plans
538
+ if mid.endswith(":free") or ":free" in mid:
539
+ approved_set.add(mid)
589
540
  except Exception:
590
541
  pass # Offline — use local descriptions only
591
542
 
592
543
  primary_models = []
593
544
  for mid in approved_set:
594
545
  desc_val, tags_val = model_descs.get(mid, (live_descs.get(mid, "Fast, efficient model."), []))
546
+ # Tag any free model with 'free' tag dynamically
547
+ if mid.endswith(":free") or ":free" in mid:
548
+ if "free" not in tags_val:
549
+ tags_val = list(tags_val) + ["free"]
550
+
595
551
  primary_models.append({
596
552
  "model_id": mid,
597
553
  "desc": desc_val,
@@ -585,7 +585,7 @@ def _print_animated_banner():
585
585
  # Speed up for spaces to make it feel more like typing
586
586
  time.sleep(0.002 if char == " " else 0.005)
587
587
 
588
- console.print(f"\n [bold white]U Think I Make[/bold white] [dim]v1.46.0[/dim]")
588
+ console.print(f"\n [bold white]U Think I Make[/bold white] [dim]v1.46.5[/dim]")
589
589
  user_email = config.email
590
590
  user_type = "UTIM Community"
591
591
  api_key = config.get("api_key")
@@ -2691,7 +2691,7 @@ def check_and_update_background():
2691
2691
  return
2692
2692
 
2693
2693
  latest_ver = resp.json().get("version", "")
2694
- current_ver = "1.46.0"
2694
+ current_ver = "1.46.5"
2695
2695
 
2696
2696
  def parse_ver(v):
2697
2697
  return [int(x) for x in v.split(".") if x.isdigit()]
@@ -2887,7 +2887,7 @@ app = typer.Typer()
2887
2887
  def version_callback(value: bool):
2888
2888
  if value:
2889
2889
  import typer
2890
- print("U Think I Make v1.46.0")
2890
+ print("U Think I Make v1.46.5")
2891
2891
  raise typer.Exit()
2892
2892
 
2893
2893
  @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.0
3
+ Version: 1.46.5
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
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