@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.
- package/Events/package.json +6 -0
- package/LICENSE +21 -0
- package/Main/package.json +6 -0
- package/README.md +1 -0
- package/dist/cjs/Events.js +55 -0
- package/dist/cjs/Events.js.map +1 -0
- package/dist/cjs/LalphMain.js +59 -0
- package/dist/cjs/LalphMain.js.map +1 -0
- package/dist/cjs/Main.js +115 -0
- package/dist/cjs/Main.js.map +1 -0
- package/dist/cjs/index.js +281 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lib/AnalysisPrompts.js +61 -0
- package/dist/cjs/lib/AnalysisPrompts.js.map +1 -0
- package/dist/cjs/lib/BranchParser.js +45 -0
- package/dist/cjs/lib/BranchParser.js.map +1 -0
- package/dist/cjs/lib/MermaidToPlantUml.js +96 -0
- package/dist/cjs/lib/MermaidToPlantUml.js.map +1 -0
- package/dist/cjs/lib/SpecHtmlGenerator.js +160 -0
- package/dist/cjs/lib/SpecHtmlGenerator.js.map +1 -0
- package/dist/cjs/lib/StreamJsonParser.js +88 -0
- package/dist/cjs/lib/StreamJsonParser.js.map +1 -0
- package/dist/cjs/lib/TelegramFormatter.js +122 -0
- package/dist/cjs/lib/TelegramFormatter.js.map +1 -0
- package/dist/cjs/lib/TelegraphHtml.js +65 -0
- package/dist/cjs/lib/TelegraphHtml.js.map +1 -0
- package/dist/cjs/lib/TelegraphMarkdown.js +346 -0
- package/dist/cjs/lib/TelegraphMarkdown.js.map +1 -0
- package/dist/cjs/schemas/CredentialSchemas.js +31 -0
- package/dist/cjs/schemas/CredentialSchemas.js.map +1 -0
- package/dist/cjs/schemas/GitHubSchemas.js +60 -0
- package/dist/cjs/schemas/GitHubSchemas.js.map +1 -0
- package/dist/cjs/schemas/LinearSchemas.js +63 -0
- package/dist/cjs/schemas/LinearSchemas.js.map +1 -0
- package/dist/cjs/schemas/ProjectSchemas.js +26 -0
- package/dist/cjs/schemas/ProjectSchemas.js.map +1 -0
- package/dist/cjs/schemas/TrackerSchemas.js +35 -0
- package/dist/cjs/schemas/TrackerSchemas.js.map +1 -0
- package/dist/cjs/services/AppContext.js +57 -0
- package/dist/cjs/services/AppContext.js.map +1 -0
- package/dist/cjs/services/AppRuntimeConfig.js +35 -0
- package/dist/cjs/services/AppRuntimeConfig.js.map +1 -0
- package/dist/cjs/services/AutoMerge.js +140 -0
- package/dist/cjs/services/AutoMerge.js.map +1 -0
- package/dist/cjs/services/ChatMachine.js +873 -0
- package/dist/cjs/services/ChatMachine.js.map +1 -0
- package/dist/cjs/services/CommentTimer.js +81 -0
- package/dist/cjs/services/CommentTimer.js.map +1 -0
- package/dist/cjs/services/CredentialStore.js +68 -0
- package/dist/cjs/services/CredentialStore.js.map +1 -0
- package/dist/cjs/services/CredentialWatcher.js +76 -0
- package/dist/cjs/services/CredentialWatcher.js.map +1 -0
- package/dist/cjs/services/Credentials.js +130 -0
- package/dist/cjs/services/Credentials.js.map +1 -0
- package/dist/cjs/services/EventLoop.js +203 -0
- package/dist/cjs/services/EventLoop.js.map +1 -0
- package/dist/cjs/services/GitHubClient/GitHubClient.js +236 -0
- package/dist/cjs/services/GitHubClient/GitHubClient.js.map +1 -0
- package/dist/cjs/services/GitHubClient/OctokitClient.js +329 -0
- package/dist/cjs/services/GitHubClient/OctokitClient.js.map +1 -0
- package/dist/cjs/services/GitHubClient.js +236 -0
- package/dist/cjs/services/GitHubClient.js.map +1 -0
- package/dist/cjs/services/GitHubEventSource.js +145 -0
- package/dist/cjs/services/GitHubEventSource.js.map +1 -0
- package/dist/cjs/services/GitHubIssueTracker.js +118 -0
- package/dist/cjs/services/GitHubIssueTracker.js.map +1 -0
- package/dist/cjs/services/LalphConfig.js +139 -0
- package/dist/cjs/services/LalphConfig.js.map +1 -0
- package/dist/cjs/services/LalphConfigReader.js +82 -0
- package/dist/cjs/services/LalphConfigReader.js.map +1 -0
- package/dist/cjs/services/LalphDirectory.js +45 -0
- package/dist/cjs/services/LalphDirectory.js.map +1 -0
- package/dist/cjs/services/LinearSdkClient.js +149 -0
- package/dist/cjs/services/LinearSdkClient.js.map +1 -0
- package/dist/cjs/services/LinearTracker.js +89 -0
- package/dist/cjs/services/LinearTracker.js.map +1 -0
- package/dist/cjs/services/MessengerAdapter/MessengerAdapter.js +30 -0
- package/dist/cjs/services/MessengerAdapter/MessengerAdapter.js.map +1 -0
- package/dist/cjs/services/MessengerAdapter/TelegramAdapter.js +131 -0
- package/dist/cjs/services/MessengerAdapter/TelegramAdapter.js.map +1 -0
- package/dist/cjs/services/MessengerAdapter/TelegramConfig.js +81 -0
- package/dist/cjs/services/MessengerAdapter/TelegramConfig.js.map +1 -0
- package/dist/cjs/services/MessengerAdapter.js +30 -0
- package/dist/cjs/services/MessengerAdapter.js.map +1 -0
- package/dist/cjs/services/OctokitClient.js +350 -0
- package/dist/cjs/services/OctokitClient.js.map +1 -0
- package/dist/cjs/services/PlanOverviewUploader.js +119 -0
- package/dist/cjs/services/PlanOverviewUploader.js.map +1 -0
- package/dist/cjs/services/PlanOverviewUploaderMap.js +25 -0
- package/dist/cjs/services/PlanOverviewUploaderMap.js.map +1 -0
- package/dist/cjs/services/PlanSession.js +489 -0
- package/dist/cjs/services/PlanSession.js.map +1 -0
- package/dist/cjs/services/ProjectStore.js +107 -0
- package/dist/cjs/services/ProjectStore.js.map +1 -0
- package/dist/cjs/services/PullRequestTracker.js +186 -0
- package/dist/cjs/services/PullRequestTracker.js.map +1 -0
- package/dist/cjs/services/SpecUploader.js +111 -0
- package/dist/cjs/services/SpecUploader.js.map +1 -0
- package/dist/cjs/services/SpecUploaderMap.js +25 -0
- package/dist/cjs/services/SpecUploaderMap.js.map +1 -0
- package/dist/cjs/services/TaskEventSource.js +58 -0
- package/dist/cjs/services/TaskEventSource.js.map +1 -0
- package/dist/cjs/services/TaskTracker/GitHubIssueTracker.js +155 -0
- package/dist/cjs/services/TaskTracker/GitHubIssueTracker.js.map +1 -0
- package/dist/cjs/services/TaskTracker/LinearSdkClient.js +149 -0
- package/dist/cjs/services/TaskTracker/LinearSdkClient.js.map +1 -0
- package/dist/cjs/services/TaskTracker/LinearTracker.js +126 -0
- package/dist/cjs/services/TaskTracker/LinearTracker.js.map +1 -0
- package/dist/cjs/services/TaskTracker/TaskTracker.js +20 -0
- package/dist/cjs/services/TaskTracker/TaskTracker.js.map +1 -0
- package/dist/cjs/services/TaskTracker/TrackerLayerMap.js +27 -0
- package/dist/cjs/services/TaskTracker/TrackerLayerMap.js.map +1 -0
- package/dist/cjs/services/TaskTracker/buildEventStream.js +55 -0
- package/dist/cjs/services/TaskTracker/buildEventStream.js.map +1 -0
- package/dist/cjs/services/TaskTracker.js +20 -0
- package/dist/cjs/services/TaskTracker.js.map +1 -0
- package/dist/cjs/services/TelegramAdapter.js +125 -0
- package/dist/cjs/services/TelegramAdapter.js.map +1 -0
- package/dist/cjs/services/TelegramConfig.js +81 -0
- package/dist/cjs/services/TelegramConfig.js.map +1 -0
- package/dist/cjs/services/TelegramConfigStore.js +81 -0
- package/dist/cjs/services/TelegramConfigStore.js.map +1 -0
- package/dist/cjs/services/TelegramNotifier.js +50 -0
- package/dist/cjs/services/TelegramNotifier.js.map +1 -0
- package/dist/cjs/services/TrackerLayerMap.js +27 -0
- package/dist/cjs/services/TrackerLayerMap.js.map +1 -0
- package/dist/cjs/services/TrackerResolver.js +45 -0
- package/dist/cjs/services/TrackerResolver.js.map +1 -0
- package/dist/cjs/services/messenger/MessengerAdapter.js +30 -0
- package/dist/cjs/services/messenger/MessengerAdapter.js.map +1 -0
- package/dist/cjs/services/messenger/TelegramAdapter.js +125 -0
- package/dist/cjs/services/messenger/TelegramAdapter.js.map +1 -0
- package/dist/cjs/services/task-tracker/GitHubIssueTracker.js +157 -0
- package/dist/cjs/services/task-tracker/GitHubIssueTracker.js.map +1 -0
- package/dist/cjs/services/task-tracker/LinearTracker.js +127 -0
- package/dist/cjs/services/task-tracker/LinearTracker.js.map +1 -0
- package/dist/cjs/services/task-tracker/TaskTracker.js +20 -0
- package/dist/cjs/services/task-tracker/TaskTracker.js.map +1 -0
- package/dist/cjs/services/task-tracker/TrackerLayerMap.js +27 -0
- package/dist/cjs/services/task-tracker/TrackerLayerMap.js.map +1 -0
- package/dist/cjs/shim/bin.js +31 -0
- package/dist/cjs/shim/bin.js.map +1 -0
- package/dist/cjs/shim/main.js +217 -0
- package/dist/cjs/shim/main.js.map +1 -0
- package/dist/cjs/shim/parseArgs.js +45 -0
- package/dist/cjs/shim/parseArgs.js.map +1 -0
- package/dist/cjs/shim/schemas.js +35 -0
- package/dist/cjs/shim/schemas.js.map +1 -0
- package/dist/dts/Events.d.ts +108 -0
- package/dist/dts/Events.d.ts.map +1 -0
- package/dist/dts/LalphMain.d.ts +2 -0
- package/dist/dts/LalphMain.d.ts.map +1 -0
- package/dist/dts/Main.d.ts +2 -0
- package/dist/dts/Main.d.ts.map +1 -0
- package/dist/dts/index.d.ts +101 -0
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/dts/lib/AnalysisPrompts.d.ts +12 -0
- package/dist/dts/lib/AnalysisPrompts.d.ts.map +1 -0
- package/dist/dts/lib/BranchParser.d.ts +40 -0
- package/dist/dts/lib/BranchParser.d.ts.map +1 -0
- package/dist/dts/lib/MermaidToPlantUml.d.ts +19 -0
- package/dist/dts/lib/MermaidToPlantUml.d.ts.map +1 -0
- package/dist/dts/lib/SpecHtmlGenerator.d.ts +18 -0
- package/dist/dts/lib/SpecHtmlGenerator.d.ts.map +1 -0
- package/dist/dts/lib/StreamJsonParser.d.ts +147 -0
- package/dist/dts/lib/StreamJsonParser.d.ts.map +1 -0
- package/dist/dts/lib/TelegramFormatter.d.ts +35 -0
- package/dist/dts/lib/TelegramFormatter.d.ts.map +1 -0
- package/dist/dts/lib/TelegraphHtml.d.ts +11 -0
- package/dist/dts/lib/TelegraphHtml.d.ts.map +1 -0
- package/dist/dts/lib/TelegraphMarkdown.d.ts +21 -0
- package/dist/dts/lib/TelegraphMarkdown.d.ts.map +1 -0
- package/dist/dts/schemas/CredentialSchemas.d.ts +41 -0
- package/dist/dts/schemas/CredentialSchemas.d.ts.map +1 -0
- package/dist/dts/schemas/GitHubSchemas.d.ts +130 -0
- package/dist/dts/schemas/GitHubSchemas.d.ts.map +1 -0
- package/dist/dts/schemas/LinearSchemas.d.ts +121 -0
- package/dist/dts/schemas/LinearSchemas.d.ts.map +1 -0
- package/dist/dts/schemas/ProjectSchemas.d.ts +40 -0
- package/dist/dts/schemas/ProjectSchemas.d.ts.map +1 -0
- package/dist/dts/schemas/TrackerSchemas.d.ts +57 -0
- package/dist/dts/schemas/TrackerSchemas.d.ts.map +1 -0
- package/dist/dts/services/AppContext.d.ts +40 -0
- package/dist/dts/services/AppContext.d.ts.map +1 -0
- package/dist/dts/services/AppRuntimeConfig.d.ts +51 -0
- package/dist/dts/services/AppRuntimeConfig.d.ts.map +1 -0
- package/dist/dts/services/AutoMerge.d.ts +42 -0
- package/dist/dts/services/AutoMerge.d.ts.map +1 -0
- package/dist/dts/services/ChatMachine.d.ts +478 -0
- package/dist/dts/services/ChatMachine.d.ts.map +1 -0
- package/dist/dts/services/CommentTimer.d.ts +44 -0
- package/dist/dts/services/CommentTimer.d.ts.map +1 -0
- package/dist/dts/services/CredentialStore.d.ts +43 -0
- package/dist/dts/services/CredentialStore.d.ts.map +1 -0
- package/dist/dts/services/CredentialWatcher.d.ts +41 -0
- package/dist/dts/services/CredentialWatcher.d.ts.map +1 -0
- package/dist/dts/services/Credentials.d.ts +44 -0
- package/dist/dts/services/Credentials.d.ts.map +1 -0
- package/dist/dts/services/EventLoop.d.ts +26 -0
- package/dist/dts/services/EventLoop.d.ts.map +1 -0
- package/dist/dts/services/GitHubClient/GitHubClient.d.ts +69 -0
- package/dist/dts/services/GitHubClient/GitHubClient.d.ts.map +1 -0
- package/dist/dts/services/GitHubClient/OctokitClient.d.ts +214 -0
- package/dist/dts/services/GitHubClient/OctokitClient.d.ts.map +1 -0
- package/dist/dts/services/GitHubClient.d.ts +69 -0
- package/dist/dts/services/GitHubClient.d.ts.map +1 -0
- package/dist/dts/services/GitHubEventSource.d.ts +43 -0
- package/dist/dts/services/GitHubEventSource.d.ts.map +1 -0
- package/dist/dts/services/GitHubIssueTracker.d.ts +9 -0
- package/dist/dts/services/GitHubIssueTracker.d.ts.map +1 -0
- package/dist/dts/services/LalphConfig.d.ts +44 -0
- package/dist/dts/services/LalphConfig.d.ts.map +1 -0
- package/dist/dts/services/LalphConfigReader.d.ts +66 -0
- package/dist/dts/services/LalphConfigReader.d.ts.map +1 -0
- package/dist/dts/services/LalphDirectory.d.ts +39 -0
- package/dist/dts/services/LalphDirectory.d.ts.map +1 -0
- package/dist/dts/services/LinearSdkClient.d.ts +71 -0
- package/dist/dts/services/LinearSdkClient.d.ts.map +1 -0
- package/dist/dts/services/LinearTracker.d.ts +9 -0
- package/dist/dts/services/LinearTracker.d.ts.map +1 -0
- package/dist/dts/services/MessengerAdapter/MessengerAdapter.d.ts +69 -0
- package/dist/dts/services/MessengerAdapter/MessengerAdapter.d.ts.map +1 -0
- package/dist/dts/services/MessengerAdapter/TelegramAdapter.d.ts +13 -0
- package/dist/dts/services/MessengerAdapter/TelegramAdapter.d.ts.map +1 -0
- package/dist/dts/services/MessengerAdapter/TelegramConfig.d.ts +58 -0
- package/dist/dts/services/MessengerAdapter/TelegramConfig.d.ts.map +1 -0
- package/dist/dts/services/MessengerAdapter.d.ts +69 -0
- package/dist/dts/services/MessengerAdapter.d.ts.map +1 -0
- package/dist/dts/services/OctokitClient.d.ts +232 -0
- package/dist/dts/services/OctokitClient.d.ts.map +1 -0
- package/dist/dts/services/PlanOverviewUploader.d.ts +55 -0
- package/dist/dts/services/PlanOverviewUploader.d.ts.map +1 -0
- package/dist/dts/services/PlanOverviewUploaderMap.d.ts +14 -0
- package/dist/dts/services/PlanOverviewUploaderMap.d.ts.map +1 -0
- package/dist/dts/services/PlanSession.d.ts +169 -0
- package/dist/dts/services/PlanSession.d.ts.map +1 -0
- package/dist/dts/services/ProjectStore.d.ts +50 -0
- package/dist/dts/services/ProjectStore.d.ts.map +1 -0
- package/dist/dts/services/PullRequestTracker.d.ts +42 -0
- package/dist/dts/services/PullRequestTracker.d.ts.map +1 -0
- package/dist/dts/services/SpecUploader.d.ts +51 -0
- package/dist/dts/services/SpecUploader.d.ts.map +1 -0
- package/dist/dts/services/SpecUploaderMap.d.ts +14 -0
- package/dist/dts/services/SpecUploaderMap.d.ts.map +1 -0
- package/dist/dts/services/TaskEventSource.d.ts +21 -0
- package/dist/dts/services/TaskEventSource.d.ts.map +1 -0
- package/dist/dts/services/TaskTracker/GitHubIssueTracker.d.ts +10 -0
- package/dist/dts/services/TaskTracker/GitHubIssueTracker.d.ts.map +1 -0
- package/dist/dts/services/TaskTracker/LinearSdkClient.d.ts +71 -0
- package/dist/dts/services/TaskTracker/LinearSdkClient.d.ts.map +1 -0
- package/dist/dts/services/TaskTracker/LinearTracker.d.ts +10 -0
- package/dist/dts/services/TaskTracker/LinearTracker.d.ts.map +1 -0
- package/dist/dts/services/TaskTracker/TaskTracker.d.ts +39 -0
- package/dist/dts/services/TaskTracker/TaskTracker.d.ts.map +1 -0
- package/dist/dts/services/TaskTracker/TrackerLayerMap.d.ts +14 -0
- package/dist/dts/services/TaskTracker/TrackerLayerMap.d.ts.map +1 -0
- package/dist/dts/services/TaskTracker/buildEventStream.d.ts +16 -0
- package/dist/dts/services/TaskTracker/buildEventStream.d.ts.map +1 -0
- package/dist/dts/services/TaskTracker.d.ts +38 -0
- package/dist/dts/services/TaskTracker.d.ts.map +1 -0
- package/dist/dts/services/TelegramAdapter.d.ts +13 -0
- package/dist/dts/services/TelegramAdapter.d.ts.map +1 -0
- package/dist/dts/services/TelegramConfig.d.ts +58 -0
- package/dist/dts/services/TelegramConfig.d.ts.map +1 -0
- package/dist/dts/services/TelegramConfigStore.d.ts +57 -0
- package/dist/dts/services/TelegramConfigStore.d.ts.map +1 -0
- package/dist/dts/services/TelegramNotifier.d.ts +40 -0
- package/dist/dts/services/TelegramNotifier.d.ts.map +1 -0
- package/dist/dts/services/TrackerLayerMap.d.ts +14 -0
- package/dist/dts/services/TrackerLayerMap.d.ts.map +1 -0
- package/dist/dts/services/TrackerResolver.d.ts +43 -0
- package/dist/dts/services/TrackerResolver.d.ts.map +1 -0
- package/dist/dts/services/messenger/MessengerAdapter.d.ts +69 -0
- package/dist/dts/services/messenger/MessengerAdapter.d.ts.map +1 -0
- package/dist/dts/services/messenger/TelegramAdapter.d.ts +13 -0
- package/dist/dts/services/messenger/TelegramAdapter.d.ts.map +1 -0
- package/dist/dts/services/task-tracker/GitHubIssueTracker.d.ts +10 -0
- package/dist/dts/services/task-tracker/GitHubIssueTracker.d.ts.map +1 -0
- package/dist/dts/services/task-tracker/LinearTracker.d.ts +10 -0
- package/dist/dts/services/task-tracker/LinearTracker.d.ts.map +1 -0
- package/dist/dts/services/task-tracker/TaskTracker.d.ts +38 -0
- package/dist/dts/services/task-tracker/TaskTracker.d.ts.map +1 -0
- package/dist/dts/services/task-tracker/TrackerLayerMap.d.ts +14 -0
- package/dist/dts/services/task-tracker/TrackerLayerMap.d.ts.map +1 -0
- package/dist/dts/shim/bin.d.ts +3 -0
- package/dist/dts/shim/bin.d.ts.map +1 -0
- package/dist/dts/shim/main.d.ts +36 -0
- package/dist/dts/shim/main.d.ts.map +1 -0
- package/dist/dts/shim/parseArgs.d.ts +11 -0
- package/dist/dts/shim/parseArgs.d.ts.map +1 -0
- package/dist/dts/shim/schemas.d.ts +55 -0
- package/dist/dts/shim/schemas.d.ts.map +1 -0
- package/dist/esm/Events.js +41 -0
- package/dist/esm/Events.js.map +1 -0
- package/dist/esm/LalphMain.js +56 -0
- package/dist/esm/LalphMain.js.map +1 -0
- package/dist/esm/Main.js +112 -0
- package/dist/esm/Main.js.map +1 -0
- package/dist/esm/index.js +101 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/AnalysisPrompts.js +54 -0
- package/dist/esm/lib/AnalysisPrompts.js.map +1 -0
- package/dist/esm/lib/BranchParser.js +36 -0
- package/dist/esm/lib/BranchParser.js.map +1 -0
- package/dist/esm/lib/MermaidToPlantUml.js +89 -0
- package/dist/esm/lib/MermaidToPlantUml.js.map +1 -0
- package/dist/esm/lib/SpecHtmlGenerator.js +153 -0
- package/dist/esm/lib/SpecHtmlGenerator.js.map +1 -0
- package/dist/esm/lib/StreamJsonParser.js +79 -0
- package/dist/esm/lib/StreamJsonParser.js.map +1 -0
- package/dist/esm/lib/TelegramFormatter.js +114 -0
- package/dist/esm/lib/TelegramFormatter.js.map +1 -0
- package/dist/esm/lib/TelegraphHtml.js +57 -0
- package/dist/esm/lib/TelegraphHtml.js.map +1 -0
- package/dist/esm/lib/TelegraphMarkdown.js +338 -0
- package/dist/esm/lib/TelegraphMarkdown.js.map +1 -0
- package/dist/esm/package.json +4 -0
- package/dist/esm/schemas/CredentialSchemas.js +22 -0
- package/dist/esm/schemas/CredentialSchemas.js.map +1 -0
- package/dist/esm/schemas/GitHubSchemas.js +50 -0
- package/dist/esm/schemas/GitHubSchemas.js.map +1 -0
- package/dist/esm/schemas/LinearSchemas.js +52 -0
- package/dist/esm/schemas/LinearSchemas.js.map +1 -0
- package/dist/esm/schemas/ProjectSchemas.js +18 -0
- package/dist/esm/schemas/ProjectSchemas.js.map +1 -0
- package/dist/esm/schemas/TrackerSchemas.js +26 -0
- package/dist/esm/schemas/TrackerSchemas.js.map +1 -0
- package/dist/esm/services/AppContext.js +48 -0
- package/dist/esm/services/AppContext.js.map +1 -0
- package/dist/esm/services/AppRuntimeConfig.js +26 -0
- package/dist/esm/services/AppRuntimeConfig.js.map +1 -0
- package/dist/esm/services/AutoMerge.js +131 -0
- package/dist/esm/services/AutoMerge.js.map +1 -0
- package/dist/esm/services/ChatMachine.js +855 -0
- package/dist/esm/services/ChatMachine.js.map +1 -0
- package/dist/esm/services/CommentTimer.js +72 -0
- package/dist/esm/services/CommentTimer.js.map +1 -0
- package/dist/esm/services/CredentialStore.js +59 -0
- package/dist/esm/services/CredentialStore.js.map +1 -0
- package/dist/esm/services/CredentialWatcher.js +67 -0
- package/dist/esm/services/CredentialWatcher.js.map +1 -0
- package/dist/esm/services/Credentials.js +121 -0
- package/dist/esm/services/Credentials.js.map +1 -0
- package/dist/esm/services/EventLoop.js +128 -0
- package/dist/esm/services/EventLoop.js.map +1 -0
- package/dist/esm/services/GitHubClient/GitHubClient.js +227 -0
- package/dist/esm/services/GitHubClient/GitHubClient.js.map +1 -0
- package/dist/esm/services/GitHubClient/OctokitClient.js +320 -0
- package/dist/esm/services/GitHubClient/OctokitClient.js.map +1 -0
- package/dist/esm/services/GitHubClient.js +227 -0
- package/dist/esm/services/GitHubClient.js.map +1 -0
- package/dist/esm/services/GitHubEventSource.js +136 -0
- package/dist/esm/services/GitHubEventSource.js.map +1 -0
- package/dist/esm/services/GitHubIssueTracker.js +111 -0
- package/dist/esm/services/GitHubIssueTracker.js.map +1 -0
- package/dist/esm/services/LalphConfig.js +130 -0
- package/dist/esm/services/LalphConfig.js.map +1 -0
- package/dist/esm/services/LalphConfigReader.js +71 -0
- package/dist/esm/services/LalphConfigReader.js.map +1 -0
- package/dist/esm/services/LalphDirectory.js +36 -0
- package/dist/esm/services/LalphDirectory.js.map +1 -0
- package/dist/esm/services/LinearSdkClient.js +140 -0
- package/dist/esm/services/LinearSdkClient.js.map +1 -0
- package/dist/esm/services/LinearTracker.js +82 -0
- package/dist/esm/services/LinearTracker.js.map +1 -0
- package/dist/esm/services/MessengerAdapter/MessengerAdapter.js +21 -0
- package/dist/esm/services/MessengerAdapter/MessengerAdapter.js.map +1 -0
- package/dist/esm/services/MessengerAdapter/TelegramAdapter.js +124 -0
- package/dist/esm/services/MessengerAdapter/TelegramAdapter.js.map +1 -0
- package/dist/esm/services/MessengerAdapter/TelegramConfig.js +71 -0
- package/dist/esm/services/MessengerAdapter/TelegramConfig.js.map +1 -0
- package/dist/esm/services/MessengerAdapter.js +21 -0
- package/dist/esm/services/MessengerAdapter.js.map +1 -0
- package/dist/esm/services/OctokitClient.js +341 -0
- package/dist/esm/services/OctokitClient.js.map +1 -0
- package/dist/esm/services/PlanOverviewUploader.js +109 -0
- package/dist/esm/services/PlanOverviewUploader.js.map +1 -0
- package/dist/esm/services/PlanOverviewUploaderMap.js +17 -0
- package/dist/esm/services/PlanOverviewUploaderMap.js.map +1 -0
- package/dist/esm/services/PlanSession.js +471 -0
- package/dist/esm/services/PlanSession.js.map +1 -0
- package/dist/esm/services/ProjectStore.js +98 -0
- package/dist/esm/services/ProjectStore.js.map +1 -0
- package/dist/esm/services/PullRequestTracker.js +177 -0
- package/dist/esm/services/PullRequestTracker.js.map +1 -0
- package/dist/esm/services/SpecUploader.js +101 -0
- package/dist/esm/services/SpecUploader.js.map +1 -0
- package/dist/esm/services/SpecUploaderMap.js +17 -0
- package/dist/esm/services/SpecUploaderMap.js.map +1 -0
- package/dist/esm/services/TaskEventSource.js +50 -0
- package/dist/esm/services/TaskEventSource.js.map +1 -0
- package/dist/esm/services/TaskTracker/GitHubIssueTracker.js +148 -0
- package/dist/esm/services/TaskTracker/GitHubIssueTracker.js.map +1 -0
- package/dist/esm/services/TaskTracker/LinearSdkClient.js +140 -0
- package/dist/esm/services/TaskTracker/LinearSdkClient.js.map +1 -0
- package/dist/esm/services/TaskTracker/LinearTracker.js +119 -0
- package/dist/esm/services/TaskTracker/LinearTracker.js.map +1 -0
- package/dist/esm/services/TaskTracker/TaskTracker.js +12 -0
- package/dist/esm/services/TaskTracker/TaskTracker.js.map +1 -0
- package/dist/esm/services/TaskTracker/TrackerLayerMap.js +19 -0
- package/dist/esm/services/TaskTracker/TrackerLayerMap.js.map +1 -0
- package/dist/esm/services/TaskTracker/buildEventStream.js +47 -0
- package/dist/esm/services/TaskTracker/buildEventStream.js.map +1 -0
- package/dist/esm/services/TaskTracker.js +12 -0
- package/dist/esm/services/TaskTracker.js.map +1 -0
- package/dist/esm/services/TelegramAdapter.js +118 -0
- package/dist/esm/services/TelegramAdapter.js.map +1 -0
- package/dist/esm/services/TelegramConfig.js +71 -0
- package/dist/esm/services/TelegramConfig.js.map +1 -0
- package/dist/esm/services/TelegramConfigStore.js +71 -0
- package/dist/esm/services/TelegramConfigStore.js.map +1 -0
- package/dist/esm/services/TelegramNotifier.js +41 -0
- package/dist/esm/services/TelegramNotifier.js.map +1 -0
- package/dist/esm/services/TrackerLayerMap.js +19 -0
- package/dist/esm/services/TrackerLayerMap.js.map +1 -0
- package/dist/esm/services/TrackerResolver.js +36 -0
- package/dist/esm/services/TrackerResolver.js.map +1 -0
- package/dist/esm/services/messenger/MessengerAdapter.js +21 -0
- package/dist/esm/services/messenger/MessengerAdapter.js.map +1 -0
- package/dist/esm/services/messenger/TelegramAdapter.js +118 -0
- package/dist/esm/services/messenger/TelegramAdapter.js.map +1 -0
- package/dist/esm/services/task-tracker/GitHubIssueTracker.js +150 -0
- package/dist/esm/services/task-tracker/GitHubIssueTracker.js.map +1 -0
- package/dist/esm/services/task-tracker/LinearTracker.js +120 -0
- package/dist/esm/services/task-tracker/LinearTracker.js.map +1 -0
- package/dist/esm/services/task-tracker/TaskTracker.js +12 -0
- package/dist/esm/services/task-tracker/TaskTracker.js.map +1 -0
- package/dist/esm/services/task-tracker/TrackerLayerMap.js +19 -0
- package/dist/esm/services/task-tracker/TrackerLayerMap.js.map +1 -0
- package/dist/esm/shim/bin.js +28 -0
- package/dist/esm/shim/bin.js.map +1 -0
- package/dist/esm/shim/main.js +196 -0
- package/dist/esm/shim/main.js.map +1 -0
- package/dist/esm/shim/parseArgs.js +39 -0
- package/dist/esm/shim/parseArgs.js.map +1 -0
- package/dist/esm/shim/schemas.js +28 -0
- package/dist/esm/shim/schemas.js.map +1 -0
- package/lib/AnalysisPrompts/package.json +6 -0
- package/lib/BranchParser/package.json +6 -0
- package/lib/MermaidToPlantUml/package.json +6 -0
- package/lib/SpecHtmlGenerator/package.json +6 -0
- package/lib/StreamJsonParser/package.json +6 -0
- package/lib/TelegramFormatter/package.json +6 -0
- package/lib/TelegraphMarkdown/package.json +6 -0
- package/package.json +360 -0
- package/schemas/CredentialSchemas/package.json +6 -0
- package/schemas/GitHubSchemas/package.json +6 -0
- package/schemas/LinearSchemas/package.json +6 -0
- package/schemas/ProjectSchemas/package.json +6 -0
- package/schemas/TrackerSchemas/package.json +6 -0
- package/services/AppContext/package.json +6 -0
- package/services/AppRuntimeConfig/package.json +6 -0
- package/services/AutoMerge/package.json +6 -0
- package/services/ChatMachine/package.json +6 -0
- package/services/CommentTimer/package.json +6 -0
- package/services/EventLoop/package.json +6 -0
- package/services/GitHubClient/package.json +6 -0
- package/services/LalphConfig/package.json +6 -0
- package/services/LinearSdkClient/package.json +6 -0
- package/services/MessengerAdapter/MessengerAdapter/package.json +6 -0
- package/services/MessengerAdapter/TelegramAdapter/package.json +6 -0
- package/services/OctokitClient/package.json +6 -0
- package/services/PlanOverviewUploader/package.json +6 -0
- package/services/PlanOverviewUploaderMap/package.json +6 -0
- package/services/PlanSession/package.json +6 -0
- package/services/ProjectStore/package.json +6 -0
- package/services/PullRequestTracker/package.json +6 -0
- package/services/TaskTracker/GitHubIssueTracker/package.json +6 -0
- package/services/TaskTracker/LinearTracker/package.json +6 -0
- package/services/TaskTracker/TaskTracker/package.json +6 -0
- package/services/TelegramConfig/package.json +6 -0
- package/services/TrackerLayerMap/package.json +6 -0
- package/shim/bin/package.json +6 -0
- package/shim/main/package.json +6 -0
- package/shim/parseArgs/package.json +6 -0
- package/shim/schemas/package.json +6 -0
- package/src/Events.ts +98 -0
- package/src/Main.ts +177 -0
- package/src/index.ts +124 -0
- package/src/lib/AnalysisPrompts.ts +54 -0
- package/src/lib/BranchParser.ts +58 -0
- package/src/lib/MermaidToPlantUml.ts +103 -0
- package/src/lib/SpecHtmlGenerator.ts +199 -0
- package/src/lib/StreamJsonParser.ts +99 -0
- package/src/lib/TelegramFormatter.ts +151 -0
- package/src/lib/TelegraphMarkdown.ts +305 -0
- package/src/schemas/CredentialSchemas.ts +23 -0
- package/src/schemas/GitHubSchemas.ts +50 -0
- package/src/schemas/LinearSchemas.ts +57 -0
- package/src/schemas/ProjectSchemas.ts +18 -0
- package/src/schemas/TrackerSchemas.ts +27 -0
- package/src/services/AppContext.ts +72 -0
- package/src/services/AppRuntimeConfig.ts +23 -0
- package/src/services/AutoMerge.ts +198 -0
- package/src/services/ChatMachine.ts +911 -0
- package/src/services/CommentTimer.ts +133 -0
- package/src/services/EventLoop.ts +321 -0
- package/src/services/GitHubClient.ts +282 -0
- package/src/services/LalphConfig.ts +218 -0
- package/src/services/LinearSdkClient.ts +181 -0
- package/src/services/MessengerAdapter/MessengerAdapter.ts +53 -0
- package/src/services/MessengerAdapter/TelegramAdapter.ts +145 -0
- package/src/services/OctokitClient.ts +628 -0
- package/src/services/PlanOverviewUploader.ts +160 -0
- package/src/services/PlanOverviewUploaderMap.ts +17 -0
- package/src/services/PlanSession.ts +589 -0
- package/src/services/ProjectStore.ts +140 -0
- package/src/services/PullRequestTracker.ts +253 -0
- package/src/services/TaskTracker/GitHubIssueTracker.ts +162 -0
- package/src/services/TaskTracker/LinearTracker.ts +141 -0
- package/src/services/TaskTracker/TaskTracker.ts +34 -0
- package/src/services/TelegramConfig.ts +120 -0
- package/src/services/TrackerLayerMap.ts +19 -0
- package/src/shim/bin.ts +36 -0
- package/src/shim/main.ts +255 -0
- package/src/shim/parseArgs.ts +43 -0
- package/src/shim/schemas.ts +38 -0
|
@@ -0,0 +1,199 @@
|
|
|
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
|
+
|
|
7
|
+
export interface SpecFile {
|
|
8
|
+
readonly name: string
|
|
9
|
+
readonly content: string
|
|
10
|
+
readonly mermaid: boolean
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const escapeHtml = (text: string): string =>
|
|
14
|
+
text
|
|
15
|
+
.replaceAll("&", "&")
|
|
16
|
+
.replaceAll("<", "<")
|
|
17
|
+
.replaceAll(">", ">")
|
|
18
|
+
.replaceAll("\"", """)
|
|
19
|
+
|
|
20
|
+
const markdownToHtml = (text: string): string => {
|
|
21
|
+
const placeholders: Array<readonly [string, string]> = []
|
|
22
|
+
let counter = 0
|
|
23
|
+
|
|
24
|
+
const makePlaceholder = (htmlContent: string): string => {
|
|
25
|
+
const key = `\x00PH${counter}\x00`
|
|
26
|
+
counter++
|
|
27
|
+
placeholders.push([key, htmlContent])
|
|
28
|
+
return key
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Extract fenced code blocks
|
|
32
|
+
let result = text.replace(
|
|
33
|
+
/```(\w+)?\n([\s\S]*?)```/g,
|
|
34
|
+
(_, lang: string | undefined, code: string) => {
|
|
35
|
+
const escaped = escapeHtml(code)
|
|
36
|
+
if (lang) {
|
|
37
|
+
return makePlaceholder(
|
|
38
|
+
`<pre><code class="language-${escapeHtml(lang)}">${escaped}</code></pre>`
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
return makePlaceholder(`<pre><code>${escaped}</code></pre>`)
|
|
42
|
+
}
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
// Extract inline code
|
|
46
|
+
result = result.replace(
|
|
47
|
+
/`([^`\n]+)`/g,
|
|
48
|
+
(_, code: string) => makePlaceholder(`<code>${escapeHtml(code)}</code>`)
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
// HTML-escape remaining text
|
|
52
|
+
result = escapeHtml(result)
|
|
53
|
+
|
|
54
|
+
// Bold: **text** or __text__
|
|
55
|
+
result = result.replace(/\*\*(.+?)\*\*/g, "<strong>$1</strong>")
|
|
56
|
+
result = result.replace(/__(.+?)__/g, "<strong>$1</strong>")
|
|
57
|
+
|
|
58
|
+
// Italic: *text*
|
|
59
|
+
result = result.replace(/\*(\S.*?\S|\S)\*/g, "<em>$1</em>")
|
|
60
|
+
result = result.replace(/(?<!\w)_(\S.*?\S|\S)_(?!\w)/g, "<em>$1</em>")
|
|
61
|
+
|
|
62
|
+
// Links: [text](url)
|
|
63
|
+
result = result.replace(
|
|
64
|
+
/\[([^\]]+)\]\(([^)]+)\)/g,
|
|
65
|
+
"<a href=\"$2\">$1</a>"
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
// Strikethrough: ~~text~~
|
|
69
|
+
result = result.replace(/~~(.+?)~~/g, "<s>$1</s>")
|
|
70
|
+
|
|
71
|
+
// Horizontal rules: --- or *** or ___ on their own line
|
|
72
|
+
result = result.replace(/^(?:---|\*\*\*|___)$/gm, "<hr>")
|
|
73
|
+
|
|
74
|
+
// Process block-level elements line by line
|
|
75
|
+
const lines = result.split("\n")
|
|
76
|
+
const output: Array<string> = []
|
|
77
|
+
let inList = false
|
|
78
|
+
|
|
79
|
+
for (const line of lines) {
|
|
80
|
+
// Headers: # Header
|
|
81
|
+
const headerMatch = /^(#{1,6})\s+(.+)$/.exec(line)
|
|
82
|
+
if (headerMatch?.[1] && headerMatch[2]) {
|
|
83
|
+
if (inList) {
|
|
84
|
+
output.push("</ul>")
|
|
85
|
+
inList = false
|
|
86
|
+
}
|
|
87
|
+
const level = headerMatch[1].length
|
|
88
|
+
output.push(`<h${level}>${headerMatch[2]}</h${level}>`)
|
|
89
|
+
continue
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Unordered list items: - item or * item
|
|
93
|
+
const listMatch = /^[-*]\s+(.+)$/.exec(line)
|
|
94
|
+
if (listMatch?.[1]) {
|
|
95
|
+
if (!inList) {
|
|
96
|
+
output.push("<ul>")
|
|
97
|
+
inList = true
|
|
98
|
+
}
|
|
99
|
+
output.push(`<li>${listMatch[1]}</li>`)
|
|
100
|
+
continue
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Close list if we hit a non-list line
|
|
104
|
+
if (inList) {
|
|
105
|
+
output.push("</ul>")
|
|
106
|
+
inList = false
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Skip <hr> — already converted
|
|
110
|
+
if (line === "<hr>") {
|
|
111
|
+
output.push(line)
|
|
112
|
+
continue
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Empty lines
|
|
116
|
+
if (line.trim() === "") {
|
|
117
|
+
output.push("")
|
|
118
|
+
continue
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Regular paragraph
|
|
122
|
+
output.push(`<p>${line}</p>`)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (inList) {
|
|
126
|
+
output.push("</ul>")
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
result = output.join("\n")
|
|
130
|
+
|
|
131
|
+
// Restore placeholders
|
|
132
|
+
for (const [key, htmlContent] of placeholders) {
|
|
133
|
+
result = result.replace(key, htmlContent)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return result
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const renderFileSection = (file: SpecFile): string => {
|
|
140
|
+
const heading = `<h2>${escapeHtml(file.name)}</h2>`
|
|
141
|
+
if (file.mermaid) {
|
|
142
|
+
return `${heading}\n<pre class="mermaid">${escapeHtml(file.content)}</pre>`
|
|
143
|
+
}
|
|
144
|
+
return `${heading}\n${markdownToHtml(file.content)}`
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Generate a self-contained HTML page from spec files.
|
|
149
|
+
* Mermaid files are wrapped in `<pre class="mermaid">` for client-side rendering.
|
|
150
|
+
* Markdown files are converted to basic HTML.
|
|
151
|
+
* @since 1.0.0
|
|
152
|
+
*/
|
|
153
|
+
export const generateSpecHtml = (files: ReadonlyArray<SpecFile>): string => {
|
|
154
|
+
const sections = files.map(renderFileSection).join("\n\n")
|
|
155
|
+
|
|
156
|
+
return `<!DOCTYPE html>
|
|
157
|
+
<html lang="en">
|
|
158
|
+
<head>
|
|
159
|
+
<meta charset="utf-8">
|
|
160
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
161
|
+
<title>Spec Files</title>
|
|
162
|
+
<style>
|
|
163
|
+
body {
|
|
164
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
165
|
+
max-width: 900px;
|
|
166
|
+
margin: 0 auto;
|
|
167
|
+
padding: 1rem;
|
|
168
|
+
line-height: 1.6;
|
|
169
|
+
color: #333;
|
|
170
|
+
}
|
|
171
|
+
pre {
|
|
172
|
+
background: #f5f5f5;
|
|
173
|
+
padding: 1rem;
|
|
174
|
+
overflow-x: auto;
|
|
175
|
+
border-radius: 4px;
|
|
176
|
+
}
|
|
177
|
+
code {
|
|
178
|
+
background: #f0f0f0;
|
|
179
|
+
padding: 0.15em 0.3em;
|
|
180
|
+
border-radius: 3px;
|
|
181
|
+
font-size: 0.9em;
|
|
182
|
+
}
|
|
183
|
+
pre code {
|
|
184
|
+
background: none;
|
|
185
|
+
padding: 0;
|
|
186
|
+
}
|
|
187
|
+
h2 {
|
|
188
|
+
border-bottom: 1px solid #eee;
|
|
189
|
+
padding-bottom: 0.3em;
|
|
190
|
+
}
|
|
191
|
+
</style>
|
|
192
|
+
</head>
|
|
193
|
+
<body>
|
|
194
|
+
${sections}
|
|
195
|
+
<script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"></script>
|
|
196
|
+
<script>mermaid.initialize({ startOnLoad: true });</script>
|
|
197
|
+
</body>
|
|
198
|
+
</html>`
|
|
199
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NDJSON parser for Claude Code `--output-format stream-json` output
|
|
3
|
+
* @since 1.0.0
|
|
4
|
+
*/
|
|
5
|
+
import { Effect, flow, identity, Schema, Stream } from "effect"
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @since 1.0.0
|
|
9
|
+
* @category schemas
|
|
10
|
+
*/
|
|
11
|
+
export const ContentBlock = Schema.Struct({
|
|
12
|
+
type: Schema.String,
|
|
13
|
+
id: Schema.optional(Schema.String),
|
|
14
|
+
text: Schema.optional(Schema.String),
|
|
15
|
+
name: Schema.optional(Schema.String),
|
|
16
|
+
input: Schema.optional(Schema.Unknown)
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @since 1.0.0
|
|
21
|
+
* @category schemas
|
|
22
|
+
*/
|
|
23
|
+
export class StreamJsonMessage extends Schema.Class<StreamJsonMessage>("StreamJsonMessage")({
|
|
24
|
+
type: Schema.String,
|
|
25
|
+
subtype: Schema.optional(Schema.String),
|
|
26
|
+
session_id: Schema.optional(Schema.String),
|
|
27
|
+
message: Schema.optional(
|
|
28
|
+
Schema.Struct({
|
|
29
|
+
id: Schema.optional(Schema.String),
|
|
30
|
+
content: Schema.optional(Schema.Array(ContentBlock))
|
|
31
|
+
})
|
|
32
|
+
)
|
|
33
|
+
}) {}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @since 1.0.0
|
|
37
|
+
* @category schemas
|
|
38
|
+
*/
|
|
39
|
+
export const QuestionOption = Schema.Struct({
|
|
40
|
+
label: Schema.String,
|
|
41
|
+
description: Schema.optional(Schema.String)
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @since 1.0.0
|
|
46
|
+
* @category schemas
|
|
47
|
+
*/
|
|
48
|
+
export const Question = Schema.Struct({
|
|
49
|
+
question: Schema.String,
|
|
50
|
+
header: Schema.optional(Schema.String),
|
|
51
|
+
options: Schema.optional(Schema.Array(QuestionOption)),
|
|
52
|
+
multiSelect: Schema.optional(Schema.Boolean)
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* @since 1.0.0
|
|
57
|
+
* @category schemas
|
|
58
|
+
*/
|
|
59
|
+
export const AskUserQuestionInput = Schema.Struct({
|
|
60
|
+
questions: Schema.optional(Schema.Array(Question))
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @since 1.0.0
|
|
65
|
+
* @category schemas
|
|
66
|
+
*/
|
|
67
|
+
export class StreamJsonInput extends Schema.Class<StreamJsonInput>("StreamJsonInput")({
|
|
68
|
+
type: Schema.Literal("user"),
|
|
69
|
+
message: Schema.Struct({
|
|
70
|
+
role: Schema.Literal("user"),
|
|
71
|
+
content: Schema.String
|
|
72
|
+
}),
|
|
73
|
+
session_id: Schema.String,
|
|
74
|
+
parent_tool_use_id: Schema.NullOr(Schema.String)
|
|
75
|
+
}) {}
|
|
76
|
+
|
|
77
|
+
const decodeJsonMessage = Schema.decodeUnknown(Schema.parseJson(StreamJsonMessage))
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Splits a string stream into lines and parses each as a StreamJsonMessage,
|
|
81
|
+
* silently filtering out lines that don't match.
|
|
82
|
+
* @since 1.0.0
|
|
83
|
+
* @category parsers
|
|
84
|
+
*/
|
|
85
|
+
export const parseNdjsonMessages = flow(
|
|
86
|
+
Stream.splitLines,
|
|
87
|
+
Stream.filter((line: string) => line.trim().length > 0),
|
|
88
|
+
Stream.mapEffect((line: string) =>
|
|
89
|
+
decodeJsonMessage(line).pipe(
|
|
90
|
+
Effect.tapError((err) =>
|
|
91
|
+
Effect.logWarning("Non-JSON stdout line, skipping").pipe(
|
|
92
|
+
Effect.annotateLogs({ line: line.slice(0, 300), error: err.message.slice(0, 100) })
|
|
93
|
+
)
|
|
94
|
+
),
|
|
95
|
+
Effect.option
|
|
96
|
+
)
|
|
97
|
+
),
|
|
98
|
+
Stream.filterMap(identity)
|
|
99
|
+
)
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown-to-Telegram-HTML converter.
|
|
3
|
+
*
|
|
4
|
+
* Telegram supports a narrow HTML subset: `<b>`, `<i>`, `<code>`, `<pre>`,
|
|
5
|
+
* `<a href>`, `<s>`. This module converts common markdown patterns to that
|
|
6
|
+
* subset while preserving code blocks verbatim.
|
|
7
|
+
*
|
|
8
|
+
* Ported from `repos/claude-code-telegram/src/bot/utils/html_format.py`.
|
|
9
|
+
* @since 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const escapeHtml = (text: string): string =>
|
|
13
|
+
text
|
|
14
|
+
.replaceAll("&", "&")
|
|
15
|
+
.replaceAll("<", "<")
|
|
16
|
+
.replaceAll(">", ">")
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Convert markdown text to Telegram-compatible HTML.
|
|
20
|
+
*
|
|
21
|
+
* Order of operations:
|
|
22
|
+
* 1. Extract fenced code blocks → placeholders
|
|
23
|
+
* 2. Extract inline code → placeholders
|
|
24
|
+
* 3. HTML-escape remaining text
|
|
25
|
+
* 4. Bold (`**text**` / `__text__`)
|
|
26
|
+
* 5. Italic (`*text*`, `_text_` at word boundaries)
|
|
27
|
+
* 6. Links (`[text](url)`)
|
|
28
|
+
* 7. Headers (`# Header` → `<b>Header</b>`)
|
|
29
|
+
* 8. Strikethrough (`~~text~~`)
|
|
30
|
+
* 9. Restore placeholders
|
|
31
|
+
* @since 1.0.0
|
|
32
|
+
*/
|
|
33
|
+
export const markdownToTelegramHtml = (text: string): string => {
|
|
34
|
+
const placeholders: Array<readonly [string, string]> = []
|
|
35
|
+
let counter = 0
|
|
36
|
+
|
|
37
|
+
const makePlaceholder = (htmlContent: string): string => {
|
|
38
|
+
const key = `\x00PH${counter}\x00`
|
|
39
|
+
counter++
|
|
40
|
+
placeholders.push([key, htmlContent])
|
|
41
|
+
return key
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// 1. Extract fenced code blocks
|
|
45
|
+
let result = text.replace(
|
|
46
|
+
/```(\w+)?\n([\s\S]*?)```/g,
|
|
47
|
+
(_, lang: string | undefined, code: string) => {
|
|
48
|
+
const escaped = escapeHtml(code)
|
|
49
|
+
if (lang) {
|
|
50
|
+
return makePlaceholder(
|
|
51
|
+
`<pre><code class="language-${escapeHtml(lang)}">${escaped}</code></pre>`
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
return makePlaceholder(`<pre><code>${escaped}</code></pre>`)
|
|
55
|
+
}
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
// 2. Extract inline code
|
|
59
|
+
result = result.replace(
|
|
60
|
+
/`([^`\n]+)`/g,
|
|
61
|
+
(_, code: string) => makePlaceholder(`<code>${escapeHtml(code)}</code>`)
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
// 3. HTML-escape remaining text
|
|
65
|
+
result = escapeHtml(result)
|
|
66
|
+
|
|
67
|
+
// 4. Bold: **text** or __text__
|
|
68
|
+
result = result.replace(/\*\*(.+?)\*\*/g, "<b>$1</b>")
|
|
69
|
+
result = result.replace(/__(.+?)__/g, "<b>$1</b>")
|
|
70
|
+
|
|
71
|
+
// 5. Italic: *text* (non-space bounded)
|
|
72
|
+
result = result.replace(/\*(\S.*?\S|\S)\*/g, "<i>$1</i>")
|
|
73
|
+
// _text_ only at word boundaries (avoid my_var_name)
|
|
74
|
+
result = result.replace(/(?<!\w)_(\S.*?\S|\S)_(?!\w)/g, "<i>$1</i>")
|
|
75
|
+
|
|
76
|
+
// 6. Links: [text](url)
|
|
77
|
+
result = result.replace(
|
|
78
|
+
/\[([^\]]+)\]\(([^)]+)\)/g,
|
|
79
|
+
"<a href=\"$2\">$1</a>"
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
// 7. Headers: # Header -> <b>Header</b>
|
|
83
|
+
result = result.replace(/^#{1,6}\s+(.+)$/gm, "<b>$1</b>")
|
|
84
|
+
|
|
85
|
+
// 8. Strikethrough: ~~text~~
|
|
86
|
+
result = result.replace(/~~(.+?)~~/g, "<s>$1</s>")
|
|
87
|
+
|
|
88
|
+
// 9. Restore placeholders
|
|
89
|
+
for (const [key, htmlContent] of placeholders) {
|
|
90
|
+
result = result.replace(key, htmlContent)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return result
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Split a message into chunks that fit within Telegram's message size limit.
|
|
98
|
+
*
|
|
99
|
+
* Splits on `\n\n` boundaries first; if a single paragraph still exceeds the
|
|
100
|
+
* limit, splits on `\n`.
|
|
101
|
+
* @since 1.0.0
|
|
102
|
+
*/
|
|
103
|
+
export const splitMessage = (
|
|
104
|
+
text: string,
|
|
105
|
+
maxLen: number = 4096
|
|
106
|
+
): ReadonlyArray<string> => {
|
|
107
|
+
if (text.length <= maxLen) {
|
|
108
|
+
return [text]
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const chunks: Array<string> = []
|
|
112
|
+
const paragraphs = text.split("\n\n")
|
|
113
|
+
let current = ""
|
|
114
|
+
|
|
115
|
+
for (const para of paragraphs) {
|
|
116
|
+
const candidate = current.length === 0 ? para : `${current}\n\n${para}`
|
|
117
|
+
|
|
118
|
+
if (candidate.length <= maxLen) {
|
|
119
|
+
current = candidate
|
|
120
|
+
} else {
|
|
121
|
+
if (current.length > 0) {
|
|
122
|
+
chunks.push(current)
|
|
123
|
+
current = ""
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// If the paragraph itself exceeds maxLen, split on \n
|
|
127
|
+
if (para.length > maxLen) {
|
|
128
|
+
const lines = para.split("\n")
|
|
129
|
+
for (const line of lines) {
|
|
130
|
+
const lineCandidate = current.length === 0 ? line : `${current}\n${line}`
|
|
131
|
+
if (lineCandidate.length <= maxLen) {
|
|
132
|
+
current = lineCandidate
|
|
133
|
+
} else {
|
|
134
|
+
if (current.length > 0) {
|
|
135
|
+
chunks.push(current)
|
|
136
|
+
}
|
|
137
|
+
current = line
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
} else {
|
|
141
|
+
current = para
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if (current.length > 0) {
|
|
147
|
+
chunks.push(current)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return chunks
|
|
151
|
+
}
|