ace-git-copilot 0.3.7__tar.gz → 0.3.8__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 (129) hide show
  1. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/PKG-INFO +5 -1
  2. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/README.md +4 -0
  3. ace_git_copilot-0.3.8/ace/__init__.py +1 -0
  4. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/history_analyzer.py +2 -1
  5. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/rebase_helper.py +2 -1
  6. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/core/git_ops.py +3 -2
  7. ace_git_copilot-0.3.8/ace/utils/string_utils.py +40 -0
  8. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/pyproject.toml +1 -1
  9. ace_git_copilot-0.3.8/tests/test_string_utils.py +17 -0
  10. ace_git_copilot-0.3.7/ace/__init__.py +0 -1
  11. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/AGENTS.md +0 -0
  12. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/BRIEFING.md +0 -0
  13. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/ORIGINAL_REQUEST.md +0 -0
  14. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/e2e_testing_track/BRIEFING.md +0 -0
  15. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/e2e_testing_track/ORIGINAL_REQUEST.md +0 -0
  16. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/e2e_testing_track/SCOPE.md +0 -0
  17. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/e2e_testing_track/progress.md +0 -0
  18. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/explorer_init/BRIEFING.md +0 -0
  19. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/explorer_init/ORIGINAL_REQUEST.md +0 -0
  20. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/explorer_init/emojis_list.txt +0 -0
  21. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/explorer_init/find_unused_modules.py +0 -0
  22. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/explorer_init/handoff.md +0 -0
  23. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/explorer_init/measure_lazy_startup.py +0 -0
  24. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/explorer_init/measure_startup.py +0 -0
  25. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/explorer_init/profile_imports.py +0 -0
  26. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/explorer_init/progress.md +0 -0
  27. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/explorer_init/run_importtime.py +0 -0
  28. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/explorer_init/search_banner.py +0 -0
  29. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/explorer_init/search_emojis.py +0 -0
  30. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/explorer_init/search_git_usages.py +0 -0
  31. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/explorer_init/search_usages.py +0 -0
  32. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/explorer_init/test_import_profiler.py +0 -0
  33. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/explorer_init/test_mocked_sys.py +0 -0
  34. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/handoff.md +0 -0
  35. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/implementation_track/BRIEFING.md +0 -0
  36. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/implementation_track/ORIGINAL_REQUEST.md +0 -0
  37. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/implementation_track/explorer_initial_report.md +0 -0
  38. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/implementation_track/progress.md +0 -0
  39. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/orchestrator/.gitkeep +0 -0
  40. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/orchestrator/BRIEFING.md +0 -0
  41. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/orchestrator/ORIGINAL_REQUEST.md +0 -0
  42. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/orchestrator/PROJECT.md +0 -0
  43. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/orchestrator/progress.md +0 -0
  44. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/teamwork_preview_explorer_e2e_explore/BRIEFING.md +0 -0
  45. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/teamwork_preview_explorer_e2e_explore/ORIGINAL_REQUEST.md +0 -0
  46. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/teamwork_preview_explorer_e2e_explore/handoff.md +0 -0
  47. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/teamwork_preview_explorer_e2e_explore/progress.md +0 -0
  48. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/worker_e2e_testing/BRIEFING.md +0 -0
  49. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/worker_e2e_testing/ORIGINAL_REQUEST.md +0 -0
  50. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/worker_e2e_testing/progress.md +0 -0
  51. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/worker_m1_startup/BRIEFING.md +0 -0
  52. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/worker_m1_startup/ORIGINAL_REQUEST.md +0 -0
  53. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.agents/worker_m1_startup/progress.md +0 -0
  54. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.env.example +0 -0
  55. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.github/workflows/tests.yml +0 -0
  56. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/.gitignore +0 -0
  57. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/CODE_OF_CONDUCT.md +0 -0
  58. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/CONTRIBUTING.md +0 -0
  59. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/LICENSE +0 -0
  60. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/PROJECT.md +0 -0
  61. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/SECURITY.md +0 -0
  62. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/SUPPORT.md +0 -0
  63. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/TEST_INFRA.md +0 -0
  64. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/TEST_READY.md +0 -0
  65. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/__main__.py +0 -0
  66. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/changelog_generator.py +0 -0
  67. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/code_reviewer.py +0 -0
  68. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/commit_generator.py +0 -0
  69. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/conflict_resolver.py +0 -0
  70. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/gitignore_generator.py +0 -0
  71. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/intent_parser.py +0 -0
  72. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/llm_factory.py +0 -0
  73. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/pr_drafter.py +0 -0
  74. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/prompts/changelog.py +0 -0
  75. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/prompts/commit.py +0 -0
  76. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/prompts/conflict.py +0 -0
  77. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/prompts/doctor.py +0 -0
  78. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/prompts/explain.py +0 -0
  79. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/prompts/ignore.py +0 -0
  80. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/prompts/intent.py +0 -0
  81. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/prompts/pr.py +0 -0
  82. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/prompts/rebase.py +0 -0
  83. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/prompts/review.py +0 -0
  84. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/prompts/search.py +0 -0
  85. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ai/prompts/undo.py +0 -0
  86. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/cli.py +0 -0
  87. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/core/config.py +0 -0
  88. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/core/context.py +0 -0
  89. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/core/diagnostics.py +0 -0
  90. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/core/hooks.py +0 -0
  91. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/core/safety.py +0 -0
  92. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ui/banner.py +0 -0
  93. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ui/dashboard.py +0 -0
  94. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ui/display.py +0 -0
  95. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ui/prompts.py +0 -0
  96. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/ui/themes.py +0 -0
  97. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/utils/conflict_parser.py +0 -0
  98. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/utils/diff_parser.py +0 -0
  99. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/ace/utils/json_utils.py +0 -0
  100. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/conftest.py +0 -0
  101. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/e2e/conftest.py +0 -0
  102. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/e2e/test_tier1_features.py +0 -0
  103. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/e2e/test_tier2_boundaries.py +0 -0
  104. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/e2e/test_tier3_combinations.py +0 -0
  105. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/e2e/test_tier4_workloads.py +0 -0
  106. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_changelog_generator.py +0 -0
  107. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_code_reviewer.py +0 -0
  108. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_config_atomic_write.py +0 -0
  109. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_conflict_resolver.py +0 -0
  110. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_conflict_resolver_backup.py +0 -0
  111. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_context_gitdir_detection.py +0 -0
  112. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_diagnostics.py +0 -0
  113. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_diff_trimmer.py +0 -0
  114. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_git_ops.py +0 -0
  115. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_git_ops_execute.py +0 -0
  116. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_help.py +0 -0
  117. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_history_analyzer.py +0 -0
  118. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_hooks.py +0 -0
  119. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_ignore.py +0 -0
  120. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_intent_parser.py +0 -0
  121. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_llm_factory.py +0 -0
  122. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_llm_factory_ollama.py +0 -0
  123. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_merge_state.py +0 -0
  124. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_pr_drafter.py +0 -0
  125. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_rebase_helper.py +0 -0
  126. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_safety.py +0 -0
  127. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_search.py +0 -0
  128. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_undo.py +0 -0
  129. {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.8}/tests/test_workspace.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ace-git-copilot
