utim-cli 1.46.32__tar.gz → 1.46.34__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 (74) hide show
  1. {utim_cli-1.46.32 → utim_cli-1.46.34}/CHANGELOG.md +22 -4
  2. {utim_cli-1.46.32/utim_cli.egg-info → utim_cli-1.46.34}/PKG-INFO +1 -1
  3. {utim_cli-1.46.32 → utim_cli-1.46.34}/pyproject.toml +1 -1
  4. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/__init__.py +1 -1
  5. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/_version.py +1 -1
  6. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/config.py +34 -46
  7. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/orchestrator.py +159 -340
  8. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/tui/model_dialog.py +20 -5
  9. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/utim.py +33 -13
  10. {utim_cli-1.46.32 → utim_cli-1.46.34/utim_cli.egg-info}/PKG-INFO +1 -1
  11. {utim_cli-1.46.32 → utim_cli-1.46.34}/LICENSE +0 -0
  12. {utim_cli-1.46.32 → utim_cli-1.46.34}/MANIFEST.in +0 -0
  13. {utim_cli-1.46.32 → utim_cli-1.46.34}/README.md +0 -0
  14. {utim_cli-1.46.32 → utim_cli-1.46.34}/setup.cfg +0 -0
  15. {utim_cli-1.46.32 → utim_cli-1.46.34}/setup.py +0 -0
  16. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/agent.py +0 -0
  17. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/auth.py +0 -0
  18. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/backup.py +0 -0
  19. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/blender_agent.py +0 -0
  20. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/bootstrap.py +0 -0
  21. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/client_utils.py +0 -0
  22. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/constants.py +0 -0
  23. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/context_pruner.py +0 -0
  24. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/doctor.py +0 -0
  25. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/knowledge_graph.py +0 -0
  26. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/local_db.py +0 -0
  27. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/logger.py +0 -0
  28. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/mcp_clean_wrapper.py +0 -0
  29. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/mcp_client.py +0 -0
  30. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/mcp_registry.json +0 -0
  31. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/reflection.py +0 -0
  32. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/report.py +0 -0
  33. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/scrapy_search.py +0 -0
  34. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/__init__.py +0 -0
  35. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/auth.py +0 -0
  36. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/db.py +0 -0
  37. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/email_utils.py +0 -0
  38. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/exchange_rate.py +0 -0
  39. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/firebase.py +0 -0
  40. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/history.py +0 -0
  41. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/logging_config.py +0 -0
  42. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/models.py +0 -0
  43. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/pricing_updater.py +0 -0
  44. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/rate_limit.py +0 -0
  45. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/router.py +0 -0
  46. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/routes/__init__.py +0 -0
  47. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/routes/auth_routes.py +0 -0
  48. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/routes/completion_routes.py +0 -0
  49. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/routes/credit_routes.py +0 -0
  50. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/routes/feedback_routes.py +0 -0
  51. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/routes/quota_routes.py +0 -0
  52. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/routes/session_routes.py +0 -0
  53. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/routes/share_routes.py +0 -0
  54. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/server/server.py +0 -0
  55. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/share.py +0 -0
  56. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/share_tui.py +0 -0
  57. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/situational_scoring.py +0 -0
  58. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/state.py +0 -0
  59. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/tools.py +0 -0
  60. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/tui/__init__.py +0 -0
  61. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/tui/feedback_dialog.py +0 -0
  62. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/tui/history_dialog.py +0 -0
  63. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/tui/mcp_dialog.py +0 -0
  64. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/tui/resume_dialog.py +0 -0
  65. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/tui/tools_dialog.py +0 -0
  66. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/tui/update_dialog.py +0 -0
  67. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/utilities.py +0 -0
  68. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/vector_memory.py +0 -0
  69. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli/workspace.py +0 -0
  70. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli.egg-info/SOURCES.txt +0 -0
  71. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli.egg-info/dependency_links.txt +0 -0
  72. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli.egg-info/entry_points.txt +0 -0
  73. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli.egg-info/requires.txt +0 -0
  74. {utim_cli-1.46.32 → utim_cli-1.46.34}/utim_cli.egg-info/top_level.txt +0 -0
@@ -2,7 +2,28 @@
2
2
 
3
3
  All notable changes to the UTIM CLI Agent will be documented in this file.
4
4
 
