xtctx 0.3.2 → 0.11.3

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 (308) hide show
  1. package/CHANGELOG.md +317 -122
  2. package/LICENSE +21 -21
  3. package/README.md +154 -121
  4. package/dist/src/cli/disconnect.d.ts +8 -0
  5. package/dist/src/cli/disconnect.d.ts.map +1 -0
  6. package/dist/src/cli/disconnect.js +42 -0
  7. package/dist/src/cli/disconnect.js.map +1 -0
  8. package/dist/src/cli/hook.d.ts +7 -0
  9. package/dist/src/cli/hook.d.ts.map +1 -0
  10. package/dist/src/cli/hook.js +32 -0
  11. package/dist/src/cli/hook.js.map +1 -0
  12. package/dist/src/cli/index.d.ts.map +1 -1
  13. package/dist/src/cli/index.js +86 -33
  14. package/dist/src/cli/index.js.map +1 -1
  15. package/dist/src/cli/setup.d.ts +8 -0
  16. package/dist/src/cli/setup.d.ts.map +1 -0
  17. package/dist/src/cli/setup.js +76 -0
  18. package/dist/src/cli/setup.js.map +1 -0
  19. package/dist/src/cli/status.d.ts +7 -0
  20. package/dist/src/cli/status.d.ts.map +1 -0
  21. package/dist/src/cli/status.js +133 -0
  22. package/dist/src/cli/status.js.map +1 -0
  23. package/dist/src/config/disconnect.d.ts +34 -0
  24. package/dist/src/config/disconnect.d.ts.map +1 -0
  25. package/dist/src/config/disconnect.js +386 -0
  26. package/dist/src/config/disconnect.js.map +1 -0
  27. package/dist/src/config/managed-block.d.ts +29 -0
  28. package/dist/src/config/managed-block.d.ts.map +1 -0
  29. package/dist/src/config/managed-block.js +67 -0
  30. package/dist/src/config/managed-block.js.map +1 -0
  31. package/dist/src/config/mcp-config.d.ts +93 -0
  32. package/dist/src/config/mcp-config.d.ts.map +1 -0
  33. package/dist/src/config/mcp-config.js +556 -0
  34. package/dist/src/config/mcp-config.js.map +1 -0
  35. package/dist/src/config/setup.d.ts +39 -0
  36. package/dist/src/config/setup.d.ts.map +1 -0
  37. package/dist/src/config/setup.js +379 -0
  38. package/dist/src/config/setup.js.map +1 -0
  39. package/dist/src/config/skills.d.ts +73 -0
  40. package/dist/src/config/skills.d.ts.map +1 -0
  41. package/dist/src/config/skills.js +427 -0
  42. package/dist/src/config/skills.js.map +1 -0
  43. package/dist/src/handoff/embeddings.d.ts +26 -0
  44. package/dist/src/handoff/embeddings.d.ts.map +1 -0
  45. package/dist/src/handoff/embeddings.js +132 -0
  46. package/dist/src/handoff/embeddings.js.map +1 -0
  47. package/dist/src/handoff/sqlite-index.d.ts +52 -0
  48. package/dist/src/handoff/sqlite-index.d.ts.map +1 -0
  49. package/dist/src/handoff/sqlite-index.js +905 -0
  50. package/dist/src/handoff/sqlite-index.js.map +1 -0
  51. package/dist/src/handoff/types.d.ts +63 -0
  52. package/dist/src/handoff/types.d.ts.map +1 -0
  53. package/dist/src/handoff/types.js +2 -0
  54. package/dist/src/handoff/types.js.map +1 -0
  55. package/dist/src/handoff/vector.d.ts +4 -0
  56. package/dist/src/handoff/vector.d.ts.map +1 -0
  57. package/dist/src/handoff/vector.js +31 -0
  58. package/dist/src/handoff/vector.js.map +1 -0
  59. package/dist/src/mcp/server.d.ts +3 -20
  60. package/dist/src/mcp/server.d.ts.map +1 -1
  61. package/dist/src/mcp/server.js +90 -205
  62. package/dist/src/mcp/server.js.map +1 -1
  63. package/dist/src/mcp/tools/continuity.d.ts +21 -0
  64. package/dist/src/mcp/tools/continuity.d.ts.map +1 -0
  65. package/dist/src/mcp/tools/continuity.js +55 -0
  66. package/dist/src/mcp/tools/continuity.js.map +1 -0
  67. package/dist/src/mcp/tools/manifest.d.ts +40 -0
  68. package/dist/src/mcp/tools/manifest.d.ts.map +1 -0
  69. package/dist/src/mcp/tools/manifest.js +105 -0
  70. package/dist/src/mcp/tools/manifest.js.map +1 -0
  71. package/dist/src/mcp/tools/sessions.d.ts +18 -31
  72. package/dist/src/mcp/tools/sessions.d.ts.map +1 -1
  73. package/dist/src/mcp/tools/sessions.js +109 -16
  74. package/dist/src/mcp/tools/sessions.js.map +1 -1
  75. package/dist/src/runtime/services.d.ts +11 -38
  76. package/dist/src/runtime/services.d.ts.map +1 -1
  77. package/dist/src/runtime/services.js +61 -200
  78. package/dist/src/runtime/services.js.map +1 -1
  79. package/dist/src/scrapers/antigravity.d.ts +52 -0
  80. package/dist/src/scrapers/antigravity.d.ts.map +1 -0
  81. package/dist/src/scrapers/antigravity.js +869 -0
  82. package/dist/src/scrapers/antigravity.js.map +1 -0
  83. package/dist/src/scrapers/base.d.ts +53 -1
  84. package/dist/src/scrapers/base.d.ts.map +1 -1
  85. package/dist/src/scrapers/base.js +93 -4
  86. package/dist/src/scrapers/base.js.map +1 -1
  87. package/dist/src/scrapers/claude-code.d.ts +37 -6
  88. package/dist/src/scrapers/claude-code.d.ts.map +1 -1
  89. package/dist/src/scrapers/claude-code.js +214 -40
  90. package/dist/src/scrapers/claude-code.js.map +1 -1
  91. package/dist/src/scrapers/codex.d.ts +36 -6
  92. package/dist/src/scrapers/codex.d.ts.map +1 -1
  93. package/dist/src/scrapers/codex.js +283 -60
  94. package/dist/src/scrapers/codex.js.map +1 -1
  95. package/dist/src/scrapers/copilot-cli.d.ts +34 -0
  96. package/dist/src/scrapers/copilot-cli.d.ts.map +1 -0
  97. package/dist/src/scrapers/copilot-cli.js +342 -0
  98. package/dist/src/scrapers/copilot-cli.js.map +1 -0
  99. package/dist/src/scrapers/copilot.d.ts +41 -8
  100. package/dist/src/scrapers/copilot.d.ts.map +1 -1
  101. package/dist/src/scrapers/copilot.js +256 -118
  102. package/dist/src/scrapers/copilot.js.map +1 -1
  103. package/dist/src/scrapers/cursor.d.ts +24 -9
  104. package/dist/src/scrapers/cursor.d.ts.map +1 -1
  105. package/dist/src/scrapers/cursor.js +259 -152
  106. package/dist/src/scrapers/cursor.js.map +1 -1
  107. package/dist/src/scrapers/index.d.ts +23 -0
  108. package/dist/src/scrapers/index.d.ts.map +1 -0
  109. package/dist/src/scrapers/index.js +22 -0
  110. package/dist/src/scrapers/index.js.map +1 -0
  111. package/dist/src/scrapers/opencode.d.ts +37 -0
  112. package/dist/src/scrapers/opencode.d.ts.map +1 -0
  113. package/dist/src/scrapers/opencode.js +277 -0
  114. package/dist/src/scrapers/opencode.js.map +1 -0
  115. package/dist/src/scrapers/registry.d.ts +1 -0
  116. package/dist/src/scrapers/registry.d.ts.map +1 -1
  117. package/dist/src/scrapers/registry.js +3 -0
  118. package/dist/src/scrapers/registry.js.map +1 -1
  119. package/dist/src/tools/sources.d.ts +28 -0
  120. package/dist/src/tools/sources.d.ts.map +1 -0
  121. package/dist/src/tools/sources.js +149 -0
  122. package/dist/src/tools/sources.js.map +1 -0
  123. package/dist/src/types/config.d.ts +24 -37
  124. package/dist/src/types/config.d.ts.map +1 -1
  125. package/dist/src/types/index.d.ts +0 -2
  126. package/dist/src/types/index.d.ts.map +1 -1
  127. package/dist/src/types/index.js +0 -2
  128. package/dist/src/types/index.js.map +1 -1
  129. package/dist/src/types/scraper.d.ts +34 -5
  130. package/dist/src/types/scraper.d.ts.map +1 -1
  131. package/dist/src/utils/atomic-file.d.ts +8 -0
  132. package/dist/src/utils/atomic-file.d.ts.map +1 -0
  133. package/dist/src/utils/atomic-file.js +15 -0
  134. package/dist/src/utils/atomic-file.js.map +1 -0
  135. package/dist/src/utils/errors.d.ts +7 -0
  136. package/dist/src/utils/errors.d.ts.map +1 -0
  137. package/dist/src/utils/errors.js +16 -0
  138. package/dist/src/utils/errors.js.map +1 -0
  139. package/dist/src/utils/package-info.d.ts +11 -0
  140. package/dist/src/utils/package-info.d.ts.map +1 -0
  141. package/dist/src/utils/package-info.js +30 -0
  142. package/dist/src/utils/package-info.js.map +1 -0
  143. package/dist/src/utils/project-scope.d.ts +19 -0
  144. package/dist/src/utils/project-scope.d.ts.map +1 -0
  145. package/dist/src/utils/project-scope.js +61 -0
  146. package/dist/src/utils/project-scope.js.map +1 -0
  147. package/package.json +70 -66
  148. package/dist/src/api/routes/config.d.ts +0 -4
  149. package/dist/src/api/routes/config.d.ts.map +0 -1
  150. package/dist/src/api/routes/config.js +0 -61
  151. package/dist/src/api/routes/config.js.map +0 -1
  152. package/dist/src/api/routes/knowledge.d.ts +0 -4
  153. package/dist/src/api/routes/knowledge.d.ts.map +0 -1
  154. package/dist/src/api/routes/knowledge.js +0 -40
  155. package/dist/src/api/routes/knowledge.js.map +0 -1
  156. package/dist/src/api/routes/search.d.ts +0 -7
  157. package/dist/src/api/routes/search.d.ts.map +0 -1
  158. package/dist/src/api/routes/search.js +0 -108
  159. package/dist/src/api/routes/search.js.map +0 -1
  160. package/dist/src/api/routes/sources.d.ts +0 -12
  161. package/dist/src/api/routes/sources.d.ts.map +0 -1
  162. package/dist/src/api/routes/sources.js +0 -70
  163. package/dist/src/api/routes/sources.js.map +0 -1
  164. package/dist/src/api/server.d.ts +0 -26
  165. package/dist/src/api/server.d.ts.map +0 -1
  166. package/dist/src/api/server.js +0 -312
  167. package/dist/src/api/server.js.map +0 -1
  168. package/dist/src/cli/ingest.d.ts +0 -6
  169. package/dist/src/cli/ingest.d.ts.map +0 -1
  170. package/dist/src/cli/ingest.js +0 -11
  171. package/dist/src/cli/ingest.js.map +0 -1
  172. package/dist/src/cli/init.d.ts +0 -6
  173. package/dist/src/cli/init.d.ts.map +0 -1
  174. package/dist/src/cli/init.js +0 -105
  175. package/dist/src/cli/init.js.map +0 -1
  176. package/dist/src/cli/serve.d.ts +0 -7
  177. package/dist/src/cli/serve.d.ts.map +0 -1
  178. package/dist/src/cli/serve.js +0 -100
  179. package/dist/src/cli/serve.js.map +0 -1
  180. package/dist/src/cli/sync.d.ts +0 -5
  181. package/dist/src/cli/sync.d.ts.map +0 -1
  182. package/dist/src/cli/sync.js +0 -13
  183. package/dist/src/cli/sync.js.map +0 -1
  184. package/dist/src/compaction/pipeline.d.ts +0 -19
  185. package/dist/src/compaction/pipeline.d.ts.map +0 -1
  186. package/dist/src/compaction/pipeline.js +0 -37
  187. package/dist/src/compaction/pipeline.js.map +0 -1
  188. package/dist/src/compaction/providers/cli.d.ts +0 -13
  189. package/dist/src/compaction/providers/cli.d.ts.map +0 -1
  190. package/dist/src/compaction/providers/cli.js +0 -60
  191. package/dist/src/compaction/providers/cli.js.map +0 -1
  192. package/dist/src/compaction/rule-based.d.ts +0 -8
  193. package/dist/src/compaction/rule-based.d.ts.map +0 -1
  194. package/dist/src/compaction/rule-based.js +0 -120
  195. package/dist/src/compaction/rule-based.js.map +0 -1
  196. package/dist/src/config/loader.d.ts +0 -12
  197. package/dist/src/config/loader.d.ts.map +0 -1
  198. package/dist/src/config/loader.js +0 -76
  199. package/dist/src/config/loader.js.map +0 -1
  200. package/dist/src/config/mappings/claude-code.d.ts +0 -3
  201. package/dist/src/config/mappings/claude-code.d.ts.map +0 -1
  202. package/dist/src/config/mappings/claude-code.js +0 -31
  203. package/dist/src/config/mappings/claude-code.js.map +0 -1
  204. package/dist/src/config/mappings/codex.d.ts +0 -3
  205. package/dist/src/config/mappings/codex.d.ts.map +0 -1
  206. package/dist/src/config/mappings/codex.js +0 -31
  207. package/dist/src/config/mappings/codex.js.map +0 -1
  208. package/dist/src/config/mappings/copilot.d.ts +0 -3
  209. package/dist/src/config/mappings/copilot.d.ts.map +0 -1
  210. package/dist/src/config/mappings/copilot.js +0 -33
  211. package/dist/src/config/mappings/copilot.js.map +0 -1
  212. package/dist/src/config/mappings/cursor.d.ts +0 -3
  213. package/dist/src/config/mappings/cursor.d.ts.map +0 -1
  214. package/dist/src/config/mappings/cursor.js +0 -29
  215. package/dist/src/config/mappings/cursor.js.map +0 -1
  216. package/dist/src/config/sync.d.ts +0 -13
  217. package/dist/src/config/sync.d.ts.map +0 -1
  218. package/dist/src/config/sync.js +0 -96
  219. package/dist/src/config/sync.js.map +0 -1
  220. package/dist/src/ingestion/coordinator.d.ts +0 -37
  221. package/dist/src/ingestion/coordinator.d.ts.map +0 -1
  222. package/dist/src/ingestion/coordinator.js +0 -127
  223. package/dist/src/ingestion/coordinator.js.map +0 -1
  224. package/dist/src/ingestion/daemon.d.ts +0 -17
  225. package/dist/src/ingestion/daemon.d.ts.map +0 -1
  226. package/dist/src/ingestion/daemon.js +0 -35
  227. package/dist/src/ingestion/daemon.js.map +0 -1
  228. package/dist/src/ingestion/watcher.d.ts +0 -19
  229. package/dist/src/ingestion/watcher.d.ts.map +0 -1
  230. package/dist/src/ingestion/watcher.js +0 -70
  231. package/dist/src/ingestion/watcher.js.map +0 -1
  232. package/dist/src/knowledge/autotag.d.ts +0 -3
  233. package/dist/src/knowledge/autotag.d.ts.map +0 -1
  234. package/dist/src/knowledge/autotag.js +0 -24
  235. package/dist/src/knowledge/autotag.js.map +0 -1
  236. package/dist/src/knowledge/dedup.d.ts +0 -7
  237. package/dist/src/knowledge/dedup.d.ts.map +0 -1
  238. package/dist/src/knowledge/dedup.js +0 -15
  239. package/dist/src/knowledge/dedup.js.map +0 -1
  240. package/dist/src/knowledge/repository.d.ts +0 -12
  241. package/dist/src/knowledge/repository.d.ts.map +0 -1
  242. package/dist/src/knowledge/repository.js +0 -74
  243. package/dist/src/knowledge/repository.js.map +0 -1
  244. package/dist/src/mcp/tools/config.d.ts +0 -36
  245. package/dist/src/mcp/tools/config.d.ts.map +0 -1
  246. package/dist/src/mcp/tools/config.js +0 -54
  247. package/dist/src/mcp/tools/config.js.map +0 -1
  248. package/dist/src/mcp/tools/knowledge.d.ts +0 -17
  249. package/dist/src/mcp/tools/knowledge.d.ts.map +0 -1
  250. package/dist/src/mcp/tools/knowledge.js +0 -46
  251. package/dist/src/mcp/tools/knowledge.js.map +0 -1
  252. package/dist/src/mcp/tools/search.d.ts +0 -22
  253. package/dist/src/mcp/tools/search.d.ts.map +0 -1
  254. package/dist/src/mcp/tools/search.js +0 -30
  255. package/dist/src/mcp/tools/search.js.map +0 -1
  256. package/dist/src/mcp/tools/write.d.ts +0 -38
  257. package/dist/src/mcp/tools/write.d.ts.map +0 -1
  258. package/dist/src/mcp/tools/write.js +0 -97
  259. package/dist/src/mcp/tools/write.js.map +0 -1
  260. package/dist/src/runtime/ingestion.d.ts +0 -17
  261. package/dist/src/runtime/ingestion.d.ts.map +0 -1
  262. package/dist/src/runtime/ingestion.js +0 -106
  263. package/dist/src/runtime/ingestion.js.map +0 -1
  264. package/dist/src/scrapers/gemini.d.ts +0 -17
  265. package/dist/src/scrapers/gemini.d.ts.map +0 -1
  266. package/dist/src/scrapers/gemini.js +0 -245
  267. package/dist/src/scrapers/gemini.js.map +0 -1
  268. package/dist/src/store/embeddings.d.ts +0 -9
  269. package/dist/src/store/embeddings.d.ts.map +0 -1
  270. package/dist/src/store/embeddings.js +0 -28
  271. package/dist/src/store/embeddings.js.map +0 -1
  272. package/dist/src/store/lance.d.ts +0 -25
  273. package/dist/src/store/lance.d.ts.map +0 -1
  274. package/dist/src/store/lance.js +0 -74
  275. package/dist/src/store/lance.js.map +0 -1
  276. package/dist/src/store/search.d.ts +0 -18
  277. package/dist/src/store/search.d.ts.map +0 -1
  278. package/dist/src/store/search.js +0 -55
  279. package/dist/src/store/search.js.map +0 -1
  280. package/dist/src/types/compaction.d.ts +0 -29
  281. package/dist/src/types/compaction.d.ts.map +0 -1
  282. package/dist/src/types/compaction.js +0 -2
  283. package/dist/src/types/compaction.js.map +0 -1
  284. package/dist/src/types/context.d.ts +0 -33
  285. package/dist/src/types/context.d.ts.map +0 -1
  286. package/dist/src/types/context.js +0 -18
  287. package/dist/src/types/context.js.map +0 -1
  288. package/dist/src/utils/retry.d.ts +0 -11
  289. package/dist/src/utils/retry.d.ts.map +0 -1
  290. package/dist/src/utils/retry.js +0 -46
  291. package/dist/src/utils/retry.js.map +0 -1
  292. package/dist/src/utils/shutdown.d.ts +0 -25
  293. package/dist/src/utils/shutdown.d.ts.map +0 -1
  294. package/dist/src/utils/shutdown.js +0 -56
  295. package/dist/src/utils/shutdown.js.map +0 -1
  296. package/dist/web/apple-touch-icon.png +0 -0
  297. package/dist/web/assets/index-Nuadr5ox.css +0 -1
  298. package/dist/web/assets/index-aA0u8eXA.js +0 -3504
  299. package/dist/web/assets/primeicons-C6QP2o4f.woff2 +0 -0
  300. package/dist/web/assets/primeicons-DMOk5skT.eot +0 -0
  301. package/dist/web/assets/primeicons-Dr5RGzOO.svg +0 -345
  302. package/dist/web/assets/primeicons-MpK4pl85.ttf +0 -0
  303. package/dist/web/assets/primeicons-WjwUDZjB.woff +0 -0
  304. package/dist/web/favicon.ico +0 -0
  305. package/dist/web/favicon.svg +0 -21
  306. package/dist/web/index.html +0 -21
  307. package/dist/web/site.webmanifest +0 -19
  308. package/dist/web/vite.svg +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../../src/scrapers/antigravity.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { ScraperState } from "../types/scraper.js";
