Metadata-Version: 2.5
Name: her-sync
Version: 0.5.5
Summary: Linux-native Sync-Tool für Agent-Share-Filesysteme (BDE, Email, CalDAV)
Requires-Python: >=3.11
Requires-Dist: beautifulsoup4>=4.12
Requires-Dist: caldav>=1.3
Requires-Dist: httpx>=0.27
Requires-Dist: icalendar>=6.0
Requires-Dist: keyring>=25.0
Requires-Dist: lxml>=5.0
Requires-Dist: openpyxl>=3.1
Requires-Dist: pydantic>=2.0
Requires-Dist: pyyaml>=6.0
Requires-Dist: rich>=13.0
Requires-Dist: typer[all]>=0.12
Provides-Extra: dev
Requires-Dist: build>=1.0; extra == 'dev'
Requires-Dist: playwright>=1.40; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.4; extra == 'dev'
Requires-Dist: twine>=5.0; extra == 'dev'
Provides-Extra: release
Requires-Dist: build>=1.0; extra == 'release'
Requires-Dist: twine>=5.0; extra == 'release'
Provides-Extra: watch
Requires-Dist: watchdog>=4.0; extra == 'watch'
Description-Content-Type: text/markdown

# her-sync

Linux-native Sync-Tool für Agent-Share-Filesysteme (BDE, Email, CalDAV).  
CLI-Befehl: **`her`**

## Installation

```bash
pipx install "her-sync[watch]"
```

Aus Git:

```bash
pipx install --force "git+https://gitea.example.com/you/her-sync@main#egg=her-sync[watch]"
```

Entwicklung: `pip install -e ".[watch,dev]"`

## Konfiguration

`~/.her/`

```
~/.her/
├── config.yml
├── profiles/bde-work/
│   ├── profile.yml       # share, event_handlers
│   ├── crm.yml           # bde: { ... }
│   ├── mail.yml          # email: { ... }
│   ├── calendar.yml      # caldav: { ... }
│   └── local.yml         # optional: Overrides (alphabetisch später = gewinnt)
├── state/bde-work/
└── share-bde/            # optional — Share kann auch woanders liegen
```

Alle `.yml`-Dateien im Profilordner werden **alphabetisch** geladen und deep-gemergt.
Welches Plugin aktiv ist, ergibt sich **nur aus dem YAML-Key** (`bde:`, `email:`, `caldav:`) —
der Dateiname spielt keine Rolle. Fehlender Key = Plugin deaktiviert.

```yaml
# profile.yml — Querverdrahtung zwischen Plugins
event_handlers:
  email:
    changed:
      debounce_seconds: 10
      handlers:
        - email: { command: sync }
        - caldav: { command: sync }

# local.yml — optional, überschreibt Teile aus calendar.yml o.ä.
caldav:
  months_past: 6
```

```bash
her profile init bde-work
her profile migrate-env --env-file .env --name bde-work
her secrets set bde-work/bde-password
her --profile bde-work status
```

## CLI

```bash
her profile list|show|init|migrate-env|validate
her secrets set|delete|test
her daemon run|start|stop|status
her status

her bde collect cashflows
her bde collect cashflow-history --force
her bde apply cost-centers --dry-run

her email sync
her caldav ls
her caldav sync
```

## Daemon

Start/Stop/Autostart laufen über **systemd user** — die Unit wird beim ersten
`her daemon start` automatisch installiert (kein separates Install-Skript nötig).

```bash
her daemon start --profile bde-work              # starten
her daemon start --profile bde-work --autostart  # + Autostart beim Login
her daemon stop --profile bde-work
her daemon enable --profile bde-work           # nur Autostart an
her daemon disable --profile bde-work          # nur Autostart aus
her daemon status --profile bde-work           # Status + Log-Befehle

# Debug im Vordergrund (ohne systemd):
her daemon run --profile bde-work
```

Logs (Ausgabe auch bei `daemon start` / `daemon status`):

```bash
journalctl --user -u her@bde-work.service -f
```

## Release (Repo-Checkout)

```bash
her secrets set release/her-pypi-token   # einmalig lokal
./scripts/her-release release --bump patch --pypi
pipx upgrade "her-sync[watch]"
# Falls Version nicht gefunden: python3 -m pip cache purge
#   pipx install --force --pip-args='--no-cache-dir' "her-sync[watch]"
```

Details: [deploy/DISTRIBUTION.md](deploy/DISTRIBUTION.md)
