Commit Graph

276 Commits

Author SHA1 Message Date
Benjamin Shafii
be366f4a45 fix(app): scope session listing to workspace
Avoid fetching the global session list on workspace switches by passing directory/roots to session.list; reduces UI hangs and memory churn.
2026-02-07 15:43:29 -08:00
IanShaw
7989e1a064 fix(app): fix memory leaks, environment compatibility, and error recovery (#493)
* fix(app): 修复内存泄漏、环境兼容性和错误恢复

- 新增 session 缓存清理机制,防止长时间运行内存无限增长
  - pruneSessionCaches: 按有效 session 列表裁剪缓存
  - removeSessionCaches: 删除单个 session 时精确清理关联数据
  - clearSessionCaches: workspace 切换/断连时全量清空
  - reloadDetectionSet 设置 5000 上限防止膨胀
- AbortSignal.timeout polyfill 兼容旧版 WebView/Electron
  - 健康检查完成后清理定时器避免泄漏
- MediaQueryList 旧版 API 降级兼容 (addListener/removeListener)
- 顶层 ErrorBoundary 防止未捕获渲染错误导致白屏

* fix(app): simplify reload detection and harden external links

---------

Co-authored-by: Benjamin Shafii <ben@prologe.io>
2026-02-07 15:15:37 -08:00
ben
b53d791bea feat(app): redesign tool call steps UI for cleaner, more compact display (#498)
- Replace flat step list with compact single-line rows featuring status dots,
  tool-type-specific icons (read/edit/search/terminal/etc), and truncated details
- Add classifyTool() for semantic tool categorization and icon mapping
- Improve summarizeStep() to extract filenames, commands, and patterns
  instead of dumping raw output with line numbers
- Replace bordered card container with clean left-border-line expand panel
- Show step count badge in collapsed state ('N steps')
- Add running state indicator with pulse animation
- Use ChevronRight rotate animation instead of ChevronDown for expand/collapse
- Extract StepsContainer as reusable component for both cluster and inline steps
- Filter out raw file content markers (<file> 00001|) from detail text
- Parse 'Success. Updated...' messages to show just the filename
2026-02-07 14:56:36 -08:00
Benjamin Shafii
744d1277e8 chore: bump version to 0.11.31 2026-02-07 14:55:01 -08:00
ben
10213763a1 fix(app): restore Plugins tab in dashboard sidebar (#497)
The Plugins nav item was dropped during the DLS alignment refactor (bd6062c).
The PluginsView component and tab routing were still wired correctly --
only the sidebar and mobile bottom-nav buttons were missing.

- Add Plugins button to right sidebar (between Skills and Apps)
- Add Plugins button to mobile bottom nav (5-col grid)
- Import Cpu icon from lucide-solid (same icon used before removal)
2026-02-07 14:11:41 -08:00
Benjamin Shafii
c9e6aee058 chore: bump version to 0.11.30 2026-02-07 13:10:49 -08:00
TY
8e42fc549b fix: allow data:image/* URLs in markdown renderer (#491)
The isSafeUrl function was blocking all data: URLs including
data:image/jpeg;base64,... returned by AI image generation models.
This caused markdown images like ![image](data:image/jpeg;base64,...)
to render with empty src, showing only the alt text 'Image'.

Now data:image/* URIs are whitelisted while other data: schemes
(e.g. data:text/html) remain blocked to prevent XSS.

Co-authored-by: taoyuan <taoyuan@gmail.com>
2026-02-07 13:06:06 -08:00
TY
6120ad5b56 fix: prevent Enter key during IME composition from triggering actions (#492)
When using an IME (e.g. Chinese, Japanese, Korean input methods), pressing
Enter to confirm character conversion was incorrectly triggering form
submissions, message sends, and other actions.

Changes across 10 files:

- composer.tsx: triple-check IME state (event.isComposing + manual
  compositionstart/end flag + keyCode === 229) with addEventListener
  binding to work around SolidJS event delegation limitations
- model-picker-modal.tsx: guard Enter for model selection
- question-modal.tsx: guard Enter for option/custom input (2 handlers)
- rename-session-modal.tsx: guard Enter for session rename
- rename-workspace-modal.tsx: guard Enter for workspace rename
- dashboard.tsx: guard Enter for workspace/session list items (3 handlers)
- session.tsx: guard Enter for workspace/session list items (3 handlers)
- proto-v1-ux.tsx: guard Enter for expandable section toggle
- skills.tsx: guard Enter for skill card activation
- onboarding.tsx: guard Enter for directory path input

Co-authored-by: taoyuan <taoyuan@gmail.com>
2026-02-07 13:03:03 -08:00
Benjamin Shafii
25200fa0e3 chore: bump version to 0.11.29 2026-02-07 00:04:38 -08:00
ben
b2a006f338 fix(workspace): avoid UI stalls when switching (#489) 2026-02-06 23:40:40 -08:00
Benjamin Shafii
85005c1127 chore: bump version to 0.11.28 2026-02-06 21:20:19 -08:00
ben
265ed971b5 fix(owpenbot): make token saves fast and resilient (#488)
* 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.
2026-02-06 21:18:45 -08:00
Benjamin Shafii
7b8e7b0352 chore: bump version to 0.11.27 2026-02-06 18:57:45 -08:00
ben
a898405889 chore(plugins): drop opencode-browser from suggested defaults (#487) 2026-02-06 18:56:06 -08:00
Benjamin Shafii
bf5a0bff86 fix(composer): restore agent dropdown
Bring back the composer agent picker dropdown wired to the SDK-backed agent list, so users can select an agent without relying on @mentions.
2026-02-06 18:42:28 -08:00
Benjamin Shafii
7026ca5d73 fix(workspaces): make workspace switches less disruptive
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.
2026-02-06 18:28:45 -08:00
Benjamin Shafii
6f98092b0c chore: bump version to 0.11.26 2026-02-06 16:58:06 -08:00
Benjamin Shafii
267082ab48 fix(workspaces): scope sidebar tasks and restore local switching
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.
2026-02-06 16:56:29 -08:00
Benjamin Shafii
311d862e87 chore: bump version to 0.11.25 2026-02-06 14:53:26 -08:00
ben
9b87ccaba7 feat: multi-workspace hosting + workspace-scoped tasks sidebar (#485)
* 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
2026-02-06 14:49:17 -08:00
Benjamin Shafii
7a26fd29f1 chore: bump version to 0.11.24 2026-02-06 12:53:59 -08:00
Benjamin Shafii
d6f7697086 chore: bump version to 0.11.23 2026-02-06 10:38:33 -08:00
IanShaw
a809bb95fd fix: compress image attachments before sending to prevent UI freeze (#482)
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
2026-02-06 09:30:48 -08:00
Benjamin Shafii
d36a630096 chore: bump version to 0.11.22 2026-02-06 08:38:06 -08:00
Benjamin Shafii
6cdeacb982 feat(automations): add run action and human schedules 2026-02-06 08:31:25 -08:00
Benjamin Shafii
ed1aed068f fix(ui): improve settings contrast and session sidebar state 2026-02-06 08:31:19 -08:00
ben
081bcad71e fix(session): remove duplicate new messages indicator (#480) 2026-02-06 07:45:16 -08:00
ben
0f11673c89 feat(config): move workspace settings into Config page (#483) 2026-02-06 07:42:10 -08:00
Benjamin Shafii
f6e7080015 chore: bump version to 0.11.21 2026-02-06 00:13:34 -08:00
ben
05a0499f88 feat(workspace): scope OpenWork sharing via /w/:id mounts (#479)
* 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
2026-02-06 00:07:23 -08:00
Benjamin Shafii
4267330022 chore: bump version to 0.11.20 2026-02-06 00:05:31 -08:00
Benjamin Shafii
e1df942970 feat(skills): add basic viewer/editor with server-backed reads 2026-02-05 23:55:14 -08:00
Benjamin Shafii
3d7ecffa98 fix(composer): correct slash command send + render command chip 2026-02-05 23:55:01 -08:00
Benjamin Shafii
8d6a0a9791 chore: bump version to 0.11.19 2026-02-05 22:10:16 -08:00
ben
30fa07157b feat(composer): add slash command support with fuzzy picker (#477)
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()
2026-02-05 20:07:13 -08:00
Benjamin Shafii
8153194dfa chore: bump version to 0.11.18 2026-02-05 18:35:57 -08:00
ben
39a46b5540 feat(owpenbot): add Slack Socket Mode bridge (#476) 2026-02-05 18:26:02 -08:00
ben
9413e10d03 feat(updates): add auto-update toggle and update pill (#475) 2026-02-05 18:11:04 -08:00
ben
6ae1ed9219 ui(mcp): align Apps page with dashboard cards (#474) 2026-02-05 17:55:00 -08:00
Benjamin Shafii
83c95a82a2 chore: bump version to 0.11.17 2026-02-05 17:23:36 -08:00
Benjamin Shafii
b46a58aea9 fix: make jump-to-latest a true overlay outside the scroll container
Move the button from inside overflow-y-auto (scrolls with content)
to inside the outer relative wrapper (stays fixed at bottom).
2026-02-05 17:07:27 -08:00
Benjamin Shafii
71fa6ad6a8 fix: position jump-to-latest as absolute overlay at bottom of scroll container
Moves the button outside the scroll content flow so it no longer
overlaps message text. Now floats centered at the bottom of the
scroll viewport.
2026-02-05 17:04:32 -08:00
Benjamin Shafii
367db1385c ui: move todo list above composer (collapsible) and fix jump-to-latest position
- 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
2026-02-05 17:02:24 -08:00
Benjamin Shafii
d804d53679 chore: bump version to 0.11.16 2026-02-05 16:20:40 -08:00
Benjamin Shafii
1f344ba0b5 ui: split sidebar into left (tasks) and right (automations/skills/apps)
- 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
2026-02-05 16:10:33 -08:00
Benjamin Shafii
93e1f2a4c4 chore: bump version to 0.11.15 2026-02-05 14:16:39 -08:00
ben
b999903ead Fix reload-required spam; add auto-reload + resume (#467)
* 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.
2026-02-05 14:00:51 -08:00
ben
947da80d2f fix(app): send full prompt text for mention-only drafts (#461)
* 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
2026-02-05 13:51:01 -08:00
ben
00be06d4b5 chore(release): unify openwrk versioning + bump v0.11.14 (#466)
* chore(release): unify openwrk with app version

* chore: bump version to 0.11.14
2026-02-05 13:23:47 -08:00
ben
76c9e32a41 Merge pull request #465 from AshhKetchup/feat/hide-titlebar-linux-441
feat(app): add option to hide window titlebar on Linux
2026-02-05 13:11:21 -08:00