utim-cli 2.2.3__tar.gz → 2.3.0__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 (134) hide show
  1. {utim_cli-2.2.3 → utim_cli-2.3.0}/CHANGELOG.md +5 -0
  2. {utim_cli-2.2.3/utim_cli.egg-info → utim_cli-2.3.0}/PKG-INFO +1 -1
  3. {utim_cli-2.2.3 → utim_cli-2.3.0}/pyproject.toml +1 -1
  4. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/__init__.py +1 -1
  5. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/_version.py +1 -1
  6. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/agent.py +12 -1
  7. utim_cli-2.3.0/utim_cli/ask_helper.py +652 -0
  8. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/brain.py +199 -24
  9. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/constants.py +2 -0
  10. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/orchestrator.py +597 -344
  11. utim_cli-2.3.0/utim_cli/server/admin_auth.py +163 -0
  12. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/db.py +15 -11
  13. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/micro_batcher.py +99 -60
  14. utim_cli-2.3.0/utim_cli/server/model_agent.py +41 -0
  15. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/models.py +120 -75
  16. utim_cli-2.3.0/utim_cli/server/pricing_updater.py +215 -0
  17. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/router.py +202 -19
  18. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/routes/rewards_routes.py +15 -19
  19. utim_cli-2.3.0/utim_cli/subagent_manager.py +1280 -0
  20. utim_cli-2.3.0/utim_cli/task_dispatcher.py +413 -0
  21. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tools.py +509 -39
  22. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/marketplace_layout_engine.py +21 -21
  23. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/mcp_dialog.py +2 -2
  24. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/miniagents_dialog.py +21 -23
  25. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/model_dialog.py +142 -414
  26. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/skills_dialog.py +19 -23
  27. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/subagents_dialog.py +2 -2
  28. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/utim.py +511 -95
  29. {utim_cli-2.2.3 → utim_cli-2.3.0/utim_cli.egg-info}/PKG-INFO +1 -1
  30. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli.egg-info/SOURCES.txt +3 -0
  31. utim_cli-2.2.3/utim_cli/server/model_agent.py +0 -233
  32. utim_cli-2.2.3/utim_cli/server/pricing_updater.py +0 -144
  33. utim_cli-2.2.3/utim_cli/subagent_manager.py +0 -724
  34. {utim_cli-2.2.3 → utim_cli-2.3.0}/LICENSE +0 -0
  35. {utim_cli-2.2.3 → utim_cli-2.3.0}/MANIFEST.in +0 -0
  36. {utim_cli-2.2.3 → utim_cli-2.3.0}/README.md +0 -0
  37. {utim_cli-2.2.3 → utim_cli-2.3.0}/setup.cfg +0 -0
  38. {utim_cli-2.2.3 → utim_cli-2.3.0}/setup.py +0 -0
  39. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/_check_obj.py +0 -0
  40. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/_find_mcp.py +0 -0
  41. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/_find_plan.py +0 -0
  42. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/_find_tool.py +0 -0
  43. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/_patch_multimodal.py +0 -0
  44. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/_test_regex.py +0 -0
  45. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/auth.py +0 -0
  46. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/backup.py +0 -0
  47. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/billing.py +0 -0
  48. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/blender_agent.py +0 -0
  49. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/bootstrap.py +0 -0
  50. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/client_utils.py +0 -0
  51. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/config.py +0 -0
  52. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/context_pruner.py +0 -0
  53. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/doctor.py +0 -0
  54. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/harbor.py +0 -0
  55. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/knowledge_graph.py +0 -0
  56. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/local_db.py +0 -0
  57. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/logger.py +0 -0
  58. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/mcp_clean_wrapper.py +0 -0
  59. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/mcp_client.py +0 -0
  60. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/mcp_registry.json +0 -0
  61. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/models.txt +0 -0
  62. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/reflection.py +0 -0
  63. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/report.py +0 -0
  64. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/scrapy_search.py +0 -0
  65. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/__init__.py +0 -0
  66. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/attribution.py +0 -0
  67. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/audit_log.py +0 -0
  68. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/auth.py +0 -0
  69. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/batch_processor.py +0 -0
  70. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/captcha.py +0 -0
  71. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/cli_auth.py +0 -0
  72. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/docs_md/SECRET_PROVISIONING.md +0 -0
  73. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/docs_md/about.md +0 -0
  74. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/docs_md/changelog.md +0 -0
  75. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/docs_md/docs.md +0 -0
  76. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/docs_md/features.md +0 -0
  77. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/docs_md/license.md +0 -0
  78. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/docs_md/pricing.md +0 -0
  79. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/docs_md/privacy.md +0 -0
  80. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/docs_md/refund.md +0 -0
  81. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/docs_md/support.md +0 -0
  82. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/docs_md/terms.md +0 -0
  83. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/email_utils.py +0 -0
  84. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/exchange_rate.py +0 -0
  85. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/firebase.py +0 -0
  86. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/fix_duplicate_users.py +0 -0
  87. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/history.py +0 -0
  88. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/local_llm.py +0 -0
  89. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/logging_config.py +0 -0
  90. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/provision_build.py +0 -0
  91. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/rate_limit.py +0 -0
  92. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/rewards_engine.py +0 -0
  93. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/routes/__init__.py +0 -0
  94. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/routes/auth_routes.py +0 -0
  95. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/routes/billing_routes.py +0 -0
  96. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/routes/completion_routes.py +0 -0
  97. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/routes/credit_routes.py +0 -0
  98. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/routes/feedback_routes.py +0 -0
  99. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/routes/marketplace_routes.py +0 -0
  100. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/routes/quota_routes.py +0 -0
  101. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/routes/quota_share_routes.py +0 -0
  102. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/routes/referral_routes.py +0 -0
  103. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/routes/security_routes.py +0 -0
  104. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/routes/session_routes.py +0 -0
  105. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/routes/share_routes.py +0 -0
  106. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/server.py +0 -0
  107. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/server/storage_nodes.py +0 -0
  108. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/share.py +0 -0
  109. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/share_tui.py +0 -0
  110. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/situational_scoring.py +0 -0
  111. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/state.py +0 -0
  112. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/__init__.py +0 -0
  113. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/feedback_dialog.py +0 -0
  114. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/history_dialog.py +0 -0
  115. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/marketplace_app_state.py +0 -0
  116. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/marketplace_dialog.py +0 -0
  117. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/publish_dialog.py +0 -0
  118. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/quota_dialog.py +0 -0
  119. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/quota_redeem_dialog.py +0 -0
  120. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/quota_share_dialog.py +0 -0
  121. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/resume_dialog.py +0 -0
  122. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/rewards_tui.py +0 -0
  123. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/thinking_display.py +0 -0
  124. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/tools_dialog.py +0 -0
  125. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/tui/update_dialog.py +0 -0
  126. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/utilities.py +0 -0
  127. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/utimmodel.txt +0 -0
  128. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/vector_memory.py +0 -0
  129. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/wheel.py +0 -0
  130. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli/workspace.py +0 -0
  131. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli.egg-info/dependency_links.txt +0 -0
  132. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli.egg-info/entry_points.txt +0 -0
  133. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli.egg-info/requires.txt +0 -0
  134. {utim_cli-2.2.3 → utim_cli-2.3.0}/utim_cli.egg-info/top_level.txt +0 -0
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.3.0] - 2026-08-18
4
+
5
+ ### 🚀 Features & Enhancements
6
+ - **UTIM Sidecar**: UTIM sidecar is here. Use `/ask` command with your prompt to activate sidecar while your agent is running for parallel research.
7
+
3
8
  ## [2.2.3] - 2026-08-16
