utim-cli 2.2.3__tar.gz → 2.3.1__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 (144) hide show
  1. {utim_cli-2.2.3 → utim_cli-2.3.1}/CHANGELOG.md +10 -0
  2. {utim_cli-2.2.3/utim_cli.egg-info → utim_cli-2.3.1}/PKG-INFO +1 -1
  3. {utim_cli-2.2.3 → utim_cli-2.3.1}/pyproject.toml +3 -2
  4. utim_cli-2.3.1/utim/__init__.py +76 -0
  5. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/__init__.py +1 -1
  6. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/_version.py +1 -1
  7. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/agent.py +12 -1
  8. utim_cli-2.3.1/utim_cli/ask_helper.py +652 -0
  9. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/brain.py +199 -24
  10. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/constants.py +2 -0
  11. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/context_pruner.py +32 -19
  12. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/orchestrator.py +761 -382
  13. utim_cli-2.3.1/utim_cli/sdk/__init__.py +52 -0
  14. utim_cli-2.3.1/utim_cli/sdk/config.py +41 -0
  15. utim_cli-2.3.1/utim_cli/sdk/context.py +67 -0
  16. utim_cli-2.3.1/utim_cli/sdk/events.py +166 -0
  17. utim_cli-2.3.1/utim_cli/sdk/handlers.py +60 -0
  18. utim_cli-2.3.1/utim_cli/sdk/session.py +333 -0
  19. utim_cli-2.3.1/utim_cli/sdk/sidecar.py +164 -0
  20. utim_cli-2.3.1/utim_cli/server/admin_auth.py +163 -0
  21. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/auth.py +46 -0
  22. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/db.py +62 -11
  23. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/docs_md/docs.md +1 -0
  24. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/docs_md/features.md +1 -0
  25. utim_cli-2.3.1/utim_cli/server/local_llm.py +39 -0
  26. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/micro_batcher.py +114 -69
  27. utim_cli-2.3.1/utim_cli/server/model_agent.py +41 -0
  28. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/models.py +120 -75
  29. utim_cli-2.3.1/utim_cli/server/pricing_updater.py +215 -0
  30. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/router.py +266 -51
  31. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/routes/completion_routes.py +37 -31
  32. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/routes/rewards_routes.py +15 -19
  33. utim_cli-2.3.1/utim_cli/server/server.py +94 -0
  34. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/share.py +99 -99
  35. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/state.py +1 -0
  36. utim_cli-2.3.1/utim_cli/subagent_manager.py +1280 -0
  37. utim_cli-2.3.1/utim_cli/task_dispatcher.py +414 -0
  38. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tools.py +521 -39
  39. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/marketplace_layout_engine.py +21 -21
  40. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/mcp_dialog.py +2 -2
  41. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/miniagents_dialog.py +21 -23
  42. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/model_dialog.py +142 -414
  43. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/skills_dialog.py +19 -23
  44. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/subagents_dialog.py +2 -2
  45. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/utim.py +535 -96
  46. {utim_cli-2.2.3 → utim_cli-2.3.1/utim_cli.egg-info}/PKG-INFO +1 -1
  47. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli.egg-info/SOURCES.txt +11 -0
  48. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli.egg-info/top_level.txt +1 -0
  49. utim_cli-2.2.3/utim_cli/server/local_llm.py +0 -380
  50. utim_cli-2.2.3/utim_cli/server/model_agent.py +0 -233
  51. utim_cli-2.2.3/utim_cli/server/pricing_updater.py +0 -144
  52. utim_cli-2.2.3/utim_cli/server/server.py +0 -60
  53. utim_cli-2.2.3/utim_cli/subagent_manager.py +0 -724
  54. {utim_cli-2.2.3 → utim_cli-2.3.1}/LICENSE +0 -0
  55. {utim_cli-2.2.3 → utim_cli-2.3.1}/MANIFEST.in +0 -0
  56. {utim_cli-2.2.3 → utim_cli-2.3.1}/README.md +0 -0
  57. {utim_cli-2.2.3 → utim_cli-2.3.1}/setup.cfg +0 -0
  58. {utim_cli-2.2.3 → utim_cli-2.3.1}/setup.py +0 -0
  59. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/_check_obj.py +0 -0
  60. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/_find_mcp.py +0 -0
  61. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/_find_plan.py +0 -0
  62. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/_find_tool.py +0 -0
  63. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/_patch_multimodal.py +0 -0
  64. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/_test_regex.py +0 -0
  65. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/auth.py +0 -0
  66. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/backup.py +0 -0
  67. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/billing.py +0 -0
  68. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/blender_agent.py +0 -0
  69. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/bootstrap.py +0 -0
  70. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/client_utils.py +0 -0
  71. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/config.py +0 -0
  72. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/doctor.py +0 -0
  73. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/harbor.py +0 -0
  74. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/knowledge_graph.py +0 -0
  75. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/local_db.py +0 -0
  76. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/logger.py +0 -0
  77. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/mcp_clean_wrapper.py +0 -0
  78. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/mcp_client.py +0 -0
  79. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/mcp_registry.json +0 -0
  80. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/models.txt +0 -0
  81. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/reflection.py +0 -0
  82. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/report.py +0 -0
  83. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/scrapy_search.py +0 -0
  84. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/__init__.py +0 -0
  85. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/attribution.py +0 -0
  86. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/audit_log.py +0 -0
  87. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/batch_processor.py +0 -0
  88. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/captcha.py +0 -0
  89. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/cli_auth.py +0 -0
  90. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/docs_md/SECRET_PROVISIONING.md +0 -0
  91. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/docs_md/about.md +0 -0
  92. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/docs_md/changelog.md +0 -0
  93. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/docs_md/license.md +0 -0
  94. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/docs_md/pricing.md +0 -0
  95. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/docs_md/privacy.md +0 -0
  96. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/docs_md/refund.md +0 -0
  97. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/docs_md/support.md +0 -0
  98. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/docs_md/terms.md +0 -0
  99. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/email_utils.py +0 -0
  100. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/exchange_rate.py +0 -0
  101. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/firebase.py +0 -0
  102. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/fix_duplicate_users.py +0 -0
  103. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/history.py +0 -0
  104. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/logging_config.py +0 -0
  105. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/provision_build.py +0 -0
  106. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/rate_limit.py +0 -0
  107. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/rewards_engine.py +0 -0
  108. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/routes/__init__.py +0 -0
  109. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/routes/auth_routes.py +0 -0
  110. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/routes/billing_routes.py +0 -0
  111. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/routes/credit_routes.py +0 -0
  112. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/routes/feedback_routes.py +0 -0
  113. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/routes/marketplace_routes.py +0 -0
  114. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/routes/quota_routes.py +0 -0
  115. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/routes/quota_share_routes.py +0 -0
  116. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/routes/referral_routes.py +0 -0
  117. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/routes/security_routes.py +0 -0
  118. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/routes/session_routes.py +0 -0
  119. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/routes/share_routes.py +0 -0
  120. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/server/storage_nodes.py +0 -0
  121. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/share_tui.py +0 -0
  122. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/situational_scoring.py +0 -0
  123. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/__init__.py +0 -0
  124. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/feedback_dialog.py +0 -0
  125. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/history_dialog.py +0 -0
  126. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/marketplace_app_state.py +0 -0
  127. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/marketplace_dialog.py +0 -0
  128. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/publish_dialog.py +0 -0
  129. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/quota_dialog.py +0 -0
  130. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/quota_redeem_dialog.py +0 -0
  131. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/quota_share_dialog.py +0 -0
  132. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/resume_dialog.py +0 -0
  133. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/rewards_tui.py +0 -0
  134. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/thinking_display.py +0 -0
  135. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/tools_dialog.py +0 -0
  136. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/tui/update_dialog.py +0 -0
  137. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/utilities.py +0 -0
  138. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/utimmodel.txt +0 -0
  139. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/vector_memory.py +0 -0
  140. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/wheel.py +0 -0
  141. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli/workspace.py +0 -0
  142. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli.egg-info/dependency_links.txt +0 -0
  143. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli.egg-info/entry_points.txt +0 -0
  144. {utim_cli-2.2.3 → utim_cli-2.3.1}/utim_cli.egg-info/requires.txt +0 -0
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.3.1] - 2026-08-19
4
+
5
+ ### 🛠️ Fixes & Enhancements
6
+ - Major bug fixes in agent loop and enhancements
7
+
8
+ ## [2.3.0] - 2026-08-18
9
+
10
+ ### 🚀 Features & Enhancements
11
+ - **UTIM Sidecar**: UTIM sidecar is here. Use `/ask` command with your prompt to activate sidecar while your agent is running for parallel research.
12
+
3
13
  ## [2.2.3] - 2026-08-16
