utim-cli 2.4.1__tar.gz → 2.4.3__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 (200) hide show
  1. {utim_cli-2.4.1 → utim_cli-2.4.3}/CHANGELOG.md +24 -0
  2. {utim_cli-2.4.1/utim_cli.egg-info → utim_cli-2.4.3}/PKG-INFO +2 -1
  3. {utim_cli-2.4.1 → utim_cli-2.4.3}/pyproject.toml +2 -1
  4. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim/__init__.py +1 -1
  5. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/__init__.py +1 -1
  6. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/_version.py +1 -1
  7. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/agent.py +44 -0
  8. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/architecture_indexer.py +269 -251
  9. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/ask_helper.py +5 -4
  10. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/bootstrap.py +7 -0
  11. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/brain.py +179 -202
  12. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/client_utils.py +185 -48
  13. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/config.py +6 -1
  14. utim_cli-2.4.3/utim_cli/constants.py +118 -0
  15. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/context_pruner.py +45 -46
  16. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/crawler/engine.py +187 -14
  17. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/harbor.py +212 -201
  18. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/mcp_client.py +359 -359
  19. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/orchestrator.py +215 -112
  20. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/orchestrator_helpers.py +163 -193
  21. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/orchestrator_llm_transport.py +146 -52
  22. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/orchestrator_tool_exec.py +35 -9
  23. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/orchestrator_turn_history.py +163 -34
  24. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/plugins/schema.py +257 -257
  25. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/reflection.py +43 -4
  26. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/sdk/session.py +340 -340
  27. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/admin_auth.py +6 -0
  28. utim_cli-2.4.3/utim_cli/server/api_models_db.py +1284 -0
  29. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/audit_log.py +1 -1
  30. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/auth.py +142 -22
  31. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/captcha.py +74 -7
  32. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/concurrency.py +40 -0
  33. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/db.py +325 -18
  34. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/docs_md/docs.md +1 -1
  35. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/docs_md/pricing.md +24 -24
  36. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/email_utils.py +80 -1
  37. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/key_rotator.py +127 -2
  38. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/logging_config.py +1 -1
  39. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/micro_batcher.py +343 -343
  40. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/models.py +535 -228
  41. utim_cli-2.4.3/utim_cli/server/platform_billing.py +217 -0
  42. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/pricing_updater.py +211 -198
  43. utim_cli-2.4.3/utim_cli/server/provider_balance.py +472 -0
  44. utim_cli-2.4.3/utim_cli/server/provider_discovery.py +546 -0
  45. utim_cli-2.4.3/utim_cli/server/provider_router.py +847 -0
  46. utim_cli-2.4.3/utim_cli/server/rate_limit.py +112 -0
  47. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/router.py +599 -204
  48. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/__init__.py +8 -0
  49. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/admin_db_routes.py +95 -0
  50. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/admin_providers_routes.py +68 -0
  51. utim_cli-2.4.3/utim_cli/server/routes/api_gateway_extensions_routes.py +544 -0
  52. utim_cli-2.4.3/utim_cli/server/routes/api_key_routes.py +117 -0
  53. utim_cli-2.4.3/utim_cli/server/routes/api_models_admin_routes.py +967 -0
  54. utim_cli-2.4.3/utim_cli/server/routes/api_models_public_routes.py +2833 -0
  55. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/auth_routes.py +100 -17
  56. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/billing_routes.py +276 -276
  57. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/completion_routes.py +261 -109
  58. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/credit_routes.py +2 -2
  59. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/feedback_routes.py +106 -88
  60. utim_cli-2.4.3/utim_cli/server/routes/provider_compat_routes.py +575 -0
  61. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/quota_routes.py +131 -102
  62. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/quota_share_routes.py +768 -768
  63. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/rewards_routes.py +95 -62
  64. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/session_routes.py +201 -201
  65. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/share_routes.py +369 -369
  66. utim_cli-2.4.3/utim_cli/server/routes/wallet_routes.py +193 -0
  67. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/webhook_routes.py +58 -7
  68. utim_cli-2.4.3/utim_cli/server/signup_guard.py +237 -0
  69. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/utils.py +354 -3
  70. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/state.py +1 -0
  71. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/subagent_manager.py +1621 -1548
  72. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tools.py +1193 -82
  73. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/model_dialog.py +345 -73
  74. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/resume_dialog.py +1 -1
  75. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/tools_dialog.py +9 -1
  76. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/utim.py +330 -60
  77. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/voice.py +23 -6
  78. utim_cli-2.4.3/utim_cli/voice_coding.py +288 -0
  79. utim_cli-2.4.3/utim_cli/voice_events.py +409 -0
  80. utim_cli-2.4.3/utim_cli/voice_handler.py +695 -0
  81. utim_cli-2.4.3/utim_cli/voice_instant.py +233 -0
  82. utim_cli-2.4.3/utim_cli/voice_orchestrator.py +392 -0
  83. utim_cli-2.4.3/utim_cli/voice_session.py +964 -0
  84. utim_cli-2.4.3/utim_cli/voice_stt.py +502 -0
  85. utim_cli-2.4.3/utim_cli/voice_tts.py +955 -0
  86. {utim_cli-2.4.1 → utim_cli-2.4.3/utim_cli.egg-info}/PKG-INFO +2 -1
  87. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli.egg-info/SOURCES.txt +19 -0
  88. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli.egg-info/requires.txt +1 -0
  89. utim_cli-2.4.1/utim_cli/constants.py +0 -50
  90. utim_cli-2.4.1/utim_cli/server/rate_limit.py +0 -38
  91. utim_cli-2.4.1/utim_cli/voice_handler.py +0 -0
  92. {utim_cli-2.4.1 → utim_cli-2.4.3}/LICENSE +0 -0
  93. {utim_cli-2.4.1 → utim_cli-2.4.3}/MANIFEST.in +0 -0
  94. {utim_cli-2.4.1 → utim_cli-2.4.3}/README.md +0 -0
  95. {utim_cli-2.4.1 → utim_cli-2.4.3}/setup.cfg +0 -0
  96. {utim_cli-2.4.1 → utim_cli-2.4.3}/setup.py +0 -0
  97. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/_chip_test.py +0 -0
  98. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/_verify_repro.py +0 -0
  99. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/_verify_syntax.py +0 -0
  100. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/_wizard_smoke_test.py +0 -0
  101. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/auth.py +0 -0
  102. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/backup.py +0 -0
  103. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/billing.py +0 -0
  104. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/blender_agent.py +0 -0
  105. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/builtin/skills/utim-guide/SKILL.md +0 -0
  106. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/context_inspector.py +0 -0
  107. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/crawler/__init__.py +0 -0
  108. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/crawler/markdown_distiller.py +0 -0
  109. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/dependency_manager.py +0 -0
  110. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/doctor.py +0 -0
  111. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/evidence_registry.py +0 -0
  112. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/knowledge_graph.py +0 -0
  113. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/local_db.py +0 -0
  114. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/logger.py +0 -0
  115. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/mcp_clean_wrapper.py +0 -0
  116. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/mcp_registry.json +0 -0
  117. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/models.txt +0 -0
  118. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/personalities.py +0 -0
  119. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/platform_installer.py +0 -0
  120. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/plugins/__init__.py +0 -0
  121. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/plugins/hooks.py +0 -0
  122. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/plugins/loader.py +0 -0
  123. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/plugins/manager.py +0 -0
  124. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/plugins/registry.py +0 -0
  125. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/plugins/runtime.py +0 -0
  126. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/plugins/tool_loader.py +0 -0
  127. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/report.py +0 -0
  128. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/scrapy_search.py +0 -0
  129. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/sdk/__init__.py +0 -0
  130. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/sdk/config.py +0 -0
  131. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/sdk/context.py +0 -0
  132. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/sdk/events.py +0 -0
  133. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/sdk/handlers.py +0 -0
  134. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/sdk/sidecar.py +0 -0
  135. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/__init__.py +0 -0
  136. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/attribution.py +0 -0
  137. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/batch_processor.py +0 -0
  138. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/cli_auth.py +0 -0
  139. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/docs_md/SECRET_PROVISIONING.md +0 -0
  140. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/docs_md/about.md +0 -0
  141. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/docs_md/changelog.md +0 -0
  142. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/docs_md/features.md +0 -0
  143. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/docs_md/license.md +0 -0
  144. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/docs_md/privacy.md +0 -0
  145. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/docs_md/refund.md +0 -0
  146. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/docs_md/support.md +0 -0
  147. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/docs_md/terms.md +0 -0
  148. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/exchange_rate.py +0 -0
  149. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/firebase.py +0 -0
  150. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/fix_duplicate_users.py +0 -0
  151. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/history.py +0 -0
  152. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/local_llm.py +0 -0
  153. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/model_agent.py +0 -0
  154. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/plan_integrity.py +0 -0
  155. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/provision_build.py +0 -0
  156. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/rewards_engine.py +0 -0
  157. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/admin_bonus_routes.py +0 -0
  158. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/marketplace_routes.py +0 -0
  159. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/referral_routes.py +0 -0
  160. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/routes/security_routes.py +0 -0
  161. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/security_alerts.py +0 -0
  162. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/server.py +0 -0
  163. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/server/storage_nodes.py +0 -0
  164. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/share.py +0 -0
  165. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/share_tui.py +0 -0
  166. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/situational_scoring.py +0 -0
  167. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/syntax_fix.py +0 -0
  168. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/task_dispatcher.py +0 -0
  169. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/task_logger.py +0 -0
  170. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tools_grep.py +0 -0
  171. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/__init__.py +0 -0
  172. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/compression_dialog.py +0 -0
  173. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/feedback_dialog.py +0 -0
  174. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/history_dialog.py +0 -0
  175. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/marketplace_app_state.py +0 -0
  176. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/marketplace_dialog.py +0 -0
  177. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/marketplace_layout_engine.py +0 -0
  178. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/mcp_dialog.py +0 -0
  179. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/miniagents_dialog.py +0 -0
  180. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/personality_dialog.py +0 -0
  181. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/plugins_dialog.py +0 -0
  182. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/publish_dialog.py +0 -0
  183. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/quota_dialog.py +0 -0
  184. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/quota_redeem_dialog.py +0 -0
  185. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/quota_share_dialog.py +0 -0
  186. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/rewards_tui.py +0 -0
  187. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/skills_dialog.py +0 -0
  188. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/subagents_dialog.py +0 -0
  189. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/tasks_dialog.py +0 -0
  190. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/thinking_display.py +0 -0
  191. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/tui/update_dialog.py +0 -0
  192. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/update_checker.py +0 -0
  193. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/utilities.py +0 -0
  194. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/utimmodel.txt +0 -0
  195. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/vector_memory.py +0 -0
  196. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/wheel.py +0 -0
  197. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli/workspace.py +0 -0
  198. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli.egg-info/dependency_links.txt +0 -0
  199. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli.egg-info/entry_points.txt +0 -0
  200. {utim_cli-2.4.1 → utim_cli-2.4.3}/utim_cli.egg-info/top_level.txt +0 -0
