@vamdawn/cconvo 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAMnF;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;aAE9B,MAAM,EAAE,MAAM;aACd,OAAO,EAAE,KAAK,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,IAAI,CAAC;KACjB,CAAC;gBALc,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,KAAK,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,IAAI,CAAC;KACjB,CAAC;CAKL;AAGD,wBAAsB,YAAY,CAAC,QAAQ,GAAE,MAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CAgCvF;AAGD,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA+DxF;AAGD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAqB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAMxG;AAGD,wBAAsB,gBAAgB,CACpC,iBAAiB,EAAE,MAAM,EACzB,QAAQ,GAAE,MAAqB,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,mBAAmB,CAAA;CAAE,GAAG,IAAI,CAAC,CAyCzE;AAGD,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAqB,GAC9B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAkBzB"}
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAanF;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;aAE9B,MAAM,EAAE,MAAM;aACd,OAAO,EAAE,KAAK,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,IAAI,CAAC;KACjB,CAAC;gBALc,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,KAAK,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,IAAI,CAAC;KACjB,CAAC;CAKL;AAGD,wBAAsB,YAAY,CAAC,QAAQ,GAAE,MAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CA8CvF;AAcD,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA+FxF;AAGD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAqB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAMxG;AAGD,wBAAsB,gBAAgB,CACpC,iBAAiB,EAAE,MAAM,EACzB,QAAQ,GAAE,MAAqB,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,mBAAmB,CAAA;CAAE,GAAG,IAAI,CAAC,CAyCzE;AAGD,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAqB,GAC9B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAkBzB"}
@@ -2,6 +2,8 @@ import { readdir, stat } from 'fs/promises';
2
2
  import { join } from 'path';
3
3
  import { PROJECTS_DIR, decodePathAsync, getProjectNameAsync, isJsonlFile, extractSessionId, } from '../utils/path.js';
4
4
  import { parseConversationMeta } from './parser.js';
5
+ import { parallelLimit } from '../utils/async.js';
6
+ import { loadCache, saveCache, getCacheEntry, setCacheEntry, } from '../utils/cache.js';
5
7
  // session ID 前缀匹配最小长度
6
8
  const MIN_PREFIX_LENGTH = 4;
