utim-cli 1.46.34__tar.gz → 1.46.35__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.34 → utim_cli-1.46.35}/CHANGELOG.md +8 -0
  2. {utim_cli-1.46.34/utim_cli.egg-info → utim_cli-1.46.35}/PKG-INFO +1 -1
  3. {utim_cli-1.46.34 → utim_cli-1.46.35}/pyproject.toml +1 -1
  4. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/__init__.py +1 -1
  5. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/_version.py +1 -1
  6. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/agent.py +3 -3
  7. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/config.py +63 -16
  8. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/utim.py +20 -14
  9. {utim_cli-1.46.34 → utim_cli-1.46.35/utim_cli.egg-info}/PKG-INFO +1 -1
  10. {utim_cli-1.46.34 → utim_cli-1.46.35}/LICENSE +0 -0
  11. {utim_cli-1.46.34 → utim_cli-1.46.35}/MANIFEST.in +0 -0
  12. {utim_cli-1.46.34 → utim_cli-1.46.35}/README.md +0 -0
  13. {utim_cli-1.46.34 → utim_cli-1.46.35}/setup.cfg +0 -0
  14. {utim_cli-1.46.34 → utim_cli-1.46.35}/setup.py +0 -0
  15. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/auth.py +0 -0
  16. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/backup.py +0 -0
  17. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/blender_agent.py +0 -0
  18. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/bootstrap.py +0 -0
  19. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/client_utils.py +0 -0
  20. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/constants.py +0 -0
  21. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/context_pruner.py +0 -0
  22. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/doctor.py +0 -0
  23. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/knowledge_graph.py +0 -0
  24. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/local_db.py +0 -0
  25. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/logger.py +0 -0
  26. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/mcp_clean_wrapper.py +0 -0
  27. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/mcp_client.py +0 -0
  28. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/mcp_registry.json +0 -0
  29. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/orchestrator.py +0 -0
  30. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/reflection.py +0 -0
  31. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/report.py +0 -0
  32. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/scrapy_search.py +0 -0
  33. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/__init__.py +0 -0
  34. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/auth.py +0 -0
  35. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/db.py +0 -0
  36. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/email_utils.py +0 -0
  37. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/exchange_rate.py +0 -0
  38. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/firebase.py +0 -0
  39. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/history.py +0 -0
  40. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/logging_config.py +0 -0
  41. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/models.py +0 -0
  42. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/pricing_updater.py +0 -0
  43. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/rate_limit.py +0 -0
  44. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/router.py +0 -0
  45. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/routes/__init__.py +0 -0
  46. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/routes/auth_routes.py +0 -0
  47. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/routes/completion_routes.py +0 -0
  48. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/routes/credit_routes.py +0 -0
  49. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/routes/feedback_routes.py +0 -0
  50. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/routes/quota_routes.py +0 -0
  51. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/routes/session_routes.py +0 -0
  52. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/routes/share_routes.py +0 -0
  53. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/server/server.py +0 -0
  54. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/share.py +0 -0
  55. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/share_tui.py +0 -0
  56. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/situational_scoring.py +0 -0
  57. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/state.py +0 -0
  58. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/tools.py +0 -0
  59. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/tui/__init__.py +0 -0
  60. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/tui/feedback_dialog.py +0 -0
  61. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/tui/history_dialog.py +0 -0
  62. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/tui/mcp_dialog.py +0 -0
  63. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/tui/model_dialog.py +0 -0
  64. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/tui/resume_dialog.py +0 -0
  65. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/tui/tools_dialog.py +0 -0
  66. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/tui/update_dialog.py +0 -0
  67. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/utilities.py +0 -0
  68. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/vector_memory.py +0 -0
  69. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli/workspace.py +0 -0
  70. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli.egg-info/SOURCES.txt +0 -0
  71. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli.egg-info/dependency_links.txt +0 -0
  72. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli.egg-info/entry_points.txt +0 -0
  73. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli.egg-info/requires.txt +0 -0
  74. {utim_cli-1.46.34 → utim_cli-1.46.35}/utim_cli.egg-info/top_level.txt +0 -0
@@ -2,6 +2,14 @@
2
2
 
3
3
  All notable changes to the UTIM CLI Agent will be documented in this file.
4
4
 
5
+ ## [1.46.35] - 2026-07-11
6
+
7
+ ### Added
8
+ - **Instant SSL Verification Toggle**: Upgraded the `/sslverify` session patcher to dynamically apply and remove the `verify=False` wrapper live on the running `requests.Session` class, eliminating the need to restart the CLI when toggling proxy security.
9
+
10
+ ### Fixed
11
+ - **CLI Tips Correctness**: Refined all CLI and ReAct Agent usage tips to only feature verified, public commands and actual hotkeys, removing any references to internal or hidden commands.
12
+
5
13
  ## [1.46.34] - 2026-07-11
6
14
 