@@ -1,5 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.4.3] - 2026-10-13
4
+
5
+ ### 🛡️ Process Immunity & Self-Kill Protection
6
+ - **Immunity Against Self-Termination**: Protected the UTIM process tree from accidental termination when executing shell commands like `taskkill`, `kill`, or `Stop-Process`. Resolves ancestry PIDs and blocks commands targeting own PID or executable names.
7
+
8
+ ### 🐛 Model Response & Streaming Fixes
9
+ - **Claude / Anthropic Completion Stability**: Fixed an issue where blank finish reasons on clean streaming completions defaulted to `"length"`, triggering spurious truncation warnings.
10
+ - **Removed Active-Turn `[status: pending]` Tagging**: Removed active user message status injection that previously confused models (especially Claude) into premature halts or continuation loops.
11
+ - **Backtick Heuristic Gating**: Gated unclosed code-block detection to only fire on non-clean completions, preventing false truncation triggers on prose responses.
12
+
13
+ ## [2.4.2] - 2026-10-13
14
+
15
+ ### 🤖 Sub-Agent Swarm Model Configuration & Hardcoded Lock
16
+ - **Swarm Model Settings in `/model`**: Added a dedicated configuration section in the `/model` dialog allowing users to choose the model used across all swarm subagents.
17
+ - **Strict User Lock**: When a specific model is selected, it is hardcoded—the main agent cannot override or change it, even if custom `model_id` parameters are passed to `invoke_subagents`.
18
+ - **Dynamic Auto Mode**: Added a "Let the agent decide (Auto)" option allowing the main agent to dynamically assign models per task or fall back to its active model.
19
+
20
+ ### ⚡ Non-Interactive Command Execution (`--hard-skip-perms`)
21
+ - **Hard Skip Permissions**: Added the `--hard-skip-perms` CLI flag, `UTIM_HARD_SKIP_PERMS=1` environment variable, and `/hard-skip-perms` slash command.
22
+ - **Unrestricted Command Execution**: Automatically approves terminal commands without prompting for user confirmation, even for unsafe or destructive commands.
23
+
24
+ ### 🐛 Bug Fixes
25
+ - **Premature Halting Fix**: Fixed an issue where the model abruptly stopped if it completed inspection tools and emitted an action promise without executing further mutation tools, now triggering an automatic continuation nudge.
26
+
3
27
  ## [2.4.1] - 2026-09-18
