@jacques-ai/core 0.0.7-alpha.1

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 (341) hide show
  1. package/dist/archive/archive-store.d.ts +166 -0
  2. package/dist/archive/archive-store.d.ts.map +1 -0
  3. package/dist/archive/archive-store.js +612 -0
  4. package/dist/archive/archive-store.js.map +1 -0
  5. package/dist/archive/bulk-archive.d.ts +63 -0
  6. package/dist/archive/bulk-archive.d.ts.map +1 -0
  7. package/dist/archive/bulk-archive.js +315 -0
  8. package/dist/archive/bulk-archive.js.map +1 -0
  9. package/dist/archive/filename-utils.d.ts +39 -0
  10. package/dist/archive/filename-utils.d.ts.map +1 -0
  11. package/dist/archive/filename-utils.js +78 -0
  12. package/dist/archive/filename-utils.js.map +1 -0
  13. package/dist/archive/index.d.ts +21 -0
  14. package/dist/archive/index.d.ts.map +1 -0
  15. package/dist/archive/index.js +45 -0
  16. package/dist/archive/index.js.map +1 -0
  17. package/dist/archive/manifest-extractor.d.ts +40 -0
  18. package/dist/archive/manifest-extractor.d.ts.map +1 -0
  19. package/dist/archive/manifest-extractor.js +456 -0
  20. package/dist/archive/manifest-extractor.js.map +1 -0
  21. package/dist/archive/migration.d.ts +59 -0
  22. package/dist/archive/migration.d.ts.map +1 -0
  23. package/dist/archive/migration.js +172 -0
  24. package/dist/archive/migration.js.map +1 -0
  25. package/dist/archive/plan-cataloger.d.ts +24 -0
  26. package/dist/archive/plan-cataloger.d.ts.map +1 -0
  27. package/dist/archive/plan-cataloger.js +100 -0
  28. package/dist/archive/plan-cataloger.js.map +1 -0
  29. package/dist/archive/plan-extractor.d.ts +84 -0
  30. package/dist/archive/plan-extractor.d.ts.map +1 -0
  31. package/dist/archive/plan-extractor.js +371 -0
  32. package/dist/archive/plan-extractor.js.map +1 -0
  33. package/dist/archive/search-indexer.d.ts +50 -0
  34. package/dist/archive/search-indexer.d.ts.map +1 -0
  35. package/dist/archive/search-indexer.js +294 -0
  36. package/dist/archive/search-indexer.js.map +1 -0
  37. package/dist/archive/subagent-store.d.ts +113 -0
  38. package/dist/archive/subagent-store.d.ts.map +1 -0
  39. package/dist/archive/subagent-store.js +173 -0
  40. package/dist/archive/subagent-store.js.map +1 -0
  41. package/dist/archive/types.d.ts +236 -0
  42. package/dist/archive/types.d.ts.map +1 -0
  43. package/dist/archive/types.js +30 -0
  44. package/dist/archive/types.js.map +1 -0
  45. package/dist/branding.d.ts +9 -0
  46. package/dist/branding.d.ts.map +1 -0
  47. package/dist/branding.js +50 -0
  48. package/dist/branding.js.map +1 -0
  49. package/dist/cache/git-utils.d.ts +36 -0
  50. package/dist/cache/git-utils.d.ts.map +1 -0
  51. package/dist/cache/git-utils.js +160 -0
  52. package/dist/cache/git-utils.js.map +1 -0
  53. package/dist/cache/hidden-projects.d.ts +19 -0
  54. package/dist/cache/hidden-projects.d.ts.map +1 -0
  55. package/dist/cache/hidden-projects.js +48 -0
  56. package/dist/cache/hidden-projects.js.map +1 -0
  57. package/dist/cache/index.d.ts +15 -0
  58. package/dist/cache/index.d.ts.map +1 -0
  59. package/dist/cache/index.js +20 -0
  60. package/dist/cache/index.js.map +1 -0
  61. package/dist/cache/metadata-extractor.d.ts +62 -0
  62. package/dist/cache/metadata-extractor.d.ts.map +1 -0
  63. package/dist/cache/metadata-extractor.js +574 -0
  64. package/dist/cache/metadata-extractor.js.map +1 -0
  65. package/dist/cache/mode-detector.d.ts +19 -0
  66. package/dist/cache/mode-detector.d.ts.map +1 -0
  67. package/dist/cache/mode-detector.js +161 -0
  68. package/dist/cache/mode-detector.js.map +1 -0
  69. package/dist/cache/persistence.d.ts +39 -0
  70. package/dist/cache/persistence.d.ts.map +1 -0
  71. package/dist/cache/persistence.js +98 -0
  72. package/dist/cache/persistence.js.map +1 -0
  73. package/dist/cache/project-discovery.d.ts +41 -0
  74. package/dist/cache/project-discovery.d.ts.map +1 -0
  75. package/dist/cache/project-discovery.js +212 -0
  76. package/dist/cache/project-discovery.js.map +1 -0
  77. package/dist/cache/session-index.d.ts +258 -0
  78. package/dist/cache/session-index.d.ts.map +1 -0
  79. package/dist/cache/session-index.js +1030 -0
  80. package/dist/cache/session-index.js.map +1 -0
  81. package/dist/cache/types.d.ts +159 -0
  82. package/dist/cache/types.d.ts.map +1 -0
  83. package/dist/cache/types.js +29 -0
  84. package/dist/cache/types.js.map +1 -0
  85. package/dist/catalog/bulk-extractor.d.ts +18 -0
  86. package/dist/catalog/bulk-extractor.d.ts.map +1 -0
  87. package/dist/catalog/bulk-extractor.js +150 -0
  88. package/dist/catalog/bulk-extractor.js.map +1 -0
  89. package/dist/catalog/extractor.d.ts +53 -0
  90. package/dist/catalog/extractor.d.ts.map +1 -0
  91. package/dist/catalog/extractor.js +522 -0
  92. package/dist/catalog/extractor.js.map +1 -0
  93. package/dist/catalog/index.d.ts +10 -0
  94. package/dist/catalog/index.d.ts.map +1 -0
  95. package/dist/catalog/index.js +11 -0
  96. package/dist/catalog/index.js.map +1 -0
  97. package/dist/catalog/types.d.ts +134 -0
  98. package/dist/catalog/types.d.ts.map +1 -0
  99. package/dist/catalog/types.js +8 -0
  100. package/dist/catalog/types.js.map +1 -0
  101. package/dist/client/index.d.ts +6 -0
  102. package/dist/client/index.d.ts.map +1 -0
  103. package/dist/client/index.js +5 -0
  104. package/dist/client/index.js.map +1 -0
  105. package/dist/client/websocket-client.d.ts +96 -0
  106. package/dist/client/websocket-client.d.ts.map +1 -0
  107. package/dist/client/websocket-client.js +222 -0
  108. package/dist/client/websocket-client.js.map +1 -0
  109. package/dist/context/index.d.ts +13 -0
  110. package/dist/context/index.d.ts.map +1 -0
  111. package/dist/context/index.js +26 -0
  112. package/dist/context/index.js.map +1 -0
  113. package/dist/context/indexer.d.ts +73 -0
  114. package/dist/context/indexer.d.ts.map +1 -0
  115. package/dist/context/indexer.js +233 -0
  116. package/dist/context/indexer.js.map +1 -0
  117. package/dist/context/manager.d.ts +66 -0
  118. package/dist/context/manager.d.ts.map +1 -0
  119. package/dist/context/manager.js +310 -0
  120. package/dist/context/manager.js.map +1 -0
  121. package/dist/context/types.d.ts +149 -0
  122. package/dist/context/types.d.ts.map +1 -0
  123. package/dist/context/types.js +36 -0
  124. package/dist/context/types.js.map +1 -0
  125. package/dist/handoff/catalog.d.ts +54 -0
  126. package/dist/handoff/catalog.d.ts.map +1 -0
  127. package/dist/handoff/catalog.js +121 -0
  128. package/dist/handoff/catalog.js.map +1 -0
  129. package/dist/handoff/generator.d.ts +107 -0
  130. package/dist/handoff/generator.d.ts.map +1 -0
  131. package/dist/handoff/generator.js +603 -0
  132. package/dist/handoff/generator.js.map +1 -0
  133. package/dist/handoff/index.d.ts +13 -0
  134. package/dist/handoff/index.d.ts.map +1 -0
  135. package/dist/handoff/index.js +12 -0
  136. package/dist/handoff/index.js.map +1 -0
  137. package/dist/handoff/llm-generator.d.ts +77 -0
  138. package/dist/handoff/llm-generator.d.ts.map +1 -0
  139. package/dist/handoff/llm-generator.js +513 -0
  140. package/dist/handoff/llm-generator.js.map +1 -0
  141. package/dist/handoff/prompts.d.ts +18 -0
  142. package/dist/handoff/prompts.d.ts.map +1 -0
  143. package/dist/handoff/prompts.js +22 -0
  144. package/dist/handoff/prompts.js.map +1 -0
  145. package/dist/handoff/types.d.ts +28 -0
  146. package/dist/handoff/types.d.ts.map +1 -0
  147. package/dist/handoff/types.js +7 -0
  148. package/dist/handoff/types.js.map +1 -0
  149. package/dist/index.d.ts +56 -0
  150. package/dist/index.d.ts.map +1 -0
  151. package/dist/index.js +132 -0
  152. package/dist/index.js.map +1 -0
  153. package/dist/logging/claude-operations.d.ts +111 -0
  154. package/dist/logging/claude-operations.d.ts.map +1 -0
  155. package/dist/logging/claude-operations.js +132 -0
  156. package/dist/logging/claude-operations.js.map +1 -0
  157. package/dist/logging/error-utils.d.ts +18 -0
  158. package/dist/logging/error-utils.d.ts.map +1 -0
  159. package/dist/logging/error-utils.js +37 -0
  160. package/dist/logging/error-utils.js.map +1 -0
  161. package/dist/logging/index.d.ts +11 -0
  162. package/dist/logging/index.d.ts.map +1 -0
  163. package/dist/logging/index.js +10 -0
  164. package/dist/logging/index.js.map +1 -0
  165. package/dist/logging/logger.d.ts +25 -0
  166. package/dist/logging/logger.d.ts.map +1 -0
  167. package/dist/logging/logger.js +39 -0
  168. package/dist/logging/logger.js.map +1 -0
  169. package/dist/notifications/constants.d.ts +16 -0
  170. package/dist/notifications/constants.d.ts.map +1 -0
  171. package/dist/notifications/constants.js +49 -0
  172. package/dist/notifications/constants.js.map +1 -0
  173. package/dist/notifications/index.d.ts +9 -0
  174. package/dist/notifications/index.d.ts.map +1 -0
  175. package/dist/notifications/index.js +8 -0
  176. package/dist/notifications/index.js.map +1 -0
  177. package/dist/notifications/types.d.ts +28 -0
  178. package/dist/notifications/types.d.ts.map +1 -0
  179. package/dist/notifications/types.js +7 -0
  180. package/dist/notifications/types.js.map +1 -0
  181. package/dist/notifications/utils.d.ts +20 -0
  182. package/dist/notifications/utils.d.ts.map +1 -0
  183. package/dist/notifications/utils.js +37 -0
  184. package/dist/notifications/utils.js.map +1 -0
  185. package/dist/plan/index.d.ts +12 -0
  186. package/dist/plan/index.d.ts.map +1 -0
  187. package/dist/plan/index.js +15 -0
  188. package/dist/plan/index.js.map +1 -0
  189. package/dist/plan/plan-parser.d.ts +33 -0
  190. package/dist/plan/plan-parser.d.ts.map +1 -0
  191. package/dist/plan/plan-parser.js +189 -0
  192. package/dist/plan/plan-parser.js.map +1 -0
  193. package/dist/plan/progress-computer.d.ts +34 -0
  194. package/dist/plan/progress-computer.d.ts.map +1 -0
  195. package/dist/plan/progress-computer.js +211 -0
  196. package/dist/plan/progress-computer.js.map +1 -0
  197. package/dist/plan/progress-matcher.d.ts +34 -0
  198. package/dist/plan/progress-matcher.d.ts.map +1 -0
  199. package/dist/plan/progress-matcher.js +297 -0
  200. package/dist/plan/progress-matcher.js.map +1 -0
  201. package/dist/plan/task-extractor.d.ts +30 -0
  202. package/dist/plan/task-extractor.d.ts.map +1 -0
  203. package/dist/plan/task-extractor.js +435 -0
  204. package/dist/plan/task-extractor.js.map +1 -0
  205. package/dist/plan/types.d.ts +131 -0
  206. package/dist/plan/types.d.ts.map +1 -0
  207. package/dist/plan/types.js +8 -0
  208. package/dist/plan/types.js.map +1 -0
  209. package/dist/project/aggregator.d.ts +43 -0
  210. package/dist/project/aggregator.d.ts.map +1 -0
  211. package/dist/project/aggregator.js +218 -0
  212. package/dist/project/aggregator.js.map +1 -0
  213. package/dist/project/index.d.ts +9 -0
  214. package/dist/project/index.d.ts.map +1 -0
  215. package/dist/project/index.js +9 -0
  216. package/dist/project/index.js.map +1 -0
  217. package/dist/project/types.d.ts +65 -0
  218. package/dist/project/types.d.ts.map +1 -0
  219. package/dist/project/types.js +27 -0
  220. package/dist/project/types.js.map +1 -0
  221. package/dist/session/detector.d.ts +113 -0
  222. package/dist/session/detector.d.ts.map +1 -0
  223. package/dist/session/detector.js +333 -0
  224. package/dist/session/detector.js.map +1 -0
  225. package/dist/session/filters.d.ts +32 -0
  226. package/dist/session/filters.d.ts.map +1 -0
  227. package/dist/session/filters.js +100 -0
  228. package/dist/session/filters.js.map +1 -0
  229. package/dist/session/format-title.d.ts +16 -0
  230. package/dist/session/format-title.d.ts.map +1 -0
  231. package/dist/session/format-title.js +54 -0
  232. package/dist/session/format-title.js.map +1 -0
  233. package/dist/session/index.d.ts +16 -0
  234. package/dist/session/index.d.ts.map +1 -0
  235. package/dist/session/index.js +10 -0
  236. package/dist/session/index.js.map +1 -0
  237. package/dist/session/parser.d.ts +264 -0
  238. package/dist/session/parser.d.ts.map +1 -0
  239. package/dist/session/parser.js +588 -0
  240. package/dist/session/parser.js.map +1 -0
  241. package/dist/session/token-estimator.d.ts +32 -0
  242. package/dist/session/token-estimator.d.ts.map +1 -0
  243. package/dist/session/token-estimator.js +139 -0
  244. package/dist/session/token-estimator.js.map +1 -0
  245. package/dist/session/transformer.d.ts +126 -0
  246. package/dist/session/transformer.d.ts.map +1 -0
  247. package/dist/session/transformer.js +158 -0
  248. package/dist/session/transformer.js.map +1 -0
  249. package/dist/setup/hooks-config.d.ts +35 -0
  250. package/dist/setup/hooks-config.d.ts.map +1 -0
  251. package/dist/setup/hooks-config.js +107 -0
  252. package/dist/setup/hooks-config.js.map +1 -0
  253. package/dist/setup/hooks-symlink.d.ts +17 -0
  254. package/dist/setup/hooks-symlink.d.ts.map +1 -0
  255. package/dist/setup/hooks-symlink.js +89 -0
  256. package/dist/setup/hooks-symlink.js.map +1 -0
  257. package/dist/setup/index.d.ts +13 -0
  258. package/dist/setup/index.d.ts.map +1 -0
  259. package/dist/setup/index.js +12 -0
  260. package/dist/setup/index.js.map +1 -0
  261. package/dist/setup/prerequisites.d.ts +11 -0
  262. package/dist/setup/prerequisites.d.ts.map +1 -0
  263. package/dist/setup/prerequisites.js +72 -0
  264. package/dist/setup/prerequisites.js.map +1 -0
  265. package/dist/setup/settings-merge.d.ts +33 -0
  266. package/dist/setup/settings-merge.d.ts.map +1 -0
  267. package/dist/setup/settings-merge.js +131 -0
  268. package/dist/setup/settings-merge.js.map +1 -0
  269. package/dist/setup/skills-install.d.ts +17 -0
  270. package/dist/setup/skills-install.d.ts.map +1 -0
  271. package/dist/setup/skills-install.js +60 -0
  272. package/dist/setup/skills-install.js.map +1 -0
  273. package/dist/setup/types.d.ts +39 -0
  274. package/dist/setup/types.d.ts.map +1 -0
  275. package/dist/setup/types.js +7 -0
  276. package/dist/setup/types.js.map +1 -0
  277. package/dist/setup/verification.d.ts +9 -0
  278. package/dist/setup/verification.d.ts.map +1 -0
  279. package/dist/setup/verification.js +91 -0
  280. package/dist/setup/verification.js.map +1 -0
  281. package/dist/shortcuts/index.d.ts +8 -0
  282. package/dist/shortcuts/index.d.ts.map +1 -0
  283. package/dist/shortcuts/index.js +6 -0
  284. package/dist/shortcuts/index.js.map +1 -0
  285. package/dist/shortcuts/key-utils.d.ts +54 -0
  286. package/dist/shortcuts/key-utils.d.ts.map +1 -0
  287. package/dist/shortcuts/key-utils.js +129 -0
  288. package/dist/shortcuts/key-utils.js.map +1 -0
  289. package/dist/shortcuts/shortcut-registry.d.ts +37 -0
  290. package/dist/shortcuts/shortcut-registry.d.ts.map +1 -0
  291. package/dist/shortcuts/shortcut-registry.js +322 -0
  292. package/dist/shortcuts/shortcut-registry.js.map +1 -0
  293. package/dist/sources/config.d.ts +91 -0
  294. package/dist/sources/config.d.ts.map +1 -0
  295. package/dist/sources/config.js +229 -0
  296. package/dist/sources/config.js.map +1 -0
  297. package/dist/sources/googledocs.d.ts +43 -0
  298. package/dist/sources/googledocs.d.ts.map +1 -0
  299. package/dist/sources/googledocs.js +298 -0
  300. package/dist/sources/googledocs.js.map +1 -0
  301. package/dist/sources/index.d.ts +14 -0
  302. package/dist/sources/index.d.ts.map +1 -0
  303. package/dist/sources/index.js +19 -0
  304. package/dist/sources/index.js.map +1 -0
  305. package/dist/sources/notion.d.ts +35 -0
  306. package/dist/sources/notion.d.ts.map +1 -0
  307. package/dist/sources/notion.js +352 -0
  308. package/dist/sources/notion.js.map +1 -0
  309. package/dist/sources/obsidian.d.ts +38 -0
  310. package/dist/sources/obsidian.d.ts.map +1 -0
  311. package/dist/sources/obsidian.js +228 -0
  312. package/dist/sources/obsidian.js.map +1 -0
  313. package/dist/sources/types.d.ts +133 -0
  314. package/dist/sources/types.d.ts.map +1 -0
  315. package/dist/sources/types.js +19 -0
  316. package/dist/sources/types.js.map +1 -0
  317. package/dist/storage/index.d.ts +6 -0
  318. package/dist/storage/index.d.ts.map +1 -0
  319. package/dist/storage/index.js +5 -0
  320. package/dist/storage/index.js.map +1 -0
  321. package/dist/storage/writer.d.ts +86 -0
  322. package/dist/storage/writer.d.ts.map +1 -0
  323. package/dist/storage/writer.js +137 -0
  324. package/dist/storage/writer.js.map +1 -0
  325. package/dist/types.d.ts +203 -0
  326. package/dist/types.d.ts.map +1 -0
  327. package/dist/types.js +8 -0
  328. package/dist/types.js.map +1 -0
  329. package/dist/utils/claude-token.d.ts +49 -0
  330. package/dist/utils/claude-token.d.ts.map +1 -0
  331. package/dist/utils/claude-token.js +169 -0
  332. package/dist/utils/claude-token.js.map +1 -0
  333. package/dist/utils/index.d.ts +7 -0
  334. package/dist/utils/index.d.ts.map +1 -0
  335. package/dist/utils/index.js +13 -0
  336. package/dist/utils/index.js.map +1 -0
  337. package/dist/utils/settings.d.ts +100 -0
  338. package/dist/utils/settings.d.ts.map +1 -0
  339. package/dist/utils/settings.js +206 -0
  340. package/dist/utils/settings.js.map +1 -0
  341. package/package.json +54 -0
