utim-cli 1.44.1__tar.gz → 1.44.2__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 (42) hide show
  1. {utim_cli-1.44.1 → utim_cli-1.44.2}/CHANGELOG.md +37 -29
  2. {utim_cli-1.44.1/utim_cli.egg-info → utim_cli-1.44.2}/PKG-INFO +1 -1
  3. {utim_cli-1.44.1 → utim_cli-1.44.2}/pyproject.toml +1 -1
  4. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/mcp_client.py +2 -1
  5. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/mcp_registry.json +1 -0
  6. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/tools.py +5 -0
  7. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/utim.py +19 -16
  8. {utim_cli-1.44.1 → utim_cli-1.44.2/utim_cli.egg-info}/PKG-INFO +1 -1
  9. {utim_cli-1.44.1 → utim_cli-1.44.2}/LICENSE +0 -0
  10. {utim_cli-1.44.1 → utim_cli-1.44.2}/MANIFEST.in +0 -0
  11. {utim_cli-1.44.1 → utim_cli-1.44.2}/README.md +0 -0
  12. {utim_cli-1.44.1 → utim_cli-1.44.2}/setup.cfg +0 -0
  13. {utim_cli-1.44.1 → utim_cli-1.44.2}/setup.py +0 -0
  14. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/__init__.py +0 -0
  15. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/agent.py +0 -0
  16. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/auth.py +0 -0
  17. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/backup.py +0 -0
  18. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/billing.py +0 -0
  19. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/blender_agent.py +0 -0
  20. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/bootstrap.py +0 -0
  21. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/client_utils.py +0 -0
  22. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/config.py +0 -0
  23. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/context_pruner.py +0 -0
  24. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/doctor.py +0 -0
  25. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/knowledge_graph.py +0 -0
  26. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/logger.py +0 -0
  27. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/mcp_clean_wrapper.py +0 -0
  28. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/orchestrator.py +0 -0
  29. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/reflection.py +0 -0
  30. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/report.py +0 -0
  31. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/scrapy_search.py +0 -0
  32. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/share.py +0 -0
  33. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/share_tui.py +0 -0
  34. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/situational_scoring.py +0 -0
  35. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/state.py +0 -0
  36. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/vector_memory.py +0 -0
  37. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli/workspace.py +0 -0
  38. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli.egg-info/SOURCES.txt +0 -0
  39. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli.egg-info/dependency_links.txt +0 -0
  40. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli.egg-info/entry_points.txt +0 -0
  41. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli.egg-info/requires.txt +0 -0
  42. {utim_cli-1.44.1 → utim_cli-1.44.2}/utim_cli.egg-info/top_level.txt +0 -0
