100 Commits
Author SHA1 Message Date
digua fa9a62f772 release: v0.37.6 2026-10-22 16:09:55 +08:00
digua 5f5df9647b fix(import): show conversion guidance for batch failures
Show one localized conversion guide in the batch result when any failed file has an unrecognized format. Batch errors are stored separately from the single-file error state, so they previously missed the guidance.
2026-10-22 16:02:18 +08:00
digua 11aa6a37c4 fix(import): guide users when file format is unrecognized 2026-10-22 16:02:18 +08:00
digua 7b791785b7 release: v0.37.5 2026-09-28 17:17:39 +08:00
digua eadadda071 feat(electron): add persistent UI scale setting 2026-09-28 16:59:25 +08:00
digua 220f9902be refactor(sql): align schema sidebar collapse interaction 2026-09-28 14:53:15 +08:00
digua 23f77f9a89 refactor(ai): remove unused data source panel 2026-09-28 14:53:15 +08:00
digua 245a99b8ff feat(sidebar): integrate chat topics into shared right panel 2026-09-28 14:53:15 +08:00
digua 5e34b7d255 feat(sidebar): unify chat records and contact detail panels 2026-09-28 14:53:15 +08:00
digua 3e0e0fbbfb fix(sync): protect data source configuration from failed writes 2026-09-24 10:15:02 +08:00
digua af0e844f8a fix(storage): avoid rewriting satisfied data directory compatibility markers 2026-09-24 10:11:59 +08:00
digua 8a77a759db release: v0.37.4 2026-09-23 16:23:26 +08:00
digua 80fcaa7ea2 fix: preserve complete session loading error details 2026-09-23 11:36:38 +08:00
digua b50c495e7d fix(ai): handle Qwen topic reasoning and output limits 2026-09-22 18:36:13 +08:00
digua a67e38b816 fix(release): reuse CLI tarball for Docker publishing 2026-09-22 18:23:42 +08:00
digua 45cfe87037 fix(ai): complete analysis time parameter metadata 2026-09-22 18:23:42 +08:00
digua b233725d7d release: v0.37.3 2026-09-22 17:13:59 +08:00
digua e295a80bdf fix(test): resolve MCP workspace imports from source 2026-09-22 16:43:42 +08:00
digua 2e385bd401 fix(ai): preserve system role for Qwen chat completions 2026-09-22 10:51:11 +08:00
digua 14c9defdf1 fix(query): use indexed ranges for message context 2026-09-21 18:51:50 +08:00
digua 29c184387e fix(query): reuse chronological segment context per search
Sort each indexed segment once per request instead of scanning and sorting it for every hit. Preserve backfilled chronological neighbors and segment boundaries in both query adapters, with a large-segment regression test.
2026-09-21 18:51:50 +08:00
digua c48d2837f1 fix(release): wait for npm package availability
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.
2026-09-19 09:54:07 +08:00
digua 3b44facf87 release: 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
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
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 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
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
digua e2723cf751 refactor(web): remove Web WASM AI runtime 2026-08-28 14:34:59 +08:00
digua 3fe82e039d release: v0.37.0 2026-08-28 10:50:43 +08:00
digua 9009edfeb9 docs(cli): fix Unix socket curl examples 2026-08-28 10:25:51 +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
digua cb7ba1f3cc fix(ai): refresh memory source parent after compression
Capture the conversation active message when the agent turn completes so an automatically persisted compression summary becomes the expected parent for the pending user message. Add an integration regression covering summary persistence, memory creation, message-pair persistence, and source linking.
2026-08-26 22:23:04 +08:00
digua 63c5cc2b46 fix(ai): keep memory provenance through long turns
Remove the wall-clock expiry from in-flight memory provenance so long agent investigations can still link memories to their source messages. Clean up completed turns without memory changes immediately and retain changed turns until the client consumes them.
2026-08-26 22:23:04 +08:00
digua f4017b0adf feat(ai): link memories to source messages 2026-08-26 22:23:04 +08:00
digua cc240c85f5 fix(ai): limit editing to latest turn
Keep compression summaries before the in-flight question and let the Node runtime validate and atomically replace only the terminal question-answer round.
2026-08-26 21:48:10 +08:00
digua f35e41ca70 test(ai): use supported module mock exports
Use Node's namedExports option so the optional Jieba regression test remains valid under the current node:test type definitions.
2026-08-26 21:48:10 +08:00
digua 9378029acb fix(ai): persist edited turns atomically
Replace the edited user message, old assistant response, and regenerated response in one SQLite transaction. This prevents a failed replacement insert from leaving a partially rewritten conversation.
2026-08-26 21:48:10 +08:00
digua 4d6acc97e5 fix(ai): harden global memory relevance ranking
Use dependency-independent Chinese tokenization, preserve prompt capacity for the highest relevance match, and handle short symbolic and numeric terms without distorting bounded recall.
2026-08-26 13:46:58 +08:00
digua 4b405b8114 feat(ai): rank global memories by relevance 2026-08-26 13:46:58 +08:00
digua c69a927615 fix(ai): keep global memory always enabled
Remove the proactive-memory preference and its cross-platform runtime plumbing so memory behavior has one clear contract. Normalize away the obsolete setting and keep source type limited to provenance.
2026-08-24 22:35:47 +08:00
digua 77c4dec9e6 fix(ai): enforce current-turn memory scopes
Share entities resolved during one Agent run so natural-language subject changes can safely use memory. Validate entity memory scope before permanent deletion to prevent stale IDs from deleting another subject's memory.
2026-08-24 22:35:47 +08:00
digua 85bf46b168 feat(ai): add self memory management 2026-08-24 22:35:47 +08:00
digua 2a4ab0d2ae feat(contacts): show AI memories in contact details 2026-08-24 22:35:47 +08:00
digua db582d852e feat(ai): preload selected entity memories 2026-08-24 22:35:47 +08:00
digua 04916041b4 fix(ai): bind memory tools to current entity selection 2026-08-24 22:35:47 +08:00
digua 833e503d3f feat(ai): add global memory management panel 2026-08-24 22:35:47 +08:00
digua 2938c42f9f feat(ai): expose global memory management api 2026-08-24 22:35:47 +08:00
digua ed8ab84b4b feat(ai): integrate memory with global agent 2026-08-24 22:35:47 +08:00
digua bdc61d1b10 feat(ai): add shared global memory service 2026-08-24 22:35:47 +08:00
digua 8d7b3337d0 fix(ai): bind inspection cursors to time filters
Include the normalized time-filter request in structural-inspection fingerprints while retaining the cursor's resolved absolute range, so stable relative pagination works but changed filters are rejected.
2026-08-24 00:25:35 +08:00
digua 326610a25f fix(ai): stabilize relative cross-chat ranges
Interpret recent-day filters as complete local calendar days and persist the first resolved range in structural-inspection cursors so pagination remains stable across clock and date changes.
2026-08-24 00:25:35 +08:00
digua f9ba12e535 fix(ai): harden cross-chat analysis results
Resolve private ranking display names, apply privacy preprocessing consistently across cached recaps and structural labels, and bound model-visible overview payloads to the configured tool budget.
2026-08-24 00:25:35 +08:00
digua 05d9b34f30 chore(ai): finalize global statistics integration 2026-08-24 00:25:35 +08:00
digua 207c41afaa feat(ai): expose cached global activity summaries 2026-08-24 00:25:35 +08:00
digua dff4f4dfa8 feat(ai): support ranged cross-chat overviews 2026-08-24 00:25:35 +08:00
digua 277edaff96 feat(ai): rank group sessions globally 2026-08-24 00:25:35 +08:00
digua 6d64333675 feat(ai): rank private contacts globally 2026-08-24 00:25:35 +08:00
digua 3b50a722c9 feat(ai): add cross-chat statistics facts 2026-08-24 00:25:35 +08:00
digua 75eff70e23 feat(ai): improve cross-chat evidence retrieval 2026-08-24 00:25:35 +08:00
digua 6c07610778 fix(ai): align cross-chat relative time ranges 2026-08-24 00:25:35 +08:00
digua a6557608c6 fix(ai): harden shared interaction analysis
Keep shared-interaction evidence, pagination, and token truncation accurate while bounding anchor inputs, proximity scans, contact discovery, and reply aggregation. Resolve participants across all imported history and isolate damaged database candidates without changing the final analysis tree.
2026-08-23 16:19:57 +08:00
digua d79e4733dd feat(ai): inspect shared contact interactions 2026-08-23 16:19:57 +08:00
digua 10e0825578 fix(ai): harden contact session inspection
Use the all-history contact snapshot and validate raw session candidates inside the cancellable scan loop. Bound model-visible structural results to the configured token budget while preserving full tool details and continuation metadata.
2026-08-22 20:29:40 +08:00
digua f26c6f6eba feat(ai): inspect contact activity across sessions 2026-08-22 20:29:40 +08:00
digua 17553ccd23 fix(ai): ignore stale context estimates
Only apply context-token estimates that still belong to the latest active global conversation request.
2026-08-22 20:00:03 +08:00
digua 5d63fc4d92 fix(ai): stabilize conversation composer state
Preserve unsent drafts until a message is accepted and while browsing global conversations. Keep CJK IME composition events flowing through the mention editor.
2026-08-22 20:00:03 +08:00
digua a201ef8c11 feat(ai): unify conversation interactions 2026-08-22 20:00:03 +08:00
digua 7d32e1d7ed fix(ai): cancel stale conversation restoration
Carry one selection generation across the complete session restoration flow so delayed list or history requests cannot override a newer restoration, user selection, or draft.
2026-08-22 18:42:22 +08:00
digua 982965b44a fix(ai): preserve sidebar keyboard navigation
Keep the collapse toggle focusable in both states, provide localized accessible labels, and remove the hidden conversation panel from the keyboard focus order while collapsed.
2026-08-22 18:42:22 +08:00
digua 17c1f0ba57 fix(ai): guard session conversation restoration
Prevent an unmounted ChatExplorer from synchronizing its restored conversation into a newly opened session route or clearing the new page's restoration state.
2026-08-22 18:42:22 +08:00
digua 714baa54e4 feat(ai): unify conversation navigation 2026-08-22 18:42:22 +08:00
digua f03b203d39 fix(ai): stabilize global workspace interactions
Poll contact preparation only while the contact picker is active and refresh the current query when returning from group search. Guard conversation loading with per-session generations so stale async completions cannot replace the latest selection.
2026-08-22 18:01:22 +08:00
digua 5c40a37572 fix(ai): stabilize global workspace initialization
Align contact selection with the all-history snapshot used by entity resolution. Stop async page initialization and route synchronization after navigation away.
2026-08-22 18:01:22 +08:00
digua d0e61da9a2 fix(ai): scope background task return state 2026-08-22 18:01:22 +08:00
digua 36b26a78f5 feat(ai): add global analysis workspace 2026-08-22 18:01:22 +08:00
digua fbcc0f299f fix(ai): budget cross-chat entity results
Keep full entity resolution details available to the application while bounding the model-visible payload with the runtime tokenizer. Preserve coverage and truncation metadata, prioritize usable scopes fairly, and cap ambiguity hints to avoid duplicate unbounded source lists.
2026-08-22 17:09:23 +08:00
digua dc3bd82c90 fix(ai): enforce cross-chat execution budgets
Count complete tool payloads with the runtime tokenizer so Chinese evidence respects the configured model context budget.\n\nResolve contact sources incrementally with cancellation checks and targeted member lookups to keep long cross-chat investigations responsive.
2026-08-22 17:09:23 +08:00