evo-cli 0.26.1__tar.gz → 0.27.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.
- {evo_cli-0.26.1 → evo_cli-0.27.0}/PKG-INFO +24 -1
- {evo_cli-0.26.1 → evo_cli-0.27.0}/README.md +23 -0
- evo_cli-0.27.0/evo_cli/VERSION +1 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/cli.py +2 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/openvpn.py +1 -1
- evo_cli-0.27.0/evo_cli/commands/storage.py +763 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/openvpn.py +77 -17
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli.egg-info/PKG-INFO +24 -1
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli.egg-info/SOURCES.txt +2 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_openvpn.py +2 -0
- evo_cli-0.27.0/tests/test_storage.py +251 -0
- evo_cli-0.26.1/evo_cli/VERSION +0 -1
- {evo_cli-0.26.1 → evo_cli-0.27.0}/Containerfile +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/HISTORY.md +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/LICENSE +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/MANIFEST.in +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/__init__.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/__main__.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/base.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/__init__.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/agent_toy.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/claude_code.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/cloudflare.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/cred.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/download.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/fix_claude.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/gdrive.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/gh.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/__init__.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/_dag.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/_git.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/_model.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/_mutate.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/_paths.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/_render.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/_server.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/check.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/clone.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/edit.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/pull.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/serve.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/show.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/views.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/web/assets/index-Cs7hXRPJ.css +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/web/assets/index-CuNOlaH7.js +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/web/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/web/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/web/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/web/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/web/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/web/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/web/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/web/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/web/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/web/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/web/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/web/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/harness/web/index.html +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/hwid.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/hwid_reset.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/image.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/localproxy.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/mcp.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/miniconda.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/netcheck.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/ngrok.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/opencode.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/plantuml.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/route/__init__.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/route/_dns.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/route/_dpi.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/route/_hosts.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/route/_probe.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/route/check.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/route/fix.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/route/probe.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/route/status.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/serp.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/site2s.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/ssh.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/sysmon.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/tts.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/update.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/commands/wifi.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/console.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/credentials/__init__.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/credentials/doctor.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/credentials/google_oauth.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/credentials/migrate.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/credentials/oauth_flow.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/credentials/registry.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/credentials/store.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/credentials/sync.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/imaging/__init__.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/imaging/align.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/imaging/core.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/imaging/creds.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/imaging/errors.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/imaging/gemini.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/imaging/ncnn.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/mcp_registry.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/serp/__init__.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/serp/client.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/serp/creds.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/serp/errors.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/serp/install.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/serp/render.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/tts/__init__.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/tts/chunking.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/tts/core.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/tts/creds.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/tts/errors.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/tts/gemini.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/tts/http.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/tts/openai.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/tts/player.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli/tts/vbee.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli.egg-info/dependency_links.txt +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli.egg-info/entry_points.txt +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli.egg-info/requires.txt +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/evo_cli.egg-info/top_level.txt +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/pyproject.toml +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/setup.cfg +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/__init__.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_agent_toy.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_claude_code.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_cli.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_console.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_cred.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_download.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_fix_claude.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_gdrive.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_gh.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_harness.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_harness_clone.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_harness_dag.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_image.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_mcp.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_ngrok.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_opencode.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_plantuml.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_route.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_serp.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_sysmon.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_tts.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_update.py +0 -0
- {evo_cli-0.26.1 → evo_cli-0.27.0}/tests/test_wifi.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: evo_cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.27.0
|
|
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
|
|
@@ -371,6 +371,29 @@ the command line, where any process listing would show it. `evo setup serp --wri
|
|
|
371
371
|
`~/.config/serpapi/config.toml` (mode 600) if you also want the bare `serpapi` binary to
|
|
372
372
|
authenticate on its own.
|
|
373
373
|
|
|
374
|
+
#### Storage
|
|
375
|
+
|
|
376
|
+
See what fills the disk and clear developer caches (macOS and Linux):
|
|
377
|
+
|
|
378
|
+
```bash
|
|
379
|
+
evo storage audit # free space, swap, size of every known cache
|
|
380
|
+
evo storage audit --deep # also rank the biggest folders in ~ (and ~/Library)
|
|
381
|
+
evo storage clean --all -n # dry run: what a full clean would remove
|
|
382
|
+
evo storage clean uv npm gradle # clear only these caches (asks first)
|
|
383
|
+
evo storage clean --all -y # clear everything without asking
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
Targets: `uv`, `npm` (+ npx), `pip`, `conda`, `pnpm`, `gradle` (caches + wrapper dists), `go`,
|
|
387
|
+
`docker` (build cache + unused images), `brew`, `xcode` (DerivedData + unavailable simulators) and
|
|
388
|
+
`updaters` (`*.ShipIt`, `*-updater`, editor VSIX caches). Only data the tools rebuild on demand is
|
|
389
|
+
touched - never projects, VMs or app data.
|
|
390
|
+
|
|
391
|
+
`clean` reports the space it actually freed, measured on the filesystem: on APFS uv clones cache
|
|
392
|
+
files into venvs, so a 32 GB uv cache can give back only a few GB. Caches in use are left alone -
|
|
393
|
+
uv/npx envs that a running process was started from are kept, and Gradle is skipped while a Gradle
|
|
394
|
+
daemon runs. Files owned by another user (for example from a past `sudo uvx`) are reported, not
|
|
395
|
+
removed with sudo.
|
|
396
|
+
|
|
374
397
|
## `evo harness` - read a repo cluster
|
|
375
398
|
|
|
376
399
|
A harness is a repo that describes a *cluster* of repos: `harness.yaml` lists them, `contracts.yaml`
|
|
@@ -338,6 +338,29 @@ the command line, where any process listing would show it. `evo setup serp --wri
|
|
|
338
338
|
`~/.config/serpapi/config.toml` (mode 600) if you also want the bare `serpapi` binary to
|
|
339
339
|
authenticate on its own.
|
|
340
340
|
|
|
341
|
+
#### Storage
|
|
342
|
+
|
|
343
|
+
See what fills the disk and clear developer caches (macOS and Linux):
|
|
344
|
+
|
|
345
|
+
```bash
|
|
346
|
+
evo storage audit # free space, swap, size of every known cache
|
|
347
|
+
evo storage audit --deep # also rank the biggest folders in ~ (and ~/Library)
|
|
348
|
+
evo storage clean --all -n # dry run: what a full clean would remove
|
|
349
|
+
evo storage clean uv npm gradle # clear only these caches (asks first)
|
|
350
|
+
evo storage clean --all -y # clear everything without asking
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
Targets: `uv`, `npm` (+ npx), `pip`, `conda`, `pnpm`, `gradle` (caches + wrapper dists), `go`,
|
|
354
|
+
`docker` (build cache + unused images), `brew`, `xcode` (DerivedData + unavailable simulators) and
|
|
355
|
+
`updaters` (`*.ShipIt`, `*-updater`, editor VSIX caches). Only data the tools rebuild on demand is
|
|
356
|
+
touched - never projects, VMs or app data.
|
|
357
|
+
|
|
358
|
+
`clean` reports the space it actually freed, measured on the filesystem: on APFS uv clones cache
|
|
359
|
+
files into venvs, so a 32 GB uv cache can give back only a few GB. Caches in use are left alone -
|
|
360
|
+
uv/npx envs that a running process was started from are kept, and Gradle is skipped while a Gradle
|
|
361
|
+
daemon runs. Files owned by another user (for example from a past `sudo uvx`) are reported, not
|
|
362
|
+
removed with sudo.
|
|
363
|
+
|
|
341
364
|
## `evo harness` - read a repo cluster
|
|
342
365
|
|
|
343
366
|
A harness is a repo that describes a *cluster* of repos: `harness.yaml` lists them, `contracts.yaml`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.27.0
|
|
@@ -25,6 +25,7 @@ from evo_cli.commands.route import route_group
|
|
|
25
25
|
from evo_cli.commands.serp import serp_group, setup_serp
|
|
26
26
|
from evo_cli.commands.site2s import site2s
|
|
27
27
|
from evo_cli.commands.ssh import setupssh
|
|
28
|
+
from evo_cli.commands.storage import storage
|
|
28
29
|
from evo_cli.commands.sysmon import sysmon
|
|
29
30
|
from evo_cli.commands.tts import tts_group
|
|
30
31
|
from evo_cli.commands.update import update
|
|
@@ -84,6 +85,7 @@ cli.add_command(openvpn_group)
|
|
|
84
85
|
cli.add_command(plantuml)
|
|
85
86
|
cli.add_command(route_group)
|
|
86
87
|
cli.add_command(serp_group)
|
|
88
|
+
cli.add_command(storage)
|
|
87
89
|
cli.add_command(sysmon)
|
|
88
90
|
cli.add_command(tts_group)
|
|
89
91
|
cli.add_command(update)
|
|
@@ -332,7 +332,7 @@ def connect(name, timeout, sudo_password_stdin, watch):
|
|
|
332
332
|
if os.geteuid() != 0:
|
|
333
333
|
if sudo_password_stdin:
|
|
334
334
|
password = sys.stdin.readline().rstrip("\n")
|
|
335
|
-
elif subprocess.run(["sudo", "-n", "true"], capture_output=True).returncode:
|
|
335
|
+
elif subprocess.run(["sudo", "-n", "true"], capture_output=True, check=False).returncode:
|
|
336
336
|
password = getpass.getpass("sudo password (not stored): ")
|
|
337
337
|
state_path = Path(str(_guard(vpn.session_path, name)) + ".json")
|
|
338
338
|
state_path.unlink(missing_ok=True)
|