@@ -1,29 +1,37 @@
1
- # Changelog
2
-
3
- All notable changes to the UTIM CLI Agent will be documented in this file.
4
-
5
- ## [1.43.20] - 2026-07-01
6
-
7
- ### Added
8
- - **Local-Global Experience Vector DB Sync**: UTIM now carries the ChromaDB experience database across project folders automatically. On startup, the previous project's `experiences.json`, `vector_db`, and vector metadata files are copied to the current folder deleted from the old folder only after a successful paste. Last active folder is persisted server-side so the sync survives PC restarts.
9
- - **BYOK Provider Disconnection (key `x`)**: Press `x` in the model selector to view a list of connected custom providers and disconnect them. All associated models are removed from the model list instantly.
10
- - **Bring Your Own Key (BYOK) for Free Users**: Free-tier users can now connect any OpenAI-compatible provider using their own API key. BYOK models bypass UTIM quota limits and plan gating entirely.
11
- - **Dynamic Changelog & Version API**: `/api/changelog` parses `CHANGELOG.md` at request time and returns structured JSON. `/health` version field is also derived from `CHANGELOG.md` dynamically — deploying a new changelog auto-updates both the website changelog page and version badge.
12
- - **Changelog Tab on Website**: The terminal website now includes a `↻ Changelog` tab that fetches live release notes from the Railway server on load.
13
- - **Features Page Redesign**: The Features tab now displays a 9-card animated grid with per-feature glow icons, numbered labels, colored tags, and spring entrance animations — matching the full terminal aesthetic of the site.
14
- - **Last Project Folder Persistence**: Server stores each user's last active project directory in the database. Survives PC restarts and is used to drive the cross-folder experience DB sync.
15
- - **`GET /api/auth/last-folder` and `POST /api/auth/last-folder` Endpoints**: New authenticated REST endpoints to read/write a user's last active project folder path.
16
-
17
- ### Changed
18
- - **Plan Upgrade Credit Transition**: Free plan credit allowance ($1.00) is zeroed out instead of rolling over to the new paid plan's quota bank on upgrade.
19
- - **Hobby Plan Model Access**: Hobby plan `allowed_models` corrected to `"all"` so users can access the full model registry (not just free-tier models).
20
- - **BYOK Model Gating Bypass**: Orchestrator pre-flight checks now skip plan gating and UTIM credit checks for custom BYOK models since they use user-owned keys.
21
- - **Pricing Page Claims Cleaned**: Removed unsubstantiated marketing claims (`Dedicated elite endpoints`, `Autonomous team agents access`, `High-speed dedicated endpoints`, `All premium models (GPT-4o, Claude)`, `Synthetic Eye & VSIX tools`, `Claude Sonnet 4.6 (1 RPM)`, `10-session history storage`) from all pricing tier feature lists.
22
-
23
- ### Fixed
24
- - **BYOK Flow Display Bug**: Rewrote Add/Delete/BYOK-import dialogs to run on `sys.__stdout__` with `prompt_toolkit.prompt()` so they are never swallowed by the alt-screen buffer.
25
- - **Double-Exit Crash (TUI)**: Wrapped all keyboard exit callbacks (`ENTER`/`ESC`/`q`/`CTRL+C`) in `try...except` blocks to prevent double-fire tracebacks.
26
- - **`/changelog` Route No Longer Shows Legacy Page**: All website routes (including `/changelog`) now correctly map to the `<PowershellUI />` terminal component. Legacy standalone page removed.
27
-
28
- ---
29
-
1
+ # Changelog
2
+
3
+ All notable changes to the UTIM CLI Agent will be documented in this file.
4
+
5
+ ## [1.44.2] - 2026-07-02
6
+
7
+ ### Fixed
8
+ - **MCP Server Hang:** Fixed an issue where installing MCP servers (like Figma) without the `--stdio` flag would hang the CLI indefinitely. Added a 60-second initialization timeout and updated the preset registry to include required flags automatically.
9
+ - **Model Selection Crash:** Fixed an issue where the CLI would crash instantly when trying to open the `/model` selector on a production npm install due to an excluded server module.
10
+ - **Image Subagent Config:** Separated the Image Generation model and the Prompt Expander LLM in the subagent configuration UI, allowing users to configure both independently.
11
+ - **Minor:** Minor Bug Fixes
12
+
13
+ ## [1.43.20] - 2026-07-01
14
+
15
+ ### Added
16
+ - **Local-Global Experience Vector DB Sync**: UTIM now carries the ChromaDB experience database across project folders automatically. On startup, the previous project's `experiences.json`, `vector_db`, and vector metadata files are copied to the current folder — deleted from the old folder only after a successful paste. Last active folder is persisted server-side so the sync survives PC restarts.
17
+ - **BYOK Provider Disconnection (key `x`)**: Press `x` in the model selector to view a list of connected custom providers and disconnect them. All associated models are removed from the model list instantly.
18
+ - **Bring Your Own Key (BYOK) for Free Users**: Free-tier users can now connect any OpenAI-compatible provider using their own API key. BYOK models bypass UTIM quota limits and plan gating entirely.
19
+ - **Dynamic Changelog & Version API**: `/api/changelog` parses `CHANGELOG.md` at request time and returns structured JSON. `/health` version field is also derived from `CHANGELOG.md` dynamically deploying a new changelog auto-updates both the website changelog page and version badge.
20
+ - **Changelog Tab on Website**: The terminal website now includes a `↻ Changelog` tab that fetches live release notes from the Railway server on load.
21
+ - **Features Page Redesign**: The Features tab now displays a 9-card animated grid with per-feature glow icons, numbered labels, colored tags, and spring entrance animations matching the full terminal aesthetic of the site.
22
+ - **Last Project Folder Persistence**: Server stores each user's last active project directory in the database. Survives PC restarts and is used to drive the cross-folder experience DB sync.
23
+ - **`GET /api/auth/last-folder` and `POST /api/auth/last-folder` Endpoints**: New authenticated REST endpoints to read/write a user's last active project folder path.
24
+
25
+ ### Changed
26
+ - **Plan Upgrade Credit Transition**: Free plan credit allowance ($1.00) is zeroed out instead of rolling over to the new paid plan's quota bank on upgrade.
27
+ - **Hobby Plan Model Access**: Hobby plan `allowed_models` corrected to `"all"` so users can access the full model registry (not just free-tier models).
28
+ - **BYOK Model Gating Bypass**: Orchestrator pre-flight checks now skip plan gating and UTIM credit checks for custom BYOK models since they use user-owned keys.
29
+ - **Pricing Page Claims Cleaned**: Removed unsubstantiated marketing claims (`Dedicated elite endpoints`, `Autonomous team agents access`, `High-speed dedicated endpoints`, `All premium models (GPT-4o, Claude)`, `Synthetic Eye & VSIX tools`, `Claude Sonnet 4.6 (1 RPM)`, `10-session history storage`) from all pricing tier feature lists.
30
+
31
+ ### Fixed
32
+ - **BYOK Flow Display Bug**: Rewrote Add/Delete/BYOK-import dialogs to run on `sys.__stdout__` with `prompt_toolkit.prompt()` so they are never swallowed by the alt-screen buffer.
33
+ - **Double-Exit Crash (TUI)**: Wrapped all keyboard exit callbacks (`ENTER`/`ESC`/`q`/`CTRL+C`) in `try...except` blocks to prevent double-fire tracebacks.
34
+ - **`/changelog` Route No Longer Shows Legacy Page**: All website routes (including `/changelog`) now correctly map to the `<PowershellUI />` terminal component. Legacy standalone page removed.
35
+
36
+ ---
37
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: utim-cli
3
- Version: 1.44.1
3
+ Version: 1.44.2
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.44.1"
7
+ version = "1.44.2"
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"
@@ -114,9 +114,10 @@ class MCPManager:
114
114
  stack = AsyncExitStack()