4
9
 
5
10
  ### 🛠️ Fixes & Minor Polish
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: utim-cli
3
- Version: 2.2.3
3
+ Version: 2.3.0
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "utim-cli"
7
- version = "2.2.3"
7
+ version = "2.3.0"
8
8
 
9
9
  description = "UTIM – Universal Terminal Intelligence Manager. A powerful agentic AI coding assistant for your terminal."
10
10
  readme = "README.md"
@@ -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.2.3"
8
+ __version__ = "2.3.0"
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.2.3"
14
+ VERSION = "2.3.0"
15
15
 
16
16
 
@@ -111,7 +111,18 @@ class ReActAgent:
111
111
  if func_name == "read_file":
112
112
  lines = result.split("\n")
113
113
  summary.append(f"{len(lines)} lines", style="dim white")
114
- elif func_name in ("write_file", "edit_file"):
114
+ elif func_name == "write_file":
115
+ filepath = args.get("filepath", args.get("path", ""))
116
+ new_content = args.get("content") or args.get("code") or args.get("text") or ""
117
+ if not new_content and filepath and os.path.exists(filepath):
118
+ try:
119
+ with open(filepath, "r", encoding="utf-8", errors="ignore") as _f:
120
+ new_content = _f.read()
121
+ except Exception:
122
+ pass
123
+ lines = new_content.splitlines() if new_content else []
124
+ summary.append(f"{len(lines)} lines", style="dim white")
125
+ elif func_name == "edit_file":
115
126
  first = result.strip().splitlines()[0][:80] if result.strip() else "done"
116
127
  summary.append(first, style="dim white")
117
128
  elif func_name == "run_command":