Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
147 commits
Select commit Hold shift + click to select a range
66b865f
remove crosstab/object
experdot Dec 30, 2025
0931e27
init type
experdot Dec 30, 2025
7f6fb71
update ts compilerOptions
experdot Dec 30, 2025
335fcf7
add docs
experdot Dec 30, 2025
f70f22d
remove useless files
experdot Dec 30, 2025
d4c992a
update typecheck
experdot Dec 30, 2025
5fec07e
add account design
experdot Dec 30, 2025
57fb88c
update architecture
experdot Dec 30, 2025
f521d90
add 5 stage impl
experdot Dec 30, 2025
b655e23
refactor: streamline account switching and enhance store hydration logic
experdot Dec 30, 2025
a066e7d
refactor: unify root items handling and enhance drag-and-drop logic
experdot Dec 30, 2025
08d24fb
refactor: implement layout components and styles for main application…
experdot Dec 30, 2025
1e4f279
refactor: enhance tab management with pinning functionality and impro…
experdot Dec 30, 2025
4fc24ee
refactor: improve item handling in Explorer and use type checks for p…
experdot Dec 30, 2025
7be86fb
refactor: optimize item handling and error messaging in account and p…
experdot Dec 30, 2025
bd3c0a9
refactor: clean up code formatting and improve readability across mul…
experdot Dec 31, 2025
2a6d3cc
refactor: enhance type definitions and improve function return types …
experdot Dec 31, 2025
62e77ed
refactor: enhance sidebar resizing functionality with drag width mana…
experdot Dec 31, 2025
0494a06
refactor: enhance Explorer component with improved scrollbar styles a…
experdot Dec 31, 2025
27dd9e0
refactor: remove unnecessary padding from tree node elements in Explo…
experdot Dec 31, 2025
307130f
refactor: implement tab history navigation with back and forward func…
experdot Dec 31, 2025
111312b
refactor: enhance tab management with preview mode and history naviga…
experdot Dec 31, 2025
1fc4410
refactor: implement tab type registration and enhance tab management …
experdot Dec 31, 2025
3576625
feat: add settings editor with model configuration and prompt list ma…
experdot Dec 31, 2025
a36f8a2
add config tree
experdot Dec 31, 2025
cfa9157
update tree style
experdot Dec 31, 2025
9b8f450
refactor: rename apiHost to baseUrl in LLMConfig and update related c…
experdot Dec 31, 2025
d903a77
refactor: enhance context menu with keep tab option and divider
experdot Dec 31, 2025
851d957
Refactor settings editor components and improve tree structure manage…
experdot Dec 31, 2025
839f13e
refactor: enhance TreeView and ConfigTree components with multi-selec…
experdot Dec 31, 2025
d977b55
refactor: streamline tab management and enhance history tracking
experdot Dec 31, 2025
098376a
refactor: implement merge function for state management during accoun…
experdot Dec 31, 2025
0511ed2
feat: implement chat editor components and functionality
experdot Dec 31, 2025
89a91dd
feat: add BranchPathBar component for enhanced message navigation
experdot Jan 2, 2026
ad12288
feat: add message collapse functionality and enhance ChatEditor compo…
experdot Jan 2, 2026
3c02ed1
refactor: enhance MessageItem component with improved action visibili…
experdot Jan 2, 2026
850f4aa
refactor: remove unused styles from MessageItem and add ModelSelector…
experdot Jan 2, 2026
a8d3f28
refactor: improve smooth scrolling behavior in MessageList component
experdot Jan 2, 2026
9fc0289
Refactor pages/tabs/layout/account store to use IndexedDB for persist…
experdot Jan 2, 2026
33d9a0d
refactor: enhance error handling in AI request and message components
experdot Jan 2, 2026
63b120a
refactor: improve code formatting and readability across multiple com…
experdot Jan 2, 2026
f4376c2
refactor: integrate dropdown menu for folder creation and multi-selec…
experdot Jan 2, 2026
54d4971
refactor: enhance UserProfileCard with edit functionality and improve…
experdot Jan 2, 2026
2d4b85a
refactor: add TypeScript compilation permission to settings.local.json
experdot Jan 2, 2026
2b0ee5b
refactor: enhance LLMConfigPanel, ModelConfigPanel, and PromptListPan…
experdot Jan 2, 2026
8ec4581
refactor: update AIRequest and related components to support optional…
experdot Jan 2, 2026
ba0b80c
refactor: implement input area resizing functionality with draggable …
experdot Jan 2, 2026
6e85e13
refactor: enhance Sidebar and layoutStore to support compact mode wit…
experdot Jan 2, 2026
96e9606
refactor: support export/import data
experdot Jan 2, 2026
62eb0cc
refactor: support message queue
experdot Jan 3, 2026
b5cdaad
refactor: support attachements
experdot Jan 4, 2026
3cd5ff9
refactor: use streamdown components
experdot Jan 4, 2026
3e5280b
refactor: optimize treeview performance
experdot Jan 4, 2026
35bbf8d
support import third-party messages
experdot Jan 4, 2026
4456c72
support reset data seperately
experdot Jan 4, 2026
9720220
import data to specified folder with date suffix
experdot Jan 4, 2026
f2945a0
precalculate message map cache
experdot Jan 4, 2026
ce4269a
keep tabs when tab changed
experdot Jan 4, 2026
26d097d
clear database when reset
experdot Jan 4, 2026
50570c1
support virtual tree
experdot Jan 4, 2026
70277ea
optimize messages performance
experdot Jan 4, 2026
f5e8d25
support auto-update/about
experdot Jan 4, 2026
af3ae98
fix navigation history ui
experdot Jan 4, 2026
f165410
support batch delete pages/folders
experdot Jan 4, 2026
4737ee6
add try finally for isNavigating
experdot Jan 4, 2026
107863c
add try finally for isNavigating
experdot Jan 4, 2026
87a4f46
use popupRender instead of dropdownRender
experdot Jan 4, 2026
bc1de8d
support import old pointer chats
experdot Jan 4, 2026
ea90dcc
update branch path bar and header
experdot Jan 5, 2026
4348139
update message list layout
experdot Jan 5, 2026
e3dee26
fix streamdown mode
experdot Jan 5, 2026
fff997b
Fix css styles
experdot Jan 5, 2026
0dfea56
remove inputArea resize feature
experdot Jan 5, 2026
ea0bfbd
update attachment button style
experdot Jan 5, 2026
2e10063
add doc
experdot Jan 5, 2026
d8fe5b2
fix eslint errors
experdot Jan 5, 2026
ea409f7
support search in editor
experdot Jan 5, 2026
235c989
support global search
experdot Jan 5, 2026
83fdeb4
add topic/title for messages
experdot Jan 5, 2026
1183913
update topic from message.topic to session.topics
experdot Jan 6, 2026
cde885b
support generate modal
experdot Jan 6, 2026
233f7a8
support all title generation
experdot Jan 6, 2026
2aaf614
seperate chat editor css files
experdot Jan 6, 2026
efd2b7d
update font weight styles
experdot Jan 6, 2026
7139aa8
fix outline bugs
experdot Jan 6, 2026
4dd33f9
add navigationService
experdot Jan 6, 2026
86ed1e2
fix search result style
experdot Jan 6, 2026
5759143
fix minor ux issues
experdot Jan 6, 2026
6db5218
fix eslint errors
experdot Jan 6, 2026
a7646b6
migrate generation modal to popover
experdot Jan 6, 2026
354dfb9
add missing file changes
experdot Jan 6, 2026
4dfa284
remove useless docs
experdot Jan 6, 2026
500aea3
support move to folder and search in folder
experdot Jan 6, 2026
b248430
support export
experdot Jan 7, 2026
7e6bed1
add export entries
experdot Jan 7, 2026
c54df32
remove prompt list feature
experdot Jan 8, 2026
d09827d
fix eslint errors
experdot Jan 8, 2026
0e42d7d
refactor usechat
experdot Jan 8, 2026
b9d5268
refactor database transaction
experdot Jan 8, 2026
04cdc5c
refactor messageItem
experdot Jan 8, 2026
2c15eb6
fix eslint errors
experdot Jan 8, 2026
f80cbc1
refactor messge item sub components
experdot Jan 9, 2026
f356f24
support monaco editor
experdot Jan 9, 2026
8e4e572
refactor png export
experdot Jan 9, 2026
bda5a25
update export ui layout
experdot Jan 9, 2026
a6067a9
update export layout
experdot Jan 12, 2026
99126bb
fix export bugs
experdot Jan 12, 2026
d320a15
update free select mode
experdot Jan 12, 2026
480174c
update types.ts
experdot Jan 12, 2026
d5fa243
rename page.title to page.name
experdot Jan 12, 2026
5e48c76
refactor tabTypes
experdot Jan 12, 2026
55dcb5d
fix pinned status
experdot Jan 12, 2026
b1cfd67
support clear/delete folder
experdot Jan 13, 2026
18f9bbb
fix eslint errors
experdot Jan 13, 2026
4349f7c
refactor services/store
experdot Jan 13, 2026
d46c475
add mask when no llms
experdot Jan 13, 2026
9e4323c
update readme
experdot Jan 13, 2026
d205b4c
fix title row style
experdot Jan 13, 2026
a5a6f0b
remove topic's indent
experdot Jan 13, 2026
d457364
fix outline styles
experdot Jan 13, 2026
95ea604
update explorer/tab menus
experdot Jan 13, 2026
325ed3b
fix minor issues
experdot Jan 14, 2026
eda9e70
update configs
experdot Jan 14, 2026
cee1691
refactor db / format code
experdot Jan 14, 2026
94029bd
format readme
experdot Jan 14, 2026
90a116a
fix minor issues
experdot Jan 14, 2026
bd7f742
fix code review issues
experdot Jan 15, 2026
c62ca05
support workspace
experdot Jan 15, 2026
828f18a
fix store resetting
experdot Jan 15, 2026
da2a094
support pointer.md
experdot Jan 15, 2026
361aef0
update docs
experdot Jan 16, 2026
23797f3
fix persistence bugs
experdot Jan 16, 2026
68aaa76
update tabs file path
experdot Jan 16, 2026
02844c4
update claude md
experdot Jan 16, 2026
09799b7
refactor: integrate Streamdown for release notes display in AboutPanel
experdot Jan 27, 2026
150edc5
refactor: enhance tab activation handling in InputArea component
experdot Jan 27, 2026
5ad93cb
refactor: remove rootMessageId from various interfaces and implementa…
experdot Jan 27, 2026
d5bdc21
refactor: remove findRootMessage usage from importers
experdot Jan 27, 2026
c4d199b
Refactor attachment handling and workspace management
experdot May 1, 2026
3dd348c
refactor: update setCurrentWorkspace to accept null and enhance works…
experdot May 1, 2026
9785b9b
feat: Introduce account and workspace scoped persistence interfaces
experdot Jun 26, 2026
5b4579d
feat: implement global shortcuts and improve search functionality
experdot Jun 27, 2026
b137939
refactor: enhance MessageContent and MessageViewMode with improved co…
experdot Jun 27, 2026
35f44b9
refactor: standardize dropdown menu properties and enhance shortcut l…
experdot Jun 27, 2026
0b951a7
refactor: enhance layout and styling in ChatEditor components, improv…
experdot Jun 27, 2026
e9c9a6f
refactor: introduce DateTimeText component for consistent date format…
experdot Jun 27, 2026
939309f
refactor: update PointerMessage and ParsedMessage interfaces to suppo…
experdot Jun 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 8 additions & 2 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,15 @@
"Bash(npm run typecheck:*)",
"Bash(npm run lint)",
"Bash(npm audit:*)",
"Bash(pnpm audit:*)"
"Bash(pnpm audit:*)",
"Bash(cat:*)",
"Bash(npx tsc:*)",
"Bash(npm ls:*)",
"Bash(npm run typecheck:web:*)",
"Bash(npx prettier:*)",
"Bash(pnpm typecheck:*)"
],
"deny": [],
"ask": []
}
}
}
1 change: 1 addition & 0 deletions .prettierrc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ singleQuote: true
semi: false
printWidth: 100
trailingComma: none
endOfLine: lf
84 changes: 84 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