7
15
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: utim-cli
3
- Version: 1.46.34
3
+ Version: 1.46.35
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.34"
7
+ version = "1.46.35"
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.34"
8
+ __version__ = "1.46.35"
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.34"
14
+ VERSION = "1.46.35"
@@ -31,11 +31,11 @@ TOOL_META = {
31
31
  }
32
32
 
33
33
  TIPS = [
34
- "Tip: Copy the last response to your clipboard with /copy",
34
+ "Tip: Use /help to see all available commands and the help panel",
35
35
  "Tip: Save your current conversation with /resume save <tag>",
36
36
  "Tip: Clear conversation history with /clear",
37
- "Tip: Check your credit balance with /balance",
38
- "Tip: List available tools with /tools",
37
+ "Tip: Check your quota limits and credit usage with /usage",
38
+ "Tip: Enable or disable individual tools with /tools",
39
39
  "Tip: Switch models with /model",
40
40
  ]
41
41
 
@@ -7,6 +7,48 @@ from typing import Any, Dict, Optional
7
7
 
8
8
  logger = logging.getLogger("utim.config")
9
9
 
10
+ # ── SSL session patch ─────────────────────────────────────────────────────────
11
+ # Keeps a reference to the true original so toggling works correctly in both
12
+ # directions without chaining patches on top of each other.
13
+ _ORIGINAL_SESSION_REQUEST = None
14
+ _SSL_PATCH_ACTIVE = False
15
+
16
+ def _apply_ssl_session_patch(disable: bool) -> None:
17
+ """Apply or remove the verify=False monkey-patch on requests.Session.request.
18
+
19
+ Safe to call multiple times. Does nothing when the requested state already
20
+ matches the current state.
21
+ """
22
+ global _ORIGINAL_SESSION_REQUEST, _SSL_PATCH_ACTIVE
23
+ try:
24
+ import requests as _req_mod
25
+ import urllib3
26
+
27
+ # Capture the true original exactly once.
28
+ if _ORIGINAL_SESSION_REQUEST is None:
29
+ _ORIGINAL_SESSION_REQUEST = _req_mod.Session.request
30
+
31
+ if disable and not _SSL_PATCH_ACTIVE:
32
+ # Suppress noisy InsecureRequestWarning lines.
33
+ try:
34
+ urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
35
+ except Exception:
36
+ pass
37
+ _orig = _ORIGINAL_SESSION_REQUEST
38
+ def _ssl_off(self, method, url, *args, **kwargs):
39
+ kwargs.setdefault('verify', False)
40
+ return _orig(self, method, url, *args, **kwargs)
41
+ _req_mod.Session.request = _ssl_off
42
+ _SSL_PATCH_ACTIVE = True
43
+
44
+ elif not disable and _SSL_PATCH_ACTIVE:
45
+ # Restore the true original so verify defaults to True again.
46
+ _req_mod.Session.request = _ORIGINAL_SESSION_REQUEST
47
+ _SSL_PATCH_ACTIVE = False
48
+
49
+ except Exception:
50
+ pass
51
+
10
52
  class Config:
11
53
  def __init__(self):
12
54
  import sys
@@ -44,28 +86,33 @@ class Config:
44
86
  hdrs = dict(hdrs)
45
87
  hdrs.setdefault("User-Agent", _BROWSER_UA)
46
88
  kwargs["headers"] = hdrs
89
+
90
+ primary_host = "api.utim.dev"
91
+ fallback_host = "utim-cli-production.up.railway.app"
92
+
93
+ if primary_host in url:
94
+ try:
95
+ return _original_request(self, method, url, *args, **kwargs)
96
+ except _req_mod.exceptions.RequestException as e:
97
+ fallback_url = url.replace(primary_host, fallback_host)
98
+ logger.warning(f"Connection to {primary_host} failed, trying fallback {fallback_host}: {e}")
99
+ return _original_request(self, method, fallback_url, *args, **kwargs)
100
+ elif fallback_host in url:
101
+ try:
102
+ return _original_request(self, method, url, *args, **kwargs)
103
+ except _req_mod.exceptions.RequestException as e:
104
+ fallback_url = url.replace(fallback_host, primary_host)
105
+ logger.warning(f"Connection to {fallback_host} failed, trying fallback {primary_host}: {e}")
106
+ return _original_request(self, method, fallback_url, *args, **kwargs)
107
+
47
108
  return _original_request(self, method, url, *args, **kwargs)
48
109
 
49
110
  _req_mod.Session.request = _ua_patched_request
50
111
  except Exception:
51
112
  pass
52
113
 
53
- # Suppress warnings and patch requests if SSL verification is disabled
54
- if not self.verify_ssl:
55
- try:
56
- import urllib3
57
- urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
58
- except Exception:
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
114
+ # Apply SSL patch immediately if already disabled in config.
115
+ _apply_ssl_session_patch(disable=not self.verify_ssl)
69
116
 
70
117
  def _load(self):
71
118
  # Load global config
@@ -632,24 +632,27 @@ from utim_cli.state import STATE
632
632
  _tip_idx = 0