3
- Version: 0.3.7
3
+ Version: 0.3.8
4
4
  Summary: AI-powered Git copilot — talk to Git in plain English
5
5
  Project-URL: Homepage, https://github.com/jachinsamuel/Ace
6
6
  Project-URL: Documentation, https://github.com/jachinsamuel/Ace#readme
@@ -199,6 +199,10 @@ Distributed under the MIT License. See [LICENSE](LICENSE) for more details.
199
199
 
200
200
  ## Changelog
201
201
 
202
+ ### v0.3.8 — Emoji Stripping from Git History (2026-07-14)
203
+ * Implemented automatic Unicode emoji stripping for all Git commit messages retrieved via `GitOps.get_log`.
204
+ * Ensured history query summaries, rebase lists, and dashboard commit tables are completely clean and emoji-free.
205
+
202
206
  ### v0.3.7 — UI Status Icons Modernization (2026-07-14)
203
207
  * Replaced clunky double-character ASCII status indicators (`>>`, `**`, `!!`, `EE`) with clean, modern Unicode status icons (`›`, `✔`, `⚠`, `✘`).
204
208
  * Updated confirm prompts, severity warnings, and code review listings to use the new icons for a clean, consistent terminal interface.
@@ -166,6 +166,10 @@ Distributed under the MIT License. See [LICENSE](LICENSE) for more details.
166
166
 
167
167
  ## Changelog
168
168
 
169
+ ### v0.3.8 — Emoji Stripping from Git History (2026-07-14)
170
+ * Implemented automatic Unicode emoji stripping for all Git commit messages retrieved via `GitOps.get_log`.
171
+ * Ensured history query summaries, rebase lists, and dashboard commit tables are completely clean and emoji-free.
172
+
169
173
  ### v0.3.7 — UI Status Icons Modernization (2026-07-14)
170
174
  * Replaced clunky double-character ASCII status indicators (`>>`, `**`, `!!`, `EE`) with clean, modern Unicode status icons (`›`, `✔`, `⚠`, `✘`).
171
175
  * Updated confirm prompts, severity warnings, and code review listings to use the new icons for a clean, consistent terminal interface.
@@ -0,0 +1 @@
1
+ __version__ = "0.3.8"
@@ -38,8 +38,9 @@ class HistoryAnalyzer:
38
38
  HumanMessage(content=user_prompt)
39
39
  ]
40
40
 
41
+ from ace.utils.string_utils import strip_emojis
41
42
  response = llm.invoke(messages)
