@tonycasey/lisa 2.2.0 → 2.11.5

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 (413) hide show
  1. package/dist/lib/application/handlers/PromptSubmitHandler.d.ts +22 -12
  2. package/dist/lib/application/handlers/PromptSubmitHandler.d.ts.map +1 -1
  3. package/dist/lib/application/handlers/PromptSubmitHandler.js +36 -13
  4. package/dist/lib/application/handlers/PromptSubmitHandler.js.map +1 -1
  5. package/dist/lib/application/handlers/SessionStartHandler.d.ts +58 -5
  6. package/dist/lib/application/handlers/SessionStartHandler.d.ts.map +1 -1
  7. package/dist/lib/application/handlers/SessionStartHandler.js +259 -44
  8. package/dist/lib/application/handlers/SessionStartHandler.js.map +1 -1
  9. package/dist/lib/application/handlers/SessionStopHandler.d.ts +29 -5
  10. package/dist/lib/application/handlers/SessionStopHandler.d.ts.map +1 -1
  11. package/dist/lib/application/handlers/SessionStopHandler.js +83 -11
  12. package/dist/lib/application/handlers/SessionStopHandler.js.map +1 -1
  13. package/dist/lib/application/handlers/index.d.ts +1 -0
  14. package/dist/lib/application/handlers/index.d.ts.map +1 -1
  15. package/dist/lib/application/handlers/index.js +13 -1
  16. package/dist/lib/application/handlers/index.js.map +1 -1
  17. package/dist/lib/application/handlers/pr/PrAddressHandler.d.ts +103 -0
  18. package/dist/lib/application/handlers/pr/PrAddressHandler.d.ts.map +1 -0
  19. package/dist/lib/application/handlers/pr/PrAddressHandler.js +354 -0
  20. package/dist/lib/application/handlers/pr/PrAddressHandler.js.map +1 -0
  21. package/dist/lib/application/handlers/pr/PrChecksHandler.d.ts +64 -0
  22. package/dist/lib/application/handlers/pr/PrChecksHandler.d.ts.map +1 -0
  23. package/dist/lib/application/handlers/pr/PrChecksHandler.js +154 -0
  24. package/dist/lib/application/handlers/pr/PrChecksHandler.js.map +1 -0
  25. package/dist/lib/application/handlers/pr/PrCommentsHandler.d.ts +81 -0
  26. package/dist/lib/application/handlers/pr/PrCommentsHandler.d.ts.map +1 -0
  27. package/dist/lib/application/handlers/pr/PrCommentsHandler.js +184 -0
  28. package/dist/lib/application/handlers/pr/PrCommentsHandler.js.map +1 -0
  29. package/dist/lib/application/handlers/pr/PrCreateHandler.d.ts +78 -0
  30. package/dist/lib/application/handlers/pr/PrCreateHandler.d.ts.map +1 -0
  31. package/dist/lib/application/handlers/pr/PrCreateHandler.js +230 -0
  32. package/dist/lib/application/handlers/pr/PrCreateHandler.js.map +1 -0
  33. package/dist/lib/application/handlers/pr/PrLinkHandler.d.ts +75 -0
  34. package/dist/lib/application/handlers/pr/PrLinkHandler.d.ts.map +1 -0
  35. package/dist/lib/application/handlers/pr/PrLinkHandler.js +151 -0
  36. package/dist/lib/application/handlers/pr/PrLinkHandler.js.map +1 -0
  37. package/dist/lib/application/handlers/pr/PrPollHandler.d.ts +161 -0
  38. package/dist/lib/application/handlers/pr/PrPollHandler.d.ts.map +1 -0
  39. package/dist/lib/application/handlers/pr/PrPollHandler.js +674 -0
  40. package/dist/lib/application/handlers/pr/PrPollHandler.js.map +1 -0
  41. package/dist/lib/application/handlers/pr/PrRememberHandler.d.ts +55 -0
  42. package/dist/lib/application/handlers/pr/PrRememberHandler.d.ts.map +1 -0
  43. package/dist/lib/application/handlers/pr/PrRememberHandler.js +75 -0
  44. package/dist/lib/application/handlers/pr/PrRememberHandler.js.map +1 -0
  45. package/dist/lib/application/handlers/pr/PrReviewHandler.d.ts +103 -0
  46. package/dist/lib/application/handlers/pr/PrReviewHandler.d.ts.map +1 -0
  47. package/dist/lib/application/handlers/pr/PrReviewHandler.js +334 -0
  48. package/dist/lib/application/handlers/pr/PrReviewHandler.js.map +1 -0
  49. package/dist/lib/application/handlers/pr/PrStatusHandler.d.ts +150 -0
  50. package/dist/lib/application/handlers/pr/PrStatusHandler.d.ts.map +1 -0
  51. package/dist/lib/application/handlers/pr/PrStatusHandler.js +389 -0
  52. package/dist/lib/application/handlers/pr/PrStatusHandler.js.map +1 -0
  53. package/dist/lib/application/handlers/pr/PrWatchHandler.d.ts +77 -0
  54. package/dist/lib/application/handlers/pr/PrWatchHandler.d.ts.map +1 -0
  55. package/dist/lib/application/handlers/pr/PrWatchHandler.js +174 -0
  56. package/dist/lib/application/handlers/pr/PrWatchHandler.js.map +1 -0
  57. package/dist/lib/application/handlers/pr/index.d.ts +25 -0
  58. package/dist/lib/application/handlers/pr/index.d.ts.map +1 -0
  59. package/dist/lib/application/handlers/pr/index.js +38 -0
  60. package/dist/lib/application/handlers/pr/index.js.map +1 -0
  61. package/dist/lib/application/interfaces/index.d.ts +1 -0
  62. package/dist/lib/application/interfaces/index.d.ts.map +1 -1
  63. package/dist/lib/application/mediator/IMediator.d.ts +73 -0
  64. package/dist/lib/application/mediator/IMediator.d.ts.map +1 -0
  65. package/dist/lib/application/mediator/IMediator.js +12 -0
  66. package/dist/lib/application/mediator/IMediator.js.map +1 -0
  67. package/dist/lib/application/mediator/Mediator.d.ts +29 -0
  68. package/dist/lib/application/mediator/Mediator.d.ts.map +1 -0
  69. package/dist/lib/application/mediator/Mediator.js +53 -0
  70. package/dist/lib/application/mediator/Mediator.js.map +1 -0
  71. package/dist/lib/application/mediator/index.d.ts +10 -0
  72. package/dist/lib/application/mediator/index.d.ts.map +1 -0
  73. package/dist/lib/application/mediator/index.js +18 -0
  74. package/dist/lib/application/mediator/index.js.map +1 -0
  75. package/dist/lib/application/mediator/requests/PromptSubmitRequest.d.ts +60 -0
  76. package/dist/lib/application/mediator/requests/PromptSubmitRequest.d.ts.map +1 -0
  77. package/dist/lib/application/mediator/requests/PromptSubmitRequest.js +35 -0
  78. package/dist/lib/application/mediator/requests/PromptSubmitRequest.js.map +1 -0
  79. package/dist/lib/application/mediator/requests/SessionStartRequest.d.ts +36 -0
  80. package/dist/lib/application/mediator/requests/SessionStartRequest.d.ts.map +1 -0
  81. package/dist/lib/application/mediator/requests/SessionStartRequest.js +32 -0
  82. package/dist/lib/application/mediator/requests/SessionStartRequest.js.map +1 -0
  83. package/dist/lib/application/mediator/requests/SessionStopRequest.d.ts +67 -0
  84. package/dist/lib/application/mediator/requests/SessionStopRequest.d.ts.map +1 -0
  85. package/dist/lib/application/mediator/requests/SessionStopRequest.js +35 -0
  86. package/dist/lib/application/mediator/requests/SessionStopRequest.js.map +1 -0
  87. package/dist/lib/application/mediator/requests/index.d.ts +9 -0
  88. package/dist/lib/application/mediator/requests/index.d.ts.map +1 -0
  89. package/dist/lib/application/mediator/requests/index.js +13 -0
  90. package/dist/lib/application/mediator/requests/index.js.map +1 -0
  91. package/dist/lib/cli.d.ts +2 -44
  92. package/dist/lib/cli.d.ts.map +1 -1
  93. package/dist/lib/cli.js +1380 -597
  94. package/dist/lib/cli.js.map +1 -1
  95. package/dist/lib/commands/docker.d.ts +20 -0
  96. package/dist/lib/commands/docker.d.ts.map +1 -0
  97. package/dist/lib/commands/docker.js +27 -0
  98. package/dist/lib/commands/docker.js.map +1 -0
  99. package/dist/lib/commands/doctor.d.ts +94 -0
  100. package/dist/lib/commands/doctor.d.ts.map +1 -0
  101. package/dist/lib/commands/doctor.js +716 -0
  102. package/dist/lib/commands/doctor.js.map +1 -0
  103. package/dist/lib/commands/index.d.ts +10 -0
  104. package/dist/lib/commands/index.d.ts.map +1 -0
  105. package/dist/lib/commands/index.js +31 -0
  106. package/dist/lib/commands/index.js.map +1 -0
  107. package/dist/lib/commands/init.d.ts +37 -0
  108. package/dist/lib/commands/init.d.ts.map +1 -0
  109. package/dist/lib/commands/init.js +589 -0
  110. package/dist/lib/commands/init.js.map +1 -0
  111. package/dist/lib/commands/shared/constants.d.ts +27 -0
  112. package/dist/lib/commands/shared/constants.d.ts.map +1 -0
  113. package/dist/lib/commands/shared/constants.js +46 -0
  114. package/dist/lib/commands/shared/constants.js.map +1 -0
  115. package/dist/lib/commands/shared/index.d.ts +5 -0
  116. package/dist/lib/commands/shared/index.d.ts.map +1 -0
  117. package/dist/lib/commands/shared/index.js +15 -0
  118. package/dist/lib/commands/shared/index.js.map +1 -0
  119. package/dist/lib/domain/index.d.ts +4 -2
  120. package/dist/lib/domain/index.d.ts.map +1 -1
  121. package/dist/lib/domain/index.js +5 -2
  122. package/dist/lib/domain/index.js.map +1 -1
  123. package/dist/lib/domain/interfaces/ICronService.d.ts +100 -0
  124. package/dist/lib/domain/interfaces/ICronService.d.ts.map +1 -0
  125. package/dist/lib/domain/interfaces/ICronService.js +9 -0
  126. package/dist/lib/domain/interfaces/ICronService.js.map +1 -0
  127. package/dist/lib/domain/interfaces/ILabelInference.d.ts +62 -0
  128. package/dist/lib/domain/interfaces/ILabelInference.d.ts.map +1 -0
  129. package/dist/lib/domain/interfaces/ILabelInference.js +11 -0
  130. package/dist/lib/domain/interfaces/ILabelInference.js.map +1 -0
  131. package/dist/lib/domain/interfaces/ILisaServices.d.ts +6 -0
  132. package/dist/lib/domain/interfaces/ILisaServices.d.ts.map +1 -1
  133. package/dist/lib/domain/interfaces/IMcpClient.d.ts +15 -2
  134. package/dist/lib/domain/interfaces/IMcpClient.d.ts.map +1 -1
  135. package/dist/lib/domain/interfaces/IMemoryService.d.ts +11 -1
  136. package/dist/lib/domain/interfaces/IMemoryService.d.ts.map +1 -1
  137. package/dist/lib/domain/interfaces/INotificationService.d.ts +81 -0
  138. package/dist/lib/domain/interfaces/INotificationService.d.ts.map +1 -0
  139. package/dist/lib/domain/interfaces/INotificationService.js +9 -0
  140. package/dist/lib/domain/interfaces/INotificationService.js.map +1 -0
  141. package/dist/lib/domain/interfaces/ISessionCaptureService.d.ts +2 -1
  142. package/dist/lib/domain/interfaces/ISessionCaptureService.d.ts.map +1 -1
  143. package/dist/lib/domain/interfaces/IStructuredLog.d.ts +162 -0
  144. package/dist/lib/domain/interfaces/IStructuredLog.d.ts.map +1 -0
  145. package/dist/lib/domain/interfaces/IStructuredLog.js +85 -0
  146. package/dist/lib/domain/interfaces/IStructuredLog.js.map +1 -0
  147. package/dist/lib/domain/interfaces/dal/IGithubClient.d.ts +42 -0
  148. package/dist/lib/domain/interfaces/dal/IGithubClient.d.ts.map +1 -0
  149. package/dist/lib/domain/interfaces/dal/IGithubClient.js +12 -0
  150. package/dist/lib/domain/interfaces/dal/IGithubClient.js.map +1 -0
  151. package/dist/lib/domain/interfaces/dal/IPullRequestRepository.d.ts +124 -0
  152. package/dist/lib/domain/interfaces/dal/IPullRequestRepository.d.ts.map +1 -0
  153. package/dist/lib/domain/interfaces/dal/IPullRequestRepository.js +13 -0
  154. package/dist/lib/domain/interfaces/dal/IPullRequestRepository.js.map +1 -0
  155. package/dist/lib/domain/interfaces/dal/index.d.ts +2 -0
  156. package/dist/lib/domain/interfaces/dal/index.d.ts.map +1 -1
  157. package/dist/lib/domain/interfaces/dal/index.js.map +1 -1
  158. package/dist/lib/domain/interfaces/index.d.ts +5 -1
  159. package/dist/lib/domain/interfaces/index.d.ts.map +1 -1
  160. package/dist/lib/domain/interfaces/index.js +6 -0
  161. package/dist/lib/domain/interfaces/index.js.map +1 -1
  162. package/dist/lib/domain/interfaces/types/IPullRequest.d.ts +120 -0
  163. package/dist/lib/domain/interfaces/types/IPullRequest.d.ts.map +1 -0
  164. package/dist/lib/domain/interfaces/types/IPullRequest.js +42 -0
  165. package/dist/lib/domain/interfaces/types/IPullRequest.js.map +1 -0
  166. package/dist/lib/domain/interfaces/types/ITask.d.ts +16 -0
  167. package/dist/lib/domain/interfaces/types/ITask.d.ts.map +1 -1
  168. package/dist/lib/domain/interfaces/types/ITask.js.map +1 -1
  169. package/dist/lib/domain/interfaces/types/index.d.ts +1 -0
  170. package/dist/lib/domain/interfaces/types/index.d.ts.map +1 -1
  171. package/dist/lib/domain/interfaces/types/index.js +4 -1
  172. package/dist/lib/domain/interfaces/types/index.js.map +1 -1
  173. package/dist/lib/domain/utils/cancellation.d.ts +111 -0
  174. package/dist/lib/domain/utils/cancellation.d.ts.map +1 -0
  175. package/dist/lib/domain/utils/cancellation.js +168 -0
  176. package/dist/lib/domain/utils/cancellation.js.map +1 -0
  177. package/dist/lib/domain/utils/index.d.ts +8 -0
  178. package/dist/lib/domain/utils/index.d.ts.map +1 -0
  179. package/dist/lib/domain/utils/index.js +16 -0
  180. package/dist/lib/domain/utils/index.js.map +1 -0
  181. package/dist/lib/infrastructure/adapters/claude/session-start.d.ts +1 -1
  182. package/dist/lib/infrastructure/adapters/claude/session-start.js +9 -11
  183. package/dist/lib/infrastructure/adapters/claude/session-start.js.map +1 -1
  184. package/dist/lib/infrastructure/adapters/claude/session-stop.d.ts +1 -5
  185. package/dist/lib/infrastructure/adapters/claude/session-stop.d.ts.map +1 -1
  186. package/dist/lib/infrastructure/adapters/claude/session-stop.js +12 -15
  187. package/dist/lib/infrastructure/adapters/claude/session-stop.js.map +1 -1
  188. package/dist/lib/infrastructure/adapters/claude/user-prompt-submit.d.ts +1 -1
  189. package/dist/lib/infrastructure/adapters/claude/user-prompt-submit.js +9 -11
  190. package/dist/lib/infrastructure/adapters/claude/user-prompt-submit.js.map +1 -1
  191. package/dist/lib/infrastructure/adapters/opencode/plugin.d.ts +2 -2
  192. package/dist/lib/infrastructure/adapters/opencode/plugin.d.ts.map +1 -1
  193. package/dist/lib/infrastructure/adapters/opencode/plugin.js +16 -21
  194. package/dist/lib/infrastructure/adapters/opencode/plugin.js.map +1 -1
  195. package/dist/lib/infrastructure/cli/index.d.ts +8 -0
  196. package/dist/lib/infrastructure/cli/index.d.ts.map +1 -0
  197. package/dist/lib/infrastructure/cli/index.js +15 -0
  198. package/dist/lib/infrastructure/cli/index.js.map +1 -0
  199. package/dist/lib/infrastructure/cli/io.d.ts +91 -0
  200. package/dist/lib/infrastructure/cli/io.d.ts.map +1 -0
  201. package/dist/lib/infrastructure/cli/io.js +128 -0
  202. package/dist/lib/infrastructure/cli/io.js.map +1 -0
  203. package/dist/lib/infrastructure/cron/CronService.d.ts +87 -0
  204. package/dist/lib/infrastructure/cron/CronService.d.ts.map +1 -0
  205. package/dist/lib/infrastructure/cron/CronService.js +571 -0
  206. package/dist/lib/infrastructure/cron/CronService.js.map +1 -0
  207. package/dist/lib/infrastructure/cron/index.d.ts +5 -0
  208. package/dist/lib/infrastructure/cron/index.d.ts.map +1 -0
  209. package/dist/lib/infrastructure/cron/index.js +10 -0
  210. package/dist/lib/infrastructure/cron/index.js.map +1 -0
  211. package/dist/lib/infrastructure/dal/connections/McpConnectionManager.js +1 -1
  212. package/dist/lib/infrastructure/dal/connections/McpConnectionManager.js.map +1 -1
  213. package/dist/lib/infrastructure/dal/index.d.ts +1 -1
  214. package/dist/lib/infrastructure/dal/index.d.ts.map +1 -1
  215. package/dist/lib/infrastructure/dal/index.js +2 -1
  216. package/dist/lib/infrastructure/dal/index.js.map +1 -1
  217. package/dist/lib/infrastructure/dal/repositories/index.d.ts +1 -1
  218. package/dist/lib/infrastructure/dal/repositories/index.d.ts.map +1 -1
  219. package/dist/lib/infrastructure/dal/repositories/index.js +3 -2
  220. package/dist/lib/infrastructure/dal/repositories/index.js.map +1 -1
  221. package/dist/lib/infrastructure/dal/repositories/mcp/McpTaskRepository.d.ts.map +1 -1
  222. package/dist/lib/infrastructure/dal/repositories/mcp/McpTaskRepository.js +6 -2
  223. package/dist/lib/infrastructure/dal/repositories/mcp/McpTaskRepository.js.map +1 -1
  224. package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jPullRequestRepository.d.ts +54 -0
  225. package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jPullRequestRepository.d.ts.map +1 -0
  226. package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jPullRequestRepository.js +561 -0
  227. package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jPullRequestRepository.js.map +1 -0
  228. package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jTaskRepository.d.ts +5 -2
  229. package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jTaskRepository.d.ts.map +1 -1
  230. package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jTaskRepository.js +78 -45
  231. package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jTaskRepository.js.map +1 -1
  232. package/dist/lib/infrastructure/dal/repositories/neo4j/index.d.ts +1 -0
  233. package/dist/lib/infrastructure/dal/repositories/neo4j/index.d.ts.map +1 -1
  234. package/dist/lib/infrastructure/dal/repositories/neo4j/index.js +3 -1
  235. package/dist/lib/infrastructure/dal/repositories/neo4j/index.js.map +1 -1
  236. package/dist/lib/infrastructure/dal/repositories/zep/ZepTaskRepository.d.ts.map +1 -1
  237. package/dist/lib/infrastructure/dal/repositories/zep/ZepTaskRepository.js +6 -2
  238. package/dist/lib/infrastructure/dal/repositories/zep/ZepTaskRepository.js.map +1 -1
  239. package/dist/lib/infrastructure/di/Container.d.ts +72 -0
  240. package/dist/lib/infrastructure/di/Container.d.ts.map +1 -0
  241. package/dist/lib/infrastructure/di/Container.js +182 -0
  242. package/dist/lib/infrastructure/di/Container.js.map +1 -0
  243. package/dist/lib/infrastructure/di/IContainer.d.ts +87 -0
  244. package/dist/lib/infrastructure/di/IContainer.d.ts.map +1 -0
  245. package/dist/lib/infrastructure/di/IContainer.js +11 -0
  246. package/dist/lib/infrastructure/di/IContainer.js.map +1 -0
  247. package/dist/lib/infrastructure/di/ServiceFactory.d.ts +6 -0
  248. package/dist/lib/infrastructure/di/ServiceFactory.d.ts.map +1 -1
  249. package/dist/lib/infrastructure/di/ServiceFactory.js +66 -0
  250. package/dist/lib/infrastructure/di/ServiceFactory.js.map +1 -1
  251. package/dist/lib/infrastructure/di/bootstrap.d.ts +43 -0
  252. package/dist/lib/infrastructure/di/bootstrap.d.ts.map +1 -0
  253. package/dist/lib/infrastructure/di/bootstrap.js +272 -0
  254. package/dist/lib/infrastructure/di/bootstrap.js.map +1 -0
  255. package/dist/lib/infrastructure/di/index.d.ts +6 -0
  256. package/dist/lib/infrastructure/di/index.d.ts.map +1 -1
  257. package/dist/lib/infrastructure/di/index.js +15 -1
  258. package/dist/lib/infrastructure/di/index.js.map +1 -1
  259. package/dist/lib/infrastructure/di/tokens.d.ts +70 -0
  260. package/dist/lib/infrastructure/di/tokens.d.ts.map +1 -0
  261. package/dist/lib/infrastructure/di/tokens.js +58 -0
  262. package/dist/lib/infrastructure/di/tokens.js.map +1 -0
  263. package/dist/lib/infrastructure/github/GithubClient.d.ts +129 -0
  264. package/dist/lib/infrastructure/github/GithubClient.d.ts.map +1 -0
  265. package/dist/lib/infrastructure/github/GithubClient.js +549 -0
  266. package/dist/lib/infrastructure/github/GithubClient.js.map +1 -0
  267. package/dist/lib/infrastructure/github/index.d.ts +8 -0
  268. package/dist/lib/infrastructure/github/index.d.ts.map +1 -0
  269. package/dist/lib/infrastructure/github/index.js +13 -0
  270. package/dist/lib/infrastructure/github/index.js.map +1 -0
  271. package/dist/lib/infrastructure/github/types.d.ts +145 -0
  272. package/dist/lib/infrastructure/github/types.d.ts.map +1 -0
  273. package/dist/lib/infrastructure/github/types.js +25 -0
  274. package/dist/lib/infrastructure/github/types.js.map +1 -0
  275. package/dist/lib/infrastructure/index.d.ts +4 -0
  276. package/dist/lib/infrastructure/index.d.ts.map +1 -1
  277. package/dist/lib/infrastructure/index.js +8 -0
  278. package/dist/lib/infrastructure/index.js.map +1 -1
  279. package/dist/lib/infrastructure/logging/Logger.d.ts +51 -4
  280. package/dist/lib/infrastructure/logging/Logger.d.ts.map +1 -1
  281. package/dist/lib/infrastructure/logging/Logger.js +127 -2
  282. package/dist/lib/infrastructure/logging/Logger.js.map +1 -1
  283. package/dist/lib/infrastructure/mcp/McpClient.d.ts +36 -1
  284. package/dist/lib/infrastructure/mcp/McpClient.d.ts.map +1 -1
  285. package/dist/lib/infrastructure/mcp/McpClient.js +68 -2
  286. package/dist/lib/infrastructure/mcp/McpClient.js.map +1 -1
  287. package/dist/lib/infrastructure/notifications/NotificationService.d.ts +90 -0
  288. package/dist/lib/infrastructure/notifications/NotificationService.d.ts.map +1 -0
  289. package/dist/lib/infrastructure/notifications/NotificationService.js +445 -0
  290. package/dist/lib/infrastructure/notifications/NotificationService.js.map +1 -0
  291. package/dist/lib/infrastructure/notifications/index.d.ts +7 -0
  292. package/dist/lib/infrastructure/notifications/index.d.ts.map +1 -0
  293. package/dist/lib/infrastructure/notifications/index.js +12 -0
  294. package/dist/lib/infrastructure/notifications/index.js.map +1 -0
  295. package/dist/lib/infrastructure/services/LabelInferenceService.d.ts +33 -0
  296. package/dist/lib/infrastructure/services/LabelInferenceService.d.ts.map +1 -0
  297. package/dist/lib/infrastructure/services/LabelInferenceService.js +225 -0
  298. package/dist/lib/infrastructure/services/LabelInferenceService.js.map +1 -0
  299. package/dist/lib/infrastructure/services/MemoryService.d.ts +23 -2
  300. package/dist/lib/infrastructure/services/MemoryService.d.ts.map +1 -1
  301. package/dist/lib/infrastructure/services/MemoryService.js +150 -55
  302. package/dist/lib/infrastructure/services/MemoryService.js.map +1 -1
  303. package/dist/lib/infrastructure/services/SessionCaptureService.d.ts +74 -20
  304. package/dist/lib/infrastructure/services/SessionCaptureService.d.ts.map +1 -1
  305. package/dist/lib/infrastructure/services/SessionCaptureService.js +331 -22
  306. package/dist/lib/infrastructure/services/SessionCaptureService.js.map +1 -1
  307. package/dist/lib/infrastructure/services/index.d.ts +1 -0
  308. package/dist/lib/infrastructure/services/index.d.ts.map +1 -1
  309. package/dist/lib/infrastructure/services/index.js +4 -1
  310. package/dist/lib/infrastructure/services/index.js.map +1 -1
  311. package/dist/lib/infrastructure/utils/index.d.ts +10 -0
  312. package/dist/lib/infrastructure/utils/index.d.ts.map +1 -0
  313. package/dist/lib/infrastructure/utils/index.js +26 -0
  314. package/dist/lib/infrastructure/utils/index.js.map +1 -0
  315. package/dist/lib/skills/common/type-mappings.d.ts.map +1 -1
  316. package/dist/lib/skills/common/type-mappings.js +6 -0
  317. package/dist/lib/skills/common/type-mappings.js.map +1 -1
  318. package/dist/lib/skills/github/github.d.ts +27 -0
  319. package/dist/lib/skills/github/github.d.ts.map +1 -0
  320. package/dist/lib/skills/github/github.js +408 -0
  321. package/dist/lib/skills/github/github.js.map +1 -0
  322. package/dist/lib/skills/memory/memory.js +3 -1
  323. package/dist/lib/skills/memory/memory.js.map +1 -1
  324. package/dist/lib/skills/shared/clients/GhCliClient.d.ts +17 -0
  325. package/dist/lib/skills/shared/clients/GhCliClient.d.ts.map +1 -0
  326. package/dist/lib/skills/shared/clients/GhCliClient.js +244 -0
  327. package/dist/lib/skills/shared/clients/GhCliClient.js.map +1 -0
  328. package/dist/lib/skills/shared/clients/McpClient.d.ts +12 -0
  329. package/dist/lib/skills/shared/clients/McpClient.d.ts.map +1 -1
  330. package/dist/lib/skills/shared/clients/McpClient.js +121 -76
  331. package/dist/lib/skills/shared/clients/McpClient.js.map +1 -1
  332. package/dist/lib/skills/shared/clients/Neo4jClient.d.ts.map +1 -1
  333. package/dist/lib/skills/shared/clients/Neo4jClient.js +12 -1
  334. package/dist/lib/skills/shared/clients/Neo4jClient.js.map +1 -1
  335. package/dist/lib/skills/shared/clients/index.d.ts +1 -0
  336. package/dist/lib/skills/shared/clients/index.d.ts.map +1 -1
  337. package/dist/lib/skills/shared/clients/index.js +4 -1
  338. package/dist/lib/skills/shared/clients/index.js.map +1 -1
  339. package/dist/lib/skills/shared/clients/interfaces/IGhCliClient.d.ts +56 -0
  340. package/dist/lib/skills/shared/clients/interfaces/IGhCliClient.d.ts.map +1 -0
  341. package/dist/lib/skills/shared/clients/interfaces/IGhCliClient.js +7 -0
  342. package/dist/lib/skills/shared/clients/interfaces/IGhCliClient.js.map +1 -0
  343. package/dist/lib/skills/shared/clients/interfaces/IZepClient.d.ts +7 -1
  344. package/dist/lib/skills/shared/clients/interfaces/IZepClient.d.ts.map +1 -1
  345. package/dist/lib/skills/shared/clients/interfaces/index.d.ts +1 -0
  346. package/dist/lib/skills/shared/clients/interfaces/index.d.ts.map +1 -1
  347. package/dist/lib/skills/shared/clients/interfaces/index.js +1 -0
  348. package/dist/lib/skills/shared/clients/interfaces/index.js.map +1 -1
  349. package/dist/lib/skills/shared/services/GitHubService.d.ts +169 -0
  350. package/dist/lib/skills/shared/services/GitHubService.d.ts.map +1 -0
  351. package/dist/lib/skills/shared/services/GitHubService.js +493 -0
  352. package/dist/lib/skills/shared/services/GitHubService.js.map +1 -0
  353. package/dist/lib/skills/shared/services/GitHubSyncService.d.ts +124 -0
  354. package/dist/lib/skills/shared/services/GitHubSyncService.d.ts.map +1 -0
  355. package/dist/lib/skills/shared/services/GitHubSyncService.js +412 -0
  356. package/dist/lib/skills/shared/services/GitHubSyncService.js.map +1 -0
  357. package/dist/lib/skills/shared/services/MemoryCliService.d.ts +2 -0
  358. package/dist/lib/skills/shared/services/MemoryCliService.d.ts.map +1 -1
  359. package/dist/lib/skills/shared/services/MemoryCliService.js +19 -2
  360. package/dist/lib/skills/shared/services/MemoryCliService.js.map +1 -1
  361. package/dist/lib/skills/shared/services/MemoryService.d.ts.map +1 -1
  362. package/dist/lib/skills/shared/services/MemoryService.js +26 -7
  363. package/dist/lib/skills/shared/services/MemoryService.js.map +1 -1
  364. package/dist/lib/skills/shared/services/TaskCliService.d.ts +6 -2
  365. package/dist/lib/skills/shared/services/TaskCliService.d.ts.map +1 -1
  366. package/dist/lib/skills/shared/services/TaskCliService.js +108 -7
  367. package/dist/lib/skills/shared/services/TaskCliService.js.map +1 -1
  368. package/dist/lib/skills/shared/services/TaskService.d.ts.map +1 -1
  369. package/dist/lib/skills/shared/services/TaskService.js +272 -42
  370. package/dist/lib/skills/shared/services/TaskService.js.map +1 -1
  371. package/dist/lib/skills/shared/services/index.d.ts +2 -0
  372. package/dist/lib/skills/shared/services/index.d.ts.map +1 -1
  373. package/dist/lib/skills/shared/services/index.js +7 -1
  374. package/dist/lib/skills/shared/services/index.js.map +1 -1
  375. package/dist/lib/skills/shared/services/interfaces/IMemoryService.d.ts +9 -1
  376. package/dist/lib/skills/shared/services/interfaces/IMemoryService.d.ts.map +1 -1
  377. package/dist/lib/skills/shared/services/interfaces/ITaskService.d.ts +65 -2
  378. package/dist/lib/skills/shared/services/interfaces/ITaskService.d.ts.map +1 -1
  379. package/dist/lib/skills/shared/utils/index.d.ts +1 -0
  380. package/dist/lib/skills/shared/utils/index.d.ts.map +1 -1
  381. package/dist/lib/skills/shared/utils/index.js +9 -1
  382. package/dist/lib/skills/shared/utils/index.js.map +1 -1
  383. package/dist/lib/skills/shared/utils/issue-refs.d.ts +127 -0
  384. package/dist/lib/skills/shared/utils/issue-refs.d.ts.map +1 -0
  385. package/dist/lib/skills/shared/utils/issue-refs.js +179 -0
  386. package/dist/lib/skills/shared/utils/issue-refs.js.map +1 -0
  387. package/dist/lib/skills/tasks/tasks.d.ts +5 -2
  388. package/dist/lib/skills/tasks/tasks.d.ts.map +1 -1
  389. package/dist/lib/skills/tasks/tasks.js +10 -3
  390. package/dist/lib/skills/tasks/tasks.js.map +1 -1
  391. package/dist/lib/utils/dateParser.d.ts +50 -0
  392. package/dist/lib/utils/dateParser.d.ts.map +1 -0
  393. package/dist/lib/utils/dateParser.js +152 -0
  394. package/dist/lib/utils/dateParser.js.map +1 -0
  395. package/dist/lib/utils/index.d.ts +5 -0
  396. package/dist/lib/utils/index.d.ts.map +1 -0
  397. package/dist/lib/utils/index.js +14 -0
  398. package/dist/lib/utils/index.js.map +1 -0
  399. package/dist/opencode/lisa.js +8627 -1312
  400. package/dist/package.json +1 -1
  401. package/dist/project/.lisa/assets/lisa-toast.png +0 -0
  402. package/dist/project/.lisa/rules/shared/git-rules.md +160 -47
  403. package/dist/project/.lisa/rules/shared/memory-rules.md +125 -0
  404. package/dist/project/.lisa/rules/shared/task-rules.md +209 -0
  405. package/dist/project/.lisa/skills/github/SKILL.md +415 -0
  406. package/dist/project/.lisa/skills/lisa/SKILL.md +22 -0
  407. package/dist/project/.lisa/skills/memory/SKILL.md +3 -2
  408. package/dist/project/.lisa/skills/pr/SKILL.md +520 -0
  409. package/package.json +6 -5
  410. package/dist/hooks/session-start.js +0 -5763
  411. package/dist/hooks/session-stop.js +0 -5348
  412. package/dist/hooks/user-prompt-submit.js +0 -5406
  413. package/dist/project/.claude/config.js +0 -40
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ /**
3
+ * PR Create Handler
4
+ *
5
+ * Creates a PR with auto-generated body, issue linking, and auto-watch.
6
+ * Supports branch name parsing for issue detection.
7
+ *
8
+ * @see .dev/features/github-pr.md for full specification
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.PrCreateHandler = void 0;
12
+ /**
13
+ * Handler for creating PRs with auto-generated content.
14
+ */
15
+ class PrCreateHandler {
16
+ constructor(githubClient, prRepository) {
17
+ this.githubClient = githubClient;
18
+ this.prRepository = prRepository;
19
+ }
20
+ /**
21
+ * Create a PR with auto-generated body and issue linking.
22
+ */
23
+ async execute(options = {}) {
24
+ try {
25
+ // 1. Get repo and branch info
26
+ const repo = await this.githubClient.getCurrentRepo();
27
+ const currentBranch = options.head || await this.githubClient.getCurrentBranch();
28
+ const baseBranch = options.base || await this.githubClient.getDefaultBranch(repo);
29
+ // 2. Parse issue numbers from branch name if not provided
30
+ const issues = options.issues || this.parseIssuesFromBranch(currentBranch);
31
+ // 3. Get issue details for title and linking
32
+ let title = options.title;
33
+ const issueDetails = [];
34
+ for (const issueNumber of issues) {
35
+ try {
36
+ const issue = await this.githubClient.getIssue(repo, issueNumber);
37
+ issueDetails.push({ number: issue.number, title: issue.title });
38
+ // Use first linked issue's title if no title provided
39
+ if (!title) {
40
+ title = issue.title;
41
+ }
42
+ }
43
+ catch {
44
+ // Issue doesn't exist, skip
45
+ }
46
+ }
47
+ // 4. Generate title from commits if still not set
48
+ if (!title) {
49
+ const commits = await this.githubClient.getCommitMessages(`origin/${baseBranch}`, currentBranch);
50
+ title = commits[0] || `Changes from ${currentBranch}`;
51
+ }
52
+ // 5. Generate PR body
53
+ const body = await this.generatePrBody(repo, baseBranch, currentBranch, issueDetails);
54
+ // 6. Create the PR
55
+ const pr = await this.githubClient.createPr({
56
+ repo,
57
+ title,
58
+ body,
59
+ base: baseBranch,
60
+ head: currentBranch,
61
+ draft: options.draft,
62
+ });
63
+ // 7. Comment on linked issues
64
+ if (!options.noComment && issueDetails.length > 0) {
65
+ await this.commentOnLinkedIssues(repo, pr.number, issueDetails);
66
+ }
67
+ // 8. Auto-watch the PR (also upserts PR node for relationship linking)
68
+ if (!options.noWatch) {
69
+ await this.watchPr(repo, pr);
70
+ }
71
+ // 9. Create Neo4j relationships (requires PR node to exist)
72
+ // Only create relationships if watching is enabled (PR node exists)
73
+ if (!options.noWatch && issueDetails.length > 0) {
74
+ await this.createNeo4jRelationships(repo, pr, issueDetails);
75
+ }
76
+ return {
77
+ success: true,
78
+ message: `Created PR #${pr.number}: ${pr.url}`,
79
+ pr: {
80
+ number: pr.number,
81
+ url: pr.url,
82
+ title: pr.title,
83
+ repo,
84
+ },
85
+ linkedIssues: issueDetails.map(i => i.number),
86
+ body,
87
+ };
88
+ }
89
+ catch (error) {
90
+ const message = error instanceof Error ? error.message : String(error);
91
+ return {
92
+ success: false,
93
+ message: `Failed to create PR: ${message}`,
94
+ };
95
+ }
96
+ }
97
+ /**
98
+ * Parse issue numbers from branch name.
99
+ * Supports formats: "15", "15-description", "feature/15", "feature/15-description"
100
+ */
101
+ parseIssuesFromBranch(branch) {
102
+ const issues = [];
103
+ // Try to extract issue number from common patterns
104
+ // Pattern 1: Just the number "15"
105
+ if (/^\d+$/.test(branch)) {
106
+ issues.push(parseInt(branch, 10));
107
+ return issues;
108
+ }
109
+ // Pattern 2: Number at start "15-description"
110
+ const startMatch = branch.match(/^(\d+)[-_]/);
111
+ if (startMatch) {
112
+ issues.push(parseInt(startMatch[1], 10));
113
+ return issues;
114
+ }
115
+ // Pattern 3: After slash "feature/15" or "feature/15-description"
116
+ const slashMatch = branch.match(/\/(\d+)(?:[-_]|$)/);
117
+ if (slashMatch) {
118
+ issues.push(parseInt(slashMatch[1], 10));
119
+ return issues;
120
+ }
121
+ // Pattern 4: Issue references in branch name "#15" or "issue-15"
122
+ const hashMatch = branch.match(/#(\d+)/g);
123
+ if (hashMatch) {
124
+ for (const match of hashMatch) {
125
+ issues.push(parseInt(match.slice(1), 10));
126
+ }
127
+ return issues;
128
+ }
129
+ const issueMatch = branch.match(/issue[-_]?(\d+)/i);
130
+ if (issueMatch) {
131
+ issues.push(parseInt(issueMatch[1], 10));
132
+ }
133
+ return issues;
134
+ }
135
+ /**
136
+ * Generate PR body with summary, test coverage, and linked issues.
137
+ */
138
+ async generatePrBody(repo, baseBranch, headBranch, issues) {
139
+ const sections = [];
140
+ // Summary section from commits
141
+ const commits = await this.githubClient.getCommitMessages(`origin/${baseBranch}`, headBranch);
142
+ if (commits.length > 0) {
143
+ sections.push('## Summary');
144
+ for (const commit of commits.slice(0, 10)) { // Limit to 10 commits
145
+ sections.push(`- ${commit}`);
146
+ }
147
+ if (commits.length > 10) {
148
+ sections.push(`- ... and ${commits.length - 10} more commits`);
149
+ }
150
+ sections.push('');
151
+ }
152
+ // Test coverage section
153
+ const changedFiles = await this.githubClient.getChangedFiles(`origin/${baseBranch}`, headBranch);
154
+ const testFiles = changedFiles.filter(f => f.includes('.test.') ||
155
+ f.includes('.spec.') ||
156
+ f.includes('__tests__') ||
157
+ f.startsWith('tests/'));
158
+ if (testFiles.length > 0) {
159
+ sections.push('## Test Coverage');
160
+ for (const file of testFiles) {
161
+ sections.push(`- \`${file}\``);
162
+ }
163
+ sections.push('');
164
+ }
165
+ // Linked issues section
166
+ if (issues.length > 0) {
167
+ sections.push('## Linked Issues');
168
+ for (const issue of issues) {
169
+ sections.push(`Closes #${issue.number}`);
170
+ }
171
+ sections.push('');
172
+ }
173
+ return sections.join('\n').trim();
174
+ }
175
+ /**
176
+ * Comment on linked issues with PR reference.
177
+ */
178
+ async commentOnLinkedIssues(repo, prNumber, issues) {
179
+ for (const issue of issues) {
180
+ try {
181
+ await this.githubClient.commentOnIssue(repo, issue.number, `PR: #${prNumber}`);
182
+ }
183
+ catch {
184
+ // Ignore errors commenting on issues
185
+ }
186
+ }
187
+ }
188
+ /**
189
+ * Add PR to watch list.
190
+ */
191
+ async watchPr(repo, pr) {
192
+ try {
193
+ const userId = await this.prRepository.getUserId();
194
+ await this.prRepository.upsertPr(userId, {
195
+ number: pr.number,
196
+ repo,
197
+ title: pr.title,
198
+ status: pr.isDraft ? 'open' : 'open',
199
+ watching: true,
200
+ });
201
+ }
202
+ catch {
203
+ // Ignore errors watching PR
204
+ }
205
+ }
206
+ /**
207
+ * Create Neo4j nodes and CLOSES relationships.
208
+ */
209
+ async createNeo4jRelationships(repo, pr, issues) {
210
+ try {
211
+ const userId = await this.prRepository.getUserId();
212
+ // Upsert issues
213
+ for (const issue of issues) {
214
+ await this.prRepository.upsertIssue(userId, {
215
+ number: issue.number,
216
+ repo,
217
+ title: issue.title,
218
+ url: `https://github.com/${repo}/issues/${issue.number}`,
219
+ });
220
+ }
221
+ // Create CLOSES relationships
222
+ await this.prRepository.linkPrToIssues(userId, repo, pr.number, issues.map(i => i.number));
223
+ }
224
+ catch {
225
+ // Ignore errors creating relationships
226
+ }
227
+ }
228
+ }
229
+ exports.PrCreateHandler = PrCreateHandler;
230
+ //# sourceMappingURL=PrCreateHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrCreateHandler.js","sourceRoot":"","sources":["../../../../../src/lib/application/handlers/pr/PrCreateHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * PR Link Handler
3
+ *
4
+ * Links a PR to an issue, creating a CLOSES relationship in Neo4j
5
+ * and optionally commenting on the GitHub issue.
6
+ *
7
+ * @see .dev/features/github-pr.md for full specification
8
+ */
9
+ import type { IGithubClient } from '../../../domain/interfaces/dal/IGithubClient';
10
+ import type { IPullRequestRepository } from '../../../domain/interfaces/dal/IPullRequestRepository';
11
+ /**
12
+ * Options for PR link operation.
13
+ */
14
+ export interface IPrLinkOptions {
15
+ /** Repository in owner/repo format. Uses current repo if not provided. */
16
+ readonly repo?: string;
17
+ /** PR number to link. */
18
+ readonly prNumber: number;
19
+ /** Issue number to link to. */
20
+ readonly issueNumber: number;
21
+ /** Skip commenting on the GitHub issue. */
22
+ readonly noComment?: boolean;
23
+ }
24
+ /**
25
+ * PR info in link result.
26
+ */
27
+ export interface IPrLinkPrInfo {
28
+ readonly number: number;
29
+ readonly repo: string;
30
+ readonly title: string;
31
+ readonly url: string;
32
+ }
33
+ /**
34
+ * Issue info in link result.
35
+ */
36
+ export interface IPrLinkIssueInfo {
37
+ readonly number: number;
38
+ readonly repo: string;
39
+ readonly title: string;
40
+ readonly url: string;
41
+ }
42
+ /**
43
+ * Result from PrLinkHandler.
44
+ */
45
+ export interface IPrLinkResult {
46
+ readonly success: boolean;
47
+ readonly message: string;
48
+ /** PR details if successful. */
49
+ readonly pr?: IPrLinkPrInfo;
50
+ /** Issue details if successful. */
51
+ readonly issue?: IPrLinkIssueInfo;
52
+ /** True if the PR was already linked to this issue. */
53
+ readonly alreadyLinked: boolean;
54
+ }
55
+ /**
56
+ * Handler for linking PRs to issues.
57
+ */
58
+ export declare class PrLinkHandler {
59
+ private readonly githubClient;
60
+ private readonly prRepository;
61
+ constructor(githubClient: IGithubClient, prRepository: IPullRequestRepository);
62
+ /**
63
+ * Link a PR to an issue.
64
+ *
65
+ * Creates a CLOSES relationship in Neo4j and optionally comments
66
+ * on the GitHub issue. Idempotent - linking an already-linked
67
+ * PR/issue pair returns success with alreadyLinked=true.
68
+ */
69
+ execute(options: IPrLinkOptions): Promise<IPrLinkResult>;
70
+ /**
71
+ * Map GitHub PR state to domain status.
72
+ */
73
+ private mapPrStatus;
74
+ }
75
+ //# sourceMappingURL=PrLinkHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrLinkHandler.d.ts","sourceRoot":"","sources":["../../../../../src/lib/application/handlers/pr/PrLinkHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uDAAuD,CAAC;AAEpG;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,2CAA2C;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC;IAC5B,mCAAmC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAClC,uDAAuD;IACvD,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAED;;GAEG;AACH,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,YAAY,EAAE,aAAa,EAC3B,YAAY,EAAE,sBAAsB;IAGvD;;;;;;OAMG;IACG,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IA8H9D;;OAEG;IACH,OAAO,CAAC,WAAW;CAWpB"}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ /**
3
+ * PR Link Handler
4
+ *
5
+ * Links a PR to an issue, creating a CLOSES relationship in Neo4j
6
+ * and optionally commenting on the GitHub issue.
7
+ *
8
+ * @see .dev/features/github-pr.md for full specification
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.PrLinkHandler = void 0;
12
+ /**
13
+ * Handler for linking PRs to issues.
14
+ */
15
+ class PrLinkHandler {
16
+ constructor(githubClient, prRepository) {
17
+ this.githubClient = githubClient;
18
+ this.prRepository = prRepository;
19
+ }
20
+ /**
21
+ * Link a PR to an issue.
22
+ *
23
+ * Creates a CLOSES relationship in Neo4j and optionally comments
24
+ * on the GitHub issue. Idempotent - linking an already-linked
25
+ * PR/issue pair returns success with alreadyLinked=true.
26
+ */
27
+ async execute(options) {
28
+ const { prNumber, issueNumber, noComment } = options;
29
+ try {
30
+ // 1. Resolve repository
31
+ const repo = options.repo || await this.githubClient.getCurrentRepo();
32
+ // 2. Validate PR exists on GitHub
33
+ const ghPr = await this.githubClient.getPr(repo, prNumber);
34
+ if (!ghPr) {
35
+ return {
36
+ success: false,
37
+ message: `PR #${prNumber} not found in repository ${repo}`,
38
+ alreadyLinked: false,
39
+ };
40
+ }
41
+ // 3. Validate Issue exists on GitHub
42
+ const ghIssue = await this.githubClient.getIssue(repo, issueNumber);
43
+ if (!ghIssue) {
44
+ return {
45
+ success: false,
46
+ message: `Issue #${issueNumber} not found in repository ${repo}`,
47
+ alreadyLinked: false,
48
+ };
49
+ }
50
+ // 4. Get user ID for Neo4j scoping
51
+ const userId = await this.prRepository.getUserId();
52
+ // 5. Ensure PR node exists in Neo4j
53
+ const existingPr = await this.prRepository.findPr(userId, repo, prNumber);
54
+ if (!existingPr) {
55
+ await this.prRepository.upsertPr(userId, {
56
+ number: prNumber,
57
+ repo,
58
+ title: ghPr.title,
59
+ status: this.mapPrStatus(ghPr.state),
60
+ watching: false,
61
+ });
62
+ }
63
+ // 6. Upsert Issue node in Neo4j
64
+ await this.prRepository.upsertIssue(userId, {
65
+ number: issueNumber,
66
+ repo,
67
+ title: ghIssue.title,
68
+ url: ghIssue.url,
69
+ });
70
+ // 7. Check existing linked issues
71
+ const existingIssues = await this.prRepository.findIssuesByPr(userId, repo, prNumber);
72
+ const alreadyLinked = existingIssues.some(i => i.number === issueNumber);
73
+ if (alreadyLinked) {
74
+ return {
75
+ success: true,
76
+ message: `PR #${prNumber} is already linked to Issue #${issueNumber}`,
77
+ pr: {
78
+ number: prNumber,
79
+ repo,
80
+ title: ghPr.title,
81
+ url: `https://github.com/${repo}/pull/${prNumber}`,
82
+ },
83
+ issue: {
84
+ number: issueNumber,
85
+ repo,
86
+ title: ghIssue.title,
87
+ url: ghIssue.url,
88
+ },
89
+ alreadyLinked: true,
90
+ };
91
+ }
92
+ // 8. Link PR to issues (preserve existing + add new)
93
+ const existingIssueNumbers = existingIssues.map(i => i.number);
94
+ const allIssueNumbers = [...existingIssueNumbers, issueNumber];
95
+ await this.prRepository.linkPrToIssues(userId, repo, prNumber, allIssueNumbers);
96
+ // 9. Comment on GitHub issue (unless noComment)
97
+ if (!noComment) {
98
+ try {
99
+ await this.githubClient.commentOnIssue(repo, issueNumber, `Linked to PR #${prNumber}`);
100
+ }
101
+ catch (commentError) {
102
+ // Log but don't fail the operation if comment fails
103
+ // The Neo4j link was successful
104
+ console.warn(`Warning: Failed to comment on issue #${issueNumber}: ${commentError instanceof Error ? commentError.message : String(commentError)}`);
105
+ }
106
+ }
107
+ // 10. Return success
108
+ return {
109
+ success: true,
110
+ message: `Linked PR #${prNumber} to Issue #${issueNumber}`,
111
+ pr: {
112
+ number: prNumber,
113
+ repo,
114
+ title: ghPr.title,
115
+ url: `https://github.com/${repo}/pull/${prNumber}`,
116
+ },
117
+ issue: {
118
+ number: issueNumber,
119
+ repo,
120
+ title: ghIssue.title,
121
+ url: ghIssue.url,
122
+ },
123
+ alreadyLinked: false,
124
+ };
125
+ }
126
+ catch (error) {
127
+ const message = error instanceof Error ? error.message : String(error);
128
+ return {
129
+ success: false,
130
+ message: `Failed to link PR #${prNumber} to Issue #${issueNumber}: ${message}`,
131
+ alreadyLinked: false,
132
+ };
133
+ }
134
+ }
135
+ /**
136
+ * Map GitHub PR state to domain status.
137
+ */
138
+ mapPrStatus(state) {
139
+ switch (state) {
140
+ case 'MERGED':
141
+ return 'merged';
142
+ case 'CLOSED':
143
+ return 'closed';
144
+ case 'OPEN':
145
+ default:
146
+ return 'open';
147
+ }
148
+ }
149
+ }
150
+ exports.PrLinkHandler = PrLinkHandler;
151
+ //# sourceMappingURL=PrLinkHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrLinkHandler.js","sourceRoot":"","sources":["../../../../../src/lib/application/handlers/pr/PrLinkHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * PR Poll Handler
3
+ *
4
+ * Polls all watched PRs for a user and detects state changes.
5
+ * Designed to be invoked by cron (no TTY) every 5 minutes.
6
+ *
7
+ * User-scoped: polls ALL watched PRs across all repos in a single invocation.
8
+ *
9
+ * @see .dev/features/github-pr.md for full specification
10
+ */
11
+ import type { IGithubClient } from '../../../domain/interfaces/dal/IGithubClient';
12
+ import type { IPullRequestRepository } from '../../../domain/interfaces/dal/IPullRequestRepository';
13
+ import type { CheckStatus, PullRequestStatus } from '../../../domain/interfaces/types/IPullRequest';
14
+ import type { INotificationService } from '../../../domain/interfaces/INotificationService';
15
+ import type { IMemoryWriter } from '../../../domain/interfaces/IMemoryService';
16
+ /**
17
+ * State change detected during polling.
18
+ */
19
+ export interface IStateChange {
20
+ readonly type: 'checks_updated' | 'new_comment' | 'comment_resolved' | 'pr_approved' | 'pr_merged' | 'pr_closed' | 'new_reply';
21
+ readonly description: string;
22
+ readonly prNumber: number;
23
+ readonly repo: string;
24
+ }
25
+ /**
26
+ * Result for a single PR poll.
27
+ */
28
+ export interface IPrPollItem {
29
+ readonly number: number;
30
+ readonly repo: string;
31
+ readonly title: string;
32
+ readonly previousState: {
33
+ readonly status: PullRequestStatus;
34
+ readonly checksStatus: CheckStatus;
35
+ readonly unresolvedComments: number;
36
+ };
37
+ readonly currentState: {
38
+ readonly status: PullRequestStatus;
39
+ readonly checksStatus: CheckStatus;
40
+ readonly unresolvedComments: number;
41
+ };
42
+ readonly changes: readonly IStateChange[];
43
+ readonly unwatched: boolean;
44
+ readonly error?: string;
45
+ }
46
+ /**
47
+ * Result from PrPollHandler.
48
+ */
49
+ export interface IPrPollResult {
50
+ readonly success: boolean;
51
+ readonly message: string;
52
+ readonly polledAt: string;
53
+ readonly totalWatched: number;
54
+ readonly totalChanges: number;
55
+ readonly totalErrors: number;
56
+ readonly items: readonly IPrPollItem[];
57
+ readonly logPath?: string;
58
+ /** Auto-address output for PRs with new comments (when autoAddress is enabled) */
59
+ readonly addressOutput?: readonly IAutoAddressOutput[];
60
+ }
61
+ /**
62
+ * Auto-address output for a single PR.
63
+ */
64
+ export interface IAutoAddressOutput {
65
+ readonly prNumber: number;
66
+ readonly repo: string;
67
+ readonly formattedOutput: string;
68
+ }
69
+ /**
70
+ * Options for poll command.
71
+ */
72
+ export interface IPrPollOptions {
73
+ /** Auto-unwatch merged/closed PRs (default: true) */
74
+ readonly autoUnwatch?: boolean;
75
+ /** Write logs to file (default: true) */
76
+ readonly logToFile?: boolean;
77
+ /** Limit concurrent GitHub API calls (default: 5) */
78
+ readonly concurrency?: number;
79
+ /** Send desktop notifications for state changes (default: false) */
80
+ readonly notify?: boolean;
81
+ /** Auto-address new comments by outputting formatted instructions (default: true) */
82
+ readonly autoAddress?: boolean;
83
+ /** Poll a specific PR number instead of watched PRs */
84
+ readonly prNumber?: number;
85
+ /** Repository for the target PR (owner/repo). Defaults to current repo. */
86
+ readonly repo?: string;
87
+ /** Use current PR from branch (foreground watch). */
88
+ readonly current?: boolean;
89
+ /** Use local cache for comment detection (no Neo4j). */
90
+ readonly useLocalCache?: boolean;
91
+ }
92
+ /**
93
+ * Handler for PR polling operations.
94
+ */
95
+ export declare class PrPollHandler {
96
+ private readonly githubClient;
97
+ private readonly prRepository;
98
+ private readonly notificationService?;
99
+ private readonly memoryService?;
100
+ private readonly groupId?;
101
+ private readonly logPath;
102
+ private readonly cachePath;
103
+ constructor(githubClient: IGithubClient, prRepository: IPullRequestRepository, notificationService?: INotificationService | undefined, memoryService?: IMemoryWriter | undefined, groupId?: string | undefined);
104
+ /**
105
+ * Poll all watched PRs for the current user.
106
+ */
107
+ poll(options?: IPrPollOptions): Promise<IPrPollResult>;
108
+ /**
109
+ * Poll a single PR and detect changes.
110
+ */
111
+ private pollSinglePr;
112
+ /**
113
+ * Detect new comments and replies.
114
+ */
115
+ private detectNewComments;
116
+ /**
117
+ * Detect comment resolution changes via GraphQL review threads.
118
+ * Updates stored comments and returns state changes for newly resolved threads.
119
+ */
120
+ private detectCommentResolution;
121
+ /**
122
+ * Calculate overall check status from individual checks.
123
+ */
124
+ private calculateOverallCheckStatus;
125
+ /**
126
+ * Count unresolved comments.
127
+ */
128
+ private countUnresolvedComments;
129
+ /**
130
+ * Map GitHub PR state to domain status.
131
+ */
132
+ private mapPrStatus;
133
+ /**
134
+ * Map GitHub check state to domain status.
135
+ */
136
+ private mapCheckStatus;
137
+ /**
138
+ * Get error message from unknown error.
139
+ */
140
+ private getErrorMessage;
141
+ /**
142
+ * Write logs to file.
143
+ */
144
+ private writeLog;
145
+ /**
146
+ * Split array into batches.
147
+ */
148
+ private batchArray;
149
+ private resolveTarget;
150
+ private getCacheKey;
151
+ private getCachedState;
152
+ private loadCache;
153
+ private writeCache;
154
+ private countUnresolvedThreads;
155
+ private detectNewCommentsFromCache;
156
+ /**
157
+ * Collect notifications from poll results.
158
+ */
159
+ private collectNotifications;
160
+ }
161
+ //# sourceMappingURL=PrPollHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrPollHandler.d.ts","sourceRoot":"","sources":["../../../../../src/lib/application/handlers/pr/PrPollHandler.ts"],"names":[],"mappings":"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"}