1628 Commits
Author SHA1 Message Date
digua 3b44facf87 release: v0.37.2 v0.37.2 2026-09-18 18:37:42 +08:00
digua db4ce30852 fix(ai): persist truncated turns across chat entry points
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.
2026-09-18 10:53:06 +08:00
digua a2c4176f89 test(ai): use source imports in root integration test
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.
2026-09-18 10:53:06 +08:00
digua 1d2eae586c fix(electron): preserve usage on truncated AI responses
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.
2026-09-18 10:53:06 +08:00
digua 1388aaccf7 fix(ai): handle model output truncation 2026-09-18 10:53:06 +08:00
Sanssssssssssssssss 02b75f8532 fix(ai): cancel session context compression with the request
向会话压缩传递取消信号,防止停止后继续请求并写入摘要。
Forward the request signal to session compression to prevent requests and summary writes after cancellation.
2026-09-12 23:49:32 +08:00
Sanssssssssssssssss a8e8644c7c fix(ai): persist stopped agent turns before continuing
停止后保留已收到的内容并落库,保存完成后才允许续聊;预处理取消不再启动请求。
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.
2026-09-12 23:49:15 +08:00
ttsdj 89974f34e3 fix(cache): keep download writes inside the downloads directory
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.
2026-09-10 16:17:10 +08:00
digua 0e8339bc4c fix(analytics): defer insight views until foregrounded
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.
2026-09-08 15:52:11 +08:00
digua b9903e77e6 feat(analytics): track deliberate insight tab visits after dwell 2026-09-08 15:52:11 +08:00
digua 16cbdb96b6 fix(analysis): preserve bracketed annotations in language profiles
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.
2026-09-06 01:19:44 +08:00
babybitter 6191956338 feat(analysis): recognize Douyin export emoji codes
补充抖音导出表情代码识别表,让文本分析把 [微笑]、[星星眼]、[666]、[V5]、[kisskiss] 等带方括号的抖音表情代码当作表情,而不是普通文本词汇。

新增平台表情代码数据模块 bracket-emoji,集中管理微信经典表情映射与从抖音导出中收集到的表情代码名(含此前的 [躺平]、[强壮]);cleanText 按 [代码]/【代码】 形式识别已知平台表情代码并在清洗时剥离。此前非中文名的抖音表情代码(如 [V5]、[ok]、[kisskiss])会被当作普通词汇进入词频统计;语言偏好分析的分词清洗也改用与词频一致的 cleanText,表情代码不再混入高频词,而口头禅与短语统计仍保留 [表情] 原始形式。

补充脱敏合成数据回归测试,覆盖括号格式文本清洗、Node 与 Browser 词频统计以及语言偏好分析;新测试在识别逻辑缺失时会失败。

(cherry picked from commit c80885e0e3)
2026-09-06 01:17:13 +08:00
digua 29bea9a35d fix(skills): preserve released import skill selector
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.
2026-09-06 00:00:36 +08:00
digua 8c36f5b999 fix(docs): restore converter privacy warning containers
Separate warning titles, bodies, and closing fences with blank lines so VitePress renders the privacy notices correctly and Prettier preserves their structure.
2026-09-06 00:00:36 +08:00
digua 7c6531f846 fix(skills): use unified import skill in home card 2026-09-06 00:00:36 +08:00
digua 59520a2e61 refactor(skills): unify multilingual skill entrypoints 2026-09-06 00:00:36 +08:00
digua 7310b0670f docs(skills): streamline agent guidance and workflows 2026-09-06 00:00:36 +08:00
digua 42d8171d5d docs(agents): refine verification and authorization rules 2026-09-06 00:00:36 +08:00
digua d844578bab release: v0.37.1 v0.37.1 2026-09-04 16:49:46 +08:00
digua a9ec32ad31 feat(changelog): add contributor attribution 2026-09-04 16:39:54 +08:00
digua 4392519d30 fix(analysis): omit members without repeated catchphrases
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.
2026-09-04 00:27:29 +08:00
babybitter 8b7d62e248 fix(analysis): separate system messages from emoji phrases
区分抖音导出中的显式系统通知、分享占位和用户表情,避免系统提示进入口头禅及语言、词频统计。

新增统一的系统/分享前缀识别,覆盖 [系统]、[系统消息]、[分享内容] 及对应全角和英文形式;不误判 [强壮]、[躺平] 等表情标签。口头禅、语言偏好以及 Node/Browser 词频分析支持文本与表情消息,并在统计阶段排除系统通知和分享占位;原始聊天记录保持不变。

