@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,522 @@
1
+ /**
2
+ * Catalog Extractor
3
+ *
4
+ * Extracts lightweight artifacts from JSONL session files into per-project
5
+ * .jacques/ directories for fast dashboard loading.
6
+ *
7
+ * Three artifact types:
8
+ * 1. Session manifests → .jacques/sessions/{id}.json
9
+ * 2. Explore results → .jacques/subagents/explore_{id}_{slug}.md
10
+ * 3. Web search results → .jacques/subagents/search_{hash}_{slug}.md
11
+ *
12
+ * Plans are delegated to the existing plan-cataloger.
13
+ */
14
+ import { promises as fs } from "fs";
15
+ import { join, basename } from "path";
16
+ import { createHash } from "crypto";
17
+ import { parseJSONL, getEntryStatistics } from "../session/parser.js";
18
+ import { listSubagentFiles } from "../session/detector.js";
19
+ import { extractManifestFromEntries } from "../archive/manifest-extractor.js";
20
+ import { detectModeAndPlans } from "../cache/index.js";
21
+ import { catalogPlan } from "../archive/plan-cataloger.js";
22
+ import { PLAN_TRIGGER_PATTERNS, extractPlanTitle } from "../archive/plan-extractor.js";
23
+ import { slugify } from "../archive/filename-utils.js";
24
+ import { detectGitInfo, readGitBranchFromJsonl } from "../cache/git-utils.js";
25
+ import { addSubagentToIndex, addSessionToIndex, } from "../context/indexer.js";
26
+ const JACQUES_DIR = ".jacques";
27
+ const SESSIONS_DIR = "sessions";
28
+ const SUBAGENTS_DIR = "subagents";
29
+ /**
30
+ * Generate a short hash from text.
31
+ */
32
+ function shortHash(text) {
33
+ return createHash("sha256").update(text).digest("hex").substring(0, 8);
34
+ }
35
+ /**
36
+ * Extract the final assistant response text from a subagent JSONL file.
37
+ * Returns the last substantial assistant message as markdown.
38
+ */
39
+ export async function extractExploreResult(subagentFile, description, sessionId, timestamp) {
40
+ let entries;
41
+ try {
42
+ entries = await parseJSONL(subagentFile.filePath);
43
+ }
44
+ catch {
45
+ return null;
46
+ }
47
+ if (entries.length === 0) {
48
+ return null;
49
+ }
50
+ // Find the last assistant message with text content
51
+ let lastAssistantText = null;
52
+ for (let i = entries.length - 1; i >= 0; i--) {
53
+ const entry = entries[i];
54
+ if (entry.type === "assistant_message" && entry.content.text && entry.content.text.length > 0) {
55
+ lastAssistantText = entry.content.text;
56
+ break;
57
+ }
58
+ }
59
+ if (!lastAssistantText) {
60
+ return null;
61
+ }
62
+ // Compute token cost
63
+ const stats = getEntryStatistics(entries);
64
+ const inputCost = stats.lastInputTokens + stats.lastCacheRead;
65
+ const outputCost = stats.totalOutputTokensEstimated;
66
+ const tokenCost = inputCost + outputCost;
67
+ const slug = slugify(description);
68
+ const filename = `explore_${subagentFile.agentId}_${slug}.md`;
69
+ // Build markdown with metadata header
70
+ const markdown = [
71
+ `# Explore: ${description}`,
72
+ "",
73
+ `> Session: \`${sessionId}\``,
74
+ `> Date: ${new Date(timestamp).toISOString().split("T")[0]}`,
75
+ `> Tokens: ~${tokenCost.toLocaleString()}`,
76
+ "",
77
+ "---",
78
+ "",
79
+ lastAssistantText,
80
+ ].join("\n");
81
+ const entry = {
82
+ id: subagentFile.agentId,
83
+ sessionId,
84
+ type: "exploration",
85
+ title: description,
86
+ filename,
87
+ path: `subagents/${filename}`,
88
+ timestamp,
89
+ tokenCost: tokenCost > 0 ? tokenCost : undefined,
90
+ extractedAt: new Date().toISOString(),
91
+ };
92
+ return { markdown, entry };
93
+ }
94
+ /**
95
+ * Extract web search results from parsed entries.
96
+ * Returns markdown files combining query + URLs + assistant synthesis.
97
+ */
98
+ export function extractSearchResults(entries, sessionId) {
99
+ const results = [];
100
+ const seenQueries = new Set();
101
+ for (let i = 0; i < entries.length; i++) {
102
+ const entry = entries[i];
103
+ if (entry.type !== "web_search" || entry.content.searchType !== "results") {
104
+ continue;
105
+ }
106
+ const query = entry.content.searchQuery;
107
+ if (!query || seenQueries.has(query)) {
108
+ continue;
109
+ }
110
+ seenQueries.add(query);
111
+ const resultCount = entry.content.searchResultCount || 0;
112
+ const urls = entry.content.searchUrls || [];
113
+ // Find the next substantial assistant response
114
+ let synthesis = "";
115
+ for (let j = i + 1; j < entries.length; j++) {
116
+ const next = entries[j];
117
+ if (next.type === "assistant_message" && next.content.text && next.content.text.length >= 200) {
118
+ synthesis = next.content.text;
119
+ break;
120
+ }
121
+ if (next.type === "user_message" || (next.type === "web_search" && next.content.searchType === "results")) {
122
+ break;
123
+ }
124
+ }
125
+ const slug = slugify(query);
126
+ const date = new Date(entry.timestamp).toISOString().split("T")[0];
127
+ const id = `search_${shortHash(query + entry.timestamp)}`;
128
+ const filename = `search_${id}_${slug}.md`;
129
+ // Build markdown
130
+ const urlSection = urls.length > 0
131
+ ? urls.map((u) => `- [${u.title}](${u.url})`).join("\n")
132
+ : "_No URLs captured_";
133
+ const markdown = [
134
+ `# Search: ${query}`,
135
+ "",
136
+ `> Session: \`${sessionId}\``,
137
+ `> Date: ${date}`,
138
+ `> Results: ${resultCount}`,
139
+ "",
140
+ "## Sources",
141
+ "",
142
+ urlSection,
143
+ "",
144
+ "---",
145
+ "",
146
+ synthesis || "_No synthesis captured_",
147
+ ].join("\n");
148
+ const subagentEntry = {
149
+ id,
150
+ sessionId,
151
+ type: "search",
152
+ title: query,
153
+ filename,
154
+ path: `subagents/${filename}`,
155
+ timestamp: entry.timestamp,
156
+ resultCount: resultCount > 0 ? resultCount : undefined,
157
+ extractedAt: new Date().toISOString(),
158
+ };
159
+ results.push({ markdown, entry: subagentEntry });
160
+ }
161
+ return results;
162
+ }
163
+ /**
164
+ * Create a session manifest from parsed entries.
165
+ *
166
+ * @param deduplicatedPlanRefs - Pre-deduplicated plan refs from extractSessionCatalog().
167
+ * If provided, these are used directly instead of detecting from entries.
168
+ */
169
+ export async function createSessionManifest(entries, jsonlPath, projectPath, jsonlMtime, planIds, subagentIds, deduplicatedPlanRefs) {
170
+ const sessionId = basename(jsonlPath, ".jsonl");
171
+ // Reuse manifest extractor for shared logic
172
+ const manifest = await extractManifestFromEntries(entries, projectPath, jsonlPath);
173
+ // Detect mode (always needed) and plan references (only if not provided)
174
+ const { mode, planRefs: detectedPlanRefs } = detectModeAndPlans(entries);
175
+ const planRefs = deduplicatedPlanRefs ?? (detectedPlanRefs.length > 0 ? detectedPlanRefs : undefined);
176
+ // Get token stats
177
+ const stats = getEntryStatistics(entries);
178
+ const totalInput = stats.lastInputTokens + stats.lastCacheRead;
179
+ const totalOutput = stats.totalOutputTokensEstimated;
180
+ const hasTokens = totalInput > 0 || totalOutput > 0;
181
+ // Detect git info for persistence (survives index rebuilds after worktree deletion)
182
+ const gitInfo = await detectGitInfo(projectPath);
183
+ if (!gitInfo.branch) {
184
+ gitInfo.branch = await readGitBranchFromJsonl(jsonlPath) || undefined;
185
+ }
186
+ // Check for subagents
187
+ const subagentFiles = await listSubagentFiles(jsonlPath);
188
+ const userVisibleSubagents = subagentFiles.filter((f) => !f.agentId.startsWith("aprompt_suggestion-") &&
189
+ !f.agentId.startsWith("acompact-"));
190
+ const autoCompactFile = subagentFiles.find((f) => f.agentId.startsWith("acompact-"));
191
+ return {
192
+ id: sessionId,
193
+ title: manifest.title,
194
+ projectPath: manifest.projectPath,
195
+ projectSlug: manifest.projectSlug,
196
+ gitRepoRoot: gitInfo.repoRoot || undefined,
197
+ gitBranch: gitInfo.branch || undefined,
198
+ gitWorktree: gitInfo.worktree || undefined,
199
+ startedAt: manifest.startedAt,
200
+ endedAt: manifest.endedAt,
201
+ durationMinutes: manifest.durationMinutes,
202
+ userQuestions: manifest.userQuestions,
203
+ filesModified: manifest.filesModified,
204
+ toolsUsed: manifest.toolsUsed,
205
+ technologies: manifest.technologies,
206
+ messageCount: manifest.messageCount,
207
+ toolCallCount: manifest.toolCallCount,
208
+ tokens: hasTokens
209
+ ? {
210
+ input: totalInput,
211
+ output: totalOutput,
212
+ cacheCreation: stats.lastCacheCreation,
213
+ cacheRead: stats.lastCacheRead,
214
+ }
215
+ : undefined,
216
+ hasSubagents: userVisibleSubagents.length > 0,
217
+ hadAutoCompact: autoCompactFile ? true : undefined,
218
+ mode: mode || undefined,
219
+ planIds,
220
+ subagentIds,
221
+ planRefs: planRefs && planRefs.length > 0 ? planRefs : undefined,
222
+ jsonlModifiedAt: jsonlMtime,
223
+ extractedAt: new Date().toISOString(),
224
+ };
225
+ }
226
+ /**
227
+ * Extract catalog for a single session.
228
+ *
229
+ * 1. Check mtime for incremental skip
230
+ * 2. Parse JSONL
231
+ * 3. Extract explore agent results as markdown
232
+ * 4. Extract web search results as markdown
233
+ * 5. Delegate plan extraction to plan-cataloger
234
+ * 6. Write session manifest
235
+ * 7. Update .jacques/index.json
236
+ */
237
+ export async function extractSessionCatalog(jsonlPath, projectPath, options = {}) {
238
+ const sessionId = basename(jsonlPath, ".jsonl");
239
+ // Skip extraction if projectPath no longer exists (deleted worktree)
240
+ // This prevents fs.mkdir from recreating deleted directories as ghost dirs
241
+ try {
242
+ await fs.access(projectPath);
243
+ }
244
+ catch {
245
+ return { sessionId, skipped: true, subagentsExtracted: 0, plansExtracted: 0 };
246
+ }
247
+ const sessionsDir = join(projectPath, JACQUES_DIR, SESSIONS_DIR);
248
+ const subagentsDir = join(projectPath, JACQUES_DIR, SUBAGENTS_DIR);
249
+ const manifestPath = join(sessionsDir, `${sessionId}.json`);
250
+ try {
251
+ // Get JSONL file stats
252
+ const jsonlStats = await fs.stat(jsonlPath);
253
+ const jsonlMtime = jsonlStats.mtime.toISOString();
254
+ // Incremental check: compare mtime
255
+ if (!options.force) {
256
+ try {
257
+ const existingContent = await fs.readFile(manifestPath, "utf-8");
258
+ const existingManifest = JSON.parse(existingContent);
259
+ if (existingManifest.jsonlModifiedAt === jsonlMtime) {
260
+ return {
261
+ sessionId,
262
+ skipped: true,
263
+ subagentsExtracted: 0,
264
+ plansExtracted: 0,
265
+ };
266
+ }
267
+ }
268
+ catch {
269
+ // No existing manifest, proceed with extraction
270
+ }
271
+ }
272
+ // Parse JSONL
273
+ const entries = await parseJSONL(jsonlPath);
274
+ if (entries.length === 0) {
275
+ return {
276
+ sessionId,
277
+ skipped: true,
278
+ subagentsExtracted: 0,
279
+ plansExtracted: 0,
280
+ };
281
+ }
282
+ // Ensure output directories exist
283
+ await fs.mkdir(sessionsDir, { recursive: true });
284
+ await fs.mkdir(subagentsDir, { recursive: true });
285
+ const extractedSubagentIds = [];
286
+ const extractedPlanIds = [];
287
+ let subagentsExtracted = 0;
288
+ // --- Extract explore agent results ---
289
+ const subagentFiles = await listSubagentFiles(jsonlPath);
290
+ const userVisibleSubagents = subagentFiles.filter((f) => !f.agentId.startsWith("aprompt_suggestion-") &&
291
+ !f.agentId.startsWith("acompact-"));
292
+ // Build a map of agentId → description from entries
293
+ const agentDescriptions = new Map();
294
+ for (const entry of entries) {
295
+ if (entry.type === "agent_progress" && entry.content.agentId) {
296
+ const agentType = entry.content.agentType?.toLowerCase();
297
+ if (agentType === "explore" && !agentDescriptions.has(entry.content.agentId)) {
298
+ agentDescriptions.set(entry.content.agentId, {
299
+ description: entry.content.agentDescription || "Explore codebase",
300
+ timestamp: entry.timestamp,
301
+ });
302
+ }
303
+ }
304
+ }
305
+ // Extract each explore agent's final result
306
+ for (const subFile of userVisibleSubagents) {
307
+ const agentInfo = agentDescriptions.get(subFile.agentId);
308
+ if (!agentInfo)
309
+ continue; // Not an explore agent
310
+ const result = await extractExploreResult(subFile, agentInfo.description, sessionId, agentInfo.timestamp);
311
+ if (result) {
312
+ // Write markdown file
313
+ await fs.writeFile(join(subagentsDir, result.entry.filename), result.markdown, "utf-8");
314
+ // Add to index
315
+ await addSubagentToIndex(projectPath, result.entry);
316
+ extractedSubagentIds.push(result.entry.id);
317
+ subagentsExtracted++;
318
+ }
319
+ }
320
+ // --- Extract web search results ---
321
+ const searchResults = extractSearchResults(entries, sessionId);
322
+ for (const sr of searchResults) {
323
+ await fs.writeFile(join(subagentsDir, sr.entry.filename), sr.markdown, "utf-8");
324
+ await addSubagentToIndex(projectPath, sr.entry);
325
+ extractedSubagentIds.push(sr.entry.id);
326
+ subagentsExtracted++;
327
+ }
328
+ // --- Extract plans (delegate to plan-cataloger) ---
329
+ const { planRefs } = detectModeAndPlans(entries);
330
+ // Track planRef → catalogId mapping (parallel arrays)
331
+ const planRefCatalogIds = [];
332
+ for (const ref of planRefs) {
333
+ if (ref.source === "embedded") {
334
+ // Get plan content from the entry
335
+ const entry = entries[ref.messageIndex];
336
+ if (entry?.type === "user_message" && entry.content.text) {
337
+ let planContent = entry.content.text;
338
+ for (const pattern of PLAN_TRIGGER_PATTERNS) {
339
+ const match = planContent.match(pattern);
340
+ if (match) {
341
+ planContent = planContent.substring(match[0].length).trim();
342
+ break;
343
+ }
344
+ }
345
+ if (planContent.length >= 100 && planContent.includes("#")) {
346
+ const title = extractPlanTitle(planContent);
347
+ const planEntry = await catalogPlan(projectPath, {
348
+ title,
349
+ content: planContent,
350
+ sessionId,
351
+ });
352
+ extractedPlanIds.push(planEntry.id);
353
+ planRefCatalogIds.push(planEntry.id);
354
+ }
355
+ else {
356
+ planRefCatalogIds.push(null);
357
+ }
358
+ }
359
+ else {
360
+ planRefCatalogIds.push(null);
361
+ }
362
+ }
363
+ else if (ref.source === "agent" && ref.agentId) {
364
+ // Read Plan agent's subagent JSONL, extract last assistant message as plan content
365
+ const subagentFile = userVisibleSubagents.find(f => f.agentId === ref.agentId);
366
+ if (subagentFile) {
367
+ try {
368
+ const subEntries = await parseJSONL(subagentFile.filePath);
369
+ // Find last substantial assistant text (the plan output)
370
+ let planContent = null;
371
+ for (let i = subEntries.length - 1; i >= 0; i--) {
372
+ if (subEntries[i].type === "assistant_message" && subEntries[i].content.text && subEntries[i].content.text.length >= 100) {
373
+ planContent = subEntries[i].content.text;
374
+ break;
375
+ }
376
+ }
377
+ if (planContent && planContent.includes("#")) {
378
+ const title = extractPlanTitle(planContent);
379
+ const planEntry = await catalogPlan(projectPath, {
380
+ title,
381
+ content: planContent,
382
+ sessionId,
383
+ });
384
+ extractedPlanIds.push(planEntry.id);
385
+ planRefCatalogIds.push(planEntry.id);
386
+ }
387
+ else {
388
+ planRefCatalogIds.push(null);
389
+ }
390
+ }
391
+ catch {
392
+ // Subagent file unreadable, skip
393
+ planRefCatalogIds.push(null);
394
+ }
395
+ }
396
+ else {
397
+ planRefCatalogIds.push(null);
398
+ }
399
+ }
400
+ else if (ref.source === "write" && ref.filePath) {
401
+ // Read plan content from the file
402
+ try {
403
+ const content = await fs.readFile(ref.filePath, "utf-8");
404
+ if (content.length >= 100 && content.includes("#")) {
405
+ const title = extractPlanTitle(content);
406
+ const planEntry = await catalogPlan(projectPath, {
407
+ title,
408
+ content,
409
+ sessionId,
410
+ });
411
+ extractedPlanIds.push(planEntry.id);
412
+ planRefCatalogIds.push(planEntry.id);
413
+ }
414
+ else {
415
+ planRefCatalogIds.push(null);
416
+ }
417
+ }
418
+ catch {
419
+ // File doesn't exist anymore, skip
420
+ planRefCatalogIds.push(null);
421
+ }
422
+ }
423
+ else {
424
+ planRefCatalogIds.push(null);
425
+ }
426
+ }
427
+ // --- Deduplicate planRefs using logical grouping ---
428
+ // Within a session, each `embedded` plan starts a new logical group.
429
+ // Subsequent `agent` and `write` detections are intermediate steps of
430
+ // the preceding plan. Pick the best entry per group (write > embedded > agent).
431
+ //
432
+ // Cross-session dedup is already handled by catalogPlan() (SHA-256 + Jaccard).
433
+ // Pair each planRef with its catalogId and sort by messageIndex
434
+ const paired = planRefs.map((ref, i) => ({ ref, catalogId: planRefCatalogIds[i] }));
435
+ paired.sort((a, b) => a.ref.messageIndex - b.ref.messageIndex);
436
+ // Group: each `embedded` starts a new group; `agent`/`write` join current group
437
+ const groups = [];
438
+ for (const item of paired) {
439
+ if (item.ref.source === "embedded" || groups.length === 0) {
440
+ groups.push([item]);
441
+ }
442
+ else {
443
+ groups[groups.length - 1].push(item);
444
+ }
445
+ }
446
+ // Priority: write > embedded > agent
447
+ const SOURCE_PRIORITY = { write: 3, embedded: 2, agent: 1 };
448
+ const deduplicatedPlanRefs = [];
449
+ for (const group of groups) {
450
+ // Pick best entry by source priority
451
+ let best = group[0];
452
+ for (const item of group) {
453
+ if ((SOURCE_PRIORITY[item.ref.source] || 0) > (SOURCE_PRIORITY[best.ref.source] || 0)) {
454
+ best = item;
455
+ }
456
+ }
457
+ // Merge all sources from the group
458
+ const allSources = [...new Set(group.map(item => item.ref.source))];
459
+ // Collect filePath and agentId from any member
460
+ const filePath = group.find(item => item.ref.filePath)?.ref.filePath;
461
+ const agentId = group.find(item => item.ref.agentId)?.ref.agentId;
462
+ // Prefer the best item's catalogId, fall back to any catalogId in the group
463
+ const catalogId = best.catalogId || group.find(item => item.catalogId)?.catalogId || undefined;
464
+ deduplicatedPlanRefs.push({
465
+ title: best.ref.title,
466
+ source: best.ref.source,
467
+ sources: allSources,
468
+ messageIndex: best.ref.messageIndex,
469
+ filePath: filePath || best.ref.filePath,
470
+ agentId: agentId || best.ref.agentId,
471
+ catalogId,
472
+ });
473
+ }
474
+ // Deduplicate extractedPlanIds too
475
+ const uniquePlanIds = [...new Set(extractedPlanIds)];
476
+ // --- Write session manifest ---
477
+ const sessionManifest = await createSessionManifest(entries, jsonlPath, projectPath, jsonlMtime, uniquePlanIds, extractedSubagentIds, deduplicatedPlanRefs.length > 0 ? deduplicatedPlanRefs : undefined);
478
+ await fs.writeFile(manifestPath, JSON.stringify(sessionManifest, null, 2), "utf-8");
479
+ // --- Update session entry in index.json ---
480
+ const projectSlug = basename(projectPath);
481
+ const indexSessionEntry = {
482
+ id: sessionId,
483
+ title: sessionManifest.title,
484
+ filename: `${sessionId}.json`,
485
+ path: `sessions/${sessionId}.json`,
486
+ savedAt: sessionManifest.extractedAt,
487
+ startedAt: sessionManifest.startedAt,
488
+ endedAt: sessionManifest.endedAt,
489
+ durationMinutes: sessionManifest.durationMinutes,
490
+ messageCount: sessionManifest.messageCount,
491
+ toolCallCount: sessionManifest.toolCallCount,
492
+ technologies: sessionManifest.technologies,
493
+ filesModified: sessionManifest.filesModified,
494
+ toolsUsed: sessionManifest.toolsUsed,
495
+ tokens: sessionManifest.tokens,
496
+ hasSubagents: sessionManifest.hasSubagents,
497
+ hadAutoCompact: sessionManifest.hadAutoCompact,
498
+ mode: sessionManifest.mode,
499
+ planCount: uniquePlanIds.length > 0 ? uniquePlanIds.length : undefined,
500
+ subagentCount: extractedSubagentIds.length > 0 ? extractedSubagentIds.length : undefined,
501
+ planIds: uniquePlanIds.length > 0 ? uniquePlanIds : undefined,
502
+ subagentIds: extractedSubagentIds.length > 0 ? extractedSubagentIds : undefined,
503
+ };
504
+ await addSessionToIndex(projectPath, indexSessionEntry);
505
+ return {
506
+ sessionId,
507
+ skipped: false,
508
+ subagentsExtracted,
509
+ plansExtracted: uniquePlanIds.length,
510
+ };
511
+ }
512
+ catch (error) {
513
+ return {
514
+ sessionId,
515
+ skipped: false,
516
+ subagentsExtracted: 0,
517
+ plansExtracted: 0,
518
+ error: error instanceof Error ? error.message : "Unknown error",
519
+ };
520
+ }
521
+ }
522
+ //# sourceMappingURL=extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/catalog/extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Catalog Module
3
+ *
4
+ * Pre-extracts expensive data from JSONL files into per-project .jacques/
5
+ * directories for fast dashboard loading.
6
+ */
7
+ export type { SessionManifest, ExtractSessionOptions, ExtractSessionResult, BulkExtractOptions, BulkExtractResult, CatalogProgress, } from "./types.js";
8
+ export { extractSessionCatalog, extractExploreResult, extractSearchResults, createSessionManifest, } from "./extractor.js";
9
+ export { extractProjectCatalog, extractAllCatalogs, } from "./bulk-extractor.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/catalog/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Catalog Module
3
+ *
4
+ * Pre-extracts expensive data from JSONL files into per-project .jacques/
5
+ * directories for fast dashboard loading.
6
+ */
7
+ // Single-session extraction
8
+ export { extractSessionCatalog, extractExploreResult, extractSearchResults, createSessionManifest, } from "./extractor.js";
9
+ // Bulk extraction
10
+ export { extractProjectCatalog, extractAllCatalogs, } from "./bulk-extractor.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/catalog/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,4BAA4B;AAC5B,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAExB,kBAAkB;AAClB,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC"}