@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,63 @@
1
+ /**
2
+ * Bulk Archive (Legacy)
3
+ *
4
+ * @deprecated This module is being replaced by the hybrid architecture in core/src/cache/.
5
+ * The new architecture reads directly from JSONL files without copying content.
6
+ *
7
+ * This module remains for backwards compatibility with the old archive system.
8
+ * New code should use the cache module from core/src/cache/ instead.
9
+ *
10
+ * Functions for scanning and bulk-archiving Claude Code conversations.
11
+ * Scans ~/.claude/projects/ for all session files and archives them
12
+ * to the global archive.
13
+ */
14
+ import type { ArchiveProgress, ArchiveInitResult, SessionFileInfo } from "./types.js";
15
+ import { FilterType } from "../session/filters.js";
16
+ import { decodeProjectPath, decodeProjectPathNaive } from "../session/detector.js";
17
+ export { decodeProjectPath, decodeProjectPathNaive };
18
+ /**
19
+ * List all project directories in ~/.claude/projects/
20
+ */
21
+ export declare function listAllProjects(): Promise<Array<{
22
+ encodedPath: string;
23
+ projectId: string;
24
+ projectPath: string;
25
+ projectSlug: string;
26
+ }>>;
27
+ /**
28
+ * List all session JSONL files across all projects.
29
+ */
30
+ export declare function listAllSessions(): Promise<SessionFileInfo[]>;
31
+ /**
32
+ * Check if a session is already archived.
33
+ */
34
+ export declare function isSessionArchived(sessionId: string): Promise<boolean>;
35
+ /**
36
+ * Archive a single session file.
37
+ * Returns true if archived, false if skipped (already archived or error).
38
+ * Also archives any subagent conversations associated with this session.
39
+ */
40
+ export declare function archiveSessionFile(session: SessionFileInfo, options?: {
41
+ saveToLocal?: boolean;
42
+ filterType?: FilterType;
43
+ force?: boolean;
44
+ }): Promise<{
45
+ archived: boolean;
46
+ error?: string;
47
+ subagentsArchived?: number;
48
+ }>;
49
+ /**
50
+ * Initialize the archive by bulk-archiving all sessions.
51
+ * Skips sessions that are already archived (unless force=true).
52
+ */
53
+ export declare function initializeArchive(options: {
54
+ /** Whether to save to local project directories as well */
55
+ saveToLocal?: boolean;
56
+ /** Force re-archiving of all sessions (skips already-archived check) */
57
+ force?: boolean;
58
+ /** Filter type to use when archiving (default: EVERYTHING for full content) */
59
+ filterType?: FilterType;
60
+ /** Progress callback - called for each step */
61
+ onProgress?: (progress: ArchiveProgress) => void;
62
+ }): Promise<ArchiveInitResult>;
63
+ //# sourceMappingURL=bulk-archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-archive.d.ts","sourceRoot":"","sources":["../../src/archive/bulk-archive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,eAAe,EAEhB,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAE,UAAU,EAAe,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAqB,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAGtG,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,CAAC;AAYrD;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAC9C,KAAK,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAC5F,CAiCA;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAwClE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG3E;AAoFD;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAChF,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA+F5E;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE;IAC/C,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wEAAwE;IACxE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;CAClD,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiF7B"}
@@ -0,0 +1,315 @@
1
+ /**
2
+ * Bulk Archive (Legacy)
3
+ *
4
+ * @deprecated This module is being replaced by the hybrid architecture in core/src/cache/.
5
+ * The new architecture reads directly from JSONL files without copying content.
6
+ *
7
+ * This module remains for backwards compatibility with the old archive system.
8
+ * New code should use the cache module from core/src/cache/ instead.
9
+ *
10
+ * Functions for scanning and bulk-archiving Claude Code conversations.
11
+ * Scans ~/.claude/projects/ for all session files and archives them
12
+ * to the global archive.
13
+ */
14
+ import { promises as fs } from "fs";
15
+ import * as path from "path";
16
+ import { homedir } from "os";
17
+ import { extractManifest } from "./manifest-extractor.js";
18
+ import { archiveConversation, listManifests } from "./archive-store.js";
19
+ import { parseJSONL, getEntryStatistics } from "../session/parser.js";
20
+ import { transformToSavedContext } from "../session/transformer.js";
21
+ import { FilterType, applyFilter } from "../session/filters.js";
22
+ import { listSubagentFiles, decodeProjectPath, decodeProjectPathNaive } from "../session/detector.js";
23
+ // Re-export for backwards compatibility (archive/index.ts exports these)
24
+ export { decodeProjectPath, decodeProjectPathNaive };
25
+ import { archiveSubagent, isSubagentArchived, createSubagentReference, } from "./subagent-store.js";
26
+ /** Claude projects directory */
27
+ const CLAUDE_PROJECTS_PATH = path.join(homedir(), ".claude", "projects");
28
+ /**
29
+ * List all project directories in ~/.claude/projects/
30
+ */
31
+ export async function listAllProjects() {
32
+ const projects = [];
33
+ try {
34
+ const entries = await fs.readdir(CLAUDE_PROJECTS_PATH, {
35
+ withFileTypes: true,
36
+ });
37
+ for (const entry of entries) {
38
+ if (entry.isDirectory()) {
39
+ const projectPath = await decodeProjectPath(entry.name);
40
+ // Generate projectId from full path using dash-encoding
41
+ const projectId = projectPath.replace(/\//g, "-");
42
+ const projectSlug = path.basename(projectPath);
43
+ projects.push({
44
+ encodedPath: path.join(CLAUDE_PROJECTS_PATH, entry.name),
45
+ projectId,
46
+ projectPath,
47
+ projectSlug,
48
+ });
49
+ }
50
+ }
51
+ }
52
+ catch {
53
+ // Projects directory doesn't exist
54
+ }
55
+ return projects;
56
+ }
57
+ /**
58
+ * List all session JSONL files across all projects.
59
+ */
60
+ export async function listAllSessions() {
61
+ const sessions = [];
62
+ const projects = await listAllProjects();
63
+ for (const project of projects) {
64
+ try {
65
+ const entries = await fs.readdir(project.encodedPath, {
66
+ withFileTypes: true,
67
+ });
68
+ for (const entry of entries) {
69
+ if (entry.isFile() && entry.name.endsWith(".jsonl")) {
70
+ const sessionId = entry.name.replace(".jsonl", "");
71
+ const filePath = path.join(project.encodedPath, entry.name);
72
+ try {
73
+ const stats = await fs.stat(filePath);
74
+ sessions.push({
75
+ filePath,
76
+ sessionId,
77
+ projectId: project.projectId,
78
+ projectPath: project.projectPath,
79
+ projectSlug: project.projectSlug,
80
+ modifiedAt: stats.mtime,
81
+ sizeBytes: stats.size,
82
+ });
83
+ }
84
+ catch {
85
+ // Skip files we can't stat
86
+ }
87
+ }
88
+ }
89
+ }
90
+ catch {
91
+ // Skip projects we can't read
92
+ }
93
+ }
94
+ // Sort by modification time (newest first)
95
+ sessions.sort((a, b) => b.modifiedAt.getTime() - a.modifiedAt.getTime());
96
+ return sessions;
97
+ }
98
+ /**
99
+ * Check if a session is already archived.
100
+ */
101
+ export async function isSessionArchived(sessionId) {
102
+ const manifestIds = await listManifests();
103
+ return manifestIds.includes(sessionId);
104
+ }
105
+ /**
106
+ * Parse and archive a single subagent file.
107
+ * Returns the archived subagent data or null if archiving fails.
108
+ */
109
+ async function archiveSubagentFile(subagentFilePath, agentId, sessionId, projectSlug, force = false) {
110
+ try {
111
+ // Check if already archived (unless forcing)
112
+ if (!force && (await isSubagentArchived(agentId))) {
113
+ return null;
114
+ }
115
+ // Parse the subagent JSONL
116
+ const entries = await parseJSONL(subagentFilePath);
117
+ if (entries.length === 0) {
118
+ return null;
119
+ }
120
+ // Get statistics
121
+ const stats = getEntryStatistics(entries);
122
+ // Transform to display messages
123
+ const savedContext = transformToSavedContext(entries, {
124
+ sessionFile: {
125
+ filePath: subagentFilePath,
126
+ sessionId: agentId,
127
+ modifiedAt: new Date(),
128
+ sizeBytes: 0,
129
+ },
130
+ sessionSlug: `agent-${agentId}`,
131
+ workingDirectory: "",
132
+ });
133
+ // Extract prompt from first user message
134
+ const firstUserEntry = entries.find((e) => e.type === "user_message");
135
+ const prompt = firstUserEntry?.content.text || "Unknown task";
136
+ // Extract model from first assistant entry
137
+ const firstAssistant = entries.find((e) => e.type === "assistant_message" || e.type === "tool_call");
138
+ const model = firstAssistant?.content.model;
139
+ // Create archived subagent
140
+ const archivedSubagent = {
141
+ id: agentId,
142
+ sessionId,
143
+ projectSlug,
144
+ archivedAt: new Date().toISOString(),
145
+ prompt,
146
+ model,
147
+ conversation: savedContext.conversation,
148
+ statistics: {
149
+ messageCount: stats.userMessages + stats.assistantMessages,
150
+ toolCallCount: stats.toolCalls,
151
+ tokens: {
152
+ totalInput: stats.totalInputTokens,
153
+ totalOutput: stats.totalOutputTokens,
154
+ cacheCreation: stats.totalCacheCreation > 0 ? stats.totalCacheCreation : undefined,
155
+ cacheRead: stats.totalCacheRead > 0 ? stats.totalCacheRead : undefined,
156
+ },
157
+ durationMs: stats.totalDurationMs > 0 ? stats.totalDurationMs : undefined,
158
+ },
159
+ };
160
+ // Archive to storage
161
+ await archiveSubagent(archivedSubagent);
162
+ return archivedSubagent;
163
+ }
164
+ catch {
165
+ return null;
166
+ }
167
+ }
168
+ /**
169
+ * Archive a single session file.
170
+ * Returns true if archived, false if skipped (already archived or error).
171
+ * Also archives any subagent conversations associated with this session.
172
+ */
173
+ export async function archiveSessionFile(session, options = {}) {
174
+ try {
175
+ // Use provided filter type or default to EVERYTHING (preserves all content types)
176
+ const filterType = options.filterType ?? FilterType.EVERYTHING;
177
+ const force = options.force ?? false;
178
+ // Parse the JSONL file
179
+ const entries = await parseJSONL(session.filePath);
180
+ if (entries.length === 0) {
181
+ return { archived: false, error: "Empty session file" };
182
+ }
183
+ // Detect and archive subagents
184
+ const subagentFiles = await listSubagentFiles(session.filePath);
185
+ const subagentRefs = [];
186
+ let subagentTotalTokens = 0;
187
+ const subagentIds = [];
188
+ // Find agent_progress entries to determine position in parent conversation
189
+ const agentProgressIndices = new Map();
190
+ entries.forEach((entry, index) => {
191
+ if (entry.type === "agent_progress" && entry.content.agentId) {
192
+ agentProgressIndices.set(entry.content.agentId, index);
193
+ }
194
+ });
195
+ for (const subagentFile of subagentFiles) {
196
+ const archivedSubagent = await archiveSubagentFile(subagentFile.filePath, subagentFile.agentId, session.sessionId, session.projectSlug, force);
197
+ if (archivedSubagent) {
198
+ const positionIndex = agentProgressIndices.get(subagentFile.agentId) ?? subagentRefs.length;
199
+ const ref = createSubagentReference(archivedSubagent, positionIndex, entries[positionIndex - 1]?.uuid);
200
+ subagentRefs.push(ref);
201
+ subagentTotalTokens += ref.tokenCount;
202
+ subagentIds.push(subagentFile.agentId);
203
+ }
204
+ }
205
+ // Extract manifest
206
+ const manifest = await extractManifest(session.filePath, session.projectPath, { autoArchived: false });
207
+ // Add subagent summary to manifest if any were found
208
+ if (subagentIds.length > 0) {
209
+ manifest.subagents = {
210
+ count: subagentIds.length,
211
+ totalTokens: subagentTotalTokens,
212
+ ids: subagentIds,
213
+ };
214
+ }
215
+ // Apply selected filter and transform
216
+ const filteredEntries = applyFilter(entries, filterType);
217
+ const savedContext = transformToSavedContext(filteredEntries, {
218
+ sessionFile: {
219
+ filePath: session.filePath,
220
+ sessionId: session.sessionId,
221
+ modifiedAt: session.modifiedAt,
222
+ sizeBytes: session.sizeBytes,
223
+ },
224
+ sessionSlug: manifest.title.substring(0, 30),
225
+ workingDirectory: session.projectPath,
226
+ filterType,
227
+ });
228
+ // Archive the conversation
229
+ await archiveConversation(savedContext, manifest, {
230
+ saveToLocal: options.saveToLocal ?? false,
231
+ });
232
+ return {
233
+ archived: true,
234
+ subagentsArchived: subagentIds.length,
235
+ };
236
+ }
237
+ catch (error) {
238
+ return {
239
+ archived: false,
240
+ error: error instanceof Error ? error.message : String(error),
241
+ };
242
+ }
243
+ }
244
+ /**
245
+ * Initialize the archive by bulk-archiving all sessions.
246
+ * Skips sessions that are already archived (unless force=true).
247
+ */
248
+ export async function initializeArchive(options) {
249
+ const { saveToLocal = false, force = false, filterType = FilterType.EVERYTHING, onProgress, } = options;
250
+ const result = {
251
+ totalSessions: 0,
252
+ archived: 0,
253
+ skipped: 0,
254
+ errors: 0,
255
+ };
256
+ // Phase 1: Scan for sessions
257
+ onProgress?.({
258
+ phase: "scanning",
259
+ total: 0,
260
+ completed: 0,
261
+ current: "Scanning projects...",
262
+ skipped: 0,
263
+ errors: 0,
264
+ });
265
+ const sessions = await listAllSessions();
266
+ result.totalSessions = sessions.length;
267
+ if (sessions.length === 0) {
268
+ return result;
269
+ }
270
+ // Get already archived session IDs (only needed when not forcing)
271
+ const archivedIds = force ? new Set() : new Set(await listManifests());
272
+ // Phase 2: Archive sessions
273
+ for (let i = 0; i < sessions.length; i++) {
274
+ const session = sessions[i];
275
+ onProgress?.({
276
+ phase: "archiving",
277
+ total: sessions.length,
278
+ completed: i,
279
+ current: `${session.projectSlug}/${session.sessionId.substring(0, 8)}...`,
280
+ skipped: result.skipped,
281
+ errors: result.errors,
282
+ });
283
+ // Check if already archived (skip check when force=true)
284
+ if (!force && archivedIds.has(session.sessionId)) {
285
+ result.skipped++;
286
+ continue;
287
+ }
288
+ // Archive the session with the specified filter type
289
+ const archiveResult = await archiveSessionFile(session, {
290
+ saveToLocal,
291
+ filterType,
292
+ force,
293
+ });
294
+ if (archiveResult.archived) {
295
+ result.archived++;
296
+ }
297
+ else if (archiveResult.error) {
298
+ result.errors++;
299
+ }
300
+ else {
301
+ result.skipped++;
302
+ }
303
+ }
304
+ // Final progress update
305
+ onProgress?.({
306
+ phase: "archiving",
307
+ total: sessions.length,
308
+ completed: sessions.length,
309
+ current: "Complete",
310
+ skipped: result.skipped,
311
+ errors: result.errors,
312
+ });
313
+ return result;
314
+ }
315
+ //# sourceMappingURL=bulk-archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-archive.js","sourceRoot":"","sources":["../../src/archive/bulk-archive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAO7B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEtG,yEAAyE;AACzE,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,CAAC;AACrD,OAAO,EACL,eAAe,EACf,kBAAkB,EAGlB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,gCAAgC;AAChC,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAEzE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IAGnC,MAAM,QAAQ,GAKT,EAAE,CAAC;IAER,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,oBAAoB,EAAE;YACrD,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QAEH,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACxD,wDAAwD;gBACxD,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAE/C,QAAQ,CAAC,IAAI,CAAC;oBACZ,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC;oBACxD,SAAS;oBACT,WAAW;oBACX,WAAW;iBACZ,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,eAAe,EAAE,CAAC;IAEzC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE;gBACpD,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;YAEH,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACpD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;oBACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBAE5D,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACtC,QAAQ,CAAC,IAAI,CAAC;4BACZ,QAAQ;4BACR,SAAS;4BACT,SAAS,EAAE,OAAO,CAAC,SAAS;4BAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;4BAChC,WAAW,EAAE,OAAO,CAAC,WAAW;4BAChC,UAAU,EAAE,KAAK,CAAC,KAAK;4BACvB,SAAS,EAAE,KAAK,CAAC,IAAI;yBACtB,CAAC,CAAC;oBACL,CAAC;oBAAC,MAAM,CAAC;wBACP,2BAA2B;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IAEzE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAiB;IACvD,MAAM,WAAW,GAAG,MAAM,aAAa,EAAE,CAAC;IAC1C,OAAO,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,mBAAmB,CAChC,gBAAwB,EACxB,OAAe,EACf,SAAiB,EACjB,WAAmB,EACnB,QAAiB,KAAK;IAEtB,IAAI,CAAC;QACH,6CAA6C;QAC7C,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2BAA2B;QAC3B,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,gBAAgB,CAAC,CAAC;QACnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,iBAAiB;QACjB,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAE1C,gCAAgC;QAChC,MAAM,YAAY,GAAG,uBAAuB,CAAC,OAAO,EAAE;YACpD,WAAW,EAAE;gBACX,QAAQ,EAAE,gBAAgB;gBAC1B,SAAS,EAAE,OAAO;gBAClB,UAAU,EAAE,IAAI,IAAI,EAAE;gBACtB,SAAS,EAAE,CAAC;aACb;YACD,WAAW,EAAE,SAAS,OAAO,EAAE;YAC/B,gBAAgB,EAAE,EAAE;SACrB,CAAC,CAAC;QAEH,yCAAyC;QACzC,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,cAAc,EAAE,OAAO,CAAC,IAAI,IAAI,cAAc,CAAC;QAE9D,2CAA2C;QAC3C,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAChE,CAAC;QACF,MAAM,KAAK,GAAG,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC;QAE5C,2BAA2B;QAC3B,MAAM,gBAAgB,GAAqB;YACzC,EAAE,EAAE,OAAO;YACX,SAAS;YACT,WAAW;YACX,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,MAAM;YACN,KAAK;YACL,YAAY,EAAE,YAAY,CAAC,YAAY;YACvC,UAAU,EAAE;gBACV,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,iBAAiB;gBAC1D,aAAa,EAAE,KAAK,CAAC,SAAS;gBAC9B,MAAM,EAAE;oBACN,UAAU,EAAE,KAAK,CAAC,gBAAgB;oBAClC,WAAW,EAAE,KAAK,CAAC,iBAAiB;oBACpC,aAAa,EACX,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;oBACrE,SAAS,EACP,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;iBAC9D;gBACD,UAAU,EACR,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;aAChE;SACF,CAAC;QAEF,qBAAqB;QACrB,MAAM,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAExC,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAwB,EACxB,UAA+E,EAAE;IAEjF,IAAI,CAAC;QACH,kFAAkF;QAClF,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC;QAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;QAErC,uBAAuB;QACvB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;QAC1D,CAAC;QAED,+BAA+B;QAC/B,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAChE,MAAM,YAAY,GAAwB,EAAE,CAAC;QAC7C,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,2EAA2E;QAC3E,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAkB,CAAC;QACvD,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC7D,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACzD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACzC,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAChD,YAAY,CAAC,QAAQ,EACrB,YAAY,CAAC,OAAO,EACpB,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,WAAW,EACnB,KAAK,CACN,CAAC;YAEF,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,aAAa,GACjB,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC;gBACxE,MAAM,GAAG,GAAG,uBAAuB,CACjC,gBAAgB,EAChB,aAAa,EACb,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,IAAI,CACjC,CAAC;gBACF,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACvB,mBAAmB,IAAI,GAAG,CAAC,UAAU,CAAC;gBACtC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,MAAM,QAAQ,GAAG,MAAM,eAAe,CACpC,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,WAAW,EACnB,EAAE,YAAY,EAAE,KAAK,EAAE,CACxB,CAAC;QAEF,qDAAqD;QACrD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,SAAS,GAAG;gBACnB,KAAK,EAAE,WAAW,CAAC,MAAM;gBACzB,WAAW,EAAE,mBAAmB;gBAChC,GAAG,EAAE,WAAW;aACjB,CAAC;QACJ,CAAC;QAED,sCAAsC;QACtC,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,uBAAuB,CAAC,eAAe,EAAE;YAC5D,WAAW,EAAE;gBACX,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B;YACD,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;YAC5C,gBAAgB,EAAE,OAAO,CAAC,WAAW;YACrC,UAAU;SACX,CAAC,CAAC;QAEH,2BAA2B;QAC3B,MAAM,mBAAmB,CAAC,YAAY,EAAE,QAAQ,EAAE;YAChD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK;SAC1C,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,iBAAiB,EAAE,WAAW,CAAC,MAAM;SACtC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OASvC;IACC,MAAM,EACJ,WAAW,GAAG,KAAK,EACnB,KAAK,GAAG,KAAK,EACb,UAAU,GAAG,UAAU,CAAC,UAAU,EAClC,UAAU,GACX,GAAG,OAAO,CAAC;IAEZ,MAAM,MAAM,GAAsB;QAChC,aAAa,EAAE,CAAC;QAChB,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;KACV,CAAC;IAEF,6BAA6B;IAC7B,UAAU,EAAE,CAAC;QACX,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,sBAAsB;QAC/B,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;KACV,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,eAAe,EAAE,CAAC;IACzC,MAAM,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC;IAEvC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,kEAAkE;IAClE,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,aAAa,EAAE,CAAC,CAAC;IAE/E,4BAA4B;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAE5B,UAAU,EAAE,CAAC;YACX,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,QAAQ,CAAC,MAAM;YACtB,SAAS,EAAE,CAAC;YACZ,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK;YACzE,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;QAEH,yDAAyD;QACzD,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QAED,qDAAqD;QACrD,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE;YACtD,WAAW;YACX,UAAU;YACV,KAAK;SACN,CAAC,CAAC;QAEH,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC3B,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC;aAAM,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,UAAU,EAAE,CAAC;QACX,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,SAAS,EAAE,QAAQ,CAAC,MAAM;QAC1B,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Filename Utilities
3
+ *
4
+ * Shared functions for generating plan filenames and handling
5
+ * versioned file naming to avoid collisions.
6
+ *
7
+ * Consolidated from plan-extractor.ts, plan-cataloger.ts,
8
+ * archive-store.ts, and catalog/extractor.ts.
9
+ */
10
+ /**
11
+ * Slugify a string for use in filenames.
12
+ * Converts to lowercase, replaces non-alphanumeric chars with dashes,
13
+ * trims leading/trailing dashes, and truncates.
14
+ */
15
+ export declare function slugify(text: string, maxLength?: number): string;
16
+ /**
17
+ * Generate a filename for a plan from a title string.
18
+ * Format: YYYY-MM-DD_title-slug.md
19
+ */
20
+ export declare function generatePlanFilename(title: string, options?: {
21
+ slugMaxLength?: number;
22
+ date?: Date;
23
+ }): string;
24
+ /**
25
+ * Generate a filename for archiving a plan file.
26
+ * Tries to extract title from content's first # heading,
27
+ * falls back to the original filename (basename without extension).
28
+ * Format: YYYY-MM-DD_title-slug.md
29
+ */
30
+ export declare function generateArchivePlanFilename(planPath: string, options?: {
31
+ content?: string;
32
+ createdAt?: Date;
33
+ }): string;
34
+ /**
35
+ * Generate a versioned filename to avoid collisions.
36
+ * If the base filename exists, appends -v2, -v3, etc.
37
+ */
38
+ export declare function generateVersionedFilename(basePath: string, filename: string): Promise<string>;
39
+ //# sourceMappingURL=filename-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filename-utils.d.ts","sourceRoot":"","sources":["../../src/archive/filename-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAW,GAAG,MAAM,CAOpE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,CAAA;CAAE,GAChD,MAAM,CAIR;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,IAAI,CAAA;CAAO,GACnD,MAAM,CAaR;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAoBjB"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Filename Utilities
3
+ *
4
+ * Shared functions for generating plan filenames and handling
5
+ * versioned file naming to avoid collisions.
6
+ *
7
+ * Consolidated from plan-extractor.ts, plan-cataloger.ts,
8
+ * archive-store.ts, and catalog/extractor.ts.
9
+ */
10
+ import { promises as fs } from "fs";
11
+ import { join, basename } from "path";
12
+ /**
13
+ * Slugify a string for use in filenames.
14
+ * Converts to lowercase, replaces non-alphanumeric chars with dashes,
15
+ * trims leading/trailing dashes, and truncates.
16
+ */
17
+ export function slugify(text, maxLength = 40) {
18
+ return text
19
+ .toLowerCase()
20
+ .replace(/[^a-z0-9]+/g, "-")
21
+ .replace(/^-+|-+$/g, "")
22
+ .substring(0, maxLength)
23
+ .replace(/-+$/, ""); // Clean trailing dash from truncation
24
+ }
25
+ /**
26
+ * Generate a filename for a plan from a title string.
27
+ * Format: YYYY-MM-DD_title-slug.md
28
+ */
29
+ export function generatePlanFilename(title, options) {
30
+ const dateStr = (options?.date ?? new Date()).toISOString().split("T")[0];
31
+ const slug = slugify(title, options?.slugMaxLength ?? 50);
32
+ return `${dateStr}_${slug}.md`;
33
+ }
34
+ /**
35
+ * Generate a filename for archiving a plan file.
36
+ * Tries to extract title from content's first # heading,
37
+ * falls back to the original filename (basename without extension).
38
+ * Format: YYYY-MM-DD_title-slug.md
39
+ */
40
+ export function generateArchivePlanFilename(planPath, options = {}) {
41
+ let title = null;
42
+ if (options.content) {
43
+ const titleMatch = options.content.match(/^#\s+(.+)$/m);
44
+ title = titleMatch ? titleMatch[1].trim() : null;
45
+ }
46
+ if (!title) {
47
+ title = basename(planPath, ".md");
48
+ }
49
+ return generatePlanFilename(title, {
50
+ slugMaxLength: 40,
51
+ date: options.createdAt,
52
+ });
53
+ }
54
+ /**
55
+ * Generate a versioned filename to avoid collisions.
56
+ * If the base filename exists, appends -v2, -v3, etc.
57
+ */
58
+ export async function generateVersionedFilename(basePath, filename) {
59
+ const ext = ".md";
60
+ const nameWithoutExt = filename.replace(ext, "");
61
+ let version = 2;
62
+ let versionedFilename = filename;
63
+ let versionedPath = join(basePath, versionedFilename);
64
+ while (true) {
65
+ try {
66
+ await fs.access(versionedPath);
67
+ // File exists, try next version
68
+ versionedFilename = `${nameWithoutExt}-v${version}${ext}`;
69
+ versionedPath = join(basePath, versionedFilename);
70
+ version++;
71
+ }
72
+ catch {
73
+ // File doesn't exist, we can use this version
74
+ return versionedFilename;
75
+ }
76
+ }
77
+ }
78
+ //# sourceMappingURL=filename-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filename-utils.js","sourceRoot":"","sources":["../../src/archive/filename-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEtC;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,YAAoB,EAAE;IAC1D,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC;SACvB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,sCAAsC;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAa,EACb,OAAiD;IAEjD,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC;IAC1D,OAAO,GAAG,OAAO,IAAI,IAAI,KAAK,CAAC;AACjC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CACzC,QAAgB,EAChB,UAAkD,EAAE;IAEpD,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACxD,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACnD,CAAC;IACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,oBAAoB,CAAC,KAAK,EAAE;QACjC,aAAa,EAAE,EAAE;QACjB,IAAI,EAAE,OAAO,CAAC,SAAS;KACxB,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,QAAgB,EAChB,QAAgB;IAEhB,MAAM,GAAG,GAAG,KAAK,CAAC;IAClB,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAEjD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,iBAAiB,GAAG,QAAQ,CAAC;IACjC,IAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAEtD,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC/B,gCAAgC;YAChC,iBAAiB,GAAG,GAAG,cAAc,KAAK,OAAO,GAAG,GAAG,EAAE,CAAC;YAC1D,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;YAClD,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;YAC9C,OAAO,iBAAiB,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Archive Module
3
+ *
4
+ * Cross-project search over saved Claude Code conversations.
5
+ */
6
+ export type { ConversationManifest, PlanReference, SubagentSummary, SearchIndex, IndexReference, ProjectInfo, SearchInput, SearchOutput, SearchResult, ArchiveSettings, ArchiveProgress, ArchiveInitResult, SessionFileInfo, } from "./types.js";
7
+ export { getDefaultSearchIndex, getDefaultArchiveSettings } from "./types.js";
8
+ export { extractManifest, extractManifestFromEntries, detectPlans, getPlansDirectory, readPlanContent, } from "./manifest-extractor.js";
9
+ export { PLAN_TRIGGER_PATTERNS, detectEmbeddedPlans, extractEmbeddedPlans, findDuplicatePlan, extractPlanTitle, generatePlanFingerprint, calculateSimilarity, indexEmbeddedPlan, splitMultiplePlans, } from "./plan-extractor.js";
10
+ export type { DetectedPlan, PlanFingerprint } from "./plan-extractor.js";
11
+ export { slugify, generatePlanFilename, generateArchivePlanFilename, generateVersionedFilename, } from "./filename-utils.js";
12
+ export { catalogPlan } from "./plan-cataloger.js";
13
+ export type { CatalogPlanInput } from "./plan-cataloger.js";
14
+ export { tokenize, extractPathKeywords, extractKeywordsWithFields, addToIndex, removeFromIndex, searchIndex, getIndexStats, } from "./search-indexer.js";
15
+ export { getGlobalArchivePath, getGlobalIndexPath, getManifestPath, getConversationPath, getPlanPath, getLocalArchivePath, getLocalIndexPath, ensureGlobalArchive, ensureLocalArchive, readGlobalIndex, writeGlobalIndex, readLocalIndex, writeLocalIndex, saveManifest, readManifest, listManifests, listAllManifests, listManifestsByProject, saveConversation, readConversation, archivePlan, isPlanArchived, readArchiveSettings, writeArchiveSettings, archiveConversation, searchConversations, getArchiveStats, } from "./archive-store.js";
16
+ export { decodeProjectPath, decodeProjectPathNaive, listAllProjects, listAllSessions, isSessionArchived, archiveSessionFile, initializeArchive, } from "./bulk-archive.js";
17
+ export { archiveSubagent, readSubagent, listSubagentsForSession, isSubagentArchived, listAllSubagentIds, createSubagentReference, deleteSubagent, getSubagentArchiveStats, } from "./subagent-store.js";
18
+ export type { ArchivedSubagent, SubagentReference, SubagentTokenStats, } from "./subagent-store.js";
19
+ export { migrateToProjectId, isMigrationNeeded, getMigrationStatus, migrateProjectPaths, } from "./migration.js";
20
+ export type { MigrationResult, PathMigrationResult } from "./migration.js";
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/archive/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,WAAW,EACX,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAG9E,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,WAAW,EACX,iBAAiB,EACjB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGzE,OAAO,EACL,OAAO,EACP,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,OAAO,EACL,QAAQ,EACR,mBAAmB,EACnB,yBAAyB,EACzB,UAAU,EACV,eAAe,EACf,WAAW,EACX,aAAa,GACd,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAEL,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EAEjB,mBAAmB,EACnB,kBAAkB,EAElB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EAEf,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EAEtB,gBAAgB,EAChB,gBAAgB,EAEhB,WAAW,EACX,cAAc,EAEd,mBAAmB,EACnB,oBAAoB,EAEpB,mBAAmB,EAEnB,mBAAmB,EAEnB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,eAAe,EACf,YAAY,EACZ,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACd,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Archive Module
3
+ *
4
+ * Cross-project search over saved Claude Code conversations.
5
+ */
6
+ export { getDefaultSearchIndex, getDefaultArchiveSettings } from "./types.js";
7
+ // Manifest Extractor
8
+ export { extractManifest, extractManifestFromEntries, detectPlans, getPlansDirectory, readPlanContent, } from "./manifest-extractor.js";
9
+ // Plan Extractor
10
+ export { PLAN_TRIGGER_PATTERNS, detectEmbeddedPlans, extractEmbeddedPlans, findDuplicatePlan, extractPlanTitle, generatePlanFingerprint, calculateSimilarity, indexEmbeddedPlan, splitMultiplePlans, } from "./plan-extractor.js";
11
+ // Filename Utilities
12
+ export { slugify, generatePlanFilename, generateArchivePlanFilename, generateVersionedFilename, } from "./filename-utils.js";
13
+ // Plan Cataloger
14
+ export { catalogPlan } from "./plan-cataloger.js";
15
+ // Search Indexer
16
+ export { tokenize, extractPathKeywords, extractKeywordsWithFields, addToIndex, removeFromIndex, searchIndex, getIndexStats, } from "./search-indexer.js";
17
+ // Archive Store
18
+ export {
19
+ // Path helpers
20
+ getGlobalArchivePath, getGlobalIndexPath, getManifestPath, getConversationPath, getPlanPath, getLocalArchivePath, getLocalIndexPath,
21
+ // Directory setup
22
+ ensureGlobalArchive, ensureLocalArchive,
23
+ // Index operations
24
+ readGlobalIndex, writeGlobalIndex, readLocalIndex, writeLocalIndex,
25
+ // Manifest operations
26
+ saveManifest, readManifest, listManifests, listAllManifests, listManifestsByProject,
27
+ // Conversation operations
28
+ saveConversation, readConversation,
29
+ // Plan operations
30
+ archivePlan, isPlanArchived,
31
+ // Settings
32
+ readArchiveSettings, writeArchiveSettings,
33
+ // Full archive flow
34
+ archiveConversation,
35
+ // Search
36
+ searchConversations,
37
+ // Statistics
38
+ getArchiveStats, } from "./archive-store.js";
39
+ // Bulk Archive
40
+ export { decodeProjectPath, decodeProjectPathNaive, listAllProjects, listAllSessions, isSessionArchived, archiveSessionFile, initializeArchive, } from "./bulk-archive.js";
41
+ // Subagent Store
42
+ export { archiveSubagent, readSubagent, listSubagentsForSession, isSubagentArchived, listAllSubagentIds, createSubagentReference, deleteSubagent, getSubagentArchiveStats, } from "./subagent-store.js";
43
+ // Migration
44
+ export { migrateToProjectId, isMigrationNeeded, getMigrationStatus, migrateProjectPaths, } from "./migration.js";
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/archive/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE9E,qBAAqB;AACrB,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,WAAW,EACX,iBAAiB,EACjB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAEjC,iBAAiB;AACjB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAI7B,qBAAqB;AACrB,OAAO,EACL,OAAO,EACP,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAE7B,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,iBAAiB;AACjB,OAAO,EACL,QAAQ,EACR,mBAAmB,EACnB,yBAAyB,EACzB,UAAU,EACV,eAAe,EACf,WAAW,EACX,aAAa,GACd,MAAM,qBAAqB,CAAC;AAE7B,gBAAgB;AAChB,OAAO;AACL,eAAe;AACf,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,iBAAiB;AACjB,kBAAkB;AAClB,mBAAmB,EACnB,kBAAkB;AAClB,mBAAmB;AACnB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe;AACf,sBAAsB;AACtB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,sBAAsB;AACtB,0BAA0B;AAC1B,gBAAgB,EAChB,gBAAgB;AAChB,kBAAkB;AAClB,WAAW,EACX,cAAc;AACd,WAAW;AACX,mBAAmB,EACnB,oBAAoB;AACpB,oBAAoB;AACpB,mBAAmB;AACnB,SAAS;AACT,mBAAmB;AACnB,aAAa;AACb,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,eAAe;AACf,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,iBAAiB;AACjB,OAAO,EACL,eAAe,EACf,YAAY,EACZ,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACd,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAQ7B,YAAY;AACZ,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Manifest Extractor
3
+ *
4
+ * Extracts ConversationManifest from JSONL session files.
5
+ * Reuses existing parser for JSONL parsing.
6
+ */
7
+ import type { ParsedEntry } from "../session/parser.js";
8
+ import type { ConversationManifest, PlanReference } from "./types.js";
9
+ /**
10
+ * Get the plans directory from Claude Code settings
11
+ */
12
+ export declare function getPlansDirectory(): string;
13
+ /**
14
+ * Extract a manifest from a JSONL session file.
15
+ */
16
+ export declare function extractManifest(jsonlPath: string, projectPath: string, options?: {
17
+ userLabel?: string;
18
+ autoArchived?: boolean;
19
+ }): Promise<ConversationManifest>;
20
+ /**
21
+ * Extract a manifest from already-parsed entries.
22
+ */
23
+ export declare function extractManifestFromEntries(entries: ParsedEntry[], projectPath: string, jsonlPath: string, options?: {
24
+ userLabel?: string;
25
+ autoArchived?: boolean;
26
+ }): Promise<ConversationManifest>;
27
+ /**
28
+ * Detect plan file paths written in this conversation.
29
+ * Returns paths to plan files that were written via the Write tool.
30
+ */
31
+ export declare function detectWrittenPlanPaths(entries: ParsedEntry[]): string[];
32
+ /**
33
+ * @deprecated Use detectWrittenPlanPaths instead
34
+ */
35
+ export declare function detectPlans(entries: ParsedEntry[]): PlanReference[];
36
+ /**
37
+ * Read a plan file's content.
38
+ */
39
+ export declare function readPlanContent(planPath: string): Promise<string | null>;
40
+ //# sourceMappingURL=manifest-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-extractor.d.ts","sourceRoot":"","sources":["../../src/archive/manifest-extractor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAoEtE;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAW1C;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACnB,GACL,OAAO,CAAC,oBAAoB,CAAC,CAG/B;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,WAAW,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IACP,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACnB,GACL,OAAO,CAAC,oBAAoB,CAAC,CA8F/B;AAoKD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAsBvE;AA4GD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,aAAa,EAAE,CAQnE;AA6BD;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMxB"}