42
- return response.content.strip()
43
+ return strip_emojis(response.content.strip())
43
44
 
44
45
  def get_repo_stats(self) -> Dict[str, Any]:
45
46
  """
@@ -20,6 +20,7 @@ class RebaseHelper:
20
20
  except Exception:
21
21
  return []
22
22
 
23
+ from ace.utils.string_utils import strip_emojis
23
24
  commits = []
24
25
  for line in log_data.splitlines():
25
26
  if "|" in line:
@@ -28,7 +29,7 @@ class RebaseHelper:
28
29
  commits.append({
29
30
  "hexsha": parts[0],
30
31
  "author": parts[1],
31
- "summary": parts[2].strip()
32
+ "summary": strip_emojis(parts[2].strip())
32
33
  })
33
34
  return commits
34
35
 
@@ -101,12 +101,13 @@ class GitOps:
101
101
  args.append(path)
102
102
 
103
103
  try:
104
+ from ace.utils.string_utils import strip_emojis
104
105
  commits = self.repo.iter_commits(*args, **kwargs)
105
106
  return [
106
107
  {
107
108
  "hexsha": commit.hexsha,
108
- "summary": commit.summary,
109
- "message": commit.message,
109
+ "summary": strip_emojis(commit.summary),
110
+ "message": strip_emojis(commit.message),
110
111
  "author": commit.author.name,
111
112
  "date": commit.committed_datetime.isoformat(),
112
113
  }
@@ -0,0 +1,40 @@
1
+ import re
2
+
3
+ def strip_emojis(text: str) -> str:
4
+ """
5
+ Strip Unicode emojis from text to keep the terminal UI clean.
6
+ """
7
+ if not text:
8
+ return text
9
+
10
+ # Unicode emoji ranges:
11
+ # - \U0001f600-\U0001f64f (emoticons)
12
+ # - \U0001f300-\U0001f5ff (symbols & pictographs)
13
+ # - \U0001f680-\U0001f6ff (transport & map symbols)
14
+ # - \U0001f1e0-\U0001f1ff (flags)
15
+ # - \U00002700-\U000027bf (dingbats)
16
+ # - \U00002600-\U000026ff (miscellaneous symbols)
17
+ # - \U0001f900-\U0001f9ff (supplemental symbols)
18
+ # - \U0001fa00-\U0001faff (symbols and pictographs extended)
19
+ emoji_pattern = re.compile(
20
+ "["
21
+ "\U0001f600-\U0001f64f"
22
+ "\U0001f300-\U0001f5ff"
23
+ "\U0001f680-\U0001f6ff"
24
+ "\U0001f1e0-\U0001f1ff"
25
+ "\U00002700-\U000027bf"
26
+ "\U00002600-\U000026ff"
27
+ "\U0001f900-\U0001f9ff"
28
+ "\U0001fa00-\U0001faff"
29
+ "]+",
30
+ re.UNICODE
31
+ )
32
+
33
+ cleaned = emoji_pattern.sub("", text)
34
+ # Replace multiple spaces/newlines with a single space (while preserving newlines if multi-line)
35
+ # To be safe for markdown summaries, we can just strip emojis and keep other formatting intact.
36
+ # Let's do a simple strip of double spaces that result from removing the emoji.
37
+ cleaned = re.sub(r' +', ' ', cleaned)
38
+ # Also clean up trailing/leading spaces on lines
39
+ lines = [line.strip() for line in cleaned.splitlines()]
40
+ return "\n".join(lines).strip()
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ace-git-copilot"
3
- version = "0.3.7"
3
+ version = "0.3.8"
4
4
  description = "AI-powered Git copilot — talk to Git in plain English"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -0,0 +1,17 @@
1
+ from ace.utils.string_utils import strip_emojis
2
+
3
+ def test_strip_emojis():
4
+ # Test cases with different kinds of emojis and text
5
+ assert strip_emojis("🎨 style(ui): update hover effects") == "style(ui): update hover effects"
6
+ assert strip_emojis("🚀 feat(app): implement loader") == "feat(app): implement loader"
7
+ assert strip_emojis("🤖 feat: implement robot") == "feat: implement robot"
8
+ assert strip_emojis("📝 docs: update readme") == "docs: update readme"
9
+ assert strip_emojis("Normal message without emoji") == "Normal message without emoji"
10
+ assert strip_emojis("Multiple emojis 🎨 🚀 test") == "Multiple emojis test"
11
+ assert strip_emojis("") == ""
12
+ assert strip_emojis(None) is None
13
+
14
+ # Test multi-line text
15
+ multi_line = "🎨 First line\n🚀 Second line"
16
+ expected = "First line\nSecond line"
17
+ assert strip_emojis(multi_line) == expected
@@ -1 +0,0 @@
1
- __version__ = "0.3.7"
File without changes