minder-cli 0.5.3__tar.gz → 0.5.4__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 (160) hide show
  1. {minder_cli-0.5.3 → minder_cli-0.5.4}/PKG-INFO +1 -1
  2. {minder_cli-0.5.3 → minder_cli-0.5.4}/pyproject.toml +1 -1
  3. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/embedding/local.py +1 -3
  4. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/llm/llama_cpp_llm.py +1 -3
  5. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/runtime.py +24 -13
  6. {minder_cli-0.5.3 → minder_cli-0.5.4}/.gitignore +0 -0
  7. {minder_cli-0.5.3 → minder_cli-0.5.4}/LICENSE +0 -0
  8. {minder_cli-0.5.3 → minder_cli-0.5.4}/README-pypi.md +0 -0
  9. {minder_cli-0.5.3 → minder_cli-0.5.4}/README.md +0 -0
  10. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/__init__.py +0 -0
  11. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/api/routers/prompts.py +0 -0
  12. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/application/__init__.py +0 -0
  13. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/application/admin/__init__.py +0 -0
  14. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/application/admin/dto.py +0 -0
  15. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/application/admin/jobs.py +0 -0
  16. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/application/admin/use_cases.py +0 -0
  17. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/auth/__init__.py +0 -0
  18. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/auth/context.py +0 -0
  19. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/auth/middleware.py +0 -0
  20. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/auth/principal.py +0 -0
  21. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/auth/rate_limiter.py +0 -0
  22. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/auth/rbac.py +0 -0
  23. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/auth/service.py +0 -0
  24. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/bootstrap/__init__.py +0 -0
  25. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/bootstrap/agent_seeder.py +0 -0
  26. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/bootstrap/providers.py +0 -0
  27. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/bootstrap/transport.py +0 -0
  28. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/cache/__init__.py +0 -0
  29. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/cache/providers.py +0 -0
  30. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/chunking/__init__.py +0 -0
  31. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/chunking/code_splitter.py +0 -0
  32. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/chunking/splitter.py +0 -0
  33. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/cli.py +0 -0
  34. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/config.py +0 -0
  35. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/context_compactor.py +0 -0
  36. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/continuity.py +0 -0
  37. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/dev.py +0 -0
  38. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/embedding/__init__.py +0 -0
  39. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/embedding/base.py +0 -0
  40. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/embedding/openai.py +0 -0
  41. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/__init__.py +0 -0
  42. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/edges.py +0 -0
  43. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/executor.py +0 -0
  44. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/graph.py +0 -0
  45. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/nodes/__init__.py +0 -0
  46. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/nodes/clarification.py +0 -0
  47. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/nodes/evaluator.py +0 -0
  48. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/nodes/guard.py +0 -0
  49. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/nodes/llm.py +0 -0
  50. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/nodes/planning.py +0 -0
  51. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/nodes/reasoning.py +0 -0
  52. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/nodes/reflection.py +0 -0
  53. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/nodes/reranker.py +0 -0
  54. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/nodes/retriever.py +0 -0
  55. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/nodes/verification.py +0 -0
  56. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/nodes/workflow_planner.py +0 -0
  57. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/runtime.py +0 -0
  58. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/graph/state.py +0 -0
  59. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/learning/__init__.py +0 -0
  60. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/learning/error_learner.py +0 -0
  61. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/learning/pattern_extractor.py +0 -0
  62. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/learning/quality_optimizer.py +0 -0
  63. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/learning/skill_synthesizer.py +0 -0
  64. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/llm/__init__.py +0 -0
  65. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/llm/base.py +0 -0
  66. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/llm/factory.py +0 -0
  67. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/llm/openai.py +0 -0
  68. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/models/__init__.py +0 -0
  69. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/models/agent.py +0 -0
  70. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/models/base.py +0 -0
  71. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/models/client.py +0 -0
  72. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/models/document.py +0 -0
  73. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/models/error.py +0 -0
  74. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/models/graph.py +0 -0
  75. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/models/history.py +0 -0
  76. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/models/job.py +0 -0
  77. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/models/prompt.py +0 -0
  78. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/models/repository.py +0 -0
  79. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/models/rule.py +0 -0
  80. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/models/session.py +0 -0
  81. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/models/skill.py +0 -0
  82. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/models/user.py +0 -0
  83. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/models/workflow.py +0 -0
  84. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/observability/__init__.py +0 -0
  85. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/observability/audit.py +0 -0
  86. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/observability/logging.py +0 -0
  87. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/observability/metrics.py +0 -0
  88. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/observability/tracing.py +0 -0
  89. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/__init__.py +0 -0
  90. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/cli/__init__.py +0 -0
  91. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/cli/commands/agent.py +0 -0
  92. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/cli/commands/auth.py +0 -0
  93. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/cli/commands/ide.py +0 -0
  94. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/cli/commands/mcp.py +0 -0
  95. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/cli/commands/sync.py +0 -0
  96. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/cli/commands/update.py +0 -0
  97. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/cli/main.py +0 -0
  98. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/cli/utils/common.py +0 -0
  99. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/cli/utils/config.py +0 -0
  100. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/cli/utils/git.py +0 -0
  101. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/cli/utils/version.py +0 -0
  102. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/http/__init__.py +0 -0
  103. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/http/admin/__init__.py +0 -0
  104. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/http/admin/agents.py +0 -0
  105. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/http/admin/api.py +0 -0
  106. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/http/admin/context.py +0 -0
  107. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/http/admin/dashboard.py +0 -0
  108. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/http/admin/jobs.py +0 -0
  109. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/http/admin/memories.py +0 -0
  110. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/http/admin/prompts.py +0 -0
  111. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/http/admin/routes.py +0 -0
  112. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/http/admin/runtime.py +0 -0
  113. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/http/admin/search.py +0 -0
  114. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/presentation/http/admin/skills.py +0 -0
  115. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/prompts/__init__.py +0 -0
  116. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/prompts/formatter.py +0 -0
  117. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/resources/__init__.py +0 -0
  118. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/retrieval/__init__.py +0 -0
  119. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/retrieval/hybrid.py +0 -0
  120. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/retrieval/mmr.py +0 -0
  121. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/retrieval/multi_hop.py +0 -0
  122. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/server.py +0 -0
  123. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/__init__.py +0 -0
  124. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/document.py +0 -0
  125. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/error.py +0 -0
  126. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/feedback.py +0 -0
  127. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/graph.py +0 -0
  128. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/history.py +0 -0
  129. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/interfaces.py +0 -0
  130. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/milvus/__init__.py +0 -0
  131. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/milvus/client.py +0 -0
  132. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/milvus/collections.py +0 -0
  133. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/milvus/vector_store.py +0 -0
  134. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/mongodb/__init__.py +0 -0
  135. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/mongodb/client.py +0 -0
  136. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/mongodb/graph_store.py +0 -0
  137. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/mongodb/indexes.py +0 -0
  138. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/mongodb/operational_store.py +0 -0
  139. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/relational.py +0 -0
  140. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/repo_state.py +0 -0
  141. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/rule.py +0 -0
  142. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/store/vector.py +0 -0
  143. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/tools/__init__.py +0 -0
  144. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/tools/agents.py +0 -0
  145. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/tools/auth.py +0 -0
  146. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/tools/graph.py +0 -0
  147. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/tools/ingest.py +0 -0
  148. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/tools/memory.py +0 -0
  149. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/tools/query.py +0 -0
  150. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/tools/registry.py +0 -0
  151. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/tools/repo_scanner.py +0 -0
  152. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/tools/seeds/__init__.py +0 -0
  153. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/tools/seeds/default_agents.py +0 -0
  154. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/tools/session.py +0 -0
  155. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/tools/skills.py +0 -0
  156. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/tools/workflow.py +0 -0
  157. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/transport/__init__.py +0 -0
  158. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/transport/base.py +0 -0
  159. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/transport/sse.py +0 -0
  160. {minder_cli-0.5.3 → minder_cli-0.5.4}/src/minder/transport/stdio.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: minder-cli
