@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,56 @@
1
+ /**
2
+ * lalph-notify CLI entry point — zero-config notification service using lalph project config
3
+ * @since 1.0.0
4
+ */
5
+ import { Command, Options } from "@effect/cli";
6
+ import { NodeContext, NodeRuntime } from "@effect/platform-node";
7
+ import { Console, Effect, Option } from "effect";
8
+ import { makeMainLayer, runEventLoop } from "./Main.js";
9
+ import { Credentials, Monitor, RuntimeConfig } from "./schemas/CredentialSchemas.js";
10
+ import { findLalphDirectory, readLalphConfig, readTelegramConfig, setupTelegram, writeTelegramConfig } from "./services/LalphConfigReader.js";
11
+ const runLalphNotify = (interval, keyword, timer) => Effect.gen(function* () {
12
+ const lalphDir = yield* findLalphDirectory;
13
+ yield* Console.log(`Found lalph project at: ${lalphDir}`);
14
+ const config = yield* readLalphConfig(lalphDir);
15
+ yield* Console.log(`Issue source: ${config.issueSource}, repo: ${config.repoFullName}`);
16
+ const existingTelegram = yield* readTelegramConfig(lalphDir);
17
+ const telegram = Option.isSome(existingTelegram) ? existingTelegram.value : yield* Effect.gen(function* () {
18
+ const tg = yield* setupTelegram;
19
+ yield* writeTelegramConfig(lalphDir, tg);
20
+ yield* Console.log("Telegram config saved.");
21
+ return tg;
22
+ });
23
+ const monitor = new Monitor({
24
+ id: config.repoFullName,
25
+ backend: config.issueSource,
26
+ linearAccessToken: config.linearAccessToken,
27
+ repos: [config.repoFullName]
28
+ });
29
+ const creds = new Credentials({
30
+ githubToken: config.githubToken,
31
+ telegramBotToken: telegram.botToken,
32
+ telegramChatId: telegram.chatId,
33
+ monitors: [monitor]
34
+ });
35
+ const runtimeConfig = new RuntimeConfig({
36
+ pollIntervalSeconds: interval,
37
+ triggerKeyword: keyword,
38
+ timerDelaySeconds: timer
39
+ });
40
+ yield* runEventLoop.pipe(Effect.provide(makeMainLayer(creds, runtimeConfig)));
41
+ });
42
+ const lalphNotifyCommand = /*#__PURE__*/Command.make("lalph-notify", {
43
+ interval: Options.integer("interval").pipe(Options.withDefault(30), Options.withDescription("Poll interval in seconds")),
44
+ keyword: Options.text("keyword").pipe(Options.withDefault("urgent"), Options.withDescription("Trigger keyword for comment timer")),
45
+ timer: Options.integer("timer").pipe(Options.withDefault(300), Options.withDescription("Comment timer delay in seconds"))
46
+ }, ({
47
+ interval,
48
+ keyword,
49
+ timer
50
+ }) => runLalphNotify(interval, keyword, timer)).pipe(/*#__PURE__*/Command.withDescription("Zero-config notification service using lalph project config"));
51
+ const cli = /*#__PURE__*/Command.run(lalphNotifyCommand, {
52
+ name: "lalph-notify",
53
+ version: "1.0.0"
54
+ });
55
+ Effect.suspend(() => cli(process.argv)).pipe(Effect.provide(NodeContext.layer), NodeRuntime.runMain);
56
+ //# sourceMappingURL=LalphMain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LalphMain.js","names":["Command","Options","NodeContext","NodeRuntime","Console","Effect","Option","makeMainLayer","runEventLoop","Credentials","Monitor","RuntimeConfig","findLalphDirectory","readLalphConfig","readTelegramConfig","setupTelegram","writeTelegramConfig","runLalphNotify","interval","keyword","timer","gen","lalphDir","log","config","issueSource","repoFullName","existingTelegram","telegram","isSome","value","tg","monitor","id","backend","linearAccessToken","repos","creds","githubToken","telegramBotToken","botToken","telegramChatId","chatId","monitors","runtimeConfig","pollIntervalSeconds","triggerKeyword","timerDelaySeconds","pipe","provide","lalphNotifyCommand","make","integer","withDefault","withDescription","text","cli","run","name","version","suspend","process","argv","layer","runMain"],"sources":["../../src/LalphMain.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * lalph-notify CLI entry point — zero-config notification service using lalph project config
3
+ * @since 1.0.0
4
+ */
5
+ import { Command as CliCommand, Options, Prompt } from "@effect/cli";
6
+ import { Command as PlatformCommand, FetchHttpClient, FileSystem, Path } from "@effect/platform";
7
+ import { NodeContext, NodeRuntime } from "@effect/platform-node";
8
+ import { Config, Console, Effect, Layer, Logger, LogLevel, Option, Stream } from "effect";
9
+ import { fileURLToPath } from "node:url";
10
+ import { AppContext, AppContextLive } from "./services/AppContext.js";
11
+ import { AppRuntimeConfig, RuntimeConfig } from "./services/AppRuntimeConfig.js";
12
+ import { MainLayer, runEventLoop } from "./services/EventLoop.js";
13
+ import { LalphConfig } from "./services/LalphConfig.js";
14
+ import { MessengerAdapter } from "./services/MessengerAdapter/MessengerAdapter.js";
15
+ import { PlanCommandBuilder } from "./services/PlanSession.js";
16
+ import { TelegramConfig, TelegramConfigLive, TelegramConfigSchema } from "./services/TelegramConfig.js";
17
+ const lalphNotifyCommand = /*#__PURE__*/CliCommand.make("lalph-notify", {
18
+ interval: Options.integer("interval").pipe(Options.withDefault(30), Options.withDescription("Poll interval in seconds")),
19
+ keyword: Options.text("keyword").pipe(Options.withDefault("urgent"), Options.withDescription("Trigger keyword for comment timer")),
20
+ timer: Options.integer("timer").pipe(Options.withDefault(300), Options.withDescription("Comment timer delay in seconds"))
21
+ }, ({
22
+ interval,
23
+ keyword,
24
+ timer
25
+ }) => Effect.gen(function* () {
26
+ const store = yield* TelegramConfig;
27
+ const existingTelegram = yield* store.get;
28
+ const botToken = Option.isSome(existingTelegram) ? existingTelegram.value.botToken : yield* Prompt.text({
29
+ message: "Telegram bot token"
30
+ });
31
+ const storedChatId = Option.isSome(existingTelegram) ? existingTelegram.value.chatId : null;
32
+ if (Option.isNone(existingTelegram)) {
33
+ yield* store.set(new TelegramConfigSchema({
34
+ botToken,
35
+ chatId: null
36
+ }));
37
+ }
38
+ const autoMergeEnabled = yield* Prompt.confirm({
39
+ message: "Enable auto-merge?",
40
+ initial: false
41
+ });
42
+ const autoMergeWaitMinutes = autoMergeEnabled ? yield* Prompt.integer({
43
+ message: "Maximum minutes to wait after last push before merging",
44
+ min: 1
45
+ }) : null;
46
+ const runtimeConfig = new RuntimeConfig({
47
+ pollIntervalSeconds: interval,
48
+ triggerKeyword: keyword,
49
+ timerDelaySeconds: timer,
50
+ autoMergeEnabled,
51
+ ...(autoMergeWaitMinutes !== null ? {
52
+ autoMergeWaitMinutes
53
+ } : {})
54
+ });
55
+ const planCommandLayer = Layer.effect(PlanCommandBuilder, Effect.gen(function* () {
56
+ const appContext = yield* AppContext;
57
+ const fs = yield* FileSystem.FileSystem;
58
+ const pathService = yield* Path.Path;
59
+ // Resolve the real claude binary path
60
+ const realClaudePath = yield* PlatformCommand.make("which", "claude").pipe(PlatformCommand.string, Effect.map(s => s.trim()));
61
+ // Resolve tsx binary for running the TypeScript shim
62
+ const tsxPath = yield* PlatformCommand.make("which", "tsx").pipe(PlatformCommand.string, Effect.map(s => s.trim()));
63
+ // Resolve the SDK-based shim entry point relative to this file
64
+ const shimMainTs = pathService.join(pathService.dirname(fileURLToPath(import.meta.url)), "shim", "bin.ts");
65
+ yield* Effect.log("Resolved shim paths").pipe(Effect.annotateLogs({
66
+ realClaudePath,
67
+ tsxPath,
68
+ shimMainTs
69
+ }));
70
+ // Create shim directory and script that delegates to the SDK-based shim
71
+ const shimDir = pathService.join(appContext.configDir, "bin");
72
+ yield* fs.makeDirectory(shimDir, {
73
+ recursive: true
74
+ });
75
+ const shimPath = pathService.join(shimDir, "claude");
76
+ const shimScript = ["#!/bin/bash", `for arg in "$@"; do`, ` if [ "$arg" = "--output-format" ]; then`, ` exec ${JSON.stringify(realClaudePath)} "$@"`, ` fi`, `done`, `REAL_CLAUDE_PATH=${JSON.stringify(realClaudePath)} exec ${JSON.stringify(tsxPath)} ${JSON.stringify(shimMainTs)} "$@"`].join("\n");
77
+ yield* fs.writeFileString(shimPath, shimScript);
78
+ yield* fs.chmod(shimPath, 0o755);
79
+ yield* Effect.log("Claude SDK shim created").pipe(Effect.annotateLogs({
80
+ shimPath
81
+ }));
82
+ const originalPath = process.env["PATH"] ?? "";
83
+ const shimmedPath = `${shimDir}:${originalPath}`;
84
+ return tempFile => PlatformCommand.make("lalph", "plan", "--file", tempFile, "--dangerous").pipe(PlatformCommand.workingDirectory(appContext.projectRoot), PlatformCommand.env({
85
+ PATH: shimmedPath
86
+ }), PlatformCommand.stdout("pipe"), PlatformCommand.stderr("pipe"), PlatformCommand.stdin("pipe"));
87
+ }));
88
+ const appLayer = Layer.mergeAll(Layer.succeed(AppRuntimeConfig, runtimeConfig), Layer.succeed(TelegramConfig, store), planCommandLayer);
89
+ yield* Effect.gen(function* () {
90
+ const creds = yield* LalphConfig;
91
+ yield* Console.log(`Issue source: ${creds.issueSource}, repo: ${creds.repoFullName}`);
92
+ if (storedChatId === null) {
93
+ const messenger = yield* MessengerAdapter;
94
+ yield* Console.log("Send any message to your Telegram bot to continue...");
95
+ const messages = yield* messenger.incomingMessages.pipe(Stream.take(1), Stream.runCollect);
96
+ const firstMsg = [...messages][0];
97
+ yield* store.set(new TelegramConfigSchema({
98
+ botToken,
99
+ chatId: firstMsg.chatId
100
+ }));
101
+ yield* Console.log("Telegram config saved.");
102
+ }
103
+ yield* runEventLoop;
104
+ }).pipe(Effect.provide(MainLayer.pipe(Layer.provide(appLayer))));
105
+ })).pipe(/*#__PURE__*/CliCommand.withDescription("Zero-config notification service using lalph project config"));
106
+ const cli = /*#__PURE__*/CliCommand.run(lalphNotifyCommand, {
107
+ name: "lalph-notify",
108
+ version: "1.0.0"
109
+ });
110
+ const logLevelLayer = /*#__PURE__*/Layer.unwrapEffect(/*#__PURE__*/Config.logLevel("LOG_LEVEL").pipe(/*#__PURE__*/Config.withDefault(LogLevel.Info), /*#__PURE__*/Effect.map(Logger.minimumLogLevel)));
111
+ Effect.suspend(() => cli(process.argv)).pipe(Effect.provide(TelegramConfigLive), Effect.provide(AppContextLive), Effect.provide(FetchHttpClient.layer), Effect.provide(NodeContext.layer), Effect.provide(logLevelLayer), NodeRuntime.runMain);
112
+ //# sourceMappingURL=Main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Main.js","names":["Command","CliCommand","Options","Prompt","PlatformCommand","FetchHttpClient","FileSystem","Path","NodeContext","NodeRuntime","Config","Console","Effect","Layer","Logger","LogLevel","Option","Stream","fileURLToPath","AppContext","AppContextLive","AppRuntimeConfig","RuntimeConfig","MainLayer","runEventLoop","LalphConfig","MessengerAdapter","PlanCommandBuilder","TelegramConfig","TelegramConfigLive","TelegramConfigSchema","lalphNotifyCommand","make","interval","integer","pipe","withDefault","withDescription","keyword","text","timer","gen","store","existingTelegram","get","botToken","isSome","value","message","storedChatId","chatId","isNone","set","autoMergeEnabled","confirm","initial","autoMergeWaitMinutes","min","runtimeConfig","pollIntervalSeconds","triggerKeyword","timerDelaySeconds","planCommandLayer","effect","appContext","fs","pathService","realClaudePath","string","map","s","trim","tsxPath","shimMainTs","join","dirname","import","meta","url","log","annotateLogs","shimDir","configDir","makeDirectory","recursive","shimPath","shimScript","JSON","stringify","writeFileString","chmod","originalPath","process","env","shimmedPath","tempFile","workingDirectory","projectRoot","PATH","stdout","stderr","stdin","appLayer","mergeAll","succeed","creds","issueSource","repoFullName","messenger","messages","incomingMessages","take","runCollect","firstMsg","provide","cli","run","name","version","logLevelLayer","unwrapEffect","logLevel","Info","minimumLogLevel","suspend","argv","layer","runMain"],"sources":["../../src/Main.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ export * from "./schemas/TrackerSchemas.js";
5
+ /**
6
+ * @since 1.0.0
7
+ */
8
+ export * from "./schemas/GitHubSchemas.js";
9
+ /**
10
+ * @since 1.0.0
11
+ */
12
+ export * from "./schemas/CredentialSchemas.js";
13
+ /**
14
+ * @since 1.0.0
15
+ */
16
+ export * from "./schemas/LinearSchemas.js";
17
+ /**
18
+ * @since 1.0.0
19
+ */
20
+ export * from "./Events.js";
21
+ /**
22
+ * @since 1.0.0
23
+ */
24
+ export * from "./lib/BranchParser.js";
25
+ /**
26
+ * @since 1.0.0
27
+ */
28
+ export * from "./services/TaskTracker/TaskTracker.js";
29
+ /**
30
+ * @since 1.0.0
31
+ */
32
+ export * from "./services/TaskTracker/LinearTracker.js";
33
+ /**
34
+ * @since 1.0.0
35
+ */
36
+ export * from "./services/TaskTracker/GitHubIssueTracker.js";
37
+ /**
38
+ * @since 1.0.0
39
+ */
40
+ export * from "./services/OctokitClient.js";
41
+ /**
42
+ * @since 1.0.0
43
+ */
44
+ export * from "./services/LinearSdkClient.js";
45
+ /**
46
+ * @since 1.0.0
47
+ */
48
+ export * from "./services/GitHubClient.js";
49
+ /**
50
+ * @since 1.0.0
51
+ */
52
+ export * from "./services/EventLoop.js";
53
+ /**
54
+ * @since 1.0.0
55
+ */
56
+ export * from "./services/PullRequestTracker.js";
57
+ /**
58
+ * @since 1.0.0
59
+ */
60
+ export * from "./services/CommentTimer.js";
61
+ /**
62
+ * @since 1.0.0
63
+ */
64
+ export * from "./services/MessengerAdapter/MessengerAdapter.js";
65
+ /**
66
+ * @since 1.0.0
67
+ */
68
+ export * from "./services/MessengerAdapter/TelegramAdapter.js";
69
+ /**
70
+ * @since 1.0.0
71
+ */
72
+ export * from "./services/TrackerLayerMap.js";
73
+ /**
74
+ * @since 1.0.0
75
+ */
76
+ export * from "./services/TelegramConfig.js";
77
+ /**
78
+ * @since 1.0.0
79
+ */
80
+ export * from "./services/AppContext.js";
81
+ /**
82
+ * @since 1.0.0
83
+ */
84
+ export * from "./services/AppRuntimeConfig.js";
85
+ /**
86
+ * @since 1.0.0
87
+ */
88
+ export * from "./services/AutoMerge.js";
89
+ /**
90
+ * @since 1.0.0
91
+ */
92
+ export * from "./services/LalphConfig.js";
93
+ /**
94
+ * @since 1.0.0
95
+ */
96
+ export * from "./services/PlanSession.js";
97
+ /**
98
+ * @since 1.0.0
99
+ */
100
+ export * from "./lib/StreamJsonParser.js";
101
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,cAAc,6BAA6B;AAE3C;;;AAGA,cAAc,4BAA4B;AAE1C;;;AAGA,cAAc,gCAAgC;AAE9C;;;AAGA,cAAc,4BAA4B;AAE1C;;;AAGA,cAAc,aAAa;AAE3B;;;AAGA,cAAc,uBAAuB;AAErC;;;AAGA,cAAc,uCAAuC;AAErD;;;AAGA,cAAc,yCAAyC;AAEvD;;;AAGA,cAAc,8CAA8C;AAE5D;;;AAGA,cAAc,6BAA6B;AAE3C;;;AAGA,cAAc,+BAA+B;AAE7C;;;AAGA,cAAc,4BAA4B;AAE1C;;;AAGA,cAAc,yBAAyB;AAEvC;;;AAGA,cAAc,kCAAkC;AAEhD;;;AAGA,cAAc,4BAA4B;AAE1C;;;AAGA,cAAc,iDAAiD;AAE/D;;;AAGA,cAAc,gDAAgD;AAE9D;;;AAGA,cAAc,+BAA+B;AAE7C;;;AAGA,cAAc,8BAA8B;AAE5C;;;AAGA,cAAc,0BAA0B;AAExC;;;AAGA,cAAc,gCAAgC;AAE9C;;;AAGA,cAAc,yBAAyB;AAEvC;;;AAGA,cAAc,2BAA2B;AAEzC;;;AAGA,cAAc,2BAA2B;AAEzC;;;AAGA,cAAc,2BAA2B","ignoreList":[]}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Plan-type-specific analysis prompts for spec file follow-ups
3
+ * @since 1.0.0
4
+ */
5
+ /**
6
+ * Returns an analysis prompt tailored to the given plan type.
7
+ * The prompt instructs Claude to write analysis output to `.specs/analysis.md`.
8
+ * @since 1.0.0
9
+ * @category prompts
10
+ */
11
+ export const getAnalysisPrompt = planType => {
12
+ switch (planType) {
13
+ case "Feature":
14
+ return `\
15
+ Now analyze the spec you just wrote. Create the following files:
16
+
17
+ 1. \`.specs/analysis.md\` — high-level design summary in plain text:
18
+ - What services are added or changed and why
19
+ - Layer composition: what depends on what
20
+ - Key design decisions and trade-offs
21
+
22
+ 2. \`.specs/services.mmd\` — a Mermaid classDiagram showing all new/changed service interfaces with their methods and return types. Use \`<<interface>>\` annotations. Show dependency arrows between services. Use \`~\` for generics (e.g. \`Effect~void, MyError~\`).
23
+
24
+ 3. \`.specs/test.md\` — detailed test plan using AAA (Arrange/Act/Assert) structure. For each test case:
25
+ - **Name**: descriptive test name in \`it("...")\` style
26
+ - **Arrange**: what mocks, layers, and initial state to set up
27
+ - **Act**: the single effect/function call under test
28
+ - **Assert**: expected outcome and why this case matters
29
+
30
+ Do NOT display file contents in your response. The system will send them to the user.`;
31
+ case "Bug":
32
+ return `\
33
+ Now analyze the spec you just wrote. Write your analysis to \`.specs/analysis.md\` covering:
34
+ - Root cause analysis
35
+ - A failing TDD test case that reproduces the bug
36
+ - Resolution strategy
37
+ - Regression prevention measures`;
38
+ case "Refactor":
39
+ return `\
40
+ Now analyze the spec you just wrote. Write your analysis to \`.specs/analysis.md\` covering:
41
+ - Current state vs target state
42
+ - Migration steps in order
43
+ - Risk assessment for each step
44
+ - Test impact: which tests need updating?`;
45
+ default:
46
+ return `\
47
+ Now analyze the spec you just wrote. Write your analysis to \`.specs/analysis.md\` covering:
48
+ - Scope summary
49
+ - Implementation approach
50
+ - Dependencies and prerequisites
51
+ - Test strategy`;
52
+ }
53
+ };
54
+ //# sourceMappingURL=AnalysisPrompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalysisPrompts.js","names":["getAnalysisPrompt","planType"],"sources":["../../../src/lib/AnalysisPrompts.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;AAKA;;;;;;AAMA,OAAO,MAAMA,iBAAiB,GAAIC,QAAgB,IAAY;EAC5D,QAAQA,QAAQ;IACd,KAAK,SAAS;MACZ,OAAO;;;;;;;;;;;;;;;;sFAgByE;IAClF,KAAK,KAAK;MACR,OAAO;;;;;iCAKoB;IAC7B,KAAK,UAAU;MACb,OAAO;;;;;0CAK6B;IACtC;MACE,OAAO;;;;;gBAKG;EACd;AACF,CAAC","ignoreList":[]}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Branch name parser service to extract and resolve issue IDs
3
+ * @since 1.0.0
4
+ */
5
+ import { Context, Layer, Option } from "effect";
6
+ const linearPattern = /^([A-Z]+-\d+)\//;
7
+ const linearAnywhere = /([A-Z]+-\d+)/;
8
+ const githubIssuePattern = /^#?(\d+)\//;
9
+ const githubIssueAnywhere = /(?:^|\/)#?(\d+)(?:\/|$)/;
10
+ const linearIdPattern = /^[A-Z]+-\d+$/;
11
+ /**
12
+ * Extract a raw issue ID from a git branch name.
13
+ *
14
+ * Tries patterns in order:
15
+ * 1. Linear-style prefix: `ABC-123/description` → `ABC-123`
16
+ * 2. Linear-style anywhere: `feature/ABC-123-description` → `ABC-123`
17
+ * 3. GitHub issue prefix: `#42/description` or `42/description` → `42`
18
+ * 4. GitHub issue anywhere: `feature/#42/description` → `42`
19
+ *
20
+ * @since 1.0.0
21
+ * @category parsers
22
+ */
23
+ export const extractIssueId = branch => Option.fromNullable(linearPattern.exec(branch)?.[1]).pipe(Option.orElse(() => Option.fromNullable(linearAnywhere.exec(branch)?.[1])), Option.orElse(() => Option.fromNullable(githubIssuePattern.exec(branch)?.[1])), Option.orElse(() => Option.fromNullable(githubIssueAnywhere.exec(branch)?.[1])));
24
+ /**
25
+ * @since 1.0.0
26
+ * @category context
27
+ */
28
+ export class BranchParser extends /*#__PURE__*/Context.Tag("BranchParser")() {}
29
+ /**
30
+ * @since 1.0.0
31
+ * @category layers
32
+ */
33
+ export const BranchParserLive = /*#__PURE__*/Layer.succeed(BranchParser, /*#__PURE__*/BranchParser.of({
34
+ resolveIssueId: pr => Option.map(extractIssueId(pr.headRef), id => linearIdPattern.test(id) ? id : `${pr.repo}#${id}`)
35
+ }));
36
+ //# sourceMappingURL=BranchParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BranchParser.js","names":["Context","Layer","Option","linearPattern","linearAnywhere","githubIssuePattern","githubIssueAnywhere","linearIdPattern","extractIssueId","branch","fromNullable","exec","pipe","orElse","BranchParser","Tag","BranchParserLive","succeed","of","resolveIssueId","pr","map","headRef","id","test","repo"],"sources":["../../../src/lib/BranchParser.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;AAIA,SAASA,OAAO,EAAEC,KAAK,EAAEC,MAAM,QAAQ,QAAQ;AAG/C,MAAMC,aAAa,GAAG,iBAAiB;AACvC,MAAMC,cAAc,GAAG,cAAc;AACrC,MAAMC,kBAAkB,GAAG,YAAY;AACvC,MAAMC,mBAAmB,GAAG,yBAAyB;AAErD,MAAMC,eAAe,GAAG,cAAc;AAEtC;;;;;;;;;;;;AAYA,OAAO,MAAMC,cAAc,GAAIC,MAAc,IAC3CP,MAAM,CAACQ,YAAY,CAACP,aAAa,CAACQ,IAAI,CAACF,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAACG,IAAI,CACvDV,MAAM,CAACW,MAAM,CAAC,MAAMX,MAAM,CAACQ,YAAY,CAACN,cAAc,CAACO,IAAI,CAACF,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAC1EP,MAAM,CAACW,MAAM,CAAC,MAAMX,MAAM,CAACQ,YAAY,CAACL,kBAAkB,CAACM,IAAI,CAACF,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAC9EP,MAAM,CAACW,MAAM,CAAC,MAAMX,MAAM,CAACQ,YAAY,CAACJ,mBAAmB,CAACK,IAAI,CAACF,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAChF;AAUH;;;;AAIA,OAAM,MAAOK,YAAa,sBAAQd,OAAO,CAACe,GAAG,CAAC,cAAc,CAAC,EAAqC;AAElG;;;;AAIA,OAAO,MAAMC,gBAAgB,gBAAGf,KAAK,CAACgB,OAAO,CAC3CH,YAAY,eACZA,YAAY,CAACI,EAAE,CAAC;EACdC,cAAc,EAAGC,EAAE,IACjBlB,MAAM,CAACmB,GAAG,CAACb,cAAc,CAACY,EAAE,CAACE,OAAO,CAAC,EAAGC,EAAE,IAAKhB,eAAe,CAACiB,IAAI,CAACD,EAAE,CAAC,GAAGA,EAAE,GAAG,GAAGH,EAAE,CAACK,IAAI,IAAIF,EAAE,EAAE;CACpG,CAAC,CACH","ignoreList":[]}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Converts Mermaid class diagram syntax to PlantUML.
3
+ * Pure function — no side effects or dependencies.
4
+ * @since 1.0.0
5
+ */
6
+ /**
7
+ * Convert a Mermaid class diagram to PlantUML syntax.
8
+ *
9
+ * Handles:
10
+ * - `classDiagram` → `@startuml` / `@enduml`
11
+ * - `class Foo {` blocks (preserved)
12
+ * - `<<interface>>` stereotypes (preserved)
13
+ * - `~Type1, Type2~` generics → `<Type1, Type2>`
14
+ * - `+method(params) ReturnType` → `+method(params): ReturnType`
15
+ * - Relationship arrows pass through (`<|--`, `<|..`, `-->`, `..>`)
16
+ * @since 1.0.0
17
+ */
18
+ export const mermaidToPlantUml = mermaid => {
19
+ const lines = mermaid.split("\n");
20
+ const output = [];
21
+ let insideClassBlock = false;
22
+ for (const rawLine of lines) {
23
+ const line = rawLine.trim();
24
+ // Skip empty lines — pass through
25
+ if (line === "") {
26
+ output.push("");
27
+ continue;
28
+ }
29
+ // classDiagram → @startuml
30
+ if (line === "classDiagram") {
31
+ output.push("@startuml");
32
+ continue;
33
+ }
34
+ // Convert generics: ~Type1, Type2~ → <Type1, Type2>
35
+ const converted = line.replace(/~([^~]+)~/g, "<$1>");
36
+ // Detect class block open: "class Foo {" or "class Foo<T> {"
37
+ if (/^class\s+\S+.*\{$/.test(converted)) {
38
+ insideClassBlock = true;
39
+ output.push(converted);
40
+ continue;
41
+ }
42
+ // Detect class block close
43
+ if (converted === "}" && insideClassBlock) {
44
+ insideClassBlock = false;
45
+ output.push("}");
46
+ continue;
47
+ }
48
+ // Inside a class block: convert member signatures
49
+ if (insideClassBlock) {
50
+ output.push(convertMember(converted));
51
+ continue;
52
+ }
53
+ // Outside class blocks — relationships, annotations, etc. pass through
54
+ output.push(converted);
55
+ }
56
+ output.push("@enduml");
57
+ return output.join("\n");
58
+ };
59
+ /**
60
+ * Convert a single class member line.
61
+ * Mermaid: `+method(params) ReturnType` → PlantUML: `+method(params): ReturnType`
62
+ * Mermaid: `+field Type` → PlantUML: `+field: Type`
63
+ * Stereotypes like `<<interface>>` pass through unchanged.
64
+ */
65
+ const convertMember = line => {
66
+ // <<interface>> or <<abstract>> — pass through
67
+ if (/^<<.+>>$/.test(line)) {
68
+ return line;
69
+ }
70
+ // Method with parentheses: +method(params) ReturnType
71
+ const methodMatch = /^([+\-#~]?)(\w+)\(([^)]*)\)\s+(.+)$/.exec(line);
72
+ if (methodMatch) {
73
+ const [, visibility, name, params, returnType] = methodMatch;
74
+ return `${visibility}${name}(${params}): ${returnType}`;
75
+ }
76
+ // Method with parentheses but no return type: +method(params)
77
+ const methodNoReturn = /^([+\-#~]?)(\w+)\(([^)]*)\)$/.exec(line);
78
+ if (methodNoReturn) {
79
+ return line;
80
+ }
81
+ // Field: +field Type (no parentheses, has a space separating name and type)
82
+ const fieldMatch = /^([+\-#~]?)(\w+)\s+(.+)$/.exec(line);
83
+ if (fieldMatch) {
84
+ const [, visibility, name, type] = fieldMatch;
85
+ return `${visibility}${name}: ${type}`;
86
+ }
87
+ return line;
88
+ };
89
+ //# sourceMappingURL=MermaidToPlantUml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MermaidToPlantUml.js","names":["mermaidToPlantUml","mermaid","lines","split","output","insideClassBlock","rawLine","line","trim","push","converted","replace","test","convertMember","join","methodMatch","exec","visibility","name","params","returnType","methodNoReturn","fieldMatch","type"],"sources":["../../../src/lib/MermaidToPlantUml.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;AAMA;;;;;;;;;;;;AAYA,OAAO,MAAMA,iBAAiB,GAAIC,OAAe,IAAY;EAC3D,MAAMC,KAAK,GAAGD,OAAO,CAACE,KAAK,CAAC,IAAI,CAAC;EACjC,MAAMC,MAAM,GAAkB,EAAE;EAChC,IAAIC,gBAAgB,GAAG,KAAK;EAE5B,KAAK,MAAMC,OAAO,IAAIJ,KAAK,EAAE;IAC3B,MAAMK,IAAI,GAAGD,OAAO,CAACE,IAAI,EAAE;IAE3B;IACA,IAAID,IAAI,KAAK,EAAE,EAAE;MACfH,MAAM,CAACK,IAAI,CAAC,EAAE,CAAC;MACf;IACF;IAEA;IACA,IAAIF,IAAI,KAAK,cAAc,EAAE;MAC3BH,MAAM,CAACK,IAAI,CAAC,WAAW,CAAC;MACxB;IACF;IAEA;IACA,MAAMC,SAAS,GAAGH,IAAI,CAACI,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;IAEpD;IACA,IAAI,mBAAmB,CAACC,IAAI,CAACF,SAAS,CAAC,EAAE;MACvCL,gBAAgB,GAAG,IAAI;MACvBD,MAAM,CAACK,IAAI,CAACC,SAAS,CAAC;MACtB;IACF;IAEA;IACA,IAAIA,SAAS,KAAK,GAAG,IAAIL,gBAAgB,EAAE;MACzCA,gBAAgB,GAAG,KAAK;MACxBD,MAAM,CAACK,IAAI,CAAC,GAAG,CAAC;MAChB;IACF;IAEA;IACA,IAAIJ,gBAAgB,EAAE;MACpBD,MAAM,CAACK,IAAI,CAACI,aAAa,CAACH,SAAS,CAAC,CAAC;MACrC;IACF;IAEA;IACAN,MAAM,CAACK,IAAI,CAACC,SAAS,CAAC;EACxB;EAEAN,MAAM,CAACK,IAAI,CAAC,SAAS,CAAC;EACtB,OAAOL,MAAM,CAACU,IAAI,CAAC,IAAI,CAAC;AAC1B,CAAC;AAED;;;;;;AAMA,MAAMD,aAAa,GAAIN,IAAY,IAAY;EAC7C;EACA,IAAI,UAAU,CAACK,IAAI,CAACL,IAAI,CAAC,EAAE;IACzB,OAAOA,IAAI;EACb;EAEA;EACA,MAAMQ,WAAW,GAAG,qCAAqC,CAACC,IAAI,CAACT,IAAI,CAAC;EACpE,IAAIQ,WAAW,EAAE;IACf,MAAM,GAAGE,UAAU,EAAEC,IAAI,EAAEC,MAAM,EAAEC,UAAU,CAAC,GAAGL,WAAW;IAC5D,OAAO,GAAGE,UAAU,GAAGC,IAAI,IAAIC,MAAM,MAAMC,UAAU,EAAE;EACzD;EAEA;EACA,MAAMC,cAAc,GAAG,8BAA8B,CAACL,IAAI,CAACT,IAAI,CAAC;EAChE,IAAIc,cAAc,EAAE;IAClB,OAAOd,IAAI;EACb;EAEA;EACA,MAAMe,UAAU,GAAG,0BAA0B,CAACN,IAAI,CAACT,IAAI,CAAC;EACxD,IAAIe,UAAU,EAAE;IACd,MAAM,GAAGL,UAAU,EAAEC,IAAI,EAAEK,IAAI,CAAC,GAAGD,UAAU;IAC7C,OAAO,GAAGL,UAAU,GAAGC,IAAI,KAAKK,IAAI,EAAE;EACxC;EAEA,OAAOhB,IAAI;AACb,CAAC","ignoreList":[]}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Generates a self-contained HTML page from spec files, with Mermaid.js
3
+ * CDN for client-side diagram rendering.
4
+ * @since 1.0.0
5
+ */
6
+ const escapeHtml = text => text.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;");
7
+ const markdownToHtml = text => {
8
+ const placeholders = [];
9
+ let counter = 0;
10
+ const makePlaceholder = htmlContent => {
11
+ const key = `\x00PH${counter}\x00`;
12
+ counter++;
13
+ placeholders.push([key, htmlContent]);
14
+ return key;
15
+ };
16
+ // Extract fenced code blocks
17
+ let result = text.replace(/```(\w+)?\n([\s\S]*?)```/g, (_, lang, code) => {
18
+ const escaped = escapeHtml(code);
19
+ if (lang) {
20
+ return makePlaceholder(`<pre><code class="language-${escapeHtml(lang)}">${escaped}</code></pre>`);
21
+ }
22
+ return makePlaceholder(`<pre><code>${escaped}</code></pre>`);
23
+ });
24
+ // Extract inline code
25
+ result = result.replace(/`([^`\n]+)`/g, (_, code) => makePlaceholder(`<code>${escapeHtml(code)}</code>`));
26
+ // HTML-escape remaining text
27
+ result = escapeHtml(result);
28
+ // Bold: **text** or __text__
29
+ result = result.replace(/\*\*(.+?)\*\*/g, "<strong>$1</strong>");
30
+ result = result.replace(/__(.+?)__/g, "<strong>$1</strong>");
31
+ // Italic: *text*
32
+ result = result.replace(/\*(\S.*?\S|\S)\*/g, "<em>$1</em>");
33
+ result = result.replace(/(?<!\w)_(\S.*?\S|\S)_(?!\w)/g, "<em>$1</em>");
34
+ // Links: [text](url)
35
+ result = result.replace(/\[([^\]]+)\]\(([^)]+)\)/g, "<a href=\"$2\">$1</a>");
36
+ // Strikethrough: ~~text~~
37
+ result = result.replace(/~~(.+?)~~/g, "<s>$1</s>");
38
+ // Horizontal rules: --- or *** or ___ on their own line
39
+ result = result.replace(/^(?:---|\*\*\*|___)$/gm, "<hr>");
40
+ // Process block-level elements line by line
41
+ const lines = result.split("\n");
42
+ const output = [];
43
+ let inList = false;
44
+ for (const line of lines) {
45
+ // Headers: # Header
46
+ const headerMatch = /^(#{1,6})\s+(.+)$/.exec(line);
47
+ if (headerMatch?.[1] && headerMatch[2]) {
48
+ if (inList) {
49
+ output.push("</ul>");
50
+ inList = false;
51
+ }
52
+ const level = headerMatch[1].length;
53
+ output.push(`<h${level}>${headerMatch[2]}</h${level}>`);
54
+ continue;
55
+ }
56
+ // Unordered list items: - item or * item
57
+ const listMatch = /^[-*]\s+(.+)$/.exec(line);
58
+ if (listMatch?.[1]) {
59
+ if (!inList) {
60
+ output.push("<ul>");
61
+ inList = true;
62
+ }
63
+ output.push(`<li>${listMatch[1]}</li>`);
64
+ continue;
65
+ }
66
+ // Close list if we hit a non-list line
67
+ if (inList) {
68
+ output.push("</ul>");
69
+ inList = false;
70
+ }
71
+ // Skip <hr> — already converted
72
+ if (line === "<hr>") {
73
+ output.push(line);
74
+ continue;
75
+ }
76
+ // Empty lines
77
+ if (line.trim() === "") {
78
+ output.push("");
79
+ continue;
80
+ }
81
+ // Regular paragraph
82
+ output.push(`<p>${line}</p>`);
83
+ }
84
+ if (inList) {
85
+ output.push("</ul>");
86
+ }
87
+ result = output.join("\n");
88
+ // Restore placeholders
89
+ for (const [key, htmlContent] of placeholders) {
90
+ result = result.replace(key, htmlContent);
91
+ }
92
+ return result;
93
+ };
94
+ const renderFileSection = file => {
95
+ const heading = `<h2>${escapeHtml(file.name)}</h2>`;
96
+ if (file.mermaid) {
97
+ return `${heading}\n<pre class="mermaid">${escapeHtml(file.content)}</pre>`;
98
+ }
99
+ return `${heading}\n${markdownToHtml(file.content)}`;
100
+ };
101
+ /**
102
+ * Generate a self-contained HTML page from spec files.
103
+ * Mermaid files are wrapped in `<pre class="mermaid">` for client-side rendering.
104
+ * Markdown files are converted to basic HTML.
105
+ * @since 1.0.0
106
+ */
107
+ export const generateSpecHtml = files => {
108
+ const sections = files.map(renderFileSection).join("\n\n");
109
+ return `<!DOCTYPE html>
110
+ <html lang="en">
111
+ <head>
112
+ <meta charset="utf-8">
113
+ <meta name="viewport" content="width=device-width, initial-scale=1">
114
+ <title>Spec Files</title>
115
+ <style>
116
+ body {
117
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
118
+ max-width: 900px;
119
+ margin: 0 auto;
120
+ padding: 1rem;
121
+ line-height: 1.6;
122
+ color: #333;
123
+ }
124
+ pre {
125
+ background: #f5f5f5;
126
+ padding: 1rem;
127
+ overflow-x: auto;
128
+ border-radius: 4px;
129
+ }
130
+ code {
131
+ background: #f0f0f0;
132
+ padding: 0.15em 0.3em;
133
+ border-radius: 3px;
134
+ font-size: 0.9em;
135
+ }
136
+ pre code {
137
+ background: none;
138
+ padding: 0;
139
+ }
140
+ h2 {
141
+ border-bottom: 1px solid #eee;
142
+ padding-bottom: 0.3em;
143
+ }
144
+ </style>
145
+ </head>
146
+ <body>
147
+ ${sections}
148
+ <script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"></script>
149
+ <script>mermaid.initialize({ startOnLoad: true });</script>
150
+ </body>
151
+ </html>`;
152
+ };
153
+ //# sourceMappingURL=SpecHtmlGenerator.js.map