1
+ import type { ConversationChunk, ConversationScraper, ScraperState } from "../types/scraper.js";
2
2
  export declare class ScraperStateManager {
3
3
  private readonly stateDir;
4
4
  constructor(stateDir: string);
@@ -7,4 +7,56 @@ export declare class ScraperStateManager {
7
7
  private statePath;
8
8
  }
9
9
  export declare function estimateTokens(text: string): number;
10
+ /**
11
+ * Coerce an unknown value to a Date.
12
+ * Handles: Date objects, numeric timestamps (seconds or milliseconds),
13
+ * numeric strings, ISO strings. Returns new Date(0) as sentinel for
14
+ * unrecognised values.
15
+ */
16
+ export declare function toDate(value: unknown): Date;
17
+ /**
18
+ * Base class for all conversation scrapers — both built-in and community ones.
19
+ *
20
+ * Extend this class to add a new data source. You only need to implement five
21
+ * members:
22
+ *
23
+ * - `tool` — unique string identifier (e.g. `"zed"`, `"aider"`)
24
+ * - `detect()` — returns true when the data source is present on disk
25
+ * - `getStorePaths()` — transcript source paths used for detection and status
26
+ * - `scrape(since?)` — yield chunks newer than the given date (incremental)
27
+ * - `fullSync()` — yield all chunks from the beginning of time
28
+ *
29
+ * State persistence (position tracking between scrape cycles) is handled
30
+ * automatically by this base class via `ScraperStateManager`.
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * import { AbstractScraper, estimateTokens } from "xtctx/scrapers";
35
+ * import type { ConversationChunk } from "xtctx/scrapers";
36
+ *
37
+ * export class ZedScraper extends AbstractScraper {
38
+ * readonly tool = "zed";
39
+ *
40
+ * constructor(private readonly historyDir: string, stateDir: string) {
41
+ * super(stateDir);
42
+ * }
43
+ *
44
+ * async detect() { ... }
45
+ * getStorePaths() { return [this.historyDir]; }
46
+ * async *scrape(since?: Date) { ... }
47
+ * async *fullSync() { ... }
48
+ * }
49
+ * ```
50
+ */
51
+ export declare abstract class AbstractScraper<T extends ConversationChunk = ConversationChunk> implements ConversationScraper<T> {
52
+ abstract readonly tool: string;
53
+ private readonly stateManager;
54
+ constructor(stateDir: string);
55
+ abstract detect(): Promise<boolean>;
56
+ abstract getStorePaths(): string[];
57
+ abstract scrape(since?: Date): AsyncIterable<T>;
58
+ abstract fullSync(): AsyncIterable<T>;
59
+ getLastScrapedPosition(): Promise<ScraperState>;
60
+ saveScrapedPosition(state: ScraperState): Promise<void>;
61
+ }
10
62
  //# sourceMappingURL=base.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/scrapers/base.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM;IAEvC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAezC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5D,OAAO,CAAC,SAAS;CAGlB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/scrapers/base.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEhG,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM;IAEvC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAkBzC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5D,OAAO,CAAC,SAAS;CAGlB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAanD;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAwB3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,8BAAsB,eAAe,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,CACnF,YAAW,mBAAmB,CAAC,CAAC,CAAC;IAEjC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;gBAEvC,QAAQ,EAAE,MAAM;IAI5B,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IACnC,QAAQ,CAAC,aAAa,IAAI,MAAM,EAAE;IAClC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC;IAC/C,QAAQ,CAAC,QAAQ,IAAI,aAAa,CAAC,CAAC,CAAC;IAE/B,sBAAsB,IAAI,OAAO,CAAC,YAAY,CAAC;IAI/C,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAG9D"}
@@ -1,4 +1,4 @@
1
- import { mkdir, readFile, writeFile } from "node:fs/promises";
1
+ import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
2
2
  import { dirname, join } from "node:path";
3
3
  export class ScraperStateManager {
4
4
  stateDir;
@@ -10,9 +10,12 @@ export class ScraperStateManager {
10
10
  try {
11
11
  const raw = await readFile(path, "utf-8");
12
12
  const data = JSON.parse(raw);
13
+ const parsed = new Date(data.lastTimestamp);
13
14
  return {
14
15
  ...data,
15
- lastTimestamp: new Date(data.lastTimestamp),
16
+ // An Invalid Date makes every cutoff comparison false, re-emitting
17
+ // the full history on every scrape; reset to epoch instead.
18
+ lastTimestamp: Number.isNaN(parsed.getTime()) ? new Date(0) : parsed,
16
19
  };
17
20
  }
18
21
  catch {
@@ -21,14 +24,100 @@ export class ScraperStateManager {
21
24
  }
22
25
  async save(tool, state) {
23
26
  const path = this.statePath(tool);
27
+ const tmpPath = `${path}.tmp`;
24
28
  await mkdir(dirname(path), { recursive: true });
25
- await writeFile(path, JSON.stringify(state, null, 2), "utf-8");
29
+ // Write to a temp file first, then atomically rename it over the target
30
+ // so a mid-write crash never leaves a corrupt state file (M3).
31
+ await writeFile(tmpPath, JSON.stringify(state, null, 2), "utf-8");
32
+ await rename(tmpPath, path);
26
33
  }
27
34
  statePath(tool) {
28
35
  return join(this.stateDir, `${tool}-state.json`);
29
36
  }
30
37
  }
31
38
  export function estimateTokens(text) {
32
- return Math.ceil(text.length / 4);
39
+ if (!text)
40
+ return 0;
41
+ const charCount = text.length;
42
+ // Match programming syntax delimiters
43
+ const symbolMatches = text.match(/[{}[\]();=+\-*&|<>!]/g);
44
+ const symbolCount = symbolMatches ? symbolMatches.length : 0;
45
+ // Text scales at 4 characters per token; symbols weight heavier (2 characters per token)
46
+ const baseTokens = Math.ceil(charCount / 4);
47
+ const syntaxTokens = Math.ceil(symbolCount / 2);
48
+ return baseTokens + syntaxTokens;
49
+ }
50
+ /**
51
+ * Coerce an unknown value to a Date.
52
+ * Handles: Date objects, numeric timestamps (seconds or milliseconds),
53
+ * numeric strings, ISO strings. Returns new Date(0) as sentinel for
54
+ * unrecognised values.
55
+ */
56
+ export function toDate(value) {
57
+ if (value instanceof Date) {
58
+ return value;
59
+ }
60
+ if (typeof value === "number" && Number.isFinite(value)) {
61
+ const millis = value > 10_000_000_000 ? value : value * 1000;
62
+ return new Date(millis);
63
+ }
64
+ if (typeof value === "string" && value.length > 0) {
65
+ const numeric = Number(value);
66
+ if (Number.isFinite(numeric) && value.trim() !== "") {
67
+ const millis = numeric > 10_000_000_000 ? numeric : numeric * 1000;
68
+ return new Date(millis);
69
+ }
70
+ const parsed = new Date(value);
71
+ if (!Number.isNaN(parsed.getTime())) {
72
+ return parsed;
73
+ }
74
+ }
75
+ return new Date(0);
76
+ }
77
+ /**
78
+ * Base class for all conversation scrapers — both built-in and community ones.
79
+ *
80
+ * Extend this class to add a new data source. You only need to implement five
81
+ * members:
82
+ *
83
+ * - `tool` — unique string identifier (e.g. `"zed"`, `"aider"`)
84
+ * - `detect()` — returns true when the data source is present on disk
85
+ * - `getStorePaths()` — transcript source paths used for detection and status
86
+ * - `scrape(since?)` — yield chunks newer than the given date (incremental)
87
+ * - `fullSync()` — yield all chunks from the beginning of time
88
+ *
89
+ * State persistence (position tracking between scrape cycles) is handled
90
+ * automatically by this base class via `ScraperStateManager`.
91
+ *
92
+ * @example
93
+ * ```ts
94
+ * import { AbstractScraper, estimateTokens } from "xtctx/scrapers";
95
+ * import type { ConversationChunk } from "xtctx/scrapers";
96
+ *
97
+ * export class ZedScraper extends AbstractScraper {
98
+ * readonly tool = "zed";
99
+ *
100
+ * constructor(private readonly historyDir: string, stateDir: string) {
101
+ * super(stateDir);
102
+ * }
103
+ *
104
+ * async detect() { ... }
105
+ * getStorePaths() { return [this.historyDir]; }
106
+ * async *scrape(since?: Date) { ... }
107
+ * async *fullSync() { ... }
108
+ * }
109
+ * ```
110
+ */
111
+ export class AbstractScraper {
112
+ stateManager;
113
+ constructor(stateDir) {
114
+ this.stateManager = new ScraperStateManager(stateDir);
115
+ }
116
+ async getLastScrapedPosition() {
117
+ return this.stateManager.load(this.tool);
118
+ }
119
+ async saveScrapedPosition(state) {
120
+ await this.stateManager.save(this.tool, state);
121
+ }
33
122
  }
34
123
  //# sourceMappingURL=base.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/scrapers/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,MAAM,OAAO,mBAAmB;IACD;IAA7B,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IAEjD,KAAK,CAAC,IAAI,CAAC,IAAY;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;YAC7C,OAAO;gBACL,GAAG,IAAI;gBACP,aAAa,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;aAC5C,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,aAAa,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,KAAmB;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAEO,SAAS,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC;IACnD,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/scrapers/base.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,47 @@
1
- import type { ClaudeCodeChunk, ConversationScraper, ScraperState } from "../types/scraper.js";
2
- export declare class ClaudeCodeScraper implements ConversationScraper<ClaudeCodeChunk> {
1
+ import type { ClaudeCodeChunk } from "../types/scraper.js";
2
+ import { AbstractScraper } from "./base.js";
3
+ /**
4
+ * Mutation shapes the claude-code scraper tolerates silently (no warn, no
5
+ * throw). Everything else that falls outside the happy path warns.
6
+ */
7
+ export declare const ACCEPTED_DEGRADATIONS: {
8
+ /** Projects directory missing — Claude Code is simply not installed. */
9
+ missingProjectsDir: string;
10
+ /** A JSONL line that fails to parse — we skip but warn upstream. */
11
+ malformedJsonlLine: string;
12
+ /** Unknown sibling fields on a line (forward-compat for new keys). */
13
+ unknownFieldsAlongside: string;
14
+ /** Empty/blank lines in JSONL. */
15
+ blankJsonlLine: string;
16
+ };
17
+ export declare class ClaudeCodeScraper extends AbstractScraper<ClaudeCodeChunk> {
3
18
  private readonly claudeProjectsDir;
19
+ private readonly projectRoot?;
4
20
  readonly tool = "claude-code";
5
- private readonly stateManager;
6
- constructor(claudeProjectsDir: string, stateDir: string);
21
+ constructor(claudeProjectsDir: string, stateDir: string, projectRoot?: string | undefined);
7
22
  detect(): Promise<boolean>;
8
23
  getStorePaths(): string[];
9
24
  scrape(since?: Date): AsyncIterable<ClaudeCodeChunk>;
10
25
  fullSync(): AsyncIterable<ClaudeCodeChunk>;
11
26
  parseRaw(raw: unknown): ClaudeCodeChunk;
12
- getLastScrapedPosition(): Promise<ScraperState>;
13
- saveScrapedPosition(state: ScraperState): Promise<void>;
14
27
  private readAllSessions;
28
+ private readSessionFile;
29
+ /**
30
+ * Coarse pre-filter over encoded store directory names.
31
+ *
32
+ * Encoded names are ambiguous — `-` stands for `:`, `\` and `/` alike — so
33
+ * this only decides which directories are worth opening. Each record's own
34
+ * `cwd` is what actually attributes it (see `recordMatchesProject`), which
35
+ * is both unambiguous and platform-independent. Keeping the prefix wide
36
+ * here lets sessions started from a subdirectory through; the per-record
37
+ * check then rejects a sibling like `<project>--secret`.
38
+ */
39
+ private filterProjectDirs;
40
+ /**
41
+ * Attribute a record to the project by the `cwd` Claude Code stamps on it.
42
+ * Records without a `cwd` fall back to the directory-name decision already
43
+ * made by `filterProjectDirs`.
44
+ */
45
+ private recordMatchesProject;
15
46
  }
16
47
  //# sourceMappingURL=claude-code.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/scrapers/claude-code.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,eAAe,EACf,mBAAmB,EACnB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAW7B,qBAAa,iBAAkB,YAAW,mBAAmB,CAAC,eAAe,CAAC;IAK1E,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAJpC,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;gBAGhC,iBAAiB,EAAE,MAAM,EAC1C,QAAQ,EAAE,MAAM;IAKZ,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC,aAAa,IAAI,MAAM,EAAE;IAIlB,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,aAAa,CAAC,eAAe,CAAC;IAMpD,QAAQ,IAAI,aAAa,CAAC,eAAe,CAAC;IAIjD,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe;IAuBjC,sBAAsB,IAAI,OAAO,CAAC,YAAY,CAAC;IAI/C,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;YAI9C,eAAe;CAyD/B"}
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/scrapers/claude-code.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAiB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAkB,MAAM,WAAW,CAAC;AAK5D;;;GAGG;AACH,eAAO,MAAM,qBAAqB;IAChC,wEAAwE;;IAExE,oEAAoE;;IAEpE,sEAAsE;;IAEtE,kCAAkC;;CAEnC,CAAC;AA2BF,qBAAa,iBAAkB,SAAQ,eAAe,CAAC,eAAe,CAAC;IAInE,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAL/B,QAAQ,CAAC,IAAI,iBAAiB;gBAGX,iBAAiB,EAAE,MAAM,EAC1C,QAAQ,EAAE,MAAM,EACC,WAAW,CAAC,EAAE,MAAM,YAAA;IAKjC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC,aAAa,IAAI,MAAM,EAAE;IAIlB,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,aAAa,CAAC,eAAe,CAAC;IAMpD,QAAQ,IAAI,aAAa,CAAC,eAAe,CAAC;IAIjD,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe;YAwBxB,eAAe;YA2Cf,eAAe;IA0G9B;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;CAa7B"}
@@ -2,21 +2,51 @@ import { stat, readdir } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
3
  import { createReadStream } from "node:fs";
4
4
  import { createInterface } from "node:readline";
5
- import { estimateTokens, ScraperStateManager } from "./base.js";
5
+ import { AbstractScraper, estimateTokens } from "./base.js";
6
+ import { encodePathForToolDirectory, pathMatchesProject } from "../utils/project-scope.js";
7
+ const SCRAPER_NAME = "claude-code";
8
+ /**
9
+ * Mutation shapes the claude-code scraper tolerates silently (no warn, no
10
+ * throw). Everything else that falls outside the happy path warns.
11
+ */
12
+ export const ACCEPTED_DEGRADATIONS = {
13
+ /** Projects directory missing — Claude Code is simply not installed. */
14
+ missingProjectsDir: "~/.claude/projects not present",
15
+ /** A JSONL line that fails to parse — we skip but warn upstream. */
16
+ malformedJsonlLine: "JSONL line is not valid JSON — warned, not fatal",
17
+ /** Unknown sibling fields on a line (forward-compat for new keys). */
18
+ unknownFieldsAlongside: "extra keys alongside known schema",
19
+ /** Empty/blank lines in JSONL. */
20
+ blankJsonlLine: "blank line inside JSONL file",
21
+ };
6
22
  const ROLE_MAP = {
7
23
  human: "user",
24
+ user: "user",
8
25
  assistant: "assistant",
9
26
  system: "system",
10
27
  tool_use: "tool",
11
28
  tool_result: "tool",
12
29
  };
13
- export class ClaudeCodeScraper {
30
+ const NON_MESSAGE_TYPES = new Set([
31
+ "attachment",
32
+ "custom-title",
33
+ "last-prompt",
34
+ "pr-link",
35
+ "progress",
36
+ "queue-operation",
37
+ ]);
38
+ function warnDrift(sourcePath, surprise, recordsAffected) {
39
+ console.warn(`[${SCRAPER_NAME}] schema-drift surprise at ${sourcePath}: ${surprise} ` +
40
+ `(records affected: ${recordsAffected})`);
41
+ }
42
+ export class ClaudeCodeScraper extends AbstractScraper {
14
43
  claudeProjectsDir;
44
+ projectRoot;
15
45
  tool = "claude-code";
16
- stateManager;
17
- constructor(claudeProjectsDir, stateDir) {
46
+ constructor(claudeProjectsDir, stateDir, projectRoot) {
47
+ super(stateDir);
18
48
  this.claudeProjectsDir = claudeProjectsDir;
19
- this.stateManager = new ScraperStateManager(stateDir);
49
+ this.projectRoot = projectRoot;
20
50
  }
21
51
  async detect() {
22
52
  try {
@@ -40,14 +70,15 @@ export class ClaudeCodeScraper {
40
70
  }
41
71
  parseRaw(raw) {
42
72
  const obj = raw;
43
- const timestamp = new Date(obj.timestamp || Date.now());
44
- const content = obj.content || "";
73
+ const timestamp = parseRecordTimestamp(obj.timestamp);
74
+ const content = extractContent(obj);
45
75
  const type = obj.type || "unknown";
76
+ const role = extractRole(obj, type);
46
77
  return {
47
78
  tool: "claude-code",
48
79
  sessionId: obj.sessionId || "unknown",
49
80
  timestamp,
50
- role: ROLE_MAP[type] || "system",
81
+ role,
51
82
  content,
52
83
  metadata: {
53
84
  messageIndex: obj.messageIndex || 0,
@@ -59,22 +90,21 @@ export class ClaudeCodeScraper {
59
90
  },
60
91
  };
61
92
  }
62
- async getLastScrapedPosition() {
63
- return this.stateManager.load(this.tool);
64
- }
65
- async saveScrapedPosition(state) {
66
- await this.stateManager.save(this.tool, state);
67
- }
68
93
  async *readAllSessions(since) {
69
94
  let projectDirs;
70
95
  try {
71
96
  projectDirs = await readdir(this.claudeProjectsDir);
72
97
  }
73
98
  catch {
99
+ // ACCEPTED_DEGRADATIONS.missingProjectsDir
74
100
  return;
75
101
  }
76
- for (const projectHash of projectDirs) {
102
+ const encodedProject = this.projectRoot
103
+ ? encodePathForToolDirectory(this.projectRoot).toLowerCase()
104
+ : null;
105
+ for (const projectHash of this.filterProjectDirs(projectDirs)) {
77
106
  const projectDir = join(this.claudeProjectsDir, projectHash);
107
+ const exactDirectory = encodedProject === null || projectHash.toLowerCase() === encodedProject;
78
108
  let files;
79
109
  try {
80
110
  files = await readdir(projectDir);
@@ -86,35 +116,179 @@ export class ClaudeCodeScraper {
86
116
  if (!file.endsWith(".jsonl")) {
87
117
  continue;
88
118
  }
89
- const sessionId = file.replace(".jsonl", "");
119
+ const sessionId = file.replace(/\.jsonl$/, "");
90
120
  const filePath = join(projectDir, file);
91
- const reader = createInterface({
92
- input: createReadStream(filePath, { encoding: "utf8" }),
93
- crlfDelay: Infinity,
94
- });
95
- let messageIndex = 0;
96
- for await (const line of reader) {
97
- if (!line.trim()) {
98
- continue;
99
- }
100
- try {
101
- const obj = JSON.parse(line);
102
- const timestamp = new Date(obj.timestamp ?? 0);
103
- if (timestamp <= since) {
104
- messageIndex += 1;
105
- continue;
106
- }
107
- obj.sessionId = sessionId;
108
- obj.messageIndex = messageIndex;
109
- messageIndex += 1;
110
- yield this.parseRaw(obj);
111
- }
112
- catch {
113
- // Skip malformed lines.
114
- }
121
+ try {
122
+ yield* this.readSessionFile(filePath, sessionId, since, exactDirectory);
123
+ }
124
+ catch (err) {
125
+ // One unreadable file must not abort the remaining files/projects.
126
+ warnDrift(filePath, `unreadable transcript file: ${err.message}`, 0);
115
127
  }
116
128
  }
117
129
  }
118
130
  }
131
+ async *readSessionFile(filePath, sessionId, since, exactDirectory) {
132
+ const reader = createInterface({
133
+ input: createReadStream(filePath, { encoding: "utf8" }),
134
+ crlfDelay: Infinity,
135
+ });
136
+ let messageIndex = 0;
137
+ let lineNo = 0;
138
+ for await (const line of reader) {
139
+ lineNo++;
140
+ if (!line.trim()) {
141
+ continue;
142
+ }
143
+ let obj;
144
+ try {
145
+ obj = JSON.parse(line);
146
+ }
147
+ catch (err) {
148
+ // ACCEPTED_DEGRADATIONS.malformedJsonlLine, but warn so the
149
+ // mutation test can see drift instead of data silently vanishing.
150
+ warnDrift(`${filePath}:${lineNo}`, `line is not valid JSON: ${err.message}`, 1);
151
+ continue;
152
+ }
153
+ if (NON_MESSAGE_TYPES.has(String(obj.type))) {
154
+ continue;
155
+ }
156
+ if (!this.recordMatchesProject(obj, exactDirectory)) {
157
+ continue;
158
+ }
159
+ // Strict-mode schema check: warn (but still emit) on shape surprise.
160
+ if (!("type" in obj)) {
161
+ warnDrift(`${filePath}:${lineNo}`, "record is missing required 'type' field — likely renamed", 1);
162
+ }
163
+ else if (typeof obj.type !== "string" || !(obj.type in ROLE_MAP)) {
164
+ warnDrift(`${filePath}:${lineNo}`, `unknown 'type' value ${JSON.stringify(obj.type)}`, 1);
165
+ }
166
+ if ("content" in obj &&
167
+ obj.content !== undefined &&
168
+ typeof obj.content !== "string") {
169
+ warnDrift(`${filePath}:${lineNo}`, `expected 'content' to be a string, got ${describeType(obj.content)}`, 1);
170
+ }
171
+ if (!("timestamp" in obj)) {
172
+ warnDrift(`${filePath}:${lineNo}`, "record is missing 'timestamp' field", 1);
173
+ }
174
+ else if (typeof obj.timestamp !== "string") {
175
+ warnDrift(`${filePath}:${lineNo}`, `expected 'timestamp' string, got ${describeType(obj.timestamp)}`, 1);
176
+ }
177
+ const timestamp = parseRecordTimestamp(obj.timestamp);
178
+ // Every message-shaped record consumes an index, whether or not it is
179
+ // emitted, so chunk identity is identical between full and incremental
180
+ // scrapes (chunk ids hash the index).
181
+ const currentIndex = messageIndex;
182
+ messageIndex += 1;
183
+ // A zero `since` means full sync: emit even epoch-sentinel timestamps.
184
+ if (since.getTime() > 0 && timestamp <= since) {
185
+ continue;
186
+ }
187
+ obj.sessionId = sessionId;
188
+ obj.messageIndex = currentIndex;
189
+ const chunk = this.parseRaw(obj);
190
+ if (!chunk.content.trim()) {
191
+ continue;
192
+ }
193
+ yield chunk;
194
+ }
195
+ }
196
+ /**
197
+ * Coarse pre-filter over encoded store directory names.
198
+ *
199
+ * Encoded names are ambiguous — `-` stands for `:`, `\` and `/` alike — so
200
+ * this only decides which directories are worth opening. Each record's own
201
+ * `cwd` is what actually attributes it (see `recordMatchesProject`), which
202
+ * is both unambiguous and platform-independent. Keeping the prefix wide
203
+ * here lets sessions started from a subdirectory through; the per-record
204
+ * check then rejects a sibling like `<project>--secret`.
205
+ */
206
+ filterProjectDirs(projectDirs) {
207
+ if (!this.projectRoot) {
208
+ return projectDirs;
209
+ }
210
+ const encodedProject = encodePathForToolDirectory(this.projectRoot).toLowerCase();
211
+ return projectDirs.filter((projectDir) => {
212
+ const normalized = projectDir.toLowerCase();
213
+ return normalized === encodedProject || normalized.startsWith(`${encodedProject}-`);
214
+ });
215
+ }
216
+ /**
217
+ * Attribute a record to the project by the `cwd` Claude Code stamps on it.
218
+ * Records without a `cwd` fall back to the directory-name decision already
219
+ * made by `filterProjectDirs`.
220
+ */
221
+ recordMatchesProject(obj, exactDirectory) {
222
+ if (!this.projectRoot) {
223
+ return true;
224
+ }
225
+ const cwd = obj.cwd;
226
+ if (typeof cwd !== "string" || cwd.length === 0) {
227
+ // No provenance on the record. An exact store-directory match is itself
228
+ // provenance, so keep it; a directory that only matched by prefix could
229
+ // be a plain sibling (`proj-v2` beside `proj`), so fail closed.
230
+ return exactDirectory;
231
+ }
232
+ return pathMatchesProject(cwd, this.projectRoot);
233
+ }
234
+ }
235
+ /**
236
+ * Missing or unparseable timestamps become the epoch sentinel rather than an
237
+ * Invalid Date, which would poison cutoff comparisons and toISOString().
238
+ */
239
+ function parseRecordTimestamp(value) {
240
+ const parsed = new Date(value || 0);
241
+ return Number.isNaN(parsed.getTime()) ? new Date(0) : parsed;
242
+ }
243
+ function extractRole(obj, type) {
244
+ const message = isRecord(obj.message) ? obj.message : {};
245
+ const role = typeof message.role === "string" ? message.role : type;
246
+ return ROLE_MAP[role] ?? ROLE_MAP[type] ?? "system";
247
+ }
248
+ function extractContent(obj) {
249
+ if (typeof obj.content === "string") {
250
+ return obj.content;
251
+ }
252
+ const message = isRecord(obj.message) ? obj.message : undefined;
253
+ if (!message) {
254
+ return "";
255
+ }
256
+ return stringifyContent(message.content);
257
+ }
258
+ function stringifyContent(value) {
259
+ if (typeof value === "string") {
260
+ return value;
261
+ }
262
+ if (!Array.isArray(value)) {
263
+ return "";
264
+ }
265
+ return value
266
+ .map((item) => {
267
+ if (typeof item === "string") {
268
+ return item;
269
+ }
270
+ if (!isRecord(item)) {
271
+ return "";
272
+ }
273
+ if (typeof item.text === "string") {
274
+ return item.text;
275
+ }
276
+ if (typeof item.content === "string") {
277
+ return item.content;
278
+ }
279
+ return "";
280
+ })
281
+ .filter((item) => item.length > 0)
282
+ .join("\n");
283
+ }
284
+ function describeType(value) {
285
+ if (value === null)
286
+ return "null";
287
+ if (Array.isArray(value))
288
+ return "array";
289
+ return typeof value;
290
+ }
291
+ function isRecord(value) {
292
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
119
293
  }
120
294
  //# sourceMappingURL=claude-code.js.map