lite-agent 0.12.0__tar.gz → 0.13.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.

Potentially problematic release.


This version of lite-agent might be problematic. Click here for more details.

Files changed (151) hide show
  1. {lite_agent-0.12.0 → lite_agent-0.13.0}/CHANGELOG.md +12 -0
  2. {lite_agent-0.12.0 → lite_agent-0.13.0}/PKG-INFO +1 -1
  3. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/basic.py +12 -1
  4. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/custom_termination.py +3 -3
  5. {lite_agent-0.12.0 → lite_agent-0.13.0}/pyproject.toml +1 -1
  6. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/runner.py +83 -18
  7. {lite_agent-0.12.0 → lite_agent-0.13.0}/uv.lock +76 -76
  8. {lite_agent-0.12.0 → lite_agent-0.13.0}/.claude/settings.local.json +0 -0
  9. {lite_agent-0.12.0 → lite_agent-0.13.0}/.github/workflows/ci.yml +0 -0
  10. {lite_agent-0.12.0 → lite_agent-0.13.0}/.gitignore +0 -0
  11. {lite_agent-0.12.0 → lite_agent-0.13.0}/.python-version +0 -0
  12. {lite_agent-0.12.0 → lite_agent-0.13.0}/.vscode/launch.json +0 -0
  13. {lite_agent-0.12.0 → lite_agent-0.13.0}/CLAUDE.md +0 -0
  14. {lite_agent-0.12.0 → lite_agent-0.13.0}/README.md +0 -0
  15. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/basic_agent.py +0 -0
  16. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/basic_model.py +0 -0
  17. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/cancel_and_transfer_demo.py +0 -0
  18. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/channels/rich_channel.py +0 -0
  19. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/chat_display_demo.py +0 -0
  20. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/confirm_and_continue.py +0 -0
  21. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/consolidate_history.py +0 -0
  22. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/context.py +0 -0
  23. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/debug_non_streaming.py +0 -0
  24. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/debug_with_logging.py +0 -0
  25. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/handoffs.py +0 -0
  26. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/history_context_demo.py +0 -0
  27. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/image.py +0 -0
  28. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/knowledge/main.py +0 -0
  29. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/llm_config_demo.py +0 -0
  30. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/message_transfer_example.py +0 -0
  31. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/message_transfer_example_new.py +0 -0
  32. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/new_message_structure_demo.py +0 -0
  33. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/non_streaming.py +0 -0
  34. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/reasoning_example.py +0 -0
  35. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/response_api_example.py +0 -0
  36. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/responses.py +0 -0
  37. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/set_chat_history_example.py +0 -0
  38. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/simple_debug.py +0 -0
  39. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/simple_debug2.py +0 -0
  40. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/stop_before_functions.py +0 -0
  41. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/stop_with_tool_call.py +0 -0
  42. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/streaming_demo.py +0 -0
  43. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/terminal.py +0 -0
  44. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/translate/main.py +0 -0
  45. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/translate/prompts/translation_system.md.j2 +0 -0
  46. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/translate.py +0 -0
  47. {lite_agent-0.12.0 → lite_agent-0.13.0}/examples/type_system_example.py +0 -0
  48. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/.gitignore +0 -0
  49. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/class_index.html +0 -0
  50. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/coverage_html_cb_6fb7b396.js +0 -0
  51. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/favicon_32_cb_58284776.png +0 -0
  52. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/function_index.html +0 -0
  53. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/index.html +0 -0
  54. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/keybd_closed_cb_ce680311.png +0 -0
  55. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/status.json +0 -0
  56. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/style_cb_6b508a39.css +0 -0
  57. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_02adcf90d0f2eeb1___init___py.html +0 -0
  58. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_02adcf90d0f2eeb1_events_py.html +0 -0
  59. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_02adcf90d0f2eeb1_messages_py.html +0 -0
  60. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_02adcf90d0f2eeb1_tool_calls_py.html +0 -0
  61. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_1d32cdd6b7b66bed___init___py.html +0 -0
  62. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_1d32cdd6b7b66bed_message_builder_py.html +0 -0
  63. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_1d32cdd6b7b66bed_metrics_py.html +0 -0
  64. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_40b804173f68aa9e___init___py.html +0 -0
  65. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_40b804173f68aa9e_agent_py.html +0 -0
  66. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_40b804173f68aa9e_chat_display_py.html +0 -0
  67. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_40b804173f68aa9e_client_py.html +0 -0
  68. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_40b804173f68aa9e_constants_py.html +0 -0
  69. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_40b804173f68aa9e_loggers_py.html +0 -0
  70. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_40b804173f68aa9e_message_transfers_py.html +0 -0
  71. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_40b804173f68aa9e_runner_py.html +0 -0
  72. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_71ac9935daa08879___init___py.html +0 -0
  73. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_71ac9935daa08879_base_py.html +0 -0
  74. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_71ac9935daa08879_completion_py.html +0 -0
  75. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_71ac9935daa08879_responses_py.html +0 -0
  76. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_c8357a9ef7e20b45___init___py.html +0 -0
  77. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_c8357a9ef7e20b45_litellm_py.html +0 -0
  78. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_f01690d2832086e5___init___py.html +0 -0
  79. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_f01690d2832086e5_completion_event_processor_py.html +0 -0
  80. {lite_agent-0.12.0 → lite_agent-0.13.0}/htmlcov/z_f01690d2832086e5_response_event_processor_py.html +0 -0
  81. {lite_agent-0.12.0 → lite_agent-0.13.0}/pyrightconfig.json +0 -0
  82. {lite_agent-0.12.0 → lite_agent-0.13.0}/scripts/record_chat_messages.py +0 -0
  83. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/__init__.py +0 -0
  84. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/agent.py +0 -0
  85. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/chat_display.py +0 -0
  86. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/client.py +0 -0
  87. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/constants.py +0 -0
  88. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/context.py +0 -0
  89. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/loggers.py +0 -0
  90. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/message_transfers.py +0 -0
  91. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/processors/__init__.py +0 -0
  92. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/processors/completion_event_processor.py +0 -0
  93. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/processors/response_event_processor.py +0 -0
  94. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/py.typed +0 -0
  95. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/response_handlers/__init__.py +0 -0
  96. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/response_handlers/base.py +0 -0
  97. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/response_handlers/completion.py +0 -0
  98. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/response_handlers/responses.py +0 -0
  99. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/stream_handlers/__init__.py +0 -0
  100. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/stream_handlers/litellm.py +0 -0
  101. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/templates/handoffs_source_instructions.xml.j2 +0 -0
  102. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/templates/handoffs_target_instructions.xml.j2 +0 -0
  103. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/templates/wait_for_user_instructions.xml.j2 +0 -0
  104. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/types/__init__.py +0 -0
  105. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/types/events.py +0 -0
  106. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/types/messages.py +0 -0
  107. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/types/tool_calls.py +0 -0
  108. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/utils/__init__.py +0 -0
  109. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/utils/advanced_message_builder.py +0 -0
  110. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/utils/message_builder.py +0 -0
  111. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/utils/message_converter.py +0 -0
  112. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/utils/message_state_manager.py +0 -0
  113. {lite_agent-0.12.0 → lite_agent-0.13.0}/src/lite_agent/utils/metrics.py +0 -0
  114. {lite_agent-0.12.0 → lite_agent-0.13.0}/temp/main.py +0 -0
  115. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/integration/test_agent_with_mocks.py +0 -0
  116. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/integration/test_basic.py +0 -0
  117. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/integration/test_mock_litellm.py +0 -0
  118. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/mocks/basic/1.jsonl +0 -0
  119. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/mocks/confirm_and_continue/1.jsonl +0 -0
  120. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/mocks/confirm_and_continue/2.jsonl +0 -0
  121. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/mocks/context/1.jsonl +0 -0
  122. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/mocks/handoffs/1.jsonl +0 -0
  123. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/performance/test_set_chat_history_performance.py +0 -0
  124. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/test_new_messages.py +0 -0
  125. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_agent.py +0 -0
  126. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_agent_additional.py +0 -0
  127. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_agent_handoffs.py +0 -0
  128. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_append_message.py +0 -0
  129. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_cancel_pending_tools.py +0 -0
  130. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_chat_display.py +0 -0
  131. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_chat_display_additional.py +0 -0
  132. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_chat_display_simple.py +0 -0
  133. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_client.py +0 -0
  134. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_completion_condition.py +0 -0
  135. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_file_recording.py +0 -0
  136. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_litellm_stream_handler.py +0 -0
  137. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_message_builder.py +0 -0
  138. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_message_transfer.py +0 -0
  139. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_message_transfers.py +0 -0
  140. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_message_transfers_additional.py +0 -0
  141. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_response_api_format.py +0 -0
  142. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_response_event_processor.py +0 -0
  143. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_response_handlers.py +0 -0
  144. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_runner.py +0 -0
  145. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_set_chat_history.py +0 -0
  146. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_simple_stream_handlers.py +0 -0
  147. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_stream_chunk_processor.py +0 -0
  148. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_stream_handlers_additional.py +0 -0
  149. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_streaming_config.py +0 -0
  150. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/unit/test_utils_extended.py +0 -0
  151. {lite_agent-0.12.0 → lite_agent-0.13.0}/tests/utils/mock_litellm.py +0 -0