4
14
 
5
15
  ### 🛠️ 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.1
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.1"
8
8
 
9
9
  description = "UTIM – Universal Terminal Intelligence Manager. A powerful agentic AI coding assistant for your terminal."
10
10
  readme = "README.md"
@@ -93,7 +93,7 @@ utimlite = "utim_cli.utim:main_cli_entry"
93
93
 
94
94
 
95
95
  [tool.setuptools.packages.find]
96
- include = ["utim_cli*"]
96
+ include = ["utim*", "utim_cli*"]
97
97
  exclude = ["tests*", "landing*", "scripts*"]
98
98
 
99
99
  [tool.setuptools.package-data]
@@ -101,6 +101,7 @@ utim_cli = ["mcp_registry.json", "_version.py", "utimmodel.txt", "models.txt", "
101
101
 
102
102
 
103
103
  [tool.pytest.ini_options]
104
+ addopts = "-m 'not benchmark and not slow and not integration' --ignore=tests/test_benchmark.py --ignore=tests/bench_agent.py"
104
105
  markers = [
105
106
  "smoke: fast install validation tests (no live credentials required)",
106
107
  "slow: tests that make network calls or take more than 10 seconds",
@@ -0,0 +1,76 @@
1
+ """
2
+ UTIM Developer SDK
3
+ ------------------
4
+ Unified autonomous coding agent SDK.
5
+
6
+ Quickstart:
7
+ import utim
8
+
9
+ session = utim.Session()
10
+ async for event in session.send_message("Explain this codebase"):
11
+ if event.type == utim.EventType.TOKEN:
12
+ print(event.text, end="", flush=True)
13
+ """
14
+ try:
15
+ from utim_cli._version import VERSION as __version__
16
+ except ImportError:
17
+ __version__ = "2.3.0"
18
+
19
+ # Developer-friendly core classes (similar to `import genai` / `import openai`)
20
+ from utim_cli.sdk.session import UtimSession as Session
21
+ from utim_cli.sdk.config import UtimConfig as Config
22
+ from utim_cli.sdk.context import IDEContext, Diagnostic
23
+ from utim_cli.sdk.events import (
24
+ AgentEvent,
25
+ UtimEventType as EventType,
26
+ TokenStreamEvent,
27
+ ThoughtStreamEvent,
28
+ ToolCallStartEvent,
29
+ ToolCallEndEvent,
30
+ FileEditEvent,
31
+ CommandExecEvent,
32
+ ConfirmationRequestEvent,
33
+ PlanUpdateEvent,
34
+ SubagentEvent,
35
+ TurnEndEvent,
36
+ )
37
+ from utim_cli.sdk.handlers import (
38
+ ConfirmationHandler,
39
+ AutoApprovalHandler,
40
+ CallbackApprovalHandler,
41
+ )
42
+ from utim_cli.sdk.sidecar import UtimSidecarServer as SidecarServer
43
+
44
+ # Backwards compatible alias names
45
+ UtimSession = Session
46
+ UtimConfig = Config
47
+ UtimEventType = EventType
48
+ UtimSidecarServer = SidecarServer
49
+
50
+ __all__ = [
51
+ "__version__",
52
+ "Session",
53
+ "Config",
54
+ "IDEContext",
55
+ "Diagnostic",
56
+ "EventType",
57
+ "AgentEvent",
58
+ "TokenStreamEvent",
59
+ "ThoughtStreamEvent",
60
+ "ToolCallStartEvent",
61
+ "ToolCallEndEvent",
62
+ "FileEditEvent",
63
+ "CommandExecEvent",
64
+ "ConfirmationRequestEvent",
65
+ "PlanUpdateEvent",
66
+ "SubagentEvent",
67
+ "TurnEndEvent",
68
+ "ConfirmationHandler",
69
+ "AutoApprovalHandler",
70
+ "CallbackApprovalHandler",
71
+ "SidecarServer",
72
+ "UtimSession",
73
+ "UtimConfig",
74
+ "UtimEventType",
75
+ "UtimSidecarServer",
76
+ ]
@@ -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.1"
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.1"
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":