5
- ## [1.46.32] - 2026-07-11
5
+ ## [1.46.34] - 2026-07-11
6
+
7
+ ### Added
8
+ - **Expanded Rotating Tips System**: Expanded the CLI helper system with 18 pre-written tips covering shortcut keybinds, proxy configuration, model switching, and chat management. Updated rotation logic to advance the tip every 3 requests rather than on every turn to prevent rapid text cycling.
9
+ - **Strict Disabled Tools Directives**: Rewrote system prompt directives to inject a hard "zero tools available" warning when all tools are turned off, prompting the agent to correctly answer "I currently don't have any tools".
10
+
11
+ ### Fixed
12
+ - **Silent Tool Call Blocking**: Fixed tool execution dispatch to silently deny disabled tools to the user (instead of displaying console warning panels) while quietly returning a reject instruction to the model.
13
+ - **Zero-Bypass MCP Execution Guard**: Extended the orchestrator's disabled tools validator to cover MCP sessions and custom tool routes before any early return execution paths can be taken.
14
+
15
+ ## [1.46.33] - 2026-07-11
16
+
17
+ ### Added
18
+ - **Global User-Agent Shielding**: Upgraded request session patches to inject browser-like User-Agents (`Chrome/120.0.0.0`) on all outbound HTTP calls, bypassing proxy and WAF rate-limiting.
19
+ - **Added /sslverify command**: Integrated a local slash command `/sslverify` to toggle SSL verification directly from the CLI input prompt without needing to edit config files manually.
20
+
21
+ ### Fixed
22
+ - **BYOK & Custom Model Wizard Input Lag**: Fixed a bug where prompt inputs (e.g. entering provider number or API key) were buffered/hidden during the wizard flows. Decoupled input prompt streams in `_safe_prompt` by writing directly to `sys.__stdout__` and reading from `sys.__stdin__` to bypass `prompt_toolkit` interceptors.
23
+ - **Improved API Auth Error Feedback**: Added specialized HTTPError handlers in the BYOK model discovery flow to catch 401 (Unauthorized) and 403 (Forbidden) response codes and print clear, actionable explanations instead of generic request tracebacks.
24
+ - **Website GitHub Link Removal**: Removed GitHub project URLs, core repository connection cards, and community links from the landing pages and pricing documents.
25
+
26
+ ## [1.46.31] - 2026-07-11
6
27
 
7
28
  ### Added
8
29
  - **Dynamic Console Glyph Fallbacks**: Detected legacy Windows terminals (where `WT_SESSION` is not set) and automatically fell back to standard ASCII symbols (`>` and `->`) instead of unicode characters (`❯`, `▶`, and `➔`) to prevent `⍰` or empty box rendering issues.
@@ -13,9 +34,6 @@ All notable changes to the UTIM CLI Agent will be documented in this file.
13
34
  - **Global Config Null-Safety Improvements**: Fixed multiple potential crashes across the tools dialog, share manager, and usage dashboard when keys like `disabled_tools`, `mcpServers`, `role`, or `user_plan` are missing or set to `null` in config files.
14
35
  - **Server Upload Limit & Connection Resets**: Increased the `/shares/upload` workspace file sharing size limit from 4MB to 25MB on the server. Added stream consumption middleware handlers to prevent connection termination resets and `SSLEOFError` crashes on the client during larger uploads.
15
36
  - **Modern prompt_toolkit Style Crash**: Fixed a crash (`ValueError: Wrong color format 'dim'`) on lists with scrolling indicators (like the model dialog or history dialog) when run on newer versions of `prompt_toolkit` (3.0.40+) by correcting the shorthand styling `'dim fg:#f9e2af'` to `'class:dim fg:#f9e2af'`.
16
- - **User-Agent Shielding & HTTP 429 Proxy Blocks**: Patched the global requests Session initializer to spoof a standard browser User-Agent, preventing corporate firewalls/proxies from blocking or rate-limiting requests. Added HTML-stripping parser helpers to the orchestrator to extract and display readable error details directly inside the offline connection panels if a proxy returns an HTTP 429.
17
- - **Added /sslverify command**: Integrated a local slash command `/sslverify` to toggle SSL verification directly from the CLI input prompt without needing to edit config files manually.
18
- - **Automated SSL Verification Fallback**: Implemented an automated, silent self-healing retry mechanism inside the requests wrapper. If UTIM encounters an SSL validation failure (commonly caused by decrypting proxies/firewalls in corporate or local networks), it automatically suppresses warnings, updates the config file to persist `"verify_ssl": false`, and retries the connection silently in the background with SSL verification disabled, preventing any service interruption without displaying warning messages to the user.
19
37
 
20
38
  ## [1.46.29] - 2026-07-11
21
39
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: utim-cli
3
- Version: 1.46.32
3
+ Version: 1.46.34
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.32"
7
+ version = "1.46.34"
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"
@@ -5,7 +5,7 @@ try:
5
5
  from utim_cli._version import VERSION as __version__
