evo-cli 0.15.0__tar.gz → 0.15.2__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 (107) hide show
  1. {evo_cli-0.15.0 → evo_cli-0.15.2}/PKG-INFO +1 -1
  2. evo_cli-0.15.2/evo_cli/VERSION +1 -0
  3. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/_git.py +1 -1
  4. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli.egg-info/PKG-INFO +1 -1
  5. {evo_cli-0.15.0 → evo_cli-0.15.2}/tests/test_cred.py +13 -2
  6. {evo_cli-0.15.0 → evo_cli-0.15.2}/tests/test_tts.py +1 -0
  7. evo_cli-0.15.0/evo_cli/VERSION +0 -1
  8. {evo_cli-0.15.0 → evo_cli-0.15.2}/Containerfile +0 -0
  9. {evo_cli-0.15.0 → evo_cli-0.15.2}/HISTORY.md +0 -0
  10. {evo_cli-0.15.0 → evo_cli-0.15.2}/LICENSE +0 -0
  11. {evo_cli-0.15.0 → evo_cli-0.15.2}/MANIFEST.in +0 -0
  12. {evo_cli-0.15.0 → evo_cli-0.15.2}/README.md +0 -0
  13. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/__init__.py +0 -0
  14. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/__main__.py +0 -0
  15. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/base.py +0 -0
  16. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/cli.py +0 -0
  17. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/__init__.py +0 -0
  18. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/claude_code.py +0 -0
  19. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/cloudflare.py +0 -0
  20. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/cred.py +0 -0
  21. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/download.py +0 -0
  22. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/fix_claude.py +0 -0
  23. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/gdrive.py +0 -0
  24. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/gh.py +0 -0
  25. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/__init__.py +0 -0
  26. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/_dag.py +0 -0
  27. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/_model.py +0 -0
  28. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/_mutate.py +0 -0
  29. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/_paths.py +0 -0
  30. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/_render.py +0 -0
  31. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/_server.py +0 -0
  32. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/check.py +0 -0
  33. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/edit.py +0 -0
  34. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/pull.py +0 -0
  35. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/serve.py +0 -0
  36. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/show.py +0 -0
  37. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/views.py +0 -0
  38. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/web/assets/index-Bo-8pFen.js +0 -0
  39. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/web/assets/index-ByHqvOcG.css +0 -0
  40. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/web/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  41. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/web/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  42. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/web/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  43. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/web/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  44. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/web/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  45. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/web/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  46. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/web/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  47. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/web/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  48. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/web/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  49. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/web/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  50. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/web/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  51. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/web/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  52. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/harness/web/index.html +0 -0
  53. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/hwid.py +0 -0
  54. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/hwid_reset.py +0 -0
  55. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/localproxy.py +0 -0
  56. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/mcp.py +0 -0
  57. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/miniconda.py +0 -0
  58. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/netcheck.py +0 -0
  59. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/opencode.py +0 -0
  60. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/plantuml.py +0 -0
  61. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/site2s.py +0 -0
  62. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/ssh.py +0 -0
  63. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/sysmon.py +0 -0
  64. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/tts.py +0 -0
  65. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/update.py +0 -0
  66. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/commands/wifi.py +0 -0
  67. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/console.py +0 -0
  68. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/credentials/__init__.py +0 -0
  69. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/credentials/doctor.py +0 -0
  70. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/credentials/google_oauth.py +0 -0
  71. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/credentials/migrate.py +0 -0
  72. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/credentials/oauth_flow.py +0 -0
  73. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/credentials/registry.py +0 -0
  74. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/credentials/store.py +0 -0
  75. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/credentials/sync.py +0 -0
  76. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/mcp_registry.py +0 -0
  77. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/tts/__init__.py +0 -0
  78. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/tts/chunking.py +0 -0
  79. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/tts/core.py +0 -0
  80. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/tts/creds.py +0 -0
  81. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/tts/errors.py +0 -0
  82. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/tts/http.py +0 -0
  83. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/tts/openai.py +0 -0
  84. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/tts/player.py +0 -0
  85. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli/tts/vbee.py +0 -0
  86. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli.egg-info/SOURCES.txt +0 -0
  87. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli.egg-info/dependency_links.txt +0 -0
  88. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli.egg-info/entry_points.txt +0 -0
  89. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli.egg-info/requires.txt +0 -0
  90. {evo_cli-0.15.0 → evo_cli-0.15.2}/evo_cli.egg-info/top_level.txt +0 -0
  91. {evo_cli-0.15.0 → evo_cli-0.15.2}/pyproject.toml +0 -0
  92. {evo_cli-0.15.0 → evo_cli-0.15.2}/setup.cfg +0 -0
  93. {evo_cli-0.15.0 → evo_cli-0.15.2}/tests/__init__.py +0 -0
  94. {evo_cli-0.15.0 → evo_cli-0.15.2}/tests/test_claude_code.py +0 -0
  95. {evo_cli-0.15.0 → evo_cli-0.15.2}/tests/test_cli.py +0 -0
  96. {evo_cli-0.15.0 → evo_cli-0.15.2}/tests/test_console.py +0 -0
  97. {evo_cli-0.15.0 → evo_cli-0.15.2}/tests/test_download.py +0 -0
  98. {evo_cli-0.15.0 → evo_cli-0.15.2}/tests/test_fix_claude.py +0 -0
  99. {evo_cli-0.15.0 → evo_cli-0.15.2}/tests/test_gh.py +0 -0
  100. {evo_cli-0.15.0 → evo_cli-0.15.2}/tests/test_harness.py +0 -0
  101. {evo_cli-0.15.0 → evo_cli-0.15.2}/tests/test_harness_dag.py +0 -0
  102. {evo_cli-0.15.0 → evo_cli-0.15.2}/tests/test_mcp.py +0 -0
  103. {evo_cli-0.15.0 → evo_cli-0.15.2}/tests/test_opencode.py +0 -0
  104. {evo_cli-0.15.0 → evo_cli-0.15.2}/tests/test_plantuml.py +0 -0
  105. {evo_cli-0.15.0 → evo_cli-0.15.2}/tests/test_sysmon.py +0 -0
  106. {evo_cli-0.15.0 → evo_cli-0.15.2}/tests/test_update.py +0 -0
  107. {evo_cli-0.15.0 → evo_cli-0.15.2}/tests/test_wifi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evo_cli
