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()
- scripts/release/prepare.mjs: bump, lockfile, review, commit, tag
- scripts/release/ship.mjs: push tag + dev, print GHA URLs
- Both support --dry-run for safe testing
- Add pnpm aliases: release:prepare, release:ship, etc.
The publish-npm job now depends on release-openwrk-sidecars so the
openwrk-vX.Y.Z GitHub release exists before 'pnpm --filter openwrk
publish' runs. Uses always() with explicit result checks so the job
still runs when sidecars are skipped (publish_sidecars=false).
- 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
* fix(app): scope and defer reload prompts
Avoid reload-required spam by ignoring .opencode/openwork.json, scoping detection to the active workspace, and deferring prompts until sessions go idle. Add per-workspace auto-reload + optional resume so agent/skill/command updates apply without tearing down the UX.
* chore(desktop): sync Cargo.lock
Keep Cargo.lock consistent with the desktop crate version so CI can run cargo test --locked on Linux.
* fix(app): include full prompt text for mentions
* fix(app): send valid file parts for mentions
* chore(desktop): update Cargo.lock
* chore(desktop): regenerate Cargo.lock for linux
* chore(desktop): update Cargo.lock
* fix(desktop): isolate OPENCODE_BIN_PATH in doctor tests
Add a setting in Settings → Advanced → Appearance to hide the native
window titlebar. This is useful for tiling window managers on Linux
(Hyprland, i3, sway, etc.) where window controls are typically handled
via keybinds, making the titlebar redundant.
Implementation:
- Add HIDE_TITLEBAR_PREF_KEY constant for localStorage persistence
- Add Tauri command `set_window_decorations` to toggle decorations
- Add TypeScript binding for the new Tauri command
- Add UI toggle in Settings → Advanced → Appearance section
- Apply setting on change and restore from localStorage on startup
The setting is only shown in the desktop (Tauri) environment and
persists across sessions via localStorage.
Closes#441