CLI dropped completed tool results from replay. Persist bounded results by call ID with error state.
CLI 续聊遗漏已完成的工具结果;按调用 ID 保存限长结果和错误状态。
Add SQLite reload regression for concurrent calls and truncated answers.
新增 SQLite 重载回归,覆盖并行调用与回答截断。
Wait for newly published CLI versions to become visible before building Docker images. Bound registry probes and the overall wait so npm outages cannot stall release jobs for hours.
Preserve partial output and token usage in CLI turns and edited UI rounds while leaving ordinary failures and cancellation unchanged. Use OutputLimitError across agent runners so incomplete turns remain visibly unsuccessful but can be reloaded and continued.
Cover real stream handling, SQLite persistence, reload, CLI continuation, and unsuccessful one-shot JSON output.
Reference the shared runtime through its source path, matching the other root integration tests. This fixes workspace dependency validation without adding a root package dependency or changing the test behavior.
Retain cumulative Agent usage from status events and emit it in the terminal done event after an error so truncated Desktop replies keep their token totals.
Cover the real Desktop Agent and stream runner alongside CLI and global entries, including partial output, completion state, and persisted usage.
停止后保留已收到的内容并落库,保存完成后才允许续聊;预处理取消不再启动请求。
Persist received content on stop before allowing continuation; skip requests cancelled during preprocessing.
Verified with SQLite reload/continuation, 140 stop scenarios and two independent reviews.
POST /_web/cache/save-to-downloads joined the caller-supplied `filename`
straight into the downloads directory:
const filePath = path.join(downloadsDir, filename)
`path.join` collapses `..`, so `{"filename":"../escaped.txt"}` resolved
one level above the downloads directory and the route wrote
attacker-chosen bytes there, returning `{ success: true }`. Any client
that can reach the route could therefore write outside the downloads
directory as the app user.
The route is registered by the shared web routes on both CLI Web and the
Electron internal API, so the fix covers both. Its own siblings already
constrain this input — merge.ts and the CLI upload route both run the
name through `path.basename` — so the missing guard here was an
oversight rather than a documented allowance.
Reject anything that is not a plain file name, and join only the
validated basename. Names the app itself sends stay unchanged: every
caller (conversation export, SQL export, screen capture) already passes a
flat file name.
Only count insight views when the page is visible and focused. Defer background activations until the first foreground transition without resuming cancelled tab dwell timers, and cover focus and visibility ordering in regression tests.
Reusing emoji cleaning also removed ordinary bracketed labels from language vocabulary. Preserve unknown bracketed text for language profiles while retaining known emoji filtering and the existing word-frequency behavior. Add a regression for annotated chat messages.
Released Chinese and Traditional Chinese clients install chatlab-import-cn from the default branch. Keep a deprecated, self-contained English entry so those commands continue to work, and document migration to the unified skill.
Separate warning titles, bodies, and closing fences with blank lines so VitePress renders the privacy notices correctly and Prettier preserves their structure.
Voice transcription normalization can remove every phrase for a member while leaving an empty member entry. Filter those entries from the result so overview and selected-member views retain their empty states.
Add a regression test for single-use transcriptions alongside another member with valid catchphrases.
Clamp cluster look-ahead values at the shared core boundary so invalid inputs cannot create oversized candidate matrices. Add a regression test that keeps oversized values equivalent to the supported maximum.
Treat equivalent session time ranges as the same analytics scope so remounting the selector does not cancel requests or reload Insights, while preserving reloads for real range changes.
Mark the in-memory analysis scope stale after imports and member mutations so returning to Insights reloads fresh statistics without giving up normal tab reuse.
Preserve repeated same-second WeFlow and EchoTrace messages while consuming existing fallback occurrences one for one across overlapping imports and merged sources.
Track SQL Lab usage from the nested More tab after resolving its persisted selection. Remove the obsolete top-level lab mapping so Debug visits are not misclassified.