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