@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,34 @@
1
+ /**
2
+ * TaskTracker service interface for task tracking backends
3
+ * @since 1.0.0
4
+ */
5
+ import type { Effect, Stream } from "effect"
6
+ import { Context, Data } from "effect"
7
+ import type { TaskTrackerEvent } from "../../Events.js"
8
+ import type { TrackerIssue } from "../../schemas/TrackerSchemas.js"
9
+
10
+ /**
11
+ * @since 1.0.0
12
+ * @category errors
13
+ */
14
+ export class TaskTrackerError extends Data.TaggedError("TaskTrackerError")<{
15
+ message: string
16
+ cause: unknown
17
+ }> {}
18
+
19
+ /**
20
+ * @since 1.0.0
21
+ * @category services
22
+ */
23
+ export interface TaskTrackerService {
24
+ readonly eventStream: Stream.Stream<TaskTrackerEvent, TaskTrackerError>
25
+ readonly moveToTodo: (issueId: string) => Effect.Effect<void, TaskTrackerError>
26
+ readonly setPriorityUrgent: (issueId: string) => Effect.Effect<void, TaskTrackerError>
27
+ readonly getIssue: (issueId: string) => Effect.Effect<TrackerIssue, TaskTrackerError>
28
+ }
29
+
30
+ /**
31
+ * @since 1.0.0
32
+ * @category context
33
+ */
34
+ export class TaskTracker extends Context.Tag("TaskTracker")<TaskTracker, TaskTrackerService>() {}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Telegram config persistence service following lalph TokenManager pattern
3
+ * @since 1.0.0
4
+ */
5
+ import { FileSystem, Path } from "@effect/platform"
6
+ import { Context, Data, Effect, Layer, Option, Schema } from "effect"
7
+ import { AppContext } from "./AppContext.js"
8
+
9
+ /**
10
+ * @since 1.0.0
11
+ * @category schemas
12
+ */
13
+ export class TelegramConfigSchema extends Schema.Class<TelegramConfigSchema>("TelegramConfigSchema")({
14
+ botToken: Schema.String,
15
+ chatId: Schema.NullOr(Schema.String)
16
+ }) {}
17
+
18
+ /**
19
+ * @since 1.0.0
20
+ * @category errors
21
+ */
22
+ export class TelegramConfigError extends Data.TaggedError("TelegramConfigError")<{
23
+ message: string
24
+ cause: unknown
25
+ }> {}
26
+
27
+ /**
28
+ * @since 1.0.0
29
+ * @category services
30
+ */
31
+ export interface TelegramConfigService {
32
+ readonly get: Effect.Effect<Option.Option<TelegramConfigSchema>>
33
+ readonly set: (config: TelegramConfigSchema) => Effect.Effect<void, TelegramConfigError>
34
+ }
35
+
36
+ /**
37
+ * @since 1.0.0
38
+ * @category context
39
+ */
40
+ export class TelegramConfig extends Context.Tag("TelegramConfig")<
41
+ TelegramConfig,
42
+ TelegramConfigService
43
+ >() {}
44
+
45
+ /**
46
+ * @since 1.0.0
47
+ * @category layers
48
+ */
49
+ export const TelegramConfigLive = Layer.effect(
50
+ TelegramConfig,
51
+ Effect.gen(function*() {
52
+ const fs = yield* FileSystem.FileSystem
53
+ const pathService = yield* Path.Path
54
+ const appContext = yield* AppContext
55
+
56
+ const filePath = pathService.join(appContext.configDir, encodeURIComponent("notify.telegram"))
57
+
58
+ let currentConfig: TelegramConfigSchema | null = null
59
+
60
+ const get = Effect.gen(function*() {
61
+ if (currentConfig !== null) return Option.some(currentConfig)
62
+
63
+ const content = yield* fs.readFileString(filePath).pipe(
64
+ Effect.mapError((err) =>
65
+ new TelegramConfigError({
66
+ message: "Failed to read telegram config",
67
+ cause: err
68
+ })
69
+ )
70
+ )
71
+ const json = yield* Effect.try({
72
+ try: () => JSON.parse(content),
73
+ catch: (err) =>
74
+ new TelegramConfigError({
75
+ message: "Failed to parse telegram config",
76
+ cause: err
77
+ })
78
+ })
79
+ const config = yield* Schema.decodeUnknown(TelegramConfigSchema)(json).pipe(
80
+ Effect.mapError((err) =>
81
+ new TelegramConfigError({
82
+ message: "Failed to decode telegram config",
83
+ cause: err
84
+ })
85
+ )
86
+ )
87
+ currentConfig = config
88
+ return Option.some(config)
89
+ }).pipe(
90
+ Effect.catchTag(
91
+ "TelegramConfigError",
92
+ (err) =>
93
+ Effect.logWarning(`No stored Telegram config: ${err.message}`).pipe(
94
+ Effect.map(() => Option.none<TelegramConfigSchema>())
95
+ )
96
+ )
97
+ )
98
+
99
+ const set = (config: TelegramConfigSchema) =>
100
+ Effect.gen(function*() {
101
+ yield* fs.writeFileString(
102
+ filePath,
103
+ JSON.stringify({
104
+ botToken: config.botToken,
105
+ chatId: config.chatId
106
+ })
107
+ ).pipe(
108
+ Effect.mapError((err) =>
109
+ new TelegramConfigError({
110
+ message: "Failed to write telegram config",
111
+ cause: err
112
+ })
113
+ )
114
+ )
115
+ currentConfig = config
116
+ })
117
+
118
+ return TelegramConfig.of({ get, set })
119
+ })
120
+ )
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Dynamic layer map for selecting TaskTracker implementation at runtime
3
+ * @since 1.0.0
4
+ */
5
+ import { Layer, LayerMap } from "effect"
6
+ import { LinearSdkClientLive } from "./LinearSdkClient.js"
7
+ import { GitHubIssueTrackerLive } from "./TaskTracker/GitHubIssueTracker.js"
8
+ import { LinearTrackerLive } from "./TaskTracker/LinearTracker.js"
9
+
10
+ /**
11
+ * @since 1.0.0
12
+ * @category layer-map
13
+ */
14
+ export class TrackerLayerMap extends LayerMap.Service<TrackerLayerMap>()("TrackerLayerMap", {
15
+ layers: {
16
+ linear: LinearTrackerLive.pipe(Layer.provide(LinearSdkClientLive)),
17
+ github: GitHubIssueTrackerLive
18
+ }
19
+ }) {}
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Entry point for the claude-shim binary.
4
+ * @since 1.0.0
5
+ */
6
+ import { query } from "@anthropic-ai/claude-agent-sdk"
7
+ import { NodeRuntime } from "@effect/platform-node"
8
+ import * as NodeSink from "@effect/platform-node/NodeSink"
9
+ import * as NodeStream from "@effect/platform-node/NodeStream"
10
+ import { Effect, Layer } from "effect"
11
+ import { ClaudeQuery, ShimDeps, ShimError, shimProgram } from "./main.js"
12
+
13
+ shimProgram.pipe(
14
+ Effect.tapError(() =>
15
+ Effect.sync(() => {
16
+ process.exitCode = 1
17
+ })
18
+ ),
19
+ Effect.catchAll((err) => Effect.logError("claude-shim failed", err)),
20
+ Effect.provide(Layer.mergeAll(
21
+ Layer.succeed(ShimDeps, {
22
+ args: process.argv.slice(2),
23
+ stdin: NodeStream.stdin,
24
+ stdout: NodeSink.stdout,
25
+ stderr: NodeSink.stderr
26
+ }),
27
+ Layer.succeed(ClaudeQuery, {
28
+ create: (params) =>
29
+ Effect.try({
30
+ try: () => query(params),
31
+ catch: (err) => new ShimError({ message: "Failed to create query", cause: err })
32
+ })
33
+ })
34
+ )),
35
+ NodeRuntime.runMain
36
+ )
@@ -0,0 +1,255 @@
1
+ /**
2
+ * SDK-based claude binary replacement — outputs stream-json NDJSON to stdout
3
+ * for PlanSession to parse. Uses MCP tool for AskUserQuestion instead of hooks.
4
+ * @since 1.0.0
5
+ */
6
+ import { createSdkMcpServer, tool } from "@anthropic-ai/claude-agent-sdk"
7
+ import type { Query, query, SDKMessage, SDKUserMessage } from "@anthropic-ai/claude-agent-sdk"
8
+
9
+ import type { PlatformError } from "@effect/platform/Error"
10
+ import { Config, Context, Data, Effect, Either, Fiber, Queue, Ref, Stream } from "effect"
11
+ import type * as Sink from "effect/Sink"
12
+ import { z } from "zod/v4"
13
+ import { parseArgs } from "./parseArgs.js"
14
+ import { decodeShimMessage } from "./schemas.js"
15
+
16
+ export { parseArgs } from "./parseArgs.js"
17
+ export type { ParsedArgs } from "./parseArgs.js"
18
+ export { decodeShimMessage } from "./schemas.js"
19
+
20
+ export class ShimError extends Data.TaggedError("ShimError")<{
21
+ readonly message: string
22
+ readonly cause: unknown
23
+ }> {}
24
+
25
+ // --- Query Service ---
26
+
27
+ export type QueryParams = Parameters<typeof query>[0]
28
+
29
+ export class ClaudeQuery extends Context.Tag("ClaudeQuery")<ClaudeQuery, {
30
+ readonly create: (params: QueryParams) => Effect.Effect<Query, ShimError>
31
+ }>() {}
32
+
33
+ // --- Config ---
34
+
35
+ export const ShimConfig = Config.all({
36
+ realClaudePath: Config.string("REAL_CLAUDE_PATH"),
37
+ claudeModel: Config.withDefault(Config.string("CLAUDE_MODEL"), "claude-opus-4-6")
38
+ })
39
+
40
+ // --- IO Deps ---
41
+
42
+ export interface ShimDepsService {
43
+ readonly args: ReadonlyArray<string>
44
+ readonly stdin: Stream.Stream<Uint8Array>
45
+ readonly stdout: Sink.Sink<void, string, never, PlatformError>
46
+ readonly stderr: Sink.Sink<void, string, never, PlatformError>
47
+ }
48
+
49
+ export class ShimDeps extends Context.Tag("ShimDeps")<ShimDeps, ShimDepsService>() {}
50
+
51
+ const askUserQuestionSchema = {
52
+ questions: z.array(z.object({
53
+ question: z.string().describe("The question to ask the user"),
54
+ header: z.string().optional().describe("Short label (max 12 chars) displayed as a tag, e.g. 'Auth method'"),
55
+ options: z.array(z.object({
56
+ label: z.string().describe("Concise display text (1-5 words)"),
57
+ description: z.string().optional().describe("Explanation of what this option means")
58
+ })).min(2).max(4).describe("The available choices. Must have 2-4 options."),
59
+ multiSelect: z.boolean().optional().describe("Allow multiple selections")
60
+ }))
61
+ }
62
+
63
+ const FollowUpStop: unique symbol = Symbol.for("FollowUpStop")
64
+ type FollowUpItem = SDKUserMessage | typeof FollowUpStop
65
+
66
+ export const shimProgram = Effect.gen(function*() {
67
+ const deps = yield* ShimDeps
68
+ const queryService = yield* ClaudeQuery
69
+ const config = yield* ShimConfig
70
+ const parsed = parseArgs(deps.args)
71
+
72
+ const model = parsed.model ?? config.claudeModel
73
+
74
+ // Output queues, drained through sinks as a single stream each
75
+ const outQueue = yield* Queue.unbounded<string>()
76
+ const errQueue = yield* Queue.unbounded<string>()
77
+ const outFiber = yield* Stream.fromQueue(outQueue).pipe(
78
+ Stream.run(deps.stdout),
79
+ Effect.fork
80
+ )
81
+ const errFiber = yield* Stream.fromQueue(errQueue).pipe(
82
+ Stream.run(deps.stderr),
83
+ Effect.fork
84
+ )
85
+ yield* Effect.addFinalizer(() =>
86
+ Effect.all([Queue.shutdown(outQueue), Queue.shutdown(errQueue)]).pipe(
87
+ Effect.andThen(Fiber.joinAll([outFiber, errFiber]).pipe(Effect.ignore))
88
+ )
89
+ )
90
+ const writeStdout = (data: string) => Queue.offer(outQueue, data).pipe(Effect.asVoid)
91
+ const writeDebug = (msg: string) =>
92
+ Queue.offer(errQueue, JSON.stringify({ type: "debug", message: msg }) + "\n").pipe(Effect.asVoid)
93
+
94
+ // State refs
95
+ const answerQueue = yield* Queue.unbounded<string>()
96
+ const routingActive = yield* Ref.make(false)
97
+ const queryHandleRef = yield* Ref.make<{ interrupt: () => Promise<void> } | null>(null)
98
+ const sessionIdRef = yield* Ref.make("")
99
+
100
+ // Follow-up queue: messages or FollowUpStop to signal termination
101
+ const followUpQueue = yield* Queue.unbounded<FollowUpItem>()
102
+
103
+ const followUpIterable: AsyncIterable<SDKUserMessage> = Stream.fromQueue(followUpQueue).pipe(
104
+ Stream.takeWhile((item): item is SDKUserMessage => item !== FollowUpStop),
105
+ Stream.toAsyncIterable
106
+ )
107
+
108
+ const collectAnswers = (questionCount: number) =>
109
+ Stream.fromQueue(answerQueue).pipe(
110
+ Stream.map((line) => line.trim()),
111
+ Stream.filter((line) => line.length > 0),
112
+ Stream.take(questionCount),
113
+ Stream.runCollect,
114
+ Effect.map((chunk) => ({
115
+ content: [{ type: "text" as const, text: `User answered: ${Array.from(chunk).join("; ")}` }]
116
+ }))
117
+ )
118
+
119
+ const mcpServer = createSdkMcpServer({
120
+ name: "ask-user",
121
+ tools: [
122
+ tool(
123
+ "ask_user",
124
+ "Ask the user a question and wait for their response via Telegram. Always provide 2-4 options for the user to choose from.",
125
+ askUserQuestionSchema,
126
+ (args, _extra) => Effect.runPromise(collectAnswers(args.questions.length || 1))
127
+ )
128
+ ]
129
+ })
130
+
131
+ // Fork stdin reader daemon
132
+ yield* deps.stdin.pipe(
133
+ Stream.decodeText(),
134
+ Stream.splitLines,
135
+ Stream.mapEffect((line) =>
136
+ Effect.gen(function*() {
137
+ const isRouting = yield* Ref.get(routingActive)
138
+ if (!isRouting) {
139
+ yield* Queue.offer(answerQueue, line)
140
+ return
141
+ }
142
+
143
+ const decoded = decodeShimMessage(line)
144
+ if (Either.isLeft(decoded)) {
145
+ yield* Queue.offer(answerQueue, line)
146
+ return
147
+ }
148
+
149
+ const msg = decoded.right
150
+ const sessionId = yield* Ref.get(sessionIdRef)
151
+
152
+ switch (msg.type) {
153
+ case "follow_up": {
154
+ yield* writeDebug(`follow_up intercepted: ${msg.text.slice(0, 100)}`)
155
+ yield* Queue.offer(followUpQueue, {
156
+ type: "user",
157
+ message: { role: "user", content: msg.text },
158
+ parent_tool_use_id: null,
159
+ session_id: sessionId
160
+ })
161
+ return
162
+ }
163
+ case "shim_approve": {
164
+ yield* writeDebug("shim_approve intercepted")
165
+ yield* Queue.offer(followUpQueue, FollowUpStop)
166
+ return
167
+ }
168
+ case "shim_start": {
169
+ // shim_start after handshake is unexpected — ignore
170
+ return
171
+ }
172
+ case "shim_interrupt": {
173
+ yield* writeDebug("shim_interrupt intercepted")
174
+ const handle = yield* Ref.get(queryHandleRef)
175
+ if (handle !== null) {
176
+ yield* Effect.tryPromise({
177
+ try: () => handle.interrupt(),
178
+ catch: (err) => new ShimError({ message: "interrupt error", cause: err })
179
+ }).pipe(Effect.catchTag("ShimError", (err) => Effect.logError("interrupt error", err)))
180
+ }
181
+ if (msg.text != null) {
182
+ yield* Queue.offer(followUpQueue, {
183
+ type: "user",
184
+ message: { role: "user", content: msg.text },
185
+ parent_tool_use_id: null,
186
+ session_id: sessionId
187
+ })
188
+ }
189
+ return
190
+ }
191
+ case "shim_abort": {
192
+ yield* writeDebug("shim_abort intercepted")
193
+ yield* Queue.offer(followUpQueue, FollowUpStop)
194
+ return
195
+ }
196
+ }
197
+ })
198
+ ),
199
+ Stream.runDrain,
200
+ Effect.forkScoped
201
+ )
202
+
203
+ // Handshake: signal readiness and wait for control message
204
+ yield* writeStdout(JSON.stringify({ type: "shim_ready" }) + "\n")
205
+ const controlLine = yield* Queue.take(answerQueue)
206
+ const controlDecoded = decodeShimMessage(controlLine)
207
+
208
+ if (Either.isRight(controlDecoded) && controlDecoded.right.type === "shim_abort") return
209
+ if (Either.isLeft(controlDecoded) || controlDecoded.right.type !== "shim_start") {
210
+ return yield* new ShimError({
211
+ message: `Unexpected control message: ${controlLine}`,
212
+ cause: null
213
+ })
214
+ }
215
+
216
+ // Offer initial prompt to follow-up queue
217
+ yield* Queue.offer(followUpQueue, {
218
+ type: "user",
219
+ message: { role: "user", content: parsed.prompt },
220
+ parent_tool_use_id: null,
221
+ session_id: ""
222
+ })
223
+
224
+ const q = yield* queryService.create({
225
+ prompt: followUpIterable,
226
+ options: {
227
+ model,
228
+ pathToClaudeCodeExecutable: config.realClaudePath,
229
+ mcpServers: { "ask-user": mcpServer },
230
+ disallowedTools: ["AskUserQuestion"],
231
+ ...(parsed.dangerouslySkipPermissions
232
+ ? { permissionMode: "bypassPermissions" as const }
233
+ : {})
234
+ }
235
+ })
236
+
237
+ yield* Ref.set(queryHandleRef, { interrupt: () => q.interrupt() })
238
+ yield* Ref.set(routingActive, true)
239
+
240
+ yield* Effect.addFinalizer(() => Effect.sync(() => q.close()))
241
+ yield* Effect.addFinalizer(() => Queue.offer(followUpQueue, FollowUpStop))
242
+ yield* Effect.addFinalizer(() => Queue.shutdown(answerQueue))
243
+
244
+ yield* Stream.fromAsyncIterable(q, (err) => new ShimError({ message: "Stream error", cause: err })).pipe(
245
+ Stream.tap((msg: SDKMessage) =>
246
+ Effect.gen(function*() {
247
+ if (msg.type === "system" && msg.subtype === "init") {
248
+ yield* Ref.set(sessionIdRef, msg.session_id)
249
+ }
250
+ yield* writeStdout(JSON.stringify(msg) + "\n")
251
+ })
252
+ ),
253
+ Stream.runDrain
254
+ )
255
+ }).pipe(Effect.scoped)
@@ -0,0 +1,43 @@
1
+ /**
2
+ * CLI argument parsing for claude-shim.
3
+ * @since 1.0.0
4
+ */
5
+
6
+ export interface ParsedArgs {
7
+ readonly prompt: string
8
+ readonly dangerouslySkipPermissions: boolean
9
+ readonly model: string | null
10
+ }
11
+
12
+ export function parseArgs(args: ReadonlyArray<string>): ParsedArgs {
13
+ let dangerouslySkipPermissions = false
14
+ let prompt = ""
15
+ let model: string | null = null
16
+ let skipNext = false
17
+
18
+ for (let i = 0; i < args.length; i++) {
19
+ if (skipNext) {
20
+ skipNext = false
21
+ continue
22
+ }
23
+ const arg = args[i]!
24
+ if (arg === "--dangerously-skip-permissions") {
25
+ dangerouslySkipPermissions = true
26
+ } else if (arg === "--output-format") {
27
+ skipNext = true
28
+ } else if (arg === "--model") {
29
+ model = args[i + 1] ?? null
30
+ skipNext = true
31
+ } else if (arg === "--verbose" || arg === "-p" || arg === "--print") {
32
+ // ignored — SDK handles output format and verbosity
33
+ } else if (arg === "--") {
34
+ // everything after -- is the prompt
35
+ prompt = args.slice(i + 1).join(" ")
36
+ break
37
+ } else if (!arg.startsWith("-")) {
38
+ prompt = arg
39
+ }
40
+ }
41
+
42
+ return { prompt, dangerouslySkipPermissions, model }
43
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Schema definitions for claude-shim control messages.
3
+ * @since 1.0.0
4
+ */
5
+ import { Schema } from "effect"
6
+
7
+ const ShimStart = Schema.Struct({
8
+ type: Schema.Literal("shim_start"),
9
+ text: Schema.optional(Schema.String)
10
+ })
11
+
12
+ const ShimAbort = Schema.Struct({
13
+ type: Schema.Literal("shim_abort")
14
+ })
15
+
16
+ const ShimInterrupt = Schema.Struct({
17
+ type: Schema.Literal("shim_interrupt"),
18
+ text: Schema.optional(Schema.String)
19
+ })
20
+
21
+ const ShimApprove = Schema.Struct({
22
+ type: Schema.Literal("shim_approve"),
23
+ text: Schema.optional(Schema.String)
24
+ })
25
+
26
+ export const ShimControl = Schema.Union(ShimStart, ShimAbort, ShimInterrupt, ShimApprove)
27
+ export type ShimControl = typeof ShimControl.Type
28
+
29
+ export const FollowUp = Schema.Struct({
30
+ type: Schema.Literal("follow_up"),
31
+ text: Schema.String
32
+ })
33
+ export type FollowUp = typeof FollowUp.Type
34
+
35
+ export const ShimMessage = Schema.Union(ShimStart, ShimAbort, ShimInterrupt, ShimApprove, FollowUp)
36
+ export type ShimMessage = typeof ShimMessage.Type
37
+
38
+ export const decodeShimMessage = Schema.decodeUnknownEither(Schema.parseJson(ShimMessage))