Avoid hard-coding 3005 so owpenbot health checks don't fail when the default port is already in use. Still supports explicit --owpenbot-health-port / OWPENBOT_HEALTH_PORT overrides.
* fix(owpenbot): make token saves fast and resilient
Persist Telegram/Slack tokens even when owpenbot is offline, bound adapter restarts to avoid long hangs, and refresh UI status with apply warnings.
* chore: update Cargo.lock
Keep desktop Cargo.lock in sync with the crate version so CI cargo --locked passes.
Keep the dashboard stable when switching workspaces by preventing implicit session navigation during connect/reconnect flows. Delay the switch overlay to avoid flashes on fast switches and reuse an existing local host when bouncing remote<->local.
Filter sidebar sessions by workspace root so local workspaces don't show identical task lists. Also start the local host engine when switching from a remote workspace back to local, and hide the session count badge to prevent header overflow.
* feat(server): expose all workspaces and support mounted baseUrl
* feat(ui): keep tasks visible across workspaces
* feat(desktop): default engine runtime to openwrk
* feat(owpenbot): route chats by directory bindings
Stop pinning OpenCode in package metadata and resolve the latest release during sidecar bundling/runtime, while still allowing OPENCODE_VERSION to pin for reproducible builds.
Images are now compressed via canvas resize (max 2048px) + JPEG transcode
(quality 0.82, target <1.5MB) before base64 encoding. Uses OffscreenCanvas
when available to avoid blocking the main thread. Adds a post-encoding size
pre-check to show an explicit error instead of silently failing.
Fixes#481
* feat(workspace): add Share modal in workspace menu
* feat(workspace): share workspace from session view
* feat(workspace): store OpenWork token per workspace
* feat(workspace): scope OpenWork sharing via /w/:id mounts
Type / at the start of an empty input to trigger a command picker popup.
Commands are fetched from the OpenCode SDK (command.list()) and displayed
with fuzzy filtering via fuzzysort. Keyboard navigation (arrows, tab,
enter, escape) works like the existing @-mention popup.
Selecting a command inserts /<name> into the editor so the user can
add arguments. On submit, text starting with / is detected and routed
through session.command() instead of session.promptAsync().
Changes:
- types.ts: add SlashCommandOption type and command field on ComposerDraft
- composer.tsx: slash detection, popup UI, keyboard nav, command selection
- session.tsx: pass listCommands prop through to Composer
- app.tsx: add listCommands(), route command drafts via session.command()
- Remove inline todo list from top of message scroll area
- Add collapsible todo panel docked above the composer (Codex-style)
- Collapsed: summary line with task count, click to expand
- Expanded: full task list with max-height scroll
- Fix 'Jump to latest' button to appear at bottom-right instead of center
- Move tasks/workspaces to left sidebar, automations/skills/apps to right
- Rename Sessions to Tasks throughout
- Add + button on workspace hover for new task creation
- Empty state transforms to '+ New task' on hover
- Make selected button variant black/dark grey for clear contrast