openadapt-desktop 0.2.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.
- openadapt_desktop-0.2.0/.github/workflows/build.yml +106 -0
- openadapt_desktop-0.2.0/.github/workflows/notify-docs.yml +14 -0
- openadapt_desktop-0.2.0/.github/workflows/release.yml +63 -0
- openadapt_desktop-0.2.0/.github/workflows/test.yml +47 -0
- openadapt_desktop-0.2.0/.gitignore +64 -0
- openadapt_desktop-0.2.0/CHANGELOG.md +166 -0
- openadapt_desktop-0.2.0/CLAUDE.md +79 -0
- openadapt_desktop-0.2.0/DESIGN.md +1795 -0
- openadapt_desktop-0.2.0/LICENSE +21 -0
- openadapt_desktop-0.2.0/PKG-INFO +44 -0
- openadapt_desktop-0.2.0/README.md +265 -0
- openadapt_desktop-0.2.0/engine/__init__.py +24 -0
- openadapt_desktop-0.2.0/engine/__main__.py +5 -0
- openadapt_desktop-0.2.0/engine/audit.py +125 -0
- openadapt_desktop-0.2.0/engine/backends/__init__.py +12 -0
- openadapt_desktop-0.2.0/engine/backends/federated.py +117 -0
- openadapt_desktop-0.2.0/engine/backends/huggingface.py +160 -0
- openadapt_desktop-0.2.0/engine/backends/protocol.py +134 -0
- openadapt_desktop-0.2.0/engine/backends/s3.py +173 -0
- openadapt_desktop-0.2.0/engine/backends/wormhole.py +99 -0
- openadapt_desktop-0.2.0/engine/cli.py +482 -0
- openadapt_desktop-0.2.0/engine/config.py +127 -0
- openadapt_desktop-0.2.0/engine/controller.py +309 -0
- openadapt_desktop-0.2.0/engine/db.py +205 -0
- openadapt_desktop-0.2.0/engine/ipc.py +134 -0
- openadapt_desktop-0.2.0/engine/main.py +82 -0
- openadapt_desktop-0.2.0/engine/monitor.py +148 -0
- openadapt_desktop-0.2.0/engine/review.py +199 -0
- openadapt_desktop-0.2.0/engine/scrubber.py +234 -0
- openadapt_desktop-0.2.0/engine/storage_manager.py +277 -0
- openadapt_desktop-0.2.0/engine/upload_manager.py +187 -0
- openadapt_desktop-0.2.0/package.json +17 -0
- openadapt_desktop-0.2.0/pyproject.toml +84 -0
- openadapt_desktop-0.2.0/src/index.html +87 -0
- openadapt_desktop-0.2.0/src/review.html +67 -0
- openadapt_desktop-0.2.0/src/settings.html +51 -0
- openadapt_desktop-0.2.0/src-tauri/Cargo.toml +34 -0
- openadapt_desktop-0.2.0/src-tauri/icons/.gitkeep +0 -0
- openadapt_desktop-0.2.0/src-tauri/src/commands.rs +145 -0
- openadapt_desktop-0.2.0/src-tauri/src/main.rs +41 -0
- openadapt_desktop-0.2.0/src-tauri/src/sidecar.rs +62 -0
- openadapt_desktop-0.2.0/src-tauri/src/tray.rs +34 -0
- openadapt_desktop-0.2.0/src-tauri/tauri.conf.json +46 -0
- openadapt_desktop-0.2.0/tests/__init__.py +0 -0
- openadapt_desktop-0.2.0/tests/conftest.py +53 -0
- openadapt_desktop-0.2.0/tests/test_e2e/__init__.py +1 -0
- openadapt_desktop-0.2.0/tests/test_e2e/conftest.py +19 -0
- openadapt_desktop-0.2.0/tests/test_e2e/test_ipc.py +92 -0
- openadapt_desktop-0.2.0/tests/test_e2e/test_pipeline.py +172 -0
- openadapt_desktop-0.2.0/tests/test_engine/__init__.py +0 -0
- openadapt_desktop-0.2.0/tests/test_engine/test_audit.py +63 -0
- openadapt_desktop-0.2.0/tests/test_engine/test_backends.py +88 -0
- openadapt_desktop-0.2.0/tests/test_engine/test_cli.py +114 -0
- openadapt_desktop-0.2.0/tests/test_engine/test_controller.py +103 -0
- openadapt_desktop-0.2.0/tests/test_engine/test_db.py +121 -0
- openadapt_desktop-0.2.0/tests/test_engine/test_monitor.py +57 -0
- openadapt_desktop-0.2.0/tests/test_engine/test_review_state.py +158 -0
- openadapt_desktop-0.2.0/tests/test_engine/test_scrubber.py +113 -0
- openadapt_desktop-0.2.0/tests/test_engine/test_storage.py +107 -0
- openadapt_desktop-0.2.0/tests/test_engine/test_upload.py +121 -0
- openadapt_desktop-0.2.0/uv.lock +2301 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# CI build + sign + release pipeline
|
|
2
|
+
#
|
|
3
|
+
# This workflow builds the Tauri application with bundled Python sidecar
|
|
4
|
+
# for all supported platforms. On tag push, it creates a GitHub Release
|
|
5
|
+
# with signed installers.
|
|
6
|
+
#
|
|
7
|
+
# See design doc Section 11 for the full CI/CD design.
|
|
8
|
+
#
|
|
9
|
+
# Build matrix:
|
|
10
|
+
# macOS Intel (x86_64) -> DMG + .app bundle
|
|
11
|
+
# macOS Apple Silicon -> DMG + .app bundle
|
|
12
|
+
# Windows x64 -> NSIS installer (.exe)
|
|
13
|
+
# Linux x64 -> AppImage + .deb
|
|
14
|
+
#
|
|
15
|
+
# TODO: This is a placeholder. Actual implementation requires:
|
|
16
|
+
# - Apple Developer certificate for macOS code signing + notarization
|
|
17
|
+
# - Windows Authenticode certificate for code signing
|
|
18
|
+
# - Tauri signing private key (Ed25519) for update verification
|
|
19
|
+
# - PyInstaller build step for the Python sidecar
|
|
20
|
+
|
|
21
|
+
name: Build & Release
|
|
22
|
+
|
|
23
|
+
on:
|
|
24
|
+
push:
|
|
25
|
+
tags: ["v*"]
|
|
26
|
+
pull_request:
|
|
27
|
+
branches: [main]
|
|
28
|
+
|
|
29
|
+
jobs:
|
|
30
|
+
build-python-sidecar:
|
|
31
|
+
name: Build Python Sidecar
|
|
32
|
+
strategy:
|
|
33
|
+
matrix:
|
|
34
|
+
include:
|
|
35
|
+
- os: macos-14
|
|
36
|
+
target: x86_64-apple-darwin
|
|
37
|
+
- os: macos-14
|
|
38
|
+
target: aarch64-apple-darwin
|
|
39
|
+
- os: windows-latest
|
|
40
|
+
target: x86_64-pc-windows-msvc
|
|
41
|
+
- os: ubuntu-22.04
|
|
42
|
+
target: x86_64-unknown-linux-gnu
|
|
43
|
+
runs-on: ${{ matrix.os }}
|
|
44
|
+
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@v4
|
|
47
|
+
|
|
48
|
+
- name: Install uv
|
|
49
|
+
uses: astral-sh/setup-uv@v4
|
|
50
|
+
|
|
51
|
+
- name: Set up Python 3.12
|
|
52
|
+
run: uv python install 3.12
|
|
53
|
+
|
|
54
|
+
- name: Install dependencies
|
|
55
|
+
run: uv sync --extra full
|
|
56
|
+
|
|
57
|
+
# TODO: Build Python sidecar with PyInstaller
|
|
58
|
+
# - name: Build sidecar
|
|
59
|
+
# run: |
|
|
60
|
+
# uv run pip install pyinstaller
|
|
61
|
+
# uv run pyinstaller --onefile --name openadapt-engine engine/main.py
|
|
62
|
+
|
|
63
|
+
# - uses: actions/upload-artifact@v4
|
|
64
|
+
# with:
|
|
65
|
+
# name: sidecar-${{ matrix.target }}
|
|
66
|
+
# path: dist/openadapt-engine*
|
|
67
|
+
|
|
68
|
+
# TODO: Uncomment when Tauri shell is implemented
|
|
69
|
+
# build-tauri:
|
|
70
|
+
# name: Build Tauri App
|
|
71
|
+
# needs: build-python-sidecar
|
|
72
|
+
# strategy:
|
|
73
|
+
# matrix:
|
|
74
|
+
# include:
|
|
75
|
+
# - os: macos-13
|
|
76
|
+
# target: x86_64-apple-darwin
|
|
77
|
+
# - os: macos-14
|
|
78
|
+
# target: aarch64-apple-darwin
|
|
79
|
+
# - os: windows-latest
|
|
80
|
+
# target: x86_64-pc-windows-msvc
|
|
81
|
+
# - os: ubuntu-22.04
|
|
82
|
+
# target: x86_64-unknown-linux-gnu
|
|
83
|
+
# runs-on: ${{ matrix.os }}
|
|
84
|
+
#
|
|
85
|
+
# steps:
|
|
86
|
+
# - uses: actions/checkout@v4
|
|
87
|
+
# - uses: actions/download-artifact@v4
|
|
88
|
+
# with:
|
|
89
|
+
# name: sidecar-${{ matrix.target }}
|
|
90
|
+
# path: src-tauri/binaries/
|
|
91
|
+
# - uses: tauri-apps/tauri-action@v0
|
|
92
|
+
# env:
|
|
93
|
+
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
94
|
+
# TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
|
95
|
+
# # macOS signing
|
|
96
|
+
# APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
|
|
97
|
+
# APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
|
98
|
+
# APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
|
|
99
|
+
# APPLE_ID: ${{ secrets.APPLE_ID }}
|
|
100
|
+
# APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
|
|
101
|
+
# APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
|
102
|
+
# with:
|
|
103
|
+
# tagName: v__VERSION__
|
|
104
|
+
# releaseName: "OpenAdapt Desktop v__VERSION__"
|
|
105
|
+
# releaseBody: "See the changelog for details."
|
|
106
|
+
# releaseDraft: true
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
name: Notify docs
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [main]
|
|
5
|
+
jobs:
|
|
6
|
+
notify:
|
|
7
|
+
runs-on: ubuntu-latest
|
|
8
|
+
steps:
|
|
9
|
+
- uses: peter-evans/repository-dispatch@v3
|
|
10
|
+
with:
|
|
11
|
+
token: ${{ secrets.DOCS_DISPATCH_TOKEN }}
|
|
12
|
+
repository: OpenAdaptAI/openadapt-maintenance
|
|
13
|
+
event-type: repo-updated
|
|
14
|
+
client-payload: '{"repo": "${{ github.repository }}", "sha": "${{ github.sha }}"}'
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
name: Release and PyPI Publish
|
|
2
|
+
|
|
3
|
+
# Requires ADMIN_TOKEN secret (GitHub PAT with repo scope) to push release
|
|
4
|
+
# commits to protected branches. Without it, the tag gets created but the
|
|
5
|
+
# version bump commit is rejected by branch protection, orphaning the tag.
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
push:
|
|
9
|
+
branches:
|
|
10
|
+
- main
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
release:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
concurrency: release
|
|
16
|
+
permissions:
|
|
17
|
+
id-token: write
|
|
18
|
+
contents: write
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
- name: Checkout repository
|
|
22
|
+
uses: actions/checkout@v4
|
|
23
|
+
with:
|
|
24
|
+
fetch-depth: 0
|
|
25
|
+
token: ${{ secrets.ADMIN_TOKEN }}
|
|
26
|
+
|
|
27
|
+
- name: Check if should skip
|
|
28
|
+
id: check_skip
|
|
29
|
+
run: |
|
|
30
|
+
if [ "$(git log -1 --pretty=format:'%an')" = "semantic-release" ]; then
|
|
31
|
+
echo "skip=true" >> $GITHUB_OUTPUT
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
- name: Set up Python
|
|
35
|
+
if: steps.check_skip.outputs.skip != 'true'
|
|
36
|
+
uses: actions/setup-python@v5
|
|
37
|
+
with:
|
|
38
|
+
python-version: '3.12'
|
|
39
|
+
|
|
40
|
+
- name: Install uv
|
|
41
|
+
if: steps.check_skip.outputs.skip != 'true'
|
|
42
|
+
uses: astral-sh/setup-uv@v4
|
|
43
|
+
|
|
44
|
+
- name: Python Semantic Release
|
|
45
|
+
if: steps.check_skip.outputs.skip != 'true'
|
|
46
|
+
id: release
|
|
47
|
+
uses: python-semantic-release/python-semantic-release@v9.15.2
|
|
48
|
+
with:
|
|
49
|
+
github_token: ${{ secrets.ADMIN_TOKEN }}
|
|
50
|
+
|
|
51
|
+
- name: Build package
|
|
52
|
+
if: steps.check_skip.outputs.skip != 'true' && steps.release.outputs.released == 'true'
|
|
53
|
+
run: uv build
|
|
54
|
+
|
|
55
|
+
- name: Publish to PyPI
|
|
56
|
+
if: steps.check_skip.outputs.skip != 'true' && steps.release.outputs.released == 'true'
|
|
57
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
58
|
+
|
|
59
|
+
- name: Publish to GitHub Releases
|
|
60
|
+
if: steps.check_skip.outputs.skip != 'true' && steps.release.outputs.released == 'true'
|
|
61
|
+
uses: python-semantic-release/publish-action@v9.15.2
|
|
62
|
+
with:
|
|
63
|
+
github_token: ${{ secrets.ADMIN_TOKEN }}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
name: Test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test-python:
|
|
11
|
+
name: Python Engine Tests
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
os: [macos-latest, windows-latest, ubuntu-latest]
|
|
15
|
+
python-version: ["3.11", "3.12"]
|
|
16
|
+
runs-on: ${{ matrix.os }}
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
|
|
21
|
+
- name: Install uv
|
|
22
|
+
uses: astral-sh/setup-uv@v4
|
|
23
|
+
|
|
24
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
25
|
+
run: uv python install ${{ matrix.python-version }}
|
|
26
|
+
|
|
27
|
+
- name: Install dependencies
|
|
28
|
+
run: uv sync --extra dev
|
|
29
|
+
|
|
30
|
+
- name: Lint
|
|
31
|
+
run: uv run ruff check engine/ tests/
|
|
32
|
+
|
|
33
|
+
- name: Run tests
|
|
34
|
+
run: uv run pytest tests/ -v
|
|
35
|
+
|
|
36
|
+
# TODO: Add Rust/Tauri tests when implemented
|
|
37
|
+
# test-tauri:
|
|
38
|
+
# name: Tauri Build Check
|
|
39
|
+
# strategy:
|
|
40
|
+
# matrix:
|
|
41
|
+
# os: [macos-latest, windows-latest, ubuntu-latest]
|
|
42
|
+
# runs-on: ${{ matrix.os }}
|
|
43
|
+
# steps:
|
|
44
|
+
# - uses: actions/checkout@v4
|
|
45
|
+
# - uses: dtolnay/rust-toolchain@stable
|
|
46
|
+
# - name: Check Rust compilation
|
|
47
|
+
# run: cd src-tauri && cargo check
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
*.egg-info/
|
|
7
|
+
*.egg
|
|
8
|
+
dist/
|
|
9
|
+
build/
|
|
10
|
+
.eggs/
|
|
11
|
+
*.whl
|
|
12
|
+
.venv/
|
|
13
|
+
venv/
|
|
14
|
+
.uv/
|
|
15
|
+
|
|
16
|
+
# Rust / Cargo
|
|
17
|
+
src-tauri/target/
|
|
18
|
+
**/*.rs.bk
|
|
19
|
+
|
|
20
|
+
# Node.js
|
|
21
|
+
node_modules/
|
|
22
|
+
npm-debug.log*
|
|
23
|
+
yarn-debug.log*
|
|
24
|
+
yarn-error.log*
|
|
25
|
+
|
|
26
|
+
# Tauri
|
|
27
|
+
src-tauri/target/
|
|
28
|
+
src-tauri/WixTools/
|
|
29
|
+
src-tauri/icons/*.ico
|
|
30
|
+
src-tauri/icons/*.icns
|
|
31
|
+
|
|
32
|
+
# IDE
|
|
33
|
+
.vscode/
|
|
34
|
+
.idea/
|
|
35
|
+
*.swp
|
|
36
|
+
*.swo
|
|
37
|
+
*~
|
|
38
|
+
.DS_Store
|
|
39
|
+
|
|
40
|
+
# Environment
|
|
41
|
+
.env
|
|
42
|
+
.env.local
|
|
43
|
+
.env.*.local
|
|
44
|
+
|
|
45
|
+
# Testing
|
|
46
|
+
.pytest_cache/
|
|
47
|
+
.coverage
|
|
48
|
+
htmlcov/
|
|
49
|
+
.mypy_cache/
|
|
50
|
+
|
|
51
|
+
# PyInstaller
|
|
52
|
+
*.spec
|
|
53
|
+
|
|
54
|
+
# Captures (user data, never committed)
|
|
55
|
+
captures/
|
|
56
|
+
archive/
|
|
57
|
+
tombstones/
|
|
58
|
+
|
|
59
|
+
# Audit logs
|
|
60
|
+
audit.jsonl
|
|
61
|
+
|
|
62
|
+
# OS
|
|
63
|
+
Thumbs.db
|
|
64
|
+
Desktop.ini
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# CHANGELOG
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
## v0.2.0 (2026-03-04)
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
- Add `openadapt doctor` command and fix audit/wormhole bugs
|
|
9
|
+
([#8](https://github.com/OpenAdaptAI/openadapt-desktop/pull/8),
|
|
10
|
+
[`f5cb841`](https://github.com/OpenAdaptAI/openadapt-desktop/commit/f5cb841acd70dbc3c57ba752e8bd3f6f8763adde))
|
|
11
|
+
|
|
12
|
+
Add diagnostic command that checks all dependencies and configuration: - Python version, data
|
|
13
|
+
directory writability, database connectivity - Core deps: openadapt-capture, openadapt-privacy,
|
|
14
|
+
psutil - Optional deps: boto3, huggingface_hub, magic-wormhole - Backend credentials (S3 keys, HF
|
|
15
|
+
token) when configured - Shows actionable install instructions for missing dependencies
|
|
16
|
+
|
|
17
|
+
Bug fixes: - audit.py: create parent directory before writing log entries - wormhole.py: use
|
|
18
|
+
subprocess.run() instead of Popen to await completion and capture exit code properly
|
|
19
|
+
|
|
20
|
+
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
## v0.1.1 (2026-03-04)
|
|
24
|
+
|
|
25
|
+
### Bug Fixes
|
|
26
|
+
|
|
27
|
+
- Replace deprecated macos-13 runner with macos-14
|
|
28
|
+
([#7](https://github.com/OpenAdaptAI/openadapt-desktop/pull/7),
|
|
29
|
+
[`bac0856`](https://github.com/OpenAdaptAI/openadapt-desktop/commit/bac0856958dd2c6c472253f47d0a83be5453f8ba))
|
|
30
|
+
|
|
31
|
+
* fix: replace deprecated macos-13 runner with macos-14 in build workflow
|
|
32
|
+
|
|
33
|
+
macos-13 runners have been deprecated by GitHub Actions, causing the Build Python Sidecar job to
|
|
34
|
+
fail on every PR. Both macOS targets now use macos-14 (Apple Silicon), which supports x86_64
|
|
35
|
+
builds via Rosetta.
|
|
36
|
+
|
|
37
|
+
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
38
|
+
|
|
39
|
+
* fix: flaky concurrent reads test and deprecated macos-13 runner
|
|
40
|
+
|
|
41
|
+
- test_concurrent_reads: use separate IndexDB connections per thread (WAL concurrent reads require
|
|
42
|
+
separate connections, not a shared one) - build.yml: replace macos-13 with macos-14 (deprecated
|
|
43
|
+
runner)
|
|
44
|
+
|
|
45
|
+
---------
|
|
46
|
+
|
|
47
|
+
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
|
|
48
|
+
|
|
49
|
+
### Continuous Integration
|
|
50
|
+
|
|
51
|
+
- Add automated release workflow with python-semantic-release
|
|
52
|
+
([#6](https://github.com/OpenAdaptAI/openadapt-desktop/pull/6),
|
|
53
|
+
[`1a3c4b8`](https://github.com/OpenAdaptAI/openadapt-desktop/commit/1a3c4b8c81c3a6ddad9e0f2ee1aca76c079a1c5e))
|
|
54
|
+
|
|
55
|
+
Add release.yml workflow triggered on push to main that: - Runs python-semantic-release v9.15.2 to
|
|
56
|
+
determine version bumps from conventional commit messages (feat=minor, fix/perf=patch) - Builds
|
|
57
|
+
with uv and publishes to PyPI (trusted publishing) - Creates GitHub releases with changelogs -
|
|
58
|
+
Uses ADMIN_TOKEN to push through branch protection - Skips semantic-release's own commits to
|
|
59
|
+
prevent infinite loops
|
|
60
|
+
|
|
61
|
+
Also adds semantic_release config to pyproject.toml with version_toml + version_variables for dual
|
|
62
|
+
version tracking (pyproject.toml + engine/__init__.py).
|
|
63
|
+
|
|
64
|
+
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
## v0.1.0 (2026-03-03)
|
|
68
|
+
|
|
69
|
+
### Bug Fixes
|
|
70
|
+
|
|
71
|
+
- Add hatch build config, fix lint errors and workflow ordering
|
|
72
|
+
([#1](https://github.com/OpenAdaptAI/openadapt-desktop/pull/1),
|
|
73
|
+
[`e899e41`](https://github.com/OpenAdaptAI/openadapt-desktop/commit/e899e412cdd0fa4f6999a10e077496b95bab6822))
|
|
74
|
+
|
|
75
|
+
- Add [tool.hatch.build.targets.wheel] packages = ["engine"] so hatchling can find the Python
|
|
76
|
+
package - Fix ruff import sorting in test_backends.py and test_scrubber.py - Remove unused
|
|
77
|
+
StorageBackend import from test_backends.py - Move Xvfb setup step before test run in CI workflow
|
|
78
|
+
- Add uv.lock for reproducible builds
|
|
79
|
+
|
|
80
|
+
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
|
|
81
|
+
|
|
82
|
+
- Remove premature screenshot generation and Playwright UI tests
|
|
83
|
+
([#3](https://github.com/OpenAdaptAI/openadapt-desktop/pull/3),
|
|
84
|
+
[`2e6c874`](https://github.com/OpenAdaptAI/openadapt-desktop/commit/2e6c874aea15ccbd96a42ba42cf547b06185b218))
|
|
85
|
+
|
|
86
|
+
Remove: - screenshots/ (fake screenshots of non-functional placeholder HTML) -
|
|
87
|
+
scripts/generate_screenshots.py (generates screenshots of stubs) - tests/test_e2e/test_ui.py
|
|
88
|
+
(Playwright tests against placeholder HTML) - tests/test_e2e/test_screenshots.py (tests for the
|
|
89
|
+
screenshot generator) - pytest-playwright dependency - Xvfb CI step
|
|
90
|
+
|
|
91
|
+
Keep: - tests/test_e2e/test_ipc.py (tests real IPC protocol code) - All engine tests (test real
|
|
92
|
+
business logic) - README (without screenshot section) - CLAUDE.md
|
|
93
|
+
|
|
94
|
+
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
|
|
95
|
+
|
|
96
|
+
### Features
|
|
97
|
+
|
|
98
|
+
- Add docs sync trigger ([#4](https://github.com/OpenAdaptAI/openadapt-desktop/pull/4),
|
|
99
|
+
[`62d3da2`](https://github.com/OpenAdaptAI/openadapt-desktop/commit/62d3da207e7cc2c1b16c2cf0851add5eb3532547))
|
|
100
|
+
|
|
101
|
+
- Add README, screenshots, e2e tests, and automated screenshot generation
|
|
102
|
+
([#2](https://github.com/OpenAdaptAI/openadapt-desktop/pull/2),
|
|
103
|
+
[`fa00a22`](https://github.com/OpenAdaptAI/openadapt-desktop/commit/fa00a22d95391dcc1f7ddaf337316e000ab28d22))
|
|
104
|
+
|
|
105
|
+
* docs: add README and CLAUDE.md
|
|
106
|
+
|
|
107
|
+
- Comprehensive README with architecture, state machine, storage backends, project structure,
|
|
108
|
+
configuration reference, and development guide - CLAUDE.md with project conventions and file map
|
|
109
|
+
|
|
110
|
+
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
111
|
+
|
|
112
|
+
* feat: add screenshots, e2e tests, and automated screenshot generation
|
|
113
|
+
|
|
114
|
+
- Add Playwright-based UI tests for all HTML pages (dashboard, review, settings) - Add IPC protocol
|
|
115
|
+
e2e tests (response format, error handling, event format) - Add automated screenshot generation
|
|
116
|
+
script with mock data injection - Generate 4 documentation screenshots (idle, recording, review,
|
|
117
|
+
settings) - Add screenshots to README with raw.githubusercontent.com URLs - Add pytest-playwright
|
|
118
|
+
to dev dependencies - Update CI to install Playwright browsers - Update ruff config to allow long
|
|
119
|
+
lines in scripts/ (inline HTML)
|
|
120
|
+
|
|
121
|
+
52 tests passing (26 engine + 7 IPC + 5 screenshot + 11 UI + 3 viewport)
|
|
122
|
+
|
|
123
|
+
---------
|
|
124
|
+
|
|
125
|
+
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
|
|
126
|
+
|
|
127
|
+
- Implement end-to-end engine with CLI
|
|
128
|
+
([#5](https://github.com/OpenAdaptAI/openadapt-desktop/pull/5),
|
|
129
|
+
[`400df35`](https://github.com/OpenAdaptAI/openadapt-desktop/commit/400df3577008edc2b0fd21afe4ed98a8d8e31155))
|
|
130
|
+
|
|
131
|
+
* feat: implement end-to-end engine with CLI
|
|
132
|
+
|
|
133
|
+
Replace all NotImplementedError stubs with working implementations across the entire Python engine.
|
|
134
|
+
The full pipeline now works: record -> scrub -> review -> upload.
|
|
135
|
+
|
|
136
|
+
New files: - engine/db.py: SQLite index database (WAL mode, captures + upload_jobs) - engine/cli.py:
|
|
137
|
+
13-command argparse CLI entry point - engine/__main__.py: python -m engine support -
|
|
138
|
+
tests/test_engine/test_db.py: 11 database tests - tests/test_engine/test_upload.py: 7 upload
|
|
139
|
+
manager tests - tests/test_engine/test_monitor.py: 5 health monitor tests -
|
|
140
|
+
tests/test_engine/test_cli.py: 8 CLI tests - tests/test_e2e/test_pipeline.py: 3 end-to-end
|
|
141
|
+
pipeline tests
|
|
142
|
+
|
|
143
|
+
Implemented modules: - controller.py: recording lifecycle with openadapt-capture, crash recovery -
|
|
144
|
+
scrubber.py: regex PII scrubbing (email/CC/SSN/phone/IP), Presidio fallback - review.py:
|
|
145
|
+
DB-persisted egress gating with audit logging - storage_manager.py: hot/warm/cold tiers, tar.gz
|
|
146
|
+
archival, cleanup - upload_manager.py: persistent queue, egress checks, multi-backend dispatch -
|
|
147
|
+
monitor.py: memory + disk monitoring with daemon threads - backends/s3.py: boto3
|
|
148
|
+
upload/delete/list/verify - backends/huggingface.py: huggingface_hub upload/delete/list/verify -
|
|
149
|
+
backends/wormhole.py: subprocess-based wormhole send
|
|
150
|
+
|
|
151
|
+
Test results: 106 passed, 0 skipped (up from 33 passed, 17 skipped)
|
|
152
|
+
|
|
153
|
+
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
154
|
+
|
|
155
|
+
* fix: use uv run prefix in README Quick Start
|
|
156
|
+
|
|
157
|
+
---------
|
|
158
|
+
|
|
159
|
+
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
|
|
160
|
+
|
|
161
|
+
- Initial repo scaffold
|
|
162
|
+
([`b14c32e`](https://github.com/OpenAdaptAI/openadapt-desktop/commit/b14c32e4fe53e8fd41fa52848236a3b646e2af74))
|
|
163
|
+
|
|
164
|
+
Tauri 2.x shell + Python sidecar architecture. See DESIGN.md for comprehensive design document.
|
|
165
|
+
|
|
166
|
+
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Claude Code Instructions for openadapt-desktop
|
|
2
|
+
|
|
3
|
+
## MANDATORY: Branches and Pull Requests
|
|
4
|
+
|
|
5
|
+
**NEVER push directly to main. ALWAYS use feature branches and pull requests.**
|
|
6
|
+
|
|
7
|
+
1. Create a feature branch: `git checkout -b feat/description` or `fix/description`
|
|
8
|
+
2. Make commits on the branch
|
|
9
|
+
3. Push the branch: `git push -u origin branch-name`
|
|
10
|
+
4. Create a PR: `gh pr create --title "..." --body "..."`
|
|
11
|
+
5. Only merge via PR (never `git push origin main`)
|
|
12
|
+
|
|
13
|
+
### PR Titles MUST Use Conventional Commit Format
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
fix: short description -> patch bump (0.0.x)
|
|
17
|
+
feat: short description -> minor bump (0.x.0)
|
|
18
|
+
fix(scope): short description -> patch bump with scope
|
|
19
|
+
feat!: breaking change -> major bump (x.0.0)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**Types**: feat, fix, docs, style, refactor, perf, test, chore, ci
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Overview
|
|
27
|
+
|
|
28
|
+
Cross-platform desktop app for continuous screen recording and AI training data collection. Built with Tauri 2.x (Rust shell) + Python sidecar (recording engine).
|
|
29
|
+
|
|
30
|
+
## Quick Start
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
uv sync --extra dev
|
|
34
|
+
uv run pytest tests/ -v
|
|
35
|
+
uv run ruff check engine/ tests/
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Architecture
|
|
39
|
+
|
|
40
|
+
Two-process model:
|
|
41
|
+
- **Tauri shell** (Rust + WebView): system tray, native window, IPC dispatch
|
|
42
|
+
- **Python engine** (sidecar): recording, scrubbing, storage, upload
|
|
43
|
+
|
|
44
|
+
Communication via JSON-over-stdin/stdout IPC protocol (see DESIGN.md Appendix B).
|
|
45
|
+
|
|
46
|
+
## Key Design Decisions
|
|
47
|
+
|
|
48
|
+
1. **Raw-then-review scrubbing**: Recordings saved raw to disk. Scrubbing is a separate user-reviewed step. `check_egress_allowed()` gates ALL outbound paths.
|
|
49
|
+
2. **Build-time trust**: Tauri Cargo.toml feature flags physically exclude upload code. Enterprise binary verifiable with `strings`.
|
|
50
|
+
3. **Multiple storage backends**: StorageBackend protocol in `engine/backends/protocol.py`. All backends conform to the same interface.
|
|
51
|
+
4. **Network audit logging**: Every outbound request logged to `audit.jsonl` (JSONL format).
|
|
52
|
+
|
|
53
|
+
## File Map
|
|
54
|
+
|
|
55
|
+
| File | Purpose |
|
|
56
|
+
|------|---------|
|
|
57
|
+
| `engine/controller.py` | Recording lifecycle (start/stop/pause) |
|
|
58
|
+
| `engine/review.py` | Upload review state machine (the egress gate) |
|
|
59
|
+
| `engine/scrubber.py` | PII scrubbing orchestration |
|
|
60
|
+
| `engine/config.py` | Settings (pydantic-settings, OPENADAPT_ prefix) |
|
|
61
|
+
| `engine/audit.py` | Network audit logger |
|
|
62
|
+
| `engine/backends/protocol.py` | StorageBackend protocol definition |
|
|
63
|
+
| `engine/backends/s3.py` | S3/R2/MinIO backend |
|
|
64
|
+
| `src-tauri/src/commands.rs` | IPC commands (13 endpoints) |
|
|
65
|
+
| `src-tauri/src/main.rs` | Tauri entry point |
|
|
66
|
+
| `DESIGN.md` | Comprehensive design document (v2.0, 1800 lines) |
|
|
67
|
+
|
|
68
|
+
## Running Tests
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
uv run pytest tests/ -v # all tests
|
|
72
|
+
uv run ruff check engine/ tests/ # lint
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Dependencies
|
|
76
|
+
|
|
77
|
+
- Python: `openadapt-capture` (recording), `openadapt-privacy` (scrubbing), `pydantic-settings`
|
|
78
|
+
- Rust: `tauri`, `tauri-plugin-shell`, `tauri-plugin-notification`, `tauri-plugin-updater`
|
|
79
|
+
- Optional: `boto3` (S3), `huggingface_hub`, `flwr` + `torch` (federated)
|