utim-cli 1.46.35__tar.gz → 1.46.37__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.35 → utim_cli-1.46.37}/CHANGELOG.md +181 -171
  2. {utim_cli-1.46.35/utim_cli.egg-info → utim_cli-1.46.37}/PKG-INFO +23 -5
  3. {utim_cli-1.46.35 → utim_cli-1.46.37}/README.md +173 -161
  4. {utim_cli-1.46.35 → utim_cli-1.46.37}/pyproject.toml +96 -88
  5. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/__init__.py +67 -67
  6. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/_version.py +1 -1
  7. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/agent.py +16 -9
  8. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/doctor.py +4 -2
  9. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/orchestrator.py +4010 -3976
  10. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/tui/model_dialog.py +206 -100
  11. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/tui/update_dialog.py +2 -2
  12. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/utim.py +3911 -3891
  13. {utim_cli-1.46.35 → utim_cli-1.46.37/utim_cli.egg-info}/PKG-INFO +23 -5
  14. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli.egg-info/requires.txt +14 -2
  15. {utim_cli-1.46.35 → utim_cli-1.46.37}/LICENSE +0 -0
  16. {utim_cli-1.46.35 → utim_cli-1.46.37}/MANIFEST.in +0 -0
  17. {utim_cli-1.46.35 → utim_cli-1.46.37}/setup.cfg +0 -0
  18. {utim_cli-1.46.35 → utim_cli-1.46.37}/setup.py +0 -0
  19. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/auth.py +0 -0
  20. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/backup.py +0 -0
  21. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/blender_agent.py +0 -0
  22. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/bootstrap.py +0 -0
  23. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/client_utils.py +0 -0
  24. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/config.py +0 -0
  25. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/constants.py +0 -0
  26. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/context_pruner.py +0 -0
  27. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/knowledge_graph.py +0 -0
  28. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/local_db.py +0 -0
  29. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/logger.py +0 -0
  30. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/mcp_clean_wrapper.py +0 -0
  31. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/mcp_client.py +0 -0
  32. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/mcp_registry.json +0 -0
  33. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/reflection.py +0 -0
  34. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/report.py +0 -0
  35. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/scrapy_search.py +0 -0
  36. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/__init__.py +0 -0
  37. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/auth.py +0 -0
  38. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/db.py +0 -0
  39. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/email_utils.py +0 -0
  40. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/exchange_rate.py +0 -0
  41. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/firebase.py +0 -0
  42. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/history.py +0 -0
  43. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/logging_config.py +0 -0
  44. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/models.py +0 -0
  45. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/pricing_updater.py +0 -0
  46. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/rate_limit.py +0 -0
  47. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/router.py +0 -0
  48. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/routes/__init__.py +0 -0
  49. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/routes/auth_routes.py +0 -0
  50. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/routes/completion_routes.py +0 -0
  51. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/routes/credit_routes.py +0 -0
  52. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/routes/feedback_routes.py +0 -0
  53. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/routes/quota_routes.py +0 -0
  54. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/routes/session_routes.py +0 -0
  55. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/routes/share_routes.py +0 -0
  56. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/server/server.py +0 -0
  57. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/share.py +0 -0
  58. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/share_tui.py +0 -0
  59. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/situational_scoring.py +0 -0
  60. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/state.py +0 -0
  61. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/tools.py +0 -0
  62. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/tui/__init__.py +0 -0
  63. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/tui/feedback_dialog.py +0 -0
  64. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/tui/history_dialog.py +0 -0
  65. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/tui/mcp_dialog.py +0 -0
  66. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/tui/resume_dialog.py +0 -0
  67. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/tui/tools_dialog.py +0 -0
  68. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/utilities.py +0 -0
  69. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/vector_memory.py +0 -0
  70. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli/workspace.py +0 -0
  71. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli.egg-info/SOURCES.txt +0 -0
  72. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli.egg-info/dependency_links.txt +0 -0
  73. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli.egg-info/entry_points.txt +0 -0
  74. {utim_cli-1.46.35 → utim_cli-1.46.37}/utim_cli.egg-info/top_level.txt +0 -0
