@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,603 @@
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 { promises as fs } from "fs";
8
+ import { join, basename } from "path";
9
+ import { parseJSONL } from "../session/parser.js";
10
+ import { ensureHandoffsDir, generateHandoffFilename } from "./catalog.js";
11
+ import { extractEmbeddedPlans, extractPlanTitle } from "../archive/plan-extractor.js";
12
+ /** Max number of recent user messages to include */
13
+ const MAX_RECENT_MESSAGES = 5;
14
+ /** Max number of recent user messages for skill context (more comprehensive) */
15
+ const MAX_SKILL_CONTEXT_MESSAGES = 10;
16
+ /** Max length for each message excerpt */
17
+ const MAX_MESSAGE_LENGTH = 300;
18
+ /** Max number of assistant highlights to extract */
19
+ const MAX_ASSISTANT_HIGHLIGHTS = 5;
20
+ /** Max length for each assistant highlight */
21
+ const MAX_HIGHLIGHT_LENGTH = 150;
22
+ /**
23
+ * Extract session title from entries
24
+ */
25
+ function extractTitle(entries, projectDir) {
26
+ // First, try to find a summary entry
27
+ const summaryEntry = entries.find((e) => e.type === "summary");
28
+ if (summaryEntry?.content.summary) {
29
+ return summaryEntry.content.summary;
30
+ }
31
+ // Fallback: first user message (truncated)
32
+ const firstUser = entries.find((e) => e.type === "user_message");
33
+ if (firstUser?.content.text) {
34
+ const text = firstUser.content.text.trim();
35
+ if (text.length <= 80) {
36
+ return text;
37
+ }
38
+ return text.substring(0, 77) + "...";
39
+ }
40
+ // Last resort: project name
41
+ return `Session in ${basename(projectDir)}`;
42
+ }
43
+ /**
44
+ * Extract files modified from Write/Edit tool calls
45
+ */
46
+ function extractFilesModified(entries) {
47
+ const files = new Set();
48
+ for (const entry of entries) {
49
+ if (entry.type === "tool_call") {
50
+ const toolName = entry.content.toolName;
51
+ const input = entry.content.toolInput;
52
+ if (toolName === "Write" || toolName === "Edit") {
53
+ const filePath = input?.file_path;
54
+ if (filePath) {
55
+ files.add(filePath);
56
+ }
57
+ }
58
+ }
59
+ }
60
+ return Array.from(files);
61
+ }
62
+ /**
63
+ * Extract unique tools used
64
+ */
65
+ function extractToolsUsed(entries) {
66
+ const tools = new Set();
67
+ for (const entry of entries) {
68
+ if (entry.type === "tool_call" && entry.content.toolName) {
69
+ tools.add(entry.content.toolName);
70
+ }
71
+ }
72
+ return Array.from(tools).sort();
73
+ }
74
+ /**
75
+ * Extract recent user messages (last N)
76
+ */
77
+ function extractRecentMessages(entries, count = MAX_RECENT_MESSAGES) {
78
+ const userMessages = entries
79
+ .filter((e) => e.type === "user_message" && e.content.text)
80
+ .map((e) => {
81
+ const text = e.content.text.trim();
82
+ if (text.length <= MAX_MESSAGE_LENGTH) {
83
+ return text;
84
+ }
85
+ return text.substring(0, MAX_MESSAGE_LENGTH - 3) + "...";
86
+ })
87
+ .filter((m) => m.length > 0);
88
+ // Return last N messages
89
+ return userMessages.slice(-count);
90
+ }
91
+ /**
92
+ * Extract key assistant response snippets (last N, excluding thinking/tools)
93
+ */
94
+ function extractAssistantHighlights(entries, count = MAX_ASSISTANT_HIGHLIGHTS) {
95
+ const highlights = entries
96
+ .filter((e) => e.type === "assistant_message" && e.content.text)
97
+ .map((e) => {
98
+ const text = e.content.text.trim();
99
+ if (text.length <= MAX_HIGHLIGHT_LENGTH) {
100
+ return text;
101
+ }
102
+ return text.substring(0, MAX_HIGHLIGHT_LENGTH - 3) + "...";
103
+ })
104
+ .filter((h) => h.length > 0);
105
+ // Return last N highlights
106
+ return highlights.slice(-count);
107
+ }
108
+ /** Decision detection patterns */
109
+ const DECISION_PATTERNS = [
110
+ /\b(?:yes|yeah|yep|sure),?\s+(?:do that|go with|use|let's)/i,
111
+ /\b(?:let's|lets)\s+(?:go with|use|do|try|stick with)/i,
112
+ /\b(?:use|go with|switch to|prefer)\s+\w+\s+instead/i,
113
+ /\b(?:sounds good|that works|perfect|great idea)/i,
114
+ /\b(?:i want|i prefer|i'd like|i would like)\s+(?:to|the)/i,
115
+ /\b(?:don't|do not|shouldn't|should not)\s+(?:use|add|include)/i,
116
+ /\b(?:keep|remove|delete|add|include)\s+(?:the|that|this)/i,
117
+ /\bapproved?\b/i,
118
+ /\b(?:option|choice|approach)\s+(?:\d|[a-c])\b/i,
119
+ ];
120
+ /**
121
+ * Extract user decision points from messages
122
+ */
123
+ function extractDecisionPoints(entries) {
124
+ const decisions = [];
125
+ const seen = new Set();
126
+ for (const entry of entries) {
127
+ if (entry.type !== "user_message" || !entry.content.text)
128
+ continue;
129
+ const text = entry.content.text.trim();
130
+ for (const pattern of DECISION_PATTERNS) {
131
+ if (pattern.test(text)) {
132
+ // Extract the relevant sentence/phrase (up to 150 chars)
133
+ const excerpt = text.length <= 150 ? text : text.substring(0, 147) + "...";
134
+ // Deduplicate similar decisions
135
+ const normalized = excerpt.toLowerCase().replace(/\s+/g, " ");
136
+ if (!seen.has(normalized)) {
137
+ seen.add(normalized);
138
+ decisions.push(excerpt);
139
+ }
140
+ break; // Only one decision per message
141
+ }
142
+ }
143
+ }
144
+ return decisions;
145
+ }
146
+ /** Blocker/error detection patterns */
147
+ const BLOCKER_PATTERNS = [
148
+ /\b(?:blocked|blocking|stuck)\b/i,
149
+ /\b(?:error|exception|failed|failure|failing)\b/i,
150
+ /\b(?:bug|issue|problem)\b/i,
151
+ /\b(?:doesn't work|doesn't compile|won't compile)\b/i,
152
+ /\b(?:can't|cannot|unable to)\s+(?:find|get|access|connect)/i,
153
+ /\b(?:missing|not found|undefined)\b/i,
154
+ /\b(?:timeout|timed out)\b/i,
155
+ /\b(?:permission denied|access denied)\b/i,
156
+ /\b(?:crash|crashed|crashing)\b/i,
157
+ ];
158
+ /**
159
+ * Extract blockers/errors from user and assistant messages
160
+ */
161
+ function extractBlockers(entries) {
162
+ const blockers = [];
163
+ const seen = new Set();
164
+ for (const entry of entries) {
165
+ if ((entry.type !== "user_message" && entry.type !== "assistant_message") ||
166
+ !entry.content.text) {
167
+ continue;
168
+ }
169
+ const text = entry.content.text.trim();
170
+ for (const pattern of BLOCKER_PATTERNS) {
171
+ if (pattern.test(text)) {
172
+ // Extract the relevant portion (up to 150 chars)
173
+ const excerpt = text.length <= 150 ? text : text.substring(0, 147) + "...";
174
+ // Deduplicate
175
+ const normalized = excerpt.toLowerCase().replace(/\s+/g, " ");
176
+ if (!seen.has(normalized)) {
177
+ seen.add(normalized);
178
+ blockers.push(excerpt);
179
+ }
180
+ break;
181
+ }
182
+ }
183
+ }
184
+ return blockers;
185
+ }
186
+ /** Technology detection patterns (same as manifest-extractor.ts) */
187
+ const TECH_PATTERNS = [
188
+ // Languages
189
+ { pattern: /typescript|\.tsx?$/i, tech: "typescript" },
190
+ { pattern: /javascript|\.jsx?$/i, tech: "javascript" },
191
+ { pattern: /python|\.py$/i, tech: "python" },
192
+ { pattern: /rust|\.rs$/i, tech: "rust" },
193
+ { pattern: /golang|\.go$/i, tech: "go" },
194
+ { pattern: /java(?!script)|\.java$/i, tech: "java" },
195
+ { pattern: /c\+\+|\.cpp$|\.cc$/i, tech: "cpp" },
196
+ { pattern: /c#|csharp|\.cs$/i, tech: "csharp" },
197
+ { pattern: /ruby|\.rb$/i, tech: "ruby" },
198
+ { pattern: /php|\.php$/i, tech: "php" },
199
+ { pattern: /swift|\.swift$/i, tech: "swift" },
200
+ { pattern: /kotlin|\.kt$/i, tech: "kotlin" },
201
+ // Frameworks
202
+ { pattern: /\breact\b/i, tech: "react" },
203
+ { pattern: /\bvue\b/i, tech: "vue" },
204
+ { pattern: /\bangular\b/i, tech: "angular" },
205
+ { pattern: /\bsvelte\b/i, tech: "svelte" },
206
+ { pattern: /\bnextjs?\b|next\.config/i, tech: "nextjs" },
207
+ { pattern: /\bnuxt\b/i, tech: "nuxt" },
208
+ { pattern: /\bexpress\b/i, tech: "express" },
209
+ { pattern: /\bfastapi\b/i, tech: "fastapi" },
210
+ { pattern: /\bdjango\b/i, tech: "django" },
211
+ { pattern: /\bflask\b/i, tech: "flask" },
212
+ { pattern: /\brails\b/i, tech: "rails" },
213
+ { pattern: /\bspring\b/i, tech: "spring" },
214
+ // Databases
215
+ { pattern: /\bpostgres|psql\b/i, tech: "postgres" },
216
+ { pattern: /\bmysql\b/i, tech: "mysql" },
217
+ { pattern: /\bmongodb?\b/i, tech: "mongodb" },
218
+ { pattern: /\bredis\b/i, tech: "redis" },
219
+ { pattern: /\bsqlite\b/i, tech: "sqlite" },
220
+ { pattern: /\bprisma\b/i, tech: "prisma" },
221
+ // Tools/Infrastructure
222
+ { pattern: /\bdocker\b/i, tech: "docker" },
223
+ { pattern: /\bkubernetes|k8s\b/i, tech: "kubernetes" },
224
+ { pattern: /\baws\b/i, tech: "aws" },
225
+ { pattern: /\bgcp\b|google cloud/i, tech: "gcp" },
226
+ { pattern: /\bazure\b/i, tech: "azure" },
227
+ { pattern: /\bgraphql\b/i, tech: "graphql" },
228
+ { pattern: /\brest\s*api\b/i, tech: "rest" },
229
+ { pattern: /\bwebsocket\b/i, tech: "websocket" },
230
+ { pattern: /\bjest\b/i, tech: "jest" },
231
+ { pattern: /\bpytest\b/i, tech: "pytest" },
232
+ { pattern: /\bink\b.*\breact\b|\breact\b.*\bink\b/i, tech: "ink" },
233
+ { pattern: /\btailwind\b/i, tech: "tailwind" },
234
+ // Build tools
235
+ { pattern: /\bwebpack\b/i, tech: "webpack" },
236
+ { pattern: /\bvite\b/i, tech: "vite" },
237
+ { pattern: /\besbuild\b/i, tech: "esbuild" },
238
+ { pattern: /\brollup\b/i, tech: "rollup" },
239
+ ];
240
+ /**
241
+ * Extract technologies from content and file paths
242
+ */
243
+ function extractTechnologies(entries, filesModified) {
244
+ const techs = new Set();
245
+ // Build combined text for pattern matching
246
+ const textParts = [];
247
+ for (const entry of entries) {
248
+ if (entry.content.text) {
249
+ textParts.push(entry.content.text);
250
+ }
251
+ }
252
+ // Add file paths
253
+ textParts.push(...filesModified);
254
+ const combinedText = textParts.join(" ");
255
+ // Check each pattern
256
+ for (const { pattern, tech } of TECH_PATTERNS) {
257
+ if (pattern.test(combinedText)) {
258
+ techs.add(tech);
259
+ }
260
+ }
261
+ return Array.from(techs).sort();
262
+ }
263
+ /**
264
+ * Extract session ID from parsed entries.
265
+ */
266
+ function extractSessionId(entries) {
267
+ // Try first entry
268
+ if (entries.length > 0 && entries[0].sessionId) {
269
+ return entries[0].sessionId;
270
+ }
271
+ // Fallback: generate timestamp-based ID (better than "handoff-temp")
272
+ return `handoff-${Date.now()}`;
273
+ }
274
+ /**
275
+ * Extract handoff data from parsed entries
276
+ */
277
+ export async function extractHandoffData(entries, projectDir) {
278
+ const userMessageCount = entries.filter((e) => e.type === "user_message").length;
279
+ const toolCallCount = entries.filter((e) => e.type === "tool_call").length;
280
+ // Extract session ID from entries
281
+ const sessionId = extractSessionId(entries);
282
+ // Extract embedded plans with real session ID
283
+ const embeddedPlans = await extractEmbeddedPlans(entries, projectDir, sessionId);
284
+ // Process plans with error handling for file reads
285
+ let plans;
286
+ if (embeddedPlans.length > 0) {
287
+ const planResults = await Promise.all(embeddedPlans.map(async (p) => {
288
+ try {
289
+ const content = await fs.readFile(p.path, "utf-8");
290
+ return {
291
+ path: p.path,
292
+ title: extractPlanTitle(content) || p.name,
293
+ };
294
+ }
295
+ catch {
296
+ // File doesn't exist or can't be read - use name as title
297
+ return {
298
+ path: p.path,
299
+ title: p.name,
300
+ };
301
+ }
302
+ }));
303
+ plans = planResults;
304
+ }
305
+ const filesModified = extractFilesModified(entries);
306
+ return {
307
+ title: extractTitle(entries, projectDir),
308
+ projectDir,
309
+ filesModified,
310
+ toolsUsed: extractToolsUsed(entries),
311
+ recentMessages: extractRecentMessages(entries),
312
+ timestamp: new Date().toISOString(),
313
+ totalUserMessages: userMessageCount,
314
+ totalToolCalls: toolCallCount,
315
+ plans,
316
+ assistantHighlights: extractAssistantHighlights(entries),
317
+ decisions: extractDecisionPoints(entries),
318
+ technologies: extractTechnologies(entries, filesModified),
319
+ blockers: extractBlockers(entries),
320
+ };
321
+ }
322
+ /**
323
+ * Format handoff data into markdown document
324
+ */
325
+ export function formatHandoffMarkdown(data) {
326
+ const lines = [];
327
+ // Header
328
+ lines.push("# Session Handoff");
329
+ lines.push("");
330
+ lines.push(`**Title:** ${data.title}`);
331
+ lines.push(`**Project:** ${data.projectDir}`);
332
+ lines.push(`**Generated:** ${data.timestamp}`);
333
+ lines.push(`**Messages:** ${data.totalUserMessages} | **Tool calls:** ${data.totalToolCalls}`);
334
+ lines.push("");
335
+ // Files Modified
336
+ lines.push("## Files Modified");
337
+ if (data.filesModified.length > 0) {
338
+ for (const file of data.filesModified) {
339
+ lines.push(`- ${file}`);
340
+ }
341
+ }
342
+ else {
343
+ lines.push("_No files were modified in this session._");
344
+ }
345
+ lines.push("");
346
+ // Tools Used
347
+ lines.push("## Tools Used");
348
+ if (data.toolsUsed.length > 0) {
349
+ lines.push(data.toolsUsed.join(", "));
350
+ }
351
+ else {
352
+ lines.push("_No tools were used in this session._");
353
+ }
354
+ lines.push("");
355
+ // Plan Context
356
+ if (data.plans && data.plans.length > 0) {
357
+ lines.push("## Plan Context");
358
+ if (data.plans.length === 1) {
359
+ lines.push(`This session is implementing: **${data.plans[0].title}**`);
360
+ lines.push(`Plan file: ${data.plans[0].path}`);
361
+ }
362
+ else {
363
+ lines.push(`This session is implementing ${data.plans.length} plans:`);
364
+ data.plans.forEach((plan, i) => {
365
+ lines.push(`${i + 1}. **${plan.title}**`);
366
+ lines.push(` File: ${plan.path}`);
367
+ });
368
+ }
369
+ lines.push("");
370
+ }
371
+ // Recent Context (last user messages)
372
+ lines.push("## Recent Context");
373
+ lines.push("");
374
+ if (data.recentMessages.length > 0) {
375
+ lines.push("Last user messages from the session:");
376
+ lines.push("");
377
+ for (let i = 0; i < data.recentMessages.length; i++) {
378
+ const num = data.recentMessages.length - data.recentMessages.length + i + 1;
379
+ lines.push(`${num}. ${data.recentMessages[i]}`);
380
+ }
381
+ }
382
+ else {
383
+ lines.push("_No user messages in this session._");
384
+ }
385
+ lines.push("");
386
+ // Instructions for continuing
387
+ lines.push("## How to Continue");
388
+ lines.push("");
389
+ lines.push("In a new Claude Code session, run `/jacques-continue` to load this handoff and resume work.");
390
+ lines.push("");
391
+ // Footer
392
+ lines.push("---");
393
+ lines.push("_Generated by Jacques Context Manager_");
394
+ return lines.join("\n");
395
+ }
396
+ /**
397
+ * Generate a handoff document from a transcript file
398
+ */
399
+ export async function generateHandoffFromTranscript(transcriptPath, projectDir) {
400
+ try {
401
+ // Parse the JSONL file
402
+ const entries = await parseJSONL(transcriptPath);
403
+ // Extract handoff data
404
+ const data = await extractHandoffData(entries, projectDir);
405
+ // Format as markdown
406
+ const content = formatHandoffMarkdown(data);
407
+ // Ensure handoffs directory exists
408
+ const handoffsDir = await ensureHandoffsDir(projectDir);
409
+ // Generate filename
410
+ const filename = generateHandoffFilename();
411
+ const filePath = join(handoffsDir, filename);
412
+ // Write the file
413
+ await fs.writeFile(filePath, content, "utf-8");
414
+ // Estimate tokens (~4.5 chars per token)
415
+ const tokenEstimate = Math.ceil(content.length / 4.5);
416
+ return {
417
+ filePath,
418
+ filename,
419
+ content,
420
+ tokenEstimate,
421
+ };
422
+ }
423
+ catch (error) {
424
+ // Re-throw with more context
425
+ const errMsg = error instanceof Error ? error.message : String(error);
426
+ throw new Error(`Failed to generate handoff from ${transcriptPath}: ${errMsg}`);
427
+ }
428
+ }
429
+ /**
430
+ * Generate handoff from already-parsed entries (avoids re-parsing)
431
+ */
432
+ export async function generateHandoffFromEntries(entries, projectDir) {
433
+ // Extract handoff data
434
+ const data = await extractHandoffData(entries, projectDir);
435
+ // Format as markdown
436
+ const content = formatHandoffMarkdown(data);
437
+ // Ensure handoffs directory exists
438
+ const handoffsDir = await ensureHandoffsDir(projectDir);
439
+ // Generate filename
440
+ const filename = generateHandoffFilename();
441
+ const filePath = join(handoffsDir, filename);
442
+ // Write the file
443
+ await fs.writeFile(filePath, content, "utf-8");
444
+ // Estimate tokens (~4.5 chars per token)
445
+ const tokenEstimate = Math.ceil(content.length / 4.5);
446
+ return {
447
+ filePath,
448
+ filename,
449
+ content,
450
+ tokenEstimate,
451
+ };
452
+ }
453
+ /**
454
+ * Format extracted handoff data as compact context for skill consumption.
455
+ * This creates a structured prompt that maps to the 8 sections the
456
+ * skill/orchestrator expects, but at ~2k tokens instead of 60k.
457
+ */
458
+ export function formatAsSkillContext(data) {
459
+ const lines = [];
460
+ lines.push("## Pre-Extracted Session Context");
461
+ lines.push("");
462
+ lines.push("Use this extracted data to generate the handoff. The data has been pre-processed from the full conversation.");
463
+ lines.push("");
464
+ // Project Info
465
+ lines.push("### Project Info");
466
+ lines.push(`- **Project:** ${data.projectDir}`);
467
+ lines.push(`- **Title:** ${data.title}`);
468
+ if (data.technologies.length > 0) {
469
+ lines.push(`- **Technologies:** ${data.technologies.join(", ")}`);
470
+ }
471
+ if (data.filesModified.length > 0) {
472
+ lines.push(`- **Files Modified:**`);
473
+ for (const file of data.filesModified.slice(0, 15)) {
474
+ lines.push(` - ${file}`);
475
+ }
476
+ if (data.filesModified.length > 15) {
477
+ lines.push(` - ... and ${data.filesModified.length - 15} more`);
478
+ }
479
+ }
480
+ if (data.toolsUsed.length > 0) {
481
+ lines.push(`- **Tools Used:** ${data.toolsUsed.join(", ")}`);
482
+ }
483
+ lines.push(`- **Total Messages:** ${data.totalUserMessages}`);
484
+ lines.push(`- **Total Tool Calls:** ${data.totalToolCalls}`);
485
+ lines.push("");
486
+ // Plan Context (if any)
487
+ if (data.plans && data.plans.length > 0) {
488
+ lines.push("### Plan Context");
489
+ for (const plan of data.plans) {
490
+ lines.push(`- **${plan.title}** (${plan.path})`);
491
+ }
492
+ lines.push("");
493
+ }
494
+ // User Messages (chronological, last 10)
495
+ lines.push("### User Messages (chronological, last 10)");
496
+ const messages = extractRecentMessages([], MAX_SKILL_CONTEXT_MESSAGES); // Will be empty, use data.recentMessages instead
497
+ // Use the data's recentMessages but with extended count
498
+ if (data.recentMessages.length > 0) {
499
+ data.recentMessages.forEach((m, i) => {
500
+ lines.push(`${i + 1}. ${m}`);
501
+ });
502
+ }
503
+ else {
504
+ lines.push("_(No user messages recorded)_");
505
+ }
506
+ lines.push("");
507
+ // Assistant Highlights
508
+ lines.push("### Assistant Highlights (key responses)");
509
+ if (data.assistantHighlights.length > 0) {
510
+ for (const highlight of data.assistantHighlights) {
511
+ lines.push(`- ${highlight}`);
512
+ }
513
+ }
514
+ else {
515
+ lines.push("_(No assistant highlights extracted)_");
516
+ }
517
+ lines.push("");
518
+ // Detected Decisions
519
+ lines.push("### Detected User Decisions");
520
+ if (data.decisions.length > 0) {
521
+ for (const decision of data.decisions) {
522
+ lines.push(`- ${decision}`);
523
+ }
524
+ }
525
+ else {
526
+ lines.push('_(Review user messages for decision patterns like "yes do that", "let\'s go with X")_');
527
+ }
528
+ lines.push("");
529
+ // Detected Blockers/Errors
530
+ lines.push("### Detected Blockers/Errors");
531
+ if (data.blockers.length > 0) {
532
+ for (const blocker of data.blockers) {
533
+ lines.push(`- ${blocker}`);
534
+ }
535
+ }
536
+ else {
537
+ lines.push("_(None detected - check assistant highlights for any issues)_");
538
+ }
539
+ lines.push("");
540
+ // Instructions
541
+ lines.push("---");
542
+ lines.push("Now follow the skill instructions to generate a ~1000 token handoff document from this context.");
543
+ return lines.join("\n");
544
+ }
545
+ /**
546
+ * Extract handoff data with extended user messages for skill context.
547
+ * Uses more messages (10 instead of 5) for better LLM comprehension.
548
+ */
549
+ async function extractHandoffDataForSkill(entries, projectDir) {
550
+ const baseData = await extractHandoffData(entries, projectDir);
551
+ // Override with extended message count for skill context
552
+ const extendedMessages = extractRecentMessages(entries, MAX_SKILL_CONTEXT_MESSAGES);
553
+ return {
554
+ ...baseData,
555
+ recentMessages: extendedMessages,
556
+ };
557
+ }
558
+ /**
559
+ * Get compact context for LLM skill consumption.
560
+ * This is the main export for external interfaces like Dbook.
561
+ *
562
+ * Returns ~2k token context instead of sending 60k raw conversation.
563
+ *
564
+ * @param transcriptPath - Path to the JSONL transcript file
565
+ * @param projectDir - Project directory path
566
+ * @returns Compact context, token estimate, and raw data
567
+ */
568
+ export async function getCompactContextForSkill(transcriptPath, projectDir) {
569
+ // Parse the JSONL file
570
+ const entries = await parseJSONL(transcriptPath);
571
+ // Extract handoff data with extended messages
572
+ const data = await extractHandoffDataForSkill(entries, projectDir);
573
+ // Format as compact context
574
+ const context = formatAsSkillContext(data);
575
+ // Estimate tokens (~4.5 chars per token)
576
+ const tokenEstimate = Math.ceil(context.length / 4.5);
577
+ return {
578
+ context,
579
+ tokenEstimate,
580
+ data,
581
+ };
582
+ }
583
+ /**
584
+ * Get compact context from already-parsed entries (avoids re-parsing).
585
+ *
586
+ * @param entries - Already parsed JSONL entries
587
+ * @param projectDir - Project directory path
588
+ * @returns Compact context, token estimate, and raw data
589
+ */
590
+ export async function getCompactContextFromEntries(entries, projectDir) {
591
+ // Extract handoff data with extended messages
592
+ const data = await extractHandoffDataForSkill(entries, projectDir);
593
+ // Format as compact context
594
+ const context = formatAsSkillContext(data);
595
+ // Estimate tokens (~4.5 chars per token)
596
+ const tokenEstimate = Math.ceil(context.length / 4.5);
597
+ return {
598
+ context,
599
+ tokenEstimate,
600
+ data,
601
+ };
602
+ }
603
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/handoff/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Handoff Module
3
+ *
4
+ * Session handoff generation and catalog management.
5
+ */
6
+ export type { HandoffEntry, HandoffCatalog } from "./types.js";
7
+ export { getHandoffsDir, ensureHandoffsDir, parseTimestampFromFilename, generateHandoffFilename, formatHandoffDate, estimateTokens, formatTokenEstimate, listHandoffs, getHandoffContent, hasHandoffs, getLatestHandoff, } from "./catalog.js";
8
+ export { HANDOFF_INVOCATION, getHandoffPrompt, getHandoffPromptDisplay, } from "./prompts.js";
9
+ export type { HandoffData, HandoffResult, CompactContextResult } from "./generator.js";
10
+ export { extractHandoffData, formatHandoffMarkdown, generateHandoffFromTranscript, generateHandoffFromEntries, formatAsSkillContext, getCompactContextForSkill, getCompactContextFromEntries, } from "./generator.js";
11
+ export type { LLMHandoffResult, LLMHandoffOptions, LLMStreamCallbacks } from "./llm-generator.js";
12
+ export { generateHandoffWithLLM, isSkillInstalled, getSkillPath, ClaudeCodeError, } from "./llm-generator.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handoff/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG/D,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,0BAA0B,EAC1B,uBAAuB,EACvB,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAGtB,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,6BAA6B,EAC7B,0BAA0B,EAC1B,oBAAoB,EACpB,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,EACZ,eAAe,GAChB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Handoff Module
3
+ *
4
+ * Session handoff generation and catalog management.
5
+ */
6
+ // Catalog operations
7
+ export { getHandoffsDir, ensureHandoffsDir, parseTimestampFromFilename, generateHandoffFilename, formatHandoffDate, estimateTokens, formatTokenEstimate, listHandoffs, getHandoffContent, hasHandoffs, getLatestHandoff, } from "./catalog.js";
8
+ // Prompts
9
+ export { HANDOFF_INVOCATION, getHandoffPrompt, getHandoffPromptDisplay, } from "./prompts.js";
10
+ export { extractHandoffData, formatHandoffMarkdown, generateHandoffFromTranscript, generateHandoffFromEntries, formatAsSkillContext, getCompactContextForSkill, getCompactContextFromEntries, } from "./generator.js";
11
+ export { generateHandoffWithLLM, isSkillInstalled, getSkillPath, ClaudeCodeError, } from "./llm-generator.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handoff/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,qBAAqB;AACrB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,0BAA0B,EAC1B,uBAAuB,EACvB,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,UAAU;AACV,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAItB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,6BAA6B,EAC7B,0BAA0B,EAC1B,oBAAoB,EACpB,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,EACZ,eAAe,GAChB,MAAM,oBAAoB,CAAC"}