7264 Commits

Author SHA1 Message Date
jd
a1a659e690 feat(sidebar): mixed sidebar list with launchpad ordering decoupled (#16400)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: jd <59188306+zhangjiadi225@users.noreply.github.com>
2026-07-03 11:39:33 +08:00
Asurada
7ea4d79299 feat(composer-quick-panel): add ideographic comma as root quick panel trigger alias (#16321)
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: ousugo <dkzyxh@gmail.com>
2026-07-02 23:30:24 +08:00
Pleasure1234
adb497906f fix(provider-settings): protect preset models from direct deletion (#16617)
Signed-off-by: Pleasurecruise <3196812536@qq.com>
2026-07-02 20:20:59 +08:00
槑囿脑袋
2fbc7bda1c feat(knowledge): optional embedding model with BM25-only fallback (#16553)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: eeee0717 <chentao020717Work@outlook.com>
2026-07-02 20:19:21 +08:00
Gu JiaMing
c881c7f83b feat(conversation-shell): add right pane tab shortcuts (#16662)
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: gujiaming <52187003+AtomsH4@users.noreply.github.com>
2026-07-02 19:56:46 +08:00
jd
2f53df5227 fix(code-block-view): auto-scroll streaming code blocks (#16673)
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: jd <59188306+zhangjiadi225@users.noreply.github.com>
2026-07-02 19:53:20 +08:00
槑囿脑袋
851a647468 refactor(knowledge-index): synchronize per-base index driver stack (#16669)
Signed-off-by: eeee0717 <chentao020717Work@outlook.com>
2026-07-02 18:59:40 +08:00
jd
f76c9e4904 fix(message-navigation): route top/bottom buttons through virtua-aware runtime (#16635)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: jd <59188306+zhangjiadi225@users.noreply.github.com>
2026-07-02 18:50:21 +08:00
LiuVaayne
bcd9522374 fix(agent-tasks): wire workspace picker for scheduled tasks (#16571)
Signed-off-by: Vaayne <liu.vaayne@gmail.com>
2026-07-02 18:49:52 +08:00
槑囿脑袋
e330d30809 fix(composer): block unsynced file-only sends (#16671)
Signed-off-by: eeee0717_cherry_macmini <chentao020717Work@outlook.com>
2026-07-02 18:48:43 +08:00
Gu JiaMing
4862cc128d fix(message-navigation): contain anchor rail layer (#16672)
Signed-off-by: gujiaming <52187003+AtomsH4@users.noreply.github.com>
2026-07-02 18:46:44 +08:00
jd
9fceb77ecd perf(chat-messages): drop per-chunk conversation scan for editor detection (#16640)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: jd <59188306+zhangjiadi225@users.noreply.github.com>
2026-07-02 18:46:25 +08:00
jd
b65d85905d feat(resource-list): tag grouping & single-tag UI (#16561)
### What this PR does

> **Stacked PR.** Base is `jd/resource-list-config`, not `main` — this
builds on the old-view resource-list rails from that branch. It should
merge after its base.

Before this PR:

- The old-view assistant rail showed a flat assistant list with no way
to group it.
- A resource (assistant) could carry multiple tags, and the
resource-card tag picker rendered each tag with a multi-select checkbox.

After this PR:

- The old-view assistant rail has a right-click / "more" menu toggle
that groups the non-pinned assistants into collapsible per-tag sections
(the "已固定" pinned section stays on top). The state reuses the existing
`assistant.tab.sort_type` preference (`list` | `tags`). Drag-reorder is
disabled while grouping. Untagged assistants collapse under the existing
"未分组" section. Agents and the topic list are untouched.
- A resource now carries a single tag. The resource-card tag picker
drops the checkbox and shows a single trailing check on the selected tag
(`menuitemradio`), matching the single-select tag combobox in the edit
dialog.

Fixes #

### Why we need it and why it was done in this way

The following tradeoffs were made:

- Tag grouping reuses the existing collapsible `SectionHeader` primitive
instead of adding a new visual, so it only allows expand/collapse and
matches the current rail look.
- Grouping reuses the v1 `assistant.tab.sort_type` preference
(cross-window, persisted) rather than introducing a new cache key.
- The single-tag model keeps the backend tag relation many-to-many and
only sends a 0/1-element array at the UI boundary.

The following alternatives were considered:

- A new `GroupHeader` (with chevron/actions) for tags — rejected to keep
"expand/collapse only" and reuse the existing section visual.
- Storing the grouping toggle in the Cache layer — rejected in favor of
the existing Preference, which is the idiomatic home for a synced UI
setting.

Links to places where the discussion took place: N/A

### Breaking changes

Collapsing assistant tags from many to one is a behavior change, but no
multi-tag assistant data exists at this pre-release stage, so there is
no user-visible data impact.

### Special notes for your reviewer

- Intentionally stacked on `jd/resource-list-config`; the diff is the
three commits on top of that branch (single-tag collapse, tag grouping,
single-select tag picker visual). Opened as **draft** since it cannot
merge before its base.

### Checklist

This checklist is not enforcing, but it's a reminder of items that could
be relevant to every PR.
Approvers are expected to review this list.

- [x] Branch: This PR targets the correct branch — stacked on
`jd/resource-list-config` (its base feature branch), not `main`
- [x] PR: The PR description is expressive enough and will help future
contributors
- [x] Code: [Write code that humans can
understand](https://en.wikiquote.org/wiki/Martin_Fowler#code-for-humans)
and [Keep it simple](https://en.wikipedia.org/wiki/KISS_principle)
- [x] Refactor: You have [left the code cleaner than you found it (Boy
Scout
Rule)](https://learning.oreilly.com/library/view/97-things-every/9780596809515/ch08.html)
- [x] Upgrade: Impact of this change on upgrade flows was considered and
addressed if required
- [ ] Documentation: A [user-guide update](https://docs.cherry-ai.com)
was considered and is present (link) or not required. Check this only
when the PR introduces or changes a user-facing feature or behavior.
- [x] Self-review: I have reviewed my own code (e.g., via
[`/gh-pr-review`](/.claude/skills/gh-pr-review/SKILL.md), `gh pr diff`,
or GitHub UI) before requesting review from others

### Release note

```release-note
Group assistants by tag in the chat sidebar (old view) via the assistant right-click menu, and use a single tag per assistant with a single-select tag picker.
```

---------

Signed-off-by: jd <59188306+zhangjiadi225@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 18:45:52 +08:00
Pleasure1234
5e6d0278b8 fix(provider-settings): open pull-reconcile sidebar instead of auto-pulling all models on API key entry (#16632)
Signed-off-by: Pleasurecruise <3196812536@qq.com>
2026-07-02 18:44:31 +08:00
槑囿脑袋
4d9ce40efd fix(knowledge-tools): fix kb_manage defer/approval deadlock (#16625)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Signed-off-by: eeee0717 <chentao020717Work@outlook.com>
2026-07-02 17:07:10 +08:00
jd
50b11f9755 fix(chat): don't pin a mid-stream follow-up to the viewport top (#16665)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: jd <59188306+zhangjiadi225@users.noreply.github.com>
2026-07-02 17:01:23 +08:00
槑囿脑袋
82e5d73a75 fix(claude-code): strip API version from agent base URL (#16666)
Signed-off-by: eeee0717_cherry_macmini <chentao020717Work@outlook.com>
2026-07-02 16:33:47 +08:00
槑囿脑袋
11d564e96f fix: inject Ollama auth token for Claude Code agents (#16667)
Signed-off-by: eeee0717_cherry_macmini <chentao020717Work@outlook.com>
2026-07-02 15:54:35 +08:00
Pleasure1234
761f5386f6 feat(provider-registry): add OpenCode Go provider (#16618)
Signed-off-by: Pleasurecruise <3196812536@qq.com>
2026-07-02 15:43:12 +08:00
Gu JiaMing
54acc9a7de fix(virtual-list): contain sticky row layering (#16644)
Signed-off-by: gujiaming <52187003+AtomsH4@users.noreply.github.com>
2026-07-02 15:42:27 +08:00
fullex
9b9570116a refactor(db): replace libsql with better-sqlite3 + sqlite-vec (#16626) 2026-07-02 13:21:13 +08:00
github-actions[bot]
5bb5dd8168 🤖 Daily Auto I18N Sync: Jul 02, 2026 (#16631)
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
2026-07-02 11:23:39 +08:00
Gu JiaMing
7b43a16ceb fix(paintings): enable generated image context menu actions (#16608)
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: gujiaming <52187003+AtomsH4@users.noreply.github.com>
2026-07-02 11:17:25 +08:00
chenxue
c76b50724b feat(aihubmix): redirect provider links to inferera and follow configured base URL (#16607)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: chenxue <DDU1222@users.noreply.github.com>
2026-07-02 11:16:21 +08:00
Gu JiaMing
07d4c68bf7 fix(translate): continue translation when auto detection is unknown (#16604)
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: gujiaming <52187003+AtomsH4@users.noreply.github.com>
2026-07-02 11:14:18 +08:00
Gu JiaMing
6d9a41ec82 feat(translate): export translation result to notes (#16576)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: gujiaming <52187003+AtomsH4@users.noreply.github.com>
2026-07-02 11:14:04 +08:00
LiuVaayne
0fc5ee4411 fix(qq-channel): reply to group messages with passive msg_id (#16599)
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: Vaayne <liu.vaayne@gmail.com>
2026-07-02 11:13:51 +08:00
LiuVaayne
1fc92664c9 fix(channels-settings): use agent workspace for channel binding (#16569)
Signed-off-by: Vaayne <liu.vaayne@gmail.com>
2026-07-02 11:13:33 +08:00
Konv Suu
1ccc2044b2 perf(ip-service): cache IP country detection and invalidate on proxy change (#16051)
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
2026-07-02 11:12:08 +08:00
fullex
15fb07a3c0 chore(agents-migration): remove dead v1 agents-db drizzle migrations
The resources/database/drizzle SQL files and meta snapshots are v1-era CherryClaw agents-db migrations with no runtime consumer — the active v2 migrations live in migrations/sqlite-drizzle and are loaded from app.database.migrations. Delete the directory and clean up the now-dangling references: three source comments in AgentsDbMappings.ts that cited the deleted SQL files as the v1 column-type source (the epoch-ms notes are kept inline), and a stale doc row in cherryclaw/scheduler.md pointing to a migration file that no longer exists.
2026-07-01 07:24:34 -07:00
亢奋猫
03ab285431 fix(agent-page): lazy load artifact file tree (#16577)
Co-authored-by: SuYao <sy20010504@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: kangfenmao <kangfenmao@qq.com>
Signed-off-by: suyao <sy20010504@gmail.com>
2026-07-01 19:16:17 +08:00
jd
461e45d133 feat(chat): independent classic/modern layout settings for conversations and work (#16434)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: jd <59188306+zhangjiadi225@users.noreply.github.com>
2026-07-01 11:27:58 +08:00
beyondkmp
4112ff3a2c fix(switch): use valid svg dimensions for thumb icon (#16592)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: beyondkmp <beyondkmp@gmail.com>
2026-06-30 20:14:42 +08:00
Asurada
00298533a4 feat(websearch): add firecrawl web search provider (#16344)
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: ousugo <dkzyxh@gmail.com>
2026-06-30 20:14:17 +08:00
wangjuneng
1701b5cfc6 feat(rich-editor): add diagram preview rendering in code blocks (#16309)
Signed-off-by: Jun Wang <wangjuneng@gmail.com>
Signed-off-by: DESKTOP-BLE22GM\Administrator <wangjuneng@gmail.com>
2026-06-30 20:13:23 +08:00
Gu JiaMing
c993719569 fix(page-side-panel): scope portal via usePortalContainer, drop the root marker (#16555)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: gujiaming <52187003+AtomsH4@users.noreply.github.com>
2026-06-30 20:06:57 +08:00
亢奋猫
366ecf63da refactor(provider): remove tokenflux providers (#16518)
Signed-off-by: kangfenmao <kangfenmao@qq.com>
2026-06-30 19:52:35 +08:00
LiuVaayne
7a56306835 refactor(agent-skills): mirror skills centrally, pass SDK name whitelist (#15976)
Co-authored-by: SuYao <sy20010504@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Vaayne <liu.vaayne@gmail.com>
Signed-off-by: suyao <sy20010504@gmail.com>
2026-06-30 19:51:07 +08:00
Phantom
4ef2889fd3 refactor(file-ref): split persistent ref ownership (#16532)
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: eurfelux <eurfelux@gmail.com>
2026-06-30 18:44:44 +08:00
jd
72e1efa955 feat(composer): add hover remove popover to skill and knowledge tokens (#16596)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: jd <59188306+zhangjiadi225@users.noreply.github.com>
2026-06-30 17:59:30 +08:00
SuYao
dd90997792 fix(migration): always publish mcpServerIdMapping for empty server list (#16602)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: suyao <sy20010504@gmail.com>
2026-06-30 17:57:26 +08:00
槑囿脑袋
c7d96462bc feat(knowledge): add agent tool surface for knowledge bases (kb_list/kb_search/kb_read/kb_manage) (#16345)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: eeee0717 <chentao020717Work@outlook.com>
2026-06-30 15:27:54 +08:00
槑囿脑袋
f264138934 fix(knowledge): filter rag file processors by configured keys (#16564)
Signed-off-by: eeee0717_cherry_macmini <chentao020717Work@outlook.com>
2026-06-30 11:51:35 +08:00
Gu JiaMing
c73e2ca8de fix(composer): add tooltips and hover drag handle to queued follow-ups dock (#16558)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: gujiaming <52187003+AtomsH4@users.noreply.github.com>
2026-06-30 11:27:30 +08:00
fullex
a77f6f5c9a docs(cache): require functional updaters to be side-effect-free
The setter updater contract previously said "must be pure" only in the sense of "don't mutate prev / return a new value" (the isEqual short-circuit footgun); it did not cover side effects inside the updater.

Document that updaters must also be side-effect-free: don't smuggle a derived value out (e.g. into an enclosing-scope variable) to drive post-write work, and don't rely on how often or when the updater runs. To react to what changed, derive it from the value transition in a useEffect that watches the value.

Deliberately does not promise single synchronous invocation, to keep the setter free to batch/retry/defer later. Updates the CacheSetStateAction type doc, the useCache @remarks (canonical reference for all three hooks), and cache-usage.md.
2026-06-29 07:57:25 -07:00
jd
090f9a43e9 fix(sortable): require primary pointer activation (#16574)
Signed-off-by: jd <59188306+zhangjiadi225@users.noreply.github.com>
2026-06-29 22:51:56 +08:00
SuYao
9b642d6953 fix(gateway): generate Gemini images via the language API (#16341)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: suyao <sy20010504@gmail.com>
2026-06-29 18:26:14 +08:00
jd
21e0e04abc feat(resource-dialogs): stepped create wizard for assistants and agents (#16496)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: jd <59188306+zhangjiadi225@users.noreply.github.com>
2026-06-29 18:25:15 +08:00
fullex
c8de372b7d refactor(cache): adopt functional setter updaters in renderer consumers
Now that the renderer cache hooks resolve functional updaters against the latest stored value, replace the hand-rolled ref + `typeof === 'function'` wrappers (TabsProvider, TranslatePage, GlobalSearchPanel) and the snapshot-based read-modify-write call sites (recent-items in AppShell/HomePage/AgentPage, emoji recents, message selection, recall-test history) with `setX(prev => ...)`. Each updater derives from `prev`, and the callbacks drop the cache value from their dependency arrays.

The mini-app keep-alive sites (hide / cleanup / sync) close the read-modify-write race where an app opened concurrently during a status mutation's await was clobbered by a stale snapshot. Fixes #16460.

Update the two local cache mocks (GlobalSearchPanel / RecallTestPanel tests) to resolve functional updaters like the real hook.
2026-06-29 02:15:40 -07:00
SuYao
f800a6f772 fix(selection): statically render built-in action icons (#16500)
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Signed-off-by: suyao <sy20010504@gmail.com>
2026-06-29 17:00:27 +08:00