3
- Version: 0.5.3
3
+ Version: 0.5.4
4
4
  Summary: Minder CLI is the command-line interface for the Minder self-hosted MCP platform.
5
5
  Project-URL: Homepage, https://github.com/hiimtrung/minder
6
6
  Project-URL: Repository, https://github.com/hiimtrung/minder
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "minder-cli"
7
- version = "0.5.3"
7
+ version = "0.5.4"
8
8
  description = "Minder CLI is the command-line interface for the Minder self-hosted MCP platform."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.14"
@@ -54,9 +54,7 @@ class LocalEmbeddingProvider:
54
54
  return
55
55
 
56
56
  if not llama_cpp_usable():
57
- logger.warning(
58
- "CPU does not support AVX2; llama.cpp unavailable. Using mock embedding."
59
- )
57
+ logger.warning("llama.cpp not usable on this host; embedding running in mock mode.")
60
58
  return
61
59
 
62
60
  try:
@@ -52,9 +52,7 @@ class LlamaCppLLM:
52
52
  return
53
53
 
54
54
  if not llama_cpp_usable():
55
- logger.warning(
56
- "CPU does not support AVX2; llama.cpp unavailable. Falling back to mock mode."
57
- )
55
+ logger.warning("llama.cpp not usable on this host; LLM running in mock mode.")
58
56
  return
