@qotaq/lalphgram 0.1.0

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 (517) hide show
  1. package/Events/package.json +6 -0
  2. package/LICENSE +21 -0
  3. package/Main/package.json +6 -0
  4. package/README.md +1 -0
  5. package/dist/cjs/Events.js +55 -0
  6. package/dist/cjs/Events.js.map +1 -0
  7. package/dist/cjs/LalphMain.js +59 -0
  8. package/dist/cjs/LalphMain.js.map +1 -0
  9. package/dist/cjs/Main.js +115 -0
  10. package/dist/cjs/Main.js.map +1 -0
  11. package/dist/cjs/index.js +281 -0
  12. package/dist/cjs/index.js.map +1 -0
  13. package/dist/cjs/lib/AnalysisPrompts.js +61 -0
  14. package/dist/cjs/lib/AnalysisPrompts.js.map +1 -0
  15. package/dist/cjs/lib/BranchParser.js +45 -0
  16. package/dist/cjs/lib/BranchParser.js.map +1 -0
  17. package/dist/cjs/lib/MermaidToPlantUml.js +96 -0
  18. package/dist/cjs/lib/MermaidToPlantUml.js.map +1 -0
  19. package/dist/cjs/lib/SpecHtmlGenerator.js +160 -0
  20. package/dist/cjs/lib/SpecHtmlGenerator.js.map +1 -0
  21. package/dist/cjs/lib/StreamJsonParser.js +88 -0
  22. package/dist/cjs/lib/StreamJsonParser.js.map +1 -0
  23. package/dist/cjs/lib/TelegramFormatter.js +122 -0
  24. package/dist/cjs/lib/TelegramFormatter.js.map +1 -0
  25. package/dist/cjs/lib/TelegraphHtml.js +65 -0
  26. package/dist/cjs/lib/TelegraphHtml.js.map +1 -0
  27. package/dist/cjs/lib/TelegraphMarkdown.js +346 -0
  28. package/dist/cjs/lib/TelegraphMarkdown.js.map +1 -0
  29. package/dist/cjs/schemas/CredentialSchemas.js +31 -0
  30. package/dist/cjs/schemas/CredentialSchemas.js.map +1 -0
  31. package/dist/cjs/schemas/GitHubSchemas.js +60 -0
  32. package/dist/cjs/schemas/GitHubSchemas.js.map +1 -0
  33. package/dist/cjs/schemas/LinearSchemas.js +63 -0
  34. package/dist/cjs/schemas/LinearSchemas.js.map +1 -0
  35. package/dist/cjs/schemas/ProjectSchemas.js +26 -0
  36. package/dist/cjs/schemas/ProjectSchemas.js.map +1 -0
  37. package/dist/cjs/schemas/TrackerSchemas.js +35 -0
  38. package/dist/cjs/schemas/TrackerSchemas.js.map +1 -0
  39. package/dist/cjs/services/AppContext.js +57 -0
  40. package/dist/cjs/services/AppContext.js.map +1 -0
  41. package/dist/cjs/services/AppRuntimeConfig.js +35 -0
  42. package/dist/cjs/services/AppRuntimeConfig.js.map +1 -0
  43. package/dist/cjs/services/AutoMerge.js +140 -0
  44. package/dist/cjs/services/AutoMerge.js.map +1 -0
  45. package/dist/cjs/services/ChatMachine.js +873 -0
  46. package/dist/cjs/services/ChatMachine.js.map +1 -0
  47. package/dist/cjs/services/CommentTimer.js +81 -0
  48. package/dist/cjs/services/CommentTimer.js.map +1 -0
  49. package/dist/cjs/services/CredentialStore.js +68 -0
  50. package/dist/cjs/services/CredentialStore.js.map +1 -0
  51. package/dist/cjs/services/CredentialWatcher.js +76 -0
  52. package/dist/cjs/services/CredentialWatcher.js.map +1 -0
  53. package/dist/cjs/services/Credentials.js +130 -0
  54. package/dist/cjs/services/Credentials.js.map +1 -0
  55. package/dist/cjs/services/EventLoop.js +203 -0
  56. package/dist/cjs/services/EventLoop.js.map +1 -0
  57. package/dist/cjs/services/GitHubClient/GitHubClient.js +236 -0
  58. package/dist/cjs/services/GitHubClient/GitHubClient.js.map +1 -0
  59. package/dist/cjs/services/GitHubClient/OctokitClient.js +329 -0
  60. package/dist/cjs/services/GitHubClient/OctokitClient.js.map +1 -0
  61. package/dist/cjs/services/GitHubClient.js +236 -0
  62. package/dist/cjs/services/GitHubClient.js.map +1 -0
  63. package/dist/cjs/services/GitHubEventSource.js +145 -0
  64. package/dist/cjs/services/GitHubEventSource.js.map +1 -0
  65. package/dist/cjs/services/GitHubIssueTracker.js +118 -0
  66. package/dist/cjs/services/GitHubIssueTracker.js.map +1 -0
  67. package/dist/cjs/services/LalphConfig.js +139 -0
  68. package/dist/cjs/services/LalphConfig.js.map +1 -0
  69. package/dist/cjs/services/LalphConfigReader.js +82 -0
  70. package/dist/cjs/services/LalphConfigReader.js.map +1 -0
  71. package/dist/cjs/services/LalphDirectory.js +45 -0
  72. package/dist/cjs/services/LalphDirectory.js.map +1 -0
  73. package/dist/cjs/services/LinearSdkClient.js +149 -0
  74. package/dist/cjs/services/LinearSdkClient.js.map +1 -0
  75. package/dist/cjs/services/LinearTracker.js +89 -0
  76. package/dist/cjs/services/LinearTracker.js.map +1 -0
  77. package/dist/cjs/services/MessengerAdapter/MessengerAdapter.js +30 -0
  78. package/dist/cjs/services/MessengerAdapter/MessengerAdapter.js.map +1 -0
  79. package/dist/cjs/services/MessengerAdapter/TelegramAdapter.js +131 -0
  80. package/dist/cjs/services/MessengerAdapter/TelegramAdapter.js.map +1 -0
  81. package/dist/cjs/services/MessengerAdapter/TelegramConfig.js +81 -0
  82. package/dist/cjs/services/MessengerAdapter/TelegramConfig.js.map +1 -0
  83. package/dist/cjs/services/MessengerAdapter.js +30 -0
  84. package/dist/cjs/services/MessengerAdapter.js.map +1 -0
  85. package/dist/cjs/services/OctokitClient.js +350 -0
  86. package/dist/cjs/services/OctokitClient.js.map +1 -0
  87. package/dist/cjs/services/PlanOverviewUploader.js +119 -0
  88. package/dist/cjs/services/PlanOverviewUploader.js.map +1 -0
  89. package/dist/cjs/services/PlanOverviewUploaderMap.js +25 -0
  90. package/dist/cjs/services/PlanOverviewUploaderMap.js.map +1 -0
  91. package/dist/cjs/services/PlanSession.js +489 -0
  92. package/dist/cjs/services/PlanSession.js.map +1 -0
  93. package/dist/cjs/services/ProjectStore.js +107 -0
  94. package/dist/cjs/services/ProjectStore.js.map +1 -0
  95. package/dist/cjs/services/PullRequestTracker.js +186 -0
  96. package/dist/cjs/services/PullRequestTracker.js.map +1 -0
  97. package/dist/cjs/services/SpecUploader.js +111 -0
  98. package/dist/cjs/services/SpecUploader.js.map +1 -0
  99. package/dist/cjs/services/SpecUploaderMap.js +25 -0
  100. package/dist/cjs/services/SpecUploaderMap.js.map +1 -0
  101. package/dist/cjs/services/TaskEventSource.js +58 -0
  102. package/dist/cjs/services/TaskEventSource.js.map +1 -0
  103. package/dist/cjs/services/TaskTracker/GitHubIssueTracker.js +155 -0
  104. package/dist/cjs/services/TaskTracker/GitHubIssueTracker.js.map +1 -0
  105. package/dist/cjs/services/TaskTracker/LinearSdkClient.js +149 -0
  106. package/dist/cjs/services/TaskTracker/LinearSdkClient.js.map +1 -0
  107. package/dist/cjs/services/TaskTracker/LinearTracker.js +126 -0
  108. package/dist/cjs/services/TaskTracker/LinearTracker.js.map +1 -0
  109. package/dist/cjs/services/TaskTracker/TaskTracker.js +20 -0
  110. package/dist/cjs/services/TaskTracker/TaskTracker.js.map +1 -0
  111. package/dist/cjs/services/TaskTracker/TrackerLayerMap.js +27 -0
  112. package/dist/cjs/services/TaskTracker/TrackerLayerMap.js.map +1 -0
  113. package/dist/cjs/services/TaskTracker/buildEventStream.js +55 -0
  114. package/dist/cjs/services/TaskTracker/buildEventStream.js.map +1 -0
  115. package/dist/cjs/services/TaskTracker.js +20 -0
  116. package/dist/cjs/services/TaskTracker.js.map +1 -0
  117. package/dist/cjs/services/TelegramAdapter.js +125 -0
  118. package/dist/cjs/services/TelegramAdapter.js.map +1 -0
  119. package/dist/cjs/services/TelegramConfig.js +81 -0
  120. package/dist/cjs/services/TelegramConfig.js.map +1 -0
  121. package/dist/cjs/services/TelegramConfigStore.js +81 -0
  122. package/dist/cjs/services/TelegramConfigStore.js.map +1 -0
  123. package/dist/cjs/services/TelegramNotifier.js +50 -0
  124. package/dist/cjs/services/TelegramNotifier.js.map +1 -0
  125. package/dist/cjs/services/TrackerLayerMap.js +27 -0
  126. package/dist/cjs/services/TrackerLayerMap.js.map +1 -0
  127. package/dist/cjs/services/TrackerResolver.js +45 -0
  128. package/dist/cjs/services/TrackerResolver.js.map +1 -0
  129. package/dist/cjs/services/messenger/MessengerAdapter.js +30 -0
  130. package/dist/cjs/services/messenger/MessengerAdapter.js.map +1 -0
  131. package/dist/cjs/services/messenger/TelegramAdapter.js +125 -0
  132. package/dist/cjs/services/messenger/TelegramAdapter.js.map +1 -0
  133. package/dist/cjs/services/task-tracker/GitHubIssueTracker.js +157 -0
  134. package/dist/cjs/services/task-tracker/GitHubIssueTracker.js.map +1 -0
  135. package/dist/cjs/services/task-tracker/LinearTracker.js +127 -0
  136. package/dist/cjs/services/task-tracker/LinearTracker.js.map +1 -0
  137. package/dist/cjs/services/task-tracker/TaskTracker.js +20 -0
  138. package/dist/cjs/services/task-tracker/TaskTracker.js.map +1 -0
  139. package/dist/cjs/services/task-tracker/TrackerLayerMap.js +27 -0
  140. package/dist/cjs/services/task-tracker/TrackerLayerMap.js.map +1 -0
  141. package/dist/cjs/shim/bin.js +31 -0
  142. package/dist/cjs/shim/bin.js.map +1 -0
  143. package/dist/cjs/shim/main.js +217 -0
  144. package/dist/cjs/shim/main.js.map +1 -0
  145. package/dist/cjs/shim/parseArgs.js +45 -0
  146. package/dist/cjs/shim/parseArgs.js.map +1 -0
  147. package/dist/cjs/shim/schemas.js +35 -0
  148. package/dist/cjs/shim/schemas.js.map +1 -0
  149. package/dist/dts/Events.d.ts +108 -0
  150. package/dist/dts/Events.d.ts.map +1 -0
  151. package/dist/dts/LalphMain.d.ts +2 -0
  152. package/dist/dts/LalphMain.d.ts.map +1 -0
  153. package/dist/dts/Main.d.ts +2 -0
  154. package/dist/dts/Main.d.ts.map +1 -0
  155. package/dist/dts/index.d.ts +101 -0
  156. package/dist/dts/index.d.ts.map +1 -0
  157. package/dist/dts/lib/AnalysisPrompts.d.ts +12 -0
  158. package/dist/dts/lib/AnalysisPrompts.d.ts.map +1 -0
  159. package/dist/dts/lib/BranchParser.d.ts +40 -0
  160. package/dist/dts/lib/BranchParser.d.ts.map +1 -0
  161. package/dist/dts/lib/MermaidToPlantUml.d.ts +19 -0
  162. package/dist/dts/lib/MermaidToPlantUml.d.ts.map +1 -0
  163. package/dist/dts/lib/SpecHtmlGenerator.d.ts +18 -0
  164. package/dist/dts/lib/SpecHtmlGenerator.d.ts.map +1 -0
  165. package/dist/dts/lib/StreamJsonParser.d.ts +147 -0
  166. package/dist/dts/lib/StreamJsonParser.d.ts.map +1 -0
  167. package/dist/dts/lib/TelegramFormatter.d.ts +35 -0
  168. package/dist/dts/lib/TelegramFormatter.d.ts.map +1 -0
  169. package/dist/dts/lib/TelegraphHtml.d.ts +11 -0
  170. package/dist/dts/lib/TelegraphHtml.d.ts.map +1 -0
  171. package/dist/dts/lib/TelegraphMarkdown.d.ts +21 -0
  172. package/dist/dts/lib/TelegraphMarkdown.d.ts.map +1 -0
  173. package/dist/dts/schemas/CredentialSchemas.d.ts +41 -0
  174. package/dist/dts/schemas/CredentialSchemas.d.ts.map +1 -0
  175. package/dist/dts/schemas/GitHubSchemas.d.ts +130 -0
  176. package/dist/dts/schemas/GitHubSchemas.d.ts.map +1 -0
  177. package/dist/dts/schemas/LinearSchemas.d.ts +121 -0
  178. package/dist/dts/schemas/LinearSchemas.d.ts.map +1 -0
  179. package/dist/dts/schemas/ProjectSchemas.d.ts +40 -0
  180. package/dist/dts/schemas/ProjectSchemas.d.ts.map +1 -0
  181. package/dist/dts/schemas/TrackerSchemas.d.ts +57 -0
  182. package/dist/dts/schemas/TrackerSchemas.d.ts.map +1 -0
  183. package/dist/dts/services/AppContext.d.ts +40 -0
  184. package/dist/dts/services/AppContext.d.ts.map +1 -0
  185. package/dist/dts/services/AppRuntimeConfig.d.ts +51 -0
  186. package/dist/dts/services/AppRuntimeConfig.d.ts.map +1 -0
  187. package/dist/dts/services/AutoMerge.d.ts +42 -0
  188. package/dist/dts/services/AutoMerge.d.ts.map +1 -0
  189. package/dist/dts/services/ChatMachine.d.ts +478 -0
  190. package/dist/dts/services/ChatMachine.d.ts.map +1 -0
  191. package/dist/dts/services/CommentTimer.d.ts +44 -0
  192. package/dist/dts/services/CommentTimer.d.ts.map +1 -0
  193. package/dist/dts/services/CredentialStore.d.ts +43 -0
  194. package/dist/dts/services/CredentialStore.d.ts.map +1 -0
  195. package/dist/dts/services/CredentialWatcher.d.ts +41 -0
  196. package/dist/dts/services/CredentialWatcher.d.ts.map +1 -0
  197. package/dist/dts/services/Credentials.d.ts +44 -0
  198. package/dist/dts/services/Credentials.d.ts.map +1 -0
  199. package/dist/dts/services/EventLoop.d.ts +26 -0
  200. package/dist/dts/services/EventLoop.d.ts.map +1 -0
  201. package/dist/dts/services/GitHubClient/GitHubClient.d.ts +69 -0
  202. package/dist/dts/services/GitHubClient/GitHubClient.d.ts.map +1 -0
  203. package/dist/dts/services/GitHubClient/OctokitClient.d.ts +214 -0
  204. package/dist/dts/services/GitHubClient/OctokitClient.d.ts.map +1 -0
  205. package/dist/dts/services/GitHubClient.d.ts +69 -0
  206. package/dist/dts/services/GitHubClient.d.ts.map +1 -0
  207. package/dist/dts/services/GitHubEventSource.d.ts +43 -0
  208. package/dist/dts/services/GitHubEventSource.d.ts.map +1 -0
  209. package/dist/dts/services/GitHubIssueTracker.d.ts +9 -0
  210. package/dist/dts/services/GitHubIssueTracker.d.ts.map +1 -0
  211. package/dist/dts/services/LalphConfig.d.ts +44 -0
  212. package/dist/dts/services/LalphConfig.d.ts.map +1 -0
  213. package/dist/dts/services/LalphConfigReader.d.ts +66 -0
  214. package/dist/dts/services/LalphConfigReader.d.ts.map +1 -0
  215. package/dist/dts/services/LalphDirectory.d.ts +39 -0
  216. package/dist/dts/services/LalphDirectory.d.ts.map +1 -0
  217. package/dist/dts/services/LinearSdkClient.d.ts +71 -0
  218. package/dist/dts/services/LinearSdkClient.d.ts.map +1 -0
  219. package/dist/dts/services/LinearTracker.d.ts +9 -0
  220. package/dist/dts/services/LinearTracker.d.ts.map +1 -0
  221. package/dist/dts/services/MessengerAdapter/MessengerAdapter.d.ts +69 -0
  222. package/dist/dts/services/MessengerAdapter/MessengerAdapter.d.ts.map +1 -0
  223. package/dist/dts/services/MessengerAdapter/TelegramAdapter.d.ts +13 -0
  224. package/dist/dts/services/MessengerAdapter/TelegramAdapter.d.ts.map +1 -0
  225. package/dist/dts/services/MessengerAdapter/TelegramConfig.d.ts +58 -0
  226. package/dist/dts/services/MessengerAdapter/TelegramConfig.d.ts.map +1 -0
  227. package/dist/dts/services/MessengerAdapter.d.ts +69 -0
  228. package/dist/dts/services/MessengerAdapter.d.ts.map +1 -0
  229. package/dist/dts/services/OctokitClient.d.ts +232 -0
  230. package/dist/dts/services/OctokitClient.d.ts.map +1 -0
  231. package/dist/dts/services/PlanOverviewUploader.d.ts +55 -0
  232. package/dist/dts/services/PlanOverviewUploader.d.ts.map +1 -0
  233. package/dist/dts/services/PlanOverviewUploaderMap.d.ts +14 -0
  234. package/dist/dts/services/PlanOverviewUploaderMap.d.ts.map +1 -0
  235. package/dist/dts/services/PlanSession.d.ts +169 -0
  236. package/dist/dts/services/PlanSession.d.ts.map +1 -0
  237. package/dist/dts/services/ProjectStore.d.ts +50 -0
  238. package/dist/dts/services/ProjectStore.d.ts.map +1 -0
  239. package/dist/dts/services/PullRequestTracker.d.ts +42 -0
  240. package/dist/dts/services/PullRequestTracker.d.ts.map +1 -0
  241. package/dist/dts/services/SpecUploader.d.ts +51 -0
  242. package/dist/dts/services/SpecUploader.d.ts.map +1 -0
  243. package/dist/dts/services/SpecUploaderMap.d.ts +14 -0
  244. package/dist/dts/services/SpecUploaderMap.d.ts.map +1 -0
  245. package/dist/dts/services/TaskEventSource.d.ts +21 -0
  246. package/dist/dts/services/TaskEventSource.d.ts.map +1 -0
  247. package/dist/dts/services/TaskTracker/GitHubIssueTracker.d.ts +10 -0
  248. package/dist/dts/services/TaskTracker/GitHubIssueTracker.d.ts.map +1 -0
  249. package/dist/dts/services/TaskTracker/LinearSdkClient.d.ts +71 -0
  250. package/dist/dts/services/TaskTracker/LinearSdkClient.d.ts.map +1 -0
  251. package/dist/dts/services/TaskTracker/LinearTracker.d.ts +10 -0
  252. package/dist/dts/services/TaskTracker/LinearTracker.d.ts.map +1 -0
  253. package/dist/dts/services/TaskTracker/TaskTracker.d.ts +39 -0
  254. package/dist/dts/services/TaskTracker/TaskTracker.d.ts.map +1 -0
  255. package/dist/dts/services/TaskTracker/TrackerLayerMap.d.ts +14 -0
  256. package/dist/dts/services/TaskTracker/TrackerLayerMap.d.ts.map +1 -0
  257. package/dist/dts/services/TaskTracker/buildEventStream.d.ts +16 -0
  258. package/dist/dts/services/TaskTracker/buildEventStream.d.ts.map +1 -0
  259. package/dist/dts/services/TaskTracker.d.ts +38 -0
  260. package/dist/dts/services/TaskTracker.d.ts.map +1 -0
  261. package/dist/dts/services/TelegramAdapter.d.ts +13 -0
  262. package/dist/dts/services/TelegramAdapter.d.ts.map +1 -0
  263. package/dist/dts/services/TelegramConfig.d.ts +58 -0
  264. package/dist/dts/services/TelegramConfig.d.ts.map +1 -0
  265. package/dist/dts/services/TelegramConfigStore.d.ts +57 -0
  266. package/dist/dts/services/TelegramConfigStore.d.ts.map +1 -0
  267. package/dist/dts/services/TelegramNotifier.d.ts +40 -0
  268. package/dist/dts/services/TelegramNotifier.d.ts.map +1 -0
  269. package/dist/dts/services/TrackerLayerMap.d.ts +14 -0
  270. package/dist/dts/services/TrackerLayerMap.d.ts.map +1 -0
  271. package/dist/dts/services/TrackerResolver.d.ts +43 -0
  272. package/dist/dts/services/TrackerResolver.d.ts.map +1 -0
  273. package/dist/dts/services/messenger/MessengerAdapter.d.ts +69 -0
  274. package/dist/dts/services/messenger/MessengerAdapter.d.ts.map +1 -0
  275. package/dist/dts/services/messenger/TelegramAdapter.d.ts +13 -0
  276. package/dist/dts/services/messenger/TelegramAdapter.d.ts.map +1 -0
  277. package/dist/dts/services/task-tracker/GitHubIssueTracker.d.ts +10 -0
  278. package/dist/dts/services/task-tracker/GitHubIssueTracker.d.ts.map +1 -0
  279. package/dist/dts/services/task-tracker/LinearTracker.d.ts +10 -0
  280. package/dist/dts/services/task-tracker/LinearTracker.d.ts.map +1 -0
  281. package/dist/dts/services/task-tracker/TaskTracker.d.ts +38 -0
  282. package/dist/dts/services/task-tracker/TaskTracker.d.ts.map +1 -0
  283. package/dist/dts/services/task-tracker/TrackerLayerMap.d.ts +14 -0
  284. package/dist/dts/services/task-tracker/TrackerLayerMap.d.ts.map +1 -0
  285. package/dist/dts/shim/bin.d.ts +3 -0
  286. package/dist/dts/shim/bin.d.ts.map +1 -0
  287. package/dist/dts/shim/main.d.ts +36 -0
  288. package/dist/dts/shim/main.d.ts.map +1 -0
  289. package/dist/dts/shim/parseArgs.d.ts +11 -0
  290. package/dist/dts/shim/parseArgs.d.ts.map +1 -0
  291. package/dist/dts/shim/schemas.d.ts +55 -0
  292. package/dist/dts/shim/schemas.d.ts.map +1 -0
  293. package/dist/esm/Events.js +41 -0
  294. package/dist/esm/Events.js.map +1 -0
  295. package/dist/esm/LalphMain.js +56 -0
  296. package/dist/esm/LalphMain.js.map +1 -0
  297. package/dist/esm/Main.js +112 -0
  298. package/dist/esm/Main.js.map +1 -0
  299. package/dist/esm/index.js +101 -0
  300. package/dist/esm/index.js.map +1 -0
  301. package/dist/esm/lib/AnalysisPrompts.js +54 -0
  302. package/dist/esm/lib/AnalysisPrompts.js.map +1 -0
  303. package/dist/esm/lib/BranchParser.js +36 -0
  304. package/dist/esm/lib/BranchParser.js.map +1 -0
  305. package/dist/esm/lib/MermaidToPlantUml.js +89 -0
  306. package/dist/esm/lib/MermaidToPlantUml.js.map +1 -0
  307. package/dist/esm/lib/SpecHtmlGenerator.js +153 -0
  308. package/dist/esm/lib/SpecHtmlGenerator.js.map +1 -0
  309. package/dist/esm/lib/StreamJsonParser.js +79 -0
  310. package/dist/esm/lib/StreamJsonParser.js.map +1 -0
  311. package/dist/esm/lib/TelegramFormatter.js +114 -0
  312. package/dist/esm/lib/TelegramFormatter.js.map +1 -0
  313. package/dist/esm/lib/TelegraphHtml.js +57 -0
  314. package/dist/esm/lib/TelegraphHtml.js.map +1 -0
  315. package/dist/esm/lib/TelegraphMarkdown.js +338 -0
  316. package/dist/esm/lib/TelegraphMarkdown.js.map +1 -0
  317. package/dist/esm/package.json +4 -0
  318. package/dist/esm/schemas/CredentialSchemas.js +22 -0
  319. package/dist/esm/schemas/CredentialSchemas.js.map +1 -0
  320. package/dist/esm/schemas/GitHubSchemas.js +50 -0
  321. package/dist/esm/schemas/GitHubSchemas.js.map +1 -0
  322. package/dist/esm/schemas/LinearSchemas.js +52 -0
  323. package/dist/esm/schemas/LinearSchemas.js.map +1 -0
  324. package/dist/esm/schemas/ProjectSchemas.js +18 -0
  325. package/dist/esm/schemas/ProjectSchemas.js.map +1 -0
  326. package/dist/esm/schemas/TrackerSchemas.js +26 -0
  327. package/dist/esm/schemas/TrackerSchemas.js.map +1 -0
  328. package/dist/esm/services/AppContext.js +48 -0
  329. package/dist/esm/services/AppContext.js.map +1 -0
  330. package/dist/esm/services/AppRuntimeConfig.js +26 -0
  331. package/dist/esm/services/AppRuntimeConfig.js.map +1 -0
  332. package/dist/esm/services/AutoMerge.js +131 -0
  333. package/dist/esm/services/AutoMerge.js.map +1 -0
  334. package/dist/esm/services/ChatMachine.js +855 -0
  335. package/dist/esm/services/ChatMachine.js.map +1 -0
  336. package/dist/esm/services/CommentTimer.js +72 -0
  337. package/dist/esm/services/CommentTimer.js.map +1 -0
  338. package/dist/esm/services/CredentialStore.js +59 -0
  339. package/dist/esm/services/CredentialStore.js.map +1 -0
  340. package/dist/esm/services/CredentialWatcher.js +67 -0
  341. package/dist/esm/services/CredentialWatcher.js.map +1 -0
  342. package/dist/esm/services/Credentials.js +121 -0
  343. package/dist/esm/services/Credentials.js.map +1 -0
  344. package/dist/esm/services/EventLoop.js +128 -0
  345. package/dist/esm/services/EventLoop.js.map +1 -0
  346. package/dist/esm/services/GitHubClient/GitHubClient.js +227 -0
  347. package/dist/esm/services/GitHubClient/GitHubClient.js.map +1 -0
  348. package/dist/esm/services/GitHubClient/OctokitClient.js +320 -0
  349. package/dist/esm/services/GitHubClient/OctokitClient.js.map +1 -0
  350. package/dist/esm/services/GitHubClient.js +227 -0
  351. package/dist/esm/services/GitHubClient.js.map +1 -0
  352. package/dist/esm/services/GitHubEventSource.js +136 -0
  353. package/dist/esm/services/GitHubEventSource.js.map +1 -0
  354. package/dist/esm/services/GitHubIssueTracker.js +111 -0
  355. package/dist/esm/services/GitHubIssueTracker.js.map +1 -0
  356. package/dist/esm/services/LalphConfig.js +130 -0
  357. package/dist/esm/services/LalphConfig.js.map +1 -0
  358. package/dist/esm/services/LalphConfigReader.js +71 -0
  359. package/dist/esm/services/LalphConfigReader.js.map +1 -0
  360. package/dist/esm/services/LalphDirectory.js +36 -0
  361. package/dist/esm/services/LalphDirectory.js.map +1 -0
  362. package/dist/esm/services/LinearSdkClient.js +140 -0
  363. package/dist/esm/services/LinearSdkClient.js.map +1 -0
  364. package/dist/esm/services/LinearTracker.js +82 -0
  365. package/dist/esm/services/LinearTracker.js.map +1 -0
  366. package/dist/esm/services/MessengerAdapter/MessengerAdapter.js +21 -0
  367. package/dist/esm/services/MessengerAdapter/MessengerAdapter.js.map +1 -0
  368. package/dist/esm/services/MessengerAdapter/TelegramAdapter.js +124 -0
  369. package/dist/esm/services/MessengerAdapter/TelegramAdapter.js.map +1 -0
  370. package/dist/esm/services/MessengerAdapter/TelegramConfig.js +71 -0
  371. package/dist/esm/services/MessengerAdapter/TelegramConfig.js.map +1 -0
  372. package/dist/esm/services/MessengerAdapter.js +21 -0
  373. package/dist/esm/services/MessengerAdapter.js.map +1 -0
  374. package/dist/esm/services/OctokitClient.js +341 -0
  375. package/dist/esm/services/OctokitClient.js.map +1 -0
  376. package/dist/esm/services/PlanOverviewUploader.js +109 -0
  377. package/dist/esm/services/PlanOverviewUploader.js.map +1 -0
  378. package/dist/esm/services/PlanOverviewUploaderMap.js +17 -0
  379. package/dist/esm/services/PlanOverviewUploaderMap.js.map +1 -0
  380. package/dist/esm/services/PlanSession.js +471 -0
  381. package/dist/esm/services/PlanSession.js.map +1 -0
  382. package/dist/esm/services/ProjectStore.js +98 -0
  383. package/dist/esm/services/ProjectStore.js.map +1 -0
  384. package/dist/esm/services/PullRequestTracker.js +177 -0
  385. package/dist/esm/services/PullRequestTracker.js.map +1 -0
  386. package/dist/esm/services/SpecUploader.js +101 -0
  387. package/dist/esm/services/SpecUploader.js.map +1 -0
  388. package/dist/esm/services/SpecUploaderMap.js +17 -0
  389. package/dist/esm/services/SpecUploaderMap.js.map +1 -0
  390. package/dist/esm/services/TaskEventSource.js +50 -0
  391. package/dist/esm/services/TaskEventSource.js.map +1 -0
  392. package/dist/esm/services/TaskTracker/GitHubIssueTracker.js +148 -0
  393. package/dist/esm/services/TaskTracker/GitHubIssueTracker.js.map +1 -0
  394. package/dist/esm/services/TaskTracker/LinearSdkClient.js +140 -0
  395. package/dist/esm/services/TaskTracker/LinearSdkClient.js.map +1 -0
  396. package/dist/esm/services/TaskTracker/LinearTracker.js +119 -0
  397. package/dist/esm/services/TaskTracker/LinearTracker.js.map +1 -0
  398. package/dist/esm/services/TaskTracker/TaskTracker.js +12 -0
  399. package/dist/esm/services/TaskTracker/TaskTracker.js.map +1 -0
  400. package/dist/esm/services/TaskTracker/TrackerLayerMap.js +19 -0
  401. package/dist/esm/services/TaskTracker/TrackerLayerMap.js.map +1 -0
  402. package/dist/esm/services/TaskTracker/buildEventStream.js +47 -0
  403. package/dist/esm/services/TaskTracker/buildEventStream.js.map +1 -0
  404. package/dist/esm/services/TaskTracker.js +12 -0
  405. package/dist/esm/services/TaskTracker.js.map +1 -0
  406. package/dist/esm/services/TelegramAdapter.js +118 -0
  407. package/dist/esm/services/TelegramAdapter.js.map +1 -0
  408. package/dist/esm/services/TelegramConfig.js +71 -0
  409. package/dist/esm/services/TelegramConfig.js.map +1 -0
  410. package/dist/esm/services/TelegramConfigStore.js +71 -0
  411. package/dist/esm/services/TelegramConfigStore.js.map +1 -0
  412. package/dist/esm/services/TelegramNotifier.js +41 -0
  413. package/dist/esm/services/TelegramNotifier.js.map +1 -0
  414. package/dist/esm/services/TrackerLayerMap.js +19 -0
  415. package/dist/esm/services/TrackerLayerMap.js.map +1 -0
  416. package/dist/esm/services/TrackerResolver.js +36 -0
  417. package/dist/esm/services/TrackerResolver.js.map +1 -0
  418. package/dist/esm/services/messenger/MessengerAdapter.js +21 -0
  419. package/dist/esm/services/messenger/MessengerAdapter.js.map +1 -0
  420. package/dist/esm/services/messenger/TelegramAdapter.js +118 -0
  421. package/dist/esm/services/messenger/TelegramAdapter.js.map +1 -0
  422. package/dist/esm/services/task-tracker/GitHubIssueTracker.js +150 -0
  423. package/dist/esm/services/task-tracker/GitHubIssueTracker.js.map +1 -0
  424. package/dist/esm/services/task-tracker/LinearTracker.js +120 -0
  425. package/dist/esm/services/task-tracker/LinearTracker.js.map +1 -0
  426. package/dist/esm/services/task-tracker/TaskTracker.js +12 -0
  427. package/dist/esm/services/task-tracker/TaskTracker.js.map +1 -0
  428. package/dist/esm/services/task-tracker/TrackerLayerMap.js +19 -0
  429. package/dist/esm/services/task-tracker/TrackerLayerMap.js.map +1 -0
  430. package/dist/esm/shim/bin.js +28 -0
  431. package/dist/esm/shim/bin.js.map +1 -0
  432. package/dist/esm/shim/main.js +196 -0
  433. package/dist/esm/shim/main.js.map +1 -0
  434. package/dist/esm/shim/parseArgs.js +39 -0
  435. package/dist/esm/shim/parseArgs.js.map +1 -0
  436. package/dist/esm/shim/schemas.js +28 -0
  437. package/dist/esm/shim/schemas.js.map +1 -0
  438. package/lib/AnalysisPrompts/package.json +6 -0
  439. package/lib/BranchParser/package.json +6 -0
  440. package/lib/MermaidToPlantUml/package.json +6 -0
  441. package/lib/SpecHtmlGenerator/package.json +6 -0
  442. package/lib/StreamJsonParser/package.json +6 -0
  443. package/lib/TelegramFormatter/package.json +6 -0
  444. package/lib/TelegraphMarkdown/package.json +6 -0
  445. package/package.json +360 -0
  446. package/schemas/CredentialSchemas/package.json +6 -0
  447. package/schemas/GitHubSchemas/package.json +6 -0
  448. package/schemas/LinearSchemas/package.json +6 -0
  449. package/schemas/ProjectSchemas/package.json +6 -0
  450. package/schemas/TrackerSchemas/package.json +6 -0
  451. package/services/AppContext/package.json +6 -0
  452. package/services/AppRuntimeConfig/package.json +6 -0
  453. package/services/AutoMerge/package.json +6 -0
  454. package/services/ChatMachine/package.json +6 -0
  455. package/services/CommentTimer/package.json +6 -0
  456. package/services/EventLoop/package.json +6 -0
  457. package/services/GitHubClient/package.json +6 -0
  458. package/services/LalphConfig/package.json +6 -0
  459. package/services/LinearSdkClient/package.json +6 -0
  460. package/services/MessengerAdapter/MessengerAdapter/package.json +6 -0
  461. package/services/MessengerAdapter/TelegramAdapter/package.json +6 -0
  462. package/services/OctokitClient/package.json +6 -0
  463. package/services/PlanOverviewUploader/package.json +6 -0
  464. package/services/PlanOverviewUploaderMap/package.json +6 -0
  465. package/services/PlanSession/package.json +6 -0
  466. package/services/ProjectStore/package.json +6 -0
  467. package/services/PullRequestTracker/package.json +6 -0
  468. package/services/TaskTracker/GitHubIssueTracker/package.json +6 -0
  469. package/services/TaskTracker/LinearTracker/package.json +6 -0
  470. package/services/TaskTracker/TaskTracker/package.json +6 -0
  471. package/services/TelegramConfig/package.json +6 -0
  472. package/services/TrackerLayerMap/package.json +6 -0
  473. package/shim/bin/package.json +6 -0
  474. package/shim/main/package.json +6 -0
  475. package/shim/parseArgs/package.json +6 -0
  476. package/shim/schemas/package.json +6 -0
  477. package/src/Events.ts +98 -0
  478. package/src/Main.ts +177 -0
  479. package/src/index.ts +124 -0
  480. package/src/lib/AnalysisPrompts.ts +54 -0
  481. package/src/lib/BranchParser.ts +58 -0
  482. package/src/lib/MermaidToPlantUml.ts +103 -0
  483. package/src/lib/SpecHtmlGenerator.ts +199 -0
  484. package/src/lib/StreamJsonParser.ts +99 -0
  485. package/src/lib/TelegramFormatter.ts +151 -0
  486. package/src/lib/TelegraphMarkdown.ts +305 -0
  487. package/src/schemas/CredentialSchemas.ts +23 -0
  488. package/src/schemas/GitHubSchemas.ts +50 -0
  489. package/src/schemas/LinearSchemas.ts +57 -0
  490. package/src/schemas/ProjectSchemas.ts +18 -0
  491. package/src/schemas/TrackerSchemas.ts +27 -0
  492. package/src/services/AppContext.ts +72 -0
  493. package/src/services/AppRuntimeConfig.ts +23 -0
  494. package/src/services/AutoMerge.ts +198 -0
  495. package/src/services/ChatMachine.ts +911 -0
  496. package/src/services/CommentTimer.ts +133 -0
  497. package/src/services/EventLoop.ts +321 -0
  498. package/src/services/GitHubClient.ts +282 -0
  499. package/src/services/LalphConfig.ts +218 -0
  500. package/src/services/LinearSdkClient.ts +181 -0
  501. package/src/services/MessengerAdapter/MessengerAdapter.ts +53 -0
  502. package/src/services/MessengerAdapter/TelegramAdapter.ts +145 -0
  503. package/src/services/OctokitClient.ts +628 -0
  504. package/src/services/PlanOverviewUploader.ts +160 -0
  505. package/src/services/PlanOverviewUploaderMap.ts +17 -0
  506. package/src/services/PlanSession.ts +589 -0
  507. package/src/services/ProjectStore.ts +140 -0
  508. package/src/services/PullRequestTracker.ts +253 -0
  509. package/src/services/TaskTracker/GitHubIssueTracker.ts +162 -0
  510. package/src/services/TaskTracker/LinearTracker.ts +141 -0
  511. package/src/services/TaskTracker/TaskTracker.ts +34 -0
  512. package/src/services/TelegramConfig.ts +120 -0
  513. package/src/services/TrackerLayerMap.ts +19 -0
  514. package/src/shim/bin.ts +36 -0
  515. package/src/shim/main.ts +255 -0
  516. package/src/shim/parseArgs.ts +43 -0
  517. package/src/shim/schemas.ts +38 -0
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Comment timer debounce service for per-PR timer management
3
+ * @since 1.0.0
4
+ */
5
+ import { Context, Data, Duration, Effect, Fiber, HashMap, Layer, Option, Ref } from "effect"
6
+ import { BranchParser } from "../lib/BranchParser.js"
7
+ import type { GitHubComment, GitHubPullRequest } from "../schemas/GitHubSchemas.js"
8
+ import { AppRuntimeConfig } from "./AppRuntimeConfig.js"
9
+ import { MessengerAdapter } from "./MessengerAdapter/MessengerAdapter.js"
10
+ import { TaskTracker } from "./TaskTracker/TaskTracker.js"
11
+
12
+ /**
13
+ * @since 1.0.0
14
+ * @category errors
15
+ */
16
+ export class CommentTimerError extends Data.TaggedError("CommentTimerError")<{
17
+ message: string
18
+ cause: unknown
19
+ }> {}
20
+
21
+ /**
22
+ * @since 1.0.0
23
+ * @category services
24
+ */
25
+ export interface CommentTimerService {
26
+ readonly handleComment: (
27
+ pr: GitHubPullRequest,
28
+ comment: GitHubComment
29
+ ) => Effect.Effect<void, CommentTimerError>
30
+ readonly shutdown: Effect.Effect<void, CommentTimerError>
31
+ }
32
+
33
+ /**
34
+ * @since 1.0.0
35
+ * @category context
36
+ */
37
+ export class CommentTimer extends Context.Tag("CommentTimer")<CommentTimer, CommentTimerService>() {}
38
+
39
+ /**
40
+ * @since 1.0.0
41
+ * @category layers
42
+ */
43
+ export const CommentTimerLive = Layer.effect(
44
+ CommentTimer,
45
+ Effect.gen(function*() {
46
+ const config = yield* AppRuntimeConfig
47
+ const tracker = yield* TaskTracker
48
+ const notifier = yield* MessengerAdapter
49
+ const branchParser = yield* BranchParser
50
+
51
+ const timersRef = yield* Ref.make(HashMap.empty<string, Fiber.RuntimeFiber<void, never>>())
52
+
53
+ const prKey = (pr: GitHubPullRequest) => `${pr.repo}#${pr.number}`
54
+
55
+ const handleComment = (pr: GitHubPullRequest, comment: GitHubComment) =>
56
+ Effect.gen(function*() {
57
+ const issueIdOption = branchParser.resolveIssueId(pr)
58
+
59
+ if (Option.isNone(issueIdOption)) {
60
+ yield* Effect.logWarning("No issue ID found in branch name").pipe(
61
+ Effect.annotateLogs("service", "CommentTimer"),
62
+ Effect.annotateLogs("branch", pr.headRef)
63
+ )
64
+ return
65
+ }
66
+
67
+ const issueId = issueIdOption.value
68
+ const key = prKey(pr)
69
+ const keyword = config.triggerKeyword
70
+
71
+ if (comment.body.toLowerCase().includes(keyword.toLowerCase())) {
72
+ yield* tracker.moveToTodo(issueId).pipe(
73
+ Effect.tapError((err) => Effect.logError(`Failed to move issue to todo: ${err.message}`)),
74
+ Effect.orElseSucceed(() => undefined)
75
+ )
76
+ yield* notifier.sendMessage(
77
+ `🚨 <b>Keyword "${keyword}" detected</b>\nComment on <a href="${pr.html_url}">${pr.title}</a> — moved <code>${issueId}</code> to Todo`
78
+ ).pipe(
79
+ Effect.tapError((err) => Effect.logError(`Failed to send Telegram notification: ${err.message}`)),
80
+ Effect.orElseSucceed(() => undefined)
81
+ )
82
+ return
83
+ }
84
+
85
+ const existingTimers = yield* Ref.get(timersRef)
86
+ const existingFiber = HashMap.get(existingTimers, key)
87
+ if (Option.isSome(existingFiber)) {
88
+ yield* Fiber.interrupt(existingFiber.value)
89
+ }
90
+
91
+ const timerFiber = yield* Effect.sleep(Duration.seconds(config.timerDelaySeconds)).pipe(
92
+ Effect.flatMap(() =>
93
+ Effect.gen(function*() {
94
+ yield* tracker.moveToTodo(issueId)
95
+ yield* notifier.sendMessage(
96
+ `⏰ <b>Timer expired</b>\n<a href="${pr.html_url}">${pr.title}</a> — moved <code>${issueId}</code> to Todo`
97
+ )
98
+ })
99
+ ),
100
+ Effect.tapError((err) => Effect.logError(`Timer fiber error: ${String(err)}`)),
101
+ Effect.orElseSucceed(() => undefined),
102
+ Effect.ensuring(
103
+ Ref.update(timersRef, (m) => HashMap.remove(m, key))
104
+ ),
105
+ Effect.fork
106
+ )
107
+
108
+ yield* Ref.update(timersRef, (m) => HashMap.set(m, key, timerFiber))
109
+ }).pipe(
110
+ Effect.mapError((err) =>
111
+ new CommentTimerError({
112
+ message: `Failed to handle comment: ${String(err)}`,
113
+ cause: err
114
+ })
115
+ )
116
+ )
117
+
118
+ const shutdown = Effect.gen(function*() {
119
+ const timers = yield* Ref.get(timersRef)
120
+ yield* Fiber.interruptAll(HashMap.values(timers))
121
+ yield* Ref.set(timersRef, HashMap.empty())
122
+ }).pipe(
123
+ Effect.mapError((err) =>
124
+ new CommentTimerError({
125
+ message: `Failed to shutdown: ${String(err)}`,
126
+ cause: err
127
+ })
128
+ )
129
+ )
130
+
131
+ return CommentTimer.of({ handleComment, shutdown })
132
+ })
133
+ )
@@ -0,0 +1,321 @@
1
+ /**
2
+ * Event loop and layer construction for the notification service
3
+ * @since 1.0.0
4
+ */
5
+ import * as Machine from "@effect/experimental/Machine"
6
+ import { Console, Effect, Layer, Match, Option, Stream } from "effect"
7
+ import type { AppEvent } from "../Events.js"
8
+ import { BranchParser, BranchParserLive } from "../lib/BranchParser.js"
9
+ import { GitHubRepo } from "../schemas/GitHubSchemas.js"
10
+ import { AutoMerge, AutoMergeLive } from "./AutoMerge.js"
11
+ import {
12
+ chatMachine,
13
+ IDLE_KEYBOARD,
14
+ PlanAnalysisReadyReq,
15
+ PlanAwaitingInputReq,
16
+ PlanCompletedReq,
17
+ PlanFailedReq,
18
+ PlanQuestionReceived,
19
+ PlanSpecCreatedReq,
20
+ PlanSpecUpdatedReq,
21
+ PlanTextOutput,
22
+ UserMessage
23
+ } from "./ChatMachine.js"
24
+ import { CommentTimer, CommentTimerLive } from "./CommentTimer.js"
25
+ import { GitHubClient, GitHubClientLive } from "./GitHubClient.js"
26
+ import { LalphConfig, LalphConfigLive } from "./LalphConfig.js"
27
+ import { MessengerAdapter } from "./MessengerAdapter/MessengerAdapter.js"
28
+ import { TelegramAdapterLive } from "./MessengerAdapter/TelegramAdapter.js"
29
+ import { OctokitClientLive } from "./OctokitClient.js"
30
+ import { PlanOverviewUploaderMap } from "./PlanOverviewUploaderMap.js"
31
+ import { PlanSession, PlanSessionLive } from "./PlanSession.js"
32
+ import { ProjectStoreLive } from "./ProjectStore.js"
33
+ import { PullRequestTracker, PullRequestTrackerLive } from "./PullRequestTracker.js"
34
+ import { TaskTracker } from "./TaskTracker/TaskTracker.js"
35
+ import { TrackerLayerMap } from "./TrackerLayerMap.js"
36
+
37
+ // Re-export button labels from ChatMachine for backwards compatibility
38
+ export {
39
+ ABORT_BUTTON_LABEL,
40
+ APPROVE_BUTTON_LABEL,
41
+ BUFFER_BUTTON_LABEL,
42
+ BUG_BUTTON_LABEL,
43
+ DISCARD_BUTTON_LABEL,
44
+ FEATURE_BUTTON_LABEL,
45
+ INTERRUPT_BUTTON_LABEL,
46
+ NEW_PROJECT_BUTTON_LABEL,
47
+ OTHER_BUTTON_LABEL,
48
+ PLAN_BUTTON_LABEL,
49
+ REFACTOR_BUTTON_LABEL
50
+ } from "./ChatMachine.js"
51
+
52
+ // ── Layer composition (unchanged) ────────────────────────────────
53
+
54
+ const lalphConfigLayer = LalphConfigLive
55
+
56
+ const octokitLayer = OctokitClientLive.pipe(
57
+ Layer.provide(lalphConfigLayer)
58
+ )
59
+
60
+ const telegramAdapterLayer = TelegramAdapterLive
61
+
62
+ const trackerLayerMapLayer = TrackerLayerMap.Default.pipe(
63
+ Layer.provide(octokitLayer),
64
+ Layer.provide(lalphConfigLayer)
65
+ )
66
+
67
+ const taskTrackerLayer = Layer.unwrapEffect(
68
+ Effect.gen(function*() {
69
+ const config = yield* LalphConfig
70
+ return TrackerLayerMap.get(config.issueSource)
71
+ })
72
+ ).pipe(
73
+ Layer.provide(trackerLayerMapLayer),
74
+ Layer.provide(lalphConfigLayer)
75
+ )
76
+
77
+ const servicesLayer = Layer.mergeAll(
78
+ GitHubClientLive,
79
+ telegramAdapterLayer,
80
+ taskTrackerLayer
81
+ ).pipe(
82
+ Layer.provide(octokitLayer)
83
+ )
84
+
85
+ const autoMergeLayer = AutoMergeLive.pipe(
86
+ Layer.provide(servicesLayer),
87
+ Layer.provide(lalphConfigLayer)
88
+ )
89
+
90
+ const eventSourcesLayer = PullRequestTrackerLive.pipe(
91
+ Layer.provide(servicesLayer),
92
+ Layer.provide(lalphConfigLayer)
93
+ )
94
+
95
+ const branchParserLayer = BranchParserLive
96
+
97
+ const commentTimerLayer = CommentTimerLive.pipe(
98
+ Layer.provide(servicesLayer),
99
+ Layer.provide(branchParserLayer)
100
+ )
101
+
102
+ const planSessionLayer = PlanSessionLive.pipe(
103
+ Layer.provide(lalphConfigLayer)
104
+ )
105
+
106
+ const projectStoreLayer = ProjectStoreLive
107
+
108
+ const planOverviewUploaderMapLayer = PlanOverviewUploaderMap.Default.pipe(
109
+ Layer.provide(octokitLayer)
110
+ )
111
+
112
+ const planOverviewUploaderLayer = Layer.unwrapEffect(
113
+ Effect.gen(function*() {
114
+ const config = yield* LalphConfig
115
+ return PlanOverviewUploaderMap.get(config.specUploader)
116
+ })
117
+ ).pipe(
118
+ Layer.provide(planOverviewUploaderMapLayer),
119
+ Layer.provide(lalphConfigLayer)
120
+ )
121
+
122
+ /**
123
+ * The main layer providing all services for the event loop.
124
+ * Requires AppRuntimeConfig, TelegramConfigStore, and PlanCommandBuilder to be provided externally.
125
+ * @since 1.0.0
126
+ * @category layers
127
+ */
128
+ export const MainLayer = Layer.mergeAll(
129
+ lalphConfigLayer,
130
+ servicesLayer,
131
+ eventSourcesLayer,
132
+ autoMergeLayer,
133
+ commentTimerLayer,
134
+ branchParserLayer,
135
+ planSessionLayer,
136
+ octokitLayer,
137
+ projectStoreLayer,
138
+ planOverviewUploaderLayer
139
+ )
140
+
141
+ // ── Event loop ───────────────────────────────────────────────────
142
+
143
+ /**
144
+ * The main event loop that boots the chat state machine, bridges streams,
145
+ * and dispatches external events (PR/task notifications).
146
+ * @since 1.0.0
147
+ * @category event-loop
148
+ */
149
+ export const runEventLoop = Effect.gen(function*() {
150
+ const pullRequestTracker = yield* PullRequestTracker
151
+ const autoMerge = yield* AutoMerge
152
+ const notifier = yield* MessengerAdapter
153
+ const github = yield* GitHubClient
154
+ const timer = yield* CommentTimer
155
+ const taskTracker = yield* TaskTracker
156
+ const branchParser = yield* BranchParser
157
+ const planSession = yield* PlanSession
158
+
159
+ // Boot the chat state machine
160
+ const actor = yield* Machine.boot(chatMachine)
161
+
162
+ // ── External event dispatch (unchanged) ──────────────────────
163
+
164
+ const dispatchEvent = (event: AppEvent) =>
165
+ Match.value(event).pipe(
166
+ Match.tag("TaskCreated", (e) =>
167
+ notifier.sendMessage(`📋 <b>New task created</b>\n<a href="${e.issue.url}">${e.issue.title}</a>`)),
168
+ Match.tag("TaskUpdated", (e) =>
169
+ notifier.sendMessage(
170
+ `✏️ <b>Task moved to ${e.issue.state}</b>\n<a href="${e.issue.url}">${e.issue.title}</a>\n${e.previousState} → ${e.issue.state}`
171
+ )),
172
+ Match.tag("PROpened", (e) =>
173
+ notifier.sendMessage(`🔀 <b>New PR opened</b>\n<a href="${e.pr.html_url}">${e.pr.title}</a>`)),
174
+ Match.tag("PRConflictDetected", (e) =>
175
+ Effect.gen(function*() {
176
+ yield* github.postComment(
177
+ new GitHubRepo({
178
+ id: 0,
179
+ name: "",
180
+ full_name: e.pr.repo,
181
+ owner: { login: "" },
182
+ html_url: ""
183
+ }),
184
+ e.pr.number,
185
+ "This PR has merge conflicts that need to be resolved."
186
+ )
187
+ const issueIdOption = branchParser.resolveIssueId(e.pr)
188
+ if (Option.isSome(issueIdOption)) {
189
+ const issueId = issueIdOption.value
190
+ yield* taskTracker.moveToTodo(issueId).pipe(
191
+ Effect.tapError((err) =>
192
+ Effect.logError(`Failed to move to todo: ${err.message}`)
193
+ ),
194
+ Effect.orElseSucceed(() =>
195
+ undefined
196
+ )
197
+ )
198
+ yield* taskTracker.setPriorityUrgent(issueId).pipe(
199
+ Effect.tapError((err) => Effect.logError(`Failed to set priority: ${err.message}`)),
200
+ Effect.orElseSucceed(() => undefined)
201
+ )
202
+ } else {
203
+ yield* Effect.logWarning("No issue ID found in branch name").pipe(
204
+ Effect.annotateLogs("branch", e.pr.headRef)
205
+ )
206
+ }
207
+ yield* notifier.sendMessage(
208
+ `⚠️ <b>Conflict detected</b>\n<a href="${e.pr.html_url}">${e.pr.title}</a>`
209
+ )
210
+ })),
211
+ Match.tag("PRCommentAdded", (e) =>
212
+ timer.handleComment(e.pr, e.comment).pipe(
213
+ Effect.tapError((err) => Effect.logError(`Comment timer error: ${err.message}`)),
214
+ Effect.orElseSucceed(() => undefined)
215
+ )),
216
+ Match.tag("PRAutoMerged", (e) =>
217
+ notifier.sendMessage(
218
+ `✅ <b>PR auto-merged</b>\n<a href="${e.pr.html_url}">${e.pr.title}</a>`
219
+ )),
220
+ Match.tag("PRCIFailed", (e) =>
221
+ Effect.gen(function*() {
222
+ const issueIdOption = branchParser.resolveIssueId(e.pr)
223
+ if (Option.isSome(issueIdOption)) {
224
+ const issueId = issueIdOption.value
225
+ yield* taskTracker.moveToTodo(issueId).pipe(
226
+ Effect.tapError((err) => Effect.logError(`Failed to move to todo: ${err.message}`)),
227
+ Effect.orElseSucceed(() => undefined)
228
+ )
229
+ yield* taskTracker.setPriorityUrgent(issueId).pipe(
230
+ Effect.tapError((err) => Effect.logError(`Failed to set priority: ${err.message}`)),
231
+ Effect.orElseSucceed(() => undefined)
232
+ )
233
+ } else {
234
+ yield* Effect.logWarning("No issue ID found in branch name").pipe(
235
+ Effect.annotateLogs("branch", e.pr.headRef)
236
+ )
237
+ }
238
+ const failedCheckNames = e.failedChecks.map((c) => c.name).join(", ")
239
+ yield* notifier.sendMessage(
240
+ `❌ <b>CI failed</b>\n<a href="${e.pr.html_url}">${e.pr.title}</a>\nFailed checks: ${failedCheckNames}`
241
+ )
242
+ })),
243
+ Match.exhaustive
244
+ )
245
+
246
+ // ── Stream bridges ───────────────────────────────────────────
247
+
248
+ // Telegram messages → UserMessage requests
249
+ const incomingMessageStream = notifier.incomingMessages.pipe(
250
+ Stream.mapEffect((msg) =>
251
+ actor.send(new UserMessage({ text: msg.text })).pipe(
252
+ Effect.catchAll((err) => Effect.logError(`Incoming message error: ${String(err)}`))
253
+ )
254
+ )
255
+ )
256
+
257
+ // PlanSession events → Machine requests
258
+ const planEventStream = planSession.events.pipe(
259
+ Stream.mapEffect((event) =>
260
+ Match.value(event).pipe(
261
+ Match.tag("PlanTextOutput", (e) => actor.send(new PlanTextOutput({ text: e.text }))),
262
+ Match.tag("PlanQuestion", (e) => actor.send(new PlanQuestionReceived({ questions: e.questions }))),
263
+ Match.tag("PlanSpecCreated", () => actor.send(new PlanSpecCreatedReq())),
264
+ Match.tag("PlanSpecUpdated", () => actor.send(new PlanSpecUpdatedReq())),
265
+ Match.tag("PlanAnalysisReady", () => actor.send(new PlanAnalysisReadyReq())),
266
+ Match.tag("PlanAwaitingInput", () => actor.send(new PlanAwaitingInputReq())),
267
+ Match.tag("PlanCompleted", () => actor.send(new PlanCompletedReq())),
268
+ Match.tag("PlanFailed", (e) => actor.send(new PlanFailedReq({ message: e.message }))),
269
+ Match.exhaustive
270
+ ).pipe(
271
+ Effect.catchAll((err) => Effect.logError(`Plan event relay error: ${String(err)}`))
272
+ )
273
+ )
274
+ )
275
+
276
+ // ── External event streams ───────────────────────────────────
277
+
278
+ const mergedStream = Stream.merge(
279
+ Stream.merge(
280
+ pullRequestTracker.eventStream.pipe(Stream.map((e): AppEvent => e)),
281
+ autoMerge.eventStream.pipe(Stream.map((e): AppEvent => e))
282
+ ),
283
+ taskTracker.eventStream.pipe(Stream.map((e): AppEvent => e))
284
+ )
285
+
286
+ yield* notifier.sendMessage({
287
+ text: "🚀 Notification service started.",
288
+ replyKeyboard: IDLE_KEYBOARD
289
+ })
290
+ yield* Console.log("🚀 Notification service started. Press Ctrl+C to stop.")
291
+
292
+ yield* Stream.merge(
293
+ incomingMessageStream,
294
+ planEventStream
295
+ ).pipe(
296
+ Stream.runDrain,
297
+ Effect.annotateLogs("service", "PlanSession"),
298
+ Effect.catchAll((err) => Effect.logError(`Plan stream error: ${String(err)}`)),
299
+ Effect.forkDaemon
300
+ )
301
+
302
+ yield* mergedStream.pipe(
303
+ Stream.runForEach((event) =>
304
+ dispatchEvent(event).pipe(
305
+ Effect.catchAll((err) => Effect.logError(`Event dispatch error: ${String(err)}`))
306
+ )
307
+ ),
308
+ Effect.ensuring(
309
+ timer.shutdown.pipe(
310
+ Effect.tapError((err) => Effect.logError(`Shutdown error: ${err.message}`)),
311
+ Effect.orElseSucceed(() => undefined)
312
+ )
313
+ ),
314
+ Effect.annotateLogs("service", "EventLoop"),
315
+ Effect.catchAll((err) => Effect.logError(`Event loop error: ${String(err)}`)),
316
+ Effect.forkDaemon
317
+ )
318
+
319
+ // Block until interrupted — keeps the Machine scope alive for daemon fibers
320
+ yield* Effect.never
321
+ }).pipe(Effect.scoped)