2797 Commits

Author SHA1 Message Date
Xubin Ren
fd61203be4 feat(webui): bucket dense prompt rails 2026-06-02 16:18:57 +08:00
Xubin Ren
1af2bc513f feat(webui): add prompt rail navigation 2026-06-02 16:18:57 +08:00
Xubin Ren
e8d4aff5be fix(webui): polish links and thought timing 2026-06-02 16:18:57 +08:00
chengyongru
d5692bf94c fix(napcat): harden async handlers and action errors
maintainer edit: track background handler tasks, surface failed OneBot actions, reject image redirects, and add focused unit coverage for group routing and edge cases.
2026-06-02 14:10:10 +08:00
LZDQ
0c3063b78c Fix deadlock: get_group_member_info blocks receive loop 2026-06-02 14:10:10 +08:00
LZDQ
b1a3053ceb Channel napcat by Claude 2026-06-02 14:10:10 +08:00
04cb
ac226d66f9 fix(memory): serialize cursor allocation in append_history (#4081) 2026-06-02 14:09:01 +08:00
chengyongru
3e98a03188 fix: support fallback copy for webui replies 2026-06-02 14:08:55 +08:00
chengyongru
1886d22352 fix webui refresh location routing 2026-06-02 14:08:47 +08:00
chengyongru
b2cabb2bd8 fix(webui): keep project heading singular
maintainer edit: render the Projects divider only before the first project group so Chats can sort between projects without duplicating the heading. Add middle and last ordering regression coverage.
2026-06-02 14:08:45 +08:00
chengyongru
a70871679c fix(webui): sort Chats group among projects by recency
In project-based sidebar grouping, the "Chats" section (non-project
conversations) was always appended at the end regardless of its most
recent updated_at. This meant the newest conversation could appear
below older project groups.

Move Chats group insertion before the global sort, compute its
updatedAt from its most recently updated session, and sort all groups
together by updatedAt descending.
2026-06-02 14:08:45 +08:00
Xubin Ren
edf34d857a search: add Volcengine web search provider 2026-06-02 13:55:12 +08:00
chengyongru
851150fcd8 docs: document DingTalk group user isolation 2026-06-01 23:01:19 +08:00
李明振
da0aafcfbd feat(dingtalk): add group_user_isolation to separate sessions per user in group chats
Add a new config option group_user_isolation (default: false) to the
DingTalk channel. When enabled, each user in a group chat gets their own
session while bot replies are still routed to the shared group chat.
2026-06-01 23:01:19 +08:00
chengyongru
0042f68f94 fix: close websocket turns after errors 2026-06-01 23:00:53 +08:00
chengyongru
ebc8c9faf9 chore: restore existing import order 2026-06-01 23:00:53 +08:00
chengyongru
d1b0fb6676 docs: clarify progress bus responsibility 2026-06-01 23:00:53 +08:00
chengyongru
f78700fe69 refactor: move runtime event publishing out of loop 2026-06-01 23:00:53 +08:00
chengyongru
81370565e0 refactor: subscribe to runtime event types 2026-06-01 23:00:53 +08:00
chengyongru
2f0e638bd1 refactor: route file edit progress via channel capability 2026-06-01 23:00:53 +08:00
chengyongru
8129c16b7d fix: tolerate missing runtime event state in direct loop tests 2026-06-01 23:00:53 +08:00
chengyongru
628b250e9a refactor: decouple webui runtime state via events 2026-06-01 23:00:53 +08:00
Xubin Ren
0c6ce80aeb docs: update README with release notes for v0.2.1, highlighting new features and improvements 2026-06-01 17:14:06 +08:00
Xubin Ren
f309982bb0 chore(release): update version to 0.2.1 v0.2.1 2026-06-01 16:51:24 +08:00
chengyongru
0e37024114 fix(session): archive actual idle compact drops 2026-06-01 16:07:08 +08:00
yorkhellen
baffd6ef92 fix(session): correct last_consolidated tracking in non-contiguous retention
The previous fix made retain_recent_legal_suffix return the actual dropped
message list, but already_consolidated was still computed with
min(before_last_consolidated, len(dropped)), which assumes dropped messages
are always a prefix. In the else branch (tail has no user messages), dropped
may include messages from after the consolidated prefix, causing
already_consolidated to skip too many and leaving tail messages neither
retained nor raw-archived.

Fix by having retain_recent_legal_suffix return (dropped,
already_consolidated_count) where already_consolidated_count is computed
against original message indices. Also fix last_consolidated update to count
how many retained messages were inside the old consolidated prefix.
2026-06-01 16:07:08 +08:00
yorkhellen
72fb642ef7 fix(session): prevent duplicate archive and message loss in enforce_file_cap
When retain_recent_legal_suffix hits the else branch (tail has no user
messages), it takes a non-contiguous slice from the middle of the session.
enforce_file_cap incorrectly assumed dropped messages were always a prefix
(before[:dropped_count]), causing user messages to be both archived and
retained, and some messages to silently disappear.

Fix by having retain_recent_legal_suffix return the actual dropped message
list using identity-based diff, so enforce_file_cap no longer needs to
guess which messages were removed.
2026-06-01 16:07:08 +08:00
Jasper
b886b4a566 docs: add AGENTS.md for Codex 2026-06-01 16:06:51 +08:00
Xubin Ren
a4bd4befd4 Fix thought activity ordering 2026-06-01 16:05:42 +08:00
Xubin Ren
9ecd25bca1 docs: update nanobot_webui.png for improved visuals 2026-06-01 06:07:10 +08:00
Xubin Ren
503fc83ce2 docs: rename README cover image 2026-06-01 05:47:14 +08:00
Xubin Ren
806176f161 docs: update GitHub README image 2026-06-01 05:41:23 +08:00
Xubin Ren
081482b20f docs: refresh README opening positioning 2026-06-01 05:29:11 +08:00
Xubin Ren
ff80998423 docs: tighten README positioning bullets 2026-06-01 05:26:18 +08:00
Xubin Ren
b60e507010 docs: sharpen README positioning 2026-06-01 05:19:14 +08:00
Xubin Ren
76e857269d docs: update README news through May 30 2026-06-01 05:14:53 +08:00
Xubin Ren
be2e0172d1 fix(agent): extend sustained goal iteration budget 2026-06-01 04:00:15 +08:00
Xubin Ren
cba9ff1f57 fix(webui): simplify rendered source links 2026-06-01 00:00:37 +08:00
Xubin Ren
33a13b701b feat(webui): render source links with favicons 2026-06-01 00:00:37 +08:00
Xubin Ren
34386fe676 fix(webui): stabilize streaming output and settings i18n 2026-06-01 00:00:37 +08:00
Xubin Ren
31722120b7 feat(webui): polish native host experience 2026-06-01 00:00:37 +08:00
Xubin Ren
15c6abc991 test(webui): assert code block language fallback 2026-05-31 15:42:40 +08:00
Flinn-X
bdb3a2ded7 fix(webui): handle undefined language in code blocks
When fenced code blocks have no language specifier, react-syntax-highlighter
receives undefined for the language prop, causing a white screen crash.

- CodeBlock.tsx: fallback to 'text' when language is undefined
- MarkdownTextRenderer.tsx: defensive fallback at fence rendering site
- Added test cases for both components

Fixes #4116
2026-05-31 15:42:40 +08:00
hamb1y
a3241c33ba Require auth for WebSocket token issuance 2026-05-31 15:15:54 +08:00
chengyongru
15c2bd25b3 refactor(heartbeat): remove Completed section and tighten section gating
- Remove ## Completed section from HEARTBEAT.md template; completed
  tasks should be deleted, not accumulated
- Change in_active_section from tri-state (None/True/False) to bool
  (True/False) so stray text before any ## heading no longer triggers
  heartbeat
- Add test cases for stray pre-heading text and ## Notes section
- Update docs/chat-commands.md to reference ## Active Tasks
2026-05-31 15:15:37 +08:00
Xubin Ren
2671c8fe55 fix(heartbeat): ignore completed-only heartbeat entries 2026-05-31 15:15:37 +08:00
04cb
e3df310309 fix(heartbeat): skip when HEARTBEAT.md has no tasks and fail closed on delivery (#4111) 2026-05-31 15:15:37 +08:00
Xubin Ren
2b4c984e9a fix(matrix): align SAS verification message flow 2026-05-31 01:00:14 +08:00
mytechdream
68712fc489 fix(matrix): handle SAS device verification 2026-05-31 01:00:14 +08:00
Xubin Ren
0cc58a80a4 test(agent): cover process_direct session locking 2026-05-30 23:45:37 +08:00