From 5ccb54bfc57801f8481c5ddc548839bae00c8c77 Mon Sep 17 00:00:00 2001 From: Anionex <1005128408@qq.com> Date: Mon, 10 Aug 2026 11:47:49 +0800 Subject: [PATCH] chore: update TreeAI project files --- .github/FUNDING.yml | 2 + .github/ISSUE_TEMPLATE/bug_report.yml | 76 ++++++ .github/ISSUE_TEMPLATE/config.yml | 8 + .github/ISSUE_TEMPLATE/feature_request.yml | 37 +++ .github/ISSUE_TEMPLATE/question.yml | 37 +++ .github/PULL_REQUEST_TEMPLATE.md | 19 ++ .github/workflows/ci.yml | 38 +++ .gitignore | 1 + CHANGELOG.md | 30 +++ CODE_OF_CONDUCT.md | 55 +++++ CONTRIBUTING.md | 57 +++++ FUNDING.md | 31 +++ LICENSE | 21 ++ README.md | 196 +++++++++++---- README_CN.md | 160 ++++++++++++ SECURITY.md | 32 +++ SUPPORT.md | 37 +++ assets/hero.png | Bin 0 -> 148877 bytes assets/social-preview.png | Bin 0 -> 117394 bytes assets/treeai-workspace.png | Bin 0 -> 130765 bytes index.html | 14 +- package-lock.json | 267 +-------------------- package.json | 25 +- public/favicon.svg | 9 + src/App.tsx | 4 +- src/components/ChatFlow.tsx | 38 +-- src/components/FileUploadButton.tsx | 15 +- src/components/ModelManager.tsx | 4 +- src/components/Sidebar.tsx | 8 +- src/components/nodes/ChatNode.tsx | 15 +- src/components/nodes/SystemNode.tsx | 17 +- src/context/DatabaseContext.tsx | 3 +- src/db/db.ts | 4 +- src/main.tsx | 4 +- src/services/apiService.ts | 22 +- src/stores/modelStore.ts | 20 +- src/types.ts | 3 +- src/utils/exportUtils.ts | 13 +- src/utils/fileUtils.ts | 51 +--- todo.md | 9 +- 40 files changed, 918 insertions(+), 464 deletions(-) create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml create mode 100644 .github/ISSUE_TEMPLATE/question.yml create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/ci.yml create mode 100644 CHANGELOG.md create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 FUNDING.md create mode 100644 LICENSE create mode 100644 README_CN.md create mode 100644 SECURITY.md create mode 100644 SUPPORT.md create mode 100644 assets/hero.png create mode 100644 assets/social-preview.png create mode 100644 assets/treeai-workspace.png create mode 100644 public/favicon.svg diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..cbf6585 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +# TreeAI funding link shown in the repository Sponsor button. +custom: "https://ifdian.net/a/anionex" diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..02ec098 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,76 @@ +name: Bug report +description: Report a reproducible problem in TreeAI. +title: "[Bug] " +labels: [bug] +body: + - type: markdown + attributes: + value: | + Thanks for helping improve TreeAI. Remove API keys, Authorization headers, private conversations, and sensitive screenshots before submitting. + - type: dropdown + id: area + attributes: + label: Affected area + options: + - Conversation canvas or layout + - Chat node editing or streaming + - Model configuration or API compatibility + - Session persistence or browser storage + - TXT / Markdown import + - FreeMind export + - Documentation or setup + - Other + validations: + required: true + - type: input + id: environment + attributes: + label: Environment + description: Include operating system, browser version, and Node.js version if running locally. + placeholder: macOS 15, Chrome 140, Node.js 20.19 + validations: + required: true + - type: input + id: provider + attributes: + label: Provider and model + description: Name the provider and model only. Never include the API key. + placeholder: OpenAI-compatible provider, model-name + - type: textarea + id: steps + attributes: + label: Reproduction steps + placeholder: | + 1. Configure ... + 2. Create ... + 3. Observe ... + validations: + required: true + - type: textarea + id: expected + attributes: + label: Expected behavior + validations: + required: true + - type: textarea + id: actual + attributes: + label: Actual behavior + validations: + required: true + - type: textarea + id: logs + attributes: + label: Sanitized logs or screenshots + description: Remove credentials, request headers, private conversation content, and unrelated personal data. + - type: checkboxes + id: checks + attributes: + label: Pre-submission checks + options: + - label: I searched existing issues and pull requests for the same problem. + required: true + - label: I removed credentials and private data from everything included above. + required: true + - label: I reviewed the compatibility and support documentation. + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..50b09ab --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: Support guide + url: https://github.com/Anionex/treeAI/blob/master/SUPPORT.md + about: Check setup, CORS, endpoint, streaming, storage, and file-import guidance first. + - name: Security policy + url: https://github.com/Anionex/treeAI/security/policy + about: Report suspected vulnerabilities privately instead of opening a public issue. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..27671fb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,37 @@ +name: Feature request +description: Propose a focused improvement that fits TreeAI's scope. +title: "[Feature] " +labels: [enhancement] +body: + - type: textarea + id: problem + attributes: + label: Problem + description: What workflow is difficult or impossible today? + validations: + required: true + - type: textarea + id: outcome + attributes: + label: Desired outcome + description: Describe the user-visible result rather than only an implementation. + validations: + required: true + - type: textarea + id: proposal + attributes: + label: Proposed approach + description: Include interface, persistence, protocol, or compatibility implications when known. + - type: textarea + id: alternatives + attributes: + label: Alternatives considered + - type: checkboxes + id: scope + attributes: + label: Scope checks + options: + - label: I searched existing issues and pull requests for related proposals. + required: true + - label: I described any effect on credentials, local storage, or provider compatibility. + required: true diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml new file mode 100644 index 0000000..9909ba1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.yml @@ -0,0 +1,37 @@ +name: Setup or usage question +description: Ask a focused question after checking the support guide. +title: "[Question] " +labels: [question] +body: + - type: markdown + attributes: + value: | + Do not include API keys, Authorization headers, private conversation text, or sensitive screenshots. + - type: textarea + id: goal + attributes: + label: What are you trying to do? + validations: + required: true + - type: textarea + id: attempted + attributes: + label: What have you tried? + description: Include sanitized commands, browser/provider details, and the relevant support section. + validations: + required: true + - type: textarea + id: result + attributes: + label: What happened? + validations: + required: true + - type: checkboxes + id: checks + attributes: + label: Checks + options: + - label: I read SUPPORT.md and the README compatibility section. + required: true + - label: I removed credentials and private data. + required: true diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..f0695d8 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,19 @@ +## Summary + +- What user problem does this change solve? +- What approach did you take? + +## Verification + +- [ ] `npm ci` +- [ ] `npm run lint` +- [ ] `npm run build` +- [ ] I exercised the affected UI or API flow. +- [ ] I included a sanitized screenshot for visual changes. + +## Safety and Compatibility + +- [ ] No API keys, private conversations, Authorization headers, or sensitive browser data are included. +- [ ] Existing IndexedDB data remains compatible, or a migration is included and documented. +- [ ] README, limitations, and changelog are updated for user-visible behavior. +- [ ] The pull request is focused and contains no unrelated refactor. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..4f1ec20 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,38 @@ +name: CI + +on: + push: + branches: [master] + pull_request: + branches: [master] + +permissions: + contents: read + +concurrency: + group: ci-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + verify: + runs-on: ubuntu-latest + timeout-minutes: 10 + + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Lint + run: npm run lint + + - name: Build + run: npm run build diff --git a/.gitignore b/.gitignore index 7ceb59f..5a1f241 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ lerna-debug.log* node_modules dist dist-ssr +.playwright-cli *.local # Editor directories and files diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..d214860 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,30 @@ +# Changelog + +All user-visible changes to TreeAI are documented here. + +The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project uses semantic versioning for tagged releases. + +## [Unreleased] + +### Added + +- Bilingual English and Chinese project documentation. +- Repository-owned hero, product screenshot, and social-preview assets. +- MIT license, funding guide, security policy, support guide, contribution guide, issue forms, pull-request template, and CI workflow. +- Browser metadata and a TreeAI favicon. + +### Changed + +- Unified the visible product name as TreeAI. +- Documented the client-only data boundary, provider compatibility, credential storage, and current limitations. +- Limited file import to the TXT and Markdown formats that are actually implemented. +- Removed unused PDF and DOCX dependencies. +- Cleaned up TypeScript and React code so ESLint passes. + +## [0.1.0] - 2025-05-13 + +### Added + +- Initial public preview of the React Flow conversation-tree workspace. +- Local session and model persistence with Dexie and IndexedDB. +- OpenAI-compatible streaming chat requests and FreeMind export. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..f1f4053 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,55 @@ +# TreeAI Code of Conduct + +## Our Pledge + +We as members, contributors, and maintainers pledge to make participation in the TreeAI community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socioeconomic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment include: + +- demonstrating empathy and kindness toward other people; +- respecting differing opinions, viewpoints, and experiences; +- giving and gracefully accepting constructive feedback; +- accepting responsibility, apologizing to those affected by mistakes, and learning from the experience; +- focusing on what is best for the community and the project. + +Examples of unacceptable behavior include: + +- sexualized language or imagery and sexual attention or advances of any kind; +- trolling, insulting or derogatory comments, and personal or political attacks; +- public or private harassment; +- publishing another person's private information without explicit permission; +- sharing credentials, private conversations, or sensitive screenshots that do not belong to you; +- other conduct that could reasonably be considered inappropriate in a professional setting. + +## Enforcement Responsibilities + +Community maintainers are responsible for clarifying and enforcing standards of acceptable behavior. They may remove, edit, or reject comments, commits, code, issues, and other contributions that do not align with this Code of Conduct, and will communicate moderation reasons when appropriate. + +## Scope + +This Code of Conduct applies within all project spaces and when an individual officially represents the project in public spaces. + +## Reporting + +Report abusive, harassing, or otherwise unacceptable behavior privately to `davidyang042@gmail.com` with the subject `TreeAI conduct report`. Do not report conduct incidents through a public issue. + +Reports will be reviewed and investigated as promptly and fairly as practical. Maintainers will respect the privacy and security of reporters and affected participants whenever possible. + +## Enforcement Guidelines + +Maintainers may use the following consequences based on the impact and pattern of behavior: + +1. **Correction** - A private explanation of the violation and how to correct it. +2. **Warning** - A warning with consequences for continued behavior. +3. **Temporary restriction** - Time-limited restrictions on project participation or communication. +4. **Permanent ban** - Permanent removal from project spaces for sustained or severe violations. + +The response may skip steps when necessary to protect the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 2.1, permanently available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html). The enforcement guidelines draw on Mozilla's code-of-conduct enforcement ladder. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..6e131c6 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,57 @@ +# Contributing to TreeAI + +Thanks for helping improve TreeAI. Focused bug fixes, compatibility work, tests, accessibility improvements, documentation, and carefully scoped features are welcome. + +By participating, you agree to follow the [Code of Conduct](CODE_OF_CONDUCT.md). + +## Before You Start + +1. Read [README.md](README.md), especially compatibility, data boundaries, and limitations. +2. Search existing issues and pull requests before starting duplicate work. +3. Open an issue before broad architecture changes, persistence migrations, protocol changes, or new collaboration features. +4. Never include API keys, private conversations, Authorization headers, or unsanitized browser storage in an issue or pull request. + +## Local Setup + +Use Node.js 18 or newer: + +```bash +git clone https://github.com/Anionex/treeAI.git +cd treeAI +npm ci +npm run dev +``` + +## Project Boundaries + +- TreeAI is currently a client-only application. Discuss any backend, account, telemetry, or sync proposal before implementing it. +- Keep the browser-to-provider request boundary explicit. Do not proxy, log, or persist credentials in a new location without a security review. +- The IndexedDB database is still named `TreeChatDatabase` for compatibility with existing local data. Do not rename it without a versioned migration. +- Keep OpenAI-compatible streaming behavior backward compatible unless a change is explicitly scoped as a protocol migration. +- Publish only source-confirmed features. Partially implemented work belongs in project status or limitations. +- Keep pull requests narrow; do not combine unrelated refactors with a fix. + +## Verification + +Run all checks before opening a pull request: + +```bash +npm ci +npm run lint +npm run build +``` + +For user-interface changes, also run the app, exercise the affected flow, and include a sanitized screenshot when visual behavior changes. + +## Pull Requests + +- Explain the user problem and the chosen solution. +- Link the relevant issue when one exists. +- Describe behavior changes and compatibility risks. +- Add or update tests when a practical test surface exists. +- Update README, changelog, screenshots, or limitations when user-facing behavior changes. +- Keep generated lockfile changes limited to dependency changes made by the pull request. + +## Reporting Security Issues + +Do not open a public issue for a suspected vulnerability. Follow [SECURITY.md](SECURITY.md). diff --git a/FUNDING.md b/FUNDING.md new file mode 100644 index 0000000..5f33c10 --- /dev/null +++ b/FUNDING.md @@ -0,0 +1,31 @@ +# Funding / 赞助 + +## English + +TreeAI is open source under the MIT License. If it helps you explore and compare LLM conversations, you can support continued development through [Afdian](https://ifdian.net/a/anionex). + +Sponsorship helps fund: + +- browser and provider compatibility testing; +- visual workflow, accessibility, and performance improvements; +- test coverage and long-term maintenance; +- documentation, examples, and reusable conversation-tree workflows. + +Financial support does not purchase roadmap control, privileged security handling, or private access to user data. Bugs, feature proposals, and contributions continue to follow the same public project process. + +Non-financial support also helps: star or share the repository, report reproducible issues, improve documentation, or contribute focused fixes. + +## 中文 + +TreeAI 以 MIT License 开源。如果它帮助你更清晰地探索和比较大模型对话,可以通过[爱发电](https://ifdian.net/a/anionex)支持持续开发。 + +赞助主要用于: + +- 浏览器与不同模型服务商的兼容性验证; +- 可视化工作流、无障碍与性能优化; +- 自动化测试和长期维护; +- 文档、示例与可复用的树状对话工作流。 + +赞助不会换取路线图控制权、安全例外或用户数据访问权。Bug、功能建议和代码贡献仍按项目公开流程处理。 + +非资金支持同样重要:Star 或分享仓库、提交可复现的问题、改进文档,以及贡献聚焦的修复。 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..4e0a3c8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025-2026 Anionex + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 787964e..dba0c84 100644 --- a/README.md +++ b/README.md @@ -1,68 +1,160 @@ -# TreeChat - 树状结构对话应用 +

