52 lines
2.7 KiB
Markdown
52 lines
2.7 KiB
Markdown
# Plan
|
|
|
|
Product intent: **[GOALS.md](GOALS.md)**. Agent contract: [AGENT.md](AGENT.md), [AGENTS.md](AGENTS.md). Tickets: [TASKS.md](TASKS.md).
|
|
|
|
## How work is split
|
|
|
|
| Role | Who | Does |
|
|
| --- | --- | --- |
|
|
| Designer + PM | Grok | Owns GOALS.md. Writes tickets before a worker phase. |
|
|
| Worker | OpenCode | One ticket at a time, ponytail on, never `--pure`. |
|
|
|
|
When the user tells Grok to keep going, Grok implements. **No live compositor dispatch** (see GOALS.md Safety).
|
|
|
|
Push: HTTPS `https://gitea.nettsi.de/en/enBoxer` only.
|
|
|
|
## Shipped
|
|
|
|
- [x] Rust crate, YAML profile, mapped-key engine, three modes (maps / mirror / off)
|
|
- [x] Configurable passthrough (example ESDF)
|
|
- [x] Hyprland 0.56 Lua binds + `send_shortcut` (no inject)
|
|
- [x] Interact/loot map (assist, CTM, IWT once, delay)
|
|
- [x] Video FX: source + viewer rects (fraction or pixels), grim + mpv, hover keys/clicks
|
|
- [x] Control panel GUI (File / Session / Layout / Maps / Video / Macros)
|
|
- [x] Layout presets: stacked, grid, main+strip; per-slot x/y/w/h; generate/capture
|
|
- [x] Swap into main, focus next/prev/slot, reset, pin, mouse-follow/broadcast **code**
|
|
- [x] Layout moves **gated** (`ENBOXER_ALLOW_LAYOUT=1`); tiles clamped to monitor
|
|
- [x] HTTPS remote `en/enBoxer` (camelCase, matches the project name)
|
|
- [x] Example Video FX **disabled**; layout tiles empty
|
|
|
|
## Shipped (since the last "Next" snapshot)
|
|
|
|
- [x] GUI: confirm before Apply; Session checkbox "Allow moving game windows" (`allow_layout` + `confirm_apply` popup)
|
|
- [x] Named profiles (File save as / open) plus the new Teams + Lutris flow
|
|
- [x] Type/clipboard broadcast to others (`type_to_others` + new `clipboard` IPC verb)
|
|
- [x] Slot-number overlay (click to make main) — wlr-layer-shell client, gated `ENBOXER_ENABLE_OVERLAY=1`
|
|
- [x] `hyprland-toplevel-export` for covered Video FX sources — `zwlr_export_dmabuf_unstable_v1`, gated `ENBOXER_ENABLE_TOPLEVEL=1`
|
|
- [x] Follow/assist follow **current main** after swap — `Engine::resolve_party_bind` + `Character.assist_key`/`follow_key`
|
|
- [x] Borderless via Hyprland window rules — `hypr::apply_borderless_rules` on `run`
|
|
- [x] Mirror-mode mouse click broadcast (left + right, no press-and-hold guard yet)
|
|
- [x] `round_robin` / `rr` bind target (rotates through ALL slots including the leader, per-map cursor)
|
|
|
|
## Next (still GOALS.md)
|
|
|
|
- [ ] Forever macros when that client exists (Forever client does not exist yet — future)
|
|
|
|
## Invoke worker (only after tickets are listed in TASKS.md)
|
|
|
|
```bash
|
|
opencode run --dir /home/en/git/enBoxer --auto --title "enBoxer tickets" \
|
|
"Read GOALS.md, AGENTS.md, TASKS.md. Ponytail required. Do open tickets in order. Do not run ponytail-review. Do not hyprctl dispatch on the live session."
|
|
```
|