@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,456 @@
1
+ /**
2
+ * Manifest Extractor
3
+ *
4
+ * Extracts ConversationManifest from JSONL session files.
5
+ * Reuses existing parser for JSONL parsing.
6
+ */
7
+ import { promises as fs } from "fs";
8
+ import * as path from "path";
9
+ import { homedir } from "os";
10
+ import { parseJSONL } from "../session/parser.js";
11
+ import { extractEmbeddedPlans } from "./plan-extractor.js";
12
+ import { catalogPlan } from "./plan-cataloger.js";
13
+ /** Max chars for truncated user questions */
14
+ const MAX_QUESTION_LENGTH = 200;
15
+ /** Max chars for context snippets */
16
+ const MAX_SNIPPET_LENGTH = 300;
17
+ /** Max number of context snippets to store */
18
+ const MAX_SNIPPETS = 20;
19
+ /** Technology detection patterns */
20
+ const TECH_PATTERNS = [
21
+ // Languages
22
+ { pattern: /typescript|\.tsx?$/i, tech: "typescript" },
23
+ { pattern: /javascript|\.jsx?$/i, tech: "javascript" },
24
+ { pattern: /python|\.py$/i, tech: "python" },
25
+ { pattern: /rust|\.rs$/i, tech: "rust" },
26
+ { pattern: /golang|\.go$/i, tech: "go" },
27
+ { pattern: /java(?!script)|\.java$/i, tech: "java" },
28
+ { pattern: /c\+\+|\.cpp$|\.cc$/i, tech: "cpp" },
29
+ { pattern: /c#|csharp|\.cs$/i, tech: "csharp" },
30
+ { pattern: /ruby|\.rb$/i, tech: "ruby" },
31
+ { pattern: /php|\.php$/i, tech: "php" },
32
+ { pattern: /swift|\.swift$/i, tech: "swift" },
33
+ { pattern: /kotlin|\.kt$/i, tech: "kotlin" },
34
+ // Frameworks
35
+ { pattern: /\breact\b/i, tech: "react" },
36
+ { pattern: /\bvue\b/i, tech: "vue" },
37
+ { pattern: /\bangular\b/i, tech: "angular" },
38
+ { pattern: /\bsvelte\b/i, tech: "svelte" },
39
+ { pattern: /\bnextjs?\b|next\.config/i, tech: "nextjs" },
40
+ { pattern: /\bnuxt\b/i, tech: "nuxt" },
41
+ { pattern: /\bexpress\b/i, tech: "express" },
42
+ { pattern: /\bfastapi\b/i, tech: "fastapi" },
43
+ { pattern: /\bdjango\b/i, tech: "django" },
44
+ { pattern: /\bflask\b/i, tech: "flask" },
45
+ { pattern: /\brails\b/i, tech: "rails" },
46
+ { pattern: /\bspring\b/i, tech: "spring" },
47
+ // Databases
48
+ { pattern: /\bpostgres|psql\b/i, tech: "postgres" },
49
+ { pattern: /\bmysql\b/i, tech: "mysql" },
50
+ { pattern: /\bmongodb?\b/i, tech: "mongodb" },
51
+ { pattern: /\bredis\b/i, tech: "redis" },
52
+ { pattern: /\bsqlite\b/i, tech: "sqlite" },
53
+ { pattern: /\bprisma\b/i, tech: "prisma" },
54
+ // Tools/Infrastructure
55
+ { pattern: /\bdocker\b/i, tech: "docker" },
56
+ { pattern: /\bkubernetes|k8s\b/i, tech: "kubernetes" },
57
+ { pattern: /\baws\b/i, tech: "aws" },
58
+ { pattern: /\bgcp\b|google cloud/i, tech: "gcp" },
59
+ { pattern: /\bazure\b/i, tech: "azure" },
60
+ { pattern: /\bgraphql\b/i, tech: "graphql" },
61
+ { pattern: /\brest\s*api\b/i, tech: "rest" },
62
+ { pattern: /\bwebsocket\b/i, tech: "websocket" },
63
+ { pattern: /\bjest\b/i, tech: "jest" },
64
+ { pattern: /\bpytest\b/i, tech: "pytest" },
65
+ { pattern: /\bink\b.*\breact\b|\breact\b.*\bink\b/i, tech: "ink" },
66
+ { pattern: /\btailwind\b/i, tech: "tailwind" },
67
+ // Build tools
68
+ { pattern: /\bwebpack\b/i, tech: "webpack" },
69
+ { pattern: /\bvite\b/i, tech: "vite" },
70
+ { pattern: /\besbuild\b/i, tech: "esbuild" },
71
+ { pattern: /\brollup\b/i, tech: "rollup" },
72
+ ];
73
+ /**
74
+ * Get the plans directory from Claude Code settings
75
+ */
76
+ export function getPlansDirectory() {
77
+ const settingsPath = path.join(homedir(), ".claude", "settings.json");
78
+ try {
79
+ // Use require("fs") for sync read to avoid top-level await
80
+ const fsSync = require("fs");
81
+ const content = fsSync.readFileSync(settingsPath, "utf-8");
82
+ const settings = JSON.parse(content);
83
+ return settings.plansDirectory || path.join(homedir(), ".claude", "plans");
84
+ }
85
+ catch {
86
+ return path.join(homedir(), ".claude", "plans");
87
+ }
88
+ }
89
+ /**
90
+ * Extract a manifest from a JSONL session file.
91
+ */
92
+ export async function extractManifest(jsonlPath, projectPath, options = {}) {
93
+ const entries = await parseJSONL(jsonlPath);
94
+ return await extractManifestFromEntries(entries, projectPath, jsonlPath, options);
95
+ }
96
+ /**
97
+ * Extract a manifest from already-parsed entries.
98
+ */
99
+ export async function extractManifestFromEntries(entries, projectPath, jsonlPath, options = {}) {
100
+ // Extract session ID from first entry or filename
101
+ const sessionId = entries[0]?.sessionId || path.basename(jsonlPath, ".jsonl");
102
+ // Generate unique projectId from full path (dash-encoding pattern)
103
+ const projectId = projectPath.replace(/\//g, "-");
104
+ // Keep projectSlug for human-readable display
105
+ const projectSlug = path.basename(projectPath);
106
+ // Find timestamps
107
+ const timestamps = entries
108
+ .map((e) => e.timestamp)
109
+ .filter((t) => t)
110
+ .sort();
111
+ const startedAt = timestamps[0] || new Date().toISOString();
112
+ const endedAt = timestamps[timestamps.length - 1] || startedAt;
113
+ // Calculate duration
114
+ const durationMs = new Date(endedAt).getTime() - new Date(startedAt).getTime();
115
+ const durationMinutes = Math.round(durationMs / 1000 / 60);
116
+ // Extract title from summary entry
117
+ const summaryEntry = entries.find((e) => e.type === "summary");
118
+ const title = summaryEntry?.content.summary || extractFallbackTitle(entries);
119
+ // Extract user questions
120
+ const userQuestions = extractUserQuestions(entries);
121
+ // Extract files modified (from Write/Edit tool calls)
122
+ const filesModified = extractFilesModified(entries);
123
+ // Extract tools used
124
+ const toolsUsed = extractToolsUsed(entries);
125
+ // Extract technologies
126
+ const technologies = extractTechnologies(entries, filesModified);
127
+ // Detect plans from Write tool calls and catalog them
128
+ const writePlanPaths = detectWrittenPlanPaths(entries);
129
+ const writePlans = await catalogWrittenPlans(writePlanPaths, projectPath, sessionId);
130
+ // Detect transient plans (created by plan mode, stored in ~/.claude/plans/)
131
+ const transientPlans = await catalogTransientPlans(entries, projectPath, sessionId);
132
+ // Detect embedded plans from user messages (already catalogs them)
133
+ const embeddedPlans = await extractEmbeddedPlans(entries, projectPath, sessionId);
134
+ // Combine all sources (dedup happens via cataloging)
135
+ const plans = [...writePlans, ...transientPlans, ...embeddedPlans];
136
+ // Extract context snippets
137
+ const contextSnippets = extractContextSnippets(entries);
138
+ // Count messages and tool calls
139
+ const messageCount = entries.filter((e) => e.type === "user_message" || e.type === "assistant_message").length;
140
+ const toolCallCount = entries.filter((e) => e.type === "tool_call").length;
141
+ return {
142
+ id: sessionId,
143
+ projectId,
144
+ projectSlug,
145
+ projectPath,
146
+ archivedAt: new Date().toISOString(),
147
+ autoArchived: options.autoArchived ?? false,
148
+ title,
149
+ startedAt,
150
+ endedAt,
151
+ durationMinutes,
152
+ userQuestions,
153
+ filesModified,
154
+ toolsUsed,
155
+ technologies,
156
+ plans,
157
+ contextSnippets,
158
+ messageCount,
159
+ toolCallCount,
160
+ userLabel: options.userLabel,
161
+ };
162
+ }
163
+ /**
164
+ * Extract a fallback title from entries when no summary exists.
165
+ * Uses multiple strategies to find a meaningful title.
166
+ */
167
+ function extractFallbackTitle(entries) {
168
+ // Strategy 1: Look for a plan title in the conversation
169
+ // Plans often have good titles like "# Authentication System Design"
170
+ for (const entry of entries) {
171
+ if (entry.type === "tool_call" && entry.content.toolName === "Write") {
172
+ const filePath = entry.content.toolInput?.file_path;
173
+ const content = entry.content.toolInput?.content;
174
+ if (filePath &&
175
+ content &&
176
+ (filePath.includes("/plans/") || filePath.includes("plan"))) {
177
+ const titleMatch = content.match(/^#\s+(.+)$/m);
178
+ if (titleMatch && titleMatch[1].length <= 80) {
179
+ return titleMatch[1].trim();
180
+ }
181
+ }
182
+ }
183
+ }
184
+ // Strategy 2: Extract action from first real user message (skip internal commands)
185
+ const firstUser = entries.find((e) => {
186
+ if (e.type !== "user_message" || !e.content.text)
187
+ return false;
188
+ const text = e.content.text.trim();
189
+ // Skip internal Claude Code messages
190
+ if (text.startsWith("<local-command"))
191
+ return false;
192
+ if (text.startsWith("<command-"))
193
+ return false;
194
+ if (text.length === 0)
195
+ return false;
196
+ return true;
197
+ });
198
+ if (firstUser?.content.text) {
199
+ const text = firstUser.content.text.trim();
200
+ // Skip common noise prefixes
201
+ const noisePrefixes = [
202
+ /^implement the following plan[:\s]*/i,
203
+ /^here is the plan[:\s]*/i,
204
+ /^please implement[:\s]*/i,
205
+ /^can you[:\s]*/i,
206
+ /^i want to[:\s]*/i,
207
+ /^i need to[:\s]*/i,
208
+ /^help me[:\s]*/i,
209
+ /^let's[:\s]*/i,
210
+ ];
211
+ let cleanText = text;
212
+ for (const prefix of noisePrefixes) {
213
+ cleanText = cleanText.replace(prefix, "");
214
+ }
215
+ cleanText = cleanText.trim();
216
+ // If it's still too long, try to extract first sentence or phrase
217
+ if (cleanText.length > 80) {
218
+ // Try to get first sentence
219
+ const sentenceMatch = cleanText.match(/^[^.!?\n]+[.!?]?/);
220
+ if (sentenceMatch && sentenceMatch[0].length <= 80) {
221
+ return sentenceMatch[0].trim();
222
+ }
223
+ // Just truncate
224
+ return cleanText.substring(0, 77) + "...";
225
+ }
226
+ if (cleanText.length > 0) {
227
+ return cleanText;
228
+ }
229
+ }
230
+ // Strategy 3: Use project name + date as last resort
231
+ return "Session " + new Date().toISOString().split("T")[0];
232
+ }
233
+ /**
234
+ * Extract user questions from entries (truncated).
235
+ */
236
+ function extractUserQuestions(entries) {
237
+ return entries
238
+ .filter((e) => e.type === "user_message" && e.content.text)
239
+ .map((e) => {
240
+ const text = e.content.text.trim();
241
+ if (text.length <= MAX_QUESTION_LENGTH) {
242
+ return text;
243
+ }
244
+ return text.substring(0, MAX_QUESTION_LENGTH - 3) + "...";
245
+ })
246
+ .filter((q) => q.length > 0);
247
+ }
248
+ /**
249
+ * Extract files modified from Write/Edit tool calls.
250
+ */
251
+ function extractFilesModified(entries) {
252
+ const files = new Set();
253
+ for (const entry of entries) {
254
+ if (entry.type === "tool_call") {
255
+ const toolName = entry.content.toolName;
256
+ const input = entry.content.toolInput;
257
+ if (toolName === "Write" || toolName === "Edit") {
258
+ const filePath = input?.file_path;
259
+ if (filePath) {
260
+ files.add(filePath);
261
+ }
262
+ }
263
+ }
264
+ }
265
+ return Array.from(files);
266
+ }
267
+ /**
268
+ * Extract unique tools used.
269
+ */
270
+ function extractToolsUsed(entries) {
271
+ const tools = new Set();
272
+ for (const entry of entries) {
273
+ if (entry.type === "tool_call" && entry.content.toolName) {
274
+ tools.add(entry.content.toolName);
275
+ }
276
+ }
277
+ return Array.from(tools).sort();
278
+ }
279
+ /**
280
+ * Extract technologies from content and file paths.
281
+ */
282
+ function extractTechnologies(entries, filesModified) {
283
+ const techs = new Set();
284
+ // Build combined text for pattern matching
285
+ const textParts = [];
286
+ for (const entry of entries) {
287
+ if (entry.content.text) {
288
+ textParts.push(entry.content.text);
289
+ }
290
+ }
291
+ // Add file paths
292
+ textParts.push(...filesModified);
293
+ const combinedText = textParts.join(" ");
294
+ // Check each pattern
295
+ for (const { pattern, tech } of TECH_PATTERNS) {
296
+ if (pattern.test(combinedText)) {
297
+ techs.add(tech);
298
+ }
299
+ }
300
+ return Array.from(techs).sort();
301
+ }
302
+ /**
303
+ * Detect plan file paths written in this conversation.
304
+ * Returns paths to plan files that were written via the Write tool.
305
+ */
306
+ export function detectWrittenPlanPaths(entries) {
307
+ const planPaths = new Set();
308
+ const plansDir = getPlansDirectory();
309
+ for (const entry of entries) {
310
+ if (entry.type === "tool_call" && entry.content.toolName === "Write") {
311
+ const filePath = entry.content.toolInput?.file_path;
312
+ if (filePath) {
313
+ // Detect plans in ~/.claude/plans/ or custom plansDirectory
314
+ const isPlanPath = filePath.startsWith(plansDir) ||
315
+ filePath.includes("/plans/") ||
316
+ (filePath.includes("plan") && filePath.endsWith(".md"));
317
+ if (isPlanPath) {
318
+ planPaths.add(filePath);
319
+ }
320
+ }
321
+ }
322
+ }
323
+ return Array.from(planPaths);
324
+ }
325
+ /**
326
+ * Catalog written plans into the project index.
327
+ * Reads plan content and catalogs it using the standard cataloger (with dedup).
328
+ */
329
+ async function catalogWrittenPlans(planPaths, projectPath, sessionId) {
330
+ const references = [];
331
+ for (const planPath of planPaths) {
332
+ try {
333
+ const content = await fs.readFile(planPath, "utf-8");
334
+ // Extract title from content
335
+ const titleMatch = content.match(/^#\s+(.+)$/m);
336
+ const title = titleMatch
337
+ ? titleMatch[1].trim().replace(/^Plan:\s*/i, "")
338
+ : path.basename(planPath, ".md");
339
+ // Catalog the plan (handles dedup automatically)
340
+ const planEntry = await catalogPlan(projectPath, {
341
+ title,
342
+ content,
343
+ sessionId,
344
+ });
345
+ // Return reference pointing to the cataloged plan
346
+ references.push({
347
+ path: path.join(projectPath, ".jacques", planEntry.path),
348
+ name: planEntry.filename,
349
+ archivedPath: planEntry.path,
350
+ source: "write",
351
+ });
352
+ }
353
+ catch (error) {
354
+ // Plan file doesn't exist or can't be read - still track it as reference
355
+ references.push({
356
+ path: planPath,
357
+ name: path.basename(planPath),
358
+ archivedPath: `plans/${path.basename(planPath)}`,
359
+ source: "write",
360
+ });
361
+ }
362
+ }
363
+ return references;
364
+ }
365
+ /**
366
+ * Catalog transient plans created by Claude Code's plan mode.
367
+ * These are stored in ~/.claude/plans/ with the session's slug as filename.
368
+ */
369
+ async function catalogTransientPlans(entries, projectPath, sessionId) {
370
+ const references = [];
371
+ const plansDir = getPlansDirectory();
372
+ // Find the session slug from entries (stored in "progress" type entries)
373
+ const slugs = new Set();
374
+ for (const entry of entries) {
375
+ // The slug is stored in progress entries or can be found in the raw entry
376
+ const rawEntry = entry;
377
+ if (rawEntry.slug) {
378
+ slugs.add(rawEntry.slug);
379
+ }
380
+ }
381
+ // Check each slug for a corresponding plan file
382
+ for (const slug of slugs) {
383
+ const planPath = path.join(plansDir, `${slug}.md`);
384
+ try {
385
+ const content = await fs.readFile(planPath, "utf-8");
386
+ // Extract title from content
387
+ const titleMatch = content.match(/^#\s+(.+)$/m);
388
+ const title = titleMatch
389
+ ? titleMatch[1].trim().replace(/^Plan:\s*/i, "")
390
+ : slug;
391
+ // Catalog the plan (handles dedup automatically)
392
+ const planEntry = await catalogPlan(projectPath, {
393
+ title,
394
+ content,
395
+ sessionId,
396
+ });
397
+ // Return reference pointing to the cataloged plan
398
+ references.push({
399
+ path: path.join(projectPath, ".jacques", planEntry.path),
400
+ name: planEntry.filename,
401
+ archivedPath: planEntry.path,
402
+ source: "write", // Treat as "write" since it's from a file
403
+ });
404
+ }
405
+ catch (error) {
406
+ // Plan file doesn't exist for this slug - that's fine, not all sessions have plans
407
+ }
408
+ }
409
+ return references;
410
+ }
411
+ /**
412
+ * @deprecated Use detectWrittenPlanPaths instead
413
+ */
414
+ export function detectPlans(entries) {
415
+ const paths = detectWrittenPlanPaths(entries);
416
+ return paths.map((p) => ({
417
+ path: p,
418
+ name: path.basename(p),
419
+ archivedPath: `plans/${path.basename(p)}`,
420
+ source: "write",
421
+ }));
422
+ }
423
+ /**
424
+ * Extract context snippets from key assistant responses.
425
+ */
426
+ function extractContextSnippets(entries) {
427
+ const snippets = [];
428
+ for (const entry of entries) {
429
+ if (entry.type === "assistant_message" && entry.content.text) {
430
+ const text = entry.content.text.trim();
431
+ if (text.length > 0) {
432
+ // Only take first part of response
433
+ const snippet = text.length <= MAX_SNIPPET_LENGTH
434
+ ? text
435
+ : text.substring(0, MAX_SNIPPET_LENGTH - 3) + "...";
436
+ snippets.push(snippet);
437
+ if (snippets.length >= MAX_SNIPPETS) {
438
+ break;
439
+ }
440
+ }
441
+ }
442
+ }
443
+ return snippets;
444
+ }
445
+ /**
446
+ * Read a plan file's content.
447
+ */
448
+ export async function readPlanContent(planPath) {
449
+ try {
450
+ return await fs.readFile(planPath, "utf-8");
451
+ }
452
+ catch {
453
+ return null;
454
+ }
455
+ }
456
+ //# sourceMappingURL=manifest-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-extractor.js","sourceRoot":"","sources":["../../src/archive/manifest-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Migration Module
3
+ *
4
+ * Handles migrations for the archive system, including adding projectId
5
+ * to existing manifests that only have projectSlug.
6
+ */
7
+ /**
8
+ * Result of a migration operation
9
+ */
10
+ export interface MigrationResult {
11
+ /** Number of manifests updated */
12
+ updated: number;
13
+ /** Number of manifests skipped (already have projectId) */
14
+ skipped: number;
15
+ /** Errors encountered during migration */
16
+ errors: string[];
17
+ }
18
+ /**
19
+ * Migrate existing manifests to include projectId.
20
+ *
21
+ * For manifests that have projectPath but no projectId, generates
22
+ * projectId from the full path using dash-encoding pattern.
23
+ *
24
+ * Also rebuilds the search index to use projectId as keys.
25
+ */
26
+ export declare function migrateToProjectId(): Promise<MigrationResult>;
27
+ /**
28
+ * Check if migration is needed.
29
+ * Returns true if any manifests are missing projectId.
30
+ */
31
+ export declare function isMigrationNeeded(): Promise<boolean>;
32
+ /**
33
+ * Get migration status (how many manifests need migration).
34
+ */
35
+ export declare function getMigrationStatus(): Promise<{
36
+ total: number;
37
+ needsMigration: number;
38
+ alreadyMigrated: number;
39
+ }>;
40
+ /**
41
+ * Result of project path migration
42
+ */
43
+ export interface PathMigrationResult {
44
+ /** Number of manifests whose projectPath/projectSlug were updated */
45
+ updated: number;
46
+ /** Number of manifests that were already correct */
47
+ skipped: number;
48
+ /** Errors encountered */
49
+ errors: string[];
50
+ }
51
+ /**
52
+ * Migrate manifest project paths using the fixed decodeProjectPath().
53
+ *
54
+ * Re-decodes each manifest's projectId (which is the encoded dir name)
55
+ * to get the correct projectPath and projectSlug using sessions-index.json.
56
+ * Updates manifests where the decoded values differ from what's stored.
57
+ */
58
+ export declare function migrateProjectPaths(): Promise<PathMigrationResult>;
59
+ //# sourceMappingURL=migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../src/archive/migration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC,CA4DnE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAkB1D;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC,CAqBD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAoDxE"}