Pointer is a cross-platform desktop AI chat application built with Electron, React 19, and TypeScript. It features tree-structured conversation branches, multi-model support (OpenAI, Claude, DeepSeek, etc.), and a VSCode-like interface with tabs, sidebar, and activity bar.

## Commands

```bash
# Development
pnpm dev # Start development server with hot reload
pnpm start # Run preview mode

# Code quality
pnpm lint # Run ESLint
pnpm format # Run Prettier
pnpm typecheck # Type check both main and renderer processes

# Building
pnpm build # Build with type checking
pnpm build:win # Windows build
pnpm build:mac # macOS build
pnpm build:linux # Linux build
pnpm build:unpack # Build without packaging (for testing)

# Release
pnpm release # Build and publish to GitHub Releases
pnpm release:draft # Build for release testing (no publish)
```

## Architecture

### Three-Tier Electron Structure

- **Main Process** (`src/main/`): Window management, IPC handlers, AI API streaming
- **Preload** (`src/preload/`): Context bridge exposing APIs to renderer
- **Renderer** (`src/renderer/src/`): React application

### Renderer Organization

```
components/
layout/ # MainLayout, ActivityBar, Sidebar, EditorArea, Tabs, TitleBar
editors/ # ChatEditor, SettingsEditor, ExportEditor, WelcomePage
panels/ # Explorer (conversation tree), Search
common/ # Reusable components

stores/ # Zustand stores (messagesStore, pagesStore, settingsStore, etc.)
services/ # Business logic (aiService, messagesService, pagesService, etc.)
hooks/ # Custom hooks (useChat, useChatStreaming, usePages, etc.)
utils/ # Utilities including tab registry system
types/ # TypeScript type definitions (ChatMessage, LLMConfig, Account, etc.)
features/ # Feature modules (export plugins, etc.)
persistence/ # Data persistence layer initialization
```

