@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,435 @@
1
+ /**
2
+ * Task Extractor
3
+ *
4
+ * Extracts task signals from parsed JSONL entries.
5
+ * Handles:
6
+ * - TaskCreate, TaskUpdate, TaskList tool calls
7
+ * - TodoWrite tool calls (legacy)
8
+ * - agent_progress entries (subagent work)
9
+ * - bash_progress entries (command execution)
10
+ * - File heuristics (fallback)
11
+ */
12
+ /**
13
+ * Extract task signals from parsed JSONL entries.
14
+ *
15
+ * Handles multiple signal sources:
16
+ * 1. TaskCreate/TaskUpdate (current) - Build task state map, emit final states
17
+ * 2. TaskList (current) - Parse task list snapshots for state
18
+ * 3. TodoWrite (legacy) - Extract todos[] array
19
+ * 4. agent_progress - Subagent completion signals
20
+ * 5. bash_progress - Command execution with test/build keywords
21
+ * 6. File heuristic (fallback) - Write/Edit file paths as completed signals
22
+ */
23
+ export function extractTaskSignals(entries, sessionId) {
24
+ const signals = [];
25
+ // Track TaskCreate/TaskUpdate state
26
+ const taskStates = new Map();
27
+ let hasTaskToolCalls = false;
28
+ for (const entry of entries) {
29
+ // Handle agent_progress entries
30
+ if (entry.type === "agent_progress") {
31
+ const agentSignal = extractAgentProgressSignal(entry, sessionId);
32
+ if (agentSignal) {
33
+ signals.push(agentSignal);
34
+ }
35
+ continue;
36
+ }
37
+ // Handle bash_progress entries (test runs, builds)
38
+ if (entry.type === "bash_progress") {
39
+ const bashSignal = extractBashProgressSignal(entry, sessionId);
40
+ if (bashSignal) {
41
+ signals.push(bashSignal);
42
+ }
43
+ continue;
44
+ }
45
+ // Only process tool_call entries from here
46
+ if (entry.type !== "tool_call") {
47
+ continue;
48
+ }
49
+ const toolName = entry.content.toolName;
50
+ const toolInput = entry.content.toolInput;
51
+ if (!toolName) {
52
+ continue;
53
+ }
54
+ // Handle TaskCreate
55
+ if (toolName === "TaskCreate" && toolInput) {
56
+ hasTaskToolCalls = true;
57
+ const taskId = extractTaskIdFromResponse(entry, entries);
58
+ const subject = toolInput.subject || "";
59
+ const description = toolInput.description;
60
+ if (taskId && subject) {
61
+ taskStates.set(taskId, {
62
+ id: taskId,
63
+ subject,
64
+ description,
65
+ status: "pending",
66
+ timestamp: entry.timestamp,
67
+ });
68
+ }
69
+ }
70
+ // Handle TaskUpdate
71
+ if (toolName === "TaskUpdate" && toolInput) {
72
+ hasTaskToolCalls = true;
73
+ const taskId = toolInput.taskId;
74
+ const status = toolInput.status;
75
+ const subject = toolInput.subject;
76
+ if (taskId) {
77
+ const existing = taskStates.get(taskId);
78
+ const newStatus = mapTaskStatus(status);
79
+ if (existing) {
80
+ taskStates.set(taskId, {
81
+ ...existing,
82
+ subject: subject || existing.subject,
83
+ status: newStatus && newStatus !== "unknown" ? newStatus : existing.status,
84
+ timestamp: entry.timestamp,
85
+ });
86
+ }
87
+ else {
88
+ // TaskUpdate without prior TaskCreate (possible if task was created in another session)
89
+ taskStates.set(taskId, {
90
+ id: taskId,
91
+ subject: subject || `Task ${taskId}`,
92
+ status: newStatus && newStatus !== "unknown" ? newStatus : "pending",
93
+ timestamp: entry.timestamp,
94
+ });
95
+ }
96
+ }
97
+ }
98
+ // Handle TaskList - parse result for task state snapshot
99
+ if (toolName === "TaskList") {
100
+ hasTaskToolCalls = true;
101
+ const taskListSignals = extractTaskListSignals(entry, entries, sessionId);
102
+ signals.push(...taskListSignals);
103
+ }
104
+ // Handle TodoWrite (legacy)
105
+ if (toolName === "TodoWrite" && toolInput) {
106
+ hasTaskToolCalls = true;
107
+ const todos = toolInput.todos;
108
+ if (todos && Array.isArray(todos)) {
109
+ for (const todo of todos) {
110
+ const content = todo.content || "";
111
+ const status = mapTaskStatus(todo.status);
112
+ if (content) {
113
+ signals.push({
114
+ source: "todo_write",
115
+ text: content,
116
+ status: status || "pending",
117
+ timestamp: entry.timestamp,
118
+ taskId: todo.id,
119
+ sessionId,
120
+ });
121
+ }
122
+ }
123
+ }
124
+ }
125
+ }
126
+ // Convert TaskCreate/TaskUpdate states to signals
127
+ for (const state of taskStates.values()) {
128
+ signals.push({
129
+ source: state.status === "pending" ? "task_create" : "task_update",
130
+ text: state.subject,
131
+ status: state.status,
132
+ timestamp: state.timestamp,
133
+ taskId: state.id,
134
+ sessionId,
135
+ });
136
+ }
137
+ // File heuristics: Only if no task tool calls were found
138
+ if (!hasTaskToolCalls) {
139
+ const fileSignals = extractFileHeuristics(entries, sessionId);
140
+ signals.push(...fileSignals);
141
+ }
142
+ return signals;
143
+ }
144
+ /**
145
+ * Map status strings to our status type.
146
+ */
147
+ function mapTaskStatus(status) {
148
+ if (!status)
149
+ return undefined;
150
+ const normalized = status.toLowerCase();
151
+ if (normalized === "completed" || normalized === "done") {
152
+ return "completed";
153
+ }
154
+ if (normalized === "in_progress" || normalized === "in-progress") {
155
+ return "in_progress";
156
+ }
157
+ if (normalized === "pending" || normalized === "todo") {
158
+ return "pending";
159
+ }
160
+ return "unknown";
161
+ }
162
+ /**
163
+ * Extract signals from TaskList tool result.
164
+ * TaskList returns a snapshot of all task states in format:
165
+ * "#1 [completed] Subject text"
166
+ * "#2 [in_progress] Another task"
167
+ */
168
+ function extractTaskListSignals(taskListEntry, allEntries, sessionId) {
169
+ const signals = [];
170
+ // Find the tool result following this TaskList call
171
+ const resultContent = findToolResultContent(taskListEntry, allEntries);
172
+ if (!resultContent) {
173
+ return signals;
174
+ }
175
+ // Parse TaskList output: "#N [status] Subject"
176
+ const taskPattern = /#(\d+)\s+\[(\w+)\]\s+(.+)/g;
177
+ let match;
178
+ while ((match = taskPattern.exec(resultContent)) !== null) {
179
+ const taskId = match[1];
180
+ const statusStr = match[2];
181
+ const subject = match[3].trim();
182
+ const status = mapTaskStatus(statusStr) || "unknown";
183
+ signals.push({
184
+ source: "task_list",
185
+ text: subject,
186
+ status,
187
+ timestamp: taskListEntry.timestamp,
188
+ taskId,
189
+ sessionId,
190
+ });
191
+ }
192
+ return signals;
193
+ }
194
+ /**
195
+ * Find the tool result content following a tool call.
196
+ * Looks in subsequent user_message entries for the result.
197
+ */
198
+ function findToolResultContent(toolCallEntry, allEntries) {
199
+ const callIndex = allEntries.indexOf(toolCallEntry);
200
+ if (callIndex === -1)
201
+ return undefined;
202
+ const toolUseId = toolCallEntry.content.toolUseId;
203
+ // Look for the result in subsequent entries (within a reasonable window)
204
+ for (let i = callIndex + 1; i < Math.min(callIndex + 10, allEntries.length); i++) {
205
+ const entry = allEntries[i];
206
+ // user_message entries can contain tool results
207
+ if (entry.type === "user_message") {
208
+ // Check for structured toolUseResult
209
+ const toolUseResult = entry.content.toolUseResult;
210
+ if (toolUseResult) {
211
+ // Try to get text from the result
212
+ if (typeof toolUseResult.content === "string") {
213
+ return toolUseResult.content;
214
+ }
215
+ if (typeof toolUseResult.text === "string") {
216
+ return toolUseResult.text;
217
+ }
218
+ }
219
+ // Check for text content that might be the result
220
+ const text = entry.content.text;
221
+ if (text && toolUseId) {
222
+ // If text contains task list format, return it
223
+ if (/#\d+\s+\[\w+\]/.test(text)) {
224
+ return text;
225
+ }
226
+ }
227
+ }
228
+ // tool_result entries directly contain the result
229
+ if (entry.type === "tool_result") {
230
+ const content = entry.content.toolResultContent;
231
+ if (content && typeof content === "string") {
232
+ return content;
233
+ }
234
+ }
235
+ }
236
+ return undefined;
237
+ }
238
+ /**
239
+ * Extract signal from agent_progress entry (subagent work).
240
+ * Only generates signal for completed agent work.
241
+ */
242
+ function extractAgentProgressSignal(entry, sessionId) {
243
+ const content = entry.content;
244
+ // Only count completed agent messages (assistant type indicates agent responded)
245
+ if (content.agentMessageType !== "assistant") {
246
+ return null;
247
+ }
248
+ // Use agent description or first ~100 chars of prompt as signal text
249
+ let text = content.agentDescription || "";
250
+ if (!text && content.agentPrompt) {
251
+ text = content.agentPrompt.slice(0, 100);
252
+ if (content.agentPrompt.length > 100) {
253
+ text += "...";
254
+ }
255
+ }
256
+ if (!text) {
257
+ return null;
258
+ }
259
+ // Include agent type in text for better matching
260
+ if (content.agentType && content.agentType !== "unknown") {
261
+ text = `[${content.agentType}] ${text}`;
262
+ }
263
+ return {
264
+ source: "agent_progress",
265
+ text,
266
+ status: "completed",
267
+ timestamp: entry.timestamp,
268
+ sessionId,
269
+ };
270
+ }
271
+ /**
272
+ * Extract signal from bash_progress entry.
273
+ * Only generates signals for completed commands with relevant keywords.
274
+ */
275
+ function extractBashProgressSignal(entry, sessionId) {
276
+ const content = entry.content;
277
+ // Need full output to analyze
278
+ const output = content.bashFullOutput || content.bashOutput || "";
279
+ if (!output) {
280
+ return null;
281
+ }
282
+ // Look for test/build related keywords in output
283
+ const testKeywords = ["test", "spec", "passed", "failed", "PASS", "FAIL", "error", "success"];
284
+ const buildKeywords = ["build", "compile", "bundle", "webpack", "vite", "tsc"];
285
+ const deployKeywords = ["deploy", "publish", "release"];
286
+ const outputLower = output.toLowerCase();
287
+ let signalType = null;
288
+ let status = "completed";
289
+ // Check for test runs
290
+ if (testKeywords.some(kw => outputLower.includes(kw.toLowerCase()))) {
291
+ signalType = "test";
292
+ // Check for failures
293
+ if (/fail|error/i.test(output) && !/0 fail|0 error/i.test(output)) {
294
+ status = "in_progress"; // Tests failed, work not complete
295
+ }
296
+ }
297
+ // Check for builds
298
+ else if (buildKeywords.some(kw => outputLower.includes(kw.toLowerCase()))) {
299
+ signalType = "build";
300
+ if (/error|fail/i.test(output) && !/0 error|0 fail/i.test(output)) {
301
+ status = "in_progress";
302
+ }
303
+ }
304
+ // Check for deployments
305
+ else if (deployKeywords.some(kw => outputLower.includes(kw.toLowerCase()))) {
306
+ signalType = "deploy";
307
+ }
308
+ if (!signalType) {
309
+ return null;
310
+ }
311
+ // Create a descriptive text
312
+ const elapsed = content.bashElapsedSeconds;
313
+ const elapsedStr = elapsed ? ` (${elapsed.toFixed(1)}s)` : "";
314
+ const text = `Ran ${signalType}${elapsedStr}`;
315
+ return {
316
+ source: "bash_progress",
317
+ text,
318
+ status,
319
+ timestamp: entry.timestamp,
320
+ sessionId,
321
+ };
322
+ }
323
+ /**
324
+ * Try to extract task ID from the tool result following a TaskCreate call.
325
+ * Prioritizes structured toolUseResult data over text parsing.
326
+ */
327
+ function extractTaskIdFromResponse(createEntry, allEntries) {
328
+ const createIndex = allEntries.indexOf(createEntry);
329
+ if (createIndex === -1)
330
+ return undefined;
331
+ const toolUseId = createEntry.content.toolUseId;
332
+ // Look for the next user entry which should contain the tool result
333
+ for (let i = createIndex + 1; i < Math.min(createIndex + 5, allEntries.length); i++) {
334
+ const entry = allEntries[i];
335
+ if (entry.type === "user_message") {
336
+ // Priority 1: Check for toolUseResult.task.id (structured data - most reliable)
337
+ const toolResult = entry.content.toolUseResult;
338
+ if (toolResult?.task?.id) {
339
+ return toolResult.task.id;
340
+ }
341
+ // Priority 2: Check for toolUseResult.taskId directly
342
+ if (toolResult?.taskId) {
343
+ return toolResult.taskId;
344
+ }
345
+ // Priority 3: Check for nested result structure
346
+ if (toolResult && typeof toolResult === "object") {
347
+ // Sometimes the result has a different structure
348
+ const result = toolResult;
349
+ if (result.id && typeof result.id === "string") {
350
+ return result.id;
351
+ }
352
+ }
353
+ // Priority 4: Fallback to text parsing
354
+ const text = entry.content.text;
355
+ if (text) {
356
+ // Match various patterns: "Task #1 created", "Created task 1", etc.
357
+ const patterns = [
358
+ /Task #(\d+)/i,
359
+ /task\s+(\d+)/i,
360
+ /created.*#(\d+)/i,
361
+ /id[:\s]+(\d+)/i,
362
+ ];
363
+ for (const pattern of patterns) {
364
+ const match = text.match(pattern);
365
+ if (match) {
366
+ return match[1];
367
+ }
368
+ }
369
+ }
370
+ }
371
+ }
372
+ // Fallback: use a generated ID based on position
373
+ return `auto-${createIndex}`;
374
+ }
375
+ /**
376
+ * Extract file modification signals from Write/Edit tool calls.
377
+ * Used as a fallback when no task tools are present.
378
+ */
379
+ function extractFileHeuristics(entries, sessionId) {
380
+ const signals = [];
381
+ const seenFiles = new Set();
382
+ for (const entry of entries) {
383
+ if (entry.type !== "tool_call") {
384
+ continue;
385
+ }
386
+ const toolName = entry.content.toolName;
387
+ const toolInput = entry.content.toolInput;
388
+ if (!toolInput) {
389
+ continue;
390
+ }
391
+ let filePath;
392
+ if (toolName === "Write") {
393
+ filePath = toolInput.file_path;
394
+ }
395
+ else if (toolName === "Edit") {
396
+ filePath = toolInput.file_path;
397
+ }
398
+ if (filePath && !seenFiles.has(filePath)) {
399
+ seenFiles.add(filePath);
400
+ // Extract filename for the signal text
401
+ const filename = filePath.split(/[/\\]/).pop() || filePath;
402
+ signals.push({
403
+ source: "file_heuristic",
404
+ text: `Modified ${filename}`,
405
+ status: "completed",
406
+ timestamp: entry.timestamp,
407
+ filePath,
408
+ sessionId,
409
+ });
410
+ }
411
+ }
412
+ return signals;
413
+ }
414
+ /**
415
+ * Get all unique file paths modified in the session.
416
+ */
417
+ export function getModifiedFiles(entries) {
418
+ const files = new Set();
419
+ for (const entry of entries) {
420
+ if (entry.type !== "tool_call")
421
+ continue;
422
+ const toolName = entry.content.toolName;
423
+ const toolInput = entry.content.toolInput;
424
+ if (!toolInput)
425
+ continue;
426
+ if (toolName === "Write" || toolName === "Edit") {
427
+ const filePath = toolInput.file_path;
428
+ if (filePath) {
429
+ files.add(filePath);
430
+ }
431
+ }
432
+ }
433
+ return Array.from(files);
434
+ }
435
+ //# sourceMappingURL=task-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-extractor.js","sourceRoot":"","sources":["../../src/plan/task-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Plan Progress Types
3
+ *
4
+ * Type definitions for tracking plan completion status by matching
5
+ * task signals from JSONL transcripts to plan markdown items.
6
+ */
7
+ /**
8
+ * A single item parsed from plan markdown.
9
+ * Represents trackable items like headings, numbered lists, bullets, and checkboxes.
10
+ */
11
+ export interface PlanItem {
12
+ /** Unique ID within the plan, e.g. "item-3-2" */
13
+ id: string;
14
+ /** Raw text, stripped of markdown syntax */
15
+ text: string;
16
+ /** Depth level: 0=h1, 1=h2, 2=h3, 3+=list items */
17
+ depth: number;
18
+ /** Item type */
19
+ type: "heading" | "numbered" | "bullet" | "checkbox";
20
+ /** 1-indexed line number in the source markdown */
21
+ lineNumber: number;
22
+ /** Parent item ID, null for top-level items */
23
+ parentId: string | null;
24
+ /** Child item IDs */
25
+ childIds: string[];
26
+ /** For checkbox items, whether it's checked in the source: - [x] */
27
+ isCheckedInSource: boolean;
28
+ }
29
+ /**
30
+ * Parsed plan structure with metadata.
31
+ */
32
+ export interface ParsedPlan {
33
+ /** All items in document order */
34
+ items: PlanItem[];
35
+ /** Count of trackable items (excludes pure structural headings) */
36
+ trackableCount: number;
37
+ /** Map of line number to item for fast lookup */
38
+ lineToItem: Map<number, PlanItem>;
39
+ }
40
+ /**
41
+ * A task signal extracted from session JSONL.
42
+ * Represents evidence of work on a task.
43
+ */
44
+ export interface TaskSignal {
45
+ /** How this signal was detected */
46
+ source: "todo_write" | "task_create" | "task_update" | "task_list" | "agent_progress" | "bash_progress" | "file_heuristic";
47
+ /** Task description text */
48
+ text: string;
49
+ /** Task status */
50
+ status: "pending" | "in_progress" | "completed" | "unknown";
51
+ /** ISO timestamp when this signal was recorded */
52
+ timestamp: string;
53
+ /** Task ID from TaskCreate/TaskUpdate tool calls */
54
+ taskId?: string;
55
+ /** File path for file_heuristic signals */
56
+ filePath?: string;
57
+ /** Session ID where this signal was found */
58
+ sessionId: string;
59
+ }
60
+ /**
61
+ * A match between a task signal and a plan item.
62
+ */
63
+ export interface PlanItemMatch {
64
+ /** ID of the plan item that was matched */
65
+ planItemId: string;
66
+ /** The signal that matched */
67
+ signal: TaskSignal;
68
+ /** Confidence score 0-1 */
69
+ confidence: number;
70
+ /** How the match was determined */
71
+ matchMethod: "exact_text" | "keyword_overlap" | "file_path" | "substring";
72
+ }
73
+ /**
74
+ * Status of a plan item based on matched signals.
75
+ */
76
+ export type PlanItemStatus = "not_started" | "in_progress" | "completed";
77
+ /**
78
+ * Progress status for a single plan item.
79
+ */
80
+ export interface PlanItemProgress {
81
+ /** Plan item ID */
82
+ planItemId: string;
83
+ /** Computed status */
84
+ status: PlanItemStatus;
85
+ /** Best matching signal, if any */
86
+ bestMatch: PlanItemMatch | null;
87
+ }
88
+ /**
89
+ * Summary of plan progress.
90
+ */
91
+ export interface PlanProgressSummary {
92
+ /** Total trackable items */
93
+ total: number;
94
+ /** Items with completed status */
95
+ completed: number;
96
+ /** Items with in_progress status */
97
+ inProgress: number;
98
+ /** Items with not_started status */
99
+ notStarted: number;
100
+ /** Completion percentage (0-100) */
101
+ percentage: number;
102
+ }
103
+ /**
104
+ * Full progress data for a plan.
105
+ */
106
+ export interface PlanProgress {
107
+ /** Plan ID (matches PlanEntry.id) */
108
+ planId: string;
109
+ /** ISO timestamp when progress was computed */
110
+ computedAt: string;
111
+ /** Per-item progress status */
112
+ items: PlanItemProgress[];
113
+ /** Summary statistics */
114
+ summary: PlanProgressSummary;
115
+ /** Session IDs that contributed signals */
116
+ sessionIds: string[];
117
+ /** Cache key for invalidation (hash of plan content + session mtimes) */
118
+ cacheKey: string;
119
+ }
120
+ /**
121
+ * Lightweight progress summary for list views.
122
+ */
123
+ export interface PlanProgressListItem {
124
+ /** Plan ID */
125
+ planId: string;
126
+ /** Completion percentage */
127
+ percentage: number;
128
+ /** Whether progress is still being computed */
129
+ loading: boolean;
130
+ }
131
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plan/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Plan Progress Types
3
+ *
4
+ * Type definitions for tracking plan completion status by matching
5
+ * task signals from JSONL transcripts to plan markdown items.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plan/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Project Aggregator
3
+ *
4
+ * Aggregates data from multiple sources to build project statistics
5
+ * and session lists for the dashboard.
6
+ *
7
+ * Sources:
8
+ * - Live sessions (from WebSocket/Session registry)
9
+ * - Saved sessions (.jacques/index.json)
10
+ * - Archived sessions (~/.jacques/archive/manifests/)
11
+ * - Handoffs (.jacques/handoffs/)
12
+ * - Plans (.jacques/index.json plans array)
13
+ */
14
+ import type { Session } from "../types.js";
15
+ import type { PlanEntry } from "../context/types.js";
16
+ import type { ProjectStatistics, ProjectSessionItem } from "./types.js";
17
+ /**
18
+ * Aggregate statistics for a project
19
+ *
20
+ * @param projectPath - Full path to the project directory
21
+ * @param liveSessions - Currently active sessions from the server
22
+ */
23
+ export declare function aggregateProjectStatistics(projectPath: string, liveSessions: Session[]): Promise<ProjectStatistics>;
24
+ /**
25
+ * Build a unified list of sessions for display
26
+ *
27
+ * Combines live, saved, and archived sessions, sorted by date (newest first).
28
+ * Deduplicates sessions that appear in multiple sources.
29
+ *
30
+ * @param projectPath - Full path to the project directory
31
+ * @param liveSessions - Currently active sessions from the server
32
+ * @param focusedSessionId - ID of the currently focused session
33
+ */
34
+ export declare function buildProjectSessionList(projectPath: string, liveSessions: Session[], focusedSessionId: string | null): Promise<ProjectSessionItem[]>;
35
+ /**
36
+ * Get plans for a project
37
+ */
38
+ export declare function getProjectPlans(projectPath: string): Promise<PlanEntry[]>;
39
+ /**
40
+ * Read the content of a local plan file from .jacques/
41
+ */
42
+ export declare function readLocalPlanContent(projectPath: string, plan: PlanEntry): Promise<string | null>;
43
+ //# sourceMappingURL=aggregator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregator.d.ts","sourceRoot":"","sources":["../../src/project/aggregator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAgB,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA6BxE;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,OAAO,EAAE,GACtB,OAAO,CAAC,iBAAiB,CAAC,CA2E5B;AAED;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,OAAO,EAAE,EACvB,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAC9B,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA6E/B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,EAAE,CAAC,CAWtB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxB"}