115
115
  self._exit_stacks[name] = stack
116
116
 
117
+ import asyncio
117
118
  read, write = await stack.enter_async_context(stdio_client(server_params))
118
119
  session = await stack.enter_async_context(ClientSession(read, write))
119
- await session.initialize()
120
+ await asyncio.wait_for(session.initialize(), timeout=60.0)
120
121
 
121
122
  self.sessions[name] = session
122
123
 
@@ -357,6 +357,7 @@
357
357
  "name": "Figma MCP Server",
358
358
  "desc": "The Figma MCP server brings Figma design context directly into your AI workflow.",
359
359
  "pkg": "figma-developer-mcp",
360
+ "args": ["--stdio"],
360
361
  "author": "Community",
361
362
  "fields": [
362
363
  {
@@ -2223,6 +2223,11 @@ def generate_image(
2223
2223
  "black-forest-labs/flux.2-klein-4b",
2224
2224
  "black-forest-labs/flux.1-dev"
2225
2225
  ]
2226
+
2227
+ from utim_cli.config import config
2228
+ img_model = config.get("subagent_model_image_gen")
2229
+ if img_model:
2230
+ models_to_try = [img_model] + [m for m in models_to_try if m != img_model]
2226
2231
 
2227
2232
  headers = {
2228
2233
  "Authorization": f"Bearer {nvidia_key}",
@@ -584,7 +584,7 @@ def _print_animated_banner():
584
584
  # Speed up for spaces to make it feel more like typing
585
585
  time.sleep(0.002 if char == " " else 0.005)
586
586
 
587
- console.print(f"\n [bold white]U Think I Make[/bold white] [dim]v1.44.1[/dim]")
587
+ console.print(f"\n [bold white]U Think I Make[/bold white] [dim]v1.44.2[/dim]")
588
588
  user_email = config.email
589
589
  user_type = "UTIM Community"
590
590
  api_key = config.get("api_key")
@@ -1030,7 +1030,7 @@ def _handle_command(cmd: str, orchestrator: Orchestrator, app_ref) -> None:
1030
1030
  con.print(Panel(
1031
1031
  Text.from_markup(
1032
1032
  "[bold white]U Think I Make (UTIM)[/bold white]\n"
1033
- "[dim]Version 1.44.1[/dim]\n\n"
1033
+ "[dim]Version 1.44.2[/dim]\n\n"
1034
1034
  "The next-generation CLI agent for autonomous software engineering.\n"
1035
1035
  "Built with [bold #42bcf5]UTIM AI[/bold #42bcf5].\n\n"
1036
1036
  "[dim]Website:[/dim] https://utim.dev\n"
@@ -1428,8 +1428,10 @@ def _dialog_subagents_menu(orchestrator):
1428
1428
  "desc": f"Currently: {config.get('subagent_model_web_search', 'Default (Low / Qwen-Coder)')}"},
1429
1429
  {"key": "plan_project", "label": "📋 Planner Agent (plan_project)",
1430
1430
  "desc": f"Currently: {config.get('subagent_model_plan_project', 'Default (Low / Qwen-Coder)')}"},
1431
- {"key": "generate_image", "label": "🎨 Image Prompt Expander (generate_image)",
1431
+ {"key": "generate_image", "label": "🎨 Prompt Expander Model (generate_image)",
1432
1432
  "desc": f"Currently: {config.get('subagent_model_generate_image', 'Default (Low / Qwen-Coder)')}"},
1433
+ {"key": "image_gen", "label": "🖼️ Image Generator Model (image_gen)",
1434
+ "desc": f"Currently: {config.get('subagent_model_image_gen', 'Default (Flux Schnell)')}"},
1433
1435
  {"key": "back", "label": "Back to Main Model Settings", "desc": "Return to the previous screen"}
1434
1436
  ]
1435
1437
 
@@ -1461,7 +1463,6 @@ def _dialog_subagents_menu(orchestrator):
1461
1463
  def _dialog_model_main(orchestrator, target="main"):
1462
1464
  """Main model picker — dynamically fetches and filters OpenRouter models, keeping custom models."""
1463
1465
  from .config import config # local import avoids circular issues at module load
1464
- from utim_cli.server.models import MODEL_REGISTRY
1465
1466
 
1466
1467
  # ── Define allowed primary and helper models based on target ──────────────
1467
1468
  plan_name = config.get("user_plan", "free").lower()
@@ -1496,7 +1497,7 @@ def _dialog_model_main(orchestrator, target="main"):
1496
1497
  "x-ai/grok-4.3",
1497
1498
  "google/gemini-3.5-flash",
1498
1499
  "qwen/qwen3.7-max",
1499
- "stepfun/step-3.7-flash"
1500
+ "stepfun/step-3.7-flash",
1500
1501
 
1501
1502
  "anthropic/claude-sonnet-4.5",
1502
1503
  "anthropic/claude-sonnet-4.6",
@@ -1518,7 +1519,7 @@ def _dialog_model_main(orchestrator, target="main"):
1518
1519
  "x-ai/grok-build-0.1",
1519
1520
  "moonshotai/kimi-k2.5",
1520
1521
  })
1521
- elif target.startswith("subagent_") and target != "subagent_generate_image":
1522
+ elif target.startswith("subagent_") and target != "subagent_image_gen":
1522
1523
  approved_set = {
1523
1524
  "qwen/qwen3-coder:free"
1524
1525
  }
@@ -1548,7 +1549,7 @@ def _dialog_model_main(orchestrator, target="main"):
1548
1549
  "x-ai/grok-4.3",
1549
1550
  "google/gemini-3.5-flash",
1550
1551
  "qwen/qwen3.7-max",
1551
- "stepfun/step-3.7-flash"
1552
+ "stepfun/step-3.7-flash",
1552
1553
 
1553
1554
  "anthropic/claude-sonnet-4.5",
1554
1555
  "anthropic/claude-sonnet-4.6",
@@ -1571,7 +1572,7 @@ def _dialog_model_main(orchestrator, target="main"):
1571
1572
  "moonshotai/kimi-k2.5",
1572
1573
  })
1573
1574
  else:
1574
- # subagent_generate_image
1575
+ # subagent_image_gen
1575
1576
  approved_set = {
1576
1577
  "qwen/qwen3-coder:free",
1577
1578
  "nvidia/nemotron-nano-12b-v2-vl:free",
@@ -2381,14 +2382,14 @@ def _dialog_disconnect_provider(orchestrator):
2381
2382
  active_still_exists = any(m["model_id"] == active_model for m in config.custom_models)
2382
2383
  if not active_still_exists and active_model not in ["cohere/north-mini-code:free", "anthropic/claude-sonnet-4.6", "qwen/qwen3-coder:free"]:
2383
2384
  is_custom_removed = True
2384
- from utim_cli.server.models import MODEL_REGISTRY
2385
- if active_model in MODEL_REGISTRY:
2385
+ # Hardcoded check since we cannot import utim_cli.server in production CLI builds
2386
+ # (as the server module is excluded from the package in pyproject.toml)
2387
+ if active_model.startswith("openai/") or active_model.startswith("anthropic/") or active_model.startswith("google/") or active_model.startswith("cohere/"):
2386
2388
  is_custom_removed = False
2387
2389
 
2388
2390
  if is_custom_removed:
2389
- from utim_cli.server.models import DEFAULT_MODEL
2390
- orchestrator.model_id = DEFAULT_MODEL
2391
- disc_console.print(f"[dim]Active model removed. Switched back to {DEFAULT_MODEL}[/dim]\n")
2391
+ orchestrator.model_id = "cohere/north-mini-code:free"
2392
+ disc_console.print(f"[dim]Active model removed. Switched back to cohere/north-mini-code:free[/dim]\n")
2392
2393
  else:
2393
2394
  disc_console.print("\n[dim]Cancelled.[/dim]\n")
2394
2395
 
@@ -2801,6 +2802,8 @@ def _dialog_mcp_install(orchestrator):
2801
2802
  preset_info = presets_config[key]
2802
2803
  server_name = key
2803
2804
  args.append(preset_info["pkg"])
2805
+ if "args" in preset_info:
2806
+ args.extend(preset_info["args"])
2804
2807
 
2805
2808
  for field in preset_info["fields"]:
2806
2809
  prompt_str = field["prompt"]
@@ -4557,7 +4560,7 @@ def check_and_update_background():
4557
4560
  return
4558
4561
 
4559
4562
  latest_ver = resp.json().get("version", "")
4560
- current_ver = "1.44.1"
4563
+ current_ver = "1.44.2"
4561
4564
 
4562
4565
  def parse_ver(v):
4563
4566
  return [int(x) for x in v.split(".") if x.isdigit()]
@@ -4671,7 +4674,7 @@ def _dialog_auto_update():
4671
4674
  _result[0] = ("network_error", False)
4672
4675
  return
4673
4676
  latest = resp.json().get("version", "")
4674
- current = "1.44.1"
4677
+ current = "1.44.2"
4675
4678
 
4676
4679
  def pv(v):
4677
4680
  return [int(x) for x in v.split(".") if x.isdigit()]
@@ -4894,7 +4897,7 @@ app = typer.Typer()
4894
4897
  def version_callback(value: bool):
4895
4898
  if value:
4896
4899
  import typer
4897
- print("U Think I Make v1.44.1")
4900
+ print("U Think I Make v1.44.2")
4898
4901
  raise typer.Exit()
4899
4902
 
4900
4903
  @app.callback(invoke_without_command=True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: utim-cli
3
- Version: 1.44.1
3
+ Version: 1.44.2
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