@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
@@ -5,30 +5,102 @@ const domain_1 = require("../../domain");
5
5
  /**
6
6
  * Handler for session stop events.
7
7
  * Captures session work and saves to memory.
8
+ *
9
+ * Implements IRequestHandler for use with the Mediator pattern.
8
10
  */
9
11
  class SessionStopHandler {
10
- constructor(services) {
11
- this.services = services;
12
+ constructor(contextOrServices, memory, sessionCapture, events, logger, tasks) {
13
+ if ('context' in contextOrServices && 'memory' in contextOrServices) {
14
+ const services = contextOrServices;
15
+ this.context = services.context;
16
+ this.memory = services.memory;
17
+ this.tasks = services.tasks;
18
+ this.sessionCapture = services.sessionCapture;
19
+ this.events = services.events;
20
+ this.logger = services.logger;
21
+ }
22
+ else {
23
+ this.context = contextOrServices;
24
+ this.memory = memory;
25
+ this.sessionCapture = sessionCapture;
26
+ this.events = events;
27
+ this.logger = logger;
28
+ this.tasks = tasks;
29
+ }
12
30
  }
13
31
  /**
14
- * Handle a session stop event.
32
+ * Handle a session stop request.
15
33
  * Captures work from the session and saves to memory.
16
34
  */
17
- async handle(event) {
18
- const { context, memory, sessionCapture, events } = this.services;
35
+ async handle(request) {
19
36
  // Delegate fact capture to dedicated service
20
- const captured = await sessionCapture.captureSessionWork(event.sessionId);
21
- if (captured.facts.length > 0) {
22
- // Save captured facts to memory
23
- await memory.saveMemory(context.groupId, captured.facts);
37
+ const captured = await this.sessionCapture.captureSessionWork(request.sessionId, request.transcriptPath);
38
+ // Generate suggestions based on current state
39
+ const suggestions = await this.generateSuggestions();
40
+ if (captured.facts.length === 0) {
41
+ return {
42
+ message: 'No significant work to capture.',
43
+ factsCaptured: 0,
44
+ skipped: true,
45
+ skipReason: 'No facts captured from session',
46
+ suggestions: suggestions.length > 0 ? suggestions : undefined,
47
+ };
24
48
  }
49
+ // Save captured facts to memory
50
+ await this.memory.saveMemory(this.context.groupId, captured.facts);
25
51
  // Emit internal event for any listeners
26
- await events.emit({
52
+ await this.events.emit({
27
53
  type: 'memory:save',
28
54
  facts: captured.facts,
29
- groupId: context.groupId,
55
+ groupId: this.context.groupId,
30
56
  timestamp: (0, domain_1.toISOTimestamp)(),
31
57
  });
58
+ return {
59
+ message: `Captured ${captured.facts.length} fact(s) from session.`,
60
+ factsCaptured: captured.facts.length,
61
+ skipped: false,
62
+ suggestions: suggestions.length > 0 ? suggestions : undefined,
63
+ };
64
+ }
65
+ /**
66
+ * Generate suggestions based on current tasks and state.
67
+ * Suggests actions like syncing unlinked tasks to GitHub.
68
+ */
69
+ async generateSuggestions() {
70
+ const suggestions = [];
71
+ if (!this.tasks) {
72
+ return suggestions;
73
+ }
74
+ try {
75
+ // Get current tasks
76
+ const tasks = await this.tasks.getTasksSimple([this.context.groupId]);
77
+ // Count incomplete tasks without external links
78
+ const unlinkedIncompleteTasks = tasks.filter((t) => t.status !== 'done' && t.status !== 'closed' && !t.externalLink);
79
+ if (unlinkedIncompleteTasks.length > 0) {
80
+ suggestions.push({
81
+ action: 'sync-github-export',
82
+ message: `${unlinkedIncompleteTasks.length} incomplete task(s) could be tracked as GitHub issues`,
83
+ command: 'lisa github sync --export',
84
+ count: unlinkedIncompleteTasks.length,
85
+ });
86
+ }
87
+ // Count tasks with external links that might need sync
88
+ const linkedTasks = tasks.filter((t) => t.externalLink?.source === 'github');
89
+ if (linkedTasks.length > 0) {
90
+ // Suggest sync to keep status in sync
91
+ suggestions.push({
92
+ action: 'sync-github-bidirectional',
93
+ message: `${linkedTasks.length} task(s) linked to GitHub - sync to update status`,
94
+ command: 'lisa github sync',
95
+ count: linkedTasks.length,
96
+ });
97
+ }
98
+ }
99
+ catch (error) {
100
+ // Don't fail session stop if suggestions fail
101
+ this.logger?.debug?.('Failed to generate suggestions', { error });
102
+ }
103
+ return suggestions;
32
104
  }
33
105
  }
34
106
  exports.SessionStopHandler = SessionStopHandler;
@@ -1 +1 @@
1
- {"version":3,"file":"SessionStopHandler.js","sourceRoot":"","sources":["../../../../src/lib/application/handlers/SessionStopHandler.ts"],"names":[],"mappings":";;;AACA,yCAA8C;AAE9C;;;GAGG;AACH,MAAa,kBAAkB;IAC7B,YAA6B,QAAuB;QAAvB,aAAQ,GAAR,QAAQ,CAAe;IAAG,CAAC;IAExD;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,KAAwB;QACnC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QAElE,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAE1E,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,gCAAgC;YAChC,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC3D,CAAC;QAED,wCAAwC;QACxC,MAAM,MAAM,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,IAAA,uBAAc,GAAE;SAC5B,CAAC,CAAC;IACL,CAAC;CACF;AA1BD,gDA0BC"}
1
+ {"version":3,"file":"SessionStopHandler.js","sourceRoot":"","sources":["../../../../src/lib/application/handlers/SessionStopHandler.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,5 @@
5
5
  export { SessionStartHandler } from './SessionStartHandler';
6
6
  export { SessionStopHandler } from './SessionStopHandler';
7
7
  export { PromptSubmitHandler } from './PromptSubmitHandler';
8
+ export { PrCreateHandler, PrReviewHandler, PrChecksHandler, PrCommentsHandler, PrAddressHandler, PrWatchHandler, PrPollHandler, PrStatusHandler, PrLinkHandler, PrRememberHandler, type IPrCreateResult, type IPrCreateOptions, type IPrReviewResult, type IPrReviewOptions, type IReviewIssue, type IPrChecksResult, type IPrCommentsResult, type IPrAddressResult, type IPrAddressOptions, type ICommentToAddress, type CommentType, type IPrWatchResult, type IPrPollResult, type IPrPollOptions, type IPrPollItem, type IStateChange, type IPrStatusResult, type IPrStatusOptions, type IPrStatusItem, type IPrsByRepo, type IPrStatusSummary, type ReadyState, type IPrLinkResult, type IPrLinkOptions, type IPrRememberResult, type IPrRememberOptions, } from './pr';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/handlers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/handlers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,MAAM,CAAC"}
@@ -4,11 +4,23 @@
4
4
  * These orchestrate domain services to handle events.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.PromptSubmitHandler = exports.SessionStopHandler = exports.SessionStartHandler = void 0;
7
+ exports.PrRememberHandler = exports.PrLinkHandler = exports.PrStatusHandler = exports.PrPollHandler = exports.PrWatchHandler = exports.PrAddressHandler = exports.PrCommentsHandler = exports.PrChecksHandler = exports.PrReviewHandler = exports.PrCreateHandler = exports.PromptSubmitHandler = exports.SessionStopHandler = exports.SessionStartHandler = void 0;
8
8
  var SessionStartHandler_1 = require("./SessionStartHandler");
9
9
  Object.defineProperty(exports, "SessionStartHandler", { enumerable: true, get: function () { return SessionStartHandler_1.SessionStartHandler; } });
10
10
  var SessionStopHandler_1 = require("./SessionStopHandler");
11
11
  Object.defineProperty(exports, "SessionStopHandler", { enumerable: true, get: function () { return SessionStopHandler_1.SessionStopHandler; } });
12
12
  var PromptSubmitHandler_1 = require("./PromptSubmitHandler");
13
13
  Object.defineProperty(exports, "PromptSubmitHandler", { enumerable: true, get: function () { return PromptSubmitHandler_1.PromptSubmitHandler; } });
14
+ // PR handlers
15
+ var pr_1 = require("./pr");
16
+ Object.defineProperty(exports, "PrCreateHandler", { enumerable: true, get: function () { return pr_1.PrCreateHandler; } });
17
+ Object.defineProperty(exports, "PrReviewHandler", { enumerable: true, get: function () { return pr_1.PrReviewHandler; } });
18
+ Object.defineProperty(exports, "PrChecksHandler", { enumerable: true, get: function () { return pr_1.PrChecksHandler; } });
19
+ Object.defineProperty(exports, "PrCommentsHandler", { enumerable: true, get: function () { return pr_1.PrCommentsHandler; } });
20
+ Object.defineProperty(exports, "PrAddressHandler", { enumerable: true, get: function () { return pr_1.PrAddressHandler; } });
21
+ Object.defineProperty(exports, "PrWatchHandler", { enumerable: true, get: function () { return pr_1.PrWatchHandler; } });
22
+ Object.defineProperty(exports, "PrPollHandler", { enumerable: true, get: function () { return pr_1.PrPollHandler; } });
23
+ Object.defineProperty(exports, "PrStatusHandler", { enumerable: true, get: function () { return pr_1.PrStatusHandler; } });
24
+ Object.defineProperty(exports, "PrLinkHandler", { enumerable: true, get: function () { return pr_1.PrLinkHandler; } });
25
+ Object.defineProperty(exports, "PrRememberHandler", { enumerable: true, get: function () { return pr_1.PrRememberHandler; } });
14
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/application/handlers/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAC5B,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/application/handlers/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAC5B,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAE5B,cAAc;AACd,2BAqCc;AApCZ,qGAAA,eAAe,OAAA;AACf,qGAAA,eAAe,OAAA;AACf,qGAAA,eAAe,OAAA;AACf,uGAAA,iBAAiB,OAAA;AACjB,sGAAA,gBAAgB,OAAA;AAChB,oGAAA,cAAc,OAAA;AACd,mGAAA,aAAa,OAAA;AACb,qGAAA,eAAe,OAAA;AACf,mGAAA,aAAa,OAAA;AACb,uGAAA,iBAAiB,OAAA"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * PR Address Handler
3
+ *
4
+ * Fetches pending PR comments and outputs them in a format suitable for
5
+ * AI assistants to analyze and address. The handler provides:
6
+ * - Comment details with file/line context
7
+ * - Relevant code snippets
8
+ * - Instructions for how to address each comment type
9
+ *
10
+ * The actual code changes and replies are made by the AI assistant,
11
+ * not by this handler.
12
+ *
13
+ * @see .dev/features/github-pr.md for full specification
14
+ */
15
+ import type { IGithubClient } from '../../../domain/interfaces/dal/IGithubClient';
16
+ import type { IPullRequestRepository } from '../../../domain/interfaces/dal/IPullRequestRepository';
17
+ import type { CommentStatus } from '../../../domain/interfaces/types/IPullRequest';
18
+ /**
19
+ * Comment with context for addressing.
20
+ */
21
+ export interface ICommentToAddress {
22
+ readonly id: number;
23
+ readonly file: string;
24
+ readonly line?: number;
25
+ readonly author: string;
26
+ readonly body: string;
27
+ readonly status: CommentStatus;
28
+ readonly htmlUrl: string;
29
+ readonly codeContext?: string;
30
+ readonly diffHunk?: string;
31
+ readonly commentType: CommentType;
32
+ }
33
+ /**
34
+ * Type of comment - determines how to address it.
35
+ */
36
+ export type CommentType = 'code_change' | 'question' | 'suggestion' | 'nitpick' | 'approval' | 'unknown';
37
+ /**
38
+ * Result from PrAddressHandler.
39
+ */
40
+ export interface IPrAddressResult {
41
+ readonly success: boolean;
42
+ readonly repo: string;
43
+ readonly prNumber: number;
44
+ readonly branch: string;
45
+ readonly title?: string;
46
+ readonly commentsToAddress: readonly ICommentToAddress[];
47
+ readonly summary: {
48
+ readonly total: number;
49
+ readonly codeChanges: number;
50
+ readonly questions: number;
51
+ readonly suggestions: number;
52
+ readonly nitpicks: number;
53
+ };
54
+ readonly instructions: string;
55
+ readonly formattedOutput: string;
56
+ }
57
+ /**
58
+ * Options for PrAddressHandler.
59
+ */
60
+ export interface IPrAddressOptions {
61
+ readonly repo?: string;
62
+ readonly prNumber: number;
63
+ readonly includeResolved?: boolean;
64
+ readonly codeContextLines?: number;
65
+ }
66
+ /**
67
+ * Handler for preparing PR comments to be addressed.
68
+ */
69
+ export declare class PrAddressHandler {
70
+ private readonly githubClient;
71
+ private readonly prRepository;
72
+ constructor(githubClient: IGithubClient, prRepository: IPullRequestRepository);
73
+ /**
74
+ * Fetch and prepare PR comments for addressing.
75
+ */
76
+ execute(options: IPrAddressOptions): Promise<IPrAddressResult>;
77
+ /**
78
+ * Get existing comment statuses from Neo4j.
79
+ */
80
+ private getExistingStatuses;
81
+ /**
82
+ * Categorize the comment type based on content analysis.
83
+ */
84
+ private categorizeComment;
85
+ /**
86
+ * Get code context around the comment line.
87
+ */
88
+ private getCodeContext;
89
+ /**
90
+ * Generate instructions for addressing comments.
91
+ */
92
+ private generateInstructions;
93
+ /**
94
+ * Wrap content in a safe fenced code block.
95
+ * Handles content that contains backticks by using a longer fence.
96
+ */
97
+ private wrapFence;
98
+ /**
99
+ * Format output for display.
100
+ */
101
+ private formatOutput;
102
+ }
103
+ //# sourceMappingURL=PrAddressHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrAddressHandler.d.ts","sourceRoot":"","sources":["../../../../../src/lib/application/handlers/pr/PrAddressHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uDAAuD,CAAC;AACpG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,aAAa,GACb,UAAU,GACV,YAAY,GACZ,SAAS,GACT,UAAU,GACV,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,iBAAiB,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACzD,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,YAAY,EAAE,aAAa,EAC3B,YAAY,EAAE,sBAAsB;IAGvD;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiFpE;;OAEG;YACW,mBAAmB;IAoBjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAyEzB;;OAEG;YACW,cAAc;IAoC5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkC5B;;;OAGG;IACH,OAAO,CAAC,SAAS;IAWjB;;OAEG;IACH,OAAO,CAAC,YAAY;CAgFrB"}
@@ -0,0 +1,354 @@
1
+ "use strict";
2
+ /**
3
+ * PR Address Handler
4
+ *
5
+ * Fetches pending PR comments and outputs them in a format suitable for
6
+ * AI assistants to analyze and address. The handler provides:
7
+ * - Comment details with file/line context
8
+ * - Relevant code snippets
9
+ * - Instructions for how to address each comment type
10
+ *
11
+ * The actual code changes and replies are made by the AI assistant,
12
+ * not by this handler.
13
+ *
14
+ * @see .dev/features/github-pr.md for full specification
15
+ */
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || (function () {
33
+ var ownKeys = function(o) {
34
+ ownKeys = Object.getOwnPropertyNames || function (o) {
35
+ var ar = [];
36
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
37
+ return ar;
38
+ };
39
+ return ownKeys(o);
40
+ };
41
+ return function (mod) {
42
+ if (mod && mod.__esModule) return mod;
43
+ var result = {};
44
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
45
+ __setModuleDefault(result, mod);
46
+ return result;
47
+ };
48
+ })();
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.PrAddressHandler = void 0;
51
+ const fs = __importStar(require("fs-extra"));
52
+ const path = __importStar(require("path"));
53
+ /**
54
+ * Handler for preparing PR comments to be addressed.
55
+ */
56
+ class PrAddressHandler {
57
+ constructor(githubClient, prRepository) {
58
+ this.githubClient = githubClient;
59
+ this.prRepository = prRepository;
60
+ }
61
+ /**
62
+ * Fetch and prepare PR comments for addressing.
63
+ */
64
+ async execute(options) {
65
+ // Resolve repo
66
+ const repo = options.repo || await this.githubClient.getCurrentRepo();
67
+ // Validate contextLines - must be a non-negative integer
68
+ const rawContextLines = options.codeContextLines;
69
+ const contextLines = Number.isFinite(rawContextLines) && rawContextLines >= 0
70
+ ? Math.floor(rawContextLines)
71
+ : 10;
72
+ // Fetch PR details
73
+ const pr = await this.githubClient.getPr(repo, options.prNumber);
74
+ const branch = pr.headRefName;
75
+ const title = pr.title;
76
+ // Fetch comments from GitHub
77
+ const ghComments = await this.githubClient.getPrComments(repo, options.prNumber);
78
+ // Get existing comment statuses from Neo4j
79
+ const existingStatuses = await this.getExistingStatuses(repo, options.prNumber);
80
+ // Filter to pending comments (unless includeResolved is true)
81
+ const pendingComments = ghComments.filter(c => {
82
+ const status = existingStatuses.get(String(c.id)) || 'pending';
83
+ if (options.includeResolved)
84
+ return true;
85
+ return status === 'pending';
86
+ });
87
+ // Filter out replies (we want top-level comments only)
88
+ const topLevelComments = pendingComments.filter(c => !c.in_reply_to_id);
89
+ // Enrich comments with context
90
+ const commentsToAddress = [];
91
+ for (const comment of topLevelComments) {
92
+ const status = existingStatuses.get(String(comment.id)) ?? 'pending';
93
+ const line = comment.line ?? comment.original_line;
94
+ const commentType = this.categorizeComment(comment.body ?? '');
95
+ const codeContext = await this.getCodeContext(comment.path ?? '', line, contextLines);
96
+ commentsToAddress.push({
97
+ id: comment.id,
98
+ file: comment.path ?? '',
99
+ line,
100
+ author: comment.user?.login ?? 'unknown',
101
+ body: comment.body ?? '',
102
+ status,
103
+ htmlUrl: comment.html_url ?? '',
104
+ codeContext,
105
+ diffHunk: comment.diff_hunk,
106
+ commentType,
107
+ });
108
+ }
109
+ // Calculate summary
110
+ const summary = {
111
+ total: commentsToAddress.length,
112
+ codeChanges: commentsToAddress.filter(c => c.commentType === 'code_change').length,
113
+ questions: commentsToAddress.filter(c => c.commentType === 'question').length,
114
+ suggestions: commentsToAddress.filter(c => c.commentType === 'suggestion').length,
115
+ nitpicks: commentsToAddress.filter(c => c.commentType === 'nitpick').length,
116
+ };
117
+ // Generate instructions
118
+ const instructions = this.generateInstructions(commentsToAddress, repo, options.prNumber);
119
+ // Format output
120
+ const formattedOutput = this.formatOutput(commentsToAddress, summary, title, branch, instructions);
121
+ return {
122
+ success: true,
123
+ repo,
124
+ prNumber: options.prNumber,
125
+ branch,
126
+ title,
127
+ commentsToAddress,
128
+ summary,
129
+ instructions,
130
+ formattedOutput,
131
+ };
132
+ }
133
+ /**
134
+ * Get existing comment statuses from Neo4j.
135
+ */
136
+ async getExistingStatuses(repo, prNumber) {
137
+ const statuses = new Map();
138
+ try {
139
+ const userId = await this.prRepository.getUserId();
140
+ const comments = await this.prRepository.findCommentsByPr(userId, repo, prNumber);
141
+ for (const comment of comments) {
142
+ statuses.set(comment.commentId, comment.status);
143
+ }
144
+ }
145
+ catch {
146
+ // Return empty map if Neo4j fails
147
+ }
148
+ return statuses;
149
+ }
150
+ /**
151
+ * Categorize the comment type based on content analysis.
152
+ */
153
+ categorizeComment(body) {
154
+ const lowerBody = body.toLowerCase();
155
+ // Check for questions first (most specific)
156
+ if (body.includes('?') ||
157
+ lowerBody.includes('why') ||
158
+ lowerBody.includes('could you explain') ||
159
+ lowerBody.includes('what is') ||
160
+ lowerBody.includes('how does')) {
161
+ return 'question';
162
+ }
163
+ // Check for nitpicks
164
+ if (lowerBody.includes('nit:') ||
165
+ lowerBody.includes('nitpick') ||
166
+ lowerBody.includes('minor:') ||
167
+ lowerBody.includes('style:') ||
168
+ lowerBody.includes('typo')) {
169
+ return 'nitpick';
170
+ }
171
+ // Check for suggestions (optional changes)
172
+ if (lowerBody.includes('consider') ||
173
+ lowerBody.includes('suggestion') ||
174
+ lowerBody.includes('might want to') ||
175
+ lowerBody.includes('could also') ||
176
+ lowerBody.includes('optional') ||
177
+ lowerBody.includes('nice to have')) {
178
+ return 'suggestion';
179
+ }
180
+ // Check for code change requests
181
+ if (lowerBody.includes('should') ||
182
+ lowerBody.includes('must') ||
183
+ lowerBody.includes('need to') ||
184
+ lowerBody.includes('please') ||
185
+ lowerBody.includes('fix') ||
186
+ lowerBody.includes('change') ||
187
+ lowerBody.includes('update') ||
188
+ lowerBody.includes('add') ||
189
+ lowerBody.includes('remove') ||
190
+ lowerBody.includes('missing') ||
191
+ lowerBody.includes('incorrect') ||
192
+ lowerBody.includes('bug') ||
193
+ lowerBody.includes('issue') ||
194
+ lowerBody.includes('potential issue') ||
195
+ lowerBody.includes('⚠️')) {
196
+ return 'code_change';
197
+ }
198
+ // Check for approval/positive feedback LAST
199
+ // This prevents "LGTM, but fix X" from being classified as approval
200
+ if (lowerBody.includes('lgtm') ||
201
+ lowerBody.includes('looks good') ||
202
+ lowerBody.includes('great work') ||
203
+ lowerBody.includes('nice!') ||
204
+ lowerBody.includes('👍')) {
205
+ return 'approval';
206
+ }
207
+ return 'unknown';
208
+ }
209
+ /**
210
+ * Get code context around the comment line.
211
+ */
212
+ async getCodeContext(filePath, line, contextLines) {
213
+ if (!line)
214
+ return undefined;
215
+ try {
216
+ // Try to read the file from the current working directory
217
+ const fullPath = path.resolve(process.cwd(), filePath);
218
+ if (!await fs.pathExists(fullPath)) {
219
+ return undefined;
220
+ }
221
+ const content = await fs.readFile(fullPath, 'utf-8');
222
+ const lines = content.split('\n');
223
+ const startLine = Math.max(0, line - contextLines - 1);
224
+ const endLine = Math.min(lines.length, line + contextLines);
225
+ const contextWithLineNumbers = lines
226
+ .slice(startLine, endLine)
227
+ .map((lineContent, i) => {
228
+ const lineNum = startLine + i + 1;
229
+ const marker = lineNum === line ? '>>>' : ' ';
230
+ return `${marker} ${lineNum.toString().padStart(4)}: ${lineContent}`;
231
+ })
232
+ .join('\n');
233
+ return contextWithLineNumbers;
234
+ }
235
+ catch {
236
+ return undefined;
237
+ }
238
+ }
239
+ /**
240
+ * Generate instructions for addressing comments.
241
+ */
242
+ generateInstructions(comments, repo, _prNumber) {
243
+ const lines = [];
244
+ lines.push('## Instructions for Addressing PR Comments');
245
+ lines.push('');
246
+ lines.push('For each comment below, please:');
247
+ lines.push('');
248
+ lines.push('1. **Analyze** the comment and understand what is being requested');
249
+ lines.push('2. **Make changes** to the code if needed');
250
+ lines.push('3. **Reply** to the comment on GitHub explaining what was done');
251
+ lines.push('');
252
+ lines.push('### How to handle each comment type:');
253
+ lines.push('');
254
+ lines.push('- **code_change**: Make the requested code changes, commit, then reply with the commit hash');
255
+ lines.push('- **question**: Reply with an explanation (no code changes needed unless clarification reveals an issue)');
256
+ lines.push('- **suggestion**: Evaluate if the suggestion improves the code. If yes, implement it. If no, reply explaining why');
257
+ lines.push('- **nitpick**: Fix if trivial, otherwise acknowledge and optionally defer');
258
+ lines.push('- **approval**: No action needed, but you can reply with thanks');
259
+ lines.push('');
260
+ lines.push('### Reply format:');
261
+ lines.push('');
262
+ lines.push('After making changes, reply to each comment using:');
263
+ lines.push('```');
264
+ lines.push(`gh api repos/${repo}/pulls/comments/{COMMENT_ID}/replies -f body="Your reply here"`);
265
+ lines.push('```');
266
+ lines.push('');
267
+ return lines.join('\n');
268
+ }
269
+ /**
270
+ * Wrap content in a safe fenced code block.
271
+ * Handles content that contains backticks by using a longer fence.
272
+ */
273
+ wrapFence(content, lang = '') {
274
+ if (!content)
275
+ return '```\n```';
276
+ // Find the longest run of backticks in the content
277
+ const backtickRuns = content.match(/`+/g) ?? [];
278
+ const maxTicks = Math.max(2, ...backtickRuns.map(t => t.length)) + 1;
279
+ const fence = '`'.repeat(maxTicks);
280
+ return `${fence}${lang}\n${content}\n${fence}`;
281
+ }
282
+ /**
283
+ * Format output for display.
284
+ */
285
+ formatOutput(comments, summary, title, branch, instructions) {
286
+ const lines = [];
287
+ // Header
288
+ if (title) {
289
+ lines.push(`# PR: ${title}`);
290
+ lines.push(`Branch: ${branch}`);
291
+ lines.push('');
292
+ }
293
+ // Summary
294
+ lines.push(`## Summary: ${summary.total} comment(s) to address`);
295
+ if (summary.codeChanges > 0)
296
+ lines.push(`- 🔧 ${summary.codeChanges} code change(s) requested`);
297
+ if (summary.questions > 0)
298
+ lines.push(`- ❓ ${summary.questions} question(s) to answer`);
299
+ if (summary.suggestions > 0)
300
+ lines.push(`- 💡 ${summary.suggestions} suggestion(s) to consider`);
301
+ if (summary.nitpicks > 0)
302
+ lines.push(`- 📝 ${summary.nitpicks} nitpick(s)`);
303
+ lines.push('');
304
+ if (comments.length === 0) {
305
+ lines.push('No pending comments to address! 🎉');
306
+ return lines.join('\n');
307
+ }
308
+ // Instructions
309
+ lines.push(instructions);
310
+ // Comments
311
+ lines.push('---');
312
+ lines.push('');
313
+ lines.push('## Comments to Address');
314
+ lines.push('');
315
+ for (let i = 0; i < comments.length; i++) {
316
+ const comment = comments[i];
317
+ const typeEmoji = {
318
+ code_change: '🔧',
319
+ question: '❓',
320
+ suggestion: '💡',
321
+ nitpick: '📝',
322
+ approval: '✅',
323
+ unknown: '❔',
324
+ };
325
+ lines.push(`### ${i + 1}. ${typeEmoji[comment.commentType]} ${comment.commentType.toUpperCase()} - ${comment.file}:${comment.line || '?'}`);
326
+ lines.push('');
327
+ lines.push(`**Author:** @${comment.author}`);
328
+ lines.push(`**Comment ID:** ${comment.id}`);
329
+ lines.push(`**URL:** ${comment.htmlUrl}`);
330
+ lines.push('');
331
+ lines.push('**Comment:**');
332
+ lines.push(this.wrapFence(comment.body));
333
+ lines.push('');
334
+ if (comment.codeContext) {
335
+ lines.push('**Code context:**');
336
+ lines.push(this.wrapFence(comment.codeContext));
337
+ lines.push('');
338
+ }
339
+ if (comment.diffHunk) {
340
+ lines.push('<details>');
341
+ lines.push('<summary>Diff hunk</summary>');
342
+ lines.push('');
343
+ lines.push(this.wrapFence(comment.diffHunk, 'diff'));
344
+ lines.push('</details>');
345
+ lines.push('');
346
+ }
347
+ lines.push('---');
348
+ lines.push('');
349
+ }
350
+ return lines.join('\n');
351
+ }
352
+ }
353
+ exports.PrAddressHandler = PrAddressHandler;
354
+ //# sourceMappingURL=PrAddressHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrAddressHandler.js","sourceRoot":"","sources":["../../../../../src/lib/application/handlers/pr/PrAddressHandler.ts"],"names":[],"mappings":"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"}