Skip to content

Commit ed851d2

Browse files
authored
Merge pull request #11 from MicroMilo/agent/release-v0.4.0
Release Clean Your Data v0.4.0
2 parents 57bc057 + f331069 commit ed851d2

24 files changed

Lines changed: 3776 additions & 116 deletions

.github/workflows/release.yml

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,64 @@ on:
66
- "v*"
77

88
permissions:
9-
contents: write
9+
contents: read
1010

1111
jobs:
12+
verify:
13+
runs-on: ubuntu-latest
14+
strategy:
15+
matrix:
16+
python-version: ["3.9", "3.12"]
17+
steps:
18+
- uses: actions/checkout@v4
19+
- uses: actions/setup-python@v5
20+
with:
21+
python-version: ${{ matrix.python-version }}
22+
- name: Install package
23+
run: python -m pip install --no-deps .
24+
- name: Compile and test
25+
run: |
26+
python -m compileall -q src audit-local-files/scripts tests
27+
for test in tests/*_test.py; do python "$test"; done
28+
1229
release:
30+
needs: verify
1331
runs-on: ubuntu-latest
32+
permissions:
33+
contents: write
1434
steps:
1535
- uses: actions/checkout@v4
1636
- uses: actions/setup-python@v5
1737
with:
1838
python-version: "3.12"
39+
- name: Verify tag and package version
40+
env:
41+
RELEASE_TAG: ${{ github.ref_name }}
42+
run: |
43+
python - <<'PY'
44+
import os
45+
import tomllib
46+
from pathlib import Path
47+
48+
version = tomllib.loads(Path("pyproject.toml").read_text(encoding="utf-8"))["project"]["version"]
49+
expected = f"v{version}"
50+
if os.environ["RELEASE_TAG"] != expected:
51+
raise SystemExit(f"release tag {os.environ['RELEASE_TAG']!r} must equal {expected!r}")
52+
PY
1953
- name: Build distributions
2054
run: |
21-
python -m pip install build
55+
python -m pip install build twine
2256
python -m build
57+
python -m twine check dist/*
58+
python - <<'PY'
59+
import zipfile
60+
from pathlib import Path
61+
62+
wheel = next(Path("dist").glob("*.whl"))
63+
with zipfile.ZipFile(wheel) as archive:
64+
names = set(archive.namelist())
65+
assert "clean_your_data/web/index.html" in names
66+
PY
2367
- name: Create GitHub release
2468
env:
2569
GH_TOKEN: ${{ github.token }}

.github/workflows/test.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ jobs:
3131
run: python tests/interactive_test.py
3232
- name: Run terminal UI test
3333
run: python tests/tui_test.py
34+
- name: Run local GUI test
35+
run: python tests/gui_test.py
36+
- name: Run Agent trace test
37+
run: python tests/trace_test.py
3438
- name: Run cleanup loop test
3539
run: python tests/cleanup_test.py
3640
- name: Run workspace actions test

CHANGELOG.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,24 @@
11
# Changelog
22

3+
## 0.4.0 - 2026-08-12
4+
5+
- Added `cyd gui [PATH]`, a local browser interface backed by the same scanner and cleanup gates as the TUI.
6+
- Added expandable relative-size browsing, bounded local previews, search, sorting, relationships, per-path Agent conversations, and responsive desktop/mobile layouts.
7+
- Added secret-free AI configuration for Codex, custom stdin/stdout commands, or AI-off operation.
8+
- Added exact-path cleanup baskets, system Trash moves, rescanning, and undo to the GUI.
9+
- Protected active roots, VCS metadata, credential stores, and common credential files from cleanup.
10+
- Bound the GUI to loopback with Host validation, per-run API tokens, cross-origin checks, path redaction, restrictive response headers, and no traceback disclosure.
11+
- Added the opt-in `cyd trace -- <command>` wrapper for Agent sessions.
12+
- Records metadata-only created, modified, and deleted paths while the traced command runs.
13+
- Persists local session and event evidence in `~/.clean-your-data/provenance.sqlite3`.
14+
- Reports attribution as an observed association, not as kernel-level proof of the exact writer process.
15+
16+
## 0.3.1 - 2026-08-10
17+
18+
- Added relative size bars to the space map so large siblings stand out immediately.
19+
- Added a first-screen space summary with folder, file, rebuildable, and staged counts.
20+
- Reworked the folder inspector into a plain-language space story with a next-best action.
21+
322
## 0.3.0 - 2026-08-10
423

524
- Added the installable `clean-your-data` Python package.

MANIFEST.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ include README.md
33
include CHANGELOG.md
44
recursive-include audit-local-files *.md *.yaml
55
recursive-include audit-local-files/scripts *.py
6+
recursive-include src/clean_your_data/web *.html

PRIVACY.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
# Privacy
22

3-
Clean Your Data is designed for local, metadata-first analysis. The bundled scanner does not make network requests and does not upload reports. An agent may download this public repository, but the scan itself runs on the user's machine. The optional TUI cleanup loop can move an exact user-confirmed path to the local system Trash; that action and its undo record stay on the machine.
3+
Clean Your Data is designed for local, metadata-first analysis. The bundled scanner and GUI server do not make network requests and do not upload reports. An agent may download this public repository, but the scan itself runs on the user's machine. The optional GUI/TUI cleanup loop can move an exact user-confirmed path to the local system Trash; that action and its undo record stay on the machine.
4+
5+
## Local Browser GUI
6+
7+
- The GUI binds only to `127.0.0.1` on a random port by default.
8+
- It validates the loopback Host; its JSON API requires a random per-run token and rejects cross-origin browser requests.
9+
- Public API responses omit absolute local paths and internal `_local_path` fields.
10+
- The browser receives redacted paths, bounded metadata, and only the preview the user explicitly selects.
11+
- Closing the server ends the session. Agent conversations in the browser are not persisted by Clean Your Data.
412

513
## Default Redaction
614

@@ -35,6 +43,14 @@ Avoid sharing reports created with:
3543
- Secrets, tokens, keychains, or credentials.
3644
- Source file contents.
3745

46+
## Optional AI Commands
47+
48+
AI is disabled or configured by the user. Clean Your Data can call an already authenticated Codex CLI or a trusted custom stdin/stdout command. It stores the selected mode and custom-command arguments verbatim in `~/.clean-your-data/ai-config.json`, with user-only file permissions where supported. The GUI reports that a command is configured but does not echo its arguments through the local browser API; `cyd config ai --show` is the explicit terminal view. There is no API-key field: never put credentials in command arguments, and keep them in the provider's environment or credential store.
49+
50+
The opt-in tracer also stores the traced command and its arguments verbatim in the local `~/.clean-your-data/provenance.sqlite3` database. Do not put credentials directly in a traced command line. The state directory and database use user-only permissions where the operating system supports them.
51+
52+
The stdin prompt constructed by Clean Your Data contains a redacted path, name, kind, size, modified time, category, and measurement status. Clean Your Data does not place the selected file preview or file contents in that prompt. The built-in Codex mode uses a read-only, ephemeral sandbox. A custom command still has its own operating-system permissions and may use its own network connection or credential store; configure only a trusted command and review that provider's privacy behavior separately.
53+
3854
## Sharing Reports
3955

4056
Before sharing a report publicly:

0 commit comments

Comments
 (0)