Commit graph

115 commits

Author SHA1 Message Date
autocommit
2bfd968f1a docs(docs): 📝 Add branch synchronization requirements and failure modes documentation to CLAUDE.md
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-09 19:22:47 -07:00
autocommit
c40872e476 docs(docs): 📝 Add detailed architecture documentation for multi-host sync between plum and apricot hosts, explaining roles, workflow, and technical specifics
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-09 03:25:53 -07:00
autocommit
d2a36929d0 deps-upgrade(config): ⬆️ Update dependency versions in pyproject.toml for security and compatibility improvements
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-11 09:02:38 -07:00
autocommit
0694372a0f test(daemon): Add test cases for task-based routing behavior in daemon
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-11 08:56:36 -07:00
autocommit
c59be053f0 refactor(llm): ♻️ Introduce task-based routing logic in MultiModelLlamaClient for dynamic model selection
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-11 08:56:36 -07:00
autocommit
a1b4748f45 deps-upgrade(deps): ⬆️ Update dependencies in pyproject.toml for security, compatibility, and performance improvements
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-02 18:05:38 -07:00
autocommit
7cc96ae1f8 chore(auto-commit-service): 🔧 remove 'project-buildspace' from discovery patterns exclusion in config.py
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-02 18:03:19 -07:00
autocommit
4768bd36eb deps-upgrade(deps): ⬆️ Update core dependencies in pyproject.toml to latest stable versions
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-20 19:08:33 -07:00
autocommit
378735b2dc refactor(auto-commit-service/cli): ♻️ Replace LlamaCommitClient with MultiModelLlamaClient to enable multi-LLM model support in CLI tool
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-20 18:53:17 -07:00
autocommit
8d2227623d deps-upgrade(deps): ⬆️ Update dependencies to latest stable versions in pyproject.toml
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-19 00:31:14 -07:00
autocommit
08f25ce5dd feat(git): Add --no-verify flag to Git push operations to bypass pre-push hooks for automated pipelines
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-19 00:25:06 -07:00
autocommit
5fbb2b9686 deps: simplify to default pypi.black.local index
pypi.black.local nginx routing was fixed to forward /simple/lilith-* to
Forgejo PyPI and everything else to pypiserver (which falls back to
pypi.org). With that in place, no explicit index config is needed in
pyproject.toml — uv picks up the default via ~/.config/uv/uv.toml.

Drops:
- [[tool.uv.index]] forgejo — no longer required
- [tool.uv.sources] — same, not needed per-package

Requires host uv.toml to set default index = http://pypi.black.local/simple/
(now configured on apricot).
2026-04-18 13:09:53 -07:00
autocommit
f503fcd8b0 deps: resolve lilith packages from Forgejo PyPI registry
Replaces local-path sources with explicit Forgejo index so uv sync works
on any host with credentials to http://forge.nasty.sh/api/packages/lilith/pypi/.

Published all 5 transitive lilith packages as a prerequisite:
- lilith-pipeline-framework 1.0.0
- lilith-service-fastapi-bootstrap 4.2.0
- lilith-queue-cli 0.1.3
- lilith-service-addresses 1.1.2
- lilith-model-boss 4.0.0

Credentials required at install time: UV_INDEX_FORGEJO_USERNAME and
UV_INDEX_FORGEJO_PASSWORD env vars (or equivalent uv.toml / .netrc entry).
The public pypi.black.local redirect only proxies pypi.org, not Forgejo,
so the explicit index config in this file is load-bearing.

Verified: rm -rf .venv && uv sync --extra dev produces a working install
with the new rebase-recovery code importing cleanly. commits.service
restarted successfully on the fresh venv.
2026-04-18 12:19:38 -07:00
autocommit
a5729ff2b4 deps: make uv sync work from local workspace sources
- Drop unused lilith-auto-commit-pipeline dep (no imports in codebase)
- Rename lilith-fastapi-service-base → lilith-service-fastapi-bootstrap
  (the former was the old name; code imports the new module)
- Move lilith-model-boss to required (runtime-loaded by llm/multi_model_client)
- Declare transitive workspace deps directly (lilith-queue-cli,
  lilith-service-addresses) so tool.uv.sources path overrides reach them
- Add [tool.uv.sources] pointing at local package checkouts so
  uv sync resolves without any packages being published to pypi.black.local