### Key Architectural Patterns

1. **Message Tree Structure**: Three-level hierarchy - Page (conversation) → Message branches (for branching conversations) → Individual messages

2. **Tab Registry System** (`utils/tabRegistry.ts`): Plugin-style registration for different tab types (chat, settings, export, welcome)

3. **State Management**: Zustand stores with Immer for immutable updates, file-based persistence via IPC

4. **AI Streaming**: Main process handles API calls; renderer receives streamed responses via IPC

## Code Style

- Single quotes, no semicolons, 100 char line width
- Prefer Ant Design components and patterns
- Decompose into small, focused components
- Chinese language context in some documentation

## Key Files

| File | Purpose |
| ------------------------------------------ | ------------------------------------- |
| `src/main/aiHandler.ts` | AI API streaming and request handling |
| `src/main/ipcHandlers.ts` | IPC event handlers |
| `src/renderer/src/stores/messagesStore.ts` | Message state and tree structure |
| `src/renderer/src/hooks/useChat.ts` | Core chat logic hook |
| `src/renderer/src/utils/tabRegistry.ts` | Tab type registration system |
227 changes: 94 additions & 133 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,184 +1,145 @@
# Pointer AI Chat Assistant
# Pointer

![GitHub release (latest by date)](https://img.shields.io/github/v/release/experdot/pointer)
![GitHub all releases](https://img.shields.io/github/downloads/experdot/pointer/total)
![GitHub](https://img.shields.io/github/license/experdot/pointer)
<p align="center">
<img src="./resources/icon.png" alt="Pointer Logo" width="128" height="128">
</p>

[中文版](README.zh-CN.md) | **English**
<p align="center">
<strong>A secure AI chat application crafted for deep thinkers</strong>
</p>

An AI chat application built with Electron + React + TypeScript, supporting **multi-model conversations**, **intelligent crosstab data analysis**, and **knowledge organization management**.
<p align="center">
<a href="https://github.com/experdot/pointer/releases"><img src="https://img.shields.io/github/v/release/experdot/pointer" alt="Release"></a>
<a href="https://github.com/experdot/pointer/releases"><img src="https://img.shields.io/github/downloads/experdot/pointer/total" alt="Downloads"></a>
<a href="https://github.com/experdot/pointer/blob/main/LICENSE"><img src="https://img.shields.io/github/license/experdot/pointer" alt="License"></a>
</p>

基于 Electron + React + TypeScript 开发的AI聊天应用,支持**多模型对话**、**交叉数据分析**和**知识组织管理**。
<p align="center">
<a href="README.zh-CN.md">中文</a> | <strong>English</strong>
</p>

- 博客1:[AI 聊天应用的 10 条高级需求](https://www.cnblogs.com/experdot/p/18924253)
- 博客2:[解决了AI聊天的 10 个痛点后,新的功能:交叉分析表](https://www.cnblogs.com/experdot/p/18974641)
## Overview

[查看中文 README 介绍](README.zh-CN.md)
Pointer is a cross-platform desktop AI chat client built with Electron, React 19, and TypeScript. It connects to various AI model APIs (OpenAI, Claude, DeepSeek, etc.) and provides advanced conversation management with a focus on knowledge organization and deep thinking workflows.

> 示例:渐进式交互,生成小说设定
## Features

![Example](./Screenshot-0.png)
### Multi-Model Support

## Key Features
- Configure multiple AI providers (OpenAI GPT, Anthropic Claude, DeepSeek, etc.)
- Switch between models seamlessly during conversations
- Streaming responses with real-time reasoning process display

### AI Conversation System
### Conversation Branch Management

- Support for multiple AI models (OpenAI GPT, Claude, DeepSeek, etc.)
- Streaming conversation responses with reasoning process display
- Message tree branch management with conversation version control
- Hierarchical chat history organization with parallel tab workflow
- Global content search with keyword highlighting
- Global AI generation task management with task monitoring and cancellation
- Global Q&A traceability mechanism to track generation relationships across pages
- Tree-structured message history with version control
- Create and switch between conversation branches
- Maintain context inheritance across branches
- Navigate conversation history with ease

### Unique Features
### Knowledge Organization

- **AI Crosstab Analysis**: Automatically generate structured comparison analysis tables
- **AI Object Manager**: Visual knowledge data structure management
- **Data Import/Export**: Support for mainstream AI platform data migration (OpenAI ChatGPT / Deepseek Chat)
- Folder-based hierarchical organization
- Message bookmarking and tagging
- Parallel tab workflow for multiple conversations
- Global search with keyword highlighting

### Knowledge Management
### Data Management

- Folder hierarchical organization
- Message bookmarking and tagging
- Import data from ChatGPT and DeepSeek exports
- Export conversations for backup
- Local data storage with privacy focus
- Batch operations and drag-and-drop sorting
- Data backup and recovery

#### Main Interface
### Task Monitoring

![Main Interface](./Screenshot-1.png)
- Global AI generation task management
- Real-time task status and cancellation
- Cross-page Q&A traceability

#### Crosstab Analysis
## Installation

![Crosstab Analysis](./Screenshot-2.png)
### Download

#### Object Manager
Download the latest release for your platform from the [Releases](https://github.com/experdot/pointer/releases) page:

![Object Manager](./Screenshot-3.png)
- **Windows**: `.exe` installer
- **macOS**: `.dmg` installer
- **Linux**: `.AppImage` or `.deb` package

## Quick Start
### Build from Source

### Requirements
Requirements:

- Node.js 18+
- Windows 10+, macOS 10.15+, or Linux

### Installation & Setup
- pnpm

```bash
# Clone the repository
git clone https://github.com/experdot/pointer.git
cd pointer

# Install dependencies
pnpm install

# Development mode
# Run in development mode
pnpm dev

# Build application
# Build for your platform
pnpm build:win # Windows
pnpm build:mac # macOS
pnpm build:linux # Linux
```

### Basic Configuration

1. Launch the application and go to settings
2. Configure AI model parameters:
- Configuration name
- API endpoint
- Access key
- Model identifier
3. Select default model and test connection

## Core Features

### Crosstab Analysis

Convert any topic into structured comparison analysis tables, suitable for:

- Academic research literature comparison
- Business decision solution evaluation
- Educational material knowledge organization
- Product feature competitive analysis

Workflow:

1. Input analysis topic
2. AI automatically generates table structure
3. Fill intersection data
4. Manual editing and optimization

### Object Browser

Visualize complex data structures with support for:
## Configuration

- Tree structure display
- AI automatic node generation
- Manual editing and organization
- Structured data export
1. Launch the application
2. Open Settings
3. Add a new AI model configuration:
- **Name**: Display name for the configuration
- **API Endpoint**: The API URL (e.g., `https://api.openai.com/v1`)
- **API Key**: Your access token
- **Model**: Model identifier (e.g., `gpt-4o`, `claude-3-5-sonnet`)
4. Set as default and test the connection

### Chat Branch Management
## Tech Stack

- Message tree structure
- Independent conversations between branches
- Historical version switching
- Context inheritance
| Category | Technologies |
| --------- | ------------------------------------------------------------ |
| Frontend | React 19, TypeScript, Ant Design, Tailwind CSS |
| Desktop | Electron 35, electron-vite |
| State | Zustand, Immer |
| Build | Vite, Electron Builder |
| Editor | Monaco Editor |
| Rendering | Shiki (syntax highlighting), Streamdown (streaming markdown) |

## Technical Architecture

### Core Technologies

- **Frontend**: React 19 + TypeScript + Ant Design
- **Backend**: Electron main process
- **Build**: Vite + Electron Builder
- **Styling**: CSS Modules + SCSS

### Project Structure
## Project Structure

```
src/
├── main/ # Electron main process
├── renderer/ # Renderer process
│ ├── components/ # React components
│ ├── store/ # State management
│ ├── services/ # Business logic
│ └── utils/ # Utility functions
└── preload/ # Preload scripts
├── main/ # Electron main process
│ ├── aiHandler.ts # AI API request handling
│ ├── ipcHandlers.ts # IPC communication
│ └── autoUpdater.ts # Auto-update logic
├── preload/ # Preload scripts (context bridge)
└── renderer/ # React application
└── src/
├── components/ # UI components
├── services/ # Business logic
├── stores/ # Zustand state management
├── hooks/ # Custom React hooks
├── features/ # Feature modules
└── utils/ # Utility functions
```

### Key Dependencies

- `react-markdown`: Markdown rendering
- `mermaid`: Chart drawing
- `katex`: Mathematical formulas
- `html2canvas`: Screenshot functionality
- `rehype-highlight`: Code highlighting

## Use Cases

**Education & Research**: Course design, knowledge organization, literature analysis
**Business Analysis**: Market research, competitive comparison, strategic planning
**Content Creation**: Topic planning, material organization, structured writing
**Personal Learning**: Note organization, knowledge comparison, review materials

## Development & Contribution

### Development Workflow

1. Fork the project and create a feature branch
2. Follow TypeScript and ESLint standards
3. Submit code and create Pull Request

### Code Standards

- Use functional components and Hooks
- Follow conventional commits format
- Maintain type safety

### Key Improvement Areas
## Contributing

- Bug fixes
- Generation prompt and context optimization
- Performance optimization and user experience improvement
1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Follow the coding standards (TypeScript, ESLint, Prettier)
4. Commit using conventional commits format
5. Open a Pull Request

## License

MIT License - See [LICENSE](LICENSE) file for details
[MIT License](LICENSE)
Loading