+ TreeAI - a visual workspace for branching LLM conversations +

-## 项目描述 -TreeChat是一个基于树状结构的对话应用,支持文件上传、多模型管理和会话管理。采用React + TypeScript构建,提供直观的聊天界面和系统交互功能。 +
-# Usage -1. 确保已安装Node.js 18+ -2. 克隆项目仓库 -3. 安装依赖 +# TreeAI -``` -npm install +[![GitHub stars](https://img.shields.io/github/stars/Anionex/treeAI?style=flat-square&logo=github)](https://github.com/Anionex/treeAI/stargazers) +[![GitHub forks](https://img.shields.io/github/forks/Anionex/treeAI?style=flat-square&logo=github)](https://github.com/Anionex/treeAI/forks) +[![CI](https://img.shields.io/github/actions/workflow/status/Anionex/treeAI/ci.yml?branch=master&style=flat-square&label=CI)](https://github.com/Anionex/treeAI/actions/workflows/ci.yml) +[![License: MIT](https://img.shields.io/github/license/Anionex/treeAI?style=flat-square&color=2F7A5A)](LICENSE) + +[![React](https://img.shields.io/badge/React-18-61DAFB?style=flat-square&logo=react&logoColor=0B172A)](package.json) +[![TypeScript](https://img.shields.io/badge/TypeScript-5-3178C6?style=flat-square&logo=typescript&logoColor=white)](src/) + +**Branch the conversation. Keep every line of thought.** + +A local-first visual workspace for exploring, comparing, and exporting LLM conversation trees across OpenAI-compatible models. + +🌐 [**中文**](README_CN.md) | **English** + +
+ +Linear chat forces every follow-up into one timeline: explore a different assumption and the original path is pushed out of view. TreeAI turns the conversation into a canvas. Continue from any node, create parallel branches, switch model settings per branch, and preserve every route for later comparison. + +All sessions and model configurations stay in the browser's IndexedDB. Requests go directly from the browser to the API endpoint you configure; TreeAI has no application backend. + +

