opentasks 0.0.5 → 0.0.7

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 (406) hide show
  1. package/README.md +108 -0
  2. package/dist/cli.d.ts +1 -0
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +217 -8
  5. package/dist/cli.js.map +1 -1
  6. package/dist/client/client.d.ts +47 -1
  7. package/dist/client/client.d.ts.map +1 -1
  8. package/dist/client/client.js +71 -0
  9. package/dist/client/client.js.map +1 -1
  10. package/dist/client/index.d.ts +1 -1
  11. package/dist/client/index.d.ts.map +1 -1
  12. package/dist/config/schema.d.ts +232 -4
  13. package/dist/config/schema.d.ts.map +1 -1
  14. package/dist/config/schema.js +161 -7
  15. package/dist/config/schema.js.map +1 -1
  16. package/dist/context-files/context-files.d.ts +72 -0
  17. package/dist/context-files/context-files.d.ts.map +1 -0
  18. package/dist/context-files/context-files.js +145 -0
  19. package/dist/context-files/context-files.js.map +1 -0
  20. package/dist/context-files/index.d.ts +16 -0
  21. package/dist/context-files/index.d.ts.map +1 -0
  22. package/dist/context-files/index.js +14 -0
  23. package/dist/context-files/index.js.map +1 -0
  24. package/dist/context-files/resolver.d.ts +43 -0
  25. package/dist/context-files/resolver.d.ts.map +1 -0
  26. package/dist/context-files/resolver.js +127 -0
  27. package/dist/context-files/resolver.js.map +1 -0
  28. package/dist/context-files/types.d.ts +94 -0
  29. package/dist/context-files/types.d.ts.map +1 -0
  30. package/dist/context-files/types.js +10 -0
  31. package/dist/context-files/types.js.map +1 -0
  32. package/dist/context-files/watcher-integration.d.ts +47 -0
  33. package/dist/context-files/watcher-integration.d.ts.map +1 -0
  34. package/dist/context-files/watcher-integration.js +47 -0
  35. package/dist/context-files/watcher-integration.js.map +1 -0
  36. package/dist/core/merge-driver.d.ts +11 -2
  37. package/dist/core/merge-driver.d.ts.map +1 -1
  38. package/dist/core/merge-driver.js +46 -7
  39. package/dist/core/merge-driver.js.map +1 -1
  40. package/dist/core/worktree.js +1 -1
  41. package/dist/core/worktree.js.map +1 -1
  42. package/dist/daemon/index.d.ts +6 -4
  43. package/dist/daemon/index.d.ts.map +1 -1
  44. package/dist/daemon/index.js +3 -2
  45. package/dist/daemon/index.js.map +1 -1
  46. package/dist/daemon/ipc.d.ts.map +1 -1
  47. package/dist/daemon/ipc.js +12 -2
  48. package/dist/daemon/ipc.js.map +1 -1
  49. package/dist/daemon/lifecycle.d.ts.map +1 -1
  50. package/dist/daemon/lifecycle.js +143 -25
  51. package/dist/daemon/lifecycle.js.map +1 -1
  52. package/dist/daemon/location-state.d.ts +12 -6
  53. package/dist/daemon/location-state.d.ts.map +1 -1
  54. package/dist/daemon/location-state.js +50 -20
  55. package/dist/daemon/location-state.js.map +1 -1
  56. package/dist/daemon/methods/context-files.d.ts +14 -0
  57. package/dist/daemon/methods/context-files.d.ts.map +1 -0
  58. package/dist/daemon/methods/context-files.js +95 -0
  59. package/dist/daemon/methods/context-files.js.map +1 -0
  60. package/dist/daemon/methods/provider.d.ts.map +1 -1
  61. package/dist/daemon/methods/provider.js +15 -0
  62. package/dist/daemon/methods/provider.js.map +1 -1
  63. package/dist/daemon/methods/tools.d.ts +1 -1
  64. package/dist/daemon/methods/tools.d.ts.map +1 -1
  65. package/dist/daemon/methods/tools.js +3 -2
  66. package/dist/daemon/methods/tools.js.map +1 -1
  67. package/dist/daemon/sessionlog-linker.d.ts +71 -0
  68. package/dist/daemon/sessionlog-linker.d.ts.map +1 -0
  69. package/dist/daemon/sessionlog-linker.js +472 -0
  70. package/dist/daemon/sessionlog-linker.js.map +1 -0
  71. package/dist/daemon/sessionlog-watcher.d.ts +79 -0
  72. package/dist/daemon/sessionlog-watcher.d.ts.map +1 -0
  73. package/dist/daemon/sessionlog-watcher.js +289 -0
  74. package/dist/daemon/sessionlog-watcher.js.map +1 -0
  75. package/dist/graph/git-graph-syncer.js +1 -1
  76. package/dist/graph/git-graph-syncer.js.map +1 -1
  77. package/dist/graph/index.d.ts +1 -1
  78. package/dist/graph/index.d.ts.map +1 -1
  79. package/dist/graph/index.js.map +1 -1
  80. package/dist/graph/provider-store.d.ts +78 -4
  81. package/dist/graph/provider-store.d.ts.map +1 -1
  82. package/dist/graph/provider-store.js +579 -55
  83. package/dist/graph/provider-store.js.map +1 -1
  84. package/dist/graph/store.d.ts.map +1 -1
  85. package/dist/graph/store.js +3 -0
  86. package/dist/graph/store.js.map +1 -1
  87. package/dist/graph/types.d.ts +16 -0
  88. package/dist/graph/types.d.ts.map +1 -1
  89. package/dist/graph/types.js.map +1 -1
  90. package/dist/index.d.ts +4 -2
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +9 -3
  93. package/dist/index.js.map +1 -1
  94. package/dist/materialization/git-archive-store.js +2 -2
  95. package/dist/materialization/git-archive-store.js.map +1 -1
  96. package/dist/materialization/git-remote-store.js +2 -2
  97. package/dist/materialization/git-remote-store.js.map +1 -1
  98. package/dist/materialization/snapshot.js +4 -4
  99. package/dist/materialization/snapshot.js.map +1 -1
  100. package/dist/mcp/index.d.ts +8 -0
  101. package/dist/mcp/index.d.ts.map +1 -0
  102. package/dist/mcp/index.js +8 -0
  103. package/dist/mcp/index.js.map +1 -0
  104. package/dist/mcp/server.d.ts +39 -0
  105. package/dist/mcp/server.d.ts.map +1 -0
  106. package/dist/mcp/server.js +677 -0
  107. package/dist/mcp/server.js.map +1 -0
  108. package/dist/mcp/stdio.d.ts +14 -0
  109. package/dist/mcp/stdio.d.ts.map +1 -0
  110. package/dist/mcp/stdio.js +19 -0
  111. package/dist/mcp/stdio.js.map +1 -0
  112. package/dist/providers/beads.d.ts.map +1 -1
  113. package/dist/providers/beads.js +17 -1
  114. package/dist/providers/beads.js.map +1 -1
  115. package/dist/providers/claude-tasks-fs.d.ts +22 -0
  116. package/dist/providers/claude-tasks-fs.d.ts.map +1 -0
  117. package/dist/providers/claude-tasks-fs.js +158 -0
  118. package/dist/providers/claude-tasks-fs.js.map +1 -0
  119. package/dist/providers/claude-tasks.d.ts +13 -4
  120. package/dist/providers/claude-tasks.d.ts.map +1 -1
  121. package/dist/providers/claude-tasks.js +318 -5
  122. package/dist/providers/claude-tasks.js.map +1 -1
  123. package/dist/providers/from-config.d.ts +3 -0
  124. package/dist/providers/from-config.d.ts.map +1 -1
  125. package/dist/providers/from-config.js +64 -17
  126. package/dist/providers/from-config.js.map +1 -1
  127. package/dist/providers/global.d.ts.map +1 -1
  128. package/dist/providers/global.js +5 -0
  129. package/dist/providers/global.js.map +1 -1
  130. package/dist/providers/index.d.ts +9 -4
  131. package/dist/providers/index.d.ts.map +1 -1
  132. package/dist/providers/index.js +10 -3
  133. package/dist/providers/index.js.map +1 -1
  134. package/dist/providers/map-client-factory.d.ts +55 -0
  135. package/dist/providers/map-client-factory.d.ts.map +1 -0
  136. package/dist/providers/map-client-factory.js +123 -0
  137. package/dist/providers/map-client-factory.js.map +1 -0
  138. package/dist/providers/map-event-bridge.d.ts +146 -0
  139. package/dist/providers/map-event-bridge.d.ts.map +1 -0
  140. package/dist/providers/map-event-bridge.js +208 -0
  141. package/dist/providers/map-event-bridge.js.map +1 -0
  142. package/dist/providers/map.d.ts +115 -0
  143. package/dist/providers/map.d.ts.map +1 -0
  144. package/dist/providers/map.js +381 -0
  145. package/dist/providers/map.js.map +1 -0
  146. package/dist/providers/materialization.d.ts +23 -5
  147. package/dist/providers/materialization.d.ts.map +1 -1
  148. package/dist/providers/materialization.js +95 -4
  149. package/dist/providers/materialization.js.map +1 -1
  150. package/dist/providers/native.d.ts.map +1 -1
  151. package/dist/providers/native.js +5 -0
  152. package/dist/providers/native.js.map +1 -1
  153. package/dist/providers/sessionlog.d.ts +81 -0
  154. package/dist/providers/sessionlog.d.ts.map +1 -0
  155. package/dist/providers/sessionlog.js +478 -0
  156. package/dist/providers/sessionlog.js.map +1 -0
  157. package/dist/providers/sudocode.d.ts.map +1 -1
  158. package/dist/providers/sudocode.js +17 -1
  159. package/dist/providers/sudocode.js.map +1 -1
  160. package/dist/providers/traits/Reconcilable.d.ts +57 -0
  161. package/dist/providers/traits/Reconcilable.d.ts.map +1 -0
  162. package/dist/providers/traits/Reconcilable.js +18 -0
  163. package/dist/providers/traits/Reconcilable.js.map +1 -0
  164. package/dist/providers/traits/index.d.ts +2 -0
  165. package/dist/providers/traits/index.d.ts.map +1 -1
  166. package/dist/providers/traits/index.js +1 -0
  167. package/dist/providers/traits/index.js.map +1 -1
  168. package/dist/providers/types.d.ts +63 -0
  169. package/dist/providers/types.d.ts.map +1 -1
  170. package/dist/providers/types.js +22 -0
  171. package/dist/providers/types.js.map +1 -1
  172. package/dist/schema/edges.d.ts +3 -3
  173. package/dist/schema/edges.d.ts.map +1 -1
  174. package/dist/sessionlog/agent/agents/claude-code.d.ts +76 -0
  175. package/dist/sessionlog/agent/agents/claude-code.d.ts.map +1 -0
  176. package/dist/sessionlog/agent/agents/claude-code.js +759 -0
  177. package/dist/sessionlog/agent/agents/claude-code.js.map +1 -0
  178. package/dist/sessionlog/agent/agents/cursor.d.ts +35 -0
  179. package/dist/sessionlog/agent/agents/cursor.d.ts.map +1 -0
  180. package/dist/sessionlog/agent/agents/cursor.js +294 -0
  181. package/dist/sessionlog/agent/agents/cursor.js.map +1 -0
  182. package/dist/sessionlog/agent/agents/gemini-cli.d.ts +62 -0
  183. package/dist/sessionlog/agent/agents/gemini-cli.d.ts.map +1 -0
  184. package/dist/sessionlog/agent/agents/gemini-cli.js +462 -0
  185. package/dist/sessionlog/agent/agents/gemini-cli.js.map +1 -0
  186. package/dist/sessionlog/agent/agents/opencode.d.ts +100 -0
  187. package/dist/sessionlog/agent/agents/opencode.d.ts.map +1 -0
  188. package/dist/sessionlog/agent/agents/opencode.js +423 -0
  189. package/dist/sessionlog/agent/agents/opencode.js.map +1 -0
  190. package/dist/sessionlog/agent/registry.d.ts +54 -0
  191. package/dist/sessionlog/agent/registry.d.ts.map +1 -0
  192. package/dist/sessionlog/agent/registry.js +123 -0
  193. package/dist/sessionlog/agent/registry.js.map +1 -0
  194. package/dist/sessionlog/agent/session-types.d.ts +45 -0
  195. package/dist/sessionlog/agent/session-types.d.ts.map +1 -0
  196. package/dist/sessionlog/agent/session-types.js +50 -0
  197. package/dist/sessionlog/agent/session-types.js.map +1 -0
  198. package/dist/sessionlog/agent/types.d.ts +126 -0
  199. package/dist/sessionlog/agent/types.d.ts.map +1 -0
  200. package/dist/sessionlog/agent/types.js +39 -0
  201. package/dist/sessionlog/agent/types.js.map +1 -0
  202. package/dist/sessionlog/commands/clean.d.ts +40 -0
  203. package/dist/sessionlog/commands/clean.d.ts.map +1 -0
  204. package/dist/sessionlog/commands/clean.js +105 -0
  205. package/dist/sessionlog/commands/clean.js.map +1 -0
  206. package/dist/sessionlog/commands/disable.d.ts +23 -0
  207. package/dist/sessionlog/commands/disable.d.ts.map +1 -0
  208. package/dist/sessionlog/commands/disable.js +57 -0
  209. package/dist/sessionlog/commands/disable.js.map +1 -0
  210. package/dist/sessionlog/commands/doctor.d.ts +43 -0
  211. package/dist/sessionlog/commands/doctor.d.ts.map +1 -0
  212. package/dist/sessionlog/commands/doctor.js +97 -0
  213. package/dist/sessionlog/commands/doctor.js.map +1 -0
  214. package/dist/sessionlog/commands/enable.d.ts +31 -0
  215. package/dist/sessionlog/commands/enable.d.ts.map +1 -0
  216. package/dist/sessionlog/commands/enable.js +102 -0
  217. package/dist/sessionlog/commands/enable.js.map +1 -0
  218. package/dist/sessionlog/commands/explain.d.ts +69 -0
  219. package/dist/sessionlog/commands/explain.d.ts.map +1 -0
  220. package/dist/sessionlog/commands/explain.js +185 -0
  221. package/dist/sessionlog/commands/explain.js.map +1 -0
  222. package/dist/sessionlog/commands/reset.d.ts +23 -0
  223. package/dist/sessionlog/commands/reset.d.ts.map +1 -0
  224. package/dist/sessionlog/commands/reset.js +68 -0
  225. package/dist/sessionlog/commands/reset.js.map +1 -0
  226. package/dist/sessionlog/commands/resume.d.ts +42 -0
  227. package/dist/sessionlog/commands/resume.d.ts.map +1 -0
  228. package/dist/sessionlog/commands/resume.js +134 -0
  229. package/dist/sessionlog/commands/resume.js.map +1 -0
  230. package/dist/sessionlog/commands/rewind.d.ts +40 -0
  231. package/dist/sessionlog/commands/rewind.d.ts.map +1 -0
  232. package/dist/sessionlog/commands/rewind.js +155 -0
  233. package/dist/sessionlog/commands/rewind.js.map +1 -0
  234. package/dist/sessionlog/commands/status.d.ts +54 -0
  235. package/dist/sessionlog/commands/status.d.ts.map +1 -0
  236. package/dist/sessionlog/commands/status.js +95 -0
  237. package/dist/sessionlog/commands/status.js.map +1 -0
  238. package/dist/sessionlog/config.d.ts +40 -0
  239. package/dist/sessionlog/config.d.ts.map +1 -0
  240. package/dist/sessionlog/config.js +126 -0
  241. package/dist/sessionlog/config.js.map +1 -0
  242. package/dist/sessionlog/git-operations.d.ts +173 -0
  243. package/dist/sessionlog/git-operations.d.ts.map +1 -0
  244. package/dist/sessionlog/git-operations.js +399 -0
  245. package/dist/sessionlog/git-operations.js.map +1 -0
  246. package/dist/sessionlog/hooks/git-hooks.d.ts +22 -0
  247. package/dist/sessionlog/hooks/git-hooks.d.ts.map +1 -0
  248. package/dist/sessionlog/hooks/git-hooks.js +145 -0
  249. package/dist/sessionlog/hooks/git-hooks.js.map +1 -0
  250. package/dist/sessionlog/hooks/lifecycle.d.ts +21 -0
  251. package/dist/sessionlog/hooks/lifecycle.d.ts.map +1 -0
  252. package/dist/sessionlog/hooks/lifecycle.js +179 -0
  253. package/dist/sessionlog/hooks/lifecycle.js.map +1 -0
  254. package/dist/sessionlog/index.d.ts +69 -0
  255. package/dist/sessionlog/index.d.ts.map +1 -0
  256. package/dist/sessionlog/index.js +154 -0
  257. package/dist/sessionlog/index.js.map +1 -0
  258. package/dist/sessionlog/security/redaction.d.ts +35 -0
  259. package/dist/sessionlog/security/redaction.d.ts.map +1 -0
  260. package/dist/sessionlog/security/redaction.js +221 -0
  261. package/dist/sessionlog/security/redaction.js.map +1 -0
  262. package/dist/sessionlog/session/state-machine.d.ts +90 -0
  263. package/dist/sessionlog/session/state-machine.d.ts.map +1 -0
  264. package/dist/sessionlog/session/state-machine.js +347 -0
  265. package/dist/sessionlog/session/state-machine.js.map +1 -0
  266. package/dist/sessionlog/store/checkpoint-store.d.ts +47 -0
  267. package/dist/sessionlog/store/checkpoint-store.d.ts.map +1 -0
  268. package/dist/sessionlog/store/checkpoint-store.js +309 -0
  269. package/dist/sessionlog/store/checkpoint-store.js.map +1 -0
  270. package/dist/sessionlog/store/native-store.d.ts +21 -0
  271. package/dist/sessionlog/store/native-store.d.ts.map +1 -0
  272. package/dist/sessionlog/store/native-store.js +162 -0
  273. package/dist/sessionlog/store/native-store.js.map +1 -0
  274. package/dist/sessionlog/store/provider-types.d.ts +78 -0
  275. package/dist/sessionlog/store/provider-types.d.ts.map +1 -0
  276. package/dist/sessionlog/store/provider-types.js +12 -0
  277. package/dist/sessionlog/store/provider-types.js.map +1 -0
  278. package/dist/sessionlog/store/session-store.d.ts +28 -0
  279. package/dist/sessionlog/store/session-store.d.ts.map +1 -0
  280. package/dist/sessionlog/store/session-store.js +187 -0
  281. package/dist/sessionlog/store/session-store.js.map +1 -0
  282. package/dist/sessionlog/strategy/attribution.d.ts +39 -0
  283. package/dist/sessionlog/strategy/attribution.d.ts.map +1 -0
  284. package/dist/sessionlog/strategy/attribution.js +227 -0
  285. package/dist/sessionlog/strategy/attribution.js.map +1 -0
  286. package/dist/sessionlog/strategy/common.d.ts +60 -0
  287. package/dist/sessionlog/strategy/common.d.ts.map +1 -0
  288. package/dist/sessionlog/strategy/common.js +162 -0
  289. package/dist/sessionlog/strategy/common.js.map +1 -0
  290. package/dist/sessionlog/strategy/content-overlap.d.ts +33 -0
  291. package/dist/sessionlog/strategy/content-overlap.d.ts.map +1 -0
  292. package/dist/sessionlog/strategy/content-overlap.js +168 -0
  293. package/dist/sessionlog/strategy/content-overlap.js.map +1 -0
  294. package/dist/sessionlog/strategy/manual-commit.d.ts +35 -0
  295. package/dist/sessionlog/strategy/manual-commit.d.ts.map +1 -0
  296. package/dist/sessionlog/strategy/manual-commit.js +732 -0
  297. package/dist/sessionlog/strategy/manual-commit.js.map +1 -0
  298. package/dist/sessionlog/strategy/types.d.ts +163 -0
  299. package/dist/sessionlog/strategy/types.d.ts.map +1 -0
  300. package/dist/sessionlog/strategy/types.js +49 -0
  301. package/dist/sessionlog/strategy/types.js.map +1 -0
  302. package/dist/sessionlog/summarize/claude-generator.d.ts +25 -0
  303. package/dist/sessionlog/summarize/claude-generator.d.ts.map +1 -0
  304. package/dist/sessionlog/summarize/claude-generator.js +87 -0
  305. package/dist/sessionlog/summarize/claude-generator.js.map +1 -0
  306. package/dist/sessionlog/summarize/summarize.d.ts +52 -0
  307. package/dist/sessionlog/summarize/summarize.d.ts.map +1 -0
  308. package/dist/sessionlog/summarize/summarize.js +335 -0
  309. package/dist/sessionlog/summarize/summarize.js.map +1 -0
  310. package/dist/sessionlog/types.d.ts +298 -0
  311. package/dist/sessionlog/types.d.ts.map +1 -0
  312. package/dist/sessionlog/types.js +104 -0
  313. package/dist/sessionlog/types.js.map +1 -0
  314. package/dist/sessionlog/utils/chunk-files.d.ts +25 -0
  315. package/dist/sessionlog/utils/chunk-files.d.ts.map +1 -0
  316. package/dist/sessionlog/utils/chunk-files.js +47 -0
  317. package/dist/sessionlog/utils/chunk-files.js.map +1 -0
  318. package/dist/sessionlog/utils/commit-message.d.ts +11 -0
  319. package/dist/sessionlog/utils/commit-message.d.ts.map +1 -0
  320. package/dist/sessionlog/utils/commit-message.js +54 -0
  321. package/dist/sessionlog/utils/commit-message.js.map +1 -0
  322. package/dist/sessionlog/utils/detect-agent.d.ts +19 -0
  323. package/dist/sessionlog/utils/detect-agent.d.ts.map +1 -0
  324. package/dist/sessionlog/utils/detect-agent.js +34 -0
  325. package/dist/sessionlog/utils/detect-agent.js.map +1 -0
  326. package/dist/sessionlog/utils/hook-managers.d.ts +24 -0
  327. package/dist/sessionlog/utils/hook-managers.d.ts.map +1 -0
  328. package/dist/sessionlog/utils/hook-managers.js +87 -0
  329. package/dist/sessionlog/utils/hook-managers.js.map +1 -0
  330. package/dist/sessionlog/utils/ide-tags.d.ts +12 -0
  331. package/dist/sessionlog/utils/ide-tags.d.ts.map +1 -0
  332. package/dist/sessionlog/utils/ide-tags.js +30 -0
  333. package/dist/sessionlog/utils/ide-tags.js.map +1 -0
  334. package/dist/sessionlog/utils/paths.d.ts +32 -0
  335. package/dist/sessionlog/utils/paths.d.ts.map +1 -0
  336. package/dist/sessionlog/utils/paths.js +55 -0
  337. package/dist/sessionlog/utils/paths.js.map +1 -0
  338. package/dist/sessionlog/utils/preview-rewind.d.ts +23 -0
  339. package/dist/sessionlog/utils/preview-rewind.d.ts.map +1 -0
  340. package/dist/sessionlog/utils/preview-rewind.js +63 -0
  341. package/dist/sessionlog/utils/preview-rewind.js.map +1 -0
  342. package/dist/sessionlog/utils/rewind-conflict.d.ts +52 -0
  343. package/dist/sessionlog/utils/rewind-conflict.d.ts.map +1 -0
  344. package/dist/sessionlog/utils/rewind-conflict.js +79 -0
  345. package/dist/sessionlog/utils/rewind-conflict.js.map +1 -0
  346. package/dist/sessionlog/utils/shadow-branch.d.ts +53 -0
  347. package/dist/sessionlog/utils/shadow-branch.d.ts.map +1 -0
  348. package/dist/sessionlog/utils/shadow-branch.js +97 -0
  349. package/dist/sessionlog/utils/shadow-branch.js.map +1 -0
  350. package/dist/sessionlog/utils/string-utils.d.ts +24 -0
  351. package/dist/sessionlog/utils/string-utils.d.ts.map +1 -0
  352. package/dist/sessionlog/utils/string-utils.js +47 -0
  353. package/dist/sessionlog/utils/string-utils.js.map +1 -0
  354. package/dist/sessionlog/utils/todo-extract.d.ts +52 -0
  355. package/dist/sessionlog/utils/todo-extract.d.ts.map +1 -0
  356. package/dist/sessionlog/utils/todo-extract.js +167 -0
  357. package/dist/sessionlog/utils/todo-extract.js.map +1 -0
  358. package/dist/sessionlog/utils/trailers.d.ts +36 -0
  359. package/dist/sessionlog/utils/trailers.d.ts.map +1 -0
  360. package/dist/sessionlog/utils/trailers.js +149 -0
  361. package/dist/sessionlog/utils/trailers.js.map +1 -0
  362. package/dist/sessionlog/utils/transcript-parse.d.ts +57 -0
  363. package/dist/sessionlog/utils/transcript-parse.d.ts.map +1 -0
  364. package/dist/sessionlog/utils/transcript-parse.js +126 -0
  365. package/dist/sessionlog/utils/transcript-parse.js.map +1 -0
  366. package/dist/sessionlog/utils/transcript-timestamp.d.ts +22 -0
  367. package/dist/sessionlog/utils/transcript-timestamp.d.ts.map +1 -0
  368. package/dist/sessionlog/utils/transcript-timestamp.js +56 -0
  369. package/dist/sessionlog/utils/transcript-timestamp.js.map +1 -0
  370. package/dist/sessionlog/utils/tree-ops.d.ts +47 -0
  371. package/dist/sessionlog/utils/tree-ops.d.ts.map +1 -0
  372. package/dist/sessionlog/utils/tree-ops.js +145 -0
  373. package/dist/sessionlog/utils/tree-ops.js.map +1 -0
  374. package/dist/sessionlog/utils/tty.d.ts +25 -0
  375. package/dist/sessionlog/utils/tty.d.ts.map +1 -0
  376. package/dist/sessionlog/utils/tty.js +70 -0
  377. package/dist/sessionlog/utils/tty.js.map +1 -0
  378. package/dist/sessionlog/utils/validation.d.ts +31 -0
  379. package/dist/sessionlog/utils/validation.d.ts.map +1 -0
  380. package/dist/sessionlog/utils/validation.js +59 -0
  381. package/dist/sessionlog/utils/validation.js.map +1 -0
  382. package/dist/sessionlog/utils/worktree.d.ts +16 -0
  383. package/dist/sessionlog/utils/worktree.d.ts.map +1 -0
  384. package/dist/sessionlog/utils/worktree.js +50 -0
  385. package/dist/sessionlog/utils/worktree.js.map +1 -0
  386. package/dist/storage/sqlite-schema.d.ts.map +1 -1
  387. package/dist/storage/sqlite-schema.js +2 -0
  388. package/dist/storage/sqlite-schema.js.map +1 -1
  389. package/dist/storage/sqlite.d.ts.map +1 -1
  390. package/dist/storage/sqlite.js +18 -4
  391. package/dist/storage/sqlite.js.map +1 -1
  392. package/dist/tools/index.d.ts +1 -1
  393. package/dist/tools/index.d.ts.map +1 -1
  394. package/dist/tools/index.js.map +1 -1
  395. package/dist/tools/query.d.ts +2 -1
  396. package/dist/tools/query.d.ts.map +1 -1
  397. package/dist/tools/query.js +217 -7
  398. package/dist/tools/query.js.map +1 -1
  399. package/dist/tools/types.d.ts +57 -0
  400. package/dist/tools/types.d.ts.map +1 -1
  401. package/dist/tools/types.js.map +1 -1
  402. package/dist/tracking/transcript-extractor.d.ts +3 -3
  403. package/dist/tracking/transcript-extractor.d.ts.map +1 -1
  404. package/dist/tracking/transcript-extractor.js +1 -1
  405. package/dist/tracking/transcript-extractor.js.map +1 -1
  406. package/package.json +3 -1
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Sessionlog Auto-Linker
3
+ *
4
+ * Correlation engine that automatically creates edges between OpenTasks
5
+ * tasks and sessionlog sessions/checkpoints. Matches sessions to tasks via
6
+ * claims, in-progress status, and branch association.
7
+ */
8
+ import type { GraphStore } from '../graph/store.js';
9
+ import type { DaemonFlushManager } from './flush.js';
10
+ import type { SessionlogSessionEvent, SessionlogSessionState } from './sessionlog-watcher.js';
11
+ import type { MaterializationArchiver } from '../materialization/types.js';
12
+ import type { SkillTrackerRegistry } from '../tracking/skill-tracker.js';
13
+ /**
14
+ * Correlation confidence level
15
+ */
16
+ export type CorrelationConfidence = 'high' | 'medium' | 'low';
17
+ /**
18
+ * How a task was matched to a session
19
+ */
20
+ export type CorrelationStrategy = 'claimed-task' | 'in-progress-branch' | 'in-progress-any';
21
+ /**
22
+ * A task matched to a sessionlog session
23
+ */
24
+ export interface MatchedTask {
25
+ nodeId: string;
26
+ uri?: string;
27
+ matchReason: CorrelationStrategy;
28
+ confidence: CorrelationConfidence;
29
+ }
30
+ /**
31
+ * Result of correlating a session with tasks
32
+ */
33
+ export interface CorrelationResult {
34
+ sessionId: string;
35
+ matchedTasks: MatchedTask[];
36
+ edgesCreated: string[];
37
+ nodesCreated: string[];
38
+ strategy: CorrelationStrategy | 'none';
39
+ timestamp: string;
40
+ }
41
+ /**
42
+ * Configuration for the auto-linker
43
+ */
44
+ export interface SessionlogAutoLinkerConfig {
45
+ /** Graph store for creating nodes and edges */
46
+ store: GraphStore;
47
+ /** Flush manager for scheduling persistence */
48
+ flushManager: DaemonFlushManager;
49
+ /** Minimum confidence for auto-linking (default: 'medium') */
50
+ minConfidence?: CorrelationConfidence;
51
+ /** Optional archiver for durable session snapshots */
52
+ archiver?: MaterializationArchiver;
53
+ /** Skill tracker registry for embedding skill usage in session nodes */
54
+ skillTrackerRegistry?: SkillTrackerRegistry;
55
+ }
56
+ /**
57
+ * Auto-linker interface
58
+ */
59
+ export interface SessionlogAutoLinker {
60
+ /** Handle a session event from the watcher */
61
+ handleSessionEvent(event: SessionlogSessionEvent): Promise<void>;
62
+ /** Manually trigger correlation for a session */
63
+ correlate(sessionId: string, session: SessionlogSessionState): Promise<CorrelationResult>;
64
+ /** Get correlation history */
65
+ getCorrelations(): Map<string, CorrelationResult>;
66
+ }
67
+ /**
68
+ * Create a sessionlog auto-linker
69
+ */
70
+ export declare function createSessionlogAutoLinker(config: SessionlogAutoLinkerConfig): SessionlogAutoLinker;
71
+ //# sourceMappingURL=sessionlog-linker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionlog-linker.d.ts","sourceRoot":"","sources":["../../src/daemon/sessionlog-linker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAMzE;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,oBAAoB,GAAG,iBAAiB,CAAC;AAE5F;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,mBAAmB,CAAC;IACjC,UAAU,EAAE,qBAAqB,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,mBAAmB,GAAG,MAAM,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,+CAA+C;IAC/C,KAAK,EAAE,UAAU,CAAC;IAElB,+CAA+C;IAC/C,YAAY,EAAE,kBAAkB,CAAC;IAEjC,8DAA8D;IAC9D,aAAa,CAAC,EAAE,qBAAqB,CAAC;IAEtC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IAEnC,wEAAwE;IACxE,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,kBAAkB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE,iDAAiD;IACjD,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAE1F,8BAA8B;IAC9B,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CACnD;AAuBD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,0BAA0B,GAAG,oBAAoB,CA0fnG"}
@@ -0,0 +1,472 @@
1
+ /**
2
+ * Sessionlog Auto-Linker
3
+ *
4
+ * Correlation engine that automatically creates edges between OpenTasks
5
+ * tasks and sessionlog sessions/checkpoints. Matches sessions to tasks via
6
+ * claims, in-progress status, and branch association.
7
+ */
8
+ // ============================================================================
9
+ // Confidence Ordering
10
+ // ============================================================================
11
+ const CONFIDENCE_ORDER = {
12
+ high: 3,
13
+ medium: 2,
14
+ low: 1,
15
+ };
16
+ function meetsConfidenceThreshold(confidence, minimum) {
17
+ return CONFIDENCE_ORDER[confidence] >= CONFIDENCE_ORDER[minimum];
18
+ }
19
+ // ============================================================================
20
+ // Implementation
21
+ // ============================================================================
22
+ /**
23
+ * Create a sessionlog auto-linker
24
+ */
25
+ export function createSessionlogAutoLinker(config) {
26
+ const { store, flushManager, archiver, skillTrackerRegistry } = config;
27
+ const minConfidence = config.minConfidence ?? 'medium';
28
+ // Track which sessions have been linked to avoid duplicates
29
+ const correlations = new Map();
30
+ // Track created external nodes: URI → node ID mapping
31
+ const createdNodes = new Map();
32
+ /**
33
+ * Find tasks correlated with a session
34
+ */
35
+ async function findCorrelatedTasks(session) {
36
+ const matched = [];
37
+ // Strategy 1: Claimed tasks (high confidence)
38
+ try {
39
+ const allIssues = await store.query.nodes({
40
+ type: 'task',
41
+ status: 'in_progress',
42
+ archived: false,
43
+ });
44
+ for (const issue of allIssues) {
45
+ const raw = issue;
46
+ const claimedBy = raw.claimed_by;
47
+ const lockUntil = raw.lock_until;
48
+ if (claimedBy && (!lockUntil || new Date(lockUntil) > new Date())) {
49
+ matched.push({
50
+ nodeId: issue.id,
51
+ uri: raw.uri,
52
+ matchReason: 'claimed-task',
53
+ confidence: 'high',
54
+ });
55
+ }
56
+ }
57
+ }
58
+ catch {
59
+ // Continue to next strategy
60
+ }
61
+ if (matched.length > 0)
62
+ return matched;
63
+ // Strategy 2: In-progress tasks on same branch (medium confidence)
64
+ if (session.branch) {
65
+ try {
66
+ const allIssues = await store.query.nodes({
67
+ type: 'task',
68
+ status: 'in_progress',
69
+ archived: false,
70
+ });
71
+ for (const issue of allIssues) {
72
+ const raw = issue;
73
+ if (raw.branch === session.branch) {
74
+ matched.push({
75
+ nodeId: issue.id,
76
+ uri: raw.uri,
77
+ matchReason: 'in-progress-branch',
78
+ confidence: 'medium',
79
+ });
80
+ }
81
+ }
82
+ }
83
+ catch {
84
+ // Continue to next strategy
85
+ }
86
+ }
87
+ if (matched.length > 0)
88
+ return matched;
89
+ // Strategy 3: Any in-progress task (low confidence)
90
+ // Only if exactly one in-progress task exists (ambiguity guard)
91
+ try {
92
+ const allInProgress = await store.query.nodes({
93
+ type: 'task',
94
+ status: 'in_progress',
95
+ archived: false,
96
+ });
97
+ if (allInProgress.length === 1) {
98
+ const raw = allInProgress[0];
99
+ matched.push({
100
+ nodeId: allInProgress[0].id,
101
+ uri: raw.uri,
102
+ matchReason: 'in-progress-any',
103
+ confidence: 'low',
104
+ });
105
+ }
106
+ }
107
+ catch {
108
+ // No matches
109
+ }
110
+ return matched;
111
+ }
112
+ /**
113
+ * Ensure an external node exists for a sessionlog session.
114
+ * Returns the node's actual graph ID (not the URI).
115
+ */
116
+ async function ensureSessionNode(session) {
117
+ const uri = `sessionlog://session/${session.id}`;
118
+ const cachedId = createdNodes.get(uri);
119
+ if (cachedId)
120
+ return cachedId;
121
+ // Check if node already exists
122
+ const existing = await store.query.nodes({
123
+ type: 'external',
124
+ search: uri,
125
+ limit: 1,
126
+ });
127
+ if (existing.length > 0) {
128
+ const nodeId = existing[0].id;
129
+ createdNodes.set(uri, nodeId);
130
+ return nodeId;
131
+ }
132
+ try {
133
+ const node = await store.createNode({
134
+ type: 'external',
135
+ title: `Session: ${session.id}`,
136
+ uri,
137
+ source: 'sessionlog',
138
+ metadata: {
139
+ entityType: 'session',
140
+ agent: session.agent,
141
+ phase: session.phase,
142
+ baseCommit: session.baseCommit,
143
+ branch: session.branch,
144
+ startedAt: session.startedAt,
145
+ tasks: session.tasks,
146
+ inPlanMode: session.inPlanMode,
147
+ planModeEntries: session.planModeEntries,
148
+ planEntries: session.planEntries,
149
+ },
150
+ });
151
+ const nodeId = node.id;
152
+ createdNodes.set(uri, nodeId);
153
+ flushManager.markDirty(nodeId);
154
+ flushManager.schedule();
155
+ return nodeId;
156
+ }
157
+ catch {
158
+ // Node may already exist from a concurrent operation — re-query
159
+ const retryExisting = await store.query.nodes({
160
+ type: 'external',
161
+ search: uri,
162
+ limit: 1,
163
+ });
164
+ if (retryExisting.length > 0) {
165
+ const nodeId = retryExisting[0].id;
166
+ createdNodes.set(uri, nodeId);
167
+ return nodeId;
168
+ }
169
+ // Fallback: use URI as ID (should not happen in practice)
170
+ createdNodes.set(uri, uri);
171
+ return uri;
172
+ }
173
+ }
174
+ /**
175
+ * Ensure an external node exists for a sessionlog checkpoint.
176
+ * Returns the node's actual graph ID (not the URI).
177
+ */
178
+ async function ensureCheckpointNode(checkpointId, session) {
179
+ const uri = `sessionlog://checkpoint/${checkpointId}`;
180
+ const cachedId = createdNodes.get(uri);
181
+ if (cachedId)
182
+ return cachedId;
183
+ // Check if node already exists
184
+ const existing = await store.query.nodes({
185
+ type: 'external',
186
+ search: uri,
187
+ limit: 1,
188
+ });
189
+ if (existing.length > 0) {
190
+ const nodeId = existing[0].id;
191
+ createdNodes.set(uri, nodeId);
192
+ return nodeId;
193
+ }
194
+ try {
195
+ const node = await store.createNode({
196
+ type: 'external',
197
+ title: `Checkpoint: ${checkpointId}`,
198
+ uri,
199
+ source: 'sessionlog',
200
+ metadata: {
201
+ entityType: 'checkpoint',
202
+ sessionId: session.id,
203
+ },
204
+ });
205
+ const nodeId = node.id;
206
+ createdNodes.set(uri, nodeId);
207
+ flushManager.markDirty(nodeId);
208
+ flushManager.schedule();
209
+ return nodeId;
210
+ }
211
+ catch {
212
+ // Re-query in case of concurrent creation
213
+ const retryExisting = await store.query.nodes({
214
+ type: 'external',
215
+ search: uri,
216
+ limit: 1,
217
+ });
218
+ if (retryExisting.length > 0) {
219
+ const nodeId = retryExisting[0].id;
220
+ createdNodes.set(uri, nodeId);
221
+ return nodeId;
222
+ }
223
+ createdNodes.set(uri, uri);
224
+ return uri;
225
+ }
226
+ }
227
+ /**
228
+ * Create an edge if it doesn't already exist
229
+ */
230
+ async function createEdgeIfNotExists(fromId, toId, type, metadata) {
231
+ // Check for existing edge
232
+ try {
233
+ const existingEdges = await store.query.edges({
234
+ from_id: fromId,
235
+ to_id: toId,
236
+ type,
237
+ });
238
+ if (existingEdges.length > 0) {
239
+ return existingEdges[0].id;
240
+ }
241
+ }
242
+ catch {
243
+ // Continue to create
244
+ }
245
+ try {
246
+ const edge = await store.createEdge({
247
+ from_id: fromId,
248
+ to_id: toId,
249
+ type,
250
+ metadata: {
251
+ ...metadata,
252
+ _context: {
253
+ source: 'sessionlog-auto-linker',
254
+ timestamp: new Date().toISOString(),
255
+ ...metadata?._context,
256
+ },
257
+ },
258
+ });
259
+ flushManager.markDirty(fromId);
260
+ flushManager.markDirty(toId);
261
+ flushManager.schedule();
262
+ return edge.id;
263
+ }
264
+ catch {
265
+ return null;
266
+ }
267
+ }
268
+ return {
269
+ async handleSessionEvent(event) {
270
+ const { type, sessionId, session } = event;
271
+ switch (type) {
272
+ case 'started': {
273
+ // Create session node — returns the node's graph ID
274
+ const sessionNodeId = await ensureSessionNode(session);
275
+ // Correlate with tasks
276
+ const tasks = await findCorrelatedTasks(session);
277
+ const edgesCreated = [];
278
+ const matchedForResult = [];
279
+ for (const task of tasks) {
280
+ if (!meetsConfidenceThreshold(task.confidence, minConfidence))
281
+ continue;
282
+ matchedForResult.push(task);
283
+ const edgeId = await createEdgeIfNotExists(task.nodeId, sessionNodeId, 'worked-on', {
284
+ _context: {
285
+ correlation: task.matchReason,
286
+ confidence: task.confidence,
287
+ sessionAgent: session.agent,
288
+ },
289
+ });
290
+ if (edgeId)
291
+ edgesCreated.push(edgeId);
292
+ }
293
+ correlations.set(sessionId, {
294
+ sessionId,
295
+ matchedTasks: matchedForResult,
296
+ edgesCreated,
297
+ nodesCreated: [sessionNodeId],
298
+ strategy: matchedForResult[0]?.matchReason ?? 'none',
299
+ timestamp: new Date().toISOString(),
300
+ });
301
+ // Archive if configured
302
+ if (archiver) {
303
+ const sessionUri = `sessionlog://session/${session.id}`;
304
+ void archiver.onSessionEvent('started', sessionUri, store).catch(() => { });
305
+ }
306
+ break;
307
+ }
308
+ case 'checkpoint': {
309
+ if (!event.checkpointId)
310
+ break;
311
+ // Ensure session and checkpoint nodes exist — returns graph IDs
312
+ const sessionNodeId = await ensureSessionNode(session);
313
+ const checkpointNodeId = await ensureCheckpointNode(event.checkpointId, session);
314
+ const edgesCreated = [];
315
+ // Create contains edge (session → checkpoint)
316
+ const containsId = await createEdgeIfNotExists(sessionNodeId, checkpointNodeId, 'contains');
317
+ if (containsId)
318
+ edgesCreated.push(containsId);
319
+ // Create implemented-by edges (tasks → checkpoint)
320
+ const tasks = await findCorrelatedTasks(session);
321
+ const matchedForResult = [];
322
+ for (const task of tasks) {
323
+ if (!meetsConfidenceThreshold(task.confidence, minConfidence))
324
+ continue;
325
+ matchedForResult.push(task);
326
+ const edgeId = await createEdgeIfNotExists(task.nodeId, checkpointNodeId, 'implemented-by', {
327
+ _context: {
328
+ correlation: task.matchReason,
329
+ confidence: task.confidence,
330
+ checkpointId: event.checkpointId,
331
+ },
332
+ });
333
+ if (edgeId)
334
+ edgesCreated.push(edgeId);
335
+ }
336
+ // Update existing correlation record
337
+ const existing = correlations.get(sessionId);
338
+ if (existing) {
339
+ existing.edgesCreated.push(...edgesCreated);
340
+ existing.nodesCreated.push(checkpointNodeId);
341
+ }
342
+ // Archive checkpoint if configured
343
+ if (archiver) {
344
+ const sessionUri = `sessionlog://session/${session.id}`;
345
+ void archiver.onSessionEvent('checkpoint', sessionUri, store).catch(() => { });
346
+ }
347
+ break;
348
+ }
349
+ case 'ended': {
350
+ // Ensure node exists (may be first event if daemon started after session)
351
+ // then update it with final status
352
+ try {
353
+ const sessionNodeId = await ensureSessionNode(session);
354
+ // Pull skill usage from the tracker registry (if available)
355
+ const updateMetadata = {
356
+ phase: 'ENDED',
357
+ endedAt: session.endedAt,
358
+ tasks: session.tasks,
359
+ planModeEntries: session.planModeEntries,
360
+ planEntries: session.planEntries,
361
+ };
362
+ if (skillTrackerRegistry) {
363
+ // Finalize the tracker: remove it and get the final summary
364
+ const skillSummary = skillTrackerRegistry.remove(sessionId);
365
+ if (skillSummary && skillSummary.totalInvocations > 0) {
366
+ // Build the compact skillsUsed structure for the session node
367
+ const counts = {};
368
+ const outcomes = {};
369
+ for (const stat of skillSummary.stats) {
370
+ counts[stat.skill] = stat.count;
371
+ outcomes[stat.skill] = {
372
+ success: stat.successCount,
373
+ failure: stat.failureCount,
374
+ };
375
+ }
376
+ updateMetadata.skillsUsed = {
377
+ skills: skillSummary.skillsUsed,
378
+ totalInvocations: skillSummary.totalInvocations,
379
+ counts,
380
+ outcomes,
381
+ };
382
+ }
383
+ }
384
+ await store.updateNode(sessionNodeId, {
385
+ status: 'closed',
386
+ metadata: updateMetadata,
387
+ });
388
+ flushManager.markDirty(sessionNodeId);
389
+ flushManager.schedule();
390
+ // Archive final session state if configured
391
+ if (archiver) {
392
+ const sessionUri = `sessionlog://session/${sessionId}`;
393
+ void archiver.onSessionEvent('ended', sessionUri, store).catch(() => { });
394
+ }
395
+ }
396
+ catch {
397
+ // Best-effort update
398
+ }
399
+ break;
400
+ }
401
+ case 'updated': {
402
+ // Update session node metadata if it exists
403
+ try {
404
+ const nodes = await store.query.nodes({
405
+ type: 'external',
406
+ search: `sessionlog://session/${sessionId}`,
407
+ limit: 1,
408
+ });
409
+ if (nodes.length > 0) {
410
+ await store.updateNode(nodes[0].id, {
411
+ metadata: {
412
+ phase: session.phase,
413
+ lastPromptAt: session.lastPromptAt,
414
+ tasks: session.tasks,
415
+ inPlanMode: session.inPlanMode,
416
+ planModeEntries: session.planModeEntries,
417
+ planEntries: session.planEntries,
418
+ },
419
+ });
420
+ flushManager.markDirty(nodes[0].id);
421
+ flushManager.schedule();
422
+ }
423
+ }
424
+ catch {
425
+ // Best-effort update
426
+ }
427
+ break;
428
+ }
429
+ case 'deleted': {
430
+ // Preserve history — don't delete nodes or edges
431
+ break;
432
+ }
433
+ }
434
+ },
435
+ async correlate(sessionId, session) {
436
+ // Create session node
437
+ const sessionNodeId = await ensureSessionNode(session);
438
+ // Correlate with tasks
439
+ const tasks = await findCorrelatedTasks(session);
440
+ const edgesCreated = [];
441
+ const matchedForResult = [];
442
+ for (const task of tasks) {
443
+ if (!meetsConfidenceThreshold(task.confidence, minConfidence))
444
+ continue;
445
+ matchedForResult.push(task);
446
+ const edgeId = await createEdgeIfNotExists(task.nodeId, sessionNodeId, 'worked-on', {
447
+ _context: {
448
+ correlation: task.matchReason,
449
+ confidence: task.confidence,
450
+ sessionAgent: session.agent,
451
+ },
452
+ });
453
+ if (edgeId)
454
+ edgesCreated.push(edgeId);
455
+ }
456
+ const result = {
457
+ sessionId,
458
+ matchedTasks: matchedForResult,
459
+ edgesCreated,
460
+ nodesCreated: [sessionNodeId],
461
+ strategy: matchedForResult[0]?.matchReason ?? 'none',
462
+ timestamp: new Date().toISOString(),
463
+ };
464
+ correlations.set(sessionId, result);
465
+ return result;
466
+ },
467
+ getCorrelations() {
468
+ return new Map(correlations);
469
+ },
470
+ };
471
+ }
472
+ //# sourceMappingURL=sessionlog-linker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionlog-linker.js","sourceRoot":"","sources":["../../src/daemon/sessionlog-linker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Sessionlog Session Watcher
3
+ *
4
+ * Watches .git/sessionlog-sessions/ for session state changes and emits
5
+ * structured events. Used by the auto-linker to correlate sessions
6
+ * with OpenTasks tasks.
7
+ */
8
+ import type { TrackedTask, PlanEntry, TrackedSkill } from 'sessionlog';
9
+ /**
10
+ * Sessionlog session state from a session file
11
+ */
12
+ export interface SessionlogSessionState {
13
+ id: string;
14
+ agent: string;
15
+ phase: 'ACTIVE' | 'IDLE' | 'ENDED';
16
+ baseCommit?: string;
17
+ branch?: string;
18
+ startedAt?: string;
19
+ endedAt?: string;
20
+ checkpoints: string[];
21
+ lastPromptAt?: string;
22
+ /** Tracked tasks during the session (from sessionlog real-time hooks) */
23
+ tasks?: Record<string, TrackedTask>;
24
+ /** Whether the session is currently in plan mode */
25
+ inPlanMode?: boolean;
26
+ /** Number of times plan mode was entered */
27
+ planModeEntries?: number;
28
+ /** All plan mode enter/exit cycles */
29
+ planEntries?: PlanEntry[];
30
+ /** Skills used during the session */
31
+ skillsUsed?: TrackedSkill[];
32
+ }
33
+ /**
34
+ * Event emitted when a session changes
35
+ */
36
+ export interface SessionlogSessionEvent {
37
+ type: 'started' | 'updated' | 'checkpoint' | 'ended' | 'deleted';
38
+ sessionId: string;
39
+ session: SessionlogSessionState;
40
+ previousPhase?: string;
41
+ checkpointId?: string;
42
+ timestamp: string;
43
+ }
44
+ export type SessionEventHandler = (event: SessionlogSessionEvent) => void;
45
+ /**
46
+ * Configuration for the sessionlog watcher
47
+ */
48
+ export interface SessionlogWatcherConfig {
49
+ /** Path to .opentasks/ directory (used to resolve .git) */
50
+ locationPath: string;
51
+ /** Override the git directory path (for testing) */
52
+ gitDir?: string;
53
+ /** Debounce delay in milliseconds (default: 200) */
54
+ debounceMs?: number;
55
+ /** Use polling instead of native fs events (useful for containers/tests) */
56
+ usePolling?: boolean;
57
+ /** Session directory name under .git/ (default: 'sessionlog-sessions') */
58
+ sessionDirName?: string;
59
+ }
60
+ /**
61
+ * Sessionlog session watcher interface
62
+ */
63
+ export interface SessionlogWatcher {
64
+ /** Start watching for session changes */
65
+ start(): Promise<void>;
66
+ /** Stop watching */
67
+ stop(): Promise<void>;
68
+ /** Register event handler */
69
+ onSessionEvent(handler: SessionEventHandler): void;
70
+ /** Check if watching */
71
+ readonly isWatching: boolean;
72
+ /** Get the resolved sessions directory path */
73
+ readonly sessionsDir: string;
74
+ }
75
+ /**
76
+ * Create an Sessionlog session watcher
77
+ */
78
+ export declare function createSessionlogWatcher(config: SessionlogWatcherConfig): SessionlogWatcher;
79
+ //# sourceMappingURL=sessionlog-watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionlog-watcher.d.ts","sourceRoot":"","sources":["../../src/daemon/sessionlog-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAMvE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4CAA4C;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;IAC1B,qCAAqC;IACrC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAC;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,sBAAsB,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAC;IAErB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,oBAAoB;IACpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB,6BAA6B;IAC7B,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAEnD,wBAAwB;IACxB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAyFD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,uBAAuB,GAAG,iBAAiB,CAuO1F"}