utim-cli 1.45.1__tar.gz → 1.45.5__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.
- {utim_cli-1.45.1/utim_cli.egg-info → utim_cli-1.45.5}/PKG-INFO +10 -5
- {utim_cli-1.45.1 → utim_cli-1.45.5}/pyproject.toml +11 -5
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/bootstrap.py +1 -1
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/doctor.py +2 -1
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/db.py +19 -15
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/history.py +1 -1
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/router.py +1 -1
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/routes/completion_routes.py +4 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/utim.py +4 -4
- {utim_cli-1.45.1 → utim_cli-1.45.5/utim_cli.egg-info}/PKG-INFO +10 -5
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli.egg-info/requires.txt +10 -4
- {utim_cli-1.45.1 → utim_cli-1.45.5}/CHANGELOG.md +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/LICENSE +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/MANIFEST.in +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/README.md +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/setup.cfg +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/setup.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/__init__.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/agent.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/auth.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/backup.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/blender_agent.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/client_utils.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/config.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/constants.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/context_pruner.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/knowledge_graph.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/logger.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/mcp_clean_wrapper.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/mcp_client.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/mcp_registry.json +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/orchestrator.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/reflection.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/report.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/scrapy_search.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/__init__.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/auth.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/email_utils.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/firebase.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/logging_config.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/models.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/rate_limit.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/routes/__init__.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/routes/auth_routes.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/routes/credit_routes.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/routes/quota_routes.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/routes/session_routes.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/routes/share_routes.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/server/server.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/share.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/share_tui.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/situational_scoring.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/state.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/tools.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/tui/__init__.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/tui/history_dialog.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/tui/mcp_dialog.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/tui/model_dialog.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/tui/resume_dialog.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/tui/tools_dialog.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/tui/update_dialog.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/vector_memory.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli/workspace.py +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli.egg-info/SOURCES.txt +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli.egg-info/dependency_links.txt +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli.egg-info/entry_points.txt +0 -0
- {utim_cli-1.45.1 → utim_cli-1.45.5}/utim_cli.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: utim-cli
|
|
3
|
-
Version: 1.45.
|
|
3
|
+
Version: 1.45.5
|
|
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
|
|
@@ -30,10 +30,6 @@ Requires-Dist: chardet==4.0.0
|
|
|
30
30
|
Requires-Dist: typer>=0.9.0
|
|
31
31
|
Requires-Dist: rich>=13.0.0
|
|
32
32
|
Requires-Dist: prompt_toolkit>=3.0.0
|
|
33
|
-
Requires-Dist: tree-sitter>=0.21.0
|
|
34
|
-
Requires-Dist: tree-sitter-python>=0.21.0
|
|
35
|
-
Requires-Dist: tree-sitter-javascript>=0.21.0
|
|
36
|
-
Requires-Dist: tree-sitter-typescript>=0.21.0
|
|
37
33
|
Requires-Dist: mcp>=0.1.0
|
|
38
34
|
Requires-Dist: nest-asyncio>=1.5.0
|
|
39
35
|
Requires-Dist: python-multipart>=0.0.7
|
|
@@ -45,11 +41,20 @@ Requires-Dist: scrapy-playwright>=0.0.34; extra == "search"
|
|
|
45
41
|
Requires-Dist: beautifulsoup4>=4.12.0; extra == "search"
|
|
46
42
|
Provides-Extra: images
|
|
47
43
|
Requires-Dist: pillow>=9.0.0; extra == "images"
|
|
44
|
+
Provides-Extra: parsers
|
|
45
|
+
Requires-Dist: tree-sitter>=0.21.0; extra == "parsers"
|
|
46
|
+
Requires-Dist: tree-sitter-python>=0.21.0; extra == "parsers"
|
|
47
|
+
Requires-Dist: tree-sitter-javascript>=0.21.0; extra == "parsers"
|
|
48
|
+
Requires-Dist: tree-sitter-typescript>=0.21.0; extra == "parsers"
|
|
48
49
|
Provides-Extra: full
|
|
49
50
|
Requires-Dist: scrapy>=2.11.0; extra == "full"
|
|
50
51
|
Requires-Dist: scrapy-playwright>=0.0.34; extra == "full"
|
|
51
52
|
Requires-Dist: beautifulsoup4>=4.12.0; extra == "full"
|
|
52
53
|
Requires-Dist: pillow>=9.0.0; extra == "full"
|
|
54
|
+
Requires-Dist: tree-sitter>=0.21.0; extra == "full"
|
|
55
|
+
Requires-Dist: tree-sitter-python>=0.21.0; extra == "full"
|
|
56
|
+
Requires-Dist: tree-sitter-javascript>=0.21.0; extra == "full"
|
|
57
|
+
Requires-Dist: tree-sitter-typescript>=0.21.0; extra == "full"
|
|
53
58
|
Dynamic: license-file
|
|
54
59
|
|
|
55
60
|
# UTIM CLI Agent: Enterprise Coder Assistant
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "utim-cli"
|
|
7
|
-
version = "1.45.
|
|
7
|
+
version = "1.45.5"
|
|
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"
|
|
@@ -32,10 +32,6 @@ dependencies = [
|
|
|
32
32
|
"typer>=0.9.0",
|
|
33
33
|
"rich>=13.0.0",
|
|
34
34
|
"prompt_toolkit>=3.0.0",
|
|
35
|
-
"tree-sitter>=0.21.0",
|
|
36
|
-
"tree-sitter-python>=0.21.0",
|
|
37
|
-
"tree-sitter-javascript>=0.21.0",
|
|
38
|
-
"tree-sitter-typescript>=0.21.0",
|
|
39
35
|
"mcp>=0.1.0",
|
|
40
36
|
"nest-asyncio>=1.5.0",
|
|
41
37
|
"python-multipart>=0.0.7",
|
|
@@ -59,11 +55,21 @@ search = [
|
|
|
59
55
|
images = [
|
|
60
56
|
"pillow>=9.0.0",
|
|
61
57
|
]
|
|
58
|
+
parsers = [
|
|
59
|
+
"tree-sitter>=0.21.0",
|
|
60
|
+
"tree-sitter-python>=0.21.0",
|
|
61
|
+
"tree-sitter-javascript>=0.21.0",
|
|
62
|
+
"tree-sitter-typescript>=0.21.0",
|
|
63
|
+
]
|
|
62
64
|
full = [
|
|
63
65
|
"scrapy>=2.11.0",
|
|
64
66
|
"scrapy-playwright>=0.0.34",
|
|
65
67
|
"beautifulsoup4>=4.12.0",
|
|
66
68
|
"pillow>=9.0.0",
|
|
69
|
+
"tree-sitter>=0.21.0",
|
|
70
|
+
"tree-sitter-python>=0.21.0",
|
|
71
|
+
"tree-sitter-javascript>=0.21.0",
|
|
72
|
+
"tree-sitter-typescript>=0.21.0",
|
|
67
73
|
]
|
|
68
74
|
|
|
69
75
|
[project.scripts]
|
|
@@ -127,7 +127,7 @@ def initialize_utim() -> str:
|
|
|
127
127
|
# 1. Initialize local_utim database using SQLAlchemy init_db
|
|
128
128
|
try:
|
|
129
129
|
from utim_cli.server.db import init_db
|
|
130
|
-
init_db()
|
|
130
|
+
init_db(silent=True)
|
|
131
131
|
except Exception as e:
|
|
132
132
|
from utim_cli.logger import log_error
|
|
133
133
|
log_error("bootstrap", "Failed to initialize SQLite local database", e)
|
|
@@ -22,7 +22,7 @@ def run_diagnostics(console: Console = None):
|
|
|
22
22
|
console.print("\n [bold #42bcf5]Core Dependencies:[/bold #42bcf5]")
|
|
23
23
|
core_dependencies = [
|
|
24
24
|
"openai", "requests", "aiohttp", "typer", "rich",
|
|
25
|
-
"prompt_toolkit", "
|
|
25
|
+
"prompt_toolkit", "mcp", "nest_asyncio"
|
|
26
26
|
]
|
|
27
27
|
for dep in core_dependencies:
|
|
28
28
|
try:
|
|
@@ -34,6 +34,7 @@ def run_diagnostics(console: Console = None):
|
|
|
34
34
|
|
|
35
35
|
console.print("\n [bold #42bcf5]Optional Feature Dependencies:[/bold #42bcf5]")
|
|
36
36
|
optional_dependencies = {
|
|
37
|
+
"tree_sitter": "AST-based Knowledge Graph / dependency mapping",
|
|
37
38
|
"chromadb": "RAG Vector DB feature",
|
|
38
39
|
"sentence_transformers": "Dynamic embedding extraction",
|
|
39
40
|
"scrapy": "Scrapy search crawler",
|
|
@@ -396,18 +396,22 @@ class EmailTracking(Base):
|
|
|
396
396
|
|
|
397
397
|
# ── Bootstrap ─────────────────────────────────────────────────────────────────
|
|
398
398
|
|
|
399
|
-
def init_db() -> None:
|
|
399
|
+
def init_db(silent: bool = True) -> None:
|
|
400
400
|
"""Create all tables and ensure the schema is up to date."""
|
|
401
401
|
import logging as _logging
|
|
402
402
|
_mig_log = _logging.getLogger("utim.db.migration")
|
|
403
|
+
|
|
404
|
+
def _print(msg: str):
|
|
405
|
+
if not silent:
|
|
406
|
+
print(msg)
|
|
403
407
|
|
|
404
|
-
|
|
408
|
+
_print("[DB INIT] init_db() starting...")
|
|
405
409
|
try:
|
|
406
|
-
|
|
410
|
+
_print(f"[DB INIT] Connecting to DB: {engine.url.drivername} (host: {engine.url.host})")
|
|
407
411
|
Base.metadata.create_all(bind=engine)
|
|
408
|
-
|
|
412
|
+
_print("[DB INIT] create_all() completed.")
|
|
409
413
|
except Exception as exc:
|
|
410
|
-
|
|
414
|
+
_print(f"[DB INIT] create_all() failed: {exc}")
|
|
411
415
|
_mig_log.warning(f"Skipping table creation (database might be unavailable): {exc}")
|
|
412
416
|
return
|
|
413
417
|
|
|
@@ -420,7 +424,7 @@ def init_db() -> None:
|
|
|
420
424
|
inspector = sa_inspect(engine)
|
|
421
425
|
existing_tables = inspector.get_table_names()
|
|
422
426
|
except Exception as inspect_exc:
|
|
423
|
-
|
|
427
|
+
_print(f"[DB INIT] DB inspection failed (might be normal on new DB): {inspect_exc}")
|
|
424
428
|
existing_tables = []
|
|
425
429
|
|
|
426
430
|
def _col_exists(table_name: str, col_name: str) -> bool:
|
|
@@ -434,24 +438,24 @@ def init_db() -> None:
|
|
|
434
438
|
|
|
435
439
|
def _run_migration(table_name: str, col_name: str, sql: str, label: str):
|
|
436
440
|
if _col_exists(table_name, col_name):
|
|
437
|
-
|
|
441
|
+
_print(f"[DB INIT] Column {table_name}.{col_name} already exists. Skipping.")
|
|
438
442
|
return
|
|
439
443
|
|
|
440
|
-
|
|
444
|
+
_print(f"[DB INIT] Running migration: {label}")
|
|
441
445
|
try:
|
|
442
446
|
with engine.begin() as _conn:
|
|
443
447
|
if is_postgres:
|
|
444
448
|
# Never hang startup for lock queues: fail fast if blocked for > 3s
|
|
445
449
|
_conn.execute(text("SET lock_timeout = 3000"))
|
|
446
450
|
_conn.execute(text(sql))
|
|
447
|
-
|
|
451
|
+
_print(f"[DB INIT] Migration OK: {label}")
|
|
448
452
|
_mig_log.info(f"Migration OK: {label}")
|
|
449
453
|
except Exception as _exc:
|
|
450
|
-
|
|
454
|
+
_print(f"[DB INIT] Migration skipped/failed ({label}): {_exc}")
|
|
451
455
|
_mig_log.debug(f"Migration skipped ({label}): {_exc}")
|
|
452
456
|
|
|
453
457
|
if is_postgres:
|
|
454
|
-
|
|
458
|
+
_print("[DB INIT] Postgres detected. Bypassing ALTER TABLE migrations (already applied in production).")
|
|
455
459
|
else:
|
|
456
460
|
# SQLite: no IF NOT EXISTS on ADD COLUMN, swallow duplicate errors
|
|
457
461
|
_run_migration("user_subscriptions", "refills_processed", "ALTER TABLE user_subscriptions ADD COLUMN refills_processed INTEGER DEFAULT 0 NOT NULL", "sqlite add refills_processed")
|
|
@@ -465,13 +469,13 @@ def init_db() -> None:
|
|
|
465
469
|
_run_migration("users", "last_project_folder", "ALTER TABLE users ADD COLUMN last_project_folder TEXT", "sqlite add last_project_folder")
|
|
466
470
|
|
|
467
471
|
# Seed the plans if they don't exist
|
|
468
|
-
|
|
472
|
+
_print("[DB INIT] Seeding plans checking...")
|
|
469
473
|
db = SessionLocal()
|
|
470
474
|
try:
|
|
471
475
|
free_plan = db.query(Plan).filter(Plan.name == "free").first()
|
|
472
|
-
|
|
476
|
+
_print(f"[DB INIT] Free plan query done. Exists: {bool(free_plan)}")
|
|
473
477
|
if not free_plan:
|
|
474
|
-
|
|
478
|
+
_print("[DB INIT] Creating new plans...")
|
|
475
479
|
plans = [
|
|
476
480
|
Plan(
|
|
477
481
|
id="free",
|
|
@@ -590,7 +594,7 @@ def init_db() -> None:
|
|
|
590
594
|
pass
|
|
591
595
|
finally:
|
|
592
596
|
db.close()
|
|
593
|
-
|
|
597
|
+
_print("[DB INIT] init_db() completed successfully.")
|
|
594
598
|
|
|
595
599
|
|
|
596
600
|
def get_db():
|
|
@@ -6,7 +6,7 @@ from typing import List, Dict, Any, Optional
|
|
|
6
6
|
from .db import SessionLocal, Conversation, User, init_db
|
|
7
7
|
|
|
8
8
|
# Initialize database on module load for local mode
|
|
9
|
-
init_db()
|
|
9
|
+
init_db(silent=True)
|
|
10
10
|
|
|
11
11
|
# Default local user for fully local operation
|
|
12
12
|
LOCAL_EMAIL = os.getenv("UTIM_EMAIL", "local@utim.dev")
|
|
@@ -178,6 +178,10 @@ async def completions(
|
|
|
178
178
|
|
|
179
179
|
client = _get_client()
|
|
180
180
|
|
|
181
|
+
# Commit transaction to release all with_for_update locks on UserSubscription
|
|
182
|
+
# before returning the StreamingResponse, preventing deadlocks in the generator's SessionLocal updates.
|
|
183
|
+
db.commit()
|
|
184
|
+
|
|
181
185
|
async def _stream() -> AsyncGenerator[str, None]:
|
|
182
186
|
content_buf = ""
|
|
183
187
|
tool_calls_map: Dict[int, Dict[str, Any]] = {}
|
|
@@ -585,7 +585,7 @@ def _print_animated_banner():
|
|
|
585
585
|
# Speed up for spaces to make it feel more like typing
|
|
586
586
|
time.sleep(0.002 if char == " " else 0.005)
|
|
587
587
|
|
|
588
|
-
console.print(f"\n [bold white]U Think I Make[/bold white] [dim]v1.45.
|
|
588
|
+
console.print(f"\n [bold white]U Think I Make[/bold white] [dim]v1.45.5[/dim]")
|
|
589
589
|
user_email = config.email
|
|
590
590
|
user_type = "UTIM Community"
|
|
591
591
|
api_key = config.get("api_key")
|
|
@@ -603,7 +603,7 @@ def _print_animated_banner():
|
|
|
603
603
|
resp = requests.get(
|
|
604
604
|
f"{SERVER_URL}/api/user-plan",
|
|
605
605
|
headers={"X-API-Key": api_key},
|
|
606
|
-
timeout=
|
|
606
|
+
timeout=5.0,
|
|
607
607
|
)
|
|
608
608
|
if resp.ok:
|
|
609
609
|
plan_name = resp.json().get("plan", "free")
|
|
@@ -2691,7 +2691,7 @@ def check_and_update_background():
|
|
|
2691
2691
|
return
|
|
2692
2692
|
|
|
2693
2693
|
latest_ver = resp.json().get("version", "")
|
|
2694
|
-
current_ver = "1.45.
|
|
2694
|
+
current_ver = "1.45.5"
|
|
2695
2695
|
|
|
2696
2696
|
def parse_ver(v):
|
|
2697
2697
|
return [int(x) for x in v.split(".") if x.isdigit()]
|
|
@@ -2887,7 +2887,7 @@ app = typer.Typer()
|
|
|
2887
2887
|
def version_callback(value: bool):
|
|
2888
2888
|
if value:
|
|
2889
2889
|
import typer
|
|
2890
|
-
print("U Think I Make v1.45.
|
|
2890
|
+
print("U Think I Make v1.45.5")
|
|
2891
2891
|
raise typer.Exit()
|
|
2892
2892
|
|
|
2893
2893
|
@app.callback(invoke_without_command=True)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: utim-cli
|
|
3
|
-
Version: 1.45.
|
|
3
|
+
Version: 1.45.5
|
|
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
|
|
@@ -30,10 +30,6 @@ Requires-Dist: chardet==4.0.0
|
|
|
30
30
|
Requires-Dist: typer>=0.9.0
|
|
31
31
|
Requires-Dist: rich>=13.0.0
|
|
32
32
|
Requires-Dist: prompt_toolkit>=3.0.0
|
|
33
|
-
Requires-Dist: tree-sitter>=0.21.0
|
|
34
|
-
Requires-Dist: tree-sitter-python>=0.21.0
|
|
35
|
-
Requires-Dist: tree-sitter-javascript>=0.21.0
|
|
36
|
-
Requires-Dist: tree-sitter-typescript>=0.21.0
|
|
37
33
|
Requires-Dist: mcp>=0.1.0
|
|
38
34
|
Requires-Dist: nest-asyncio>=1.5.0
|
|
39
35
|
Requires-Dist: python-multipart>=0.0.7
|
|
@@ -45,11 +41,20 @@ Requires-Dist: scrapy-playwright>=0.0.34; extra == "search"
|
|
|
45
41
|
Requires-Dist: beautifulsoup4>=4.12.0; extra == "search"
|
|
46
42
|
Provides-Extra: images
|
|
47
43
|
Requires-Dist: pillow>=9.0.0; extra == "images"
|
|
44
|
+
Provides-Extra: parsers
|
|
45
|
+
Requires-Dist: tree-sitter>=0.21.0; extra == "parsers"
|
|
46
|
+
Requires-Dist: tree-sitter-python>=0.21.0; extra == "parsers"
|
|
47
|
+
Requires-Dist: tree-sitter-javascript>=0.21.0; extra == "parsers"
|
|
48
|
+
Requires-Dist: tree-sitter-typescript>=0.21.0; extra == "parsers"
|
|
48
49
|
Provides-Extra: full
|
|
49
50
|
Requires-Dist: scrapy>=2.11.0; extra == "full"
|
|
50
51
|
Requires-Dist: scrapy-playwright>=0.0.34; extra == "full"
|
|
51
52
|
Requires-Dist: beautifulsoup4>=4.12.0; extra == "full"
|
|
52
53
|
Requires-Dist: pillow>=9.0.0; extra == "full"
|
|
54
|
+
Requires-Dist: tree-sitter>=0.21.0; extra == "full"
|
|
55
|
+
Requires-Dist: tree-sitter-python>=0.21.0; extra == "full"
|
|
56
|
+
Requires-Dist: tree-sitter-javascript>=0.21.0; extra == "full"
|
|
57
|
+
Requires-Dist: tree-sitter-typescript>=0.21.0; extra == "full"
|
|
53
58
|
Dynamic: license-file
|
|
54
59
|
|
|
55
60
|
# UTIM CLI Agent: Enterprise Coder Assistant
|
|
@@ -8,10 +8,6 @@ chardet==4.0.0
|
|
|
8
8
|
typer>=0.9.0
|
|
9
9
|
rich>=13.0.0
|
|
10
10
|
prompt_toolkit>=3.0.0
|
|
11
|
-
tree-sitter>=0.21.0
|
|
12
|
-
tree-sitter-python>=0.21.0
|
|
13
|
-
tree-sitter-javascript>=0.21.0
|
|
14
|
-
tree-sitter-typescript>=0.21.0
|
|
15
11
|
mcp>=0.1.0
|
|
16
12
|
nest-asyncio>=1.5.0
|
|
17
13
|
python-multipart>=0.0.7
|
|
@@ -23,10 +19,20 @@ scrapy>=2.11.0
|
|
|
23
19
|
scrapy-playwright>=0.0.34
|
|
24
20
|
beautifulsoup4>=4.12.0
|
|
25
21
|
pillow>=9.0.0
|
|
22
|
+
tree-sitter>=0.21.0
|
|
23
|
+
tree-sitter-python>=0.21.0
|
|
24
|
+
tree-sitter-javascript>=0.21.0
|
|
25
|
+
tree-sitter-typescript>=0.21.0
|
|
26
26
|
|
|
27
27
|
[images]
|
|
28
28
|
pillow>=9.0.0
|
|
29
29
|
|
|
30
|
+
[parsers]
|
|
31
|
+
tree-sitter>=0.21.0
|
|
32
|
+
tree-sitter-python>=0.21.0
|
|
33
|
+
tree-sitter-javascript>=0.21.0
|
|
34
|
+
tree-sitter-typescript>=0.21.0
|
|
35
|
+
|
|
30
36
|
[search]
|
|
31
37
|
scrapy>=2.11.0
|
|
32
38
|
scrapy-playwright>=0.0.34
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|