633
633
  _tip_request_count = 0 # increments every request; tip advances every 3
634
634
  _TIPS = [
635
- "Tip: Press ? to see all keyboard shortcuts",
636
- "Tip: Use /copy to copy the last response to your clipboard",
635
+ "Tip: Use /help to see all available commands and the help panel",
636
+ "Tip: Press Ctrl+O to open a full-screen scrollable viewer of the last executed tool's inputs and outputs",
637
637
  "Tip: Save your chat anytime with /resume save <tag> — restore it later with /resume load <tag>",
638
- "Tip: Use /clear to wipe the conversation and start fresh without restarting",
639
- "Tip: Enable or disable individual tools with /tools — turn off what you don't need",
638
+ "Tip: Use /clear to wipe the conversation and start fresh without restarting the CLI",
639
+ "Tip: Enable or disable individual tools with /tools — customize the model's access",
640
640
  "Tip: Press Ctrl+P to toggle between Planning Mode and Autonomous Mode",
641
641
  "Tip: Press Shift+Tab to switch between auto-accept and manual review for file edits",
642
- "Tip: Use /model to switch models mid-conversation — press 'a' to add a BYOK model",
643
- "Tip: Check your remaining credits anytime with /balance",
644
- "Tip: Press Esc to cancel a running response mid-stream",
645
- "Tip: Use /rewind to undo the last file change made by the model",
646
- "Tip: Share your workspace context with a link using /share",
642
+ "Tip: Use /model to switch models mid-conversation — press 'a' to add a custom BYOK model",
643
+ "Tip: Check your quota limits and credit usage with /usage",
644
+ "Tip: Press Esc to cancel a running response or queue mid-stream",
645
+ "Tip: Use /rewind to undo the last file change made by the model and restore your code",
646
+ "Tip: Share your chat and a zip package of your workspace with a link using /share",
647
647
  "Tip: Run /doctor to diagnose server connectivity and MCP issues",
648
648
  "Tip: Paste multi-line code directly — UTIM handles large pastes automatically",
649
649
  "Tip: Use /hint to inject a private instruction the model sees but you don't have to repeat",
650
650
  "Tip: Connect external tools via MCP servers with /mcp",
651
- "Tip: Use /feedback to report bugs or suggest features directly from the CLI",
651
+ "Tip: Rate the last response and submit feedback with /rate",
652
652
  "Tip: Toggle SSL verification if behind a corporate proxy with /sslverify",
653
+ "Tip: Start a new conversation and clear the active screen with /new",
654
+ "Tip: Generate a redacted diagnostic support package for debugging with /report",
655
+ "Tip: Toggle automatic chat session state restoration on startup with /chatrestore",
653
656
  ]
654
657
 
655
658
  def _next_tip():
@@ -880,7 +883,7 @@ def _print_animated_banner(animated: bool = True):
880
883
  else:
881
884
  console.print(f"[bold {color}]{BANNER_BIG}[/bold {color}]")
882
885
 
883
- console.print(f" [bold white]U Think I Make[/bold white] [dim]v1.46.34[/dim]")
886
+ console.print(f" [bold white]U Think I Make[/bold white] [dim]v1.46.35[/dim]")
884
887
  user_email = config.email
885
888
  user_type = "UTIM Community"
886
889
  api_key = config.get("api_key")
@@ -1662,8 +1665,11 @@ def _handle_command(cmd: str, orchestrator: Orchestrator, app_ref) -> None:
1662
1665
  current = config.get("verify_ssl", True)
1663
1666
  new_val = not current
1664
1667
  config.set("verify_ssl", new_val)
1665
- console.print(f"\n[bold green]✓ SSL certificate verification has been {'enabled' if new_val else 'disabled'}.[/bold green]\n")
1666
- console.print("[dim]Restart UTIM for changes to take full effect across all components.[/dim]\n")
1668
+ # Apply the patch live no restart needed.
1669
+ from utim_cli.config import _apply_ssl_session_patch
1670
+ _apply_ssl_session_patch(disable=not new_val)
1671
+ console.print(f"\n[bold green]✓ SSL certificate verification has been {'enabled' if new_val else 'disabled'}.[/bold green]")
1672
+ console.print("[dim]Change is effective immediately — no restart needed.[/dim]\n")
1667
1673
 
1668
1674
  elif c == "rate":
1669
1675
  from utim_cli.tui.feedback_dialog import _dialog_submit_feedback
@@ -3137,7 +3143,7 @@ def check_and_update_background():
3137
3143
  return
3138
3144
 
3139
3145
  latest_ver = resp.json().get("version", "")
3140
- current_ver = "1.46.34"
3146
+ current_ver = "1.46.35"
3141
3147
 
3142
3148
  def parse_ver(v):
3143
3149
  return [int(x) for x in v.split(".") if x.isdigit()]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: utim-cli
3
- Version: 1.46.34
3
+ Version: 1.46.35
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