@@ -1,3 +1,15 @@
1
+ ## v0.13.0
2
+
3
+ [v0.12.0...v0.13.0](https://github.com/Jannchie/lite-agent/compare/v0.12.0...v0.13.0)
4
+
5
+ ### :sparkles: Features
6
+
7
+ - **runner**: add selective history context injection based on tool signature - By [Jannchie](mailto:jannchie@gmail.com) in [15866d4](https://github.com/Jannchie/lite-agent/commit/15866d4)
8
+
9
+ ### :adhesive_bandage: Fixes
10
+
11
+ - **runner**: improve historycontext parameter detection - By [Jannchie](mailto:jannchie@gmail.com) in [7099abc](https://github.com/Jannchie/lite-agent/commit/7099abc)
12
+
1
13
  ## v0.12.0
2
14
 
3
15
  [v0.11.0...v0.12.0](https://github.com/Jannchie/lite-agent/compare/v0.11.0...v0.12.0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lite-agent
3
- Version: 0.12.0
3
+ Version: 0.13.0
4
4
  Summary: A lightweight, extensible framework for building AI agent.
5
5
  Author-email: Jianqi Pan <jannchie@gmail.com>
6
6
  License: MIT
@@ -1,6 +1,8 @@
1
1
  import asyncio
2
2
  import logging
3
3
 
4
+ from funcall import Context
5
+ from openai import BaseModel
4
6
  from rich.logging import RichHandler
5
7
 
6
8
  from lite_agent.agent import Agent
@@ -19,8 +21,16 @@ logger = logging.getLogger("lite_agent")
19
21
  logger.setLevel(logging.DEBUG)
20
22
 
21
23
 
22
- async def get_temperature(city: str) -> str:
24
+ class MyContext(BaseModel):
25
+ d: str
26
+
27
+
28
+ ctx = Context(MyContext(d="example data"))
29
+
30
+
31
+ async def get_temperature(city: str, ctx: Context[MyContext]) -> str:
23
32
  """Get the temperature for a city."""
33
+ print(ctx.value.d)
24
34
  return f"The temperature in {city} is 25°C."
25
35
 
26
36
 
@@ -37,6 +47,7 @@ async def main():
37
47
  await runner.run_until_complete(
38
48
  "What is the temperature in New York?",
39
49
  includes=["usage", "assistant_message", "function_call", "function_call_output", "timing"],
50
+ context=ctx,
40
51
  )
41
52
  display_messages(runner.messages)
42
53
 
@@ -35,7 +35,7 @@ async def save_report(content: str) -> str:
35
35
 
36
36
  # Example 1: Single custom termination tool
37
37
  agent1 = Agent(
38
- model="gpt-4.1",
38
+ model="gpt-4.1-nano",
39
39
  name="Task Assistant",
40
40
  instructions="You are a task assistant. Use the weather tool if needed, then mark the task complete when done.",
41
41
  tools=[get_weather, mark_task_complete],
@@ -45,7 +45,7 @@ agent1 = Agent(
45
45
 
46
46
  # Example 2: Multiple termination tools
47
47
  agent2 = Agent(
48
- model="gpt-4.1",
48
+ model="gpt-4.1-nano",
49
49
  name="Report Assistant",
50
50
  instructions="You are a report assistant. Get weather data and either save a report or mark the task complete.",
51
51
  tools=[get_weather, mark_task_complete, save_report],
@@ -55,7 +55,7 @@ agent2 = Agent(
55
55
 
56
56
  # Example 3: Using string names for termination tools
57
57
  agent3 = Agent(
58
- model="gpt-4.1",
58
+ model="gpt-4.1-nano",
59
59
  name="String-based Assistant",
60
60
  instructions="You are an assistant. Get weather data and mark task complete when done.",
61
61
  tools=[get_weather, mark_task_complete],
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "lite-agent"
3
- version = "0.12.0"
3
+ version = "0.13.0"
4
4
  description = "A lightweight, extensible framework for building AI agent."
5
5
  readme = "README.md"
6
6
  authors = [{ name = "Jianqi Pan", email = "jannchie@gmail.com" }]
@@ -1,9 +1,10 @@
1
1
  import json
2
+ import inspect
2
3
  from collections.abc import AsyncGenerator, Sequence
3
4
  from datetime import datetime, timedelta, timezone
4
5
  from os import PathLike
5
6
  from pathlib import Path
6
- from typing import Any, Literal, cast
7
+ from typing import Any, Literal, cast, get_args, get_origin
7
8
 
8
9
  from funcall import Context
9
10
 
@@ -112,6 +113,59 @@ class Runner:
112
113
  """Normalize record_to parameter to Path object if provided."""
113
114
  return Path(record_to) if record_to else None
114
115
 
116
+ def _tool_expects_history_context(self, tool_calls: Sequence["ToolCall"]) -> bool:
117
+ """Check if any of the tool calls expect HistoryContext in their signatures.
118
+
119
+ Returns True if any tool function has a Context[HistoryContext[...]] parameter,
120
+ False if they expect Context[...] without HistoryContext wrapper.
121
+ """
122
+ if not tool_calls:
123
+ return False
124
+
125
+ for tool_call in tool_calls:
126
+ tool_func = self.agent.fc.function_registry.get(tool_call.function.name)
127
+ if not tool_func:
128
+ continue
129
+
130
+ # Get function signature
131
+ sig = inspect.signature(tool_func)
132
+
133
+ # Check each parameter for Context annotation
134
+ for param in sig.parameters.values():
135
+ if param.annotation == inspect.Parameter.empty:
136
+ continue
137
+
138
+ # Check if parameter is Context[...]
139
+ origin = get_origin(param.annotation)
140
+ if origin is not None:
141
+ # Check if it's Context type (compare by string name to handle import differences)
142
+ origin_name = getattr(origin, '__name__', str(origin))
143
+ if 'Context' in origin_name:
144
+ args = get_args(param.annotation)
145
+ if args:
146
+ # Check if the Context contains HistoryContext
147
+ inner_type = args[0]
148
+ inner_origin = get_origin(inner_type)
149
+ if inner_origin is not None:
150
+ inner_name = getattr(inner_origin, '__name__', str(inner_origin))
151
+ if 'HistoryContext' in inner_name:
152
+ logger.debug(f"Tool {tool_call.function.name} expects HistoryContext")
153
+ return True
154
+ # Also check for direct HistoryContext class
155
+ elif hasattr(inner_type, '__name__') and 'HistoryContext' in inner_type.__name__:
156
+ logger.debug(f"Tool {tool_call.function.name} expects HistoryContext")
157
+ return True
158
+
159
+ # Also handle direct annotation checking
160
+ if hasattr(param.annotation, '__name__'):
161
+ annotation_str = str(param.annotation)
162
+ if 'HistoryContext' in annotation_str:
163
+ logger.debug(f"Tool {tool_call.function.name} expects HistoryContext (direct)")
164
+ return True
165
+
166
+ logger.debug("No tools expect HistoryContext")
167
+ return False
168
+
115
169
  async def _handle_tool_calls(self, tool_calls: "Sequence[ToolCall] | None", includes: Sequence[AgentChunkType], context: "Any | None" = None) -> AsyncGenerator[AgentChunk, None]: # noqa: ANN401
116
170
  """Handle tool calls and yield appropriate chunks."""
117
171
  if not tool_calls:
@@ -184,23 +238,33 @@ class Runner:
184
238
  )
185
239
  return # Stop processing other tool calls after transfer
186
240
 
187
- # Auto-inject history messages into context
188
- if context is not None and not isinstance(context, Context):
189
- # If user provided a plain object, wrap it in Context first
241
+ # Check if tools expect HistoryContext wrapper
242
+ expects_history = self._tool_expects_history_context(tool_calls)
243
+
244
+ if expects_history:
245
+ # Auto-inject history messages into context for tools that expect HistoryContext
246
+ if context is not None and not isinstance(context, Context):
247
+ # If user provided a plain object, wrap it in Context first
248
+ context = Context(context)
249
+
250
+ if isinstance(context, Context):
251
+ # Extract original value and wrap in HistoryContext
252
+ original_value = context.value
253
+ wrapped = HistoryContext(
254
+ history_messages=self.messages.copy(),
255
+ data=original_value,
256
+ )
257
+ context = Context(wrapped)
258
+ else:
259
+ # No context provided, create HistoryContext with only history messages
260
+ wrapped = HistoryContext(history_messages=self.messages.copy())
261
+ context = Context(wrapped)
262
+ elif context is not None and not isinstance(context, Context):
263
+ # Tools don't expect HistoryContext, wrap user object in Context
190
264
  context = Context(context)
191
-
192
- if isinstance(context, Context):
193
- # Extract original value and wrap in HistoryContext
194
- original_value = context.value
195
- wrapped = HistoryContext(
196
- history_messages=self.messages.copy(),
197
- data=original_value,
198
- )
199
- context = Context(wrapped)
200
- else:
201
- # No context provided, create HistoryContext with only history messages
202
- wrapped = HistoryContext(history_messages=self.messages.copy())
203
- context = Context(wrapped)
265
+ elif context is None:
266
+ # Provide empty context for tools that don't expect HistoryContext
267
+ context = Context(None)
204
268
 
205
269
  async for tool_call_chunk in self.agent.handle_tool_calls(tool_calls, context=context):
206
270
  # if tool_call_chunk.type == "function_call" and tool_call_chunk.type in includes:
@@ -511,9 +575,10 @@ class Runner:
511
575
  max_steps: int = 20,
512
576
  includes: list[AgentChunkType] | None = None,
513
577
  record_to: PathLike | str | None = None,
578
+ context: Context | None = None,
514
579
  ) -> list[AgentChunk]:
515
580
  """Run the agent until it completes and return the final message."""
516
- resp = self.run(user_input, max_steps, includes, record_to=record_to)
581
+ resp = self.run(user_input, max_steps, includes, record_to=record_to, context=context)
517
582
  return await self._collect_all_chunks(resp)
518
583
 
519
584
  def _analyze_last_assistant_message(self) -> tuple[list[AssistantToolCall], dict[str, str]]:
@@ -741,7 +741,7 @@ wheels = [
741
741
 
742
742
  [[package]]
743
743
  name = "lite-agent"
744
- version = "0.11.0"
744
+ version = "0.12.0"
745
745
  source = { editable = "." }
746
746
  dependencies = [
747
747
  { name = "aiofiles" },
@@ -1376,81 +1376,81 @@ wheels = [
1376
1376
 
1377
1377
  [[package]]
1378
1378
  name = "regex"
1379
- version = "2025.8.29"
1380
- source = { registry = "https://pypi.org/simple" }
1381
- sdist = { url = "https://files.pythonhosted.org/packages/e4/10/2d333227cf5198eb3252f2d50c8ade5cd2015f11c22403f0c9e3d529e81a/regex-2025.8.29.tar.gz", hash = "sha256:731ddb27a0900fa227dfba976b4efccec8c1c6fba147829bb52e71d49e91a5d7", size = 400817, upload-time = "2025-08-29T22:43:36.985Z" }
1382
- wheels = [
1383
- { url = "https://files.pythonhosted.org/packages/a4/44/b29ab748d9a8fddd4b6165f7a78e95bcfc7ce73b777cd9f5843a7c9c0326/regex-2025.8.29-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a367dbb66842a08744f49c64ba1aab23e4cbcc924bae8ef40870f2c51d6cb240", size = 484656, upload-time = "2025-08-29T22:40:38.918Z" },
1384
- { url = "https://files.pythonhosted.org/packages/fd/8e/ddca226a60d0b0002aced9f1f7b08b651a22575326e3b775e124922a6d9a/regex-2025.8.29-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:090d20a6f308c1cd3c33824e892666089d9719ff88e139d4b63623e881d3945c", size = 289363, upload-time = "2025-08-29T22:40:42.61Z" },
1385
- { url = "https://files.pythonhosted.org/packages/1e/cf/036d79ef8a8ad94ec921afaa4ac399ba8856df7d0a774a8a9472ba4b6712/regex-2025.8.29-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:86e7ee69fdc9daf6aa98693b0db27a76e3d960c80d87c695af262c2608ccfc6a", size = 286006, upload-time = "2025-08-29T22:40:44.645Z" },
1386
- { url = "https://files.pythonhosted.org/packages/35/5c/90a965e4f1332f0e944dd7eff57d9e8b803f80bc2220dc97aed4869f88c2/regex-2025.8.29-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:50628bc413193041838001b3926570629369d675b92badd6962c402aa09ed4c4", size = 780435, upload-time = "2025-08-29T22:40:46.739Z" },
1387
- { url = "https://files.pythonhosted.org/packages/b0/21/ef1e15ef2188d40b67f48d99bdf452d0f4e0c48246a137840c6302dcb169/regex-2025.8.29-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fadf22d84901f1b6cc6b27439d98688a33cefb83e70c885791c2c27524907ed4", size = 849251, upload-time = "2025-08-29T22:40:48.547Z" },
1388
- { url = "https://files.pythonhosted.org/packages/7c/29/fbbff8f0285a1a8b014d962d8b5b14803aa52c78d79555d45b5d5c713cf2/regex-2025.8.29-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e3948db57ebe3c4bfb7e05765411ce6186820cafa27e5c737d72dbc5249010b3", size = 897295, upload-time = "2025-08-29T22:40:51.751Z" },
1389
- { url = "https://files.pythonhosted.org/packages/96/f0/4bcc714f251e991e13bcc462af25b85ec1f300eeface928f8b0d744be70e/regex-2025.8.29-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0c42fbffe25ac6291f8dd00176d1916165550aa649d14e9c4668d6a3d6a5c900", size = 789904, upload-time = "2025-08-29T22:40:53.154Z" },
1390
- { url = "https://files.pythonhosted.org/packages/e0/36/6f1d93acf9d96f0754669fcd5348f32824ffd3efb54695afa72bc84d862b/regex-2025.8.29-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d1f3498dcc96266b8db76512ffb2432bab2587df5e8ebfdceba5e737378e2bd1", size = 780740, upload-time = "2025-08-29T22:40:54.91Z" },
1391
- { url = "https://files.pythonhosted.org/packages/35/75/e5a32207a38608e390e60a031524e5da27ad9480e1ec504ad66335d4d85e/regex-2025.8.29-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2dadb4ecaad42562771697685a381e3f723bd4d522e357c07ae4a541ebf5753c", size = 773586, upload-time = "2025-08-29T22:40:56.764Z" },
1392
- { url = "https://files.pythonhosted.org/packages/cb/ee/6ff1375398b101f9e132277220551db213db0d72f82018e206353d3b3e59/regex-2025.8.29-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:bc94bccb0482a1eceb34961e3c46e25a3746633fa19f93c93a42ff4b231ee6c3", size = 844064, upload-time = "2025-08-29T22:40:58.442Z" },
1393
- { url = "https://files.pythonhosted.org/packages/17/78/6aca9854aebeaf7707e07d4426c15f861dd910bd64f1c41dd6417feb8746/regex-2025.8.29-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:96adc63fd63c05e2feb9c6b8a7212e2b9f52ccb1fa1f18eaed4f9e0ac2cbd186", size = 834749, upload-time = "2025-08-29T22:41:00.77Z" },
1394
- { url = "https://files.pythonhosted.org/packages/50/d9/07d7361028c87aac0a0cdcbf83faf2e87518b6cc88ecb20aa0586076cea8/regex-2025.8.29-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:145fb4ca5a85e26c330b464fc71bbe0e92523ec5d295c6de9a1e31b06ebccf25", size = 778495, upload-time = "2025-08-29T22:41:02.618Z" },
1395
- { url = "https://files.pythonhosted.org/packages/db/76/30f00296af393de079f86768a5040d1e857316d088c137de1d94269898aa/regex-2025.8.29-cp310-cp310-win32.whl", hash = "sha256:119a0e930916bb26fe028ef5098c6cad66d7a298560cacbc6942e834580dfba5", size = 264074, upload-time = "2025-08-29T22:41:05.261Z" },
1396
- { url = "https://files.pythonhosted.org/packages/20/53/11149800770db8f45b9712571c47cb629f0bc8f76f32e529a7c7709c8434/regex-2025.8.29-cp310-cp310-win_amd64.whl", hash = "sha256:e8f709146e0f3dafdb4315884de1490ab59f1b93ecf7f9c6c8b0f655f437e593", size = 276099, upload-time = "2025-08-29T22:41:06.635Z" },
1397
- { url = "https://files.pythonhosted.org/packages/24/29/d43a2f6786987784d26d6cfd9818086cfd30fa398446a729191b752a4583/regex-2025.8.29-cp310-cp310-win_arm64.whl", hash = "sha256:dc12259599d953bc25bc01f19b056b9115a96cd3cfe05f154d4570c9649800b0", size = 268428, upload-time = "2025-08-29T22:41:08.489Z" },
1398
- { url = "https://files.pythonhosted.org/packages/ef/a2/e9b9ce5407af9147dc39a7de4f161fd72804c095ea398ab472e8dbc65533/regex-2025.8.29-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:156f711019968ffb3512723a38b06d94d379675c296bdb6104d1abb6e57374c6", size = 484663, upload-time = "2025-08-29T22:41:10.425Z" },
1399
- { url = "https://files.pythonhosted.org/packages/f1/7c/5b2cf5f1350c1c218542fb0be89cf28d8375ebe240cb5769f108325eb285/regex-2025.8.29-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9082c0db8d43c696fac70b5b0592934f21533940f0118239b5c32fa23e51ed1a", size = 289365, upload-time = "2025-08-29T22:41:14.439Z" },
1400
- { url = "https://files.pythonhosted.org/packages/1c/27/44733d2aa3b0c9532580872e9ed2df6a86fe7b975b75dc1f1733f6751e55/regex-2025.8.29-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9b3535b9a69a818735ebac392876dae4b215fe28c13b145353a2dac468ebae16", size = 286007, upload-time = "2025-08-29T22:41:16.243Z" },
1401
- { url = "https://files.pythonhosted.org/packages/b9/ac/2d4f6904422b95f22d1548d8655b288837f3218b54853c6050de61a87b7e/regex-2025.8.29-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c460628f6098cf8916b2d62fb39a37a39e49cca0279ac301ff9d94f7e75033e", size = 792412, upload-time = "2025-08-29T22:41:18.618Z" },
1402
- { url = "https://files.pythonhosted.org/packages/a1/61/8f67415c0ad59abf8f4dd24ad9de504eb37c363318f757be35c42b537d66/regex-2025.8.29-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8dad3ce46390fe3d81ae1c131e29179f010925fa164e15b918fb037effdb7ad9", size = 858682, upload-time = "2025-08-29T22:41:21.519Z" },
1403
- { url = "https://files.pythonhosted.org/packages/fb/31/c3552278e507ab255c51dce4dda0072252e78c801a16697085e71595b1c7/regex-2025.8.29-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f89e5beb3012d3c36c526fd4af163ada24011a0b417378f726b17c2fb382a35d", size = 905855, upload-time = "2025-08-29T22:41:23.367Z" },
1404
- { url = "https://files.pythonhosted.org/packages/ab/84/5150fdffe83df17a7b869930c06d8007b890be3fdf6eb509b849431cabeb/regex-2025.8.29-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:40eeff06bbcfa69201b60488f3f3aa38ad3c92c7c0ab2cfc7c9599abfdf24262", size = 798943, upload-time = "2025-08-29T22:41:25.511Z" },
1405
- { url = "https://files.pythonhosted.org/packages/89/bc/695f94a6fada1838adc75312512843f8d9d94eda71c253958fb40bba5083/regex-2025.8.29-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d7a9bc68610d22735b6ac01a3c3ef5b03d9303a18bd3e2249340213389f273dc", size = 781859, upload-time = "2025-08-29T22:41:27.178Z" },
1406
- { url = "https://files.pythonhosted.org/packages/11/8e/641b228837f551c129bc03005a158c48aebb353a1f6a34dfcea025b5e4bc/regex-2025.8.29-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e785e40f7edfc19ff0b81b27f25eefdb0251cfd2ac4a9fa1eea03f5129e93758", size = 852914, upload-time = "2025-08-29T22:41:29.292Z" },
1407
- { url = "https://files.pythonhosted.org/packages/0c/49/b8d55dffd138369ee8378830b3bad4f7b815517df5ad16212031521f966f/regex-2025.8.29-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ba1deae2ceaa0b181ac9fd4cb8f04d6ba1494f3c8d053c8999f7c0dadb93497b", size = 844314, upload-time = "2025-08-29T22:41:31.244Z" },
1408
- { url = "https://files.pythonhosted.org/packages/f7/73/48b6b616fdc1b6dc75a00c2670da7038400796c855b7bd0fbd4dad18c26c/regex-2025.8.29-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:15869e4f36de7091342e1dae90216aafa3746e3a069f30b34503a36931036f95", size = 787215, upload-time = "2025-08-29T22:41:33.315Z" },
1409
- { url = "https://files.pythonhosted.org/packages/65/af/38af20de8ea862c5275da67d5a0e63023a92cc5df344ad9a80fc1fcd448e/regex-2025.8.29-cp311-cp311-win32.whl", hash = "sha256:aef62e0b08b0e3c2616783a9f75a02f001254695a0a1d28b829dc9fb6a3603e4", size = 264088, upload-time = "2025-08-29T22:41:35.263Z" },
1410
- { url = "https://files.pythonhosted.org/packages/84/d9/f765e5d9eaaa67e10267662002aea786334176c2b22066437df6d73a6424/regex-2025.8.29-cp311-cp311-win_amd64.whl", hash = "sha256:fd347592a4811ba1d246f99fb53db82a1898a5aebb511281ac0c2d81632e1789", size = 276119, upload-time = "2025-08-29T22:41:37.933Z" },
1411
- { url = "https://files.pythonhosted.org/packages/87/cd/44da9fae9a0c1af09f7171facc8d6313b1cbdfeea9f3526607495a28bdd7/regex-2025.8.29-cp311-cp311-win_arm64.whl", hash = "sha256:d93801012bb23901df403ae0adf528abfd50041c9e1136a303937d45c14466e0", size = 268429, upload-time = "2025-08-29T22:41:39.571Z" },
1412
- { url = "https://files.pythonhosted.org/packages/e3/a0/8c37d276a80ffda94f7e019e50cc88f898015512c7f104e49f1a0a6d3c59/regex-2025.8.29-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:dd61f18dc4446bc3a2904559a61f32e98091cef7fb796e06fa35b9bfefe4c0c5", size = 485565, upload-time = "2025-08-29T22:41:41.069Z" },
1413
- { url = "https://files.pythonhosted.org/packages/5d/34/baf5963bec36ac250fa242f0f0e7670f013de5004db6caa31c872981df42/regex-2025.8.29-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f21b416be10a8348a7313ba8c610569a1ab4bf8ec70731750540842a4551cd3d", size = 290073, upload-time = "2025-08-29T22:41:42.686Z" },
1414
- { url = "https://files.pythonhosted.org/packages/24/29/c5c18143cd60b736d7ff8acece126118fe5649f45a7a8db18e308f5f813d/regex-2025.8.29-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:008947a7fa92f4cb3b28201c9aa7becc0a44c31a7c2fcb934356e1877baccc09", size = 286144, upload-time = "2025-08-29T22:41:44.364Z" },
1415
- { url = "https://files.pythonhosted.org/packages/86/7c/0d90b687d2a33fe28b201f85ddfde6b378bf41677aedbe23eb7dc79385aa/regex-2025.8.29-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e78ab1b3e68b890d7ebd69218cfbfe4a09dc00b8a47be8648510b81b932d55ff", size = 797417, upload-time = "2025-08-29T22:41:47.224Z" },
1416
- { url = "https://files.pythonhosted.org/packages/fb/67/c391c899e5ef274c4dd4ede029ffb853ddf5ba77aa251be02cfe3810574c/regex-2025.8.29-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a848368797515bc141d3fad5fd2d81bf9e8a6a22d9ac1a4be4690dd22e997854", size = 862630, upload-time = "2025-08-29T22:41:48.891Z" },
1417
- { url = "https://files.pythonhosted.org/packages/08/20/ae749a68da3496a133836c8724649bd2e004fc176c7c6647d9cb269cc975/regex-2025.8.29-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8eaf3ea6631f804efcf0f5bd0e4ab62ba984fd9b70e3aef44b05cc6b951cc728", size = 910837, upload-time = "2025-08-29T22:41:50.592Z" },
1418
- { url = "https://files.pythonhosted.org/packages/e2/80/bc4244ec79fba4185fd3a29d79f77f79b3b0dc12ee426687501b0b077e2a/regex-2025.8.29-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4561aeb36b0bf3bb44826e4b61a80c6ace0d8839bf4914d78f061f9ba61444b4", size = 801968, upload-time = "2025-08-29T22:41:54.239Z" },
1419
- { url = "https://files.pythonhosted.org/packages/ef/bd/a2d75042bb1d3c9997e22bc0051cb9791a405589d6293c874f7c2ba487e7/regex-2025.8.29-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:93e077d1fbd24033fa427eab43d80ad47e449d25700cda78e8cac821a30090bf", size = 786626, upload-time = "2025-08-29T22:41:56.158Z" },
1420
- { url = "https://files.pythonhosted.org/packages/24/ab/19cec75bf7d335cc7595d4857591455de118f6bfb563e6731c31f4fe33c3/regex-2025.8.29-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d92379e53d782bdb773988687300e3bccb91ad38157b754b04b1857aaeea16a3", size = 856532, upload-time = "2025-08-29T22:41:58.057Z" },
1421
- { url = "https://files.pythonhosted.org/packages/b6/3d/517cd0b0f4b8330164d03ef0eafdd61ee839f82b891fcd8c571d5c727117/regex-2025.8.29-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d41726de2040c2a487bbac70fdd6e3ff2f1aa47dc91f0a29f6955a6dfa0f06b6", size = 848977, upload-time = "2025-08-29T22:42:00.346Z" },
1422
- { url = "https://files.pythonhosted.org/packages/ae/fc/b57e2644d87d038d7302f359f4042bf7092bd8259a3ae999adf236e6fbc0/regex-2025.8.29-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1915dfda52bd4d466f3a66b66988db1f647ee1d9c605858640ceeb779cffd908", size = 788112, upload-time = "2025-08-29T22:42:02.008Z" },
1423
- { url = "https://files.pythonhosted.org/packages/a9/2f/70737feddbd33ec9f3f0cb8b38e7fc89304eccc80fd693d79a6f336e2282/regex-2025.8.29-cp312-cp312-win32.whl", hash = "sha256:e2ef0087ad6949918836f215480a9331f6c59ad54912a9a412f08ab1c9ccbc98", size = 264487, upload-time = "2025-08-29T22:42:04.401Z" },
1424
- { url = "https://files.pythonhosted.org/packages/2f/f5/8832d05ecc5a7f80043e7521ea55adfa2d9b9ac0e646474153e7e13722c2/regex-2025.8.29-cp312-cp312-win_amd64.whl", hash = "sha256:c15d361fe9800bf38ef69c2e0c4b8b961ae4ce2f076fcf4f28e1fc9ea127f55a", size = 275455, upload-time = "2025-08-29T22:42:06.312Z" },
1425
- { url = "https://files.pythonhosted.org/packages/a5/f9/f10ae0c4e5e22db75dda155d83056e2b70c4e87b04ad9838723ff5057e90/regex-2025.8.29-cp312-cp312-win_arm64.whl", hash = "sha256:305577fab545e64fb84d9a24269aa3132dbe05e1d7fa74b3614e93ec598fe6e6", size = 268558, upload-time = "2025-08-29T22:42:08.062Z" },
1426
- { url = "https://files.pythonhosted.org/packages/42/db/2f0e1fbca855f3c519f3f8198817d14a9569ca939bc0cc86efd4da196d3e/regex-2025.8.29-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:eed02e5c39f91268ea4ddf68ee19eed189d57c605530b7d32960f54325c52e7a", size = 485405, upload-time = "2025-08-29T22:42:10.138Z" },
1427
- { url = "https://files.pythonhosted.org/packages/15/ed/52afe839607719750acc87d144ec3db699adb9c1f40ecb6fa9f3700437b6/regex-2025.8.29-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:630d5c7e0a490db2fee3c7b282c8db973abcbb036a6e4e6dc06c4270965852be", size = 290014, upload-time = "2025-08-29T22:42:12.38Z" },
1428
- { url = "https://files.pythonhosted.org/packages/da/84/beb3becb129e41ae3e6bacd737aa751228ec0c17c707b9999648f050968c/regex-2025.8.29-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2206d3a30469e8fc8848139884168127f456efbaca8ae14809c26b98d2be15c6", size = 286059, upload-time = "2025-08-29T22:42:14.009Z" },
1429
- { url = "https://files.pythonhosted.org/packages/44/31/74476ac68cd5ed46634683cba634ab0885e917624d620c5959f67835554b/regex-2025.8.29-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:394c492c398a9f9e17545e19f770c58b97e65963eedaa25bb879e80a03e2b327", size = 797490, upload-time = "2025-08-29T22:42:15.864Z" },
1430
- { url = "https://files.pythonhosted.org/packages/3f/97/1a8d109f891c4af31f43295304a51b76bc7aef4ce6d7953e4832f86c85f0/regex-2025.8.29-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:db8b0e05af08ff38d78544950e844b5f159032b66dedda19b3f9b17297248be7", size = 862562, upload-time = "2025-08-29T22:42:17.557Z" },
1431
- { url = "https://files.pythonhosted.org/packages/1b/a8/13d6ea4b8a0c7eed0e528dcb25cbdc3bc53e26b0928dc48d6c0381516c4a/regex-2025.8.29-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd7c1821eff911917c476d41030b422791ce282c23ee9e1b8f7681fd0993f1e4", size = 910790, upload-time = "2025-08-29T22:42:19.268Z" },
1432
- { url = "https://files.pythonhosted.org/packages/10/b3/1c7320c1fdc6569a086949d2c5b7b742696098c28a6c83ca909b8d36d17b/regex-2025.8.29-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0b4d8a7f75da748a2d0c045600259f1899c9dd8dd9d3da1daa50bf534c3fa5ba", size = 802016, upload-time = "2025-08-29T22:42:21.268Z" },
1433
- { url = "https://files.pythonhosted.org/packages/7a/b5/f3613b70a569b6309cd2a61ae869407b45cff25c9734f5ff179b416e9615/regex-2025.8.29-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5cd74545c32e0da0d489c2293101a82f4a1b88050c235e45509e4123017673b2", size = 786740, upload-time = "2025-08-29T22:42:23.538Z" },
1434
- { url = "https://files.pythonhosted.org/packages/e0/8a/9f16babae23011acbd27f886c4817159508f4f3209bcfce4bc2b8f12f2ba/regex-2025.8.29-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:97b98ea38fc3c1034f3d7bd30288d2c5b3be8cdcd69e2061d1c86cb14644a27b", size = 856533, upload-time = "2025-08-29T22:42:26.055Z" },
1435
- { url = "https://files.pythonhosted.org/packages/4d/d0/adca6eec8ed79541edadecf8b512d7a3960c2ba983d2e5baf68dbddd7a90/regex-2025.8.29-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:8decb26f271b989d612c5d99db5f8f741dcd63ece51c59029840070f5f9778bf", size = 849083, upload-time = "2025-08-29T22:42:27.762Z" },
1436
- { url = "https://files.pythonhosted.org/packages/46/cc/37fddb2a17cefffb43b9dfd5f585a6cd6f90ee5b32c821886d0c0c3bc243/regex-2025.8.29-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:62141843d1ec079cd66604424af566e542e7e072b2d9e37165d414d2e6e271dd", size = 788177, upload-time = "2025-08-29T22:42:31.121Z" },
1437
- { url = "https://files.pythonhosted.org/packages/f5/ea/413fe88ce5ac2418223434aa1603d92134b74deed6007dc6e4c37d83bbcd/regex-2025.8.29-cp313-cp313-win32.whl", hash = "sha256:dd23006c90d9ff0c2e4e5f3eaf8233dcefe45684f2acb330869ec5c2aa02b1fb", size = 264473, upload-time = "2025-08-29T22:42:32.706Z" },
1438
- { url = "https://files.pythonhosted.org/packages/5a/73/d07bc1d1969e41bf1637a8aad4228da506747f4c94415ef03c534c7d68d6/regex-2025.8.29-cp313-cp313-win_amd64.whl", hash = "sha256:d41a71342819bdfe87c701f073a14ea4bd3f847333d696c7344e9ff3412b7f70", size = 275438, upload-time = "2025-08-29T22:42:34.35Z" },
1439
- { url = "https://files.pythonhosted.org/packages/86/cd/2e05fc85ebee6fe6c5073c9b0c737a473c226422d75e93903810b247a9fe/regex-2025.8.29-cp313-cp313-win_arm64.whl", hash = "sha256:54018e66344d60b214f4aa151c046e0fa528221656f4f7eba5a787ccc7057312", size = 268553, upload-time = "2025-08-29T22:42:35.874Z" },
1440
- { url = "https://files.pythonhosted.org/packages/2e/2d/2aa4b98231017994ea52d05c13997778af415f5d7faa7f90988a640dac44/regex-2025.8.29-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:c03308757831a8d89e7c007abb75d1d4c9fbca003b5fb32755d4475914535f08", size = 485447, upload-time = "2025-08-29T22:42:37.429Z" },
1441
- { url = "https://files.pythonhosted.org/packages/b7/b4/ed3241bb99a0783fe650d8511924c7c43f704b720fab3e353393bea8c96a/regex-2025.8.29-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:0d4b71791975fc203e0e6c50db974abb23a8df30729c1ac4fd68c9f2bb8c9358", size = 289862, upload-time = "2025-08-29T22:42:39.71Z" },
1442
- { url = "https://files.pythonhosted.org/packages/ba/f6/5237a7d0b2bd64bb216d06470549bc4cc33de57033772e3018708636a027/regex-2025.8.29-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:284fcd2dcb613e8b89b22a30cf42998c9a73ee360b8a24db8457d24f5c42282e", size = 286211, upload-time = "2025-08-29T22:42:41.266Z" },
1443
- { url = "https://files.pythonhosted.org/packages/58/eb/05568fdc4028d1b339fb950fe6b92ade2613edd6423291939c8e29b21e8a/regex-2025.8.29-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b394b5157701b22cf63699c792bfeed65fbfeacbd94fea717a9e2036a51148ab", size = 797826, upload-time = "2025-08-29T22:42:42.911Z" },
1444
- { url = "https://files.pythonhosted.org/packages/3d/2a/a3c1c209faa1f6a218e64c5a235e06f6f36c45b5aa924c6bf75241a996f7/regex-2025.8.29-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ea197ac22396faf5e70c87836bb89f94ed5b500e1b407646a4e5f393239611f1", size = 863338, upload-time = "2025-08-29T22:42:44.831Z" },
1445
- { url = "https://files.pythonhosted.org/packages/dd/66/5e96f217662387742c0d9732e97129850bd3243e019309c1fbdcd62b5421/regex-2025.8.29-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:decd84f195c08b3d9d0297a7e310379aae13ca7e166473534508c81b95c74bba", size = 910176, upload-time = "2025-08-29T22:42:46.997Z" },
1446
- { url = "https://files.pythonhosted.org/packages/fc/f2/975e77333267f9652bc2cc926382d8c9d86683eb84d1989459e644ac818b/regex-2025.8.29-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ebaf81f7344dbf1a2b383e35923648de8f78fb262cf04154c82853887ac3e684", size = 801784, upload-time = "2025-08-29T22:42:48.786Z" },
1447
- { url = "https://files.pythonhosted.org/packages/75/d9/b25dbf9729b5a5958a804e91b376fe8e829ec10c0d7edb4b1ad91070132b/regex-2025.8.29-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d82fb8a97e5ed8f1d3ed7f8e0e7fe1760faa95846c0d38b314284dfdbe86b229", size = 786799, upload-time = "2025-08-29T22:42:50.868Z" },
1448
- { url = "https://files.pythonhosted.org/packages/1d/0a/7f8de7ea41d7a3a21dfcb9dcea7b727fdde9e35d74a23e16ef5edcd68005/regex-2025.8.29-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:1dcec2448ed0062f63e82ca02d1d05f74d4127cb6a9d76a73df60e81298d380b", size = 857380, upload-time = "2025-08-29T22:42:52.992Z" },
1449
- { url = "https://files.pythonhosted.org/packages/f8/40/494600424c394a507070b41fc0666ceaa7dccf62c3220a76833eb11de647/regex-2025.8.29-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d0ffe4a3257a235f9d39b99c6f1bc53c7a4b11f28565726b1aa00a5787950d60", size = 848570, upload-time = "2025-08-29T22:42:54.857Z" },
1450
- { url = "https://files.pythonhosted.org/packages/be/d0/6988feb7c15bb3df7b944a10b3b58fb238c94987c70a991ba87e3685e1cd/regex-2025.8.29-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5421a2d2026e8189500f12375cfd80a9a1914466d446edd28b37eb33c1953b39", size = 787926, upload-time = "2025-08-29T22:42:57.025Z" },
1451
- { url = "https://files.pythonhosted.org/packages/98/16/d719b131b0577a2a975376b3e673fc7f89b9998d54753f0419d59d33b3a1/regex-2025.8.29-cp314-cp314-win32.whl", hash = "sha256:ceeeaab602978c8eac3b25b8707f21a69c0bcd179d9af72519da93ef3966158f", size = 269805, upload-time = "2025-08-29T22:42:59.241Z" },
1452
- { url = "https://files.pythonhosted.org/packages/a5/b7/50d3bb5df25ae73e7aee186a2f1e4f1ed5e4d54006bdf5abd558c1ce9e7a/regex-2025.8.29-cp314-cp314-win_amd64.whl", hash = "sha256:5ba4f8b0d5b88c33fe4060e6def58001fd8334b03c7ce2126964fa8851ab5d1b", size = 278710, upload-time = "2025-08-29T22:43:00.84Z" },
1453
- { url = "https://files.pythonhosted.org/packages/0f/34/c723ebe214c33000b53e0eebdc63ad3697d5611c7fa9b388eef2113a5e82/regex-2025.8.29-cp314-cp314-win_arm64.whl", hash = "sha256:7b4a3dc155984f09a55c64b90923cb136cd0dad21ca0168aba2382d90ea4c546", size = 271832, upload-time = "2025-08-29T22:43:02.777Z" },
1379
+ version = "2025.9.1"
1380
+ source = { registry = "https://pypi.org/simple" }
1381
+ sdist = { url = "https://files.pythonhosted.org/packages/b2/5a/4c63457fbcaf19d138d72b2e9b39405954f98c0349b31c601bfcb151582c/regex-2025.9.1.tar.gz", hash = "sha256:88ac07b38d20b54d79e704e38aa3bd2c0f8027432164226bdee201a1c0c9c9ff", size = 400852, upload-time = "2025-09-01T22:10:10.479Z" }
1382
+ wheels = [
1383
+ { url = "https://files.pythonhosted.org/packages/46/c1/ed9ef923156105a78aa004f9390e5dd87eadc29f5ca8840f172cadb638de/regex-2025.9.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c5aa2a6a73bf218515484b36a0d20c6ad9dc63f6339ff6224147b0e2c095ee55", size = 484813, upload-time = "2025-09-01T22:07:45.528Z" },
1384
+ { url = "https://files.pythonhosted.org/packages/05/de/97957618a774c67f892609eee2fafe3e30703fbbba66de5e6b79d7196dbc/regex-2025.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c2ff5c01d5e47ad5fc9d31bcd61e78c2fa0068ed00cab86b7320214446da766", size = 288981, upload-time = "2025-09-01T22:07:48.464Z" },
1385
+ { url = "https://files.pythonhosted.org/packages/3c/b0/441afadd0a6ffccbd58a9663e5bdd182daa237893e5f8ceec6ff9df4418a/regex-2025.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d49dc84e796b666181de8a9973284cad6616335f01b52bf099643253094920fc", size = 286608, upload-time = "2025-09-01T22:07:50.484Z" },
1386
+ { url = "https://files.pythonhosted.org/packages/6e/cf/d89aecaf17e999ab11a3ef73fc9ab8b64f4e156f121250ef84340b35338d/regex-2025.9.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9914fe1040874f83c15fcea86d94ea54091b0666eab330aaab69e30d106aabe", size = 780459, upload-time = "2025-09-01T22:07:52.34Z" },
1387
+ { url = "https://files.pythonhosted.org/packages/f6/05/05884594a9975a29597917bbdd6837f7b97e8ac23faf22d628aa781e58f7/regex-2025.9.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e71bceb3947362ec5eabd2ca0870bb78eae4edfc60c6c21495133c01b6cd2df4", size = 849276, upload-time = "2025-09-01T22:07:54.591Z" },
1388
+ { url = "https://files.pythonhosted.org/packages/8c/8d/2b3067506838d02096bf107beb129b2ce328cdf776d6474b7f542c0a7bfd/regex-2025.9.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:67a74456f410fe5e869239ee7a5423510fe5121549af133809d9591a8075893f", size = 897320, upload-time = "2025-09-01T22:07:56.129Z" },
1389
+ { url = "https://files.pythonhosted.org/packages/9e/b3/0f9f7766e980b900df0ba9901b52871a2e4203698fb35cdebd219240d5f7/regex-2025.9.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5c3b96ed0223b32dbdc53a83149b6de7ca3acd5acd9c8e64b42a166228abe29c", size = 789931, upload-time = "2025-09-01T22:07:57.834Z" },
1390
+ { url = "https://files.pythonhosted.org/packages/47/9f/7b2f29c8f8b698eb44be5fc68e8b9c8d32e99635eac5defc98de114e9f35/regex-2025.9.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:113d5aa950f428faf46fd77d452df62ebb4cc6531cb619f6cc30a369d326bfbd", size = 780764, upload-time = "2025-09-01T22:07:59.413Z" },
1391
+ { url = "https://files.pythonhosted.org/packages/ac/ac/56176caa86155c14462531eb0a4ddc450d17ba8875001122b3b7c0cb01bf/regex-2025.9.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fcdeb38de4f7f3d69d798f4f371189061446792a84e7c92b50054c87aae9c07c", size = 773610, upload-time = "2025-09-01T22:08:01.042Z" },
1392
+ { url = "https://files.pythonhosted.org/packages/39/e8/9d6b9bd43998268a9de2f35602077519cacc9cb149f7381758cf8f502ba7/regex-2025.9.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4bcdff370509164b67a6c8ec23c9fb40797b72a014766fdc159bb809bd74f7d8", size = 844090, upload-time = "2025-09-01T22:08:02.94Z" },
1393
+ { url = "https://files.pythonhosted.org/packages/fd/92/d89743b089005cae4cb81cc2fe177e180b7452e60f29de53af34349640f8/regex-2025.9.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:7383efdf6e8e8c61d85e00cfb2e2e18da1a621b8bfb4b0f1c2747db57b942b8f", size = 834775, upload-time = "2025-09-01T22:08:04.781Z" },
1394
+ { url = "https://files.pythonhosted.org/packages/01/8f/86a3e0aaa89295d2a3445bb238e56369963ef6b02a5b4aa3362f4e687413/regex-2025.9.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1ec2bd3bdf0f73f7e9f48dca550ba7d973692d5e5e9a90ac42cc5f16c4432d8b", size = 778521, upload-time = "2025-09-01T22:08:06.596Z" },
1395
+ { url = "https://files.pythonhosted.org/packages/3e/df/72072acb370ee8577c255717f8a58264f1d0de40aa3c9e6ebd5271cac633/regex-2025.9.1-cp310-cp310-win32.whl", hash = "sha256:9627e887116c4e9c0986d5c3b4f52bcfe3df09850b704f62ec3cbf177a0ae374", size = 264105, upload-time = "2025-09-01T22:08:08.708Z" },
1396
+ { url = "https://files.pythonhosted.org/packages/97/73/fb82faaf0375aeaa1bb675008246c79b6779fa5688585a35327610ea0e2e/regex-2025.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:94533e32dc0065eca43912ee6649c90ea0681d59f56d43c45b5bcda9a740b3dd", size = 276131, upload-time = "2025-09-01T22:08:10.156Z" },
1397
+ { url = "https://files.pythonhosted.org/packages/d3/3a/77d7718a2493e54725494f44da1a1e55704743dc4b8fabe5b0596f7b8014/regex-2025.9.1-cp310-cp310-win_arm64.whl", hash = "sha256:a874a61bb580d48642ffd338570ee24ab13fa023779190513fcacad104a6e251", size = 268462, upload-time = "2025-09-01T22:08:11.651Z" },
1398
+ { url = "https://files.pythonhosted.org/packages/06/4d/f741543c0c59f96c6625bc6c11fea1da2e378b7d293ffff6f318edc0ce14/regex-2025.9.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e5bcf112b09bfd3646e4db6bf2e598534a17d502b0c01ea6550ba4eca780c5e6", size = 484811, upload-time = "2025-09-01T22:08:12.834Z" },
1399
+ { url = "https://files.pythonhosted.org/packages/c2/bd/27e73e92635b6fbd51afc26a414a3133243c662949cd1cda677fe7bb09bd/regex-2025.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:67a0295a3c31d675a9ee0238d20238ff10a9a2fdb7a1323c798fc7029578b15c", size = 288977, upload-time = "2025-09-01T22:08:14.499Z" },
1400
+ { url = "https://files.pythonhosted.org/packages/eb/7d/7dc0c6efc8bc93cd6e9b947581f5fde8a5dbaa0af7c4ec818c5729fdc807/regex-2025.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea8267fbadc7d4bd7c1301a50e85c2ff0de293ff9452a1a9f8d82c6cafe38179", size = 286606, upload-time = "2025-09-01T22:08:15.881Z" },
1401
+ { url = "https://files.pythonhosted.org/packages/d1/01/9b5c6dd394f97c8f2c12f6e8f96879c9ac27292a718903faf2e27a0c09f6/regex-2025.9.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6aeff21de7214d15e928fb5ce757f9495214367ba62875100d4c18d293750cc1", size = 792436, upload-time = "2025-09-01T22:08:17.38Z" },
1402
+ { url = "https://files.pythonhosted.org/packages/fc/24/b7430cfc6ee34bbb3db6ff933beb5e7692e5cc81e8f6f4da63d353566fb0/regex-2025.9.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d89f1bbbbbc0885e1c230f7770d5e98f4f00b0ee85688c871d10df8b184a6323", size = 858705, upload-time = "2025-09-01T22:08:19.037Z" },
1403
+ { url = "https://files.pythonhosted.org/packages/d6/98/155f914b4ea6ae012663188545c4f5216c11926d09b817127639d618b003/regex-2025.9.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ca3affe8ddea498ba9d294ab05f5f2d3b5ad5d515bc0d4a9016dd592a03afe52", size = 905881, upload-time = "2025-09-01T22:08:20.377Z" },
1404
+ { url = "https://files.pythonhosted.org/packages/8a/a7/a470e7bc8259c40429afb6d6a517b40c03f2f3e455c44a01abc483a1c512/regex-2025.9.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:91892a7a9f0a980e4c2c85dd19bc14de2b219a3a8867c4b5664b9f972dcc0c78", size = 798968, upload-time = "2025-09-01T22:08:22.081Z" },
1405
+ { url = "https://files.pythonhosted.org/packages/1d/fa/33f6fec4d41449fea5f62fdf5e46d668a1c046730a7f4ed9f478331a8e3a/regex-2025.9.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e1cb40406f4ae862710615f9f636c1e030fd6e6abe0e0f65f6a695a2721440c6", size = 781884, upload-time = "2025-09-01T22:08:23.832Z" },
1406
+ { url = "https://files.pythonhosted.org/packages/42/de/2b45f36ab20da14eedddf5009d370625bc5942d9953fa7e5037a32d66843/regex-2025.9.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:94f6cff6f7e2149c7e6499a6ecd4695379eeda8ccbccb9726e8149f2fe382e92", size = 852935, upload-time = "2025-09-01T22:08:25.536Z" },
1407
+ { url = "https://files.pythonhosted.org/packages/1e/f9/878f4fc92c87e125e27aed0f8ee0d1eced9b541f404b048f66f79914475a/regex-2025.9.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:6c0226fb322b82709e78c49cc33484206647f8a39954d7e9de1567f5399becd0", size = 844340, upload-time = "2025-09-01T22:08:27.141Z" },
1408
+ { url = "https://files.pythonhosted.org/packages/90/c2/5b6f2bce6ece5f8427c718c085eca0de4bbb4db59f54db77aa6557aef3e9/regex-2025.9.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a12f59c7c380b4fcf7516e9cbb126f95b7a9518902bcf4a852423ff1dcd03e6a", size = 787238, upload-time = "2025-09-01T22:08:28.75Z" },
1409
+ { url = "https://files.pythonhosted.org/packages/47/66/1ef1081c831c5b611f6f55f6302166cfa1bc9574017410ba5595353f846a/regex-2025.9.1-cp311-cp311-win32.whl", hash = "sha256:49865e78d147a7a4f143064488da5d549be6bfc3f2579e5044cac61f5c92edd4", size = 264118, upload-time = "2025-09-01T22:08:30.388Z" },
1410
+ { url = "https://files.pythonhosted.org/packages/ad/e0/8adc550d7169df1d6b9be8ff6019cda5291054a0107760c2f30788b6195f/regex-2025.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:d34b901f6f2f02ef60f4ad3855d3a02378c65b094efc4b80388a3aeb700a5de7", size = 276151, upload-time = "2025-09-01T22:08:32.073Z" },
1411
+ { url = "https://files.pythonhosted.org/packages/cb/bd/46fef29341396d955066e55384fb93b0be7d64693842bf4a9a398db6e555/regex-2025.9.1-cp311-cp311-win_arm64.whl", hash = "sha256:47d7c2dab7e0b95b95fd580087b6ae196039d62306a592fa4e162e49004b6299", size = 268460, upload-time = "2025-09-01T22:08:33.281Z" },
1412
+ { url = "https://files.pythonhosted.org/packages/39/ef/a0372febc5a1d44c1be75f35d7e5aff40c659ecde864d7fa10e138f75e74/regex-2025.9.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:84a25164bd8dcfa9f11c53f561ae9766e506e580b70279d05a7946510bdd6f6a", size = 486317, upload-time = "2025-09-01T22:08:34.529Z" },
1413
+ { url = "https://files.pythonhosted.org/packages/b5/25/d64543fb7eb41a1024786d518cc57faf1ce64aa6e9ddba097675a0c2f1d2/regex-2025.9.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:645e88a73861c64c1af558dd12294fb4e67b5c1eae0096a60d7d8a2143a611c7", size = 289698, upload-time = "2025-09-01T22:08:36.162Z" },
1414
+ { url = "https://files.pythonhosted.org/packages/d8/dc/fbf31fc60be317bd9f6f87daa40a8a9669b3b392aa8fe4313df0a39d0722/regex-2025.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:10a450cba5cd5409526ee1d4449f42aad38dd83ac6948cbd6d7f71ca7018f7db", size = 287242, upload-time = "2025-09-01T22:08:37.794Z" },
1415
+ { url = "https://files.pythonhosted.org/packages/0f/74/f933a607a538f785da5021acf5323961b4620972e2c2f1f39b6af4b71db7/regex-2025.9.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9dc5991592933a4192c166eeb67b29d9234f9c86344481173d1bc52f73a7104", size = 797441, upload-time = "2025-09-01T22:08:39.108Z" },
1416
+ { url = "https://files.pythonhosted.org/packages/89/d0/71fc49b4f20e31e97f199348b8c4d6e613e7b6a54a90eb1b090c2b8496d7/regex-2025.9.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a32291add816961aab472f4fad344c92871a2ee33c6c219b6598e98c1f0108f2", size = 862654, upload-time = "2025-09-01T22:08:40.586Z" },
1417
+ { url = "https://files.pythonhosted.org/packages/59/05/984edce1411a5685ba9abbe10d42cdd9450aab4a022271f9585539788150/regex-2025.9.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:588c161a68a383478e27442a678e3b197b13c5ba51dbba40c1ccb8c4c7bee9e9", size = 910862, upload-time = "2025-09-01T22:08:42.416Z" },
1418
+ { url = "https://files.pythonhosted.org/packages/b2/02/5c891bb5fe0691cc1bad336e3a94b9097fbcf9707ec8ddc1dce9f0397289/regex-2025.9.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:47829ffaf652f30d579534da9085fe30c171fa2a6744a93d52ef7195dc38218b", size = 801991, upload-time = "2025-09-01T22:08:44.072Z" },
1419
+ { url = "https://files.pythonhosted.org/packages/f1/ae/fd10d6ad179910f7a1b3e0a7fde1ef8bb65e738e8ac4fd6ecff3f52252e4/regex-2025.9.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e978e5a35b293ea43f140c92a3269b6ab13fe0a2bf8a881f7ac740f5a6ade85", size = 786651, upload-time = "2025-09-01T22:08:46.079Z" },
1420
+ { url = "https://files.pythonhosted.org/packages/30/cf/9d686b07bbc5bf94c879cc168db92542d6bc9fb67088d03479fef09ba9d3/regex-2025.9.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4cf09903e72411f4bf3ac1eddd624ecfd423f14b2e4bf1c8b547b72f248b7bf7", size = 856556, upload-time = "2025-09-01T22:08:48.376Z" },
1421
+ { url = "https://files.pythonhosted.org/packages/91/9d/302f8a29bb8a49528abbab2d357a793e2a59b645c54deae0050f8474785b/regex-2025.9.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d016b0f77be63e49613c9e26aaf4a242f196cd3d7a4f15898f5f0ab55c9b24d2", size = 849001, upload-time = "2025-09-01T22:08:50.067Z" },
1422
+ { url = "https://files.pythonhosted.org/packages/93/fa/b4c6dbdedc85ef4caec54c817cd5f4418dbfa2453214119f2538082bf666/regex-2025.9.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:656563e620de6908cd1c9d4f7b9e0777e3341ca7db9d4383bcaa44709c90281e", size = 788138, upload-time = "2025-09-01T22:08:51.933Z" },
1423
+ { url = "https://files.pythonhosted.org/packages/4a/1b/91ee17a3cbf87f81e8c110399279d0e57f33405468f6e70809100f2ff7d8/regex-2025.9.1-cp312-cp312-win32.whl", hash = "sha256:df33f4ef07b68f7ab637b1dbd70accbf42ef0021c201660656601e8a9835de45", size = 264524, upload-time = "2025-09-01T22:08:53.75Z" },
1424
+ { url = "https://files.pythonhosted.org/packages/92/28/6ba31cce05b0f1ec6b787921903f83bd0acf8efde55219435572af83c350/regex-2025.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:5aba22dfbc60cda7c0853516104724dc904caa2db55f2c3e6e984eb858d3edf3", size = 275489, upload-time = "2025-09-01T22:08:55.037Z" },
1425
+ { url = "https://files.pythonhosted.org/packages/bd/ed/ea49f324db00196e9ef7fe00dd13c6164d5173dd0f1bbe495e61bb1fb09d/regex-2025.9.1-cp312-cp312-win_arm64.whl", hash = "sha256:ec1efb4c25e1849c2685fa95da44bfde1b28c62d356f9c8d861d4dad89ed56e9", size = 268589, upload-time = "2025-09-01T22:08:56.369Z" },
1426
+ { url = "https://files.pythonhosted.org/packages/98/25/b2959ce90c6138c5142fe5264ee1f9b71a0c502ca4c7959302a749407c79/regex-2025.9.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bc6834727d1b98d710a63e6c823edf6ffbf5792eba35d3fa119531349d4142ef", size = 485932, upload-time = "2025-09-01T22:08:57.913Z" },
1427
+ { url = "https://files.pythonhosted.org/packages/49/2e/6507a2a85f3f2be6643438b7bd976e67ad73223692d6988eb1ff444106d3/regex-2025.9.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c3dc05b6d579875719bccc5f3037b4dc80433d64e94681a0061845bd8863c025", size = 289568, upload-time = "2025-09-01T22:08:59.258Z" },
1428
+ { url = "https://files.pythonhosted.org/packages/c7/d8/de4a4b57215d99868f1640e062a7907e185ec7476b4b689e2345487c1ff4/regex-2025.9.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:22213527df4c985ec4a729b055a8306272d41d2f45908d7bacb79be0fa7a75ad", size = 286984, upload-time = "2025-09-01T22:09:00.835Z" },
1429
+ { url = "https://files.pythonhosted.org/packages/03/15/e8cb403403a57ed316e80661db0e54d7aa2efcd85cb6156f33cc18746922/regex-2025.9.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8e3f6e3c5a5a1adc3f7ea1b5aec89abfc2f4fbfba55dafb4343cd1d084f715b2", size = 797514, upload-time = "2025-09-01T22:09:02.538Z" },
1430
+ { url = "https://files.pythonhosted.org/packages/e4/26/2446f2b9585fed61faaa7e2bbce3aca7dd8df6554c32addee4c4caecf24a/regex-2025.9.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bcb89c02a0d6c2bec9b0bb2d8c78782699afe8434493bfa6b4021cc51503f249", size = 862586, upload-time = "2025-09-01T22:09:04.322Z" },
1431
+ { url = "https://files.pythonhosted.org/packages/fd/b8/82ffbe9c0992c31bbe6ae1c4b4e21269a5df2559102b90543c9b56724c3c/regex-2025.9.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b0e2f95413eb0c651cd1516a670036315b91b71767af83bc8525350d4375ccba", size = 910815, upload-time = "2025-09-01T22:09:05.978Z" },
1432
+ { url = "https://files.pythonhosted.org/packages/2f/d8/7303ea38911759c1ee30cc5bc623ee85d3196b733c51fd6703c34290a8d9/regex-2025.9.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:09a41dc039e1c97d3c2ed3e26523f748e58c4de3ea7a31f95e1cf9ff973fff5a", size = 802042, upload-time = "2025-09-01T22:09:07.865Z" },
1433
+ { url = "https://files.pythonhosted.org/packages/fc/0e/6ad51a55ed4b5af512bb3299a05d33309bda1c1d1e1808fa869a0bed31bc/regex-2025.9.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f0b4258b161094f66857a26ee938d3fe7b8a5063861e44571215c44fbf0e5df", size = 786764, upload-time = "2025-09-01T22:09:09.362Z" },
1434
+ { url = "https://files.pythonhosted.org/packages/8d/d5/394e3ffae6baa5a9217bbd14d96e0e5da47bb069d0dbb8278e2681a2b938/regex-2025.9.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bf70e18ac390e6977ea7e56f921768002cb0fa359c4199606c7219854ae332e0", size = 856557, upload-time = "2025-09-01T22:09:11.129Z" },
1435
+ { url = "https://files.pythonhosted.org/packages/cd/80/b288d3910c41194ad081b9fb4b371b76b0bbfdce93e7709fc98df27b37dc/regex-2025.9.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b84036511e1d2bb0a4ff1aec26951caa2dea8772b223c9e8a19ed8885b32dbac", size = 849108, upload-time = "2025-09-01T22:09:12.877Z" },
1436
+ { url = "https://files.pythonhosted.org/packages/d1/cd/5ec76bf626d0d5abdc277b7a1734696f5f3d14fbb4a3e2540665bc305d85/regex-2025.9.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c2e05dcdfe224047f2a59e70408274c325d019aad96227ab959403ba7d58d2d7", size = 788201, upload-time = "2025-09-01T22:09:14.561Z" },
1437
+ { url = "https://files.pythonhosted.org/packages/b5/36/674672f3fdead107565a2499f3007788b878188acec6d42bc141c5366c2c/regex-2025.9.1-cp313-cp313-win32.whl", hash = "sha256:3b9a62107a7441b81ca98261808fed30ae36ba06c8b7ee435308806bd53c1ed8", size = 264508, upload-time = "2025-09-01T22:09:16.193Z" },
1438
+ { url = "https://files.pythonhosted.org/packages/83/ad/931134539515eb64ce36c24457a98b83c1b2e2d45adf3254b94df3735a76/regex-2025.9.1-cp313-cp313-win_amd64.whl", hash = "sha256:b38afecc10c177eb34cfae68d669d5161880849ba70c05cbfbe409f08cc939d7", size = 275469, upload-time = "2025-09-01T22:09:17.462Z" },
1439
+ { url = "https://files.pythonhosted.org/packages/24/8c/96d34e61c0e4e9248836bf86d69cb224fd222f270fa9045b24e218b65604/regex-2025.9.1-cp313-cp313-win_arm64.whl", hash = "sha256:ec329890ad5e7ed9fc292858554d28d58d56bf62cf964faf0aa57964b21155a0", size = 268586, upload-time = "2025-09-01T22:09:18.948Z" },
1440
+ { url = "https://files.pythonhosted.org/packages/21/b1/453cbea5323b049181ec6344a803777914074b9726c9c5dc76749966d12d/regex-2025.9.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:72fb7a016467d364546f22b5ae86c45680a4e0de6b2a6f67441d22172ff641f1", size = 486111, upload-time = "2025-09-01T22:09:20.734Z" },
1441
+ { url = "https://files.pythonhosted.org/packages/f6/0e/92577f197bd2f7652c5e2857f399936c1876978474ecc5b068c6d8a79c86/regex-2025.9.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c9527fa74eba53f98ad86be2ba003b3ebe97e94b6eb2b916b31b5f055622ef03", size = 289520, upload-time = "2025-09-01T22:09:22.249Z" },
1442
+ { url = "https://files.pythonhosted.org/packages/af/c6/b472398116cca7ea5a6c4d5ccd0fc543f7fd2492cb0c48d2852a11972f73/regex-2025.9.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c905d925d194c83a63f92422af7544ec188301451b292c8b487f0543726107ca", size = 287215, upload-time = "2025-09-01T22:09:23.657Z" },
1443
+ { url = "https://files.pythonhosted.org/packages/cf/11/f12ecb0cf9ca792a32bb92f758589a84149017467a544f2f6bfb45c0356d/regex-2025.9.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:74df7c74a63adcad314426b1f4ea6054a5ab25d05b0244f0c07ff9ce640fa597", size = 797855, upload-time = "2025-09-01T22:09:25.197Z" },
1444
+ { url = "https://files.pythonhosted.org/packages/46/88/bbb848f719a540fb5997e71310f16f0b33a92c5d4b4d72d4311487fff2a3/regex-2025.9.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4f6e935e98ea48c7a2e8be44494de337b57a204470e7f9c9c42f912c414cd6f5", size = 863363, upload-time = "2025-09-01T22:09:26.705Z" },
1445
+ { url = "https://files.pythonhosted.org/packages/54/a9/2321eb3e2838f575a78d48e03c1e83ea61bd08b74b7ebbdeca8abc50fc25/regex-2025.9.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4a62d033cd9ebefc7c5e466731a508dfabee827d80b13f455de68a50d3c2543d", size = 910202, upload-time = "2025-09-01T22:09:28.906Z" },
1446
+ { url = "https://files.pythonhosted.org/packages/33/07/d1d70835d7d11b7e126181f316f7213c4572ecf5c5c97bdbb969fb1f38a2/regex-2025.9.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef971ebf2b93bdc88d8337238be4dfb851cc97ed6808eb04870ef67589415171", size = 801808, upload-time = "2025-09-01T22:09:30.733Z" },
1447
+ { url = "https://files.pythonhosted.org/packages/13/d1/29e4d1bed514ef2bf3a4ead3cb8bb88ca8af94130239a4e68aa765c35b1c/regex-2025.9.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d936a1db208bdca0eca1f2bb2c1ba1d8370b226785c1e6db76e32a228ffd0ad5", size = 786824, upload-time = "2025-09-01T22:09:32.61Z" },
1448
+ { url = "https://files.pythonhosted.org/packages/33/27/20d8ccb1bee460faaa851e6e7cc4cfe852a42b70caa1dca22721ba19f02f/regex-2025.9.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:7e786d9e4469698fc63815b8de08a89165a0aa851720eb99f5e0ea9d51dd2b6a", size = 857406, upload-time = "2025-09-01T22:09:34.117Z" },
1449
+ { url = "https://files.pythonhosted.org/packages/74/fe/60c6132262dc36430d51e0c46c49927d113d3a38c1aba6a26c7744c84cf3/regex-2025.9.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:6b81d7dbc5466ad2c57ce3a0ddb717858fe1a29535c8866f8514d785fdb9fc5b", size = 848593, upload-time = "2025-09-01T22:09:35.598Z" },
1450
+ { url = "https://files.pythonhosted.org/packages/cc/ae/2d4ff915622fabbef1af28387bf71e7f2f4944a348b8460d061e85e29bf0/regex-2025.9.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cd4890e184a6feb0ef195338a6ce68906a8903a0f2eb7e0ab727dbc0a3156273", size = 787951, upload-time = "2025-09-01T22:09:37.139Z" },
1451
+ { url = "https://files.pythonhosted.org/packages/85/37/dc127703a9e715a284cc2f7dbdd8a9776fd813c85c126eddbcbdd1ca5fec/regex-2025.9.1-cp314-cp314-win32.whl", hash = "sha256:34679a86230e46164c9e0396b56cab13c0505972343880b9e705083cc5b8ec86", size = 269833, upload-time = "2025-09-01T22:09:39.245Z" },
1452
+ { url = "https://files.pythonhosted.org/packages/83/bf/4bed4d3d0570e16771defd5f8f15f7ea2311edcbe91077436d6908956c4a/regex-2025.9.1-cp314-cp314-win_amd64.whl", hash = "sha256:a1196e530a6bfa5f4bde029ac5b0295a6ecfaaffbfffede4bbaf4061d9455b70", size = 278742, upload-time = "2025-09-01T22:09:40.651Z" },
1453
+ { url = "https://files.pythonhosted.org/packages/cf/3e/7d7ac6fd085023312421e0d69dfabdfb28e116e513fadbe9afe710c01893/regex-2025.9.1-cp314-cp314-win_arm64.whl", hash = "sha256:f46d525934871ea772930e997d577d48c6983e50f206ff7b66d4ac5f8941e993", size = 271860, upload-time = "2025-09-01T22:09:42.413Z" },
1454
1454
  ]
1455
1455
 
1456
1456
  [[package]]
File without changes
File without changes
File without changes
File without changes
File without changes