Verified: fresh uv sync builds a clean venv from scratch, imports the new
rebase-recovery code paths, and commits.service restarts cleanly.
2026-04-18 12:09:57 -07:00
autocommit
f70c2c10a2 deps-upgrade(deps): ⬆️ Update core dependencies (pytest, black, mypy) to latest stable versions
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-18 12:09:08 -07:00
autocommit
a09b70228e merge(fix-rebase-recovery): rebase recovery + lockfile auto-resolution
Ships:
- Verified abort escalation ladder (abort → quit → reset --hard ORIG_HEAD)
- Pre-cycle recovery for orphan rebase/merge state
- Lockfile auto-resolution for bun/npm/pnpm/yarn/cargo/uv/poetry
- Consolidated push.py pull-rebase to delegate to operations.py
- 13 new tests, all passing
2026-04-18 11:58:24 -07:00
autocommit
100a991765 chore(tests): remove unused fixtures divergent_repo and fake_bun_binary
Dead code — neither fixture nor _git helper was referenced by any test.
Also drop now-unused os/stat imports and duplicate pytest import.
2026-04-18 11:45:48 -07:00
autocommit
e747f78a70 test(conflict-resolution): Add comprehensive tests for regen timeout edge cases in conflict resolution
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-18 11:44:52 -07:00
autocommit
e00f025193 test(rebase-recovery): Add test case for rebase recovery failure handling and validation
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-18 11:38:36 -07:00
autocommit
8e5d94b9c4 test(conflict-resolution): Add test cases for conflict resolution logic, including detection and resolution scenarios
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-18 11:38:36 -07:00
autocommit
6d134bd379 test(tests): Add pytest fixtures to stub external service dependencies and Git utilities for improved test isolation
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-18 11:38:36 -07:00
autocommit
505362ed40 feat(git): rebase recovery + lockfile auto-resolution
Task #1 + Task #2 combined:
- _abort_rebase_verified: escalation ladder abort → quit → reset --hard ORIG_HEAD
- pre_cycle_recover: detect orphan rebase/merge state at cycle start
- Integrate into pre_cycle_sync: refuse to proceed if recovery fails
- Consolidate push.py:_pull_rebase to delegate to operations.py:git_pull_rebase
- conflict_resolution module with LOCKFILE_STRATEGIES (bun/npm/pnpm/yarn/cargo/uv/poetry)
- try_auto_resolve_lockfiles: conservative — acts only when all conflicts are lockfiles
- git_pull_rebase: attempt auto-resolution before falling back to abort
2026-04-18 11:32:27 -07:00
autocommit
931c4d530a deps-upgrade(deps): ⬆️ Update dependencies and dev-dependencies to latest stable versions in pyproject.toml
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-17 23:23:07 -07:00
autocommit
a905acc83d fix(local-agent): 🐛 Add -- flag to safely unstage changes on unborn branches during git reset
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-17 23:16:58 -07:00
autocommit
ac86138c14 deps-upgrade(pyproject.toml-level): ⬆️ Update dependencies in pyproject.toml to latest compatible versions
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-17 21:44:08 -07:00
autocommit
b09c13d3cc feat(local-agent): Add dry-run mode and configurable max-diff-bytes parameter for safer agent execution
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-17 21:37:32 -07:00
autocommit
9325131db3 feat(auto-commit-service): Add config options for local commit control and dry-run mode in the tray application
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-17 21:37:32 -07:00
autocommit
8db4afe869 feat(cot-commit): Implement sophisticated COT reasoning logic for auto-commit decision triggers
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-17 21:20:13 -07:00
autocommit
809681f042 deploy(deploy): 🚀 Update deployment scripts, installation/upgrade processes, and documentation for improved workflow consistency
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-17 21:20:13 -07:00
autocommit
3cff601331 feat(auto-commit-service): Implement AI-powered fallback recovery with Claude integration, daemon scheduling, and commit grouping strategies for intelligent commit handling
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-17 21:20:13 -07:00
autocommit
72c9df974f feat(tray): Implement tray components for commit processing pipeline with TrayClient, CommitLoop, LocalAgent, Prefilter, and tests
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-17 21:20:13 -07:00
autocommit
6358be5902 feat(git): Add auto-commit service with Git operations (commits, pushes, submodules) and database-backed state tracking
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-17 21:20:13 -07:00
autocommit
1cd8aa6a07 feat(llm): Introduce LLM client and validator components with test coverage
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-17 21:20:13 -07:00
autocommit
c8876b1194 feat(pipeline): Implement pipeline stages (analyze, commit, discover, format, group, prefilter, publish_verify, push, recover, retrieve, version_detect) and RAG components (codebase, conventions) for enhanced code analysis and automated commit workflows
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-17 21:20:13 -07:00
autocommit
a85156eccb chore(config): 🔧 Update .gitignore to exclude build artifacts, logs, and environment variables
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-17 21:20:13 -07:00
autocommit
6d79bc2753 deps-upgrade(deps): ⬆️ Update dependencies to latest stable versions in pyproject.toml
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-17 21:20:13 -07:00
Natalie
a4a2f8dd82 feat(@ml/auto-commit-service): add stalled repo notifications
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-15 22:23:55 -07:00
Natalie
3b7be20bce feat(@ml/auto-commit-service): add cooldown logic for Claude recovery attempts
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-15 01:16:35 -07:00
Natalie
c508867e0e fix(auto-commit): 🐛 handle claude recovery failure cases
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-14 18:00:29 -07:00
Natalie
d70b90a60b feat(@ml/auto-commit-service): add stalled repos indicator
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-14 17:56:00 -07:00
Natalie
90f06a77aa feat(auto-commit): add clauderecovery cooldown and stalled repo tracking
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-14 17:54:42 -07:00
Natalie
b477082c30 fix(@ml/auto-commit-service): 🐛 update stashed check to skipped_dirty
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-12 23:18:47 -07:00
Natalie
b93c3aca2d feat(error-handling): add claudesync recovery logic
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-12 23:13:08 -07:00
Natalie
fa4d7adc98 🔥 remove stash operations from pre_cycle_sync
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-12 23:07:30 -07:00
Natalie
fd3511ed67 feat(@ml/auto-commit-service): add pre-cycle sync and stash operations
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-12 23:01:51 -07:00
Natalie
783c0117e4 feat(@ml): add menu-bar tray agent for local commits
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-12 19:43:37 -07:00
Lilith
81c66c1991 refactor(database): simplify to SQLite-only storage
Removed PostgreSQL support and dependencies for single source of truth:
- Removed all PostgreSQL fallback logic from connection.py
- Removed asyncpg dependency (keeping only aiosqlite)
- Simplified database URL to direct SQLite path
- Updated config: database_path now points to file, not directory
- Default location: ~/.cache/commits/auto_commit.db (not nested in postgres/)
- Cleaner get_database_size_mb() using direct file stat
- Simplified VACUUM logic (SQLite-only)