补充脱敏合成数据回归测试,覆盖系统通知、分享内容占位排除以及表情保留。
2026-09-04 00:19:21 +08:00
babybitter 0c34853066 feat(analysis): support voice transcriptions in ChatLab
适配导入文件中的语音转写内容,让 ChatLab 在语言分析、词频统计和口头禅分析中使用实际转写文字,而不是把语音时长标签当作文本。

识别并移除语音消息前的时长标签,保留转写内容;纯语音占位符继续从文本分析中排除。

统一桌面端、CLI Web 和 Web WASM 使用的文本清洗逻辑,并补充 ChatLab JSONL 导入、词频、语言偏好和口头禅分析测试。

测试使用脱敏后的合成消息,不包含个人聊天记录。
2026-09-04 00:19:21 +08:00
digua f8e482e2a9 fix(relationships): release session databases during graph compute 2026-08-29 09:25:54 +08:00
digua 1566cfcb2b refactor: prune dead compatibility surfaces 2026-08-28 23:56:25 +08:00
Sanssssssssssssssss 02b9ccb59f fix(ai): enforce the tool round limit
Stop after one final-answer turn and pin Pi 0.84.2 for the public stop hook.
到达工具轮次上限后只允许一轮终答,并锁定提供公开停止钩子的 Pi 0.84.2。
2026-08-28 22:33:10 +08:00
Sanssssssssssssssss e544392a83 fix(ai): preserve explicit tool errors
Promote resolved tool error flags through Pi's formal tool-result contract.
将工具返回的错误标记提升为 Pi 正式错误结果,避免错误被记为成功。
2026-08-28 22:33:10 +08:00
Sanssssssssssssssss 90bf3b6400 fix(ai): preserve active turn context ownership
Avoid aliasing Agent state into the Pi loop, which duplicated finalization messages.
避免将 Agent 状态数组交回 Pi 循环,防止终局消息被重复写入。
2026-08-28 22:33:10 +08:00
KokerZhou 758b0667fc feat(docker): preinstall default NLP dictionary 2026-08-28 22:24:13 +08:00
digua e2723cf751 refactor(web): remove Web WASM AI runtime 2026-08-28 14:34:59 +08:00
digua 3fe82e039d release: v0.37.0 v0.37.0 2026-08-28 10:50:43 +08:00
KokerZhou 2bbc3520b3 fix(records): keep resize bound to active pointer 2026-08-28 10:34:54 +08:00
KokerZhou 4446d99213 fix(records): finish resize outside window 2026-08-28 10:34:54 +08:00
KokerZhou 32e71d0f05 fix(records): clamp drawer width to viewport 2026-08-28 10:34:54 +08:00
KokerZhou 997598259c feat(records): make chat record drawer resizable 2026-08-28 10:34:54 +08:00
digua 9009edfeb9 docs(cli): fix Unix socket curl examples 2026-08-28 10:25:51 +08:00
KokerZhou bb36fc5221 docs(cli): secure Unix socket proxy setup 2026-08-28 10:21:39 +08:00
KokerZhou 16808e7403 fix(cli): clarify Unix socket server details 2026-08-28 10:21:39 +08:00
KokerZhou e3c2e8ec58 feat(cli): support Unix domain socket listener 2026-08-28 10:21:39 +08:00
digua b7c38fb228 fix(insight): bound graph look-ahead allocation
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.
2026-08-28 10:18:54 +08:00
digua 4a3a72e736 perf(insight): reduce session graph memory usage 2026-08-28 10:18:54 +08:00
digua 8867cc556e fix(insight): deduplicate remounted time ranges
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.
2026-08-28 00:20:02 +08:00
digua bc6e70448d fix(insight): invalidate analytics after data 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.
2026-08-28 00:20:02 +08:00
digua 37628302c8 fix(ui): smooth session tab transitions 2026-08-28 00:20:02 +08:00
digua dcee433174 fix(import): preserve fallback message multiplicity
Preserve repeated same-second WeFlow and EchoTrace messages while consuming existing fallback occurrences one for one across overlapping imports and merged sources.
2026-08-27 17:19:06 +08:00
digua af68f13d09 fix(import): avoid deduplicating WeFlow local IDs 2026-08-27 17:19:06 +08:00
digua a50827f42a fix(analysis): preserve SQL Lab analytics
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.
2026-08-27 16:28:42 +08:00
digua 5aa330147b feat(analysis): rename lab and move debug tools 2026-08-27 16:28:42 +08:00
digua e75bb1e556 fix(ai): handle stream failure follow-ups 2026-08-26 22:42:13 +08:00
Sanssssssssssssssss dc07519bc0 fix(ai): refresh conversations after stream errors
中文:模型失败回合落库后刷新会话列表,避免新会话只在重载后出现。

English: Refresh the conversation list after persisted stream errors so new chats appear without a reload.
2026-08-26 22:23:21 +08:00