@@ -1,171 +1,181 @@
1
- # Changelog
2
-
3
- All notable changes to the UTIM CLI Agent will be documented in this file.
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
-
13
- ## [1.46.34] - 2026-07-11
14
-
15
- ### Added
16
- - **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.
17
- - **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".
18
-
19
- ### Fixed
20
- - **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.
21
- - **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.
22
-
23
- ## [1.46.33] - 2026-07-11
24
-
25
- ### Added
26
- - **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.
27
- - **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.
28
-
29
- ### Fixed
30
- - **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.
31
- - **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.
32
- - **Website GitHub Link Removal**: Removed GitHub project URLs, core repository connection cards, and community links from the landing pages and pricing documents.
33
-
34
- ## [1.46.31] - 2026-07-11
35
-
36
- ### Added
37
- - **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.
38
- - **SSL Verification Control**: Added `verify_ssl` config key and `UTIM_VERIFY_SSL` environment variable to support disabling SSL verification. This resolves "server unreachable" errors caused by corporate firewalls or proxies that intercept HTTPS traffic.
39
-
40
- ### Fixed
41
- - **Model Selection Dialog Crash**: Fixed an `AttributeError` crash on the model list dialog screen (main agent or subagent picker) when the user's local `user_plan` config value is missing or explicitly `null`.
42
- - **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.
43
- - **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.
44
- - **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'`.
45
-
46
- ## [1.46.29] - 2026-07-11
47
-
48
- ### Fixed
49
- - **Feedbacks Dialog Markup Crash**: Wrapped all dynamic user-provided strings (emails, comments, and chat history) inside `rich.markup.escape` in `feedback_dialog.py` to prevent `MarkupError` crashes when logs contain unescaped brackets or console style tags.
50
- - **Event Loop run_in_terminal Coroutine Warnings**: Wrapped the main-thread `run_in_terminal` callback in `asyncio.ensure_future` inside `utim.py` to prevent task destruction and `never awaited` coroutine warnings.
51
- - **Free Node Pricing Description**: Updated the Free tier pricing widget and documentation pages to reflect the correct 5-hour refill limit (100 credits/$0.10 value) and 3,000 monthly credits limit (with no stacking).
52
-
53
- ## [1.46.28] - 2026-07-11
54
-
55
- ### Added
56
- - **Intelligent Experience Compression**: Replaced simple per-experience truncation/token-cutoff logic with advanced LLM-based context compression (utilizing `poolside/laguna-xs-2.1:free`, `cohere/north-mini-code:free`, and `openrouter/free`). When relevant lessons exceed 5,000 tokens, the LLM dynamically compresses them into a concise bullet-point summary, which is cached to prevent per-iteration latency.
57
- - **Aborted Turn Progress & Reflection**: Ensured aborted responses preserve partial progress and trigger a background reflection phase to extract lessons from failed/interrupted runs.
58
-
59
- ### Fixed
60
- - **Redundancy Filter Correction**: Fixed the experience retrieval redundancy filter to only deduplicate exact matches rather than checking substrings, preventing the silent dropping of detailed shell/PowerShell lessons.
61
- - **Filtered MCP Notification Context**: Updated MCP notifications to filter out disabled tools, preventing the agent from trying to call disabled MCP tools.
62
- - **Research File XML Cleanup**: Fixed the codebase research subagent to forbid and automatically strip hallucinated XML tool-calling syntax in its markdown reports.
63
-
64
- ## [1.46.27] - 2026-07-10
65
-
66
- ### Fixed
67
- - **Image Generation Quota Bypass**: Fixed the image generation tool to bypass the monthly base credit check when the user has a positive bonus credit balance.
68
- - **Piped Output Formatting**: Corrected command output formatting and token usage tracking when the CLI is run in a piped or non-TTY environment.
69
-
70
- ### Changed
71
- - **Model Pricing Docs**: Replaced static tables on the documentation page with an interactive component providing category filter chips and capabilities search for all UTIM models.
72
-
73
- ## [1.46.26] - 2026-07-09
74
-
75
- ### Added
76
- - **OpenRouter Models Addition**: Added `aion-labs/aion-3.0`, `aion-labs/aion-3.0-mini`, `x-ai/grok-4.5`, `openai/gpt-5.6-luna-pro`, `openai/gpt-5.6-luna`, `openai/gpt-5.6-terra-pro`, `openai/gpt-5.6-terra`, `openai/gpt-5.6-sol-pro`, and `openai/gpt-5.6-sol` to the CLI's `/model` selector list.
77
-
78
- ## [1.46.24] - 2026-07-09
79
-
80
- ### Added
81
- - **Interactive Learnt Verification Questions**: Integrated a feedback reflection loop that analyzes low-rated chats (under 4 stars) to extract candidate lessons and draft clarifying questions. The CLI will dynamically ask the user confirmation questions in future runs when matching contexts are detected to verify or reject the learned patterns.
82
-
83
- ## [1.46.23] - 2026-07-09
84
-
85
- ### Fixed
86
- - **Feedback Details Crash**: Resolved a critical AttributeError crash when selecting a feedback entry in the `/feedbacks` dashboard. The UI now gracefully handles and parses `chat_history` payload data under all serialization conditions.
87
-
88
- ## [1.46.22] - 2026-07-09
89
-
90
- ### Fixed
91
- - **Instant Ctrl+C Interruption**: Halts execution instantly (within 100ms) on Ctrl+C or Escape, outputting `⊘ Aborted.` directly and avoiding delay/retry loops.
92
- - **Event Loop TUI Crashes**: Fixed `RuntimeWarning: coroutine was never awaited` warnings and thread-safety crashes in `run_in_terminal` when running async dialogs from background tasks.
93
- - **Tools Dialog Text Overflow**: Added dynamic word wrapping in the tools configuration dialog to prevent long descriptions from spilling off-screen.
94
- - **Corrected Tool Name in Injected Prompt**: Fixed the active workspace skills recommendation message injected into the system prompt to correctly refer to the `read_file` tool.
95
- - **Decoupled Tool Gating**: Restructured disabled tools filtering to only apply to the main user agent, preserving normal tool capabilities for background subagents.
96
-
97
- ## [1.46.21] - 2026-07-07
98
-
99
- ### Added
100
- - **Relationship-based Experience Memory**: Integrated advanced pattern learning (`ExperienceManager` and `ExperienceNode`) with the LLM reflection phase. Learns object/relationship patterns (like the chair/stool/wall analogy) and automatically injects structured `[RELATIONSHIP EXPERIENCE INSIGHTS]` into the system prompt for matching tasks.
101
-
102
- ### Fixed
103
- - **Agent XML Tool-Calling**: Integrated a robust XML tool-call parser to intercept streaming custom-tool commands, cleaning XML tags from output text and translating tool names/parameters (e.g., mapping `shell`/`bash`/`cmd` to `run_command` and `view_file` to `read_file`).
104
- - **Windows Subprocess Unicode Crashes**: Specified `encoding="utf-8"` and `errors="replace"` across all `subprocess.run` calls (test runner, compiler syntax checks, and Blender execution) to prevent `UnicodeDecodeError` ANSI/`cp1252` crashes on Windows.
105
- - **Opt-in Regression Tests**: Made the automated regression test runner opt-in (disabled by default) via `"enable_regression_tests": true` or `UTIM_ENABLE_REGRESSION_TESTS=1`.
106
- - **Directory Read Failures**: Upgraded `read_file` to gracefully return a directory suggestion instead of throwing a `PermissionError` when given a directory path.
107
- - **Repetitive Greeting Responses**: Shortened system prompt responses for casual greetings/inputs to prevent the agent from repeating its long introduction intro.
108
-
109
- ## [1.46.20] - 2026-07-07
110
-
111
- ### Fixed
112
- - **TUI focus checks and dialog crashes:** Changed layout focus checks from manual lambda wrappers to prompt-toolkit's native `has_focus` filter across `/mcp` and `/share` menus to fix keyboard dropouts and Down arrow navigation issues.
113
- - **TUI helper NameError and Silent Failures:** Resolved a `NameError` crash in `/mcp` due to missing `_prompt_input` imports, added missing imports in `/autoupdate`, and imported `datetime` to fix the silent date-parsing age bugs in `/resume`.
114
-
115
- ## [1.46.19] - 2026-07-07
116
-
117
- ### Fixed
118
- - **TUI Dialog exit/scroll crashes on Python 3.13:** Fixed remaining `dim yellow` and `dim #585b70` style string parsing exceptions that crashed prompt-toolkit when scrolling list viewports or returning from the `/share` and `/resume` dashboards under Python 3.13+.
119
-
120
- ## [1.46.18] - 2026-07-07
121
-
122
- ### Fixed
123
- - **TUI Rendering Crash on Python 3.13:** Fixed a critical `ValueError: Wrong color format 'dim'` exception that crashed prompt-toolkit during rendering of `/mcp`, `/share`, `/model`, `/history`, and `/tools` dialogs under Python 3.13+.
124
- - **Import/Cache and Mock Test Failures:** Fixed pytest suite errors including non-existent `TOOL_FUNCTIONS` imports in the fallback parser, incorrect mock parameters, and `get_admin_user` environment variable caching failures.
125
-
126
- ### Added
127
- - **Pay As You Go on Pricing Page:** Added a fully interactive checkout Top-Up component card directly on the main Pricing Page under the new "Pay As You Go" tier selector.
128
-
129
- ## [1.46.17] - 2026-07-06
130
-
131
- ### Fixed
132
- - **Bugs fixed:** Fixed a critical Windows auto-restart bug where directory paths containing spaces (e.g., 'New folder') would cause command line arguments to split and crash with a file-not-found error on startup.
133
-
134
- ### Added
135
- - **Multi-Platform Shell Detection & Terminal Closures:** Spawns UTIM in a clean, fresh, normal terminal window/tab (persisting open shell via `/k` command) instead of double-printing startup sequences in the same terminal. Traversing the parent process tree identifies and terminates the parent shell (PowerShell/CMD on Windows, Terminal on macOS, SIGHUP on Linux) to cleanly close the old tab.
136
- - **Isolated Testing Configuration:** Prevented test runs (`pytest`) from mutating the developer's global `~/.utim/config.json` configuration file by automatically isolating test session files inside a temporary directory.
137
- - **Immediate Process Exit on Login**: Prevented old parent processes from continuing execution or printing GUEST state warning lines by calling immediate process termination (`os._exit(0)`) once the new UTIM console window is successfully launched.
138
-
139
- ## [1.44.2] - 2026-07-02
140
-
141
- ### Fixed
142
- - **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.
143
- - **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.
144
- - **Image Subagent Config:** Separated the Image Generation model and the Prompt Expander LLM in the subagent configuration UI, allowing users to configure both independently.
145
- - **Minor:** Minor Bug Fixes
146
-
147
- ## [1.43.20] - 2026-07-01
148
-
149
- ### Added
150
- - **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.
151
- - **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.
152
- - **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.
153
- - **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.
154
- - **Changelog Tab on Website**: The terminal website now includes a `↻ Changelog` tab that fetches live release notes from the Railway server on load.
155
- - **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.
156
- - **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.
157
- - **`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.
158
-
159
- ### Changed
160
- - **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.
161
- - **Hobby Plan Model Access**: Hobby plan `allowed_models` corrected to `"all"` so users can access the full model registry (not just free-tier models).
162
- - **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.
163
- - **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.
164
-
165
- ### Fixed
166
- - **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.
167
- - **Double-Exit Crash (TUI)**: Wrapped all keyboard exit callbacks (`ENTER`/`ESC`/`q`/`CTRL+C`) in `try...except` blocks to prevent double-fire tracebacks.
168
- - **`/changelog` Route No Longer Shows Legacy Page**: All website routes (including `/changelog`) now correctly map to the `<PowershellUI />` terminal component. Legacy standalone page removed.
169
-
170
- ---
171
-
1
+ # Changelog
2
+
3
+ ## [1.46.37] - 2026-07-12
4
+ - **Global --ssl-verify CLI Options**: Added `--ssl-verify/--no-ssl-verify` command line flags to toggle SSL validation.
5
+ - **Raw HTTP Response Debugging**: Enhanced rate-limiting handlers to print raw server response body details.
6
+ - **Beta Organization Scoping**: Updated package configurations for `@emendbeta-ai/utim` beta releases.
7
+
8
+ All notable changes to the UTIM CLI Agent will be documented in this file.
9
+
10
+ ## [1.46.36] - 2026-07-12
11
+
12
+ ### Added
13
+ - **Reciprocal Server URL Fallbacks**: Integrated automatic fallback routing in the request session patcher to dynamically swap and retry calls between `api.utim.dev` and `utim-cli-production.up.railway.app` in case of connection timeouts or proxy blocking errors.
14
+
15
+ ## [1.46.35] - 2026-07-11
16
+
17
+ ### Added
18
+ - **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.
19
+
20
+ ### Fixed
21
+ - **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.
22
+
23
+ ## [1.46.34] - 2026-07-11
24
+
25
+ ### Added
26
+ - **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.
27
+ - **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".
28
+
29
+ ### Fixed
30
+ - **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.
31
+ - **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.
32
+
33
+ ## [1.46.33] - 2026-07-11
34
+
35
+ ### Added
36
+ - **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.
37
+ - **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.
38
+
39
+ ### Fixed
40
+ - **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.
41
+ - **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.
42
+ - **Website GitHub Link Removal**: Removed GitHub project URLs, core repository connection cards, and community links from the landing pages and pricing documents.
43
+
44
+ ## [1.46.31] - 2026-07-11
45
+
46
+ ### Added
47
+ - **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.
48
+ - **SSL Verification Control**: Added `verify_ssl` config key and `UTIM_VERIFY_SSL` environment variable to support disabling SSL verification. This resolves "server unreachable" errors caused by corporate firewalls or proxies that intercept HTTPS traffic.
49
+
50
+ ### Fixed
51
+ - **Model Selection Dialog Crash**: Fixed an `AttributeError` crash on the model list dialog screen (main agent or subagent picker) when the user's local `user_plan` config value is missing or explicitly `null`.
52
+ - **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.
53
+ - **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.
54
+ - **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'`.
55
+
56
+ ## [1.46.29] - 2026-07-11
57
+
58
+ ### Fixed
59
+ - **Feedbacks Dialog Markup Crash**: Wrapped all dynamic user-provided strings (emails, comments, and chat history) inside `rich.markup.escape` in `feedback_dialog.py` to prevent `MarkupError` crashes when logs contain unescaped brackets or console style tags.
60
+ - **Event Loop run_in_terminal Coroutine Warnings**: Wrapped the main-thread `run_in_terminal` callback in `asyncio.ensure_future` inside `utim.py` to prevent task destruction and `never awaited` coroutine warnings.
61
+ - **Free Node Pricing Description**: Updated the Free tier pricing widget and documentation pages to reflect the correct 5-hour refill limit (100 credits/$0.10 value) and 3,000 monthly credits limit (with no stacking).
62
+
63
+ ## [1.46.28] - 2026-07-11
64
+
65
+ ### Added
66
+ - **Intelligent Experience Compression**: Replaced simple per-experience truncation/token-cutoff logic with advanced LLM-based context compression (utilizing `poolside/laguna-xs-2.1:free`, `cohere/north-mini-code:free`, and `openrouter/free`). When relevant lessons exceed 5,000 tokens, the LLM dynamically compresses them into a concise bullet-point summary, which is cached to prevent per-iteration latency.
67
+ - **Aborted Turn Progress & Reflection**: Ensured aborted responses preserve partial progress and trigger a background reflection phase to extract lessons from failed/interrupted runs.
68
+
69
+ ### Fixed
70
+ - **Redundancy Filter Correction**: Fixed the experience retrieval redundancy filter to only deduplicate exact matches rather than checking substrings, preventing the silent dropping of detailed shell/PowerShell lessons.
71
+ - **Filtered MCP Notification Context**: Updated MCP notifications to filter out disabled tools, preventing the agent from trying to call disabled MCP tools.
72
+ - **Research File XML Cleanup**: Fixed the codebase research subagent to forbid and automatically strip hallucinated XML tool-calling syntax in its markdown reports.
73
+
74
+ ## [1.46.27] - 2026-07-10
75
+
76
+ ### Fixed
77
+ - **Image Generation Quota Bypass**: Fixed the image generation tool to bypass the monthly base credit check when the user has a positive bonus credit balance.
78
+ - **Piped Output Formatting**: Corrected command output formatting and token usage tracking when the CLI is run in a piped or non-TTY environment.
79
+
80
+ ### Changed
81
+ - **Model Pricing Docs**: Replaced static tables on the documentation page with an interactive component providing category filter chips and capabilities search for all UTIM models.
82
+
83
+ ## [1.46.26] - 2026-07-09
84
+
85
+ ### Added
86
+ - **OpenRouter Models Addition**: Added `aion-labs/aion-3.0`, `aion-labs/aion-3.0-mini`, `x-ai/grok-4.5`, `openai/gpt-5.6-luna-pro`, `openai/gpt-5.6-luna`, `openai/gpt-5.6-terra-pro`, `openai/gpt-5.6-terra`, `openai/gpt-5.6-sol-pro`, and `openai/gpt-5.6-sol` to the CLI's `/model` selector list.
87
+
88
+ ## [1.46.24] - 2026-07-09
89
+
90
+ ### Added
91
+ - **Interactive Learnt Verification Questions**: Integrated a feedback reflection loop that analyzes low-rated chats (under 4 stars) to extract candidate lessons and draft clarifying questions. The CLI will dynamically ask the user confirmation questions in future runs when matching contexts are detected to verify or reject the learned patterns.
92
+
93
+ ## [1.46.23] - 2026-07-09
94
+
95
+ ### Fixed
96
+ - **Feedback Details Crash**: Resolved a critical AttributeError crash when selecting a feedback entry in the `/feedbacks` dashboard. The UI now gracefully handles and parses `chat_history` payload data under all serialization conditions.
97
+
98
+ ## [1.46.22] - 2026-07-09
99
+
100
+ ### Fixed
101
+ - **Instant Ctrl+C Interruption**: Halts execution instantly (within 100ms) on Ctrl+C or Escape, outputting `⊘ Aborted.` directly and avoiding delay/retry loops.
102
+ - **Event Loop TUI Crashes**: Fixed `RuntimeWarning: coroutine was never awaited` warnings and thread-safety crashes in `run_in_terminal` when running async dialogs from background tasks.
103
+ - **Tools Dialog Text Overflow**: Added dynamic word wrapping in the tools configuration dialog to prevent long descriptions from spilling off-screen.
104
+ - **Corrected Tool Name in Injected Prompt**: Fixed the active workspace skills recommendation message injected into the system prompt to correctly refer to the `read_file` tool.
105
+ - **Decoupled Tool Gating**: Restructured disabled tools filtering to only apply to the main user agent, preserving normal tool capabilities for background subagents.
106
+
107
+ ## [1.46.21] - 2026-07-07
108
+
109
+ ### Added
110
+ - **Relationship-based Experience Memory**: Integrated advanced pattern learning (`ExperienceManager` and `ExperienceNode`) with the LLM reflection phase. Learns object/relationship patterns (like the chair/stool/wall analogy) and automatically injects structured `[RELATIONSHIP EXPERIENCE INSIGHTS]` into the system prompt for matching tasks.
111
+
112
+ ### Fixed
113
+ - **Agent XML Tool-Calling**: Integrated a robust XML tool-call parser to intercept streaming custom-tool commands, cleaning XML tags from output text and translating tool names/parameters (e.g., mapping `shell`/`bash`/`cmd` to `run_command` and `view_file` to `read_file`).
114
+ - **Windows Subprocess Unicode Crashes**: Specified `encoding="utf-8"` and `errors="replace"` across all `subprocess.run` calls (test runner, compiler syntax checks, and Blender execution) to prevent `UnicodeDecodeError` ANSI/`cp1252` crashes on Windows.
115
+ - **Opt-in Regression Tests**: Made the automated regression test runner opt-in (disabled by default) via `"enable_regression_tests": true` or `UTIM_ENABLE_REGRESSION_TESTS=1`.
116
+ - **Directory Read Failures**: Upgraded `read_file` to gracefully return a directory suggestion instead of throwing a `PermissionError` when given a directory path.
117
+ - **Repetitive Greeting Responses**: Shortened system prompt responses for casual greetings/inputs to prevent the agent from repeating its long introduction intro.
118
+
119
+ ## [1.46.20] - 2026-07-07
120
+
121
+ ### Fixed
122
+ - **TUI focus checks and dialog crashes:** Changed layout focus checks from manual lambda wrappers to prompt-toolkit's native `has_focus` filter across `/mcp` and `/share` menus to fix keyboard dropouts and Down arrow navigation issues.
123
+ - **TUI helper NameError and Silent Failures:** Resolved a `NameError` crash in `/mcp` due to missing `_prompt_input` imports, added missing imports in `/autoupdate`, and imported `datetime` to fix the silent date-parsing age bugs in `/resume`.
124
+
125
+ ## [1.46.19] - 2026-07-07
126
+
127
+ ### Fixed
128
+ - **TUI Dialog exit/scroll crashes on Python 3.13:** Fixed remaining `dim yellow` and `dim #585b70` style string parsing exceptions that crashed prompt-toolkit when scrolling list viewports or returning from the `/share` and `/resume` dashboards under Python 3.13+.
129
+
130
+ ## [1.46.18] - 2026-07-07
131
+
132
+ ### Fixed
133
+ - **TUI Rendering Crash on Python 3.13:** Fixed a critical `ValueError: Wrong color format 'dim'` exception that crashed prompt-toolkit during rendering of `/mcp`, `/share`, `/model`, `/history`, and `/tools` dialogs under Python 3.13+.
134
+ - **Import/Cache and Mock Test Failures:** Fixed pytest suite errors including non-existent `TOOL_FUNCTIONS` imports in the fallback parser, incorrect mock parameters, and `get_admin_user` environment variable caching failures.
135
+
136
+ ### Added
137
+ - **Pay As You Go on Pricing Page:** Added a fully interactive checkout Top-Up component card directly on the main Pricing Page under the new "Pay As You Go" tier selector.
138
+
139
+ ## [1.46.17] - 2026-07-06
140
+
141
+ ### Fixed
142
+ - **Bugs fixed:** Fixed a critical Windows auto-restart bug where directory paths containing spaces (e.g., 'New folder') would cause command line arguments to split and crash with a file-not-found error on startup.
143
+
144
+ ### Added
145
+ - **Multi-Platform Shell Detection & Terminal Closures:** Spawns UTIM in a clean, fresh, normal terminal window/tab (persisting open shell via `/k` command) instead of double-printing startup sequences in the same terminal. Traversing the parent process tree identifies and terminates the parent shell (PowerShell/CMD on Windows, Terminal on macOS, SIGHUP on Linux) to cleanly close the old tab.
146
+ - **Isolated Testing Configuration:** Prevented test runs (`pytest`) from mutating the developer's global `~/.utim/config.json` configuration file by automatically isolating test session files inside a temporary directory.
147
+ - **Immediate Process Exit on Login**: Prevented old parent processes from continuing execution or printing GUEST state warning lines by calling immediate process termination (`os._exit(0)`) once the new UTIM console window is successfully launched.
148
+
149
+ ## [1.44.2] - 2026-07-02
150
+
151
+ ### Fixed
152
+ - **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.
153
+ - **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.
154
+ - **Image Subagent Config:** Separated the Image Generation model and the Prompt Expander LLM in the subagent configuration UI, allowing users to configure both independently.
155
+ - **Minor:** Minor Bug Fixes
156
+
157
+ ## [1.43.20] - 2026-07-01
158
+
159
+ ### Added
160
+ - **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.
161
+ - **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.
162
+ - **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.
163
+ - **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.
164
+ - **Changelog Tab on Website**: The terminal website now includes a `↻ Changelog` tab that fetches live release notes from the Railway server on load.
165
+ - **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.
166
+ - **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.
167
+ - **`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.
168
+
169
+ ### Changed
170
+ - **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.
171
+ - **Hobby Plan Model Access**: Hobby plan `allowed_models` corrected to `"all"` so users can access the full model registry (not just free-tier models).
172
+ - **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.
173
+ - **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.
174
+
175
+ ### Fixed
176
+ - **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.
177
+ - **Double-Exit Crash (TUI)**: Wrapped all keyboard exit callbacks (`ENTER`/`ESC`/`q`/`CTRL+C`) in `try...except` blocks to prevent double-fire tracebacks.
178
+ - **`/changelog` Route No Longer Shows Legacy Page**: All website routes (including `/changelog`) now correctly map to the `<PowershellUI />` terminal component. Legacy standalone page removed.
179
+
180
+ ---
181
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: utim-cli
3
- Version: 1.46.35
3
+ Version: 1.46.37
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
@@ -20,7 +20,6 @@ Classifier: Intended Audience :: Developers
20
20
  Requires-Python: >=3.9
21
21
  Description-Content-Type: text/markdown
22
22
  License-File: LICENSE
23
- Requires-Dist: openai>=1.30.0
24
23
  Requires-Dist: requests==2.31.0
25
24
  Requires-Dist: aiohttp>=3.9.5
26
25
  Requires-Dist: python-dotenv==1.0.1
@@ -30,9 +29,10 @@ Requires-Dist: chardet==4.0.0
30
29
  Requires-Dist: typer>=0.9.0
31
30
  Requires-Dist: rich>=13.0.0
32
31
  Requires-Dist: prompt_toolkit>=3.0.0
33
- Requires-Dist: mcp>=0.1.0
34
32
  Requires-Dist: nest-asyncio>=1.5.0
35
33
  Requires-Dist: sqlalchemy>=2.0.0
34
+ Requires-Dist: openai>=1.30.0; platform_system != "Linux" or (platform_machine != "aarch64" and platform_machine != "arm64")
35
+ Requires-Dist: mcp>=0.1.0; platform_system != "Linux" or (platform_machine != "aarch64" and platform_machine != "arm64")
36
36
  Provides-Extra: search
37
37
  Requires-Dist: scrapy>=2.11.0; extra == "search"
38
38
  Requires-Dist: scrapy-playwright>=0.0.34; extra == "search"
@@ -44,6 +44,8 @@ Requires-Dist: tree-sitter>=0.21.0; extra == "parsers"
44
44
  Requires-Dist: tree-sitter-python>=0.21.0; extra == "parsers"
45
45
  Requires-Dist: tree-sitter-javascript>=0.21.0; extra == "parsers"
46
46
  Requires-Dist: tree-sitter-typescript>=0.21.0; extra == "parsers"
47
+ Provides-Extra: mcp
48
+ Requires-Dist: mcp>=0.1.0; extra == "mcp"
47
49
  Provides-Extra: full
48
50
  Requires-Dist: scrapy>=2.11.0; extra == "full"
49
51
  Requires-Dist: scrapy-playwright>=0.0.34; extra == "full"
@@ -53,6 +55,10 @@ Requires-Dist: tree-sitter>=0.21.0; extra == "full"
53
55
  Requires-Dist: tree-sitter-python>=0.21.0; extra == "full"
54
56
  Requires-Dist: tree-sitter-javascript>=0.21.0; extra == "full"
55
57
  Requires-Dist: tree-sitter-typescript>=0.21.0; extra == "full"
58
+ Requires-Dist: mcp>=0.1.0; (platform_system != "Linux" or (platform_machine != "aarch64" and platform_machine != "arm64")) and extra == "full"
59
+ Requires-Dist: openai>=1.30.0; (platform_system != "Linux" or (platform_machine != "aarch64" and platform_machine != "arm64")) and extra == "full"
60
+ Provides-Extra: legacy-agent
61
+ Requires-Dist: openai>=1.30.0; extra == "legacy-agent"
56
62
 
57
63
  # UTIM CLI Agent: Enterprise Coder Assistant
58
64
 
@@ -63,8 +69,15 @@ UTIM is an agentic developer CLI assistant designed to automate coding tasks dir
63
69
  ## 🚀 Quick Start
64
70
 
65
71
  ### 1. Installation
66
- Install the package from your local source directory:
67
72
 
73
+ **Recommended: Automated Installer (UNIX / macOS / Android Termux)**
74
+ Use the automated installation script, which detects your environment (such as Termux) and automatically installs build dependencies (like `rust`, `clang`, and `binutils`) and configures correct API levels:
75
+
76
+ ```bash
77
+ curl -sL https://raw.githubusercontent.com/emendai/utim/main/install.sh | bash
78
+ ```
79
+
80
+ **Alternative: Local Installation (from source)**
68
81
  ```bash
69
82
  # Basic installation
70
83
  pip install .
@@ -194,6 +207,12 @@ pip install utim-cli
194
207
  pip install "utim-cli[full]"
195
208
  ```
196
209
 
210
+ Desktop installs include the normal SDK/MCP path automatically. Mobile/Termux
211
+ installs keep those native-heavy pieces optional to avoid `pydantic-core`; use
212
+ `utim-cli[mcp]` or `utim-cli[legacy-agent]` only if you explicitly need them.
213
+ Do not install `utim_cli/server/requirements.txt` unless you are deploying the
214
+ server.
215
+
197
216
  ### Source install (development)
198
217
  ```bash
199
218
  git clone https://github.com/emendai/utim.git
@@ -214,4 +233,3 @@ See [INSTALLATION_VERIFICATION.md](INSTALLATION_VERIFICATION.md) for detailed ve
214
233
  UTIM uses a single canonical version defined in [`utim_cli/_version.py`](utim_cli/_version.py).
215
234
  Run `python scripts/sync_version.py` to propagate a version bump to all surfaces
216
235
  (`package.json`, `pyproject.toml`, `CHANGELOG.md`) before releasing.
217
-