+ TreeAI canvas showing one system prompt branching into two independent replies, with a third follow-up continuing from the left branch +

+ +

One prompt, multiple independent paths. Continue any branch without overwriting the others.

+ +## Why TreeAI + +| Capability | What it gives you | +|---|---| +| **Branch from any node** | Explore an alternative question, assumption, or answer while preserving the original conversation path. | +| **Tune each branch independently** | Select the model, temperature, and token budget at the node level instead of locking one configuration to the whole session. | +| **Keep the workspace local** | Store sessions and model profiles in browser IndexedDB with no TreeAI server in the middle. | +| **Bring in text context** | Add `.txt` and `.md` files as a new conversation node. | +| **Export the tree** | Download a FreeMind-compatible `.mm` file for archiving or further mind-map work. | + +## Quick Start + +### Prerequisites + +- Node.js 18 or newer +- npm +- An OpenAI-compatible API that supports streaming `POST /chat/completions` +- A provider that allows browser CORS requests from your TreeAI origin + +### Run locally + +```bash +git clone https://github.com/Anionex/treeAI.git +cd treeAI +npm ci npm run dev ``` -minimal theme(new): -image +Open the local URL printed by Vite, usually `http://localhost:5173`. +### First conversation +1. Open **Model settings** from the gear button in the lower-left corner. +2. Add a model name, an API base URL such as `https://api.openai.com/v1`, an API key, and the provider's model identifier. +3. Create a conversation and edit the system-prompt node. +4. Add a child node, enter a message, and send it. +5. Use the **+** button on any node to continue that branch or start a parallel one. -## 技术栈 -- 前端框架: React 18 -- 语言: TypeScript -- 构建工具: Vite -- CSS框架: Tailwind CSS + PostCSS -- 状态管理: 自定义Store方案 -- 代码规范: ESLint +> [!IMPORTANT] +> API keys are stored unencrypted in this browser's IndexedDB because TreeAI is a client-only application. Use restricted keys or a trusted local proxy, and do not configure secrets on a shared or untrusted device. -## 功能特性 -- 树状结构对话流 (ChatFlow) -- 文件上传处理 (FileUploadButton) -- 多AI模型管理 (ModelManager) -- 侧边栏导航 (Sidebar) -- 会话状态管理 (sessionStore) -- 数据库上下文 (DatabaseContext) -- 实用工具集 (fileUtils, exportUtils) +## How It Works - -## 项目结构 +```mermaid +flowchart LR + UI["React + React Flow canvas"] --> Stores["Session and model stores"] + Stores <--> DB["Dexie / IndexedDB"] + UI --> API["Streaming chat service"] + API --> Provider["OpenAI-compatible API"] + Files["TXT / Markdown files"] --> UI + Stores --> Export["FreeMind .mm export"] ``` + +- **Conversation graph:** each chat node stores a `parentId`, allowing the UI to reconstruct and render independent branches. +- **Context assembly:** when a node is sent, TreeAI walks its ancestors and sends only that branch's message chain. +- **Streaming:** responses are consumed from Server-Sent Events and rendered incrementally in the active node. +- **Persistence:** sessions, node positions, and model profiles are stored locally through Dexie. + +## Compatibility and Data Boundaries + +TreeAI currently targets OpenAI-style streaming Chat Completions APIs. A compatible provider must: + +- expose `POST {baseUrl}/chat/completions`; +- accept `Authorization: Bearer ...`; +- return `data:` Server-Sent Events with OpenAI-like `choices[0].delta.content`, or one of the small fallback text shapes handled in `apiService.ts`; +- allow direct browser requests through CORS. + +TreeAI sends the configured API key directly to that provider. The repository does not include a relay server, analytics service, or cloud account system. + +## Project Status and Limitations + +TreeAI is an early-stage project (`0.1.0`). The core branching workflow builds and runs, but the following constraints are intentional and user-visible: + +- reasoning-model or provider-specific thinking streams are not supported; +- only `.txt` and `.md` file text extraction is enabled; +- model credentials are stored locally without encryption; +- there is no account sync, collaboration, or cross-device backup; +- automated application tests have not been added yet; CI currently verifies lint and production build; +- the production bundle is still large and would benefit from code splitting. + +See [todo.md](todo.md) and [open issues](https://github.com/Anionex/treeAI/issues) for active work. + +## Development + +| Command | Purpose | +|---|---| +| `npm run dev` | Start the Vite development server. | +| `npm run lint` | Run ESLint across the project. | +| `npm run build` | Create a production bundle. | +| `npm run preview` | Serve the production build locally. | + +The main modules are: + +```text src/ -├── App.tsx # 主应用组件 -├── main.tsx # 应用入口 -├── index.css # 全局样式 -├── types.ts # 类型定义 -├── components/ # UI组件 -│ ├── ChatFlow.tsx # 对话流组件 -│ ├── FileUploadButton.tsx # 文件上传 -│ ├── ModelManager.tsx # 模型管理 -│ ├── Sidebar.tsx # 侧边栏 -│ └── nodes/ # 对话节点组件 -├── context/ # 上下文 -│ └── DatabaseContext.tsx -├── db/ # 数据库相关 -│ └── db.ts -├── services/ # 服务层 -│ └── apiService.ts -├── stores/ # 状态存储 -│ ├── modelStore.ts -│ └── sessionStore.ts -└── utils/ # 工具函数 - ├── exportUtils.ts - └── fileUtils.ts +├── components/ # Canvas, nodes, sidebar, model manager, uploads +├── context/ # Database loading boundary +├── db/ # Dexie / IndexedDB persistence +├── services/ # Streaming OpenAI-compatible requests +├── stores/ # Session and model state +└── utils/ # File extraction, notifications, mind-map export ``` +Before opening a pull request, run: + +```bash +npm ci +npm run lint +npm run build +``` + +## Community + +- Questions and setup help: [Support guide](SUPPORT.md) +- Bugs and feature requests: [Issue forms](https://github.com/Anionex/treeAI/issues/new/choose) +- Contributions: [Contributing guide](CONTRIBUTING.md) +- Security reports: [Security policy](SECURITY.md) +- Community standards: [Code of Conduct](CODE_OF_CONDUCT.md) +- User-visible changes: [Changelog](CHANGELOG.md) +- Sponsorship: [Funding guide](FUNDING.md) + +## About + +TreeAI is maintained by [Anionex](https://github.com/Anionex). If the project helps you explore LLM conversations more clearly, you can support it by starring the repository, sharing it, reporting reproducible issues, contributing focused improvements, or [sponsoring continued development](FUNDING.md). -## 贡献 -欢迎提交Pull Request,请确保代码通过所有检查。 +Released under the [MIT License](LICENSE). diff --git a/README_CN.md b/README_CN.md new file mode 100644 index 0000000..1065061 --- /dev/null +++ b/README_CN.md @@ -0,0 +1,160 @@ +

