Skip to content

Releases: CaryK753/LifeTree

v0.2.3

Choose a tag to compare

@github-actions github-actions released this 07 Aug 09:59

Release 0.2.3. See CHANGELOG.md for details.

v0.2.2

Choose a tag to compare

@github-actions github-actions released this 04 Aug 08:32

Release 0.2.2. See CHANGELOG.md for details.

v0.2.0 — User Runtime, Legal Consent, Source Cron, Auth Scene

Choose a tag to compare

@CaryK753 CaryK753 released this 28 Jul 17:30

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

Choose a tag to compare

@github-actions github-actions released this 26 Jul 16:34

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) and multi
    (login required, admin role gated by LIFETREE_ADMIN_USER_IDS).
    Toggleable via PUT /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 by lifetree.chat.conversations.v2.<userId>).

Plugins

  • User-uploaded plugin system: POST /plugins/upload with AST syntax
    check, contract validation, and import blacklist (os, subprocess,
    socket, ctypes, pickle, importlib, …). Stored under
    plugins/user_uploaded/{plugin_id}.py with metadata in the
    user_plugins table.
  • DELETE /plugins/{id} (soft-delete) and PATCH /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), channel filters; 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.language auto-detection. Fallback to zh-CN for 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-mode classes prevents rail flash.
  • Safe-area padding for notch / home indicator.
  • iOS navigator.standalone detection (covers cases the display-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-page SidebarToggleButton toggles 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 shared request helper.
  • 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 goalId by 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: builds lifetree-backend and
    lifetree-frontend Docker images on main and v* tags, pushed
    to ghcr.io. Restricted to linux/amd64 (arm64 frontend build
    fails in CI).
  • GitHub Actions release.yml: on v* 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_id added to events/sources/plugins.
  • DB-based app config with auto-migration on startup; use_mode stored
    in app_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-rerank connection failure caused by incorrect URL routing;
    fixed by using the native endpoint
    (/api/v1/services/rerank/text-rerank/text-rerank) for DashScope,
    while gte / qwen3-vl-rerank use the compatible endpoint.
  • GitHub Actions CI/CD for Docker image builds fails when building
    the frontend for arm64 — restricted to linux/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 — added goal_title/goal_scenario/goal_target_date/
    goal_status to the dashboard API response.
  • Dropdown menu in the expanded sidebar was unclickable: the parent
    <aside> backdrop-blur-sm created a stacking context that scoped
    the menu's z-index. Fixed via React Portal to document.body.
  • Conversation page attachment upload returned 500: ingestUpload
    used a raw fetch without the auth token. Refactored to use the
    shared request helper (auto-attaches Authorization: Bearer and
    supports 401 refresh-and-retry).
  • Duplicate brand row in the PWA sidebar drawer — consolidated into
    a single SidebarContent brand 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 history icon 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.
  • ThemeSliderRow in the user menu no longer closes the dropdown on
    click (user can preview multiple themes).
  • Logout now surfaces a native LifeTree ConfirmDialog instead of
    logging out immediately.
  • /notifications page: removed the "实时连接已就绪" pulse indicator;
    unread count badge retained.
  • Use mode configured via LIFETREE_USE_MODE env var (default
    single), stored in app_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.