7
9
  /**
@@ -19,19 +21,23 @@ export class AmbiguousSessionIdError extends Error {
19
21
  }
20
22
  // 扫描所有项目
21
23
  export async function scanProjects(basePath = PROJECTS_DIR) {
24
+ // 加载缓存
25
+ await loadCache();
22
26
  const projects = [];
23
27
  let totalConversations = 0;
24
28
  let totalSize = 0;
25
29
  try {
26
30
  const entries = await readdir(basePath, { withFileTypes: true });
27
- for (const entry of entries) {
28
- if (entry.isDirectory()) {
29
- const project = await scanProject(join(basePath, entry.name), entry.name);
30
- if (project.totalConversations > 0) {
31
- projects.push(project);
32
- totalConversations += project.totalConversations;
33
- totalSize += project.totalSize;
34
- }
31
+ // 筛选目录
32
+ const directories = entries.filter(entry => entry.isDirectory());
33
+ // 并行扫描项目(限制 10 并发)
34
+ const projectResults = await parallelLimit(directories, 10, (entry) => scanProject(join(basePath, entry.name), entry.name));
35
+ // 过滤有效项目并统计
36
+ for (const project of projectResults) {
37
+ if (project.totalConversations > 0) {
38
+ projects.push(project);
39
+ totalConversations += project.totalConversations;
40
+ totalSize += project.totalSize;
35
41
  }
36
42
  }
37
43
  }
@@ -42,48 +48,83 @@ export async function scanProjects(basePath = PROJECTS_DIR) {
42
48
  }
43
49
  // 按项目名排序
44
50
  projects.sort((a, b) => a.name.localeCompare(b.name));
51
+ // 保存缓存
52
+ await saveCache();
45
53
  return {
46
54
  projects,
47
55
  totalConversations,
48
56
  totalSize,
49
57
  };
50
58
  }
59
+ // 检查是否有 subagents 目录
60
+ async function checkSubagents(dirPath, sessionId) {
61
+ const subagentsDir = join(dirPath, sessionId, 'subagents');
62
+ try {
63
+ await stat(subagentsDir);
64
+ return true;
65
+ }
66
+ catch {
67
+ return false;
68
+ }
69
+ }
51
70
  // 扫描单个项目
52
71
  export async function scanProject(dirPath, encodedPath) {
53
72
  const conversations = [];
54
73
  let totalSize = 0;
55
74
  try {
56
75
  const entries = await readdir(dirPath, { withFileTypes: true });
57
- for (const entry of entries) {
58
- if (entry.isFile() && isJsonlFile(entry.name)) {
59
- const sessionId = extractSessionId(entry.name);
60
- if (sessionId) {
61
- const filePath = join(dirPath, entry.name);
62
- const fileStat = await stat(filePath);
63
- // 检查是否有subagents目录
64
- const subagentsDir = join(dirPath, sessionId, 'subagents');
65
- let hasSubagents = false;
66
- try {
67
- await stat(subagentsDir);
68
- hasSubagents = true;
69
- }
70
- catch {
71
- // 没有subagents目录
72
- }
73
- // 解析对话元数据
74
- const meta = await parseConversationMeta(filePath);
75
- conversations.push({
76
- sessionId,
77
- slug: meta.slug,
78
- filePath,
79
- startTime: meta.startTime,
80
- endTime: meta.endTime,
81
- messageCount: meta.messageCount,
82
- fileSize: fileStat.size,
83
- hasSubagents,
84
- });
85
- totalSize += fileStat.size;
86
- }
76
+ // 筛选 jsonl 文件
77
+ const jsonlEntries = entries.filter((entry) => entry.isFile() && isJsonlFile(entry.name));
78
+ // 并行处理对话文件(限制 20 并发)
79
+ const conversationResults = await parallelLimit(jsonlEntries, 20, async (entry) => {
80
+ const sessionId = extractSessionId(entry.name);
81
+ if (!sessionId)
82
+ return null;
83
+ const filePath = join(dirPath, entry.name);
84
+ const fileStat = await stat(filePath);
85
+ const mtime = fileStat.mtimeMs;
86
+ // 尝试从缓存获取元数据
87
+ let meta;
88
+ const cached = getCacheEntry(filePath, mtime);
89
+ if (cached) {
90
+ // 使用缓存
91
+ meta = {
92
+ slug: cached.slug,
93
+ startTime: new Date(cached.startTime),
94
+ endTime: new Date(cached.endTime),
95
+ messageCount: cached.messageCount,
96
+ };
97
+ }
98
+ else {
99
+ // 解析文件并更新缓存
100
+ const parsed = await parseConversationMeta(filePath);
101
+ meta = parsed;
102
+ setCacheEntry(filePath, {
103
+ mtime,
104
+ slug: parsed.slug,
105
+ startTime: parsed.startTime.toISOString(),
106
+ endTime: parsed.endTime.toISOString(),
107
+ messageCount: parsed.messageCount,
108
+ });
109
+ }
110
+ // 检查 subagents
111
+ const hasSubagents = await checkSubagents(dirPath, sessionId);
112
+ return {
113
+ sessionId,
114
+ slug: meta.slug,
115
+ filePath,
116
+ startTime: meta.startTime,
117
+ endTime: meta.endTime,
118
+ messageCount: meta.messageCount,
119
+ fileSize: fileStat.size,
120
+ hasSubagents,
121
+ };
122
+ });
123
+ // 过滤无效结果并计算总大小
124
+ for (const conv of conversationResults) {
125
+ if (conv) {
126
+ conversations.push(conv);
127
+ totalSize += conv.fileSize;
87
128
  }
88
129
  }
89
130
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * 异步工具函数
3
+ */
4
+ /**
5
+ * 带并发限制的并行执行
6
+ * @param items 待处理项目
7
+ * @param limit 最大并发数
8
+ * @param fn 处理函数
9
+ * @returns 按原顺序返回的结果数组
10
+ */
11
+ export declare function parallelLimit<T, R>(items: T[], limit: number, fn: (item: T) => Promise<R>): Promise<R[]>;
12
+ //# sourceMappingURL=async.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../../src/utils/async.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,CAAC,EAAE,CAAC,EACtC,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,EAAE,CAAC,CAcd"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * 异步工具函数
3
+ */
4
+ /**
5
+ * 带并发限制的并行执行
6
+ * @param items 待处理项目
7
+ * @param limit 最大并发数
8
+ * @param fn 处理函数
9
+ * @returns 按原顺序返回的结果数组
10
+ */
11
+ export async function parallelLimit(items, limit, fn) {
12
+ const results = [];
13
+ let index = 0;
14
+ async function worker() {
15
+ while (index < items.length) {
16
+ const i = index++;
17
+ results[i] = await fn(items[i]);
18
+ }
19
+ }
20
+ const workerCount = Math.min(limit, items.length);
21
+ await Promise.all(Array(workerCount).fill(0).map(() => worker()));
22
+ return results;
23
+ }
24
+ //# sourceMappingURL=async.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async.js","sourceRoot":"","sources":["../../src/utils/async.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAU,EACV,KAAa,EACb,EAA2B;IAE3B,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,UAAU,MAAM;QACnB,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClE,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * 元数据缓存模块
3
+ */
4
+ export interface CacheEntry {
5
+ mtime: number;
6
+ slug?: string;
7
+ startTime: string;
8
+ endTime: string;
9
+ messageCount: number;
10
+ }
11
+ export declare function loadCache(): Promise<void>;
12
+ export declare function saveCache(): Promise<void>;
13
+ export declare function getCacheEntry(filePath: string, mtime: number): CacheEntry | null;
14
+ export declare function setCacheEntry(filePath: string, entry: CacheEntry): void;
15
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAaD,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAkB/C;AAGD,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAU/C;AAGD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAQhF;AAGD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAMvE"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * 元数据缓存模块
3
+ */
4
+ import { readFile, writeFile, mkdir } from 'fs/promises';
5
+ import { join } from 'path';
6
+ import { homedir } from 'os';
7
+ // 缓存目录
8
+ const CACHE_DIR = join(homedir(), '.cconvo');
9
+ const CACHE_FILE = join(CACHE_DIR, 'cache.json');
10
+ // 缓存版本,升级时递增以清除旧缓存
11
+ const CACHE_VERSION = 1;
12
+ // 内存缓存
13
+ let cache = null;
14
+ let isDirty = false;
15
+ // 加载缓存
16
+ export async function loadCache() {
17
+ if (cache)
18
+ return;
19
+ try {
20
+ const data = await readFile(CACHE_FILE, 'utf-8');
21
+ const parsed = JSON.parse(data);
22
+ // 版本不匹配则清除缓存
23
+ if (parsed.version !== CACHE_VERSION) {
24
+ cache = { version: CACHE_VERSION, entries: {} };
25
+ isDirty = true;
26
+ }
27
+ else {
28
+ cache = parsed;
29
+ }
30
+ }
31
+ catch {
32
+ // 缓存文件不存在或解析失败
33
+ cache = { version: CACHE_VERSION, entries: {} };
34
+ }
35
+ }
36
+ // 保存缓存
37
+ export async function saveCache() {
38
+ if (!cache || !isDirty)
39
+ return;
40
+ try {
41
+ await mkdir(CACHE_DIR, { recursive: true });
42
+ await writeFile(CACHE_FILE, JSON.stringify(cache), 'utf-8');
43
+ isDirty = false;
44
+ }
45
+ catch {
46
+ // 保存失败不影响主流程
47
+ }
48
+ }
49
+ // 获取缓存条目
50
+ export function getCacheEntry(filePath, mtime) {
51
+ if (!cache)
52
+ return null;
53
+ const entry = cache.entries[filePath];
54
+ if (entry && entry.mtime === mtime) {
55
+ return entry;
56
+ }
57
+ return null;
58
+ }
59
+ // 设置缓存条目
60
+ export function setCacheEntry(filePath, entry) {
61
+ if (!cache) {
62
+ cache = { version: CACHE_VERSION, entries: {} };
63
+ }
64
+ cache.entries[filePath] = entry;
65
+ isDirty = true;
66
+ }
67
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,OAAO;AACP,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAEjD,mBAAmB;AACnB,MAAM,aAAa,GAAG,CAAC,CAAC;AAiBxB,OAAO;AACP,IAAI,KAAK,GAAqB,IAAI,CAAC;AACnC,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB,OAAO;AACP,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,KAAK;QAAE,OAAO;IAElB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;QAE7C,aAAa;QACb,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;YACrC,KAAK,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YAChD,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,MAAM,CAAC;QACjB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;QACf,KAAK,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAClD,CAAC;AACH,CAAC;AAED,OAAO;AACP,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO;QAAE,OAAO;IAE/B,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5D,OAAO,GAAG,KAAK,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,aAAa;IACf,CAAC;AACH,CAAC;AAED,SAAS;AACT,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,KAAa;IAC3D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS;AACT,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,KAAiB;IAC/D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAClD,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;IAChC,OAAO,GAAG,IAAI,CAAC;AACjB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vamdawn/cconvo",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "Interactive CLI tool to browse and export Claude Code conversations",
5
5
  "main": "dist/index.js",
6
6
  "types": "./dist/index.d.ts",