+ TreeAI - 用树状画布探索大模型对话 +

+ +
+ +# TreeAI + +[![GitHub stars](https://img.shields.io/github/stars/Anionex/treeAI?style=flat-square&logo=github)](https://github.com/Anionex/treeAI/stargazers) +[![GitHub forks](https://img.shields.io/github/forks/Anionex/treeAI?style=flat-square&logo=github)](https://github.com/Anionex/treeAI/forks) +[![CI](https://img.shields.io/github/actions/workflow/status/Anionex/treeAI/ci.yml?branch=master&style=flat-square&label=CI)](https://github.com/Anionex/treeAI/actions/workflows/ci.yml) +[![License: MIT](https://img.shields.io/github/license/Anionex/treeAI?style=flat-square&color=2F7A5A)](LICENSE) + +[![React](https://img.shields.io/badge/React-18-61DAFB?style=flat-square&logo=react&logoColor=0B172A)](package.json) +[![TypeScript](https://img.shields.io/badge/TypeScript-5-3178C6?style=flat-square&logo=typescript&logoColor=white)](src/) + +**让对话分叉,也让每一条思路都被保留下来。** + +一个本地优先的可视化大模型对话工作区,用于探索、对比和导出兼容 OpenAI 接口的 LLM 对话树。 + +🌐 **中文** | [**English**](README.md) + +
+ +线性聊天会把所有追问都塞进同一条时间线:一旦探索另一种假设,原来的路径就很快被挤出视野。TreeAI 把对话变成一张画布。你可以从任意节点继续、创建并行分支、为不同分支切换模型参数,并把每一条路线完整保留下来进行比较。 + +所有会话和模型配置都保存在浏览器的 IndexedDB 中。请求由浏览器直接发送到你配置的 API 地址;TreeAI 本身没有应用后端。 + +

