claude-code-history 0.2.2

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.
Files changed (94) hide show
  1. package/README.md +400 -0
  2. package/dist/cli/commands/export.d.ts +11 -0
  3. package/dist/cli/commands/export.d.ts.map +1 -0
  4. package/dist/cli/commands/export.js +119 -0
  5. package/dist/cli/commands/export.js.map +1 -0
  6. package/dist/cli/commands/list.d.ts +11 -0
  7. package/dist/cli/commands/list.d.ts.map +1 -0
  8. package/dist/cli/commands/list.js +79 -0
  9. package/dist/cli/commands/list.js.map +1 -0
  10. package/dist/cli/commands/migrate.d.ts +11 -0
  11. package/dist/cli/commands/migrate.d.ts.map +1 -0
  12. package/dist/cli/commands/migrate.js +144 -0
  13. package/dist/cli/commands/migrate.js.map +1 -0
  14. package/dist/cli/commands/search.d.ts +11 -0
  15. package/dist/cli/commands/search.d.ts.map +1 -0
  16. package/dist/cli/commands/search.js +94 -0
  17. package/dist/cli/commands/search.js.map +1 -0
  18. package/dist/cli/commands/view.d.ts +11 -0
  19. package/dist/cli/commands/view.d.ts.map +1 -0
  20. package/dist/cli/commands/view.js +67 -0
  21. package/dist/cli/commands/view.js.map +1 -0
  22. package/dist/cli/formatters/pager.d.ts +25 -0
  23. package/dist/cli/formatters/pager.d.ts.map +1 -0
  24. package/dist/cli/formatters/pager.js +119 -0
  25. package/dist/cli/formatters/pager.js.map +1 -0
  26. package/dist/cli/formatters/search.d.ts +38 -0
  27. package/dist/cli/formatters/search.d.ts.map +1 -0
  28. package/dist/cli/formatters/search.js +119 -0
  29. package/dist/cli/formatters/search.js.map +1 -0
  30. package/dist/cli/formatters/session.d.ts +24 -0
  31. package/dist/cli/formatters/session.d.ts.map +1 -0
  32. package/dist/cli/formatters/session.js +247 -0
  33. package/dist/cli/formatters/session.js.map +1 -0
  34. package/dist/cli/formatters/table.d.ts +25 -0
  35. package/dist/cli/formatters/table.d.ts.map +1 -0
  36. package/dist/cli/formatters/table.js +126 -0
  37. package/dist/cli/formatters/table.js.map +1 -0
  38. package/dist/cli/index.d.ts +14 -0
  39. package/dist/cli/index.d.ts.map +1 -0
  40. package/dist/cli/index.js +50 -0
  41. package/dist/cli/index.js.map +1 -0
  42. package/dist/cli/utils/config.d.ts +62 -0
  43. package/dist/cli/utils/config.d.ts.map +1 -0
  44. package/dist/cli/utils/config.js +65 -0
  45. package/dist/cli/utils/config.js.map +1 -0
  46. package/dist/cli/utils/errors.d.ts +86 -0
  47. package/dist/cli/utils/errors.d.ts.map +1 -0
  48. package/dist/cli/utils/errors.js +129 -0
  49. package/dist/cli/utils/errors.js.map +1 -0
  50. package/dist/cli/utils/output.d.ts +74 -0
  51. package/dist/cli/utils/output.d.ts.map +1 -0
  52. package/dist/cli/utils/output.js +113 -0
  53. package/dist/cli/utils/output.js.map +1 -0
  54. package/dist/lib/config.d.ts +44 -0
  55. package/dist/lib/config.d.ts.map +1 -0
  56. package/dist/lib/config.js +60 -0
  57. package/dist/lib/config.js.map +1 -0
  58. package/dist/lib/errors.d.ts +40 -0
  59. package/dist/lib/errors.d.ts.map +1 -0
  60. package/dist/lib/errors.js +61 -0
  61. package/dist/lib/errors.js.map +1 -0
  62. package/dist/lib/export.d.ts +70 -0
  63. package/dist/lib/export.d.ts.map +1 -0
  64. package/dist/lib/export.js +241 -0
  65. package/dist/lib/export.js.map +1 -0
  66. package/dist/lib/index.d.ts +16 -0
  67. package/dist/lib/index.d.ts.map +1 -0
  68. package/dist/lib/index.js +33 -0
  69. package/dist/lib/index.js.map +1 -0
  70. package/dist/lib/migrate.d.ts +50 -0
  71. package/dist/lib/migrate.d.ts.map +1 -0
  72. package/dist/lib/migrate.js +274 -0
  73. package/dist/lib/migrate.js.map +1 -0
  74. package/dist/lib/parser.d.ts +67 -0
  75. package/dist/lib/parser.d.ts.map +1 -0
  76. package/dist/lib/parser.js +321 -0
  77. package/dist/lib/parser.js.map +1 -0
  78. package/dist/lib/platform.d.ts +51 -0
  79. package/dist/lib/platform.d.ts.map +1 -0
  80. package/dist/lib/platform.js +94 -0
  81. package/dist/lib/platform.js.map +1 -0
  82. package/dist/lib/search.d.ts +39 -0
  83. package/dist/lib/search.d.ts.map +1 -0
  84. package/dist/lib/search.js +217 -0
  85. package/dist/lib/search.js.map +1 -0
  86. package/dist/lib/session.d.ts +59 -0
  87. package/dist/lib/session.d.ts.map +1 -0
  88. package/dist/lib/session.js +326 -0
  89. package/dist/lib/session.js.map +1 -0
  90. package/dist/lib/types.d.ts +280 -0
  91. package/dist/lib/types.d.ts.map +1 -0
  92. package/dist/lib/types.js +7 -0
  93. package/dist/lib/types.js.map +1 -0
  94. package/package.json +65 -0
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Custom error classes and type guards for claude-code-history library.
3
+ */
4
+ /**
5
+ * Error thrown when a session is not found by index or UUID.
6
+ */
7
+ export declare class SessionNotFoundError extends Error {
8
+ readonly name: "SessionNotFoundError";
9
+ readonly sessionId: string | number;
10
+ constructor(sessionId: string | number);
11
+ }
12
+ /**
13
+ * Error thrown when a workspace path does not exist.
14
+ */
15
+ export declare class WorkspaceNotFoundError extends Error {
16
+ readonly name: "WorkspaceNotFoundError";
17
+ readonly workspace: string;
18
+ constructor(workspace: string);
19
+ }
20
+ /**
21
+ * Error thrown when Claude Code data directory is not found.
22
+ */
23
+ export declare class DataNotFoundError extends Error {
24
+ readonly name: "DataNotFoundError";
25
+ readonly dataPath: string;
26
+ constructor(dataPath: string);
27
+ }
28
+ /**
29
+ * Check if error is a SessionNotFoundError.
30
+ */
31
+ export declare function isSessionNotFoundError(error: unknown): error is SessionNotFoundError;
32
+ /**
33
+ * Check if error is a WorkspaceNotFoundError.
34
+ */
35
+ export declare function isWorkspaceNotFoundError(error: unknown): error is WorkspaceNotFoundError;
36
+ /**
37
+ * Check if error is a DataNotFoundError.
38
+ */
39
+ export declare function isDataNotFoundError(error: unknown): error is DataNotFoundError;
40
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,EAAG,sBAAsB,CAAU;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;gBAExB,SAAS,EAAE,MAAM,GAAG,MAAM;CAKvC;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,IAAI,EAAG,wBAAwB,CAAU;IAClD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,SAAS,EAAE,MAAM;CAK9B;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAG,mBAAmB,CAAU;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,QAAQ,EAAE,MAAM;CAK7B;AAMD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAEpF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,sBAAsB,CAExF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAE9E"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Custom error classes and type guards for claude-code-history library.
3
+ */
4
+ /**
5
+ * Error thrown when a session is not found by index or UUID.
6
+ */
7
+ export class SessionNotFoundError extends Error {
8
+ name = 'SessionNotFoundError';
9
+ sessionId;
10
+ constructor(sessionId) {
11
+ super(`Session not found: ${sessionId}`);
12
+ this.sessionId = sessionId;
13
+ Object.setPrototypeOf(this, SessionNotFoundError.prototype);
14
+ }
15
+ }
16
+ /**
17
+ * Error thrown when a workspace path does not exist.
18
+ */
19
+ export class WorkspaceNotFoundError extends Error {
20
+ name = 'WorkspaceNotFoundError';
21
+ workspace;
22
+ constructor(workspace) {
23
+ super(`Workspace not found: ${workspace}`);
24
+ this.workspace = workspace;
25
+ Object.setPrototypeOf(this, WorkspaceNotFoundError.prototype);
26
+ }
27
+ }
28
+ /**
29
+ * Error thrown when Claude Code data directory is not found.
30
+ */
31
+ export class DataNotFoundError extends Error {
32
+ name = 'DataNotFoundError';
33
+ dataPath;
34
+ constructor(dataPath) {
35
+ super(`Claude Code data directory not found: ${dataPath}`);
36
+ this.dataPath = dataPath;
37
+ Object.setPrototypeOf(this, DataNotFoundError.prototype);
38
+ }
39
+ }
40
+ // =============================================================================
41
+ // Type Guards
42
+ // =============================================================================
43
+ /**
44
+ * Check if error is a SessionNotFoundError.
45
+ */
46
+ export function isSessionNotFoundError(error) {
47
+ return error instanceof SessionNotFoundError;
48
+ }
49
+ /**
50
+ * Check if error is a WorkspaceNotFoundError.
51
+ */
52
+ export function isWorkspaceNotFoundError(error) {
53
+ return error instanceof WorkspaceNotFoundError;
54
+ }
55
+ /**
56
+ * Check if error is a DataNotFoundError.
57
+ */
58
+ export function isDataNotFoundError(error) {
59
+ return error instanceof DataNotFoundError;
60
+ }
61
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,IAAI,GAAG,sBAA+B,CAAC;IACvC,SAAS,CAAkB;IAEpC,YAAY,SAA0B;QACpC,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACtC,IAAI,GAAG,wBAAiC,CAAC;IACzC,SAAS,CAAS;IAE3B,YAAY,SAAiB;QAC3B,KAAK,CAAC,wBAAwB,SAAS,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,IAAI,GAAG,mBAA4B,CAAC;IACpC,QAAQ,CAAS;IAE1B,YAAY,QAAgB;QAC1B,KAAK,CAAC,yCAAyC,QAAQ,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC3D,CAAC;CACF;AAED,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,KAAK,YAAY,oBAAoB,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,OAAO,KAAK,YAAY,sBAAsB,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO,KAAK,YAAY,iBAAiB,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Export functionality for claude-code-history library.
3
+ *
4
+ * Provides functions to export sessions to JSON and Markdown formats.
5
+ */
6
+ import type { LibraryConfig } from './types.js';
7
+ /**
8
+ * Export a session to formatted JSON string.
9
+ *
10
+ * @param sessionId - Session ID or index to export
11
+ * @param config - Optional configuration
12
+ * @returns Formatted JSON string
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const json = await exportSessionToJson(0);
17
+ * await writeFile('session.json', json);
18
+ * ```
19
+ */
20
+ export declare function exportSessionToJson(sessionId: string | number, config?: LibraryConfig): Promise<string>;
21
+ /**
22
+ * Export all sessions to JSON.
23
+ *
24
+ * @param config - Optional configuration for filtering
25
+ * @returns JSON string containing array of all sessions
26
+ */
27
+ export declare function exportAllSessionsToJson(config?: LibraryConfig): Promise<string>;
28
+ /**
29
+ * Export a session to Markdown format.
30
+ *
31
+ * @param sessionId - Session ID or index to export
32
+ * @param config - Optional configuration
33
+ * @returns Formatted Markdown string
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * const markdown = await exportSessionToMarkdown(0);
38
+ * await writeFile('session.md', markdown);
39
+ * ```
40
+ */
41
+ export declare function exportSessionToMarkdown(sessionId: string | number, config?: LibraryConfig): Promise<string>;
42
+ /**
43
+ * Export all sessions to Markdown.
44
+ *
45
+ * Each session is separated by a horizontal rule.
46
+ *
47
+ * @param config - Optional configuration for filtering
48
+ * @returns Markdown string containing all sessions
49
+ */
50
+ export declare function exportAllSessionsToMarkdown(config?: LibraryConfig): Promise<string>;
51
+ /** Export format options */
52
+ export type ExportFormat = 'json' | 'markdown';
53
+ /**
54
+ * Export a session to the specified format.
55
+ *
56
+ * @param sessionId - Session ID or index
57
+ * @param format - Export format ('json' or 'markdown')
58
+ * @param config - Optional configuration
59
+ * @returns Formatted string in the specified format
60
+ */
61
+ export declare function exportSession(sessionId: string | number, format: ExportFormat, config?: LibraryConfig): Promise<string>;
62
+ /**
63
+ * Export all sessions to the specified format.
64
+ *
65
+ * @param format - Export format ('json' or 'markdown')
66
+ * @param config - Optional configuration
67
+ * @returns Formatted string in the specified format
68
+ */
69
+ export declare function exportAllSessions(format: ExportFormat, config?: LibraryConfig): Promise<string>;
70
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/lib/export.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,aAAa,EAOd,MAAM,YAAY,CAAC;AAQpB;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBrF;AAkHD;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBzF;AAMD,4BAA4B;AAC5B,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,CAAC;AAE/C;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,CAOjB"}
@@ -0,0 +1,241 @@
1
+ /**
2
+ * Export functionality for claude-code-history library.
3
+ *
4
+ * Provides functions to export sessions to JSON and Markdown formats.
5
+ */
6
+ import { resolveConfig } from './config.js';
7
+ import { getSession, listSessions } from './session.js';
8
+ // =============================================================================
9
+ // JSON Export
10
+ // =============================================================================
11
+ /**
12
+ * Export a session to formatted JSON string.
13
+ *
14
+ * @param sessionId - Session ID or index to export
15
+ * @param config - Optional configuration
16
+ * @returns Formatted JSON string
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const json = await exportSessionToJson(0);
21
+ * await writeFile('session.json', json);
22
+ * ```
23
+ */
24
+ export async function exportSessionToJson(sessionId, config) {
25
+ const resolved = resolveConfig(config);
26
+ const session = await getSession(sessionId, {
27
+ dataPath: resolved.dataPath,
28
+ workspace: resolved.workspace,
29
+ });
30
+ return JSON.stringify(session, null, 2);
31
+ }
32
+ /**
33
+ * Export all sessions to JSON.
34
+ *
35
+ * @param config - Optional configuration for filtering
36
+ * @returns JSON string containing array of all sessions
37
+ */
38
+ export async function exportAllSessionsToJson(config) {
39
+ const resolved = resolveConfig(config);
40
+ const sessionsResult = await listSessions({
41
+ dataPath: resolved.dataPath,
42
+ workspace: resolved.workspace,
43
+ limit: Number.MAX_SAFE_INTEGER,
44
+ offset: 0,
45
+ });
46
+ const sessions = [];
47
+ for (const summary of sessionsResult.data) {
48
+ try {
49
+ const session = await getSession(summary.id, {
50
+ dataPath: resolved.dataPath,
51
+ });
52
+ sessions.push(session);
53
+ }
54
+ catch {
55
+ // Skip sessions that fail to load
56
+ continue;
57
+ }
58
+ }
59
+ return JSON.stringify(sessions, null, 2);
60
+ }
61
+ // =============================================================================
62
+ // Markdown Export
63
+ // =============================================================================
64
+ /**
65
+ * Format user message content for markdown.
66
+ */
67
+ function formatUserContent(content) {
68
+ if (typeof content === 'string') {
69
+ return content;
70
+ }
71
+ // Tool results
72
+ const parts = [];
73
+ for (const result of content) {
74
+ parts.push(`<details>\n<summary>Tool Result (${result.tool_use_id})</summary>\n\n\`\`\`\n${result.content}\n\`\`\`\n\n</details>`);
75
+ }
76
+ return parts.join('\n\n');
77
+ }
78
+ /**
79
+ * Format assistant content for markdown.
80
+ */
81
+ function formatAssistantContent(content) {
82
+ const parts = [];
83
+ for (const block of content) {
84
+ switch (block.type) {
85
+ case 'text':
86
+ parts.push(block.text);
87
+ break;
88
+ case 'thinking':
89
+ parts.push(`<details>\n<summary>💭 Thinking</summary>\n\n${block.thinking}\n\n</details>`);
90
+ break;
91
+ case 'tool_use': {
92
+ const inputStr = JSON.stringify(block.input, null, 2);
93
+ parts.push(`<details>\n<summary>🔧 Tool: ${block.name}</summary>\n\n**Input:**\n\`\`\`json\n${inputStr}\n\`\`\`\n\n</details>`);
94
+ break;
95
+ }
96
+ }
97
+ }
98
+ return parts.join('\n\n');
99
+ }
100
+ /**
101
+ * Format a single message for markdown.
102
+ */
103
+ function formatMessageMarkdown(message) {
104
+ switch (message.type) {
105
+ case 'user': {
106
+ const userMsg = message;
107
+ const content = formatUserContent(userMsg.content);
108
+ return `## 👤 User\n\n${content}`;
109
+ }
110
+ case 'assistant': {
111
+ const assistantMsg = message;
112
+ const content = formatAssistantContent(assistantMsg.content);
113
+ const model = assistantMsg.model ? ` (${assistantMsg.model})` : '';
114
+ return `## 🤖 Assistant${model}\n\n${content}`;
115
+ }
116
+ case 'summary':
117
+ // Skip summary in message output (it's in the header)
118
+ return null;
119
+ case 'file-history-snapshot':
120
+ // Skip file history snapshots
121
+ return null;
122
+ }
123
+ }
124
+ /**
125
+ * Format session metadata header for markdown.
126
+ */
127
+ function formatSessionHeader(session) {
128
+ const lines = [
129
+ `# ${session.summary ?? 'Untitled Session'}`,
130
+ '',
131
+ '| Property | Value |',
132
+ '|----------|-------|',
133
+ `| Session ID | \`${session.id}\` |`,
134
+ `| Project | \`${session.projectPath}\` |`,
135
+ `| Started | ${session.timestamp.toISOString()} |`,
136
+ `| Last Activity | ${session.lastActivityAt.toISOString()} |`,
137
+ `| Messages | ${session.messageCount} |`,
138
+ ];
139
+ if (session.gitBranch) {
140
+ lines.push(`| Git Branch | \`${session.gitBranch}\` |`);
141
+ }
142
+ if (session.version) {
143
+ lines.push(`| Claude Code Version | ${session.version} |`);
144
+ }
145
+ if (session.agentIds.length > 0) {
146
+ lines.push(`| Agent Sessions | ${session.agentIds.join(', ')} |`);
147
+ }
148
+ lines.push('', '---', '');
149
+ return lines.join('\n');
150
+ }
151
+ /**
152
+ * Export a session to Markdown format.
153
+ *
154
+ * @param sessionId - Session ID or index to export
155
+ * @param config - Optional configuration
156
+ * @returns Formatted Markdown string
157
+ *
158
+ * @example
159
+ * ```typescript
160
+ * const markdown = await exportSessionToMarkdown(0);
161
+ * await writeFile('session.md', markdown);
162
+ * ```
163
+ */
164
+ export async function exportSessionToMarkdown(sessionId, config) {
165
+ const resolved = resolveConfig(config);
166
+ const session = await getSession(sessionId, {
167
+ dataPath: resolved.dataPath,
168
+ workspace: resolved.workspace,
169
+ });
170
+ const parts = [formatSessionHeader(session)];
171
+ for (const message of session.messages) {
172
+ const formatted = formatMessageMarkdown(message);
173
+ if (formatted) {
174
+ parts.push(formatted);
175
+ }
176
+ }
177
+ return parts.join('\n\n');
178
+ }
179
+ /**
180
+ * Export all sessions to Markdown.
181
+ *
182
+ * Each session is separated by a horizontal rule.
183
+ *
184
+ * @param config - Optional configuration for filtering
185
+ * @returns Markdown string containing all sessions
186
+ */
187
+ export async function exportAllSessionsToMarkdown(config) {
188
+ const resolved = resolveConfig(config);
189
+ const sessionsResult = await listSessions({
190
+ dataPath: resolved.dataPath,
191
+ workspace: resolved.workspace,
192
+ limit: Number.MAX_SAFE_INTEGER,
193
+ offset: 0,
194
+ });
195
+ const sessionMarkdowns = [];
196
+ for (const summary of sessionsResult.data) {
197
+ try {
198
+ const markdown = await exportSessionToMarkdown(summary.id, {
199
+ dataPath: resolved.dataPath,
200
+ });
201
+ sessionMarkdowns.push(markdown);
202
+ }
203
+ catch {
204
+ // Skip sessions that fail to export
205
+ continue;
206
+ }
207
+ }
208
+ return sessionMarkdowns.join('\n\n---\n\n');
209
+ }
210
+ /**
211
+ * Export a session to the specified format.
212
+ *
213
+ * @param sessionId - Session ID or index
214
+ * @param format - Export format ('json' or 'markdown')
215
+ * @param config - Optional configuration
216
+ * @returns Formatted string in the specified format
217
+ */
218
+ export async function exportSession(sessionId, format, config) {
219
+ switch (format) {
220
+ case 'json':
221
+ return exportSessionToJson(sessionId, config);
222
+ case 'markdown':
223
+ return exportSessionToMarkdown(sessionId, config);
224
+ }
225
+ }
226
+ /**
227
+ * Export all sessions to the specified format.
228
+ *
229
+ * @param format - Export format ('json' or 'markdown')
230
+ * @param config - Optional configuration
231
+ * @returns Formatted string in the specified format
232
+ */
233
+ export async function exportAllSessions(format, config) {
234
+ switch (format) {
235
+ case 'json':
236
+ return exportAllSessionsToJson(config);
237
+ case 'markdown':
238
+ return exportAllSessionsToMarkdown(config);
239
+ }
240
+ }
241
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/lib/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Claude Code History Library
3
+ *
4
+ * A TypeScript library for reading, searching, exporting, and migrating
5
+ * Claude Code conversation history.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ export type { LibraryConfig, SessionSummary, Session, MessageType, BaseMessage, UserMessage, AssistantMessage, SummaryMessage, FileHistorySnapshotMessage, Message, TextContent, ToolUseContent, ThinkingContent, AssistantContent, ToolResultContent, TokenUsage, FileSnapshot, FileBackup, Pagination, PaginatedResult, SearchMatch, MigrateConfig, MigrateWorkspaceConfig, MigrateError, MigrateResult, } from './types.js';
10
+ export { SessionNotFoundError, WorkspaceNotFoundError, DataNotFoundError, isSessionNotFoundError, isWorkspaceNotFoundError, isDataNotFoundError, } from './errors.js';
11
+ export { listSessions, getSession, getAgentSession } from './session.js';
12
+ export { searchSessions, searchInSession } from './search.js';
13
+ export { exportSessionToJson, exportSessionToMarkdown, exportAllSessionsToJson, exportAllSessionsToMarkdown, exportSession, exportAllSessions, type ExportFormat, } from './export.js';
14
+ export { migrateSession, migrateWorkspace } from './migrate.js';
15
+ export { getDefaultDataPath, getProjectsPath } from './platform.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,YAAY,EAEV,aAAa,EAGb,cAAc,EACd,OAAO,EAGP,WAAW,EACX,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,0BAA0B,EAC1B,OAAO,EAGP,WAAW,EACX,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EAGjB,UAAU,EACV,YAAY,EACZ,UAAU,EAGV,UAAU,EACV,eAAe,EAGf,WAAW,EAGX,aAAa,EACb,sBAAsB,EACtB,YAAY,EACZ,aAAa,GACd,MAAM,YAAY,CAAC;AAMpB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAMrB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAMzE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAM9D,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,2BAA2B,EAC3B,aAAa,EACb,iBAAiB,EACjB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AAMrB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAMhE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Claude Code History Library
3
+ *
4
+ * A TypeScript library for reading, searching, exporting, and migrating
5
+ * Claude Code conversation history.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ // =============================================================================
10
+ // Error Classes and Type Guards
11
+ // =============================================================================
12
+ export { SessionNotFoundError, WorkspaceNotFoundError, DataNotFoundError, isSessionNotFoundError, isWorkspaceNotFoundError, isDataNotFoundError, } from './errors.js';
13
+ // =============================================================================
14
+ // Session Functions
15
+ // =============================================================================
16
+ export { listSessions, getSession, getAgentSession } from './session.js';
17
+ // =============================================================================
18
+ // Search Functions
19
+ // =============================================================================
20
+ export { searchSessions, searchInSession } from './search.js';
21
+ // =============================================================================
22
+ // Export Functions
23
+ // =============================================================================
24
+ export { exportSessionToJson, exportSessionToMarkdown, exportAllSessionsToJson, exportAllSessionsToMarkdown, exportSession, exportAllSessions, } from './export.js';
25
+ // =============================================================================
26
+ // Migration Functions
27
+ // =============================================================================
28
+ export { migrateSession, migrateWorkspace } from './migrate.js';
29
+ // =============================================================================
30
+ // Utility Functions
31
+ // =============================================================================
32
+ export { getDefaultDataPath, getProjectsPath } from './platform.js';
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiDH,gFAAgF;AAChF,gCAAgC;AAChC,gFAAgF;AAEhF,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEzE,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9D,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,2BAA2B,EAC3B,aAAa,EACb,iBAAiB,GAElB,MAAM,aAAa,CAAC;AAErB,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhE,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Migration functionality for claude-code-history library.
3
+ *
4
+ * Provides functions to copy/move sessions between workspaces
5
+ * while preserving rollback functionality.
6
+ */
7
+ import type { LibraryConfig, MigrateConfig, MigrateWorkspaceConfig, MigrateResult } from './types.js';
8
+ /**
9
+ * Migrate sessions to a different workspace.
10
+ *
11
+ * This function copies or moves session files while rewriting all
12
+ * absolute paths to point to the new workspace location.
13
+ *
14
+ * @param config - Migration configuration
15
+ * @returns Migration result with success/failure counts
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * // Copy a single session
20
+ * const result = await migrateSession({
21
+ * sessions: 0,
22
+ * destination: '/new/project/path',
23
+ * });
24
+ *
25
+ * // Move multiple sessions
26
+ * const result = await migrateSession({
27
+ * sessions: [0, 1, 'abc123-...'],
28
+ * destination: '/new/project/path',
29
+ * mode: 'move',
30
+ * });
31
+ * ```
32
+ */
33
+ export declare function migrateSession(config: MigrateConfig, libraryConfig?: LibraryConfig): Promise<MigrateResult>;
34
+ /**
35
+ * Migrate all sessions from one workspace to another.
36
+ *
37
+ * @param config - Workspace migration configuration
38
+ * @returns Migration result with success/failure counts
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * const result = await migrateWorkspace({
43
+ * source: '/old/project/path',
44
+ * destination: '/new/project/path',
45
+ * mode: 'move',
46
+ * });
47
+ * ```
48
+ */
49
+ export declare function migrateWorkspace(config: MigrateWorkspaceConfig, libraryConfig?: LibraryConfig): Promise<MigrateResult>;
50
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/lib/migrate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,aAAa,EAId,MAAM,YAAY,CAAC;AAiNpB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,aAAa,CAAC,CA+CxB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,sBAAsB,EAC9B,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,aAAa,CAAC,CA0ExB"}