Skip to content

[feat] 会话历史读取: 从 .jsonl 解析并展示 #323

@aaronwong1989

Description

@aaronwong1989

摘要

实现从 Claude Code 会话文件(~/.claude/projects/{projectKey}/{sessionID}.jsonl)读取和展示对话历史。

背景

cc-connect 的 GetSessionHistory 读取 Claude Code 原生 JSONL 文件:

// agent/claudecode/claudecode.go
func (a *Agent) GetSessionHistory(ctx, sessionID, limit) ([]HistoryEntry, error) {
    // 解析 JSONL: user/assistant 条目
    // 提取 role + text content + timestamp
    // 支持 limit 截断
}

HotPlex 现状

  • types/message_type.go:仅 user_inputfinal_response 持久化
  • 中间事件(tool_use、thinking)不存储
  • 无从 .jsonl 读取原始会话的能力
  • brain/memory.go 的 SessionHistory 仅保存压缩摘要

提案

// internal/engine/session_history.go
type HistoryEntry struct {
    Role      string    // "user" | "assistant" | "system"
    Content   string    // 原始文本或 tool_use 摘要
    Timestamp time.Time
    Type      string    // "text" | "tool_use" | "thinking" | "tool_result"
}

func ReadSessionHistory(sessionID string, limit int) ([]HistoryEntry, error)
func GetSessionSummary(sessionID string) (string, int, error)
// 读取 ~/.claude/projects/{projectKey}/{sessionID}.jsonl

项目目录解析(参考 cc-connect findProjectDir):

// 尝试多种编码格式(Unix pathsep、Windows colon/backslash)
// 扫描 ~/.claude/projects/ 目录匹配

WebSocket API

  • GET /history?session_id=xxx&limit=50 返回历史条目
  • 支持 Slack 等平台通过 /history 命令展示

影响文件

  • 新增: internal/engine/session_history.go
  • 扩展: internal/server/hotplex_ws.go 新增 history 端点
  • 扩展: chatapps/engine_handler.go 新增 /history 命令

参考

  • cc-connect: agent/claudecode/claudecode.go GetSessionHistory
  • 调研文档: docs/research/cc-connect-compare-proposals.md

来源: cc-connect 竞品调研 | 分支: research/cc-connect-deep-dive

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/engine⚙️ Engine - 核心引擎platform/slack💬 Slack - Slack 平台相关priority/high🟠 P1 - 严重影响用户体验、频繁出现的问题size/medium📏 Medium - 1-3 天工作量status/needs-triage🔍 Needs Triage - 需要进一步评估type/feature✨ Feature - 新功能请求

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions