personal memory agent
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Consolidate all dependencies into main install

- Use PEP 508 environment markers for platform-specific packages:
- PyGObject, dbus-next: Linux only
- pyobjc-core, pyobjc-framework-Cocoa, pyobjc-framework-Quartz: macOS only
- Move all [full] and [dev] optional dependencies to main dependencies
- Remove [project.optional-dependencies] section entirely
- Simplify Makefile to single .installed marker, remove unused aliases
- Update AGENTS.md to reflect simplified installation

Now `pip install -e .` works on any platform with all deps included.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

+45 -69
+3 -4
AGENTS.md
··· 198 198 ## Dependencies Management 199 199 200 200 * **Minimize Dependencies**: Use standard library when possible 201 - * **Production**: Add to `dependencies` in `pyproject.toml` 202 - * **Development**: Add to `[project.optional-dependencies]` dev section 203 - * **Installation**: `make install` (basic), `make dev` (with dev tools), `make full` (all optional) 201 + * **All Dependencies**: Add to `dependencies` in `pyproject.toml` 202 + * **Installation**: `make install` or `pip install -e .` (includes everything) 204 203 205 204 --- 206 205 ··· 220 219 ### Common Commands 221 220 ```bash 222 221 # Development setup 223 - make dev # Install with dev dependencies 222 + make install # Install package (includes all deps) 224 223 make test # Run unit tests 225 224 make format # Format code 226 225 make lint # Check code quality
+25 -48
Makefile
··· 1 1 # solstone Makefile 2 2 # Python-based AI-driven desktop journaling toolkit 3 3 4 - .PHONY: install deps test test-apps test-app lint format check clean dev full all 4 + .PHONY: install test test-apps test-app lint format check clean all 5 5 6 6 # Default target - install package in editable mode 7 7 all: install 8 8 9 - # Marker files to track dependency installation 10 - .deps-installed: pyproject.toml 11 - @echo "Installing test/dev dependencies..." 12 - pip install -e .[dev] 13 - @touch .deps-installed 14 - 15 - .package-installed: pyproject.toml 9 + # Marker file to track installation 10 + .installed: pyproject.toml 16 11 @echo "Installing package in editable mode..." 17 12 pip install -e . 18 - @touch .package-installed 13 + @touch .installed 19 14 20 - .full-installed: pyproject.toml 21 - @echo "Installing package with all optional dependencies..." 22 - pip install -e .[full,dev] 23 - @touch .full-installed 24 - 25 - # Install package in editable mode (default) 26 - install: .package-installed 27 - 28 - # Install only test/dev dependencies 29 - deps: .deps-installed 30 - 31 - # Install package with all optional dependencies 32 - full: .full-installed 33 - 34 - # Install package with dev dependencies 35 - dev: pyproject.toml 36 - @echo "Installing package with dev dependencies..." 37 - pip install -e .[dev] 38 - @touch .package-installed 39 - @touch .deps-installed 15 + # Install package in editable mode 16 + install: .installed 40 17 41 18 # Test environment - use fixtures journal for all tests 42 19 TEST_ENV = JOURNAL_PATH=fixtures/journal 43 20 44 21 # Run core tests (excluding integration and app tests) 45 - test: .deps-installed 22 + test: .installed 46 23 @echo "Running core tests..." 47 24 $(TEST_ENV) pytest tests/ -q --cov=. --ignore=tests/integration 48 25 49 26 # Run core tests with verbose output 50 - test-verbose: .deps-installed 27 + test-verbose: .installed 51 28 @echo "Running core tests with verbose output..." 52 29 $(TEST_ENV) pytest tests/ -v --cov=. --cov-report=term-missing --ignore=tests/integration 53 30 54 31 # Run app tests 55 - test-apps: .deps-installed 32 + test-apps: .installed 56 33 @echo "Running app tests..." 57 34 $(TEST_ENV) pytest apps/ -q 58 35 59 36 # Run app tests with verbose output 60 - test-apps-verbose: .deps-installed 37 + test-apps-verbose: .installed 61 38 @echo "Running app tests with verbose output..." 62 39 $(TEST_ENV) pytest apps/ -v 63 40 64 41 # Run specific app tests 65 - test-app: .deps-installed 42 + test-app: .installed 66 43 @if [ -z "$(APP)" ]; then \ 67 44 echo "Usage: make test-app APP=<app_name>"; \ 68 45 echo "Example: make test-app APP=todos"; \ ··· 71 48 $(TEST_ENV) pytest apps/$(APP)/tests/ -v 72 49 73 50 # Run specific test file or pattern 74 - test-only: .deps-installed 51 + test-only: .installed 75 52 @if [ -z "$(TEST)" ]; then \ 76 53 echo "Usage: make test-only TEST=<test_file_or_pattern>"; \ 77 54 echo "Example: make test-only TEST=tests/test_utils.py"; \ ··· 81 58 $(TEST_ENV) pytest $(TEST) 82 59 83 60 # Run integration tests 84 - test-integration: .deps-installed 61 + test-integration: .installed 85 62 @echo "Running integration tests..." 86 63 $(TEST_ENV) pytest tests/integration/ -v --tb=short 87 64 88 65 # Run integration tests with coverage 89 - test-integration-cov: .deps-installed 66 + test-integration-cov: .installed 90 67 @echo "Running integration tests with coverage..." 91 68 $(TEST_ENV) pytest tests/integration/ -v --cov=. --cov-report=term-missing 92 69 93 70 # Run specific integration test 94 - test-integration-only: .deps-installed 71 + test-integration-only: .installed 95 72 @if [ -z "$(TEST)" ]; then \ 96 73 echo "Usage: make test-integration-only TEST=<test_file_or_pattern>"; \ 97 74 echo "Example: make test-integration-only TEST=test_api.py"; \ ··· 100 77 $(TEST_ENV) pytest tests/integration/$(TEST) 101 78 102 79 # Run all tests (core + apps + integration) 103 - test-all: .deps-installed 80 + test-all: .installed 104 81 @echo "Running all tests (core + apps + integration)..." 105 82 $(TEST_ENV) pytest tests/ -v --cov=. && $(TEST_ENV) pytest apps/ -v --cov=. --cov-append 106 83 107 84 # Auto-format code 108 - format: .deps-installed 85 + format: .installed 109 86 @echo "Formatting code with black and isort..." 110 87 black . 111 88 isort . 112 89 113 90 # Run all linting and formatting checks 114 - lint: .deps-installed 91 + lint: .installed 115 92 @echo "Running linting checks..." 116 93 @echo "=== Running black (check mode) ===" 117 94 black --check . || true ··· 126 103 mypy . || true 127 104 128 105 # Run only flake8 linting 129 - lint-flake8: .deps-installed 106 + lint-flake8: .installed 130 107 flake8 . 131 108 132 109 # Run only black formatting check 133 - lint-black: .deps-installed 110 + lint-black: .installed 134 111 black --check . 135 112 136 113 # Run only isort import check 137 - lint-isort: .deps-installed 114 + lint-isort: .installed 138 115 isort --check-only . 139 116 140 117 # Run type checking with mypy 141 - check: .deps-installed 118 + check: .installed 142 119 @echo "Running type checking with mypy..." 143 120 mypy . 144 121 ··· 151 128 find . -type f -name "*.pyc" -delete 152 129 find . -type f -name "*.pyo" -delete 153 130 find . -type f -name ".DS_Store" -delete 154 - rm -f .deps-installed .package-installed .full-installed 131 + rm -f .installed 155 132 156 133 # Clean everything and reinstall 157 134 clean-install: clean install ··· 170 147 ptw -- -q 171 148 172 149 # Generate coverage report (core + apps, excluding core integration tests) 173 - coverage: .deps-installed 150 + coverage: .installed 174 151 $(TEST_ENV) pytest tests/ --cov=. --cov-report=html --cov-report=term --ignore=tests/integration 175 152 $(TEST_ENV) pytest apps/ --cov=. --cov-report=html --cov-report=term --cov-append 176 153 @echo "Coverage report generated in htmlcov/index.html" ··· 179 156 update-deps: 180 157 @echo "Updating dependencies to latest versions..." 181 158 pip install --upgrade pip setuptools wheel 182 - pip install --upgrade -e .[dev] 159 + pip install --upgrade -e . 183 160 184 161 # Show installed package versions 185 162 versions:
+2 -2
observe/macos/TODO.md
··· 12 12 ## Phase 4: Testing & Integration 13 13 14 14 ### 4.1 Manual Testing 15 - - [ ] Install PyObjC dependencies: `pip install -e ".[macos]"` 15 + - [x] Install PyObjC dependencies (now automatic via `pip install -e .`) 16 16 - [ ] Build and install sck-cli to PATH 17 17 - [ ] Run observer: `observe-macos --interval 60` (use 1 min for faster testing) 18 18 - [ ] Verify files created in journal directory ··· 74 74 75 75 ### Dependencies 76 76 - sck-cli must be built and available in PATH (or specified via --sck-cli-path) 77 - - PyObjC frameworks required: core, Cocoa, Quartz (for activity detection) 77 + - PyObjC frameworks (core, Cocoa, Quartz) - installed automatically on macOS via pip 78 78 - observe.utils.assign_monitor_positions for position label computation
+15 -15
pyproject.toml
··· 17 17 "Intended Audience :: Developers", 18 18 "License :: OSI Approved :: GNU Affero General Public License v3", 19 19 "Operating System :: POSIX :: Linux", 20 + "Operating System :: MacOS :: MacOS X", 20 21 "Programming Language :: Python :: 3", 21 22 "Programming Language :: Python :: 3.10", 22 23 "Programming Language :: Python :: 3.11", ··· 42 43 "timefhuman", 43 44 "Pillow", 44 45 "numpy", 45 - "PyGObject", 46 - "dbus-next", 46 + # Linux-only: GNOME/GTK integration 47 + "PyGObject; sys_platform == 'linux'", 48 + "dbus-next; sys_platform == 'linux'", 49 + # macOS-only: PyObjC for activity detection 50 + "pyobjc-core; sys_platform == 'darwin'", 51 + "pyobjc-framework-Cocoa; sys_platform == 'darwin'", 52 + "pyobjc-framework-Quartz; sys_platform == 'darwin'", 47 53 "desktop-notifier", 48 54 "av", 49 55 ··· 58 64 "psutil", 59 65 "tzlocal", 60 66 "python-slugify", 61 - ] 62 67 63 - [project.optional-dependencies] 64 - full = [ 68 + # Audio processing 65 69 "soundcard", 66 70 "soundfile", 67 71 "pyannote.audio>=4,<5", 68 - "scipy", 72 + "scipy", # Required by pyannote internals 73 + 74 + # Media processing 69 75 "opencv-python", 70 - "PyGObject", 71 76 "watchdog", 77 + 78 + # Additional AI SDKs 72 79 "claude-agent-sdk>=0.1.0", 73 - ] 74 80 75 - macos = [ 76 - "pyobjc-core", 77 - "pyobjc-framework-Cocoa", 78 - "pyobjc-framework-Quartz", 79 - ] 80 - 81 - dev = [ 81 + # Development tools 82 82 "black", 83 83 "flake8", 84 84 "isort",