+ TreeAI 画布中,一个系统提示词分出两条独立回复,其中左侧分支继续产生了第三个追问节点 +

+ +

一个起点,多条独立路径;继续任意分支都不会覆盖其他思路。

+ +## 为什么使用 TreeAI + +| 能力 | 带来的价值 | +|---|---| +| **从任意节点分叉** | 探索另一种问题、假设或答案,同时保留原有对话路径。 | +| **每个分支独立调参** | 在节点级选择模型、温度和 token 上限,而不是让整段会话被一个配置锁死。 | +| **本地优先** | 会话和模型配置保存在浏览器 IndexedDB,中间没有 TreeAI 服务器。 | +| **导入文本上下文** | 把 `.txt` 和 `.md` 文件内容作为新的对话节点加入画布。 | +| **导出对话树** | 下载兼容 FreeMind 的 `.mm` 文件,用于归档或继续制作思维导图。 | + +## 快速开始 + +### 前置要求 + +- Node.js 18 或更高版本 +- npm +- 支持流式 `POST /chat/completions` 的 OpenAI-compatible API +- 服务商允许来自 TreeAI 页面来源的浏览器 CORS 请求 + +### 本地运行 + +```bash +git clone https://github.com/Anionex/treeAI.git +cd treeAI +npm ci +npm run dev +``` + +打开 Vite 输出的本地地址,通常是 `http://localhost:5173`。 + +### 开始第一段对话 + +1. 点击左下角齿轮,打开**模型管理**。 +2. 填写模型名称、API Base URL(例如 `https://api.openai.com/v1`)、API Key 和服务商的模型标识。 +3. 创建新会话并编辑系统提示词节点。 +4. 添加子节点,输入消息并发送。 +5. 点击任意节点上的 **+**,继续当前分支或创建并行路径。 + +> [!IMPORTANT] +> TreeAI 是纯前端应用,API Key 会以未加密形式保存在当前浏览器的 IndexedDB 中。请使用权限受限的 Key 或可信的本地代理,不要在共享或不可信设备上配置凭据。 + +## 工作原理 + +```mermaid +flowchart LR + UI["React + React Flow 对话画布"] --> Stores["会话与模型 Store"] + Stores <--> DB["Dexie / IndexedDB"] + UI --> API["流式聊天服务"] + API --> Provider["OpenAI-compatible API"] + Files["TXT / Markdown 文件"] --> UI + Stores --> Export["FreeMind .mm 导出"] +``` + +- **对话图结构:** 每个聊天节点保存 `parentId`,界面据此重建和渲染独立分支。 +- **上下文组装:** 发送某个节点时,TreeAI 会沿父节点向上回溯,只提交该分支上的消息链。 +- **流式输出:** 应用读取 Server-Sent Events,并把增量内容实时渲染到当前节点。 +- **本地持久化:** 会话、节点位置和模型配置通过 Dexie 保存在浏览器中。 + +## 兼容性与数据边界 + +TreeAI 当前面向 OpenAI 风格的流式 Chat Completions API。兼容服务商需要: + +- 提供 `POST {baseUrl}/chat/completions`; +- 接受 `Authorization: Bearer ...`; +- 返回 `data:` 形式的 Server-Sent Events,并提供 OpenAI 风格的 `choices[0].delta.content`,或 `apiService.ts` 已处理的少量兼容文本结构; +- 允许浏览器通过 CORS 直接请求。 + +TreeAI 会把配置的 API Key 直接发送给对应服务商。仓库不包含中转服务器、统计分析服务或云端账户系统。 + +## 项目状态与限制 + +TreeAI 仍处于早期阶段(`0.1.0`)。核心树状对话流程可以构建和运行,但目前存在以下明确限制: + +- 暂不支持思考模型或服务商特有的 reasoning stream; +- 文件文本提取目前只启用 `.txt` 和 `.md`; +- 模型凭据在本地保存,但没有加密; +- 暂无账户同步、多人协作和跨设备备份; +- 尚未加入自动化应用测试;CI 目前验证 ESLint 和生产构建; +- 生产 bundle 仍偏大,后续需要进行代码拆分。 + +当前工作可见 [todo.md](todo.md) 和 [GitHub Issues](https://github.com/Anionex/treeAI/issues)。 + +## 开发 + +| 命令 | 用途 | +|---|---| +| `npm run dev` | 启动 Vite 开发服务器。 | +| `npm run lint` | 对整个项目运行 ESLint。 | +| `npm run build` | 生成生产构建。 | +| `npm run preview` | 在本地预览生产构建。 | + +主要目录: + +```text +src/ +├── components/ # 画布、节点、侧栏、模型管理、文件上传 +├── context/ # 数据库加载边界 +├── db/ # Dexie / IndexedDB 持久化 +├── services/ # OpenAI-compatible 流式请求 +├── stores/ # 会话与模型状态 +└── utils/ # 文件提取、通知、思维导图导出 +``` + +提交 Pull Request 前请运行: + +```bash +npm ci +npm run lint +npm run build +``` + +## 社区 + +- 使用和配置帮助:[支持指南](SUPPORT.md) +- Bug 与功能建议:[Issue 表单](https://github.com/Anionex/treeAI/issues/new/choose) +- 参与贡献:[贡献指南](CONTRIBUTING.md) +- 安全问题:[安全策略](SECURITY.md) +- 社区规范:[行为准则](CODE_OF_CONDUCT.md) +- 用户可见变更:[更新日志](CHANGELOG.md) +- 赞助项目:[Funding 说明](FUNDING.md) + +## 关于 + +TreeAI 由 [Anionex](https://github.com/Anionex) 维护。如果它让你更清晰地探索大模型对话,欢迎 Star、分享、提交可复现的问题、贡献聚焦的改进,或通过 [Funding 说明](FUNDING.md) 支持持续开发。 + +本项目采用 [MIT License](LICENSE) 开源。 diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..1b67f79 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,32 @@ +# Security Policy + +## Supported Versions + +Security fixes target the latest code on the default branch and the latest tagged release, when one exists. Older snapshots may not receive backports. + +## Reporting a Vulnerability + +Email `davidyang042@gmail.com` with the subject `TreeAI security report`. + +Include: + +- the affected version or commit; +- a clear description of the issue and impact; +- minimal reproduction steps or a proof of concept; +- relevant browser, provider, and operating-system details; +- suggested remediation, if known. + +Do not include live API keys, private conversations, unrelated personal data, or destructive payloads. Do not open a public issue until the report has been reviewed and a coordinated disclosure plan has been agreed. + +## Security Model + +TreeAI is a client-only browser application: + +- model API keys are stored unencrypted in IndexedDB; +- requests are sent directly from the browser to the configured provider; +- TreeAI does not provide a relay server, account system, or cloud backup; +- browser extensions, injected scripts, shared profiles, and compromised origins may access local data. + +Use restricted credentials, prefer a trusted local proxy when possible, and do not configure TreeAI on shared or untrusted devices. + +Useful reports include credential exposure, cross-site scripting, unsafe export handling, storage-boundary bypasses, dependency vulnerabilities with a demonstrated path, and provider-request behavior that leaks secrets. diff --git a/SUPPORT.md b/SUPPORT.md new file mode 100644 index 0000000..da29061 --- /dev/null +++ b/SUPPORT.md @@ -0,0 +1,37 @@ +# TreeAI Support + +## Start Here + +1. Confirm Node.js 18 or newer with `node --version`. +2. Run `npm ci`, then `npm run lint` and `npm run build`. +3. Review [Compatibility and Data Boundaries](README.md#compatibility-and-data-boundaries). +4. Remove secrets and private conversation content before sharing logs or screenshots. + +## Common Problems + +### The browser blocks the API request + +TreeAI calls the configured provider directly. The provider must allow browser CORS requests from the TreeAI origin. If it does not, use a trusted local proxy that adds the required CORS headers. + +### The endpoint returns 404 + +Enter the API base URL, usually ending in `/v1`, rather than the full `/chat/completions` path. TreeAI appends `/chat/completions` itself. + +### No text appears while streaming + +TreeAI expects Server-Sent Events containing `data:` lines and an OpenAI-style `choices[0].delta.content` field. Provider-specific reasoning streams and unrelated event formats are not currently supported. + +### I need to clear local data + +Sessions and model profiles live in browser IndexedDB under `TreeChatDatabase`. Use the browser's site-data or developer-tools storage controls to remove it. This permanently deletes local TreeAI data for that origin. + +### File import fails + +Only plain-text `.txt` and Markdown `.md` files are currently supported. + +## Where to Ask + +- Reproducible bugs: use the [bug report form](https://github.com/Anionex/treeAI/issues/new/choose). +- Focused feature proposals: use the feature request form. +- Setup and usage questions: use the question form. +- Security concerns: follow [SECURITY.md](SECURITY.md) instead of opening a public issue. diff --git a/assets/hero.png b/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..9218ecd43d13930dc254d78c420a0f18a318fcc9 GIT binary patch literal 148877 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