返回顶部
o

opencode-session-toolkitOpenCode会话工具

读取本地 OpenCode SQLite 数据库,支持跨目录会话查询、消息检查与 Markdown 导出。

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.1
安全检测
已通过
79
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

opencode-session-toolkit

OpenCode Session Toolkit

读取本地 OpenCode SQLite 数据库,支持跨目录检索 session、message、part、project。

以下命令默认都在当前 SKILL.md 所在目录执行。导出 Markdown 时,直接运行内置脚本:

bash
./scripts/exportopencodesessions.py --help

适用场景

  • - 列出最近会话、按目录过滤、按标题搜索
  • 读取某个 session 的 message JSON
  • 将匹配的会话导出为一个会话一个 Markdown 文件
  • 查看 OpenCode 数据库结构和索引(按需读取 references/schema.md)

工作流程

  1. 1. 通过 opencode db path 解析数据库路径。
  2. 所有查询只读执行,避免误写。
  3. 需要字段细节时再读取 references/schema.md。

1. 解析数据库路径

bash
if ! command -v opencode >/dev/null 2>&1; then
echo opencode command not found in PATH >&2
exit 1
fi

if ! DB_PATH=$(opencode db path 2>/dev/null); then
echo Failed to resolve OpenCode DB path via: opencode db path >&2
exit 1
fi

if [ -z ${DBPATH:-} ] || [ ! -f $DBPATH ]; then
echo OpenCode DB not found: $DB_PATH >&2
exit 1
fi

echo Using DB: $DB_PATH

列出当前存在的 DB 文件(无匹配也不会报错):

bash
find ${XDGDATAHOME:-$HOME/.local/share}/opencode -maxdepth 1 -name *.db -print 2>/dev/null

2. 时间转换与格式化

时间转换:所有时间字段为毫秒级 Unix timestamp,可用 datetime() 直接在 SQL 中转换。

bash

在 SQL 中转换(推荐,无需外部命令)


datetime(time_updated/1000, unixepoch, localtime)

用 shell 辅助变量计算时间范围

NOW_MS=$(date +%s000) LAST7D=$((NOWMS - 7864001000)) # 最近 7 天 LAST30D=$((NOWMS - 30864001000)) # 最近 30 天

表格对齐:普通字段查询可通过 column -t -s | 对齐(SQLite 默认列分隔符为 |);包含 message.data 这类长 JSON 字段时建议使用 -json 输出。

bash
sqlite3 -readonly $DBPATH SELECT id, title, timeupdated FROM session LIMIT 5; | column -t -s |

3. 常用只读查询

💡 不含长 JSON 字段的查询可追加 | column -t -s | 以对齐输出表格。

列出最近 20 个 session(按更新时间倒序)

bash
sqlite3 -readonly $DB_PATH \
SELECT id, title, directory,
datetime(time_updated/1000,unixepoch,localtime) as updated
FROM session
ORDER BY time_updated DESC
LIMIT 20; | column -t -s |

按目录过滤 session

bash
sqlite3 -readonly $DB_PATH \
SELECT id, title, datetime(time_updated/1000,unixepoch,localtime) as updated
FROM session
WHERE directory LIKE /path/to/project%
ORDER BY time_updated DESC
LIMIT 20; | column -t -s |

按 project_id 过滤 session(最精确的目录关联方式)

bash
sqlite3 -readonly $DB_PATH \
SELECT s.id, s.title, s.directory,
datetime(s.time_updated/1000,unixepoch,localtime) as updated
FROM session s
WHERE s.project_id = your-project-id
ORDER BY s.time_updated DESC
LIMIT 20; | column -t -s |

project_id 对应 project 表的 id 字段,可通过 SELECT id, worktree, name FROM project; 查看项目列表。

跨所有目录全量列出 session(带 project 信息)

bash
sqlite3 -readonly $DB_PATH \
SELECT s.id, s.title, s.directory, p.worktree,
datetime(s.time_updated/1000,unixepoch,localtime) as updated
FROM session s
LEFT JOIN project p ON s.project_id = p.id
ORDER BY s.time_updated DESC
LIMIT 50; | column -t -s |