59
57
 
60
58
  cache_key = f"{self._model_repo}:{self._model_file}"
@@ -26,18 +26,22 @@ def load_attr(module_name: str, attr_name: str) -> Any | None:
26
26
  def llama_cpp_usable() -> bool:
27
27
  """Return True only if llama.cpp can actually run on this CPU.
28
28
 
29
- Some CI runners report AVX2 in /proc/cpuinfo but the hypervisor blocks
30
- the instructions, causing an unrecoverable SIGILL. We probe by running
31
- a subprocess that initialises the llama.cpp backend; if the subprocess
32
- is killed by SIGILL (returncode == -signal.SIGILL) we mark the library
33
- as unavailable and fall back to mock mode. Result is cached for the
34
- lifetime of the process.
29
+ Some CI runners / VM hypervisors block AVX2 instructions even when
30
+ /proc/cpuinfo advertises them, causing an unrecoverable SIGILL. We
31
+ probe by running a subprocess that initialises the ggml backend; if the
32
+ subprocess is killed by SIGILL (returncode == -signal.SIGILL) we mark
33
+ the library as unavailable and fall back to mock mode.
34
+
35
+ Build the Docker image with CMAKE_ARGS containing -DGGML_AVX2=OFF (and
36
+ related flags) to compile a portable binary that avoids SIGILL entirely.
37
+ Result is cached for the lifetime of the process.
35
38
  """
36
39
  global _LLAMA_CPP_PROBE
37
40
  if _LLAMA_CPP_PROBE is not None:
38
41
  return _LLAMA_CPP_PROBE
39
42
 
40
43
  if not module_available("llama_cpp"):
44
+ logger.warning("llama-cpp-python is not installed. Falling back to mock mode.")
41
45
  _LLAMA_CPP_PROBE = False
42
46
  return False
43
47
 
@@ -48,19 +52,26 @@ def llama_cpp_usable() -> bool:
48
52
  "-c",
49
53
  # Instantiating Llama triggers ggml_backend_reg_count → ggml_cpu_init.
50
54
  # /dev/null causes a model-load error (returncode 1) on healthy CPUs;
51
- # SIGILL kills the process (returncode -4) on unsupported CPUs.
55
+ # SIGILL (returncode -4) means the CPU doesn't support the compiled ISA.
52
56
  "from llama_cpp import Llama; Llama(model_path='/dev/null', verbose=False)",
53
57
  ],
54
58
  capture_output=True,
55
59
  timeout=30,
56
60
  )
57
- _LLAMA_CPP_PROBE = proc.returncode != -signal.SIGILL
61
+ if proc.returncode == -signal.SIGILL:
62
+ logger.warning(
63
+ "llama.cpp unavailable: CPU or hypervisor blocked an instruction "
64
+ "(SIGILL). Rebuild the image with CMAKE_ARGS containing "
65
+ "-DGGML_AVX2=OFF to fix this. Falling back to mock mode."
66
+ )
67
+ _LLAMA_CPP_PROBE = False
68
+ else:
69
+ _LLAMA_CPP_PROBE = True
70
+ except subprocess.TimeoutExpired:
71
+ logger.warning("llama.cpp usability probe timed out. Falling back to mock mode.")
72
+ _LLAMA_CPP_PROBE = False
58
73
  except Exception as exc:
59
- logger.warning("llama.cpp usability probe error: %s", exc)
74
+ logger.warning("llama.cpp usability probe error: %s. Falling back to mock mode.", exc)
60
75
  _LLAMA_CPP_PROBE = False
61
76
 
62
- if not _LLAMA_CPP_PROBE:
63
- logger.warning(
64
- "llama.cpp unavailable on this CPU (SIGILL probe). Falling back to mock mode."
65
- )
66
77
  return _LLAMA_CPP_PROBE
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes