@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,149 @@
1
+ /**
2
+ * Context Types
3
+ *
4
+ * Type definitions for the unified project index (.jacques/index.json)
5
+ * This is the single entry point for all project knowledge:
6
+ * - context: External files imported from Obsidian, Google Docs, etc.
7
+ * - sessions: Saved Claude Code conversations
8
+ * - plans: Implementation plans created during conversations
9
+ */
10
+ /**
11
+ * Unified index of all project knowledge (.jacques/index.json)
12
+ */
13
+ export interface ProjectIndex {
14
+ version: string;
15
+ updatedAt: string;
16
+ context: ContextFile[];
17
+ sessions: SessionEntry[];
18
+ plans: PlanEntry[];
19
+ subagents: SubagentEntry[];
20
+ /** Currently active plan IDs (cross-session tracking) */
21
+ activePlanIds?: string[];
22
+ }
23
+ /**
24
+ * A single context file entry (imported from external sources)
25
+ */
26
+ export interface ContextFile {
27
+ id: string;
28
+ name: string;
29
+ path: string;
30
+ source: ContextSource;
31
+ sourceFile: string;
32
+ addedAt: string;
33
+ description?: string;
34
+ sizeBytes: number;
35
+ tags?: string[];
36
+ }
37
+ /**
38
+ * A single session entry (saved conversation)
39
+ */
40
+ export interface SessionEntry {
41
+ id: string;
42
+ title: string;
43
+ filename: string;
44
+ path: string;
45
+ savedAt: string;
46
+ startedAt: string;
47
+ endedAt: string;
48
+ durationMinutes: number;
49
+ messageCount: number;
50
+ toolCallCount: number;
51
+ technologies: string[];
52
+ userLabel?: string;
53
+ /** Files modified via Write/Edit tool calls */
54
+ filesModified?: string[];
55
+ /** Unique tool names used */
56
+ toolsUsed?: string[];
57
+ /** Token usage stats */
58
+ tokens?: {
59
+ input: number;
60
+ output: number;
61
+ cacheCreation: number;
62
+ cacheRead: number;
63
+ };
64
+ /** Whether session has user-visible subagents */
65
+ hasSubagents?: boolean;
66
+ /** Whether auto-compact occurred */
67
+ hadAutoCompact?: boolean;
68
+ /** Session mode: planning or execution */
69
+ mode?: "planning" | "execution" | null;
70
+ /** Number of plans in this session */
71
+ planCount?: number;
72
+ /** Number of subagent artifacts */
73
+ subagentCount?: number;
74
+ /** Linked plan IDs (references PlanEntry.id) */
75
+ planIds?: string[];
76
+ /** Linked subagent IDs (references SubagentEntry.id) */
77
+ subagentIds?: string[];
78
+ }
79
+ /**
80
+ * A single subagent entry (exploration or search result)
81
+ */
82
+ export interface SubagentEntry {
83
+ /** Unique ID: agentId for explorations, generated hash for searches */
84
+ id: string;
85
+ /** Parent session ID */
86
+ sessionId: string;
87
+ /** Type: exploration (Explore agent) or search (web search) */
88
+ type: "exploration" | "search";
89
+ /** Description (exploration) or query (search) */
90
+ title: string;
91
+ /** Output filename */
92
+ filename: string;
93
+ /** Relative path: "subagents/{filename}" */
94
+ path: string;
95
+ /** When the subagent ran or search was performed */
96
+ timestamp: string;
97
+ /** Estimated token cost (for explorations) */
98
+ tokenCost?: number;
99
+ /** Number of results (for searches) */
100
+ resultCount?: number;
101
+ /** When this was extracted */
102
+ extractedAt: string;
103
+ }
104
+ /**
105
+ * A single plan entry
106
+ */
107
+ export interface PlanEntry {
108
+ id: string;
109
+ title: string;
110
+ filename: string;
111
+ path: string;
112
+ contentHash?: string;
113
+ bodyHash?: string;
114
+ createdAt: string;
115
+ updatedAt: string;
116
+ sessions: string[];
117
+ }
118
+ /**
119
+ * Supported context sources
120
+ */
121
+ export type ContextSource = "obsidian" | "google_docs" | "notion" | "local";
122
+ /**
123
+ * Options for adding a new context file
124
+ */
125
+ export interface AddContextOptions {
126
+ cwd: string;
127
+ sourceFile: string;
128
+ name: string;
129
+ source: ContextSource;
130
+ description?: string;
131
+ }
132
+ /**
133
+ * Default empty index
134
+ */
135
+ export declare function getDefaultIndex(): ProjectIndex;
136
+ /**
137
+ * Legacy ContextIndex type for backwards compatibility
138
+ * @deprecated Use ProjectIndex instead
139
+ */
140
+ export interface ContextIndex {
141
+ version: string;
142
+ updatedAt: string;
143
+ files: ContextFile[];
144
+ }
145
+ /**
146
+ * Migrate legacy index to new format
147
+ */
148
+ export declare function migrateIndex(legacy: ContextIndex): ProjectIndex;
149
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Context Types
3
+ *
4
+ * Type definitions for the unified project index (.jacques/index.json)
5
+ * This is the single entry point for all project knowledge:
6
+ * - context: External files imported from Obsidian, Google Docs, etc.
7
+ * - sessions: Saved Claude Code conversations
8
+ * - plans: Implementation plans created during conversations
9
+ */
10
+ /**
11
+ * Default empty index
12
+ */
13
+ export function getDefaultIndex() {
14
+ return {
15
+ version: "2.0.0",
16
+ updatedAt: new Date().toISOString(),
17
+ context: [],
18
+ sessions: [],
19
+ plans: [],
20
+ subagents: [],
21
+ };
22
+ }
23
+ /**
24
+ * Migrate legacy index to new format
25
+ */
26
+ export function migrateIndex(legacy) {
27
+ return {
28
+ version: "2.0.0",
29
+ updatedAt: legacy.updatedAt,
30
+ context: legacy.files,
31
+ sessions: [],
32
+ plans: [],
33
+ subagents: [],
34
+ };
35
+ }
36
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmIH;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAYD;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO,EAAE,MAAM,CAAC,KAAK;QACrB,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Handoff Catalog
3
+ *
4
+ * Lists and reads handoff files from .jacques/handoffs/
5
+ */
6
+ import type { HandoffEntry, HandoffCatalog } from "./types.js";
7
+ /**
8
+ * Get the handoffs directory path for a project
9
+ */
10
+ export declare function getHandoffsDir(projectDir: string): string;
11
+ /**
12
+ * Ensure the handoffs directory exists
13
+ */
14
+ export declare function ensureHandoffsDir(projectDir: string): Promise<string>;
15
+ /**
16
+ * Parse timestamp from handoff filename
17
+ * Format: 2026-01-31T14-30-00-handoff.md
18
+ */
19
+ export declare function parseTimestampFromFilename(filename: string): Date;
20
+ /**
21
+ * Generate a handoff filename with current timestamp
22
+ */
23
+ export declare function generateHandoffFilename(): string;
24
+ /**
25
+ * Format a Date object for display
26
+ */
27
+ export declare function formatHandoffDate(date: Date): string;
28
+ /**
29
+ * Estimate token count from content length
30
+ * Uses ~4.5 characters per token average
31
+ */
32
+ export declare function estimateTokens(content: string): number;
33
+ /**
34
+ * Format token count for display (e.g., "2.1k")
35
+ */
36
+ export declare function formatTokenEstimate(tokens: number): string;
37
+ /**
38
+ * List all handoffs in a project directory
39
+ * Returns entries sorted by timestamp (newest first)
40
+ */
41
+ export declare function listHandoffs(projectDir: string): Promise<HandoffCatalog>;
42
+ /**
43
+ * Get the content of a specific handoff file
44
+ */
45
+ export declare function getHandoffContent(path: string): Promise<string>;
46
+ /**
47
+ * Check if any handoffs exist for a project
48
+ */
49
+ export declare function hasHandoffs(projectDir: string): Promise<boolean>;
50
+ /**
51
+ * Get the most recent handoff for a project
52
+ */
53
+ export declare function getLatestHandoff(projectDir: string): Promise<HandoffEntry | null>;
54
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/handoff/catalog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI3E;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAOjE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAMhD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CASpD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA6B9E;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGtE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAGvF"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Handoff Catalog
3
+ *
4
+ * Lists and reads handoff files from .jacques/handoffs/
5
+ */
6
+ import { promises as fs } from "fs";
7
+ import { join } from "path";
8
+ /**
9
+ * Get the handoffs directory path for a project
10
+ */
11
+ export function getHandoffsDir(projectDir) {
12
+ return join(projectDir, ".jacques", "handoffs");
13
+ }
14
+ /**
15
+ * Ensure the handoffs directory exists
16
+ */
17
+ export async function ensureHandoffsDir(projectDir) {
18
+ const dir = getHandoffsDir(projectDir);
19
+ await fs.mkdir(dir, { recursive: true });
20
+ return dir;
21
+ }
22
+ /**
23
+ * Parse timestamp from handoff filename
24
+ * Format: 2026-01-31T14-30-00-handoff.md
25
+ */
26
+ export function parseTimestampFromFilename(filename) {
27
+ const match = filename.match(/^(\d{4}-\d{2}-\d{2})T(\d{2})-(\d{2})-(\d{2})/);
28
+ if (match) {
29
+ const [, date, hour, min, sec] = match;
30
+ return new Date(`${date}T${hour}:${min}:${sec}`);
31
+ }
32
+ return new Date();
33
+ }
34
+ /**
35
+ * Generate a handoff filename with current timestamp
36
+ */
37
+ export function generateHandoffFilename() {
38
+ const now = new Date();
39
+ const timestamp = now.toISOString()
40
+ .replace(/:/g, "-") // Replace colons with dashes
41
+ .replace(/\.\d{3}Z$/, ""); // Remove milliseconds and Z
42
+ return `${timestamp}-handoff.md`;
43
+ }
44
+ /**
45
+ * Format a Date object for display
46
+ */
47
+ export function formatHandoffDate(date) {
48
+ return date.toLocaleString("en-US", {
49
+ year: "numeric",
50
+ month: "2-digit",
51
+ day: "2-digit",
52
+ hour: "2-digit",
53
+ minute: "2-digit",
54
+ hour12: false,
55
+ });
56
+ }
57
+ /**
58
+ * Estimate token count from content length
59
+ * Uses ~4.5 characters per token average
60
+ */
61
+ export function estimateTokens(content) {
62
+ return Math.ceil(content.length / 4.5);
63
+ }
64
+ /**
65
+ * Format token count for display (e.g., "2.1k")
66
+ */
67
+ export function formatTokenEstimate(tokens) {
68
+ if (tokens >= 1000) {
69
+ return `${(tokens / 1000).toFixed(1)}k`;
70
+ }
71
+ return tokens.toString();
72
+ }
73
+ /**
74
+ * List all handoffs in a project directory
75
+ * Returns entries sorted by timestamp (newest first)
76
+ */
77
+ export async function listHandoffs(projectDir) {
78
+ const directory = getHandoffsDir(projectDir);
79
+ try {
80
+ const files = await fs.readdir(directory);
81
+ const mdFiles = files.filter(f => f.endsWith("-handoff.md"));
82
+ const entries = await Promise.all(mdFiles.map(async (filename) => {
83
+ const path = join(directory, filename);
84
+ const content = await fs.readFile(path, "utf-8");
85
+ const timestamp = parseTimestampFromFilename(filename);
86
+ const tokenEstimate = estimateTokens(content);
87
+ return { filename, timestamp, path, tokenEstimate };
88
+ }));
89
+ // Sort by timestamp, newest first
90
+ entries.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
91
+ return { directory, entries };
92
+ }
93
+ catch (error) {
94
+ // Directory doesn't exist or is empty
95
+ if (error.code === "ENOENT") {
96
+ return { directory, entries: [] };
97
+ }
98
+ throw error;
99
+ }
100
+ }
101
+ /**
102
+ * Get the content of a specific handoff file
103
+ */
104
+ export async function getHandoffContent(path) {
105
+ return fs.readFile(path, "utf-8");
106
+ }
107
+ /**
108
+ * Check if any handoffs exist for a project
109
+ */
110
+ export async function hasHandoffs(projectDir) {
111
+ const catalog = await listHandoffs(projectDir);
112
+ return catalog.entries.length > 0;
113
+ }
114
+ /**
115
+ * Get the most recent handoff for a project
116
+ */
117
+ export async function getLatestHandoff(projectDir) {
118
+ const catalog = await listHandoffs(projectDir);
119
+ return catalog.entries[0] || null;
120
+ }
121
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/handoff/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Handoff Generator
3
+ *
4
+ * Generates handoff documents directly from transcript files.
5
+ * Uses rule-based extraction (no LLM) for fast, consistent results.
6
+ */
7
+ import type { ParsedEntry } from "../session/parser.js";
8
+ /**
9
+ * Data extracted from a transcript for handoff generation
10
+ */
11
+ export interface HandoffData {
12
+ /** Session title from summary entry */
13
+ title: string;
14
+ /** Project directory */
15
+ projectDir: string;
16
+ /** Files modified (Write/Edit tool calls) */
17
+ filesModified: string[];
18
+ /** Tools used in the session */
19
+ toolsUsed: string[];
20
+ /** Recent user messages (last N) */
21
+ recentMessages: string[];
22
+ /** Timestamp of extraction */
23
+ timestamp: string;
24
+ /** Total user message count */
25
+ totalUserMessages: number;
26
+ /** Total tool call count */
27
+ totalToolCalls: number;
28
+ /** Plans detected in the session */
29
+ plans?: Array<{
30
+ path: string;
31
+ title: string;
32
+ }>;
33
+ /** Key assistant response snippets (last N, no thinking/tools) */
34
+ assistantHighlights: string[];
35
+ /** Detected decision points from user messages */
36
+ decisions: string[];
37
+ /** Technologies detected in the session */
38
+ technologies: string[];
39
+ /** Detected blockers/errors from messages */
40
+ blockers: string[];
41
+ }
42
+ /**
43
+ * Result of handoff generation
44
+ */
45
+ export interface HandoffResult {
46
+ /** Path to the generated handoff file */
47
+ filePath: string;
48
+ /** Filename of the handoff */
49
+ filename: string;
50
+ /** The handoff content */
51
+ content: string;
52
+ /** Estimated token count */
53
+ tokenEstimate: number;
54
+ }
55
+ /**
56
+ * Extract handoff data from parsed entries
57
+ */
58
+ export declare function extractHandoffData(entries: ParsedEntry[], projectDir: string): Promise<HandoffData>;
59
+ /**
60
+ * Format handoff data into markdown document
61
+ */
62
+ export declare function formatHandoffMarkdown(data: HandoffData): string;
63
+ /**
64
+ * Generate a handoff document from a transcript file
65
+ */
66
+ export declare function generateHandoffFromTranscript(transcriptPath: string, projectDir: string): Promise<HandoffResult>;
67
+ /**
68
+ * Generate handoff from already-parsed entries (avoids re-parsing)
69
+ */
70
+ export declare function generateHandoffFromEntries(entries: ParsedEntry[], projectDir: string): Promise<HandoffResult>;
71
+ /**
72
+ * Result of compact context extraction for skill consumption
73
+ */
74
+ export interface CompactContextResult {
75
+ /** Formatted context string for LLM skill (~2k tokens) */
76
+ context: string;
77
+ /** Estimated token count for the context */
78
+ tokenEstimate: number;
79
+ /** Raw extracted data for reference */
80
+ data: HandoffData;
81
+ }
82
+ /**
83
+ * Format extracted handoff data as compact context for skill consumption.
84
+ * This creates a structured prompt that maps to the 8 sections the
85
+ * skill/orchestrator expects, but at ~2k tokens instead of 60k.
86
+ */
87
+ export declare function formatAsSkillContext(data: HandoffData): string;
88
+ /**
89
+ * Get compact context for LLM skill consumption.
90
+ * This is the main export for external interfaces like Dbook.
91
+ *
92
+ * Returns ~2k token context instead of sending 60k raw conversation.
93
+ *
94
+ * @param transcriptPath - Path to the JSONL transcript file
95
+ * @param projectDir - Project directory path
96
+ * @returns Compact context, token estimate, and raw data
97
+ */
98
+ export declare function getCompactContextForSkill(transcriptPath: string, projectDir: string): Promise<CompactContextResult>;
99
+ /**
100
+ * Get compact context from already-parsed entries (avoids re-parsing).
101
+ *
102
+ * @param entries - Already parsed JSONL entries
103
+ * @param projectDir - Project directory path
104
+ * @returns Compact context, token estimate, and raw data
105
+ */
106
+ export declare function getCompactContextFromEntries(entries: ParsedEntry[], projectDir: string): Promise<CompactContextResult>;
107
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/handoff/generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAoBxD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gCAAgC;IAChC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,oCAAoC;IACpC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,kEAAkE;IAClE,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,kDAAkD;IAClD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,2CAA2C;IAC3C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB;AAgTD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,WAAW,EAAE,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC,CAwDtB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CA0E/D;AAED;;GAEG;AACH,wBAAsB,6BAA6B,CACjD,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CAqCxB;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,WAAW,EAAE,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CA0BxB;AAMD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAoG9D;AAwBD;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAC7C,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAkB/B;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,WAAW,EAAE,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAe/B"}