acp-sdk 0.0.4__tar.gz → 0.0.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.
Files changed (147) hide show
  1. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/PKG-INFO +1 -1
  2. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/pyproject.toml +1 -1
  3. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/lowlevel/server.py +7 -3
  4. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/session.py +1 -1
  5. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/shared/session.py +17 -13
  6. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  7. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  8. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/.github/workflows/check-lock.yml +0 -0
  9. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/.github/workflows/main-checks.yml +0 -0
  10. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/.github/workflows/publish-pypi.yml +0 -0
  11. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/.github/workflows/pull-request-checks.yml +0 -0
  12. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/.github/workflows/shared.yml +0 -0
  13. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/.gitignore +0 -0
  14. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/.pre-commit-config.yaml +0 -0
  15. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/CLAUDE.md +0 -0
  16. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/CODE_OF_CONDUCT.md +0 -0
  17. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/CONTRIBUTING.md +0 -0
  18. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/LICENSE +0 -0
  19. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/README.md +0 -0
  20. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/RELEASE.md +0 -0
  21. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/SECURITY.md +0 -0
  22. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/README.md +0 -0
  23. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/clients/simple-chatbot/.python-version +0 -0
  24. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/clients/simple-chatbot/README.MD +0 -0
  25. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/clients/simple-chatbot/mcp_simple_chatbot/.env.example +0 -0
  26. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/clients/simple-chatbot/mcp_simple_chatbot/main.py +0 -0
  27. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/clients/simple-chatbot/mcp_simple_chatbot/requirements.txt +0 -0
  28. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/clients/simple-chatbot/mcp_simple_chatbot/servers_config.json +0 -0
  29. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/clients/simple-chatbot/mcp_simple_chatbot/test.db +0 -0
  30. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/clients/simple-chatbot/pyproject.toml +0 -0
  31. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/clients/simple-chatbot/uv.lock +0 -0
  32. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/highlevel/agents.py +0 -0
  33. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/highlevel/complex_inputs.py +0 -0
  34. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/highlevel/desktop.py +0 -0
  35. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/highlevel/echo.py +0 -0
  36. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/highlevel/memory.py +0 -0
  37. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/highlevel/parameter_descriptions.py +0 -0
  38. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/highlevel/readme-quickstart.py +0 -0
  39. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/highlevel/screenshot.py +0 -0
  40. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/highlevel/simple_echo.py +0 -0
  41. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/highlevel/text_me.py +0 -0
  42. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/highlevel/unicode_example.py +0 -0
  43. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-prompt/.python-version +0 -0
  44. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-prompt/README.md +0 -0
  45. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-prompt/mcp_simple_prompt/__init__.py +0 -0
  46. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-prompt/mcp_simple_prompt/__main__.py +0 -0
  47. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-prompt/mcp_simple_prompt/server.py +0 -0
  48. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-prompt/pyproject.toml +0 -0
  49. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-resource/.python-version +0 -0
  50. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-resource/README.md +0 -0
  51. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-resource/mcp_simple_resource/__init__.py +0 -0
  52. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-resource/mcp_simple_resource/__main__.py +0 -0
  53. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-resource/mcp_simple_resource/server.py +0 -0
  54. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-resource/pyproject.toml +0 -0
  55. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-tool/.python-version +0 -0
  56. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-tool/README.md +0 -0
  57. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-tool/mcp_simple_tool/__init__.py +0 -0
  58. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-tool/mcp_simple_tool/__main__.py +0 -0
  59. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-tool/mcp_simple_tool/server.py +0 -0
  60. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/examples/servers/simple-tool/pyproject.toml +0 -0
  61. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/__init__.py +0 -0
  62. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/cli/__init__.py +0 -0
  63. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/cli/claude.py +0 -0
  64. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/cli/cli.py +0 -0
  65. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/client/__init__.py +0 -0
  66. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/client/__main__.py +0 -0
  67. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/client/session.py +0 -0
  68. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/client/sse.py +0 -0
  69. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/client/stdio.py +0 -0
  70. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/py.typed +0 -0
  71. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/__init__.py +0 -0
  72. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/__main__.py +0 -0
  73. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/__init__.py +0 -0
  74. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/agents/__init__.py +0 -0
  75. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/agents/agent_manager.py +0 -0
  76. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/agents/base.py +0 -0
  77. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/agents/templates.py +0 -0
  78. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/context.py +0 -0
  79. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/exceptions.py +0 -0
  80. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/prompts/__init__.py +0 -0
  81. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/prompts/base.py +0 -0
  82. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/prompts/manager.py +0 -0
  83. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/prompts/prompt_manager.py +0 -0
  84. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/resources/__init__.py +0 -0
  85. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/resources/base.py +0 -0
  86. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/resources/resource_manager.py +0 -0
  87. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/resources/templates.py +0 -0
  88. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/resources/types.py +0 -0
  89. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/server.py +0 -0
  90. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/tools/__init__.py +0 -0
  91. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/tools/base.py +0 -0
  92. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/tools/tool_manager.py +0 -0
  93. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/utilities/__init__.py +0 -0
  94. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/utilities/func_metadata.py +0 -0
  95. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/utilities/logging.py +0 -0
  96. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/highlevel/utilities/types.py +0 -0
  97. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/lowlevel/__init__.py +0 -0
  98. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/lowlevel/helper_types.py +0 -0
  99. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/models.py +0 -0
  100. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/sse.py +0 -0
  101. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/stdio.py +0 -0
  102. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/server/websocket.py +0 -0
  103. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/shared/__init__.py +0 -0
  104. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/shared/context.py +0 -0
  105. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/shared/exceptions.py +0 -0
  106. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/shared/memory.py +0 -0
  107. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/shared/progress.py +0 -0
  108. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/shared/version.py +0 -0
  109. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/src/acp/types.py +0 -0
  110. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tasks.toml +0 -0
  111. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/__init__.py +0 -0
  112. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/client/__init__.py +0 -0
  113. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/client/test_config.py +0 -0
  114. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/client/test_session.py +0 -0
  115. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/client/test_stdio.py +0 -0
  116. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/conftest.py +0 -0
  117. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/issues/test_100_tool_listing.py +0 -0
  118. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/issues/test_129_resource_templates.py +0 -0
  119. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/issues/test_141_resource_templates.py +0 -0
  120. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/issues/test_152_resource_mime_type.py +0 -0
  121. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/issues/test_176_progress_token.py +0 -0
  122. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/issues/test_88_random_error.py +0 -0
  123. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/__init__.py +0 -0
  124. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/fastmcp/__init__.py +0 -0
  125. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/fastmcp/prompts/__init__.py +0 -0
  126. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/fastmcp/prompts/test_base.py +0 -0
  127. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/fastmcp/prompts/test_manager.py +0 -0
  128. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/fastmcp/resources/__init__.py +0 -0
  129. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/fastmcp/resources/test_file_resources.py +0 -0
  130. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/fastmcp/resources/test_function_resources.py +0 -0
  131. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/fastmcp/resources/test_resource_manager.py +0 -0
  132. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/fastmcp/resources/test_resource_template.py +0 -0
  133. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/fastmcp/resources/test_resources.py +0 -0
  134. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/fastmcp/servers/__init__.py +0 -0
  135. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/fastmcp/servers/test_file_server.py +0 -0
  136. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/fastmcp/test_func_metadata.py +0 -0
  137. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/fastmcp/test_parameter_descriptions.py +0 -0
  138. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/fastmcp/test_server.py +0 -0
  139. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/fastmcp/test_tool_manager.py +0 -0
  140. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/test_read_resource.py +0 -0
  141. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/test_session.py +0 -0
  142. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/server/test_stdio.py +0 -0
  143. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/shared/test_memory.py +0 -0
  144. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/shared/test_session.py +0 -0
  145. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/shared/test_sse.py +0 -0
  146. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/test_examples.py +0 -0
  147. {acp_sdk-0.0.4 → acp_sdk-0.0.5}/tests/test_types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: acp-sdk
3
- Version: 0.0.4
3
+ Version: 0.0.5
4
4
  Summary: Agent Communication Protocol SDK
5
5
  Project-URL: Homepage, https://github.com/i-am-bee/beeai
6
6
  Project-URL: Repository, https://github.com/i-am-bee/beeai
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "acp-sdk"
3
- version = "0.0.4"
3
+ version = "0.0.5"
4
4
  description = "Agent Communication Protocol SDK"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10,<4.0"
@@ -566,9 +566,13 @@ class Server:
566
566
  case (
567
567
  RequestResponder(request=types.ClientRequest(root=req)) as responder
568
568
  ):
569
- with responder:
570
- await self._handle_request(
571
- message, req, session, raise_exceptions
569
+ async with responder:
570
+ responder.task_group.start_soon(
571
+ self._handle_request,
572
+ message,
573
+ req,
574
+ session,
575
+ raise_exceptions,
572
576
  )
573
577
  case types.ClientNotification(root=notify):
574
578
  await self._handle_notification(notify)
@@ -126,7 +126,7 @@ class ServerSession(
126
126
  case types.InitializeRequest(params=params):
127
127
  self._initialization_state = InitializationState.Initializing
128
128
  self._client_params = params
129
- with responder:
129
+ async with responder:
130
130
  await responder.respond(
131
131
  types.ServerResult(
132
132
  types.InitializeResult(
@@ -71,27 +71,27 @@ class RequestResponder(Generic[ReceiveRequestT, SendResultT]):
71
71
  self.request = request
72
72
  self._session = session
73
73
  self._completed = False
74
- self._cancel_scope = anyio.CancelScope()
74
+ self.task_group = anyio.create_task_group()
75
75
  self._on_complete = on_complete
76
76
  self._entered = False # Track if we're in a context manager
77
77
 
78
- def __enter__(self) -> "RequestResponder[ReceiveRequestT, SendResultT]":
78
+ async def __aenter__(self) -> "RequestResponder[ReceiveRequestT, SendResultT]":
79
79
  """Enter the context manager, enabling request cancellation tracking."""
80
80
  self._entered = True
81
- self._cancel_scope = anyio.CancelScope()
82
- self._cancel_scope.__enter__()
81
+ self.task_group = anyio.create_task_group()
82
+ await self.task_group.__aenter__()
83
83
  return self
84
84
 
85
- def __exit__(self, exc_type, exc_val, exc_tb) -> None:
85
+ async def __aexit__(self, exc_type, exc_val, exc_tb) -> None:
86
86
  """Exit the context manager, performing cleanup and notifying completion."""
87
87
  try:
88
+ if not self.task_group:
89
+ raise RuntimeError("No active cancel scope")
90
+ await self.task_group.__aexit__(exc_type, exc_val, exc_tb)
88
91
  if self._completed:
89
92
  self._on_complete(self)
90
93
  finally:
91
94
  self._entered = False
92
- if not self._cancel_scope:
93
- raise RuntimeError("No active cancel scope")
94
- self._cancel_scope.__exit__(exc_type, exc_val, exc_tb)
95
95
 
96
96
  async def respond(self, response: SendResultT | ErrorData) -> None:
97
97
  """Send a response for this request.
@@ -116,10 +116,10 @@ class RequestResponder(Generic[ReceiveRequestT, SendResultT]):
116
116
  """Cancel this request and mark it as completed."""
117
117
  if not self._entered:
118
118
  raise RuntimeError("RequestResponder must be used as a context manager")
119
- if not self._cancel_scope:
119
+ if not self.task_group:
120
120
  raise RuntimeError("No active cancel scope")
121
121
 
122
- self._cancel_scope.cancel()
122
+ self.task_group.cancel_scope.cancel()
123
123
  self._completed = True # Mark as completed so it's removed from in_flight
124
124
  # Send an error response to indicate cancellation
125
125
  await self._session._send_response(
@@ -133,7 +133,9 @@ class RequestResponder(Generic[ReceiveRequestT, SendResultT]):
133
133
 
134
134
  @property
135
135
  def cancelled(self) -> bool:
136
- return self._cancel_scope is not None and self._cancel_scope.cancel_called
136
+ return (
137
+ self.task_group is not None and self.task_group.cancel_scope.cancel_called
138
+ )
137
139
 
138
140
 
139
141
  class BaseSession(
@@ -203,6 +205,7 @@ class BaseSession(
203
205
  self,
204
206
  request: SendRequestT,
205
207
  result_type: type[ReceiveResultT],
208
+ request_id: RequestId | None = None,
206
209
  ) -> ReceiveResultT:
207
210
  """
208
211
  Sends a request and wait for a response. Raises an McpError if the
@@ -212,8 +215,9 @@ class BaseSession(
212
215
  instead.
213
216
  """
214
217
 
215
- request_id = self._request_id
216
- self._request_id = request_id + 1
218
+ if request_id is None:
219
+ request_id = self._request_id
220
+ self._request_id = request_id + 1
217
221
 
218
222
  response_stream, response_stream_reader = anyio.create_memory_object_stream[
219
223
  JSONRPCResponse | JSONRPCError
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