Redesign the Identities tab to match the messaging-channels UX pattern:
- Header renamed to 'Messaging channels' with descriptive subtitle
- Worker status card with pulsing indicator and status pills
- Channel cards as expandable accordions with brand-colored icons
- Visual message routing section with styled routing rules
- All existing functionality preserved (Telegram/Slack CRUD, health, polling)
The bump script updates Cargo.toml but never regenerated Cargo.lock,
causing it to show as dirty after every version bump until someone
manually ran cargo. Now runs cargo generate-lockfile automatically.
Add docker-compose.dev.yml using off-the-shelf node:22-bookworm-slim image
that starts headless + web UI with auto-wired tokens and health checks.
Builds Linux binaries into /tmp to avoid overwriting host macOS binaries.
Store a default directory on workspace identities and auto-create bindings on first inbound message. Remove the bindings editor from the Identities UI and keep /dir as the advanced override.
Enforces workspace-scoped owpenbot identities/bindings via openwork-server, updates the Identities UI and Tauri status schema, and adds UX evidence screenshots.
Reuse an existing Vite dev server instead of failing on busy ports, avoid Node 25 top-level await exit, and ensure opencode sidecar tracks latest when unpinned.
* fix(owpenbot): guard health timer cleanup
Avoid calling clearInterval with a null timer so TypeScript builds stay green.
* feat(owpenbot): add operator TUI
Add a TTY-first interactive menu that talks to the owpenbot health API (direct or via openwork-server proxy) for QR, token, groups, and bindings management.
* chore(desktop): refresh Cargo.lock
Update the lockfile to match the current desktop crate version so Linux CI can run with --locked.
* fix(owpenbot): require client token for proxy TUI
When using openwork-server proxy mode, include a Bearer client token for /owpenbot/health while still supporting host-token for admin endpoints.
* feat(openwrk): add deploy ssh adapter
Add an SSH deploy command that bootstraps openwrk on a remote Linux host via the npm tarball, optionally syncs workspace config, and starts the host under nohup with a connect artifact for pairing.
* chore(desktop): refresh Cargo.lock
Update the lockfile to match the current desktop crate version so Linux CI can run with --locked.