3
- Version: 0.15.0
3
+ Version: 0.15.2
4
4
  Summary: Evolution CLI - a developer toolbox for setting up dev machines
5
5
  Author: maycuatroi
6
6
  Project-URL: Homepage, https://github.com/maycuatroi/evo-cli
@@ -0,0 +1 @@
1
+ 0.15.2
@@ -136,7 +136,7 @@ def _judge(entry: dict, out: dict) -> None:
136
136
  )
137
137
  verdicts.append({"level": "error", "text": f"Branch {branch!r} does not exist, locally or on origin.{hint}"})
138
138
 
139
- if out.get("head_ref") and out.get("base_ref"):
139
+ if out.get("head_ref") and out.get("base_ref") and out["head_ref"] != out["base_ref"]:
140
140
  if out["tone"] == "ok" and out.get("merged") is False:
141
141
  verdicts.append(
142
142
  {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evo_cli
3
- Version: 0.15.0
3
+ Version: 0.15.2
4
4
  Summary: Evolution CLI - a developer toolbox for setting up dev machines
5
5
  Author: maycuatroi
6
6
  Project-URL: Homepage, https://github.com/maycuatroi/evo-cli
@@ -1,4 +1,5 @@
1
1
  import json
2
+ import re
2
3
  from urllib.parse import parse_qs, urlparse
3
4
 
4
5
  import pytest
@@ -10,6 +11,16 @@ from evo_cli.credentials import doctor as doctor_module
10
11
  from evo_cli.credentials import migrate, oauth_flow, registry
11
12
  from evo_cli.credentials.store import compile_flat, get_value, set_value
12
13
 
14
+ _ANSI_RE = re.compile(r"\x1b\[[0-9;]*m")
15
+ _BOX_RE = re.compile(r"[─╭╮╰╯│┤├┬┴┼]")
16
+
17
+
18
+ def _plain(text):
19
+ """Strip ANSI color codes and box-drawing chars, then collapse whitespace."""
20
+ text = _ANSI_RE.sub("", text)
21
+ text = _BOX_RE.sub(" ", text)
22
+ return re.sub(r"\s+", " ", text)
23
+
13
24
 
14
25
  @pytest.fixture
15
26
  def store(tmp_path, monkeypatch):
@@ -250,14 +261,14 @@ def test_migrate_command_refuses_nonempty_folder(store, tmp_path):
250
261
  result = CliRunner().invoke(cli, ["cred", "migrate", "--source", str(source)])
251
262
 
252
263
  assert result.exit_code != 0
253
- assert "already has files" in result.output
264
+ assert "already has files" in _plain(result.output)
254
265
 
255
266
 
256
267
  def test_refresh_requires_exactly_one_target(store):
257
268
  result = CliRunner().invoke(cli, ["cred", "refresh"])
258
269
 
259
270
  assert result.exit_code != 0
260
- assert "exactly one of --all or --service" in result.output
271
+ assert "exactly one of --all or --service" in _plain(result.output)
261
272
 
262
273
 
263
274
  def test_refresh_writes_new_token_and_recompiles(store, monkeypatch):
@@ -233,6 +233,7 @@ def test_batch_requires_inputs(runner):
233
233
 
234
234
 
235
235
  def test_speak_writes_and_skips_playback(runner, monkeypatch, tmp_path):
236
+ monkeypatch.setattr(core, "resolve_provider", lambda provider: "vbee")
236
237
  monkeypatch.setattr(core, "synthesize", lambda text, **kwargs: b"fake-audio")
237
238
  target = tmp_path / "out.mp3"
238
239
  result = runner.invoke(cli, ["tts", "speak", "xin chào", "--no-play", "-o", str(target)])
@@ -1 +0,0 @@
1
- 0.15.0
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
File without changes
File without changes
File without changes