ArchiveTrajectoryStore writes v2 trajectory events with
HistoryStore.put_document directly, so it skipped the clip_persisted_event
call that TrajectoryStore.append/upsert perform for the repo backend. Those
caps exist to bound SQLite row size, which applies to the shared archive
rows just as much as to trajectory_events. Apply the caps before routing so
both backends persist the same bounded event.
* feat: add in-tree plugin marketplace and related dashboard polish
Ship a catalog install flow (market API + Admin UI), stop auto-seeding new
bundled plugins, and include storage rename, plugin tools listing, agent
lifecycle locking, and history/trajectory path cleanup in the same change.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(dashboard): use ToolsTabs in Experts tools drawer
Align the Experts tools catalog with Personalization so builtin, plugin,
and ACP tabs are available in the same drawer.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: per-tool chat icons and init seed expectation
Show distinct Lucide icons for common built-in tools in chat tool rows,
and stop expecting octop init to auto-copy catalog plugins after the
marketplace seed change.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(test): drain captcha siteverify POST bodies on Windows
Unread form bodies from the mock HTTP server could leave the connection
half-closed and flake reCAPTCHA v3 multi-call assertions under Windows CI.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Synthesize tool-call-only parents, stamp turn/duration metadata, and fall
back to content-size estimates so Turns/Calls/Duration toggles work on
legacy and burst-stamped events. Gather harness turn context and rename
conflicting trajectory unit test modules.