@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,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getAnalysisPrompt = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Plan-type-specific analysis prompts for spec file follow-ups
|
|
9
|
+
* @since 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Returns an analysis prompt tailored to the given plan type.
|
|
13
|
+
* The prompt instructs Claude to write analysis output to `.specs/analysis.md`.
|
|
14
|
+
* @since 1.0.0
|
|
15
|
+
* @category prompts
|
|
16
|
+
*/
|
|
17
|
+
const getAnalysisPrompt = planType => {
|
|
18
|
+
switch (planType) {
|
|
19
|
+
case "Feature":
|
|
20
|
+
return `\
|
|
21
|
+
Now analyze the spec you just wrote. Create the following files:
|
|
22
|
+
|
|
23
|
+
1. \`.specs/analysis.md\` — high-level design summary in plain text:
|
|
24
|
+
- What services are added or changed and why
|
|
25
|
+
- Layer composition: what depends on what
|
|
26
|
+
- Key design decisions and trade-offs
|
|
27
|
+
|
|
28
|
+
2. \`.specs/services.mmd\` — a Mermaid classDiagram showing all new/changed service interfaces with their methods and return types. Use \`<<interface>>\` annotations. Show dependency arrows between services. Use \`~\` for generics (e.g. \`Effect~void, MyError~\`).
|
|
29
|
+
|
|
30
|
+
3. \`.specs/test.md\` — detailed test plan using AAA (Arrange/Act/Assert) structure. For each test case:
|
|
31
|
+
- **Name**: descriptive test name in \`it("...")\` style
|
|
32
|
+
- **Arrange**: what mocks, layers, and initial state to set up
|
|
33
|
+
- **Act**: the single effect/function call under test
|
|
34
|
+
- **Assert**: expected outcome and why this case matters
|
|
35
|
+
|
|
36
|
+
Do NOT display file contents in your response. The system will send them to the user.`;
|
|
37
|
+
case "Bug":
|
|
38
|
+
return `\
|
|
39
|
+
Now analyze the spec you just wrote. Write your analysis to \`.specs/analysis.md\` covering:
|
|
40
|
+
- Root cause analysis
|
|
41
|
+
- A failing TDD test case that reproduces the bug
|
|
42
|
+
- Resolution strategy
|
|
43
|
+
- Regression prevention measures`;
|
|
44
|
+
case "Refactor":
|
|
45
|
+
return `\
|
|
46
|
+
Now analyze the spec you just wrote. Write your analysis to \`.specs/analysis.md\` covering:
|
|
47
|
+
- Current state vs target state
|
|
48
|
+
- Migration steps in order
|
|
49
|
+
- Risk assessment for each step
|
|
50
|
+
- Test impact: which tests need updating?`;
|
|
51
|
+
default:
|
|
52
|
+
return `\
|
|
53
|
+
Now analyze the spec you just wrote. Write your analysis to \`.specs/analysis.md\` covering:
|
|
54
|
+
- Scope summary
|
|
55
|
+
- Implementation approach
|
|
56
|
+
- Dependencies and prerequisites
|
|
57
|
+
- Test strategy`;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
exports.getAnalysisPrompt = getAnalysisPrompt;
|
|
61
|
+
//# sourceMappingURL=AnalysisPrompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnalysisPrompts.js","names":["getAnalysisPrompt","planType","exports"],"sources":["../../../src/lib/AnalysisPrompts.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA;;;;AAKA;;;;;;AAMO,MAAMA,iBAAiB,GAAIC,QAAgB,IAAY;EAC5D,QAAQA,QAAQ;IACd,KAAK,SAAS;MACZ,OAAO;;;;;;;;;;;;;;;;sFAgByE;IAClF,KAAK,KAAK;MACR,OAAO;;;;;iCAKoB;IAC7B,KAAK,UAAU;MACb,OAAO;;;;;0CAK6B;IACtC;MACE,OAAO;;;;;gBAKG;EACd;AACF,CAAC;AAAAC,OAAA,CAAAF,iBAAA,GAAAA,iBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.extractIssueId = exports.BranchParserLive = exports.BranchParser = void 0;
|
|
7
|
+
var _effect = require("effect");
|
|
8
|
+
/**
|
|
9
|
+
* Branch name parser service to extract and resolve issue IDs
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const linearPattern = /^([A-Z]+-\d+)\//;
|
|
14
|
+
const linearAnywhere = /([A-Z]+-\d+)/;
|
|
15
|
+
const githubIssuePattern = /^#?(\d+)\//;
|
|
16
|
+
const githubIssueAnywhere = /(?:^|\/)#?(\d+)(?:\/|$)/;
|
|
17
|
+
const linearIdPattern = /^[A-Z]+-\d+$/;
|
|
18
|
+
/**
|
|
19
|
+
* Extract a raw issue ID from a git branch name.
|
|
20
|
+
*
|
|
21
|
+
* Tries patterns in order:
|
|
22
|
+
* 1. Linear-style prefix: `ABC-123/description` → `ABC-123`
|
|
23
|
+
* 2. Linear-style anywhere: `feature/ABC-123-description` → `ABC-123`
|
|
24
|
+
* 3. GitHub issue prefix: `#42/description` or `42/description` → `42`
|
|
25
|
+
* 4. GitHub issue anywhere: `feature/#42/description` → `42`
|
|
26
|
+
*
|
|
27
|
+
* @since 1.0.0
|
|
28
|
+
* @category parsers
|
|
29
|
+
*/
|
|
30
|
+
const extractIssueId = branch => _effect.Option.fromNullable(linearPattern.exec(branch)?.[1]).pipe(_effect.Option.orElse(() => _effect.Option.fromNullable(linearAnywhere.exec(branch)?.[1])), _effect.Option.orElse(() => _effect.Option.fromNullable(githubIssuePattern.exec(branch)?.[1])), _effect.Option.orElse(() => _effect.Option.fromNullable(githubIssueAnywhere.exec(branch)?.[1])));
|
|
31
|
+
/**
|
|
32
|
+
* @since 1.0.0
|
|
33
|
+
* @category context
|
|
34
|
+
*/
|
|
35
|
+
exports.extractIssueId = extractIssueId;
|
|
36
|
+
class BranchParser extends /*#__PURE__*/_effect.Context.Tag("BranchParser")() {}
|
|
37
|
+
/**
|
|
38
|
+
* @since 1.0.0
|
|
39
|
+
* @category layers
|
|
40
|
+
*/
|
|
41
|
+
exports.BranchParser = BranchParser;
|
|
42
|
+
const BranchParserLive = exports.BranchParserLive = /*#__PURE__*/_effect.Layer.succeed(BranchParser, /*#__PURE__*/BranchParser.of({
|
|
43
|
+
resolveIssueId: pr => _effect.Option.map(extractIssueId(pr.headRef), id => linearIdPattern.test(id) ? id : `${pr.repo}#${id}`)
|
|
44
|
+
}));
|
|
45
|
+
//# sourceMappingURL=BranchParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BranchParser.js","names":["_effect","require","linearPattern","linearAnywhere","githubIssuePattern","githubIssueAnywhere","linearIdPattern","extractIssueId","branch","Option","fromNullable","exec","pipe","orElse","exports","BranchParser","Context","Tag","BranchParserLive","Layer","succeed","of","resolveIssueId","pr","map","headRef","id","test","repo"],"sources":["../../../src/lib/BranchParser.ts"],"sourcesContent":[null],"mappings":";;;;;;AAIA,IAAAA,OAAA,GAAAC,OAAA;AAJA;;;;;AAOA,MAAMC,aAAa,GAAG,iBAAiB;AACvC,MAAMC,cAAc,GAAG,cAAc;AACrC,MAAMC,kBAAkB,GAAG,YAAY;AACvC,MAAMC,mBAAmB,GAAG,yBAAyB;AAErD,MAAMC,eAAe,GAAG,cAAc;AAEtC;;;;;;;;;;;;AAYO,MAAMC,cAAc,GAAIC,MAAc,IAC3CC,cAAM,CAACC,YAAY,CAACR,aAAa,CAACS,IAAI,CAACH,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAACI,IAAI,CACvDH,cAAM,CAACI,MAAM,CAAC,MAAMJ,cAAM,CAACC,YAAY,CAACP,cAAc,CAACQ,IAAI,CAACH,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAC1EC,cAAM,CAACI,MAAM,CAAC,MAAMJ,cAAM,CAACC,YAAY,CAACN,kBAAkB,CAACO,IAAI,CAACH,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAC9EC,cAAM,CAACI,MAAM,CAAC,MAAMJ,cAAM,CAACC,YAAY,CAACL,mBAAmB,CAACM,IAAI,CAACH,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAChF;AAUH;;;;AAAAM,OAAA,CAAAP,cAAA,GAAAA,cAAA;AAIM,MAAOQ,YAAa,sBAAQC,eAAO,CAACC,GAAG,CAAC,cAAc,CAAC,EAAqC;AAElG;;;;AAAAH,OAAA,CAAAC,YAAA,GAAAA,YAAA;AAIO,MAAMG,gBAAgB,GAAAJ,OAAA,CAAAI,gBAAA,gBAAGC,aAAK,CAACC,OAAO,CAC3CL,YAAY,eACZA,YAAY,CAACM,EAAE,CAAC;EACdC,cAAc,EAAGC,EAAE,IACjBd,cAAM,CAACe,GAAG,CAACjB,cAAc,CAACgB,EAAE,CAACE,OAAO,CAAC,EAAGC,EAAE,IAAKpB,eAAe,CAACqB,IAAI,CAACD,EAAE,CAAC,GAAGA,EAAE,GAAG,GAAGH,EAAE,CAACK,IAAI,IAAIF,EAAE,EAAE;CACpG,CAAC,CACH","ignoreList":[]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.mermaidToPlantUml = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Converts Mermaid class diagram syntax to PlantUML.
|
|
9
|
+
* Pure function — no side effects or dependencies.
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Convert a Mermaid class diagram to PlantUML syntax.
|
|
14
|
+
*
|
|
15
|
+
* Handles:
|
|
16
|
+
* - `classDiagram` → `@startuml` / `@enduml`
|
|
17
|
+
* - `class Foo {` blocks (preserved)
|
|
18
|
+
* - `<<interface>>` stereotypes (preserved)
|
|
19
|
+
* - `~Type1, Type2~` generics → `<Type1, Type2>`
|
|
20
|
+
* - `+method(params) ReturnType` → `+method(params): ReturnType`
|
|
21
|
+
* - Relationship arrows pass through (`<|--`, `<|..`, `-->`, `..>`)
|
|
22
|
+
* @since 1.0.0
|
|
23
|
+
*/
|
|
24
|
+
const mermaidToPlantUml = mermaid => {
|
|
25
|
+
const lines = mermaid.split("\n");
|
|
26
|
+
const output = [];
|
|
27
|
+
let insideClassBlock = false;
|
|
28
|
+
for (const rawLine of lines) {
|
|
29
|
+
const line = rawLine.trim();
|
|
30
|
+
// Skip empty lines — pass through
|
|
31
|
+
if (line === "") {
|
|
32
|
+
output.push("");
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
// classDiagram → @startuml
|
|
36
|
+
if (line === "classDiagram") {
|
|
37
|
+
output.push("@startuml");
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
// Convert generics: ~Type1, Type2~ → <Type1, Type2>
|
|
41
|
+
const converted = line.replace(/~([^~]+)~/g, "<$1>");
|
|
42
|
+
// Detect class block open: "class Foo {" or "class Foo<T> {"
|
|
43
|
+
if (/^class\s+\S+.*\{$/.test(converted)) {
|
|
44
|
+
insideClassBlock = true;
|
|
45
|
+
output.push(converted);
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
// Detect class block close
|
|
49
|
+
if (converted === "}" && insideClassBlock) {
|
|
50
|
+
insideClassBlock = false;
|
|
51
|
+
output.push("}");
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
// Inside a class block: convert member signatures
|
|
55
|
+
if (insideClassBlock) {
|
|
56
|
+
output.push(convertMember(converted));
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
// Outside class blocks — relationships, annotations, etc. pass through
|
|
60
|
+
output.push(converted);
|
|
61
|
+
}
|
|
62
|
+
output.push("@enduml");
|
|
63
|
+
return output.join("\n");
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Convert a single class member line.
|
|
67
|
+
* Mermaid: `+method(params) ReturnType` → PlantUML: `+method(params): ReturnType`
|
|
68
|
+
* Mermaid: `+field Type` → PlantUML: `+field: Type`
|
|
69
|
+
* Stereotypes like `<<interface>>` pass through unchanged.
|
|
70
|
+
*/
|
|
71
|
+
exports.mermaidToPlantUml = mermaidToPlantUml;
|
|
72
|
+
const convertMember = line => {
|
|
73
|
+
// <<interface>> or <<abstract>> — pass through
|
|
74
|
+
if (/^<<.+>>$/.test(line)) {
|
|
75
|
+
return line;
|
|
76
|
+
}
|
|
77
|
+
// Method with parentheses: +method(params) ReturnType
|
|
78
|
+
const methodMatch = /^([+\-#~]?)(\w+)\(([^)]*)\)\s+(.+)$/.exec(line);
|
|
79
|
+
if (methodMatch) {
|
|
80
|
+
const [, visibility, name, params, returnType] = methodMatch;
|
|
81
|
+
return `${visibility}${name}(${params}): ${returnType}`;
|
|
82
|
+
}
|
|
83
|
+
// Method with parentheses but no return type: +method(params)
|
|
84
|
+
const methodNoReturn = /^([+\-#~]?)(\w+)\(([^)]*)\)$/.exec(line);
|
|
85
|
+
if (methodNoReturn) {
|
|
86
|
+
return line;
|
|
87
|
+
}
|
|
88
|
+
// Field: +field Type (no parentheses, has a space separating name and type)
|
|
89
|
+
const fieldMatch = /^([+\-#~]?)(\w+)\s+(.+)$/.exec(line);
|
|
90
|
+
if (fieldMatch) {
|
|
91
|
+
const [, visibility, name, type] = fieldMatch;
|
|
92
|
+
return `${visibility}${name}: ${type}`;
|
|
93
|
+
}
|
|
94
|
+
return line;
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=MermaidToPlantUml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MermaidToPlantUml.js","names":["mermaidToPlantUml","mermaid","lines","split","output","insideClassBlock","rawLine","line","trim","push","converted","replace","test","convertMember","join","exports","methodMatch","exec","visibility","name","params","returnType","methodNoReturn","fieldMatch","type"],"sources":["../../../src/lib/MermaidToPlantUml.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA;;;;;AAMA;;;;;;;;;;;;AAYO,MAAMA,iBAAiB,GAAIC,OAAe,IAAY;EAC3D,MAAMC,KAAK,GAAGD,OAAO,CAACE,KAAK,CAAC,IAAI,CAAC;EACjC,MAAMC,MAAM,GAAkB,EAAE;EAChC,IAAIC,gBAAgB,GAAG,KAAK;EAE5B,KAAK,MAAMC,OAAO,IAAIJ,KAAK,EAAE;IAC3B,MAAMK,IAAI,GAAGD,OAAO,CAACE,IAAI,EAAE;IAE3B;IACA,IAAID,IAAI,KAAK,EAAE,EAAE;MACfH,MAAM,CAACK,IAAI,CAAC,EAAE,CAAC;MACf;IACF;IAEA;IACA,IAAIF,IAAI,KAAK,cAAc,EAAE;MAC3BH,MAAM,CAACK,IAAI,CAAC,WAAW,CAAC;MACxB;IACF;IAEA;IACA,MAAMC,SAAS,GAAGH,IAAI,CAACI,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;IAEpD;IACA,IAAI,mBAAmB,CAACC,IAAI,CAACF,SAAS,CAAC,EAAE;MACvCL,gBAAgB,GAAG,IAAI;MACvBD,MAAM,CAACK,IAAI,CAACC,SAAS,CAAC;MACtB;IACF;IAEA;IACA,IAAIA,SAAS,KAAK,GAAG,IAAIL,gBAAgB,EAAE;MACzCA,gBAAgB,GAAG,KAAK;MACxBD,MAAM,CAACK,IAAI,CAAC,GAAG,CAAC;MAChB;IACF;IAEA;IACA,IAAIJ,gBAAgB,EAAE;MACpBD,MAAM,CAACK,IAAI,CAACI,aAAa,CAACH,SAAS,CAAC,CAAC;MACrC;IACF;IAEA;IACAN,MAAM,CAACK,IAAI,CAACC,SAAS,CAAC;EACxB;EAEAN,MAAM,CAACK,IAAI,CAAC,SAAS,CAAC;EACtB,OAAOL,MAAM,CAACU,IAAI,CAAC,IAAI,CAAC;AAC1B,CAAC;AAED;;;;;;AAAAC,OAAA,CAAAf,iBAAA,GAAAA,iBAAA;AAMA,MAAMa,aAAa,GAAIN,IAAY,IAAY;EAC7C;EACA,IAAI,UAAU,CAACK,IAAI,CAACL,IAAI,CAAC,EAAE;IACzB,OAAOA,IAAI;EACb;EAEA;EACA,MAAMS,WAAW,GAAG,qCAAqC,CAACC,IAAI,CAACV,IAAI,CAAC;EACpE,IAAIS,WAAW,EAAE;IACf,MAAM,GAAGE,UAAU,EAAEC,IAAI,EAAEC,MAAM,EAAEC,UAAU,CAAC,GAAGL,WAAW;IAC5D,OAAO,GAAGE,UAAU,GAAGC,IAAI,IAAIC,MAAM,MAAMC,UAAU,EAAE;EACzD;EAEA;EACA,MAAMC,cAAc,GAAG,8BAA8B,CAACL,IAAI,CAACV,IAAI,CAAC;EAChE,IAAIe,cAAc,EAAE;IAClB,OAAOf,IAAI;EACb;EAEA;EACA,MAAMgB,UAAU,GAAG,0BAA0B,CAACN,IAAI,CAACV,IAAI,CAAC;EACxD,IAAIgB,UAAU,EAAE;IACd,MAAM,GAAGL,UAAU,EAAEC,IAAI,EAAEK,IAAI,CAAC,GAAGD,UAAU;IAC7C,OAAO,GAAGL,UAAU,GAAGC,IAAI,KAAKK,IAAI,EAAE;EACxC;EAEA,OAAOjB,IAAI;AACb,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.generateSpecHtml = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Generates a self-contained HTML page from spec files, with Mermaid.js
|
|
9
|
+
* CDN for client-side diagram rendering.
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
const escapeHtml = text => text.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll("\"", """);
|
|
13
|
+
const markdownToHtml = text => {
|
|
14
|
+
const placeholders = [];
|
|
15
|
+
let counter = 0;
|
|
16
|
+
const makePlaceholder = htmlContent => {
|
|
17
|
+
const key = `\x00PH${counter}\x00`;
|
|
18
|
+
counter++;
|
|
19
|
+
placeholders.push([key, htmlContent]);
|
|
20
|
+
return key;
|
|
21
|
+
};
|
|
22
|
+
// Extract fenced code blocks
|
|
23
|
+
let result = text.replace(/```(\w+)?\n([\s\S]*?)```/g, (_, lang, code) => {
|
|
24
|
+
const escaped = escapeHtml(code);
|
|
25
|
+
if (lang) {
|
|
26
|
+
return makePlaceholder(`<pre><code class="language-${escapeHtml(lang)}">${escaped}</code></pre>`);
|
|
27
|
+
}
|
|
28
|
+
return makePlaceholder(`<pre><code>${escaped}</code></pre>`);
|
|
29
|
+
});
|
|
30
|
+
// Extract inline code
|
|
31
|
+
result = result.replace(/`([^`\n]+)`/g, (_, code) => makePlaceholder(`<code>${escapeHtml(code)}</code>`));
|
|
32
|
+
// HTML-escape remaining text
|
|
33
|
+
result = escapeHtml(result);
|
|
34
|
+
// Bold: **text** or __text__
|
|
35
|
+
result = result.replace(/\*\*(.+?)\*\*/g, "<strong>$1</strong>");
|
|
36
|
+
result = result.replace(/__(.+?)__/g, "<strong>$1</strong>");
|
|
37
|
+
// Italic: *text*
|
|
38
|
+
result = result.replace(/\*(\S.*?\S|\S)\*/g, "<em>$1</em>");
|
|
39
|
+
result = result.replace(/(?<!\w)_(\S.*?\S|\S)_(?!\w)/g, "<em>$1</em>");
|
|
40
|
+
// Links: [text](url)
|
|
41
|
+
result = result.replace(/\[([^\]]+)\]\(([^)]+)\)/g, "<a href=\"$2\">$1</a>");
|
|
42
|
+
// Strikethrough: ~~text~~
|
|
43
|
+
result = result.replace(/~~(.+?)~~/g, "<s>$1</s>");
|
|
44
|
+
// Horizontal rules: --- or *** or ___ on their own line
|
|
45
|
+
result = result.replace(/^(?:---|\*\*\*|___)$/gm, "<hr>");
|
|
46
|
+
// Process block-level elements line by line
|
|
47
|
+
const lines = result.split("\n");
|
|
48
|
+
const output = [];
|
|
49
|
+
let inList = false;
|
|
50
|
+
for (const line of lines) {
|
|
51
|
+
// Headers: # Header
|
|
52
|
+
const headerMatch = /^(#{1,6})\s+(.+)$/.exec(line);
|
|
53
|
+
if (headerMatch?.[1] && headerMatch[2]) {
|
|
54
|
+
if (inList) {
|
|
55
|
+
output.push("</ul>");
|
|
56
|
+
inList = false;
|
|
57
|
+
}
|
|
58
|
+
const level = headerMatch[1].length;
|
|
59
|
+
output.push(`<h${level}>${headerMatch[2]}</h${level}>`);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
// Unordered list items: - item or * item
|
|
63
|
+
const listMatch = /^[-*]\s+(.+)$/.exec(line);
|
|
64
|
+
if (listMatch?.[1]) {
|
|
65
|
+
if (!inList) {
|
|
66
|
+
output.push("<ul>");
|
|
67
|
+
inList = true;
|
|
68
|
+
}
|
|
69
|
+
output.push(`<li>${listMatch[1]}</li>`);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
// Close list if we hit a non-list line
|
|
73
|
+
if (inList) {
|
|
74
|
+
output.push("</ul>");
|
|
75
|
+
inList = false;
|
|
76
|
+
}
|
|
77
|
+
// Skip <hr> — already converted
|
|
78
|
+
if (line === "<hr>") {
|
|
79
|
+
output.push(line);
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
// Empty lines
|
|
83
|
+
if (line.trim() === "") {
|
|
84
|
+
output.push("");
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
// Regular paragraph
|
|
88
|
+
output.push(`<p>${line}</p>`);
|
|
89
|
+
}
|
|
90
|
+
if (inList) {
|
|
91
|
+
output.push("</ul>");
|
|
92
|
+
}
|
|
93
|
+
result = output.join("\n");
|
|
94
|
+
// Restore placeholders
|
|
95
|
+
for (const [key, htmlContent] of placeholders) {
|
|
96
|
+
result = result.replace(key, htmlContent);
|
|
97
|
+
}
|
|
98
|
+
return result;
|
|
99
|
+
};
|
|
100
|
+
const renderFileSection = file => {
|
|
101
|
+
const heading = `<h2>${escapeHtml(file.name)}</h2>`;
|
|
102
|
+
if (file.mermaid) {
|
|
103
|
+
return `${heading}\n<pre class="mermaid">${escapeHtml(file.content)}</pre>`;
|
|
104
|
+
}
|
|
105
|
+
return `${heading}\n${markdownToHtml(file.content)}`;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Generate a self-contained HTML page from spec files.
|
|
109
|
+
* Mermaid files are wrapped in `<pre class="mermaid">` for client-side rendering.
|
|
110
|
+
* Markdown files are converted to basic HTML.
|
|
111
|
+
* @since 1.0.0
|
|
112
|
+
*/
|
|
113
|
+
const generateSpecHtml = files => {
|
|
114
|
+
const sections = files.map(renderFileSection).join("\n\n");
|
|
115
|
+
return `<!DOCTYPE html>
|
|
116
|
+
<html lang="en">
|
|
117
|
+
<head>
|
|
118
|
+
<meta charset="utf-8">
|
|
119
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
120
|
+
<title>Spec Files</title>
|
|
121
|
+
<style>
|
|
122
|
+
body {
|
|
123
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
124
|
+
max-width: 900px;
|
|
125
|
+
margin: 0 auto;
|
|
126
|
+
padding: 1rem;
|
|
127
|
+
line-height: 1.6;
|
|
128
|
+
color: #333;
|
|
129
|
+
}
|
|
130
|
+
pre {
|
|
131
|
+
background: #f5f5f5;
|
|
132
|
+
padding: 1rem;
|
|
133
|
+
overflow-x: auto;
|
|
134
|
+
border-radius: 4px;
|
|
135
|
+
}
|
|
136
|
+
code {
|
|
137
|
+
background: #f0f0f0;
|
|
138
|
+
padding: 0.15em 0.3em;
|
|
139
|
+
border-radius: 3px;
|
|
140
|
+
font-size: 0.9em;
|
|
141
|
+
}
|
|
142
|
+
pre code {
|
|
143
|
+
background: none;
|
|
144
|
+
padding: 0;
|
|
145
|
+
}
|
|
146
|
+
h2 {
|
|
147
|
+
border-bottom: 1px solid #eee;
|
|
148
|
+
padding-bottom: 0.3em;
|
|
149
|
+
}
|
|
150
|
+
</style>
|
|
151
|
+
</head>
|
|
152
|
+
<body>
|
|
153
|
+
${sections}
|
|
154
|
+
<script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"></script>
|
|
155
|
+
<script>mermaid.initialize({ startOnLoad: true });</script>
|
|
156
|
+
</body>
|
|
157
|
+
</html>`;
|
|
158
|
+
};
|
|
159
|
+
exports.generateSpecHtml = generateSpecHtml;
|
|
160
|
+
//# sourceMappingURL=SpecHtmlGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpecHtmlGenerator.js","names":["escapeHtml","text","replaceAll","markdownToHtml","placeholders","counter","makePlaceholder","htmlContent","key","push","result","replace","_","lang","code","escaped","lines","split","output","inList","line","headerMatch","exec","level","length","listMatch","trim","join","renderFileSection","file","heading","name","mermaid","content","generateSpecHtml","files","sections","map","exports"],"sources":["../../../src/lib/SpecHtmlGenerator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.parseNdjsonMessages = exports.StreamJsonMessage = exports.StreamJsonInput = exports.QuestionOption = exports.Question = exports.ContentBlock = exports.AskUserQuestionInput = void 0;
|
|
7
|
+
var _effect = require("effect");
|
|
8
|
+
/**
|
|
9
|
+
* NDJSON parser for Claude Code `--output-format stream-json` output
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @since 1.0.0
|
|
15
|
+
* @category schemas
|
|
16
|
+
*/
|
|
17
|
+
const ContentBlock = exports.ContentBlock = /*#__PURE__*/_effect.Schema.Struct({
|
|
18
|
+
type: _effect.Schema.String,
|
|
19
|
+
id: /*#__PURE__*/_effect.Schema.optional(_effect.Schema.String),
|
|
20
|
+
text: /*#__PURE__*/_effect.Schema.optional(_effect.Schema.String),
|
|
21
|
+
name: /*#__PURE__*/_effect.Schema.optional(_effect.Schema.String),
|
|
22
|
+
input: /*#__PURE__*/_effect.Schema.optional(_effect.Schema.Unknown)
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* @since 1.0.0
|
|
26
|
+
* @category schemas
|
|
27
|
+
*/
|
|
28
|
+
class StreamJsonMessage extends /*#__PURE__*/_effect.Schema.Class("StreamJsonMessage")({
|
|
29
|
+
type: _effect.Schema.String,
|
|
30
|
+
subtype: /*#__PURE__*/_effect.Schema.optional(_effect.Schema.String),
|
|
31
|
+
session_id: /*#__PURE__*/_effect.Schema.optional(_effect.Schema.String),
|
|
32
|
+
message: /*#__PURE__*/_effect.Schema.optional(/*#__PURE__*/_effect.Schema.Struct({
|
|
33
|
+
id: /*#__PURE__*/_effect.Schema.optional(_effect.Schema.String),
|
|
34
|
+
content: /*#__PURE__*/_effect.Schema.optional(/*#__PURE__*/_effect.Schema.Array(ContentBlock))
|
|
35
|
+
}))
|
|
36
|
+
}) {}
|
|
37
|
+
/**
|
|
38
|
+
* @since 1.0.0
|
|
39
|
+
* @category schemas
|
|
40
|
+
*/
|
|
41
|
+
exports.StreamJsonMessage = StreamJsonMessage;
|
|
42
|
+
const QuestionOption = exports.QuestionOption = /*#__PURE__*/_effect.Schema.Struct({
|
|
43
|
+
label: _effect.Schema.String,
|
|
44
|
+
description: /*#__PURE__*/_effect.Schema.optional(_effect.Schema.String)
|
|
45
|
+
});
|
|
46
|
+
/**
|
|
47
|
+
* @since 1.0.0
|
|
48
|
+
* @category schemas
|
|
49
|
+
*/
|
|
50
|
+
const Question = exports.Question = /*#__PURE__*/_effect.Schema.Struct({
|
|
51
|
+
question: _effect.Schema.String,
|
|
52
|
+
header: /*#__PURE__*/_effect.Schema.optional(_effect.Schema.String),
|
|
53
|
+
options: /*#__PURE__*/_effect.Schema.optional(/*#__PURE__*/_effect.Schema.Array(QuestionOption)),
|
|
54
|
+
multiSelect: /*#__PURE__*/_effect.Schema.optional(_effect.Schema.Boolean)
|
|
55
|
+
});
|
|
56
|
+
/**
|
|
57
|
+
* @since 1.0.0
|
|
58
|
+
* @category schemas
|
|
59
|
+
*/
|
|
60
|
+
const AskUserQuestionInput = exports.AskUserQuestionInput = /*#__PURE__*/_effect.Schema.Struct({
|
|
61
|
+
questions: /*#__PURE__*/_effect.Schema.optional(/*#__PURE__*/_effect.Schema.Array(Question))
|
|
62
|
+
});
|
|
63
|
+
/**
|
|
64
|
+
* @since 1.0.0
|
|
65
|
+
* @category schemas
|
|
66
|
+
*/
|
|
67
|
+
class StreamJsonInput extends /*#__PURE__*/_effect.Schema.Class("StreamJsonInput")({
|
|
68
|
+
type: /*#__PURE__*/_effect.Schema.Literal("user"),
|
|
69
|
+
message: /*#__PURE__*/_effect.Schema.Struct({
|
|
70
|
+
role: /*#__PURE__*/_effect.Schema.Literal("user"),
|
|
71
|
+
content: _effect.Schema.String
|
|
72
|
+
}),
|
|
73
|
+
session_id: _effect.Schema.String,
|
|
74
|
+
parent_tool_use_id: /*#__PURE__*/_effect.Schema.NullOr(_effect.Schema.String)
|
|
75
|
+
}) {}
|
|
76
|
+
exports.StreamJsonInput = StreamJsonInput;
|
|
77
|
+
const decodeJsonMessage = /*#__PURE__*/_effect.Schema.decodeUnknown(/*#__PURE__*/_effect.Schema.parseJson(StreamJsonMessage));
|
|
78
|
+
/**
|
|
79
|
+
* Splits a string stream into lines and parses each as a StreamJsonMessage,
|
|
80
|
+
* silently filtering out lines that don't match.
|
|
81
|
+
* @since 1.0.0
|
|
82
|
+
* @category parsers
|
|
83
|
+
*/
|
|
84
|
+
const parseNdjsonMessages = exports.parseNdjsonMessages = /*#__PURE__*/(0, _effect.flow)(_effect.Stream.splitLines, /*#__PURE__*/_effect.Stream.filter(line => line.trim().length > 0), /*#__PURE__*/_effect.Stream.mapEffect(line => decodeJsonMessage(line).pipe(_effect.Effect.tapError(err => _effect.Effect.logWarning("Non-JSON stdout line, skipping").pipe(_effect.Effect.annotateLogs({
|
|
85
|
+
line: line.slice(0, 300),
|
|
86
|
+
error: err.message.slice(0, 100)
|
|
87
|
+
}))), _effect.Effect.option)), /*#__PURE__*/_effect.Stream.filterMap(_effect.identity));
|
|
88
|
+
//# sourceMappingURL=StreamJsonParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StreamJsonParser.js","names":["_effect","require","ContentBlock","exports","Schema","Struct","type","String","id","optional","text","name","input","Unknown","StreamJsonMessage","Class","subtype","session_id","message","content","Array","QuestionOption","label","description","Question","question","header","options","multiSelect","Boolean","AskUserQuestionInput","questions","StreamJsonInput","Literal","role","parent_tool_use_id","NullOr","decodeJsonMessage","decodeUnknown","parseJson","parseNdjsonMessages","flow","Stream","splitLines","filter","line","trim","length","mapEffect","pipe","Effect","tapError","err","logWarning","annotateLogs","slice","error","option","filterMap","identity"],"sources":["../../../src/lib/StreamJsonParser.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.splitMessage = exports.markdownToTelegramHtml = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Markdown-to-Telegram-HTML converter.
|
|
9
|
+
*
|
|
10
|
+
* Telegram supports a narrow HTML subset: `<b>`, `<i>`, `<code>`, `<pre>`,
|
|
11
|
+
* `<a href>`, `<s>`. This module converts common markdown patterns to that
|
|
12
|
+
* subset while preserving code blocks verbatim.
|
|
13
|
+
*
|
|
14
|
+
* Ported from `repos/claude-code-telegram/src/bot/utils/html_format.py`.
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
*/
|
|
17
|
+
const escapeHtml = text => text.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">");
|
|
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
|
+
const markdownToTelegramHtml = text => {
|
|
34
|
+
const placeholders = [];
|
|
35
|
+
let counter = 0;
|
|
36
|
+
const makePlaceholder = htmlContent => {
|
|
37
|
+
const key = `\x00PH${counter}\x00`;
|
|
38
|
+
counter++;
|
|
39
|
+
placeholders.push([key, htmlContent]);
|
|
40
|
+
return key;
|
|
41
|
+
};
|
|
42
|
+
// 1. Extract fenced code blocks
|
|
43
|
+
let result = text.replace(/```(\w+)?\n([\s\S]*?)```/g, (_, lang, code) => {
|
|
44
|
+
const escaped = escapeHtml(code);
|
|
45
|
+
if (lang) {
|
|
46
|
+
return makePlaceholder(`<pre><code class="language-${escapeHtml(lang)}">${escaped}</code></pre>`);
|
|
47
|
+
}
|
|
48
|
+
return makePlaceholder(`<pre><code>${escaped}</code></pre>`);
|
|
49
|
+
});
|
|
50
|
+
// 2. Extract inline code
|
|
51
|
+
result = result.replace(/`([^`\n]+)`/g, (_, code) => makePlaceholder(`<code>${escapeHtml(code)}</code>`));
|
|
52
|
+
// 3. HTML-escape remaining text
|
|
53
|
+
result = escapeHtml(result);
|
|
54
|
+
// 4. Bold: **text** or __text__
|
|
55
|
+
result = result.replace(/\*\*(.+?)\*\*/g, "<b>$1</b>");
|
|
56
|
+
result = result.replace(/__(.+?)__/g, "<b>$1</b>");
|
|
57
|
+
// 5. Italic: *text* (non-space bounded)
|
|
58
|
+
result = result.replace(/\*(\S.*?\S|\S)\*/g, "<i>$1</i>");
|
|
59
|
+
// _text_ only at word boundaries (avoid my_var_name)
|
|
60
|
+
result = result.replace(/(?<!\w)_(\S.*?\S|\S)_(?!\w)/g, "<i>$1</i>");
|
|
61
|
+
// 6. Links: [text](url)
|
|
62
|
+
result = result.replace(/\[([^\]]+)\]\(([^)]+)\)/g, "<a href=\"$2\">$1</a>");
|
|
63
|
+
// 7. Headers: # Header -> <b>Header</b>
|
|
64
|
+
result = result.replace(/^#{1,6}\s+(.+)$/gm, "<b>$1</b>");
|
|
65
|
+
// 8. Strikethrough: ~~text~~
|
|
66
|
+
result = result.replace(/~~(.+?)~~/g, "<s>$1</s>");
|
|
67
|
+
// 9. Restore placeholders
|
|
68
|
+
for (const [key, htmlContent] of placeholders) {
|
|
69
|
+
result = result.replace(key, htmlContent);
|
|
70
|
+
}
|
|
71
|
+
return result;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Split a message into chunks that fit within Telegram's message size limit.
|
|
75
|
+
*
|
|
76
|
+
* Splits on `\n\n` boundaries first; if a single paragraph still exceeds the
|
|
77
|
+
* limit, splits on `\n`.
|
|
78
|
+
* @since 1.0.0
|
|
79
|
+
*/
|
|
80
|
+
exports.markdownToTelegramHtml = markdownToTelegramHtml;
|
|
81
|
+
const splitMessage = (text, maxLen = 4096) => {
|
|
82
|
+
if (text.length <= maxLen) {
|
|
83
|
+
return [text];
|
|
84
|
+
}
|
|
85
|
+
const chunks = [];
|
|
86
|
+
const paragraphs = text.split("\n\n");
|
|
87
|
+
let current = "";
|
|
88
|
+
for (const para of paragraphs) {
|
|
89
|
+
const candidate = current.length === 0 ? para : `${current}\n\n${para}`;
|
|
90
|
+
if (candidate.length <= maxLen) {
|
|
91
|
+
current = candidate;
|
|
92
|
+
} else {
|
|
93
|
+
if (current.length > 0) {
|
|
94
|
+
chunks.push(current);
|
|
95
|
+
current = "";
|
|
96
|
+
}
|
|
97
|
+
// If the paragraph itself exceeds maxLen, split on \n
|
|
98
|
+
if (para.length > maxLen) {
|
|
99
|
+
const lines = para.split("\n");
|
|
100
|
+
for (const line of lines) {
|
|
101
|
+
const lineCandidate = current.length === 0 ? line : `${current}\n${line}`;
|
|
102
|
+
if (lineCandidate.length <= maxLen) {
|
|
103
|
+
current = lineCandidate;
|
|
104
|
+
} else {
|
|
105
|
+
if (current.length > 0) {
|
|
106
|
+
chunks.push(current);
|
|
107
|
+
}
|
|
108
|
+
current = line;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
} else {
|
|
112
|
+
current = para;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (current.length > 0) {
|
|
117
|
+
chunks.push(current);
|
|
118
|
+
}
|
|
119
|
+
return chunks;
|
|
120
|
+
};
|
|
121
|
+
exports.splitMessage = splitMessage;
|
|
122
|
+
//# sourceMappingURL=TelegramFormatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TelegramFormatter.js","names":["escapeHtml","text","replaceAll","markdownToTelegramHtml","placeholders","counter","makePlaceholder","htmlContent","key","push","result","replace","_","lang","code","escaped","exports","splitMessage","maxLen","length","chunks","paragraphs","split","current","para","candidate","lines","line","lineCandidate"],"sources":["../../../src/lib/TelegramFormatter.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|