hud-python 0.4.13__py3-none-any.whl → 0.4.15__py3-none-any.whl

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.

Potentially problematic release.


This version of hud-python might be problematic. Click here for more details.

hud/utils/design.py CHANGED
@@ -14,6 +14,11 @@ Color Palette:
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
+ import logging
18
+ from typing import Any
19
+
20
+ import questionary
21
+ import typer
17
22
  from rich.console import Console
18
23
  from rich.panel import Panel
19
24
  from rich.table import Table
@@ -28,10 +33,15 @@ DIM = "dim"
28
33
  class HUDDesign:
29
34
  """Design system for HUD CLI output."""
30
35
 
31
- def __init__(self) -> None:
32
- """Initialize the design system."""
36
+ def __init__(self, logger: logging.Logger | None = None) -> None:
37
+ """Initialize the design system.
38
+
39
+ Args:
40
+ logger: Logger to check for log levels. If None, uses the root logger.
41
+ """
33
42
  self._stdout_console = Console(stderr=False)
34
43
  self._stderr_console = Console(stderr=True)
44
+ self._logger = logger or logging.getLogger()
35
45
 
36
46
  def header(self, title: str, icon: str = "🚀", stderr: bool = True) -> None:
37
47
  """Print a header panel with gold border.
@@ -252,6 +262,162 @@ class HUDDesign:
252
262
  """Get the stderr console for direct access when needed."""
253
263
  return self._stderr_console
254
264
 
265
+ def set_verbose(self, verbose: bool) -> None:
266
+ """Set the logging level based on verbose flag.
267
+
268
+ Args:
269
+ verbose: If True, show INFO level messages. If False, only show WARNING and above.
270
+ """
271
+ if verbose:
272
+ self._logger.setLevel(logging.INFO)
273
+ else:
274
+ self._logger.setLevel(logging.WARNING)
275
+
276
+ # Logging-aware methods that check logging levels before printing
277
+
278
+ def debug(self, message: str, stderr: bool = True) -> None:
279
+ """Print a debug message only if DEBUG logging is enabled.
280
+
281
+ Args:
282
+ message: The debug message
283
+ stderr: If True, output to stderr (default), otherwise stdout
284
+ """
285
+ if self._logger.isEnabledFor(logging.DEBUG):
286
+ self.dim_info("[DEBUG]", message, stderr=stderr)
287
+
288
+ def info_log(self, message: str, stderr: bool = True) -> None:
289
+ """Print an info message only if INFO logging is enabled.
290
+
291
+ Args:
292
+ message: The info message
293
+ stderr: If True, output to stderr (default), otherwise stdout
294
+ """
295
+ if self._logger.isEnabledFor(logging.INFO):
296
+ self.info(message, stderr=stderr)
297
+
298
+ def progress_log(self, message: str, stderr: bool = True) -> None:
299
+ """Print a progress message only if INFO logging is enabled.
300
+
301
+ Args:
302
+ message: The progress message
303
+ stderr: If True, output to stderr (default), otherwise stdout
304
+ """
305
+ if self._logger.isEnabledFor(logging.INFO):
306
+ self.progress_message(message, stderr=stderr)
307
+
308
+ def success_log(self, message: str, stderr: bool = True) -> None:
309
+ """Print a success message only if INFO logging is enabled.
310
+
311
+ Args:
312
+ message: The success message
313
+ stderr: If True, output to stderr (default), otherwise stdout
314
+ """
315
+ if self._logger.isEnabledFor(logging.INFO):
316
+ self.success(message, stderr=stderr)
317
+
318
+ def warning_log(self, message: str, stderr: bool = True) -> None:
319
+ """Print a warning message only if WARNING logging is enabled.
320
+
321
+ Args:
322
+ message: The warning message
323
+ stderr: If True, output to stderr (default), otherwise stdout
324
+ """
325
+ if self._logger.isEnabledFor(logging.WARNING):
326
+ self.warning(message, stderr=stderr)
327
+
328
+ def error_log(self, message: str, stderr: bool = True) -> None:
329
+ """Print an error message only if ERROR logging is enabled.
330
+
331
+ Args:
332
+ message: The error message
333
+ stderr: If True, output to stderr (default), otherwise stdout
334
+ """
335
+ if self._logger.isEnabledFor(logging.ERROR):
336
+ self.error(message, stderr=stderr)
337
+
338
+ def select(
339
+ self,
340
+ message: str,
341
+ choices: list[str | dict[str, Any]] | list[str],
342
+ default: str | None = None,
343
+ ) -> str:
344
+ """Interactive selection with arrow key navigation.
345
+
346
+ Args:
347
+ message: The prompt message to display
348
+ choices: List of choices. Can be strings or dicts with 'name' and 'value' keys
349
+ default: Default selection (matches against choice name/string)
350
+
351
+ Returns:
352
+ The selected choice value
353
+ """
354
+ # Convert choices to questionary format
355
+ q_choices = []
356
+
357
+ for choice in choices:
358
+ if isinstance(choice, dict):
359
+ name = choice.get("name", str(choice.get("value", "")))
360
+ value = choice.get("value", name)
361
+ q_choices.append(questionary.Choice(title=name, value=value))
362
+ else:
363
+ q_choices.append(choice)
364
+
365
+ result = questionary.select(
366
+ message,
367
+ choices=q_choices,
368
+ instruction="(Use ↑/↓ arrows, Enter to select)",
369
+ ).ask()
370
+
371
+ # If no selection made (Ctrl+C or ESC), exit
372
+ if result is None:
373
+ raise typer.Exit(1)
374
+
375
+ return result
376
+
377
+ def format_tool_call(self, name: str, arguments: dict[str, Any] | None = None) -> str:
378
+ """Format a tool call in compact HUD style.
379
+
380
+ Args:
381
+ name: Tool name
382
+ arguments: Tool arguments dictionary
383
+
384
+ Returns:
385
+ Formatted string with Rich markup
386
+ """
387
+ import json
388
+
389
+ args_str = ""
390
+ if arguments:
391
+ try:
392
+ # Compact JSON representation
393
+ args_str = json.dumps(arguments, separators=(",", ":"))
394
+ if len(args_str) > 60:
395
+ args_str = args_str[:57] + "..."
396
+ except (TypeError, ValueError):
397
+ args_str = str(arguments)[:60]
398
+
399
+ return f"[{GOLD}]→[/{GOLD}] [bold]{name}[/bold][{DIM}]({args_str})[/{DIM}]"
400
+
401
+ def format_tool_result(self, content: str, is_error: bool = False) -> str:
402
+ """Format a tool result in compact HUD style.
403
+
404
+ Args:
405
+ content: Result content (will be truncated if too long)
406
+ is_error: Whether this is an error result
407
+
408
+ Returns:
409
+ Formatted string with Rich markup
410
+ """
411
+ # Truncate content if needed
412
+ if len(content) > 80:
413
+ content = content[:77] + "..."
414
+
415
+ # Format with status using HUD colors
416
+ if is_error:
417
+ return f" [{RED}]✗[/{RED}] [{DIM}]{content}[/{DIM}]"
418
+ else:
419
+ return f" [{GREEN}]✓[/{GREEN}] {content}"
420
+
255
421
 
256
422
  # Global design instance for convenience
257
423
  design = HUDDesign()
@@ -5,4 +5,4 @@ def test_import():
5
5
  """Test that the package can be imported."""
6
6
  import hud
7
7
 
8
- assert hud.__version__ == "0.4.13"
8
+ assert hud.__version__ == "0.4.15"
hud/version.py CHANGED
@@ -4,4 +4,4 @@ Version information for the HUD SDK.
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- __version__ = "0.4.13"
7
+ __version__ = "0.4.15"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hud-python
3
- Version: 0.4.13
3
+ Version: 0.4.15
4
4
  Summary: SDK for the HUD platform.
5
5
  Project-URL: Homepage, https://github.com/hud-evals/hud-python
6
6
  Project-URL: Bug Tracker, https://github.com/hud-evals/hud-python/issues
@@ -43,9 +43,10 @@ Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.34.1
43
43
  Requires-Dist: opentelemetry-instrumentation-mcp>=0.44.1
44
44
  Requires-Dist: opentelemetry-sdk>=1.34.1
45
45
  Requires-Dist: pathspec>=0.12.1
46
+ Requires-Dist: prompt-toolkit==3.0.51
46
47
  Requires-Dist: pydantic-settings<3,>=2
47
48
  Requires-Dist: pydantic<3,>=2
48
- Requires-Dist: questionary>=1.10.0
49
+ Requires-Dist: questionary==2.1.0
49
50
  Requires-Dist: rich>=13.0.0
50
51
  Requires-Dist: toml>=0.10.2
51
52
  Requires-Dist: typer>=0.9.0
@@ -160,7 +161,7 @@ pip install -e "hud-python[dev]"
160
161
  ```
161
162
 
162
163
  > See [docs.hud.so](https://docs.hud.so), or add docs to any MCP client:
163
- > `claude mcp add docs-hud https://docs.hud.so/mcp`
164
+ > `claude mcp add --transport http docs-hud https://docs.hud.so/mcp`
164
165
 
165
166
  ## Quickstart
166
167
 
@@ -1,14 +1,13 @@
1
1
  hud/__init__.py,sha256=BjAhZtsHbGN371Q8t3o4v4jltedkmDE85xW0yOILU9g,397
2
2
  hud/__main__.py,sha256=YR8Dq8OhINOsVfQ55PmRXXg4fEK84Rt_-rMtJ5rvhWo,145
3
- hud/datasets.py,sha256=8lqC840kcNx01D2CcWZCd1j0eZTpepILmQrvohZIZYU,12056
4
- hud/settings.py,sha256=WIJDsyrfwBZGcaGT46YUOpW8xjBZl3siXXprd92ASAg,2039
5
- hud/types.py,sha256=pQWOPYXUZ2hhK0h-AHBc3DCj5tkbRXHqKZnsQQIcSFA,4237
6
- hud/version.py,sha256=jhf6DYahE5LI1FccTXHcktDwX5vMms8lI4rL1z710as,105
3
+ hud/settings.py,sha256=q9aZiHjvbL4oLE-N8AttTW4rmzS8zPMnsca-iMGyEGc,2362
4
+ hud/types.py,sha256=gNnyS1G7aYHIR5sT3k3bOfSTFnPylUO6lNGLWbjbeYk,5149
5
+ hud/version.py,sha256=gdxZtcCpnCv32fA8VZnQ530MgJHh6ZS7pyG585pb6No,105
7
6
  hud/agents/__init__.py,sha256=UoIkljWdbq4bM0LD-mSaw6w826EqdEjOk7r6glNYwYQ,286
8
- hud/agents/base.py,sha256=M2g7Cj5InE4EsXpmxqURprC3IHNGvNZFBZ8HPIQxz-A,24574
9
- hud/agents/claude.py,sha256=snbYFPW-KAkw4n9Rdz7dC2f46RuSHJKC53HPm8SucFM,14273
7
+ hud/agents/base.py,sha256=rbwYP_a6XTwhY_5CaBlE7SWflnTq1EOuDiNY2XeUWdM,28275
8
+ hud/agents/claude.py,sha256=in-dRByL7wU1gsuwFvscltQ1PGZURb2bIeU3QFhfpQU,14271
10
9
  hud/agents/langchain.py,sha256=1EgCy8jfjunsWxlPC5XfvfLS6_XZVrIF1ZjtHcrvhYw,9584
11
- hud/agents/openai.py,sha256=kHG73mohO4uru49qmQiygUFt0eDCGJU06weqIUwTO3Y,14323
10
+ hud/agents/openai.py,sha256=9G7u17oN9yne7ObiuaBV67a3U3byC-NPJchDT4s5kZ0,13994
12
11
  hud/agents/openai_chat_generic.py,sha256=jTJ-KY6HkglPK0iwZH5v3PVnaUjDsWc9IbRo3AbXlyE,5322
13
12
  hud/agents/misc/__init__.py,sha256=BYi4Ytp9b_vycpZFXnr5Oyw6ncKLNNGml8Jrb7bWUb4,136
14
13
  hud/agents/misc/response_agent.py,sha256=MsnIVElXM4ABrSJfEc_MMYp1Y_Rxmkq4kEGJ9vDX7hw,3098
@@ -16,16 +15,17 @@ hud/agents/tests/__init__.py,sha256=W-O-_4i34d9TTyEHV-O_q1Ai1gLhzwDaaPo02_TWQIY,
16
15
  hud/agents/tests/test_base.py,sha256=F39ajSqASGUbPyPoWSY9KARFav62qNTK74W11Tr1Tg4,28970
17
16
  hud/agents/tests/test_claude.py,sha256=wqEKlzEvx8obz1sSm4NY0j-Zyt1qWNfDOmRqYIuAEd0,13069
18
17
  hud/agents/tests/test_client.py,sha256=Sk5bGZw2hL5GsVi2LMp9tsLngl5ZQ18pkpeeQmts0ao,13908
19
- hud/agents/tests/test_openai.py,sha256=ZJqctxCbJtKw6TkJCP4D2xAcG8CkxzDXO7dh5IIWN_M,9175
20
- hud/cli/__init__.py,sha256=ecjrYlswQB9JJsbxQFcKZVD0fn0ZWneKSLm_kBYWpQ0,30302
18
+ hud/agents/tests/test_openai.py,sha256=lhHowQyLp09oDVwBUjUECoPeH01F16i4O9YIHeugK6E,7028
19
+ hud/cli/__init__.py,sha256=BhrFre1_ZCwoXJsZ67I29KTlgKzH3W_g0Y9FOvmh9-s,34937
21
20
  hud/cli/__main__.py,sha256=fDH7XITyuDITwSDIVwRso06aouADO0CzTHKqp5TOwJE,143
22
- hud/cli/analyze.py,sha256=G-tjT1xLPLcYhDhZEaI7TAIS0z0OACUksnGFoAWd2ag,14416
23
- hud/cli/build.py,sha256=c8pg8iUlCT1-E4koEKFX1Nx8oGaB2ln57pHdOCCDAvs,19126
21
+ hud/cli/analyze.py,sha256=DngDPM53DHZn8gFndz8d7hCIOUwB4tqtYEii6AGFIZk,14393
22
+ hud/cli/build.py,sha256=2bggugEegRp_QguK5aTzoM607NY-toQaic9WtnnoI2o,19231
24
23
  hud/cli/clone.py,sha256=AwVDIuhr8mHb1oT2Af2HrD25SiTdwATpE6zd93vzLgA,6099
25
24
  hud/cli/debug.py,sha256=FNzg9-_ZzUJA1nJfubmop7_2OT5mqnWsdpZyi4AVSXA,14163
26
- hud/cli/dev.py,sha256=ANsd34gHX08eQxeXz6atIuDyi7Tw8qngqvmDPAx-PI0,28640
27
- hud/cli/eval.py,sha256=zrUoXYdSe5cVbWa5fc9-tNK9syBCtKOpKDvc0ApeYQU,12604
28
- hud/cli/init.py,sha256=qrQ5afdB7-0GdIkHbCVwkDZ1SVDqPvWrZ0aAxPXFL1c,18764
25
+ hud/cli/dev.py,sha256=R7YJWIZCUURXzs8ovOCF9V1FwOhsAJT5D3mZQkFmTI4,31134
26
+ hud/cli/eval.py,sha256=LjDCci3lYsu8RRmL5DiWYfroK1n2FrMUUhOiQ53242s,15142
27
+ hud/cli/hf.py,sha256=EYWL-fEN9SS2QJYU7iIBXs0qa9JIvmMWOMh9a8Ewt9s,15179
28
+ hud/cli/init.py,sha256=xRUy92TqBALNQxycBB4Kk0m380WtE-qD3L6A5Sr1Lxw,19581
29
29
  hud/cli/list_func.py,sha256=ENxLL4X5uuqAASWZdQuI0k-tEzmlhUn5LATgz3QPQqQ,7065
30
30
  hud/cli/pull.py,sha256=JHwCwUwRO0Nzbgm9mkjsz6EpxbxgwQVhgNSY64nNZ-s,11969
31
31
  hud/cli/push.py,sha256=4KrEHj0_i3xJNCB3eRjANmHFhSW4MFfpnld3nfVYENs,17904
@@ -41,7 +41,7 @@ hud/cli/tests/test_cursor.py,sha256=ZfxAFKJesJ3UV1JBoASSRlv6BXbpvVEk_pjxUg1jnf4,
41
41
  hud/cli/tests/test_debug.py,sha256=bQ76d_0HJfthHBSECmGNv499ZE57CIOKsanMlNfNHGk,18036
42
42
  hud/cli/tests/test_list_func.py,sha256=pkG4TtJJBMi9Xk8KBNFBlGcam7kwz01IRsjfQBL2PxM,10700
43
43
  hud/cli/tests/test_main_module.py,sha256=6RhwCcdRSN2uQV6-adti40ZcLd3u-mPR1ai6wL64c6Y,1105
44
- hud/cli/tests/test_mcp_server.py,sha256=FM8F_hSgvljDRzu4RDHzd_vcdRIs2kMzoKty28Qb_f8,4357
44
+ hud/cli/tests/test_mcp_server.py,sha256=wLFkDOR22FuBe3kIdYeLG7H81HHiorKB8kXRubftLpU,4316
45
45
  hud/cli/tests/test_pull.py,sha256=7wHxdf_rN3LDmo554-S63WT6eoYUquwDWpjgoy_f1eQ,12923
46
46
  hud/cli/tests/test_push.py,sha256=8LpKY4lASRYPd8xM8c_SlTbE11IQ8kCfzfC8UBqhzN4,12709
47
47
  hud/cli/tests/test_registry.py,sha256=mTfgr6fkY5ygRnSgbVU7988QRQKdpEKUpWmQicGnHGs,9461
@@ -59,15 +59,21 @@ hud/cli/utils/runner.py,sha256=qZI1lFNZIFn6d919awUkMtjQ36TfhAvyqGRzQmkal8c,4269
59
59
  hud/cli/utils/server.py,sha256=uSx2DjG5vX-PFoD8zNH-gBHbkTNSHveFSVdAfmp09Tc,7341
60
60
  hud/clients/README.md,sha256=XNE3mch95ozDgVqfwCGcrhlHY9CwT1GKfNANNboowto,3826
61
61
  hud/clients/__init__.py,sha256=bcPIa7dwH5ENsjh7CzjsJ84fm7Ma93NBc2lGfSjGAKM,328
62
- hud/clients/base.py,sha256=ob8G7_Gi-aENnc0yxHpZmzuqBD-swn_jVWkY2Iw7F4k,13995
63
- hud/clients/fastmcp.py,sha256=b1Q5HltWWmnAhj-Nv6T4T5gitDn5bEfqiLy5PU5yD9g,9102
64
- hud/clients/mcp_use.py,sha256=qRHDJ6ELRISD4V9NVPAX5SNE3NZqyunPAqDdpBtaslg,11920
62
+ hud/clients/base.py,sha256=F8wq-UGoW1J_MguHq5w_Tcr0mJ4awSWbFOE8xP7sSDA,14129
63
+ hud/clients/fastmcp.py,sha256=KJGi8bmds0Q6rHnkTXb_Hw9ZqWmSo0OfjW05SSuyEJU,9182
64
+ hud/clients/mcp_use.py,sha256=tgvQ5MyY1cJeCR1M7dwYMfDmPnxOQuXPjZeKCr98CJc,11962
65
65
  hud/clients/tests/__init__.py,sha256=sKOtJFFa4mDIXh1U6O8ZUHjigE8CiRMQ2PzJTIBZuVE,33
66
66
  hud/clients/tests/test_client_integration.py,sha256=kohU6jfCNfwSnAushHeB1_CmDlRfQc7VBL0GEdJYSeI,4198
67
67
  hud/clients/tests/test_fastmcp.py,sha256=4q3TzDjuieTZa89taiNJIrzbUncNkYOG4MaubypA21k,13030
68
68
  hud/clients/tests/test_protocol.py,sha256=aK4CS4g3j1D5jPo83ykzZuHUvcZFAulYtIq9T9Hb_fQ,6640
69
69
  hud/clients/utils/__init__.py,sha256=ucYJqOVpEsN-D9OFE2YTNLG628MgxcZAzfYhnbzx02k,32
70
- hud/clients/utils/retry_transport.py,sha256=-DyiXTtNBqHMg6Xb340q0wTyYv6qVPQv1zyJskD4JrE,5358
70
+ hud/clients/utils/retry_transport.py,sha256=Rsq25eiKKt_pM1bas78QEZvO0illK97X_3opmaS3A3w,6809
71
+ hud/datasets/__init__.py,sha256=74T4mrjELKtE04XkZKwU8QAJcg2wjqXLqRO9s4GlPr4,678
72
+ hud/datasets/task.py,sha256=V82HzRb2_c2MO9EG5ZcY-PMsLt3234Uks7WlkMta5HY,3615
73
+ hud/datasets/utils.py,sha256=3hKvZTkZuCRkTeITB86nNdA1dtHZAqFfAdSPMtcTUhs,4275
74
+ hud/datasets/execution/__init__.py,sha256=4m1AEpMQaUSJFVN_iAXvY6zFttVgZKwE6oQtC0Rrk7U,330
75
+ hud/datasets/execution/parallel.py,sha256=AxtbEgX1v9UFO3nHN91vQyhtfeU6oe65rV50ubDWBkg,22182
76
+ hud/datasets/execution/runner.py,sha256=EEvb90vvAqFXXx8NyVKLfK5p-gtsfJqiFJAoqSjyfXg,4695
71
77
  hud/misc/__init__.py,sha256=m_pprQQ-G-Y0Sd0NEiR8MtAMbElnuFZ2OWT8TXrw7c4,43
72
78
  hud/misc/claude_plays_pokemon.py,sha256=IthAkjDVr2Q-GNvX-QLJyMzN7-0pHqqJbagGNv2m7yo,10453
73
79
  hud/otel/__init__.py,sha256=ii17ayoWiS5vAhA7UAmZ8TkmP52gs2pWyHsD46-uYbE,1003
@@ -75,14 +81,14 @@ hud/otel/collector.py,sha256=jLZymZ8r7xt2VDuWexfbnT7PY1-0aiyLMgjBy8KDY1M,4497
75
81
  hud/otel/config.py,sha256=6np_C2UXhtKHHjY41HQxZElua2Eh_EUCBiRB_YuiSuc,6249
76
82
  hud/otel/context.py,sha256=C9MvO99cRSNNDEDC7ehO3eoTPnb6J7AemUYvEp57yEU,17774
77
83
  hud/otel/exporters.py,sha256=TP7SF6ySCP-gFV1i-u5-HbpYsK3n9GP3OjW_ZBfsj-w,14246
78
- hud/otel/instrumentation.py,sha256=ieKHEnMMSMZxPYvZokYJG-UQYXTNyEnaYG1lGY4zIHA,3575
84
+ hud/otel/instrumentation.py,sha256=xTjrkn2p490lJ8UlSD1SfzkPZsD8XKDocQqYQfwMMKo,3775
79
85
  hud/otel/processors.py,sha256=yI5BWsDBMEPfwMzD-iWbJd4KWH3qUDSe-5-C1yT6fjU,4615
80
86
  hud/otel/tests/__init__.py,sha256=VNJKBMaxTtbn7trW-1Ph50zCvCok_wTSGcI1HD6GOLA,43
81
87
  hud/otel/tests/test_processors.py,sha256=np0R4ssd9j6LJSJykJ5bNjl0POwNYNhgb7BqOZHwcMY,6778
82
88
  hud/server/__init__.py,sha256=8LUwgsXO8xiViWP7uImDwcOsWLu01r5F4r8U8qH3rSY,91
83
89
  hud/server/context.py,sha256=6bCdSzv1FGyItu9472HbbYef279H7QuMGJDR8EtYg5Y,3210
84
90
  hud/server/low_level.py,sha256=XYs2pOJ9kN4OcJ6ahDmXM5mWkzq5wJLpKFInUYrWEok,4701
85
- hud/server/server.py,sha256=jx2JEGeVkV5wDVKM7Sb474uY4fd-c6azo7HS_SFYDxo,8013
91
+ hud/server/server.py,sha256=_Up01RQ989QnChXRl2ZfMDCbmkGIlX0-Rj_acrpGdEI,9775
86
92
  hud/server/helper/__init__.py,sha256=ZxO8VP3RZEBBp-q65VixuhzQgqEPSVzW0hEY9J9QqDA,116
87
93
  hud/server/tests/__init__.py,sha256=eEYYkxX5Hz9woXVOBJ2H2_CQoEih0vH6nRt3sH2Z8v8,49
88
94
  hud/shared/__init__.py,sha256=IPxPCqtPLguryN-nBq78Sakypw2bRiE2iHv3SXG8YRk,139
@@ -134,7 +140,7 @@ hud/tools/tests/test_tools_init.py,sha256=qbUCNWbswlkbsSJR-CBnRk_h_l1CLasRffIhp8
134
140
  hud/tools/tests/test_utils.py,sha256=oYxEnLpSA5sEeYFGUTj74QRNv0AHP3AjmYYHXgIW0BY,5496
135
141
  hud/utils/__init__.py,sha256=ckuIzwqgTxkzASa04XTPsOu_TqsRYUKBWUYfcSi3Xnc,164
136
142
  hud/utils/async_utils.py,sha256=5cKrJcnaHV2eJNxeyx0r7fPcdPTDBK7kM9-nLaF51X4,2409
137
- hud/utils/design.py,sha256=MueBX8KpENuQlZFPCh2qiCqGrJghm-jilQA-ZQGZ9ZA,9375
143
+ hud/utils/design.py,sha256=NCl31thhNeYyMSc0GaB0uNe5CIwcM6dONWzed8mI2jI,15052
138
144
  hud/utils/mcp.py,sha256=uFn4qE2IIe-isV0mKQI2rlMDl6l0dHfovYgGa-vOfI8,2455
139
145
  hud/utils/progress.py,sha256=suikwFM8sdSfkV10nAOEaInDhG4XKgOSvFePg4jSj1A,5927
140
146
  hud/utils/telemetry.py,sha256=hrVIx2rUjSGyy9IVxTZ_3Jii83PiHjyFRd5ls2whimM,1863
@@ -144,10 +150,10 @@ hud/utils/tests/test_init.py,sha256=2QLQSGgyP9wJhOvPCusm_zjJad0qApOZi1BXpxcdHXQ,
144
150
  hud/utils/tests/test_mcp.py,sha256=0pUa16mL-bqbZDXp5NHBnt1gO5o10BOg7zTMHZ1DNPM,4023
145
151
  hud/utils/tests/test_progress.py,sha256=QSF7Kpi03Ff_l3mAeqW9qs1nhK50j9vBiSobZq7T4f4,7394
146
152
  hud/utils/tests/test_telemetry.py,sha256=5jl7bEx8C8b-FfFUko5pf4UY-mPOR-9HaeL98dGtVHM,2781
147
- hud/utils/tests/test_version.py,sha256=IZqBAIktdJocdjDlXtY7DYvUwXa-aZku1oBTF7Mwiog,160
153
+ hud/utils/tests/test_version.py,sha256=2-9cqVBlHbL7SFxZhLBPPAg3ZuiZKQvwFqiXE0lUcyY,160
148
154
  hud/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
149
- hud_python-0.4.13.dist-info/METADATA,sha256=Ib5qtM5xmwjNC4giA-tM3f1-P1IQ7rPvjTAwEsP5WcU,20233
150
- hud_python-0.4.13.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
151
- hud_python-0.4.13.dist-info/entry_points.txt,sha256=jJbodNFg1m0-CDofe5AHvB4zKBq7sSdP97-ohaQ3ae4,63
152
- hud_python-0.4.13.dist-info/licenses/LICENSE,sha256=yIzBheVUf86FC1bztAcr7RYWWNxyd3B-UJQ3uddg1HA,1078
153
- hud_python-0.4.13.dist-info/RECORD,,
155
+ hud_python-0.4.15.dist-info/METADATA,sha256=B1t1zBp1c5qjI9HkygWl_K2RBix1A27iIqR7moxoLsc,20287
156
+ hud_python-0.4.15.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
157
+ hud_python-0.4.15.dist-info/entry_points.txt,sha256=jJbodNFg1m0-CDofe5AHvB4zKBq7sSdP97-ohaQ3ae4,63
158
+ hud_python-0.4.15.dist-info/licenses/LICENSE,sha256=yIzBheVUf86FC1bztAcr7RYWWNxyd3B-UJQ3uddg1HA,1078
159
+ hud_python-0.4.15.dist-info/RECORD,,