Commit Graph
1123 Commits
Author SHA1 Message Date
digua de3494bc7f fix(relationships): reset selection when returning to panorama 2026-07-01 01:06:36 +08:00
digua a3510939d5 feat(relationships): enrich 3d galaxy colors 2026-07-01 01:06:36 +08:00
digua 97c5400f9e fix(relationships): rebuild 3d scene for selected node
Pass the active selectedKey into the 3D scene builder so focused relationship views use the selected-contact topology and layout. Add a regression check for the canvas scene wiring.
2026-06-30 22:02:44 +08:00
digua 9aeb3c56ab perf(sidebar): virtualize session list 2026-06-30 22:02:44 +08:00
digua 506c07c4a1 perf(relationships): reduce galaxy route and render cost 2026-06-30 22:02:44 +08:00
digua fb0a92d82b style(ui): align dark theme surfaces 2026-06-30 22:02:44 +08:00
digua d3d2661882 fix(relationships): address galaxy review regressions
Bundle relationship worker entries for packaged builds.

Refresh and surface galaxy task failures, clean detached Pixi layers, cap focused neighborhoods, merge owner nodes across platforms, apply manual friend overrides, and track owner group activity.
2026-06-30 14:41:46 +08:00
digua 9c2ab48b1c feat(relationships): refine galaxy exploration 2026-06-30 14:41:46 +08:00
digua 4ce3dfd160 fix(people): reuse header across subpage tabs 2026-06-30 14:41:46 +08:00
digua eaf46c01f9 feat(relationships): improve galaxy focus and relevance 2026-06-30 14:41:46 +08:00
digua 5141ee4e63 feat(relationships): add 3d galaxy view 2026-06-30 14:41:46 +08:00
digua d04eddc37c fix(relationships): rank active close contacts accurately 2026-06-30 14:41:46 +08:00
digua 3afc2a7329 feat(relationships): enhance galaxy graph interactions 2026-06-30 14:41:46 +08:00
digua 85b9e203ab feat(people): add relationship galaxy graph 2026-06-30 14:41:46 +08:00
diguaandClaude Sonnet 4.6 d8034b3546 fix(semantic-index): stabilize embedding warmup (#261)
* fix(semantic-index): stabilize embedding warmup

Improve warmup job reliability and prevent raw API response body from
reaching app.log. Status code alone is sufficient for diagnosing failures;
stripping the response detail eliminates the risk of chat content being
written to the log via OpenAI-compatible services that echo submitted input.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(semantic-index): clear preload error after warmup retry

When local model preload fails, a later warmup can successfully recreate the extractor through embedDocuments but leave modelPreloadStatus stuck on error.

Mark the local model ready after a completed warmup writes chunks, and cover the retry path with a regression test.

* fix(semantic-index): guard warmup model status updates

Capture the model configuration used by a warmup job before it starts, and only clear local preload errors when the current local model still matches that job.

Add a regression test for switching local models while an older warmup is still completing.

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 10:54:22 +08:00
digua ab6f4b7475 refactor(people): move contacts page under people module 2026-06-27 22:50:47 +08:00
digua 0d5d49a491 fix(contacts): stabilize navigation and facts cache
Wait for initial contact rows before scrolling to groupmates so tab navigation does not land on temporary rows. Avoid writing contacts session facts or latest facts when a session DB fingerprint changes during computation.
2026-06-27 22:13:25 +08:00
digua e784a16483 fix(contacts): refresh promoted friend rows
Replace friend rows after manual friend promotion so response-layer overrides are reflected even when the contacts snapshot signature is unchanged. Keep preserving the groupmate rows after local removal to avoid scroll jumps.
2026-06-27 22:13:25 +08:00
digua 0e318f5bca perf(avatar): lazy load session avatars 2026-06-27 22:13:25 +08:00
digua 2b6d483049 feat(contacts): add source chat record actions 2026-06-27 22:13:25 +08:00
digua e1543c5f3b fix(contacts): stabilize contact list refresh 2026-06-27 22:13:25 +08:00
digua 1e2148a4d2 perf(contacts): cache session facts 2026-06-27 22:13:25 +08:00
digua ba500bd462 feat(contacts): mark groupmates as friends 2026-06-27 20:02:23 +08:00
digua 928ac6064b refactor(contacts): split contact page panels 2026-06-27 20:02:23 +08:00
digua e9e19f1b05 refactor(contacts): remove low signal groupmate concept 2026-06-27 20:02:23 +08:00
digua 114ae79885 feat(contacts): paginate virtualized contacts list 2026-06-27 20:02:23 +08:00
digua 95f0e91c0d feat(contacts): add time range filtering 2026-06-27 20:02:23 +08:00
digua 1f0aed5358 fix(contacts): address review regressions 2026-06-27 20:02:23 +08:00
digua 25b658e981 chore(tests): clarify runtime and regression rules 2026-06-27 15:54:08 +08:00
digua dfd330e6bb fix(contacts): localize source type labels 2026-06-27 15:54:08 +08:00
digua 103df0eba9 fix(contacts): address review regressions 2026-06-27 15:54:08 +08:00
digua 9563c26645 refactor(contacts): group contacts service files 2026-06-27 15:54:08 +08:00
digua c8c4e1aca6 feat(contacts): compute contacts in background worker 2026-06-27 15:54:08 +08:00
digua d48665b2ed feat(contacts): simplify contacts experience 2026-06-27 15:54:08 +08:00
digua 11152a7c4b feat(web): add contacts page 2026-06-27 15:54:08 +08:00
digua c500d735a7 feat(http-routes): add contacts web routes 2026-06-27 15:54:08 +08:00
digua 9c8faeba09 feat(node-runtime): add contacts aggregation service 2026-06-27 15:54:08 +08:00
digua 39a97cae95 feat(contacts): add core analysis primitives 2026-06-27 15:54:08 +08:00
digua ef71543237 feat(electron): download updates silently
Start stable desktop update downloads in the background during automatic checks, then prompt only after the update is ready to install.

Keep manual update checks interactive so users still confirm the download after explicitly checking.
2026-06-26 14:03:45 +08:00
digua f74aae1bb4 release: v0.28.1 v0.28.1 2026-06-26 10:07:20 +08:00
digua 6cc7454049 fix(electron): preserve socks proxy fallback
Return a recorded SOCKS proxy before a fallback DIRECT rule so local model downloads fail explicitly instead of silently bypassing the configured system proxy.
2026-06-26 09:56:32 +08:00
digua cbc8728f41 fix(electron): resolve model download proxy from session
Make desktop proxy saves await Electron session proxy application before model download proxy resolution.

Resolve HTTP, HTTPS, and SOCKS system proxy rules for semantic index model downloads while preserving DIRECT precedence.
2026-06-26 09:56:32 +08:00
digua f304146c8f fix(semantic-index): honor proxy for local model downloads
Pass a model download proxy through the semantic index worker and local embedding provider so local Hugging Face downloads use the effective proxy.

Restart idle local workers when the proxy changes before preload, build, or search calls, and initialize app logging inside the worker process for preload diagnostics.
2026-06-26 09:56:32 +08:00
digua e5954d8fb1 feat(chat-record): polish viewer controls and highlights 2026-06-25 23:18:11 +08:00
digua 851166188d fix(import): harden push and pull import guards
Combine the PR review fixes for push import validation, deduplication, system sender handling, and pull import lock scoping into one reviewable change.
2026-06-25 21:45:16 +08:00
diguaandClaude Sonnet 4.6 4694d83729 fix(electron): align Desktop API port with CLI, auto-fallback on conflict, update docs
- Change default port from 5200 to 3110 in sync config-manager, Vue store,
  and settings UI to match CLI DEFAULT_API_PORT
- Desktop API server now tries up to 10 consecutive ports when preferred
  port is occupied (e.g. CLI already running); reports actual bound port
- Scope Desktop import route lock to session (Set<string>) matching the
  push-importer fix
- Docs: remove unimplemented JSONL/X-Dry-Run claims, fix port references,
  replace platform-specific examples with generic ones

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 21:45:16 +08:00
diguaandClaude Sonnet 4.6 4e2130b2d7 fix(import): address review findings in push import API and pipeline
- Reject path-traversal sessionIds (SAFE_SESSION_ID_RE)
- Reject X-Dry-Run header with 400 instead of silently writing
- Propagate DataDirCompatibilityError as 409 instead of swallowing to 500
- Scope concurrency lock to session instead of process-wide boolean
- Fix hash dedup hole: load hashes for ALL existing messages, not just
  those without platformMessageId
- Fix backfill segment index: detect when written timestamps predate the
  existing tail and use full generateSessionIndex rebuild instead of
  incremental; apply same fix to shared incremental-importer used by
  Desktop and pull sync
- Validate member platformId, message content/platformMessageId types, and
  option enum values in validatePayload before any writes
- Use writeParseResultToDb in fullImport to populate member_name_history;
  pre-deduplicate messages before delegating and auto-create minimal members
  for senders absent from the members list
- Add content-hash to existingKeys when accepting a pmid-keyed row so a
  same-content no-pmid copy later in the same batch is caught

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 21:45:16 +08:00
diguaandClaude Sonnet 4.6 3442110c08 feat(ui): hide sidebar scrollbar by default, show on hover
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 21:45:16 +08:00
digua 75a10c9fed fix(sync): refresh sessions after background pull 2026-06-25 21:45:16 +08:00
diguaandClaude Sonnet 4.6 1209e2ce4b refactor(import): migrate CLI sync/pull path to shared streaming importer
Removes the legacy apps/cli/src/import/importer.ts (hand-rolled FTS, dedup,
session-ID generation) and apps/cli/src/import/chatlab-reader.ts (buffered
in-memory JSON/JSONL parser). DirectImporter in sync/adapters.ts now calls
streamImport / incrementalImport from stream-import.ts, which use the
@openchatlab/parser streaming pipeline and node-runtime shared logic.

Changes:
- Add sessionId? to StreamImportOptions so callers can fix the target session
  ID instead of auto-generating one (needed by pull engine full-import path)
- Rewrite DirectImporter.incrementalImportFile and fullImportFile to use
  the shared importers; map IncrementalImportResult fields to ImportResult
- Remove legacy exports from apps/cli/src/import/index.ts
- Rewrite importer.test.ts to use streamImport + a temp ChatLab JSON file
  (same two data-dir compatibility gate assertions as before)
- Delete importer.ts and chatlab-reader.ts

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 21:45:16 +08:00