按时间范围过滤

bash

最近 7 天活跃的 session


sqlite3 -readonly $DB_PATH \
SELECT id, title, datetime(time_updated/1000,unixepoch,localtime) as updated
FROM session
WHERE time_updated > $(( $(date +%s000) - 7864001000 ))
ORDER BY time_updated DESC
LIMIT 20; | column -t -s |

今天创建的 session

sqlite3 -readonly $DB_PATH \ SELECT id, title, datetime(time_created/1000,unixepoch,localtime) as created FROM session WHERE date(time_created/1000,unixepoch,localtime) = date(now,localtime) ORDER BY time_created DESC LIMIT 20; | column -t -s |

查看某 session 的消息内容

bash
sqlite3 -readonly -json $DB_PATH \
SELECT m.id, datetime(m.time_created/1000,unixepoch,localtime) as created, m.data
FROM message m
WHERE m.session_id = your-session-id
ORDER BY m.time_created ASC;

解析 message.data JSON 字段

bash

提取 role、modelID 等关键字段(json_extract)


sqlite3 -readonly $DB_PATH \
SELECT id,
json_extract(data, $.role) as role,
json_extract(data, $.modelID) as model,
datetime(time_created/1000,unixepoch,localtime) as created
FROM message
WHERE session_id = your-session-id
ORDER BY time_created ASC; | column -t -s |

搜索 message 内容(full-text like)

sqlite3 -readonly $DB_PATH \ SELECT id, jsonextract(data, $.role) as role, timecreated FROM message WHERE data LIKE %keyword% ORDER BY time_created DESC LIMIT 20; | column -t -s |

搜索 session 标题

bash
sqlite3 -readonly $DB_PATH \
SELECT id, title, directory, datetime(time_updated/1000,unixepoch,localtime) as updated
FROM session
WHERE title LIKE %keyword%
ORDER BY time_updated DESC
LIMIT 20; | column -t -s |

查看会话统计

bash
sqlite3 -readonly $DB_PATH \
SELECT title, summaryadditions, summarydeletions, summary_files,
datetime(time_created/1000,unixepoch,localtime) as created
FROM session
ORDER BY time_updated DESC
LIMIT 20; | column -t -s |

4. 导出会话为 Markdown

导出脚本会将每个会话写成一个独立的 Markdown 文件。默认行为:

  • - 文件名 = 会话标题 + 创建时间
  • 时间过滤默认使用 time_updated,除非显式传入 --time-field created
  • 默认跳过 step-start / step-finish,减少噪声
  • 当 project.name 为空时,导出分组目录会回退到 worktree 的目录名,再不行就用 global

按某个 project 导出

bash
./scripts/exportopencodesessions.py \
--project opencode-session-toolkit \
--output-dir ./exports/opencode-session-toolkit

--project 会对 project_id、project.name、project.worktree、session.directory 做子串匹配。

按时间段导出

bash
./scripts/exportopencodesessions.py \
--start 2026-03-01 \
--end 2026-03-24T23:59:59 \
--time-field updated \
--output-dir ./exports/march

支持的时间格式:

-

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 opencode-session-toolkit-cn-1776031874 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 opencode-session-toolkit-cn-1776031874 技能

通过命令行安装

skillhub install opencode-session-toolkit-cn-1776031874

下载

⬇ 下载 opencode-session-toolkit v1.0.1(免费)

文件大小: 11.81 KB | 发布时间: 2026-4-13 11:21

v1.0.1 最新 2026-4-13 11:21
opencode-session-toolkit-cn 1.0.1

- 新增详细 SKILL.md,介绍本地 OpenCode SQLite 数据库的读取与导出方案
- 提供跨目录 session、消息、project 等查询与过滤命令
- 详细说明常用 SQL 查询方法(标题、目录、project、时间范围等多条件过滤)
- 新增一键会话 Markdown 导出脚本及常见用法示例
- 附带数据库 schema/表结构查看与时间字段格式化方法
- 明确数据敏感性注意事项及文件结构约定

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部