utim-cli 1.47.2__tar.gz → 1.47.4__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 (88) hide show
  1. utim_cli-1.47.4/CHANGELOG.md +274 -0
  2. {utim_cli-1.47.2/utim_cli.egg-info → utim_cli-1.47.4}/PKG-INFO +1 -1
  3. {utim_cli-1.47.2 → utim_cli-1.47.4}/pyproject.toml +2 -2
  4. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/__init__.py +1 -1
  5. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/_version.py +1 -1
  6. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/backup.py +4 -2
  7. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/bootstrap.py +27 -242
  8. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/client_utils.py +19 -3
  9. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/config.py +13 -2
  10. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/doctor.py +6 -4
  11. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/knowledge_graph.py +2 -1
  12. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/local_db.py +3 -2
  13. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/logger.py +3 -1
  14. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/mcp_client.py +4 -2
  15. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/orchestrator.py +164 -35
  16. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/reflection.py +180 -55
  17. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/db.py +13 -8
  18. utim_cli-1.47.4/utim_cli/server/docs_md/about.md +6 -0
  19. utim_cli-1.47.2/CHANGELOG.md → utim_cli-1.47.4/utim_cli/server/docs_md/changelog.md +0 -1
  20. utim_cli-1.47.4/utim_cli/server/docs_md/docs.md +761 -0
  21. utim_cli-1.47.4/utim_cli/server/docs_md/features.md +11 -0
  22. utim_cli-1.47.4/utim_cli/server/docs_md/license.md +36 -0
  23. utim_cli-1.47.4/utim_cli/server/docs_md/pricing.md +22 -0
  24. utim_cli-1.47.4/utim_cli/server/docs_md/privacy.md +119 -0
  25. utim_cli-1.47.4/utim_cli/server/docs_md/refund.md +36 -0
  26. utim_cli-1.47.4/utim_cli/server/docs_md/support.md +6 -0
  27. utim_cli-1.47.4/utim_cli/server/docs_md/terms.md +56 -0
  28. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/router.py +37 -233
  29. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/routes/completion_routes.py +24 -9
  30. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/routes/quota_routes.py +25 -1
  31. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/routes/referral_routes.py +41 -8
  32. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/share.py +4 -2
  33. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/situational_scoring.py +2 -1
  34. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/tools.py +93 -0
  35. utim_cli-1.47.4/utim_cli/tui/mcp_dialog.py +583 -0
  36. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/tui/model_dialog.py +327 -1
  37. utim_cli-1.47.4/utim_cli/tui/skills_dialog.py +293 -0
  38. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/utim.py +124 -35
  39. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/vector_memory.py +4 -2
  40. {utim_cli-1.47.2 → utim_cli-1.47.4/utim_cli.egg-info}/PKG-INFO +1 -1
  41. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli.egg-info/SOURCES.txt +11 -0
  42. utim_cli-1.47.2/utim_cli/tui/mcp_dialog.py +0 -419
  43. {utim_cli-1.47.2 → utim_cli-1.47.4}/LICENSE +0 -0
  44. {utim_cli-1.47.2 → utim_cli-1.47.4}/MANIFEST.in +0 -0
  45. {utim_cli-1.47.2 → utim_cli-1.47.4}/README.md +0 -0
  46. {utim_cli-1.47.2 → utim_cli-1.47.4}/setup.cfg +0 -0
  47. {utim_cli-1.47.2 → utim_cli-1.47.4}/setup.py +0 -0
  48. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/agent.py +0 -0
  49. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/auth.py +0 -0
  50. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/blender_agent.py +0 -0
  51. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/constants.py +0 -0
  52. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/context_pruner.py +0 -0
  53. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/mcp_clean_wrapper.py +0 -0
  54. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/mcp_registry.json +0 -0
  55. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/report.py +0 -0
  56. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/scrapy_search.py +0 -0
  57. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/__init__.py +0 -0
  58. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/auth.py +0 -0
  59. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/email_utils.py +0 -0
  60. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/exchange_rate.py +0 -0
  61. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/firebase.py +0 -0
  62. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/history.py +0 -0
  63. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/logging_config.py +0 -0
  64. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/models.py +0 -0
  65. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/pricing_updater.py +0 -0
  66. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/rate_limit.py +0 -0
  67. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/routes/__init__.py +0 -0
  68. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/routes/auth_routes.py +0 -0
  69. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/routes/credit_routes.py +0 -0
  70. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/routes/feedback_routes.py +0 -0
  71. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/routes/session_routes.py +0 -0
  72. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/routes/share_routes.py +0 -0
  73. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/server/server.py +0 -0
  74. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/share_tui.py +0 -0
  75. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/state.py +0 -0
  76. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/tui/__init__.py +0 -0
  77. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/tui/feedback_dialog.py +0 -0
  78. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/tui/history_dialog.py +0 -0
  79. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/tui/quota_dialog.py +0 -0
  80. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/tui/resume_dialog.py +0 -0
  81. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/tui/tools_dialog.py +0 -0
  82. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/tui/update_dialog.py +0 -0
  83. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/utilities.py +0 -0
  84. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli/workspace.py +0 -0
  85. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli.egg-info/dependency_links.txt +0 -0
  86. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli.egg-info/entry_points.txt +0 -0
  87. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli.egg-info/requires.txt +0 -0
  88. {utim_cli-1.47.2 → utim_cli-1.47.4}/utim_cli.egg-info/top_level.txt +0 -0
@@ -0,0 +1,274 @@
1
+ # Changelog
2
+
3
+ ## [1.47.4] - 2026-07-19
4
+
5
+ ### Fixed
6
+ - **Completions Server Routing bypass**: Re-engineered model endpoint resolution to respect the user's active UTIM plan subscription and selected completions source (`"main_model_source": "utim"`), preventing local environment variables (like `OPENROUTER_API_KEY`) from silently hijacking completions routing.
7
+
8
+ ## [1.47.3] - 2026-07-19
9
+
10
+ ### Added
11
+ - **Startup Skills Injector**: Integrated a dynamic workspace-wide scanning system to catalog available skills and inject their exact names, descriptions, and absolute paths directly into the system prompt on startup, preventing redundant recursive searches and enabling instant, direct skill file reading.
12
+ - **Fast Deletion in Skills Manager**: Bypassed the typing confirmation dialog when deleting custom skills inside the interactive `/skills` menu, allowing instant deletion of custom skill folders.
13
+
14
+ ### Fixed
15
+ - **Cancellation Socket Deadlock**: Structured a thread-safe connection binder within the LLM orchestration loop that exposes the active stream response object, allowing keyboard cancellation handlers (`Esc` and `Ctrl+C`) to abort the socket connection immediately and release the prompt queue lock, resolving a deadlock that froze subsequent user requests.
16
+
17
+ ## [1.47.2] - 2026-07-18
18
+
19
+ ### Fixed
20
+ - **UnboundLocalError in Command Output Renderer**: Pre-initialized stdout and stderr lines lists in `_render_result` to prevent runtime exception on commands yielding empty output.
21
+ - **Chunk-Boundary Unicode Decode Errors**: Upgraded `read_file` tool to slice trailing incomplete bytes during UTF-8 checks, preventing decoding failures on split multi-byte character boundaries.
22
+ - **Reflection Engine Skill Creation Guardrail**: Restructured reflection engine to only create new skill files when at least 3 substantial guidelines (each >= 40 characters) are suggested, preventing clutter from useless "one-liner" skills.
23
+ - **Console Status Spinner Fallback**: Patched the `console.status` spinner in `utim.py` to check for legacy Windows CMD/conhost and non-UTF-8 environments, dynamically falling back to ASCII `line` spinners instead of unicode dots.
24
+ - **Support Chat Model Casing**: Updated frontend support assistant to target `openrouter/free` exclusively to maintain service reliability.
25
+
26
+ ## [1.47.1] - 2026-07-18
27
+
28
+ ### Added
29
+ - **Referral Program**: Launched a full referral system. Referrers earn a 2% per-plan discount for each referred user who purchases a subscription. Discounts stack per-plan up to 100% (fully free). Every payment renewal by a referee adds another 2%. Referral dashboard available at `/referral` with live discount breakdown, progress bars, copy-ready referral link/code, and a leaderboard.
30
+ - **Instant Server-Side Deletion**: Connected client share deletion to a new `DELETE /shares/delete/{share_id}` server endpoint to destroy shared zip packages and metadata instantly when removed from the CLI dashboard.
31
+ - **Custom Exclude Checklist Option**: Embedded a dynamic `[ Add custom files/folders... ]` checkbox directly into the share wizard to prompt for custom omits only when selected, rather than asking unconditionally.
32
+ - **Exclusion Path Root Validation**: Added validation to reject and display warnings for typed/pasted custom paths that fall outside the current workspace root directory.
33
+ - **Ctrl+D Dashboard Shortcut**: Resolved key collision where pressing `D` got typed in the default-focused search bar by binding `Ctrl+D` globally to delete the active share.
34
+
35
+ ### Fixed
36
+ - **Content Security Policy Alignment**: Added `https://ipapi.co` and `https://analytics.google.com` to Netlify's `connect-src` CSP header rules, allowing the website frontend to complete geolocated IP checking and analytics telemetry during startup without throwing console errors or blocking the AI chat component.
37
+ - **Unicode Markdown Rendering Fallbacks**: Patched Rich's markdown rule, table, and list item components to detect legacy Command Prompt terminals and fallback to safe ASCII representations (`*` for bullets, `-` for rules, and `+--+` for table grids) instead of throwing UnicodeEncodeErrors or printing replacement boxes.
38
+ - **Unicode Fallback Spinners**: Re-engineered all loading/thinking spinners and progress bar characters to detect legacy Windows CMD/conhost terminals and non-UTF-8 console environments, falling back to clean ASCII patterns (`['|', '/', '-', '\\']` and `[#---]`) to prevent rendering boxes/question marks.
39
+ - **Graceful Prompt-Toolkit Dialog Exits**: Introduced a safe-exit mechanism to catch and prevent unhandled `Application.exit()` loop exceptions.
40
+ - **NameError in share_tui.py**: Added typing imports to fix NameError in interactive dialogs.
41
+ - **Server upload limit**: Raised file upload threshold from 25MB to 1GB and enforced plan-specific limits.
42
+ - **Bonus quota tracking**: Fixed regular quota deduction when prioritizing bonus credit quota.
43
+ - **Bonus limit display**: Standardized bonus quota percent relative to maximum allowed plan capacity and added available vs max credits indicator.
44
+ - **Quota preference override**: Fixed schema bug to honor X-Preferred-Quota client header.
45
+
46
+ ## [1.47.0] - 2026-07-17
47
+
48
+ ### Added
49
+ - **Multi-Language File Outliner**: Re-engineered `view_file_outline` to support Python, JavaScript, TypeScript, HTML, CSS, JSON, and Markdown. It uses dedicated structural parsers and token matching to cleanly output class names, function definitions, HTML IDs/tags, and CSS classes without throwing SyntaxErrors. This lets non-Python web applications benefit from token-saving structural navigation.
50
+ - **Global Tools Expansion State**: Transitioned `Ctrl+O` to use a global toggled state (`STATE["tools_expanded"]`). This ensures all previous, current, and future tool call boxes respect the toggled collapse/expand mode, preventing layout fragmentation or broken boxes when navigating or printing new tool results.
51
+ - **Inline Ctrl+O Tool Expansions**: Re-engineered the `Ctrl+O` keypress handler. Instead of launching a full-screen scrollable sub-application that clears the screen, it now performs an inline, in-place toggle of the last executed tool's results directly in the terminal scrollback history. It uses cursor-up and line-erasing ANSI escape sequences to smoothly redraw the panel between collapsed and expanded states without screen pollution.
52
+ - **Persistent Session Memory Checkpointing**: Integrated structured external task memory log (`.utim/session_summary.md`) that logs completed step objectives and file change lists on every successful turn. Injects this running summary directly into system instructions to prevent context amnesia, loops, and work duplication.
53
+ - **Safety-Net Context Auto-Compression**: Demoted auto-compression to a safety net, removing the hard-coded caps (12k/32k) and message-count triggers. Auto-compression now dynamically scales to 90% of the model's actual physical context window, allowing models to fully use their capacity.
54
+ - **Markdown-Aware ANSI Token Streaming**: Engineered a hybrid chunk streaming processor. Text is received in chunks, parsed into complete logical blocks (like lines or table segments), pre-rendered using Rich's Markdown compiler to align columns and apply styles, and then streamed to the screen character-by-character while keeping ANSI escape codes atomic to ensure a smooth, beautiful, and flicker-free visual output.
55
+ - **Raised Context Compression Caps**: Raised context compression thresholds (64k for small models and 120k for large models) to utilize the model's actual context window capacity, preventing loop cycles and amnesia bugs during file editing.
56
+
57
+ ### Changed
58
+ - **Flicker-Free Line-Buffered Streaming**: Restored line-buffered stdout streaming to completely eliminate terminal double-buffering flickering while keeping the prompt_toolkit event loop active for command typing and prompt queueing.
59
+ - **Auto Word Wrapping**: Integrated automatic markdown-aware word wrapping for streamed responses, keeping words whole while preserving code block layout.
60
+ - **TUI Cursor & Selection Enhancements**: Added custom keybindings for `Ctrl+A`, `Backspace`, and `Delete` to allow selecting and clearing the entire input field in one keypress.
61
+ - **Accidental History-Load Prevention**: Refined Up/Down arrow keys to only trigger history loading when the cursor is at the prompt boundary, preventing accidental clearing of typed prompts.
62
+ - **Balanced Speed & Safety**: Updated core directives to prioritize fast compiler/test checks (`run_command`) over expensive file re-reads (`read_file`).
63
+
64
+ ### Fixed
65
+ - **Aborted Task Response Resurrection**: Resolved a bug where aborting a task and immediately submitting a new prompt would clear the cancellation event globally, causing the still-exiting background thread to ignore the cancel state and print its output later. Added a thread lock (`_run_queue_lock`) to serialize background task executions, forcing new tasks to wait until the aborted thread finishes winding down and exits before starting.
66
+ - **Instant Agent Halts after Tool Confirmation**: Resolved background task thread collisions during interactive Arrow-key menu confirmations. Ignored prompt_toolkit keypresses (Enter, Arrows, Esc, Ctrl+C) and temporarily marked the input field as read-only while the confirmation menu is capturing keys via `msvcrt.getwch()`. Furthermore, print tracebacks for all unhandled task execution exceptions to make background stops transparent.
67
+ - **Glitchy/Broken Live Streaming Text**: Replaced high-frequency character-by-character Rich stdout writes and console flushes with line-by-line printing. This prevents prompt_toolkit's `patch_stdout` from invoking thousands of terminal redraws per second, resolving truncation, cutoffs, and empty responses.
68
+ - **Dynamic Global Tool Expansion Toggle**: Re-engineered `Ctrl+O` to flip the global `STATE["tools_expanded"]` and trigger a clean session history redraw. This redraws all visible previous, current, and future tool call boxes in the correct toggled state without leaving fragmented or broken layout boxes.
69
+ - **Select-All Deletion**: Updated Backspace and Delete keybindings to directly clear selection ranges when selection is active, ensuring prompt-toolkit's selection state behaves naturally.
70
+ - **Rich Console Native Character Streaming**: Replaced direct raw `sys.stdout.write` with Rich Console output slices. Pre-rendered lines are converted into Rich `Text` objects via `Text.from_ansi` and printed character-by-character using `self.console.print(char_text, end="")`. This resolves character truncation, cursor jumps, and missing chunks on Windows systems by allowing Rich to handle the platform-specific terminal API translation.
71
+ - **Rich-Native Markdown Wrapping**: Removed manual textwrap.wrap preprocessing from the markdown streaming buffer. Relying on Rich's native layout rendering preserves markdown syntax characters, leading list indentation spaces, and avoids cutting off prefix letters or inserting hard line breaks inside paragraphs.
72
+
73
+ ## [1.46.40] - 2026-07-14
74
+
75
+ ### Changed
76
+ - **Blender Tool Maintenance**: Disabled the Blender 3D tool and added an "Under Maintenance" note in the tools dialog while the pipeline is restructured.
77
+
78
+
79
+ ## [1.46.39] - 2026-07-13
80
+
81
+ ### Added
82
+ - **Server Completions Search Proxy**: Implemented `/completions/search` search proxy to securely query Tavily via Railway-configured keys, enabling zero-config web search on CLI clients.
83
+ - **Config Collision Resolution**: Fixed home-directory path resolution collision that caused settings (like `/chatrestore` and subagent models) to overwrite and revert.
84
+ - **Quota Endpoint UnboundLocalError Fix**: Resolved server crash on `/quota` endpoint for non-free plan users.
85
+ - **Model Selector UI Refactor**: Removed duplicate sentinel prepending blocks in the subagent model selection dialog.
86
+
87
+
88
+ ## [1.46.38] - 2026-07-12
89
+
90
+ ### Added
91
+ - **True Per-User Rate Limiting**: Migrated rate limiting to API key-based validation to ensure independent 30 req/min/user buckets.
92
+ - **Decoupled Quota UI**: Separated monthly free credits from purchased bonus credits into two distinct rows in `utim quota`.
93
+ - **Resumed Tool Call History**: Fixed a critical state restoration bug that skipped rendering in-progress tool calls and generated image panels upon resuming a session.
94
+ - **Silent Image Generation**: Suppressed verbose debug logs and prompt expander outputs during image gen.
95
+ - **Fair Image Billing**: Fixed OpenRouter mock-token overcharging by setting image generations to a flat 50 credits ($0.05).
96
+
97
+
98
+ ## [1.46.37] - 2026-07-12
99
+ - **Separate Bonus/Monthly Quota Checks**: Decoupled monthly free usage from purchased bonus credits on the backend so bonus usage doesn't permanently lock out standard 5-hour free refills.
100
+ - **Friendly Bonus Exhausted Tips**: Added CLI prompts instructing users to switch to available free models (or run `utim reset`) when their premium bonus credits are fully exhausted.
101
+ - **Non-Fatal Wheel Failures**: Updated installer to treat mobile/Termux precompiled wheel failures as non-fatal, allowing clean fallback to source compilation.
102
+ - **Client SSL Bypass Flags**: Added `--ssl-verify` / `--no-ssl-verify` client flags to help debug/bypass certificate issues.
103
+ ## [1.46.36] - 2026-07-12
104
+
105
+ ### Added
106
+ - **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.
107
+
108
+ ## [1.46.35] - 2026-07-11
109
+
110
+ ### Added
111
+ - **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.
112
+
113
+ ### Fixed
114
+ - **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.
115
+
116
+ ## [1.46.34] - 2026-07-11
117
+
118
+ ### Added
119
+ - **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.
120
+ - **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".
121
+
122
+ ### Fixed
123
+ - **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.
124
+ - **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.
125
+
126
+ ## [1.46.33] - 2026-07-11
127
+
128
+ ### Added
129
+ - **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.
130
+ - **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.
131
+
132
+ ### Fixed
133
+ - **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.
134
+ - **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.
135
+ - **Website GitHub Link Removal**: Removed GitHub project URLs, core repository connection cards, and community links from the landing pages and pricing documents.
136
+
137
+ ## [1.46.31] - 2026-07-11
138
+
139
+ ### Added
140
+ - **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.
141
+ - **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.
142
+
143
+ ### Fixed
144
+ - **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`.
145
+ - **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.
146
+ - **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.
147
+ - **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'`.
148
+
149
+ ## [1.46.29] - 2026-07-11
150
+
151
+ ### Fixed
152
+ - **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.
153
+ - **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.
154
+ - **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).
155
+
156
+ ## [1.46.28] - 2026-07-11
157
+
158
+ ### Added
159
+ - **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.
160
+ - **Aborted Turn Progress & Reflection**: Ensured aborted responses preserve partial progress and trigger a background reflection phase to extract lessons from failed/interrupted runs.
161
+
162
+ ### Fixed
163
+ - **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.
164
+ - **Filtered MCP Notification Context**: Updated MCP notifications to filter out disabled tools, preventing the agent from trying to call disabled MCP tools.
165
+ - **Research File XML Cleanup**: Fixed the codebase research subagent to forbid and automatically strip hallucinated XML tool-calling syntax in its markdown reports.
166
+
167
+ ## [1.46.27] - 2026-07-10
168
+
169
+ ### Fixed
170
+ - **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.
171
+ - **Piped Output Formatting**: Corrected command output formatting and token usage tracking when the CLI is run in a piped or non-TTY environment.
172
+
173
+ ### Changed
174
+ - **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.
175
+
176
+ ## [1.46.26] - 2026-07-09
177
+
178
+ ### Added
179
+ - **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.
180
+
181
+ ## [1.46.24] - 2026-07-09
182
+
183
+ ### Added
184
+ - **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.
185
+
186
+ ## [1.46.23] - 2026-07-09
187
+
188
+ ### Fixed
189
+ - **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.
190
+
191
+ ## [1.46.22] - 2026-07-09
192
+
193
+ ### Fixed
194
+ - **Instant Ctrl+C Interruption**: Halts execution instantly (within 100ms) on Ctrl+C or Escape, outputting `⊘ Aborted.` directly and avoiding delay/retry loops.
195
+ - **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.
196
+ - **Tools Dialog Text Overflow**: Added dynamic word wrapping in the tools configuration dialog to prevent long descriptions from spilling off-screen.
197
+ - **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.
198
+ - **Decoupled Tool Gating**: Restructured disabled tools filtering to only apply to the main user agent, preserving normal tool capabilities for background subagents.
199
+
200
+ ## [1.46.21] - 2026-07-07
201
+
202
+ ### Added
203
+ - **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.
204
+
205
+ ### Fixed
206
+ - **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`).
207
+ - **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.
208
+ - **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`.
209
+ - **Directory Read Failures**: Upgraded `read_file` to gracefully return a directory suggestion instead of throwing a `PermissionError` when given a directory path.
210
+ - **Repetitive Greeting Responses**: Shortened system prompt responses for casual greetings/inputs to prevent the agent from repeating its long introduction intro.
211
+
212
+ ## [1.46.20] - 2026-07-07
213
+
214
+ ### Fixed
215
+ - **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.
216
+ - **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`.
217
+
218
+ ## [1.46.19] - 2026-07-07
219
+
220
+ ### Fixed
221
+ - **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+.
222
+
223
+ ## [1.46.18] - 2026-07-07
224
+
225
+ ### Fixed
226
+ - **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+.
227
+ - **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.
228
+
229
+ ### Added
230
+ - **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.
231
+
232
+ ## [1.46.17] - 2026-07-06
233
+
234
+ ### Fixed
235
+ - **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.
236
+
237
+ ### Added
238
+ - **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.
239
+ - **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.
240
+ - **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.
241
+
242
+ ## [1.44.2] - 2026-07-02
243
+
244
+ ### Fixed
245
+ - **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.
246
+ - **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.
247
+ - **Image Subagent Config:** Separated the Image Generation model and the Prompt Expander LLM in the subagent configuration UI, allowing users to configure both independently.
248
+ - **Minor:** Minor Bug Fixes
249
+
250
+ ## [1.43.20] - 2026-07-01
251
+
252
+ ### Added
253
+ - **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.
254
+ - **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.
255
+ - **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.
256
+ - **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.
257
+ - **Changelog Tab on Website**: The terminal website now includes a `↻ Changelog` tab that fetches live release notes from the Railway server on load.
258
+ - **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.
259
+ - **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.
260
+ - **`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.
261
+
262
+ ### Changed
263
+ - **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.
264
+ - **Hobby Plan Model Access**: Hobby plan `allowed_models` corrected to `"all"` so users can access the full model registry (not just free-tier models).
265
+ - **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.
266
+ - **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.
267
+
268
+ ### Fixed
269
+ - **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.
270
+ - **Double-Exit Crash (TUI)**: Wrapped all keyboard exit callbacks (`ENTER`/`ESC`/`q`/`CTRL+C`) in `try...except` blocks to prevent double-fire tracebacks.
271
+ - **`/changelog` Route No Longer Shows Legacy Page**: All website routes (including `/changelog`) now correctly map to the `<PowershellUI />` terminal component. Legacy standalone page removed.
272
+
273
+ ---
274
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: utim-cli
3
- Version: 1.47.2
3
+ Version: 1.47.4
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.47.2"
7
+ version = "1.47.4"
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"
@@ -86,7 +86,7 @@ include = ["utim_cli*"]
86
86
  exclude = ["tests*", "landing*", "scripts*"]
87
87
 
88
88
  [tool.setuptools.package-data]
89
- utim_cli = ["mcp_registry.json", "_version.py"]
89
+ utim_cli = ["mcp_registry.json", "_version.py", "server/docs_md/*.md"]
90
90
 
91
91
  [tool.pytest.ini_options]
92
92
  markers = [
@@ -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.47.2"
8
+ __version__ = "1.47.4"
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.47.2"
14
+ VERSION = "1.47.4"
@@ -4,8 +4,10 @@ import json
4
4
  import sqlite3
5
5
  from utim_cli.logger import log_info, log_error, log_warning
6
6
 
7
- BACKUP_DIR = ".utim_backup"
8
- UTIM_DIR = ".utim"
7
+ from utim_cli.config import get_utim_dir
8
+
9
+ BACKUP_DIR = str(get_utim_dir().parent / ".utim_backup")
10
+ UTIM_DIR = str(get_utim_dir())
9
11
 
10
12
  def is_json_valid(path: str) -> bool:
11
13
  """Check if JSON file exists and is parseable."""