4
28
 
5
29
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: utim-cli
3
- Version: 2.4.1
3
+ Version: 2.4.3
4
4
  Summary: UTIM – Universal Terminal Intelligence Manager. A powerful agentic AI coding assistant for your terminal.
5
5
  License: Emend AI Proprietary EULA
6
6
  Project-URL: Homepage, https://utim.dev
@@ -22,6 +22,7 @@ Description-Content-Type: text/markdown
22
22
  License-File: LICENSE
23
23
  Requires-Dist: requests==2.31.0
24
24
  Requires-Dist: aiohttp>=3.9.5
25
+ Requires-Dist: httpx>=0.25.0
25
26
  Requires-Dist: python-dotenv==1.0.1
26
27
  Requires-Dist: urllib3==1.26.18
27
28
  Requires-Dist: charset-normalizer==3.3.2
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "utim-cli"
7
- version = "2.4.1"
7
+ version = "2.4.3"
8
8
 
9
9
  description = "UTIM – Universal Terminal Intelligence Manager. A powerful agentic AI coding assistant for your terminal."
10
10
  readme = "README.md"
@@ -25,6 +25,7 @@ classifiers = [
25
25
  dependencies = [
26
26
  "requests==2.31.0",
27
27
  "aiohttp>=3.9.5",
28
+ "httpx>=0.25.0",
28
29
  "python-dotenv==1.0.1",
29
30
  "urllib3==1.26.18",
30
31
  "charset-normalizer==3.3.2",
@@ -14,7 +14,7 @@ Quickstart:
14
14
  try:
15
15
  from utim_cli._version import VERSION as __version__
16
16
  except ImportError:
17
- __version__ = "2.4.1"
17
+ __version__ = "2.4.3"
18
18
 
19
19
  # Developer-friendly core classes (similar to `import genai` / `import openai`)
20
20
  from utim_cli.sdk.session import UtimSession as Session
@@ -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__ = "2.4.1"
8
+ __version__ = "2.4.3"
9
9
 
10
10
 
11
11
  import builtins, os, pathlib, urllib.parse, re
@@ -11,6 +11,6 @@
11
11
  # from here so every surface stays in sync automatically.
12
12
  # ─────────────────────────────────────────────────────────────────────────────
13
13
 
14
- VERSION = "2.4.1"
14
+ VERSION = "2.4.3"
15
15
 
16
16
 
@@ -454,6 +454,15 @@ class ReActAgent:
454
454
  "tool_calls": tool_calls,
455
455
  })