Benefits:
- No fallback complexity or environment variable checks
- Single dependency (aiosqlite) instead of two (asyncpg + aiosqlite)
- Clearer configuration (file path vs directory path)
- Less code, less maintenance, no tech debt
- Same rolling data retention features (500MB limit, 90 day retention)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-14 11:08:38 -08:00
Lilith
0ea54d2c1a feat(database): add PostgreSQL storage with 500MB rolling data retention
- Created database module with DatabaseManager, models, and repositories
- SQLAlchemy async support with PostgreSQL (asyncpg) and SQLite (aiosqlite) fallback
- Database stored in ~/.cache/commits/postgres (or auto_commit.db for SQLite)
- Automatic size monitoring and pruning every 5 minutes
- Configurable retention: 500MB max size, 90 days default data retention
- Rolling window: auto-prunes oldest commits/cycles/errors when threshold reached
- Models: Commit, Cycle, Error, RepositoryStatus with proper indexes
- Repository pattern for clean database operations
- Integrated into app lifespan (connects on startup, disconnects on shutdown)
- Updated daemon to accept db_manager parameter

Database features:
- Size limit enforcement (default: 500MB)
- Automatic VACUUM after pruning
- Time-based retention (default: 90 days)
- Background pruning task (every 5 minutes)
- Comprehensive error logging and categorization
- Repository status tracking with consecutive error counts

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-14 11:02:09 -08:00
Lilith
023a134967 fix(core): fix ASGI 'coroutine not callable' error
- Made main() async and properly awaited create_auto_commit_service()
- Changed to manual uvicorn.Server() instead of uvicorn.run() factory mode
- Fixed TypeError that caused 500 errors on all HTTP requests
- Updated llama_service_url default from port 8000 to 8100
- Removed DependencyStartupConfig to avoid lilith-service-addresses dependency

This resolves the critical bug preventing daemon startup and HTTP operations.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-14 10:48:13 -08:00
Lilith
1c6a762acb chore(shared): 🔧 Let's analyze this step by step: 2026-01-13 10:32:34 -08:00