@@ -0,0 +1,588 @@
1
+ /**
2
+ * Session Parser
3
+ *
4
+ * Parses Claude Code JSONL session files.
5
+ * Entry types:
6
+ * - assistant: Main Claude response
7
+ * - progress: Sub-agent activity
8
+ * - queue-operation: User input queued
9
+ * - system: System events (turn duration)
10
+ * - summary: Auto-generated session summary
11
+ * - file-history-snapshot: File state tracking (skipped)
12
+ */
13
+ import { promises as fs } from "fs";
14
+ import { get_encoding } from "@dqbd/tiktoken";
15
+ import { createLogger } from "../logging/logger.js";
16
+ const logger = createLogger({ prefix: "[Parser]" });
17
+ // Lazy-loaded tiktoken encoder for cl100k_base (Claude's encoding)
18
+ let tiktokenEncoder = null;
19
+ /**
20
+ * Get or create the tiktoken encoder.
21
+ * Uses cl100k_base which is the encoding used by Claude models.
22
+ */
23
+ function getEncoder() {
24
+ if (tiktokenEncoder === null) {
25
+ try {
26
+ tiktokenEncoder = get_encoding("cl100k_base");
27
+ }
28
+ catch {
29
+ // Tiktoken not available, will fall back to estimation
30
+ return null;
31
+ }
32
+ }
33
+ return tiktokenEncoder;
34
+ }
35
+ /**
36
+ * Create empty parse context
37
+ */
38
+ function createParseContext() {
39
+ return {
40
+ taskCalls: new Map(),
41
+ webSearchResults: new Map(),
42
+ };
43
+ }
44
+ /**
45
+ * Parse a JSONL file and return categorized entries.
46
+ */
47
+ export async function parseJSONL(filePath) {
48
+ const content = await fs.readFile(filePath, "utf-8");
49
+ return parseJSONLContent(content);
50
+ }
51
+ /**
52
+ * Parse JSONL content string and return categorized entries.
53
+ */
54
+ export function parseJSONLContent(content) {
55
+ const lines = content.split("\n").filter((line) => line.trim());
56
+ const entries = [];
57
+ const context = createParseContext();
58
+ // Track indices of web_search entries by their toolUseID for post-processing
59
+ const webSearchEntriesByToolId = new Map();
60
+ // First pass: categorize all entries
61
+ for (const line of lines) {
62
+ try {
63
+ const rawEntry = JSON.parse(line);
64
+ // Extract context from this entry (Task calls, WebSearch results)
65
+ extractContextFromEntry(rawEntry, context);
66
+ // Categorize the entry using the context
67
+ const parsed = categorizeEntry(rawEntry, context);
68
+ if (parsed.type !== "skip") {
69
+ // Track web_search entries for post-processing
70
+ // Use parentToolUseID because that links to the original WebSearch tool call
71
+ if (parsed.type === "web_search" && parsed.content.searchType === "results") {
72
+ const rawProgress = rawEntry;
73
+ // parentToolUseID links to the original WebSearch tool call
74
+ // toolUseID is the internal server ID which won't match
75
+ if (rawProgress.parentToolUseID) {
76
+ webSearchEntriesByToolId.set(rawProgress.parentToolUseID, entries.length);
77
+ }
78
+ }
79
+ entries.push(parsed);
80
+ }
81
+ }
82
+ catch (err) {
83
+ // Skip invalid JSON lines
84
+ logger.warn("Failed to parse JSONL line:", err);
85
+ }
86
+ }
87
+ // Second pass: link WebSearch URLs to their search_results_received entries
88
+ for (const [toolUseId, urls] of context.webSearchResults) {
89
+ const entryIndex = webSearchEntriesByToolId.get(toolUseId);
90
+ if (entryIndex !== undefined && entries[entryIndex]) {
91
+ entries[entryIndex].content.searchUrls = urls;
92
+ }
93
+ }
94
+ return entries;
95
+ }
96
+ /**
97
+ * Extract context info from an entry (Task tool calls, WebSearch results)
98
+ */
99
+ function extractContextFromEntry(entry, context) {
100
+ // Extract Task tool calls from assistant entries
101
+ if (entry.type === "assistant") {
102
+ const assistantEntry = entry;
103
+ const contentBlocks = assistantEntry.message?.content || [];
104
+ for (const block of contentBlocks) {
105
+ if (block.type === "tool_use" && block.name === "Task" && block.id && block.input) {
106
+ const input = block.input;
107
+ context.taskCalls.set(block.id, {
108
+ toolUseId: block.id,
109
+ subagentType: input.subagent_type || "unknown",
110
+ description: input.description,
111
+ prompt: input.prompt,
112
+ });
113
+ }
114
+ }
115
+ }
116
+ // Extract WebSearch results from user entries (tool_result with toolUseResult)
117
+ if (entry.type === "user") {
118
+ const userEntry = entry;
119
+ if (userEntry.toolUseResult?.results) {
120
+ for (const result of userEntry.toolUseResult.results) {
121
+ if (result.content && Array.isArray(result.content)) {
122
+ // Find the matching tool_result in the message content
123
+ const messageContent = userEntry.message?.content;
124
+ if (Array.isArray(messageContent)) {
125
+ for (const block of messageContent) {
126
+ if (typeof block === "object" && block !== null && "type" in block && block.type === "tool_result" && "tool_use_id" in block) {
127
+ const toolUseId = block.tool_use_id;
128
+ context.webSearchResults.set(toolUseId, result.content);
129
+ }
130
+ }
131
+ }
132
+ }
133
+ }
134
+ }
135
+ }
136
+ }
137
+ /**
138
+ * Categorize a raw entry into a normalized ParsedEntry.
139
+ * @param entry Raw entry from JSONL
140
+ * @param context Optional parse context with Task calls and WebSearch results
141
+ */
142
+ export function categorizeEntry(entry, context) {
143
+ // Extract base fields with explicit string types
144
+ const uuid = entry.uuid || "";
145
+ const parentUuid = entry.parentUuid ?? null;
146
+ const timestamp = entry.timestamp || "";
147
+ const sessionId = entry.sessionId || "";
148
+ const slug = entry.slug;
149
+ switch (entry.type) {
150
+ case "user": {
151
+ // Claude Code CLI user message format
152
+ const userEntry = entry;
153
+ const messageContent = userEntry.message?.content;
154
+ const text = typeof messageContent === "string"
155
+ ? messageContent
156
+ : extractTextFromBlocks(messageContent);
157
+ // Preserve toolUseResult for task tracking
158
+ const userEntryWithResult = entry;
159
+ const toolUseResult = userEntryWithResult.toolUseResult;
160
+ return {
161
+ uuid,
162
+ parentUuid,
163
+ timestamp,
164
+ sessionId,
165
+ slug,
166
+ type: "user_message",
167
+ content: { text, toolUseResult },
168
+ };
169
+ }
170
+ case "queue-operation": {
171
+ // Queue management operations - only treat as user message if has actual message
172
+ const queueEntry = entry;
173
+ if (!queueEntry.message) {
174
+ // Skip queue operations without messages (enqueue/popAll)
175
+ return {
176
+ uuid,
177
+ parentUuid,
178
+ timestamp,
179
+ sessionId,
180
+ type: "skip",
181
+ content: {},
182
+ };
183
+ }
184
+ const messageContent = queueEntry.message.content;
185
+ const text = typeof messageContent === "string"
186
+ ? messageContent
187
+ : extractTextFromBlocks(messageContent);
188
+ return {
189
+ uuid,
190
+ parentUuid,
191
+ timestamp,
192
+ sessionId,
193
+ type: "user_message",
194
+ content: { text },
195
+ };
196
+ }
197
+ case "assistant": {
198
+ const assistantEntry = entry;
199
+ const message = assistantEntry.message;
200
+ const contentBlocks = message?.content || [];
201
+ // Check if this is a tool call or regular message
202
+ const hasToolUse = contentBlocks.some((block) => block.type === "tool_use");
203
+ if (hasToolUse) {
204
+ // Extract tool call info
205
+ const toolBlock = contentBlocks.find((block) => block.type === "tool_use");
206
+ return {
207
+ uuid,
208
+ parentUuid,
209
+ timestamp,
210
+ sessionId,
211
+ type: "tool_call",
212
+ content: {
213
+ toolName: toolBlock?.name,
214
+ toolInput: toolBlock?.input,
215
+ toolUseId: toolBlock?.id, // For linking to tool results
216
+ model: assistantEntry.model || message?.model,
217
+ usage: message?.usage
218
+ ? {
219
+ inputTokens: message.usage.input_tokens,
220
+ outputTokens: message.usage.output_tokens,
221
+ cacheCreation: message.usage.cache_creation_input_tokens,
222
+ cacheRead: message.usage.cache_read_input_tokens,
223
+ }
224
+ : undefined,
225
+ costUSD: assistantEntry.costUSD,
226
+ durationMs: assistantEntry.durationMs,
227
+ },
228
+ };
229
+ }
230
+ // Regular assistant message - extract text and thinking
231
+ const text = extractTextFromBlocks(contentBlocks);
232
+ const thinking = extractThinkingFromBlocks(contentBlocks);
233
+ return {
234
+ uuid,
235
+ parentUuid,
236
+ timestamp,
237
+ sessionId,
238
+ type: "assistant_message",
239
+ content: {
240
+ text,
241
+ thinking,
242
+ model: assistantEntry.model || message?.model,
243
+ usage: message?.usage
244
+ ? {
245
+ inputTokens: message.usage.input_tokens,
246
+ outputTokens: message.usage.output_tokens,
247
+ cacheCreation: message.usage.cache_creation_input_tokens,
248
+ cacheRead: message.usage.cache_read_input_tokens,
249
+ }
250
+ : undefined,
251
+ costUSD: assistantEntry.costUSD,
252
+ durationMs: assistantEntry.durationMs,
253
+ },
254
+ };
255
+ }
256
+ case "progress": {
257
+ const progressEntry = entry;
258
+ const dataType = progressEntry.data?.type;
259
+ switch (dataType) {
260
+ case "hook_progress":
261
+ return {
262
+ uuid,
263
+ parentUuid,
264
+ timestamp,
265
+ sessionId,
266
+ type: "hook_progress",
267
+ content: {
268
+ hookEvent: progressEntry.data?.hookEvent,
269
+ hookName: progressEntry.data?.hookName,
270
+ hookCommand: progressEntry.data?.command,
271
+ },
272
+ };
273
+ case "agent_progress": {
274
+ // Look up agent type from parent Task tool call
275
+ const parentToolUseId = progressEntry.parentToolUseID;
276
+ const taskInfo = parentToolUseId ? context?.taskCalls.get(parentToolUseId) : undefined;
277
+ return {
278
+ uuid,
279
+ parentUuid,
280
+ timestamp,
281
+ sessionId,
282
+ type: "agent_progress",
283
+ content: {
284
+ agentPrompt: progressEntry.data?.prompt,
285
+ agentId: progressEntry.data?.agentId,
286
+ agentMessageType: progressEntry.data?.message?.type,
287
+ agentMessageContent: progressEntry.data?.message?.message?.content,
288
+ agentType: taskInfo?.subagentType,
289
+ agentDescription: taskInfo?.description,
290
+ },
291
+ };
292
+ }
293
+ case "bash_progress":
294
+ return {
295
+ uuid,
296
+ parentUuid,
297
+ timestamp,
298
+ sessionId,
299
+ type: "bash_progress",
300
+ content: {
301
+ bashOutput: progressEntry.data?.output,
302
+ bashFullOutput: progressEntry.data?.fullOutput,
303
+ bashElapsedSeconds: progressEntry.data?.elapsedTimeSeconds,
304
+ bashTotalLines: progressEntry.data?.totalLines,
305
+ },
306
+ };
307
+ case "mcp_progress":
308
+ return {
309
+ uuid,
310
+ parentUuid,
311
+ timestamp,
312
+ sessionId,
313
+ type: "mcp_progress",
314
+ content: {
315
+ mcpStatus: progressEntry.data?.status,
316
+ mcpServerName: progressEntry.data?.serverName,
317
+ mcpToolName: progressEntry.data?.toolName,
318
+ },
319
+ };
320
+ case "query_update":
321
+ return {
322
+ uuid,
323
+ parentUuid,
324
+ timestamp,
325
+ sessionId,
326
+ type: "web_search",
327
+ content: {
328
+ searchType: "query",
329
+ searchQuery: progressEntry.data?.query,
330
+ },
331
+ };
332
+ case "search_results_received": {
333
+ // URLs are linked in post-processing (see parseJSONLContent)
334
+ return {
335
+ uuid,
336
+ parentUuid,
337
+ timestamp,
338
+ sessionId,
339
+ type: "web_search",
340
+ content: {
341
+ searchType: "results",
342
+ searchQuery: progressEntry.data?.query,
343
+ searchResultCount: progressEntry.data?.resultCount,
344
+ },
345
+ };
346
+ }
347
+ default:
348
+ // Other progress types
349
+ return {
350
+ uuid,
351
+ parentUuid,
352
+ timestamp,
353
+ sessionId,
354
+ type: "system_event",
355
+ content: {
356
+ eventType: "progress",
357
+ eventData: progressEntry.content || progressEntry.data,
358
+ },
359
+ };
360
+ }
361
+ }
362
+ case "system": {
363
+ const systemEntry = entry;
364
+ // Handle turn_duration subtype specially
365
+ if (systemEntry.subtype === "turn_duration") {
366
+ return {
367
+ uuid,
368
+ parentUuid,
369
+ timestamp,
370
+ sessionId,
371
+ type: "turn_duration",
372
+ content: {
373
+ durationMs: systemEntry.durationMs,
374
+ },
375
+ };
376
+ }
377
+ return {
378
+ uuid,
379
+ parentUuid,
380
+ timestamp,
381
+ sessionId,
382
+ type: "system_event",
383
+ content: {
384
+ eventType: systemEntry.subtype || systemEntry.event,
385
+ eventData: systemEntry.data,
386
+ durationMs: systemEntry.data?.turnDurationMs,
387
+ costUSD: systemEntry.data?.totalCostUSD,
388
+ },
389
+ };
390
+ }
391
+ case "summary": {
392
+ const summaryEntry = entry;
393
+ return {
394
+ uuid,
395
+ parentUuid,
396
+ timestamp,
397
+ sessionId,
398
+ type: "summary",
399
+ content: {
400
+ summary: summaryEntry.summary,
401
+ model: summaryEntry.model,
402
+ },
403
+ };
404
+ }
405
+ case "file-history-snapshot":
406
+ return {
407
+ uuid,
408
+ parentUuid,
409
+ timestamp,
410
+ sessionId,
411
+ slug,
412
+ type: "skip",
413
+ content: {},
414
+ };
415
+ default:
416
+ // Unknown entry type - skip
417
+ return { uuid, parentUuid, timestamp, sessionId, type: "skip", content: {} };
418
+ }
419
+ }
420
+ /**
421
+ * Extract text content from content blocks.
422
+ */
423
+ function extractTextFromBlocks(blocks) {
424
+ if (!blocks)
425
+ return "";
426
+ return blocks
427
+ .filter((block) => block.type === "text" && block.text)
428
+ .map((block) => block.text)
429
+ .join("\n");
430
+ }
431
+ /**
432
+ * Extract thinking content from content blocks.
433
+ */
434
+ function extractThinkingFromBlocks(blocks) {
435
+ if (!blocks)
436
+ return undefined;
437
+ const thinkingBlocks = blocks
438
+ .filter((block) => block.type === "thinking" && block.thinking)
439
+ .map((block) => block.thinking);
440
+ return thinkingBlocks.length > 0 ? thinkingBlocks.join("\n") : undefined;
441
+ }
442
+ /**
443
+ * Count tokens in text using tiktoken (cl100k_base encoding).
444
+ * Falls back to ~4 characters per token if tiktoken is unavailable.
445
+ *
446
+ * Note: Claude Code JSONL files do NOT accurately record output_tokens
447
+ * (they show 1-4 tokens per entry regardless of actual content).
448
+ * We use tiktoken to get accurate counts from the actual text content.
449
+ */
450
+ function countTokens(text) {
451
+ if (!text)
452
+ return 0;
453
+ const encoder = getEncoder();
454
+ if (encoder) {
455
+ try {
456
+ return encoder.encode(text).length;
457
+ }
458
+ catch {
459
+ // Fall back to estimation if encoding fails
460
+ }
461
+ }
462
+ // Fallback: ~4 characters per token (rough average for English)
463
+ return Math.ceil(text.length / 4);
464
+ }
465
+ /**
466
+ * Get statistics from parsed entries.
467
+ *
468
+ * Token stats have two perspectives:
469
+ * - Cumulative totals (totalInputTokens, etc.): Sum across all turns - useful for billing/cost
470
+ * - Last turn tokens (lastInputTokens, etc.): From the final turn - represents actual context window size
471
+ *
472
+ * Note: Claude Code JSONL files do NOT accurately record output_tokens (always shows 1-4).
473
+ * We estimate output tokens from actual text content length using ~4 chars/token.
474
+ */
475
+ export function getEntryStatistics(entries) {
476
+ let userMessages = 0;
477
+ let assistantMessages = 0;
478
+ let toolCalls = 0;
479
+ let hookEvents = 0;
480
+ let agentCalls = 0;
481
+ let bashProgress = 0;
482
+ let mcpCalls = 0;
483
+ let webSearches = 0;
484
+ let systemEvents = 0;
485
+ let summaries = 0;
486
+ let totalInputTokens = 0;
487
+ let totalOutputTokens = 0;
488
+ let totalOutputTokensEstimated = 0;
489
+ let totalCacheCreation = 0;
490
+ let totalCacheRead = 0;
491
+ let lastInputTokens = 0;
492
+ let lastOutputTokens = 0;
493
+ let lastCacheCreation = 0;
494
+ let lastCacheRead = 0;
495
+ let totalCostUSD = 0;
496
+ let totalDurationMs = 0;
497
+ let turnCount = 0;
498
+ for (const entry of entries) {
499
+ switch (entry.type) {
500
+ case "user_message":
501
+ userMessages++;
502
+ break;
503
+ case "assistant_message":
504
+ assistantMessages++;
505
+ // Estimate output tokens from text content
506
+ // Claude Code JSONL doesn't accurately record output_tokens
507
+ totalOutputTokensEstimated += countTokens(entry.content.text);
508
+ totalOutputTokensEstimated += countTokens(entry.content.thinking);
509
+ break;
510
+ case "tool_call":
511
+ toolCalls++;
512
+ // Tool calls also generate output tokens (tool name + input JSON)
513
+ if (entry.content.toolInput) {
514
+ totalOutputTokensEstimated += countTokens(JSON.stringify(entry.content.toolInput));
515
+ }
516
+ break;
517
+ case "hook_progress":
518
+ hookEvents++;
519
+ break;
520
+ case "agent_progress":
521
+ agentCalls++;
522
+ break;
523
+ case "bash_progress":
524
+ bashProgress++;
525
+ break;
526
+ case "mcp_progress":
527
+ mcpCalls++;
528
+ break;
529
+ case "web_search":
530
+ webSearches++;
531
+ break;
532
+ case "turn_duration":
533
+ turnCount++;
534
+ if (entry.content.durationMs) {
535
+ totalDurationMs += entry.content.durationMs;
536
+ }
537
+ break;
538
+ case "system_event":
539
+ systemEvents++;
540
+ break;
541
+ case "summary":
542
+ summaries++;
543
+ break;
544
+ }
545
+ // Aggregate usage stats from JSONL (input tokens are accurate, output tokens are not)
546
+ if (entry.content.usage) {
547
+ // Cumulative totals
548
+ totalInputTokens += entry.content.usage.inputTokens || 0;
549
+ totalOutputTokens += entry.content.usage.outputTokens || 0;
550
+ totalCacheCreation += entry.content.usage.cacheCreation || 0;
551
+ totalCacheRead += entry.content.usage.cacheRead || 0;
552
+ // Track last turn's tokens (overwrite each time - last one wins)
553
+ lastInputTokens = entry.content.usage.inputTokens || 0;
554
+ lastOutputTokens = entry.content.usage.outputTokens || 0;
555
+ lastCacheCreation = entry.content.usage.cacheCreation || 0;
556
+ lastCacheRead = entry.content.usage.cacheRead || 0;
557
+ }
558
+ if (entry.content.costUSD) {
559
+ totalCostUSD += entry.content.costUSD;
560
+ }
561
+ }
562
+ return {
563
+ totalEntries: entries.length,
564
+ userMessages,
565
+ assistantMessages,
566
+ toolCalls,
567
+ hookEvents,
568
+ agentCalls,
569
+ bashProgress,
570
+ mcpCalls,
571
+ webSearches,
572
+ systemEvents,
573
+ summaries,
574
+ totalInputTokens,
575
+ totalOutputTokens,
576
+ totalOutputTokensEstimated,
577
+ totalCacheCreation,
578
+ totalCacheRead,
579
+ lastInputTokens,
580
+ lastOutputTokens,
581
+ lastCacheCreation,
582
+ lastCacheRead,
583
+ totalCostUSD,
584
+ totalDurationMs,
585
+ turnCount,
586
+ };
587
+ }
588
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/session/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Token Estimator
3
+ *
4
+ * Estimates token counts for different filter types using tiktoken.
5
+ * Falls back to character-based estimation if tiktoken unavailable.
6
+ */
7
+ import type { ParsedEntry } from "./parser.js";
8
+ export interface TokenEstimate {
9
+ current: number;
10
+ filtered: number;
11
+ savings: number;
12
+ savingsPercent: number;
13
+ }
14
+ export interface FilterTokenEstimates {
15
+ everything: TokenEstimate;
16
+ without_tools: TokenEstimate;
17
+ messages_only: TokenEstimate;
18
+ }
19
+ /**
20
+ * Count tokens in a single parsed entry.
21
+ */
22
+ export declare function countEntryTokens(entry: ParsedEntry, enc: ReturnType<typeof import("@dqbd/tiktoken").get_encoding> | null): number;
23
+ /**
24
+ * Estimate tokens for all filter types.
25
+ */
26
+ export declare function estimateTokensForFilters(entries: ParsedEntry[]): Promise<FilterTokenEstimates>;
27
+ /**
28
+ * Format token count as human-readable string.
29
+ * Examples: "1.2k", "45.2k", "123.4k"
30
+ */
31
+ export declare function formatTokenCount(tokens: number): string;
32
+ //# sourceMappingURL=token-estimator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-estimator.d.ts","sourceRoot":"","sources":["../../src/session/token-estimator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAW/C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,aAAa,CAAC;IAC1B,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;CAC9B;AAkDD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,UAAU,CAAC,cAAc,gBAAgB,EAAE,YAAY,CAAC,GAAG,IAAI,GACnE,MAAM,CAqDR;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,WAAW,EAAE,GACrB,OAAO,CAAC,oBAAoB,CAAC,CAsC/B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKvD"}