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.