Commit graph

34 commits

Author SHA1 Message Date
autocommit
a7158563aa feat(web): Implement API endpoints and service logic for fetching "Considered Work" data
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-21 14:39:22 -07:00
autocommit
6d212b7dbe refactor(testing-test): ♻️ Update test imports to use claire instead of clare in package references
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-20 19:54:05 -07:00
Natalie
d698cd6430 feat(@projects/@clare): add remote control session registration
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-20 18:46:42 -07:00
Natalie
146ad7fbb2 feat(@projects): add test for env var stripping in spawn
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-20 18:32:29 -07:00
Natalie
2d355bcab5 feat(@projects/@clare): add session age recycling logic
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-20 17:29:42 -07:00
Natalie
a7cc0bdeab feat(orchestrator): add autonomous dispatch capability
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-20 05:22:35 -07:00
Natalie
3653177fce feat(@projects/@clare): add budget and limits config for rate/load control
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-20 05:15:13 -07:00
Natalie
4f2d92d485 feat(db): add org_id column for monorepo projects
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-20 04:31:55 -07:00
Natalie
99e80259f6 feat(@projects/@clare): improve session liveness detection with tmux slug matching
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-20 03:50:29 -07:00
Natalie
ee3419820b feat(@projects): add session liveness tracking migration
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-20 03:43:35 -07:00
Natalie
9f9c1f0cd5 feat(@projects/@clare): enhance orchestrator heartbeat with periodic checks
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-20 03:15:55 -07:00
Natalie
a426453795 feat(@projects): add fleet agent orchestration workflow
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-20 02:27:32 -07:00
Natalie
8ab5619421 feat(@projects): add agent status tracking table
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-20 02:20:26 -07:00
Natalie
d2e37ea751 test(@projects/@clare): 🧪 add pm-command parser test suite
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-18 22:55:54 -07:00
Natalie
bc894b550e feat(@projects): add pm expansion tools
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-18 22:49:33 -07:00
Natalie
3d24384340 feat(@projects/@clare): add org, people, and task-related tables
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-18 22:43:13 -07:00
Natalie
cff7892fab feat(@projects/@clare): add ignore_uuids param to discover_session
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-18 21:20:55 -07:00
Natalie
bce0a5b9b1 feat(@projects/@clare): add mcp config support for detached spawns
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-18 21:14:06 -07:00
Natalie
bf9b892d19 feat(@projects/@clare): add mcp sse endpoint config
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-18 21:07:44 -07:00
Natalie
52b9594c35 feat(@projects/@clare): add supervisor for orchestrator session management
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-18 19:38:33 -07:00
Natalie
46e2211f8c 🔥 remove html chat routes tests
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-18 17:38:22 -07:00
Natalie
00401248db feat(@projects/clare): add live tool-call logging system
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-18 16:14:40 -07:00
Natalie
507575bbad feat(orchestrator): integrate scheduler for project summaries and task assignments
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-18 16:08:18 -07:00
Natalie
90cb0c4142 feat(@projects/@clare): add orchestrator init command
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-18 09:04:35 -07:00
Natalie
acc186b8fb feat(@projects/@clare): update reply handling to use replies array
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-18 08:31:49 -07:00
Natalie
3547c06c5d feat(@projects/@clare): add max_duration query param to chat stream
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-18 08:12:40 -07:00
Natalie
9904e236cc feat(@projects/@clare): add orchestrator scheduler nudge system
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-18 08:06:13 -07:00
Natalie
b8d1cd6bac feat(@projects/@clare): add chat api endpoints
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-18 07:59:52 -07:00
Natalie
6598d3ae4b feat(@projects/@clare): add slash-command parser and dispatcher
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-18 07:53:30 -07:00
Natalie
3cb400a427 test(@projects/@clare): 📝 add chat projection fan-out test suite
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-18 07:47:06 -07:00
Natalie
e15bbee6dd fix(pull): dedup session observations by uuid to handle mac-sync'd filesystems 2026-05-18 05:17:42 -07:00
Natalie
87099fd99b feat(pull): multi-host enumeration via rclaude --tsv
Replace local-only _claude-projects --sessions path with
'rclaude list sessions --tsv' (full uuids, separate cwd/mtime
columns) and add 'rclaude triage --tsv' ingestion emitting
TriageRecorded events. Diff against the sessions projection
to skip no-op events for unchanged (host, cwd, mtime) and
(priority, status, summary) tuples.
2026-05-18 03:23:55 -07:00
Natalie
5f316cde24 feat(sync): HMAC-SHA256 auth on /api/v1/sync/*
Adds shared-secret HMAC-SHA256 authentication to peer sync endpoints.
Sync requests now include X-Clare-Timestamp + X-Clare-Signature headers
covering ts/method/path/body. Server validates against local sync_secret
and rejects with 401 on mismatch, missing headers, or >300s skew.

- config.py: new sync_secret field (auto-generated on first run) and
  PeerConfig list (back-compat: plain-string peers still parse)
- sync.py: signs outbound peer + loopback requests; sync_peer takes
  PeerConfig and local_secret
- web/api.py: require_sync_auth dependency on /sync/* routes; /health
  remains unauthenticated; when sync_secret is unset, sync stays open
  for back-compat with fresh installs
- tests: 10 new auth tests cover valid/tampered/expired/missing/no-secret
  paths plus full two-Clare convergence with matched secrets
2026-05-18 03:04:42 -07:00
Natalie
c1e6f7dbe5 feat: initial Clare scaffold — project manager for the Claude agent fleet
Push A (single-machine):
- HLC + event-sourced SQLite (events table is source of truth, projections rebuildable)
- Pydantic v2 domain models (Project, Task, Assignment, Session, Group, Update)
- rclaude subprocess wrapper (local_sessions via _claude-projects --sessions)
- Typer CLI: init, project, task, assign, pull, status, broadcast, serve, sync
- FastAPI + Jinja2 + HTMX dashboard
- 26 unit tests passing

Push B (HTTP API + sync substrate):
- /api/v1/* JSON routes (projects, tasks, assignments, sessions, status, broadcast, sync)
- CLI refactored as thin httpx client over the API — single business-logic codepath
- web/service.py: every business op defined once; HTML routes + API routes both call into it
- sync.py: peer-to-peer sync via /api/v1/sync/events with HLC + uuid-based dedup
- 32 tests passing including two-Clare convergence test

Push C (cross-host deployment):
- apricot install via uv (Python 3.12.12)
- systemd --user unit for clare-serve on apricot
- Cross-host sync demoed plum (10.9.0.3) ↔ apricot (10.9.0.2) over wg
- .local → .lan rename for forge URLs

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 02:20:23 -07:00