Releases: CaryK753/LifeTree
Releases · CaryK753/LifeTree
Release list
v0.2.3
v0.2.2
Release 0.2.2. See CHANGELOG.md for details.
v0.2.0 — User Runtime, Legal Consent, Source Cron, Auth Scene
Added
User Runtime: Tools, Skills, MCP
- Per-user external tool definitions (name, endpoint, auth, schema) callable by the AI advisor
- User-authored Python skills with AST-checked sandboxed imports
- MCP settings card: configure Model Context Protocol servers per user
- Skill settings card: upload / enable / disable user skills
- Personal service keys: per-user encrypted API keys (OpenAI / Anthropic / Alibaba / DeepSeek / etc.)
- Personal model settings: per-user default model + per-task overrides
- User service policy: per-user rate limits and allowed provider lists
Legal Consent & Privacy
- Versioned Terms of Service and Privacy Policy; users must consent before first use
- /terms and /privacy frontend pages
- Legal-consent dialog on first visit post-registration
Scenario Evolution Tracking
- Records each scenario state transition with timestamp, trigger, and delta
- Timeline view in the scenario detail panel
- Structured evidence ledger and per-factor model for auditable reasoning
Source Cron Refresh + Risk Alerts
- Per-source auto-refresh schedule (auto_refresh, refresh_interval_minutes, next_refresh_at, last_refreshed_at)
- Celery beat task refresh_due_sources runs every minute, re-fetches due sources via Tavily Extract
- High-risk events extracted during refresh trigger risk-propagation + notification flow
- PATCH /sources/{id}/schedule and POST /sources/{id}/refresh API endpoints
- Frontend source-schedule-dialog with presets (1m-24h) and custom minute input
Auth Page ASCII Scene
- Day/night themes with growing forest, wind sway
- Day: ASCII sun, drifting clouds, flying birds with flapping wings
- Night: crescent moon, twinkling stars, right-to-left meteors fading above treetops
- Victorian street lamp with flicker glow halo, fireflies around the lamp
- Lamp/bench/person grow from the ground in sync with trees
- Lamp stays off during the day; only lights up at night with flicker
- prefers-reduced-motion static fallback
Chat & AI Advisor
- chat-model-selector: per-conversation model picker
- ai-elements overhaul: richer tool-call rendering with proper icons (no emojis)
- AI avatar uses @lobehub/icons CDN for model brand icons
Changed
- Chat history sidebar defaults to collapsed on first visit
- /auth ASCII art extracted into ascii-scene-art.ts for reuse
- README documentation updated across all 7 language variants
Fixed
- structuring.py undefined user_id variable in multi-user scenarios
- OAuth callback routing: dynamic [provider] path parameter
- AuthGate no longer renders children when unauthenticated in multi-user mode
- DEFAULT_USER role is now user (not admin); admin applied dynamically via _apply_admin_override
- Trees no longer occlude the lamp/bench/person in the foreground
Full Changelog: v0.1.0...v0.2.0
v0.1.0
First tagged release of LifeTree — the "life decision tree" intelligent
decision support system. This version ships the MVP foundations: goal
management, knowledge graph, scenario branching, AI advisor, plugin
system, PWA support, multi-user auth, and i18n.
Added
Authentication & Multi-user
- Email + password auth with JWT access/refresh tokens, plus optional
email-verification (send-code / register-with-code) flow. - OAuth login (Google / GitHub / Microsoft) with
/auth/oauth/{id}/start
and/auth/oauth/{id}/callback. - Two use modes:
single(default, no login required) andmulti
(login required, admin role gated byLIFETREE_ADMIN_USER_IDS).
Toggleable viaPUT /settings/use-mode. - Admin endpoints:
GET/PATCH/DELETE /admin/users,GET /admin/stats. - AuthGate: in single-user mode the app runs without prompting login;
in multi-user mode the login dialog is non-dismissible. - User data isolation by
user_id(events, sources, plugins, chat
conversations partitioned in localStorage bylifetree.chat.conversations.v2.<userId>).
Plugins
- User-uploaded plugin system:
POST /plugins/uploadwith AST syntax
check, contract validation, and import blacklist (os,subprocess,
socket,ctypes,pickle,importlib, …). Stored under
plugins/user_uploaded/{plugin_id}.pywith metadata in the
user_pluginstable. DELETE /plugins/{id}(soft-delete) andPATCH /plugins/{id}/enabled.- Docker named volume for
/app/plugins/user_uploaded/so custom
scripts persist across container restarts. - Built-in sample plugins:
sample_rss_feed,sample_web_scraper.
Notifications & SMTP
- Notifications API with
severity(urgent/warning/info),status
(read/unread),channelfilters; bulk mark-read and unread-count. - SMTP configuration in settings (server, port, username, password,
sender email/name, TLS/SSL), with send-test-email functionality
(permission-checked before sending). - Real-time SSE push for new notifications.
i18n
- Six locales: 简体中文 (default), 繁體中文, English, Español, Deutsch,
Français. Cookie-driven (lifetree.locale, 1-year validity) with
navigator.languageauto-detection. Fallback tozh-CNfor missing
keys.
PWA
- Installable PWA with manifest, service worker, and offline support.
- Drawer-mode sidebar: in PWA mode (or viewport < 1024px) the sidebar
hides by default and is opened as a slide-in drawer via the per-page
SidebarToggleButton. CSS pre-hydration fallback via inline script +
html.pwa/html.drawer-modeclasses prevents rail flash. - Safe-area padding for notch / home indicator.
- iOS
navigator.standalonedetection (covers cases thedisplay-mode
media query misses).
AI Advisor & Chat
- Streaming SSE chat (
POST /chat/stream) with token-by-token
rendering and Markdown support. Direct backend connection bypasses
the Next.js dev proxy (which buffers SSE). - Conversation history sidebar with rename, new-conversation, and
per-user scoping. Per-pageSidebarToggleButtontoggles the drawer
in PWA / narrow viewport; persistent rail (w-16 ↔ w-60) otherwise. - File upload on the chat page (
POST /ingest/upload) with auth-token
attachment via the sharedrequesthelper. - Tool-call UI rendered inline within the main content (not at the
start or end of the message).
Graph & Scenarios
- Knowledge graph with nodes/edges, minimap (
!w-64 !h-40), and
non-overlapping node/label layout. - Scenario branching, merging, and running (
POST /scenarios/{id}/branch,
/merge,/run); scenario comparison tree view (color bars above
nodes removed) and detail panel. - Dashboard handles undefined
goalIdby returning null instead of
calling the API with undefined.
Settings & Platform Config
- Settings page with SMTP config, send-test-email, API-key reveal
(plaintext when eye button clicked — no "configured, enter new value
to overwrite" stub), and deeply-nested colored capsule UI adapted
for light theme. - Admin-only platform configuration page for model and service
APIs/keys (visible only to admin users).
Infra & CI/CD
- GitHub Actions
build-and-push.yml: buildslifetree-backendand
lifetree-frontendDocker images onmainandv*tags, pushed
toghcr.io. Restricted tolinux/amd64(arm64 frontend build
fails in CI). - GitHub Actions
release.yml: onv*tags, creates a GitHub Release
with notes pulled from this CHANGELOG. - Alembic migrations: initial schema, LLM config tables, user auth
fields, user plugins table,user_idadded to events/sources/plugins. - DB-based app config with auto-migration on startup;
use_modestored
inapp_config.
Fixed
- Streaming SSE responses fail when routed through the Next.js dev
proxy — direct connection to the backend is now used for SSE. qwen3-rerankconnection failure caused by incorrect URL routing;
fixed by using the native endpoint
(/api/v1/services/rerank/text-rerank/text-rerank) for DashScope,
whilegte/qwen3-vl-rerankuse the compatible endpoint.- GitHub Actions CI/CD for Docker image builds fails when building
the frontend for arm64 — restricted tolinux/amd64. - Next.js 16 requires Node.js 22; older Node versions caused frontend
build failures. - SMTP connection unexpectedly closing due to incorrect SSL/TLS
configuration — proper port (465 for SSL, 587 for STARTTLS) and
option selection. - Goal detail page
undefined 'dashboard.title'due to missing API
fields — addedgoal_title/goal_scenario/goal_target_date/
goal_statusto the dashboard API response. - Dropdown menu in the expanded sidebar was unclickable: the parent
<aside>backdrop-blur-smcreated a stacking context that scoped
the menu'sz-index. Fixed via React Portal todocument.body. - Conversation page attachment upload returned 500:
ingestUpload
used a rawfetchwithout the auth token. Refactored to use the
sharedrequesthelper (auto-attachesAuthorization: Bearerand
supports 401 refresh-and-retry). - Duplicate brand row in the PWA sidebar drawer — consolidated into
a singleSidebarContentbrand row with optional close button.
Changed
- README split into per-language files (zh-CN, zh-TW, en, es, de, fr).
- Chat history sidebar toggle button uses a
historyicon instead of
the previous chat icon; chat history entries no longer display chat
icons. - Information entry page sliders adapted for light theme.
- PWA mode no longer renders a mobile top bar — the sidebar toggle
lives in each page's heading instead. ThemeSliderRowin the user menu no longer closes the dropdown on
click (user can preview multiple themes).- Logout now surfaces a native LifeTree
ConfirmDialoginstead of
logging out immediately. /notificationspage: removed the "实时连接已就绪" pulse indicator;
unread count badge retained.- Use mode configured via
LIFETREE_USE_MODEenv var (default
single), stored inapp_config.use_mode. - Minibar dropdown menu positioning: bottom edge at avatar's top edge
with 4px gap, clamping to top viewport edge (minimum 8px margin) if
overflow occurs; auto-closes on outside click. - All browser native dialogs/popups replaced with LifeTree's existing
dialog/popup components. - Toast notifications allow text selection and copying.