456
456
 
457
+ # Clear any stale vision images and videos from a previous iteration
458
+ try:
459
+ import utim_cli.tools as _tools_module
460
+ _tools_module._pending_vision_images.clear()
461
+ _tools_module._pending_vision_videos.clear()
462
+ _tools_module._active_model_id = self.model_id
463
+ except Exception:
464
+ pass
465
+
457
466
  # Execute each tool call
458
467
  for i, tc in enumerate(tool_calls):
459
468
  result = self._execute_tool_call(tc)
@@ -465,6 +474,41 @@ class ReActAgent:
465
474
  "tool_call_id": tc_id,
466
475
  "content": result,
467
476
  })
477
+
478
+ # Drain and inject vision images & native videos into conversation
479
+ try:
480
+ import utim_cli.tools as _tools_module
481
+ _vision_queue = getattr(_tools_module, "_pending_vision_images", [])
482
+ for _vimg in list(_vision_queue or []):
483
+ self.messages.append({
484
+ "role": "user",
485
+ "content": [
486
+ {"type": "text", "text": _vimg.get("group_header") or f"[{_vimg.get('meta', 'Image')}]"},
487
+ {
488
+ "type": "image_url",
489
+ "image_url": {"url": f"data:{_vimg['mime']};base64,{_vimg['b64']}"},
490
+ },
491
+ ],
492
+ })
493
+ if _vision_queue:
494
+ _vision_queue.clear()
495
+
496
+ _video_queue = getattr(_tools_module, "_pending_vision_videos", [])
497
+ for _vent in list(_video_queue or []):
498
+ self.messages.append({
499
+ "role": "user",
500
+ "content": [
501
+ {"type": "text", "text": _vent.get("header") or f"[Video: {_vent.get('filepath', '')}]"},
502
+ {
503
+ "type": "video_url",
504
+ "video_url": {"url": f"data:{_vent['mime']};base64,{_vent['b64']}"},
505
+ },
506
+ ],
507
+ })
508
+ if _video_queue:
509
+ _video_queue.clear()
510
+ except Exception:
511
+ pass
468
512
  else:
469
513
  self.console.print(f"\n[bold yellow]Agent paused after reaching maximum iterations ({max_iterations}).[/bold yellow]")
470
514
  self.console.print("[dim]You can type 'continue' to resume the task.[/dim]\n")