6
6
  except ImportError:
7
7
  # Fallback during first-install / editable-install edge cases
8
- __version__ = "1.46.32"
8
+ __version__ = "1.46.34"
9
9
 
10
10
  import builtins, os, pathlib, urllib.parse, re
11
11
 
@@ -11,4 +11,4 @@
11
11
  # from here so every surface stays in sync automatically.
12
12
  # ─────────────────────────────────────────────────────────────────────────────
13
13
 
14
- VERSION = "1.46.32"
14
+ VERSION = "1.46.34"
@@ -22,62 +22,50 @@ class Config:
22
22
  self._global_data: Dict[str, Any] = {}
23
23
  self._local_data: Dict[str, Any] = {}
24
24
  self._load()
25
- # Always inject a browser User-Agent to prevent firewalls/proxies blocking default python-requests
25
+ # Always inject a browser User-Agent to prevent firewalls/proxies blocking default python-requests.
26
+ # We patch Session.request (not __init__) so it applies to ALL sessions regardless of when
27
+ # they were created, and even when callers pass their own headers dict (the UA is merged in
28
+ # without overwriting any caller-supplied headers that may already have a User-Agent set).
26
29
  try:
27
- import requests
28
- original_init = requests.Session.__init__
29
- def patched_init(self_session, *args, **kwargs):
30
- original_init(self_session, *args, **kwargs)
31
- self_session.headers.update({
32
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
33
- })
34
- requests.Session.__init__ = patched_init
30
+ import requests as _req_mod
31
+ _BROWSER_UA = (
32
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
33
+ "AppleWebKit/537.36 (KHTML, like Gecko) "
34
+ "Chrome/120.0.0.0 Safari/537.36"
35
+ )
36
+ _original_request = _req_mod.Session.request
37
+
38
+ def _ua_patched_request(self, method, url, *args, **kwargs):
39
+ # Merge headers so we never overwrite a caller-supplied User-Agent
40
+ hdrs = kwargs.pop("headers", None) or {}
41
+ if isinstance(hdrs, dict):
42
+ hdrs = dict(hdrs)
43
+ else:
44
+ hdrs = dict(hdrs)
45
+ hdrs.setdefault("User-Agent", _BROWSER_UA)
46
+ kwargs["headers"] = hdrs
47
+ return _original_request(self, method, url, *args, **kwargs)
48
+
49
+ _req_mod.Session.request = _ua_patched_request
35
50
  except Exception:
36
51
  pass
37
52
 
38
- # Patch requests Session to support automatic SSL verification bypass and fallback
39
- try:
40
- import requests
41
- original_request = requests.Session.request
42
- def new_request(self_session, method, url, *args, **kwargs):
43
- # If verify_ssl is explicitly False, always disable verification
44
- if not self.verify_ssl:
45
- kwargs['verify'] = False
46
- return original_request(self_session, method, url, *args, **kwargs)
47
-
48
- try:
49
- return original_request(self_session, method, url, *args, **kwargs)
50
- except Exception as exc:
51
- is_ssl_err = False
52
- err_str = str(exc).lower()
53
- if "ssl" in err_str and ("cert" in err_str or "verify" in err_str or "untrusted" in err_str or "authority" in err_str):
54
- is_ssl_err = True
55
-
56
- if is_ssl_err:
57
- try:
58
- import urllib3
59
- urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
60
- except Exception:
61
- pass
62
- try:
63
- self.set("verify_ssl", False)
64
- except Exception:
65
- pass
66
- kwargs['verify'] = False
67
- return original_request(self_session, method, url, *args, **kwargs)
68
- raise exc
69
-
70
- requests.Session.request = new_request
71
- except Exception:
72
- pass
73
-
74
- # Suppress warnings if SSL verification is disabled
53
+ # Suppress warnings and patch requests if SSL verification is disabled
75
54
  if not self.verify_ssl:
76
55
  try:
77
56
  import urllib3
78
57
  urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
79
58
  except Exception:
80
59
  pass
60
+ try:
61
+ import requests as _req_mod2
62
+ _original_request2 = _req_mod2.Session.request
63
+ def _ssl_patched_request(self, method, url, *args, **kwargs):
64
+ kwargs.setdefault('verify', False)
65
+ return _original_request2(self, method, url, *args, **kwargs)
66
+ _req_mod2.Session.request = _ssl_patched_request
67
+ except Exception:
68
+ pass
81
69
 
82
70
  def _load(self):
83
71
  # Load global config