@noorm/marie-cli 0.1.17 → 0.1.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/README.md +7 -15
  2. package/SENTINEL.md +4 -7
  3. package/dist/cli-new/components/AgenticSpinner.js +28 -0
  4. package/dist/cli-new/components/AgenticSpinner.js.map +1 -0
  5. package/dist/cli-new/components/App.js +16 -63
  6. package/dist/cli-new/components/App.js.map +1 -1
  7. package/dist/cli-new/components/ApprovalDialog.js +3 -2
  8. package/dist/cli-new/components/ApprovalDialog.js.map +1 -1
  9. package/dist/cli-new/components/Banner.js +16 -5
  10. package/dist/cli-new/components/Banner.js.map +1 -1
  11. package/dist/cli-new/components/ChatArea.js +6 -7
  12. package/dist/cli-new/components/ChatArea.js.map +1 -1
  13. package/dist/cli-new/components/Header.js +14 -8
  14. package/dist/cli-new/components/Header.js.map +1 -1
  15. package/dist/cli-new/components/InputArea.js +98 -31
  16. package/dist/cli-new/components/InputArea.js.map +1 -1
  17. package/dist/cli-new/components/MessageBubble.js +28 -19
  18. package/dist/cli-new/components/MessageBubble.js.map +1 -1
  19. package/dist/cli-new/components/SessionSwitcher.js +6 -9
  20. package/dist/cli-new/components/SessionSwitcher.js.map +1 -1
  21. package/dist/cli-new/components/SetupWizard.js +80 -257
  22. package/dist/cli-new/components/SetupWizard.js.map +1 -1
  23. package/dist/cli-new/components/ToolCallDisplay.js +20 -5
  24. package/dist/cli-new/components/ToolCallDisplay.js.map +1 -1
  25. package/dist/cli-new/components/WizardSteps.js +22 -0
  26. package/dist/cli-new/components/WizardSteps.js.map +1 -0
  27. package/dist/cli-new/constants/SetupConstants.js +42 -0
  28. package/dist/cli-new/constants/SetupConstants.js.map +1 -0
  29. package/dist/cli-new/hooks/useGit.js +19 -62
  30. package/dist/cli-new/hooks/useGit.js.map +1 -1
  31. package/dist/cli-new/hooks/useMarie.js +26 -18
  32. package/dist/cli-new/hooks/useMarie.js.map +1 -1
  33. package/dist/cli-new/hooks/useSessions.js +1 -1
  34. package/dist/cli-new/hooks/useSessions.js.map +1 -1
  35. package/dist/cli-new/hooks/useSetupWizard.js +88 -0
  36. package/dist/cli-new/hooks/useSetupWizard.js.map +1 -0
  37. package/dist/cli-new/hooks/useUpdateCheck.js +4 -3
  38. package/dist/cli-new/hooks/useUpdateCheck.js.map +1 -1
  39. package/dist/cli-new/index.js +2 -4
  40. package/dist/cli-new/index.js.map +1 -1
  41. package/dist/cli-new/services/CommandService.js +104 -0
  42. package/dist/cli-new/services/CommandService.js.map +1 -0
  43. package/dist/cli-new/services/GitService.js +91 -0
  44. package/dist/cli-new/services/GitService.js.map +1 -0
  45. package/dist/cli-new/services/MarieService.js +77 -0
  46. package/dist/cli-new/services/MarieService.js.map +1 -0
  47. package/dist/cli-new/services/auth-server.js +128 -0
  48. package/dist/cli-new/services/auth-server.js.map +1 -0
  49. package/dist/cli-new/styles/theme.js +17 -17
  50. package/dist/cli-new/styles/theme.js.map +1 -1
  51. package/dist/cli-new/utils/version.js +24 -0
  52. package/dist/cli-new/utils/version.js.map +1 -0
  53. package/dist/monolith/adapters/CliMarieAdapter.js +19 -18
  54. package/dist/monolith/adapters/CliMarieAdapter.js.map +1 -1
  55. package/dist/monolith/cli/CliFileSystemPort.js +17 -3
  56. package/dist/monolith/cli/CliFileSystemPort.js.map +1 -1
  57. package/dist/monolith/cli/MarieToolDefinitionsCLI.js +44 -33
  58. package/dist/monolith/cli/MarieToolDefinitionsCLI.js.map +1 -1
  59. package/dist/monolith/cli/index.js +11 -20
  60. package/dist/monolith/cli/index.js.map +1 -1
  61. package/dist/monolith/cli/services/JoyAutomationServiceCLI.js +15 -62
  62. package/dist/monolith/cli/services/JoyAutomationServiceCLI.js.map +1 -1
  63. package/dist/monolith/cli/storage.js +154 -65
  64. package/dist/monolith/cli/storage.js.map +1 -1
  65. package/dist/monolith/domain/joy/RitualService.js +44 -46
  66. package/dist/monolith/domain/joy/RitualService.js.map +1 -1
  67. package/dist/monolith/domain/marie/MarieCortex.js +148 -0
  68. package/dist/monolith/domain/marie/MarieCortex.js.map +1 -0
  69. package/dist/monolith/domain/marie/PersonalityRenderer.js +97 -0
  70. package/dist/monolith/domain/marie/PersonalityRenderer.js.map +1 -0
  71. package/dist/monolith/infrastructure/Configuration.js +68 -0
  72. package/dist/monolith/infrastructure/Configuration.js.map +1 -0
  73. package/dist/monolith/infrastructure/CoreInfrastructure.js +204 -0
  74. package/dist/monolith/infrastructure/CoreInfrastructure.js.map +1 -0
  75. package/dist/monolith/infrastructure/ai/agents/MarieAscendant.js +3 -3
  76. package/dist/monolith/infrastructure/ai/agents/MarieAscendant.js.map +1 -1
  77. package/dist/monolith/infrastructure/ai/context/ContextArchiveService.js +51 -57
  78. package/dist/monolith/infrastructure/ai/context/ContextArchiveService.js.map +1 -1
  79. package/dist/monolith/infrastructure/ai/context/ContextManager.js +142 -98
  80. package/dist/monolith/infrastructure/ai/context/ContextManager.js.map +1 -1
  81. package/dist/monolith/infrastructure/ai/core/MarieEngine.js +104 -556
  82. package/dist/monolith/infrastructure/ai/core/MarieEngine.js.map +1 -1
  83. package/dist/monolith/infrastructure/ai/core/MarieEventDispatcher.js +1 -37
  84. package/dist/monolith/infrastructure/ai/core/MarieEventDispatcher.js.map +1 -1
  85. package/dist/monolith/infrastructure/ai/core/MarieLockManager.js +30 -5
  86. package/dist/monolith/infrastructure/ai/core/MarieLockManager.js.map +1 -1
  87. package/dist/monolith/infrastructure/ai/core/MarieProgressTracker.js +176 -196
  88. package/dist/monolith/infrastructure/ai/core/MarieProgressTracker.js.map +1 -1
  89. package/dist/monolith/infrastructure/ai/core/MariePulseService.js +41 -7
  90. package/dist/monolith/infrastructure/ai/core/MariePulseService.js.map +1 -1
  91. package/dist/monolith/infrastructure/ai/core/MarieSanitizer.js +303 -63
  92. package/dist/monolith/infrastructure/ai/core/MarieSanitizer.js.map +1 -1
  93. package/dist/monolith/infrastructure/ai/core/MarieSemaphore.js +47 -4
  94. package/dist/monolith/infrastructure/ai/core/MarieSemaphore.js.map +1 -1
  95. package/dist/monolith/infrastructure/ai/core/MarieSession.js +95 -15
  96. package/dist/monolith/infrastructure/ai/core/MarieSession.js.map +1 -1
  97. package/dist/monolith/infrastructure/ai/core/MarieStabilityMonitor.js +21 -0
  98. package/dist/monolith/infrastructure/ai/core/MarieStabilityMonitor.js.map +1 -1
  99. package/dist/monolith/infrastructure/ai/core/MarieToolMender.js +12 -0
  100. package/dist/monolith/infrastructure/ai/core/MarieToolMender.js.map +1 -1
  101. package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js +339 -481
  102. package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js.map +1 -1
  103. package/dist/monolith/infrastructure/ai/core/MarieVitality.js +238 -0
  104. package/dist/monolith/infrastructure/ai/core/MarieVitality.js.map +1 -0
  105. package/dist/monolith/infrastructure/ai/core/ReasoningBudget.js +23 -12
  106. package/dist/monolith/infrastructure/ai/core/ReasoningBudget.js.map +1 -1
  107. package/dist/monolith/infrastructure/ai/core/SessionLogService.js +9 -2
  108. package/dist/monolith/infrastructure/ai/core/SessionLogService.js.map +1 -1
  109. package/dist/monolith/infrastructure/ai/providers/AIProvider.js +402 -1
  110. package/dist/monolith/infrastructure/ai/providers/AIProvider.js.map +1 -1
  111. package/dist/monolith/infrastructure/ai/providers/DreamBeesProvider.js +114 -0
  112. package/dist/monolith/infrastructure/ai/providers/DreamBeesProvider.js.map +1 -0
  113. package/dist/monolith/infrastructure/ai/providers/OpenRouterProvider.js +426 -370
  114. package/dist/monolith/infrastructure/ai/providers/OpenRouterProvider.js.map +1 -1
  115. package/dist/monolith/infrastructure/ai/providers/OpenRouterStreamParser.js +235 -241
  116. package/dist/monolith/infrastructure/ai/providers/OpenRouterStreamParser.js.map +1 -1
  117. package/dist/monolith/infrastructure/ai/workerAi.js +185 -0
  118. package/dist/monolith/infrastructure/ai/workerAi.js.map +1 -0
  119. package/dist/monolith/infrastructure/config/ConfigService.js +216 -359
  120. package/dist/monolith/infrastructure/config/ConfigService.js.map +1 -1
  121. package/dist/monolith/infrastructure/joy/CognitiveRituals.js +8 -0
  122. package/dist/monolith/infrastructure/joy/CognitiveRituals.js.map +1 -0
  123. package/dist/monolith/infrastructure/joy/JoyTools.js +23 -43
  124. package/dist/monolith/infrastructure/joy/JoyTools.js.map +1 -1
  125. package/dist/monolith/infrastructure/persistence/MarieMindAutonomics.js +4 -0
  126. package/dist/monolith/infrastructure/persistence/MarieMindAutonomics.js.map +1 -0
  127. package/dist/monolith/infrastructure/persistence/MarieMindEngine.js +11 -0
  128. package/dist/monolith/infrastructure/persistence/MarieMindEngine.js.map +1 -0
  129. package/dist/monolith/infrastructure/persistence/NoormmeAutonomics.js +135 -0
  130. package/dist/monolith/infrastructure/persistence/NoormmeAutonomics.js.map +1 -0
  131. package/dist/monolith/infrastructure/persistence/NoormmeEngine.js +523 -0
  132. package/dist/monolith/infrastructure/persistence/NoormmeEngine.js.map +1 -0
  133. package/dist/monolith/infrastructure/persistence/NoormmeSchema.js +179 -0
  134. package/dist/monolith/infrastructure/persistence/NoormmeSchema.js.map +1 -0
  135. package/dist/monolith/infrastructure/persistence/NoormmeSeeder.js +94 -0
  136. package/dist/monolith/infrastructure/persistence/NoormmeSeeder.js.map +1 -0
  137. package/dist/monolith/infrastructure/persistence/NoormmeTools.js +371 -0
  138. package/dist/monolith/infrastructure/persistence/NoormmeTools.js.map +1 -0
  139. package/dist/monolith/infrastructure/services/MarieMemoryStore.js +133 -134
  140. package/dist/monolith/infrastructure/services/MarieMemoryStore.js.map +1 -1
  141. package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js +6 -1578
  142. package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js.map +1 -1
  143. package/dist/monolith/infrastructure/tools/PureStreamParser.js +68 -80
  144. package/dist/monolith/infrastructure/tools/PureStreamParser.js.map +1 -1
  145. package/dist/monolith/infrastructure/tools/SharedToolDefinitions.js +12 -11
  146. package/dist/monolith/infrastructure/tools/SharedToolDefinitions.js.map +1 -1
  147. package/dist/monolith/infrastructure/tools/SovereignTools.js +326 -0
  148. package/dist/monolith/infrastructure/tools/SovereignTools.js.map +1 -0
  149. package/dist/monolith/infrastructure/tools/ToolRegistry.js +45 -26
  150. package/dist/monolith/infrastructure/tools/ToolRegistry.js.map +1 -1
  151. package/dist/monolith/infrastructure/tools/definitions/AnalysisTools.js +232 -0
  152. package/dist/monolith/infrastructure/tools/definitions/AnalysisTools.js.map +1 -0
  153. package/dist/monolith/infrastructure/tools/definitions/AutomationTools.js +274 -0
  154. package/dist/monolith/infrastructure/tools/definitions/AutomationTools.js.map +1 -0
  155. package/dist/monolith/infrastructure/tools/definitions/ContextTools.js +71 -0
  156. package/dist/monolith/infrastructure/tools/definitions/ContextTools.js.map +1 -0
  157. package/dist/monolith/infrastructure/tools/definitions/CoreTools.js +37 -0
  158. package/dist/monolith/infrastructure/tools/definitions/CoreTools.js.map +1 -0
  159. package/dist/monolith/infrastructure/tools/definitions/DiagnosticTools.js +154 -0
  160. package/dist/monolith/infrastructure/tools/definitions/DiagnosticTools.js.map +1 -0
  161. package/dist/monolith/infrastructure/tools/definitions/NavigationTools.js +197 -0
  162. package/dist/monolith/infrastructure/tools/definitions/NavigationTools.js.map +1 -0
  163. package/dist/monolith/infrastructure/tools/definitions/PlanningTools.js +300 -0
  164. package/dist/monolith/infrastructure/tools/definitions/PlanningTools.js.map +1 -0
  165. package/dist/monolith/plumbing/Plumbing.js +238 -0
  166. package/dist/monolith/plumbing/Plumbing.js.map +1 -0
  167. package/dist/monolith/plumbing/PlumbingAnalysis.js +109 -0
  168. package/dist/monolith/plumbing/PlumbingAnalysis.js.map +1 -0
  169. package/dist/monolith/plumbing/PlumbingSystem.js +169 -0
  170. package/dist/monolith/plumbing/PlumbingSystem.js.map +1 -0
  171. package/dist/monolith/plumbing/analysis/ComplexityService.js +30 -34
  172. package/dist/monolith/plumbing/analysis/ComplexityService.js.map +1 -1
  173. package/dist/monolith/plumbing/analysis/DependencyService.js +55 -44
  174. package/dist/monolith/plumbing/analysis/DependencyService.js.map +1 -1
  175. package/dist/monolith/plumbing/analysis/DiscoveryService.js +40 -42
  176. package/dist/monolith/plumbing/analysis/DiscoveryService.js.map +1 -1
  177. package/dist/monolith/plumbing/analysis/JoyMapService.js +52 -56
  178. package/dist/monolith/plumbing/analysis/JoyMapService.js.map +1 -1
  179. package/dist/monolith/plumbing/analysis/LintService.js +118 -118
  180. package/dist/monolith/plumbing/analysis/LintService.js.map +1 -1
  181. package/dist/monolith/plumbing/analysis/MarieSentinelService.js +278 -269
  182. package/dist/monolith/plumbing/analysis/MarieSentinelService.js.map +1 -1
  183. package/dist/monolith/plumbing/analysis/QualityGuardrailService.js +116 -114
  184. package/dist/monolith/plumbing/analysis/QualityGuardrailService.js.map +1 -1
  185. package/dist/monolith/plumbing/analysis/SurgicalMender.js +57 -59
  186. package/dist/monolith/plumbing/analysis/SurgicalMender.js.map +1 -1
  187. package/dist/monolith/plumbing/analysis/TestService.js +89 -89
  188. package/dist/monolith/plumbing/analysis/TestService.js.map +1 -1
  189. package/dist/monolith/plumbing/filesystem/FileService.js +123 -195
  190. package/dist/monolith/plumbing/filesystem/FileService.js.map +1 -1
  191. package/dist/monolith/plumbing/filesystem/PathResolver.js +7 -8
  192. package/dist/monolith/plumbing/filesystem/PathResolver.js.map +1 -1
  193. package/dist/monolith/plumbing/git/GitService.js +4 -4
  194. package/dist/monolith/plumbing/git/GitService.js.map +1 -1
  195. package/dist/monolith/plumbing/lsp/SymbolService.js +5 -34
  196. package/dist/monolith/plumbing/lsp/SymbolService.js.map +1 -1
  197. package/dist/monolith/plumbing/terminal/ProcessRegistry.js +20 -22
  198. package/dist/monolith/plumbing/terminal/ProcessRegistry.js.map +1 -1
  199. package/dist/monolith/plumbing/terminal/TerminalService.js +127 -136
  200. package/dist/monolith/plumbing/terminal/TerminalService.js.map +1 -1
  201. package/dist/monolith/plumbing/utils/EnvironmentUtils.js +3 -23
  202. package/dist/monolith/plumbing/utils/EnvironmentUtils.js.map +1 -1
  203. package/dist/monolith/plumbing/utils/JsonUtils.js +252 -311
  204. package/dist/monolith/plumbing/utils/JsonUtils.js.map +1 -1
  205. package/dist/monolith/plumbing/utils/MutexUtils.js.map +1 -1
  206. package/dist/monolith/plumbing/utils/PlumbingCore.js +549 -0
  207. package/dist/monolith/plumbing/utils/PlumbingCore.js.map +1 -0
  208. package/dist/monolith/plumbing/utils/PrefixTree.js +61 -114
  209. package/dist/monolith/plumbing/utils/PrefixTree.js.map +1 -1
  210. package/dist/monolith/plumbing/utils/StreamTagDetector.js +89 -127
  211. package/dist/monolith/plumbing/utils/StreamTagDetector.js.map +1 -1
  212. package/dist/monolith/plumbing/utils/StringUtils.js +87 -89
  213. package/dist/monolith/plumbing/utils/StringUtils.js.map +1 -1
  214. package/dist/monolith/runtime/MarieRuntime.js +76 -417
  215. package/dist/monolith/runtime/MarieRuntime.js.map +1 -1
  216. package/dist/monolith/runtime/RuntimeAdapterBase.js +1 -1
  217. package/dist/monolith/runtime/RuntimeAdapterBase.js.map +1 -1
  218. package/dist/monolith/runtime/providerFactory.js +1 -7
  219. package/dist/monolith/runtime/providerFactory.js.map +1 -1
  220. package/dist/monolith/services/HealthService.js +29 -32
  221. package/dist/monolith/services/HealthService.js.map +1 -1
  222. package/dist/monolith/services/JoyAutomationService.js +58 -95
  223. package/dist/monolith/services/JoyAutomationService.js.map +1 -1
  224. package/dist/monolith/services/MarieAutomationService.js +59 -0
  225. package/dist/monolith/services/MarieAutomationService.js.map +1 -0
  226. package/dist/monolith/services/MarieGhostService.js +46 -161
  227. package/dist/monolith/services/MarieGhostService.js.map +1 -1
  228. package/dist/monolith/services/MarieServices.js +102 -0
  229. package/dist/monolith/services/MarieServices.js.map +1 -0
  230. package/dist/monolith/services/MarieTypes.js +2 -0
  231. package/dist/monolith/services/MarieTypes.js.map +1 -0
  232. package/dist/monolith/services/UpdateService.js +47 -49
  233. package/dist/monolith/services/UpdateService.js.map +1 -1
  234. package/dist/prompts.js +11 -5
  235. package/dist/prompts.js.map +1 -1
  236. package/dist/test_prefix_tree.js +9 -9
  237. package/dist/test_prefix_tree.js.map +1 -1
  238. package/package.json +18 -88
  239. package/run_test.js +5 -0
  240. package/.marie_visual_verify_1771225696548/progress_bar_check.txt +0 -1
  241. package/dist/extension.cjs +0 -635
  242. package/dist/extension.js +0 -473
  243. package/dist/extension.js.map +0 -1
  244. package/dist/monolith/adapters/VscodeMarieAdapter.js +0 -81
  245. package/dist/monolith/adapters/VscodeMarieAdapter.js.map +0 -1
  246. package/dist/monolith/domain/joy/JoyTools.js +0 -535
  247. package/dist/monolith/domain/joy/JoyTools.js.map +0 -1
  248. package/dist/monolith/infrastructure/ai/agents/MarieYOLO.js +0 -207
  249. package/dist/monolith/infrastructure/ai/agents/MarieYOLO.js.map +0 -1
  250. package/dist/monolith/infrastructure/ai/core/GhostPort.js +0 -2
  251. package/dist/monolith/infrastructure/ai/core/GhostPort.js.map +0 -1
  252. package/dist/monolith/infrastructure/ai/core/MarieYOLOTypes.js +0 -2
  253. package/dist/monolith/infrastructure/ai/core/MarieYOLOTypes.js.map +0 -1
  254. package/dist/monolith/infrastructure/ai/core/VscodeFileSystemPort.js +0 -33
  255. package/dist/monolith/infrastructure/ai/core/VscodeFileSystemPort.js.map +0 -1
  256. package/dist/monolith/infrastructure/ai/providers/AnthropicProvider.js +0 -148
  257. package/dist/monolith/infrastructure/ai/providers/AnthropicProvider.js.map +0 -1
  258. package/dist/monolith/infrastructure/ai/providers/CerebrasProvider.js +0 -208
  259. package/dist/monolith/infrastructure/ai/providers/CerebrasProvider.js.map +0 -1
  260. package/dist/monolith/plumbing/ui/DecorationService.js +0 -54
  261. package/dist/monolith/plumbing/ui/DecorationService.js.map +0 -1
  262. package/dist/monolith/services/JoyLogService.js +0 -48
  263. package/dist/monolith/services/JoyLogService.js.map +0 -1
  264. package/dist/monolith/services/JoyService.js +0 -209
  265. package/dist/monolith/services/JoyService.js.map +0 -1
  266. package/dist/monolith/services/MarieSCMProvider.js +0 -41
  267. package/dist/monolith/services/MarieSCMProvider.js.map +0 -1
  268. package/dist/test_agent_stream_control_plane.js +0 -170
  269. package/dist/test_agent_stream_control_plane.js.map +0 -1
  270. package/dist/test_strategy_integration.js +0 -114
  271. package/dist/test_strategy_integration.js.map +0 -1
  272. package/dist/test_streaming_fragility.js +0 -191
  273. package/dist/test_streaming_fragility.js.map +0 -1
  274. package/dist/webview-ui/App.js +0 -16
  275. package/dist/webview-ui/App.js.map +0 -1
  276. package/dist/webview-ui/Providers.js +0 -6
  277. package/dist/webview-ui/Providers.js.map +0 -1
  278. package/dist/webview-ui/components/ApprovalPanel.js +0 -8
  279. package/dist/webview-ui/components/ApprovalPanel.js.map +0 -1
  280. package/dist/webview-ui/components/ChatPanel.js +0 -19
  281. package/dist/webview-ui/components/ChatPanel.js.map +0 -1
  282. package/dist/webview-ui/components/Composer.js +0 -19
  283. package/dist/webview-ui/components/Composer.js.map +0 -1
  284. package/dist/webview-ui/components/HeaderBar.js +0 -5
  285. package/dist/webview-ui/components/HeaderBar.js.map +0 -1
  286. package/dist/webview-ui/components/SessionList.js +0 -14
  287. package/dist/webview-ui/components/SessionList.js.map +0 -1
  288. package/dist/webview-ui/context/WebviewStateContext.js +0 -146
  289. package/dist/webview-ui/context/WebviewStateContext.js.map +0 -1
  290. package/dist/webview-ui/main.css +0 -1
  291. package/dist/webview-ui/main.js +0 -108
  292. package/dist/webview-ui/main.js.map +0 -1
  293. package/dist/webview-ui/types.js +0 -2
  294. package/dist/webview-ui/types.js.map +0 -1
  295. package/dist/webview-ui/vscode.js +0 -4
  296. package/dist/webview-ui/vscode.js.map +0 -1
  297. package/lint_output.txt +0 -705
  298. package/lint_output_v2.txt +0 -711
  299. package/marie-coder-0.1.16.vsix +0 -0
@@ -0,0 +1,109 @@
1
+ import * as fs from "fs/promises";
2
+ import * as path from "path";
3
+ import { exec } from "child_process";
4
+ import { promisify } from "util";
5
+ const execAsync = promisify(exec);
6
+ export async function runLint(cwd, command = "npm run lint") {
7
+ try {
8
+ const { stdout } = await execAsync(command, { cwd });
9
+ return []; // Simplified for now but satisfies name
10
+ }
11
+ catch (e) {
12
+ return [];
13
+ }
14
+ }
15
+ export async function runLintOnFile(cwd, filePath) {
16
+ try {
17
+ const { stdout } = await execAsync(`npx eslint "${filePath}" --format json`, { cwd });
18
+ const results = JSON.parse(stdout);
19
+ return results[0]?.messages.map((m) => ({
20
+ file: filePath,
21
+ line: m.line,
22
+ column: m.column,
23
+ message: m.message,
24
+ ruleId: m.ruleId,
25
+ severity: m.severity === 2 ? "error" : "warning"
26
+ })) || [];
27
+ }
28
+ catch (e) {
29
+ return [];
30
+ }
31
+ }
32
+ export function suggestFix(err) {
33
+ if (err.ruleId === "prefer-const")
34
+ return "Replace 'let' with 'const'.";
35
+ return null;
36
+ }
37
+ export async function mend(filePath, errors) {
38
+ const content = await fs.readFile(filePath, "utf-8");
39
+ const lines = content.split("\n");
40
+ let fixed = 0;
41
+ for (const err of [...errors].sort((a, b) => b.line - a.line)) {
42
+ const idx = err.line - 1;
43
+ if (idx < 0 || idx >= lines.length)
44
+ continue;
45
+ if (err.ruleId === "prefer-const") {
46
+ lines[idx] = lines[idx].replace(/\blet\b/, "const");
47
+ fixed++;
48
+ }
49
+ }
50
+ if (fixed > 0)
51
+ await fs.writeFile(filePath, lines.join("\n"));
52
+ return fixed;
53
+ }
54
+ // --- 2. COMPLEXITY & HEALTH (Merged from ComplexityService & CodeHealthService) ---
55
+ export async function analyzeComplexity(filePath) {
56
+ const content = await fs.readFile(filePath, "utf-8");
57
+ const complexity = (content.match(/\b(if|for|while|case|catch|&&|\|\|)\b/g)?.length || 0) + 1;
58
+ return {
59
+ cyclomaticComplexity: complexity,
60
+ clutterLevel: complexity > 20 ? "Toxic" : "Healthy",
61
+ loc: content.split("\n").length,
62
+ suggestions: complexity > 20 ? ["Refactor into smaller functions."] : []
63
+ };
64
+ }
65
+ export async function checkCodeHealth(filePath) {
66
+ const content = await fs.readFile(filePath, "utf-8");
67
+ const lines = content.split("\n");
68
+ const todos = (content.match(/TODO|FIXME/g) || []).length;
69
+ const anys = (content.match(/: any|as any/g) || []).length;
70
+ let joyScore = 100 - (todos * 2) - (anys * 5) - (lines.length > 300 ? 10 : 0);
71
+ return {
72
+ filePath,
73
+ joyScore: Math.max(0, joyScore),
74
+ todos,
75
+ anys,
76
+ zoningHealth: { isBackflowPresent: false, illegalImports: [] }
77
+ };
78
+ }
79
+ // --- 3. DISCOVERY & DEPENDENCIES (Merged from DiscoveryService & DependencyService) ---
80
+ export async function getFolderTree(folderPath, depth = 3) {
81
+ const entries = await fs.readdir(folderPath, { withFileTypes: true });
82
+ let tree = `# Tree: ${path.basename(folderPath)}\n`;
83
+ for (const e of entries.filter(e => !e.name.startsWith("."))) {
84
+ tree += `${e.isDirectory() ? "📁" : "📄"} ${e.name}\n`;
85
+ }
86
+ return tree;
87
+ }
88
+ export async function getFileNetwork(filePath) {
89
+ const content = await fs.readFile(filePath, "utf-8");
90
+ const imports = content.match(/import\s+.*\s+from\s+['"](.*)['"]/g) || [];
91
+ const exports = content.match(/export\s+(const|class|function|type|interface|enum)\s+(\w+)/g) || [];
92
+ let res = `# Network: ${path.basename(filePath)}\n\n## Imports\n`;
93
+ imports.forEach(i => res += `- \`${i}\`\n`);
94
+ res += `\n## Exports\n`;
95
+ exports.forEach(e => res += `- \`${e}\`\n`);
96
+ return res;
97
+ }
98
+ // --- 4. SENTINEL & GUARDRAILS (Merged from MarieSentinelService & QualityGuardrailService) ---
99
+ export async function evaluateQualityGuardrail(cwd, filePath) {
100
+ const errors = await runLintOnFile(cwd, filePath);
101
+ const health = await checkCodeHealth(filePath);
102
+ const complexity = await analyzeComplexity(filePath);
103
+ const passed = errors.length === 0 && complexity.clutterLevel !== "Toxic";
104
+ return { passed, score: health.joyScore, errors: errors.length };
105
+ }
106
+ export async function audit(workingDir) {
107
+ return { passed: true, entropy: 0 };
108
+ }
109
+ //# sourceMappingURL=PlumbingAnalysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlumbingAnalysis.js","sourceRoot":"","sources":["../../../src/monolith/plumbing/PlumbingAnalysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ import * as path from "path";
2
+ import * as fs from "fs/promises";
3
+ import * as os from "os";
4
+ import { exec, spawn } from "child_process";
5
+ import { promisify } from "util";
6
+ import { getErrorMessage, getWorkspaceRoot } from "./utils/PlumbingCore.js";
7
+ import { getCapabilities } from "../infrastructure/config/ConfigService.js";
8
+ import { register } from "./terminal/ProcessRegistry.js";
9
+ const execAsync = promisify(exec);
10
+ const textDecoder = new TextDecoder();
11
+ const textEncoder = new TextEncoder();
12
+ // --- 1. PATH RESOLUTION (Merged from PathResolver) ---
13
+ /**
14
+ * Resolves a file path to an absolute filesystem path.
15
+ * Handles absolute paths, workspace-relative paths, and home directory (~) expansion.
16
+ */
17
+ export function resolvePath(p) {
18
+ let resolvedPath = p;
19
+ if (p.startsWith("~")) {
20
+ resolvedPath = path.join(os.homedir(), p.slice(1));
21
+ }
22
+ if (path.isAbsolute(resolvedPath)) {
23
+ return path.normalize(resolvedPath);
24
+ }
25
+ const workspaceRoot = getWorkspaceRoot();
26
+ if (workspaceRoot) {
27
+ return path.join(workspaceRoot, resolvedPath);
28
+ }
29
+ return path.normalize(resolvedPath);
30
+ }
31
+ // --- 2. FILESYSTEM OPERATIONS (Merged from FileService) ---
32
+ const backups = new Map();
33
+ export async function readFile(filePath, startLine, endLine, signal) {
34
+ if (signal?.aborted)
35
+ throw new Error(`AbortError: Read of ${filePath} aborted.`);
36
+ const fullPath = resolvePath(filePath);
37
+ try {
38
+ const buffer = await fs.readFile(fullPath);
39
+ if (signal?.aborted)
40
+ throw new Error("Aborted");
41
+ const text = textDecoder.decode(buffer);
42
+ if (startLine !== undefined || endLine !== undefined) {
43
+ const lines = text.split("\n");
44
+ const start = startLine !== undefined ? Math.max(0, startLine - 1) : 0;
45
+ const end = endLine !== undefined ? Math.min(lines.length, endLine) : lines.length;
46
+ return lines.slice(start, end).join("\n");
47
+ }
48
+ return text;
49
+ }
50
+ catch (error) {
51
+ throw new Error(`Failed to read file ${filePath}: ${error}`);
52
+ }
53
+ }
54
+ export async function writeFile(filePath, content, signal, onProgress) {
55
+ if (signal?.aborted)
56
+ throw new Error("Aborted");
57
+ const fullPath = resolvePath(filePath);
58
+ try {
59
+ const parentDir = path.dirname(fullPath);
60
+ await fs.mkdir(parentDir, { recursive: true });
61
+ // ATOMIC WRITE
62
+ const tmpPath = `${fullPath}.tmp.${Math.random().toString(36).substring(2, 9)}`;
63
+ const encoded = textEncoder.encode(content);
64
+ await fs.writeFile(tmpPath, encoded);
65
+ onProgress?.(encoded.length, encoded.length);
66
+ if (signal?.aborted) {
67
+ await fs.unlink(tmpPath).catch(() => { });
68
+ throw new Error("Aborted");
69
+ }
70
+ await fs.rename(tmpPath, fullPath);
71
+ }
72
+ catch (error) {
73
+ throw new Error(`Failed to write file ${filePath}: ${error}`);
74
+ }
75
+ }
76
+ export async function deleteFile(filePath) {
77
+ const fullPath = resolvePath(filePath);
78
+ await fs.rm(fullPath, { recursive: true, force: true });
79
+ }
80
+ export async function listFiles(dirPath) {
81
+ const fullPath = resolvePath(dirPath);
82
+ const entries = await fs.readdir(fullPath);
83
+ const results = await Promise.all(entries.map(async (name) => {
84
+ const entryPath = path.join(fullPath, name);
85
+ try {
86
+ const stat = await fs.stat(entryPath);
87
+ return `${stat.isDirectory() ? "DIR " : "FILE"} ${name}${!stat.isDirectory() ? ` (${(stat.size / 1024).toFixed(1)} KB)` : ""}`;
88
+ }
89
+ catch {
90
+ return "";
91
+ }
92
+ }));
93
+ return results.filter(Boolean).join("\n") || "Directory is empty.";
94
+ }
95
+ // --- 3. GIT OPERATIONS (Merged from GitService) ---
96
+ export async function gitStatus(cwd) {
97
+ try {
98
+ const { stdout } = await execAsync("git status --short", { cwd });
99
+ return stdout || "Clean workspace.";
100
+ }
101
+ catch (error) {
102
+ return `Git error: ${getErrorMessage(error)}`;
103
+ }
104
+ }
105
+ export async function getStagedDiff(cwd) {
106
+ const { stdout } = await execAsync("git diff --cached", { cwd });
107
+ return stdout || "No staged changes.";
108
+ }
109
+ export async function getUnstagedDiff(cwd) {
110
+ const { stdout } = await execAsync("git diff", { cwd });
111
+ return stdout || "No unstaged changes.";
112
+ }
113
+ export async function appendFile(filePath, content, signal, onProgress) {
114
+ if (signal?.aborted)
115
+ throw new Error("Aborted");
116
+ const fullPath = resolvePath(filePath);
117
+ try {
118
+ const buffer = Buffer.from(content, "utf-8");
119
+ await fs.appendFile(fullPath, buffer);
120
+ onProgress?.(buffer.length, buffer.length);
121
+ }
122
+ catch (error) {
123
+ throw new Error(`Failed to append to file ${filePath}: ${error}`);
124
+ }
125
+ }
126
+ // --- 4. TERMINAL OPERATIONS (Merged from TerminalService) ---
127
+ const MAX_OUTPUT_LENGTH = 10000;
128
+ const ANSI_REGEX = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
129
+ const stripAnsi = (t) => t.replace(ANSI_REGEX, "");
130
+ export async function runCommand(command, signal) {
131
+ if (!getCapabilities().includes("SHELL"))
132
+ return "Capability Breach: Shell disabled. 🛑";
133
+ if (/[;&|`$(){}]/.test(command))
134
+ return "Security Error: Suspicious characters detected. 🛑";
135
+ const rootPath = getWorkspaceRoot();
136
+ let childProcess;
137
+ const spawnPromise = new Promise((resolve, reject) => {
138
+ childProcess = spawn(command, { cwd: rootPath, shell: true, stdio: ["ignore", "pipe", "pipe"], detached: true });
139
+ register(childProcess);
140
+ let stdout = "", stderr = "";
141
+ childProcess.stdout?.on("data", (d) => stdout += d.toString());
142
+ childProcess.stderr?.on("data", (d) => stderr += d.toString());
143
+ childProcess.on("close", (code) => resolve({ stdout, stderr, code }));
144
+ childProcess.on("error", (err) => reject(err));
145
+ });
146
+ const { stdout, stderr, code } = await spawnPromise;
147
+ if (code !== 0)
148
+ return `Failed (${code}):\n${stripAnsi(stderr).slice(-MAX_OUTPUT_LENGTH)}`;
149
+ return `Success. ✨\n\n**Output:**\n\`\`\`\n${stripAnsi(stdout).slice(-MAX_OUTPUT_LENGTH)}\n\`\`\``;
150
+ }
151
+ // --- 5. PLANETARY HEALTH (Merged from HealthService) ---
152
+ export async function checkPlanetaryHealth() {
153
+ const deps = ["rg", "fd", "npm"];
154
+ const results = await Promise.all(deps.map(async (d) => {
155
+ try {
156
+ await execAsync(`${d} --version`, { timeout: 2000 });
157
+ return true;
158
+ }
159
+ catch {
160
+ return false;
161
+ }
162
+ }));
163
+ const missing = deps.filter((_, i) => !results[i]);
164
+ if (missing.length)
165
+ console.warn(`Stability Warning: Missing ${missing.join(", ")}`);
166
+ else
167
+ console.log("[PlumbingSystem] Planetary health verified. 🌍");
168
+ }
169
+ //# sourceMappingURL=PlumbingSystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlumbingSystem.js","sourceRoot":"","sources":["../../../src/monolith/plumbing/PlumbingSystem.ts"],"names":[],"mappings":"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"}
@@ -1,43 +1,39 @@
1
1
  import * as fs from "fs/promises";
2
2
  /**
3
3
  * Quantifies "Clutter" and code quality to help Marie maintain a high-integrity Garden.
4
+ * Heuristically analyzes a file for complexity.
4
5
  */
5
- export class ComplexityService {
6
- /**
7
- * Heuristically analyzes a file for complexity.
8
- */
9
- static async analyze(filePath) {
10
- try {
11
- const content = await fs.readFile(filePath, "utf-8");
12
- const lines = content.split("\n");
13
- const loc = lines.length;
14
- // Simple heuristic for cyclomatic complexity: count control flow keywords
15
- const controlFlowMatch = content.match(/\b(if|else if|for|while|case|catch|&&|\|\||!=|==|!==|===)\b/g);
16
- const complexity = (controlFlowMatch?.length || 0) + 1;
17
- let clutterLevel = "Clean";
18
- const suggestions = [];
19
- if (complexity > 20 || loc > 300) {
20
- clutterLevel = "Toxic";
21
- suggestions.push("This module is significantly cluttered. Consider decomposing into smaller 'Sprouts'.");
22
- }
23
- else if (complexity > 10 || loc > 150) {
24
- clutterLevel = "Tangled";
25
- suggestions.push("The logic is starting to tangle. A refactor ('Bloom') is recommended.");
26
- }
27
- else if (complexity > 5) {
28
- clutterLevel = "Sparking";
29
- suggestions.push("The code is healthy but keep an eye on control flow depth.");
30
- }
31
- return {
32
- cyclomaticComplexity: complexity,
33
- loc,
34
- clutterLevel,
35
- suggestions,
36
- };
6
+ export async function analyzeComplexity(filePath) {
7
+ try {
8
+ const content = await fs.readFile(filePath, "utf-8");
9
+ const lines = content.split("\n");
10
+ const loc = lines.length;
11
+ // Simple heuristic for cyclomatic complexity: count control flow keywords
12
+ const controlFlowMatch = content.match(/\b(if|else if|for|while|case|catch|&&|\|\||!=|==|!==|===)\b/g);
13
+ const complexity = (controlFlowMatch?.length || 0) + 1;
14
+ let clutterLevel = "Clean";
15
+ const suggestions = [];
16
+ if (complexity > 20 || loc > 300) {
17
+ clutterLevel = "Toxic";
18
+ suggestions.push("This module is significantly cluttered. Consider decomposing into smaller 'Sprouts'.");
37
19
  }
38
- catch (error) {
39
- throw new Error(`Failed to analyze complexity for ${filePath}: ${error}`);
20
+ else if (complexity > 10 || loc > 150) {
21
+ clutterLevel = "Tangled";
22
+ suggestions.push("The logic is starting to tangle. A refactor ('Bloom') is recommended.");
40
23
  }
24
+ else if (complexity > 5) {
25
+ clutterLevel = "Sparking";
26
+ suggestions.push("The code is healthy but keep an eye on control flow depth.");
27
+ }
28
+ return {
29
+ cyclomaticComplexity: complexity,
30
+ loc,
31
+ clutterLevel,
32
+ suggestions,
33
+ };
34
+ }
35
+ catch (error) {
36
+ throw new Error(`Failed to analyze complexity for ${filePath}: ${error}`);
41
37
  }
42
38
  }
43
39
  //# sourceMappingURL=ComplexityService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ComplexityService.js","sourceRoot":"","sources":["../../../../src/monolith/plumbing/analysis/ComplexityService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AASlC;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAC5B;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAgB;QAC1C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;YAEzB,0EAA0E;YAC1E,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CACpC,8DAA8D,CAC/D,CAAC;YACF,MAAM,UAAU,GAAG,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAEvD,IAAI,YAAY,GAAsC,OAAO,CAAC;YAC9D,MAAM,WAAW,GAAa,EAAE,CAAC;YAEjC,IAAI,UAAU,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;gBACjC,YAAY,GAAG,OAAO,CAAC;gBACvB,WAAW,CAAC,IAAI,CACd,sFAAsF,CACvF,CAAC;YACJ,CAAC;iBAAM,IAAI,UAAU,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;gBACxC,YAAY,GAAG,SAAS,CAAC;gBACzB,WAAW,CAAC,IAAI,CACd,uEAAuE,CACxE,CAAC;YACJ,CAAC;iBAAM,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBAC1B,YAAY,GAAG,UAAU,CAAC;gBAC1B,WAAW,CAAC,IAAI,CACd,4DAA4D,CAC7D,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,oBAAoB,EAAE,UAAU;gBAChC,GAAG;gBACH,YAAY;gBACZ,WAAW;aACZ,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"ComplexityService.js","sourceRoot":"","sources":["../../../../src/monolith/plumbing/analysis/ComplexityService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AASlC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;QAEzB,0EAA0E;QAC1E,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CACpC,8DAA8D,CAC/D,CAAC;QACF,MAAM,UAAU,GAAG,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAEvD,IAAI,YAAY,GAAsC,OAAO,CAAC;QAC9D,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,IAAI,UAAU,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;YACjC,YAAY,GAAG,OAAO,CAAC;YACvB,WAAW,CAAC,IAAI,CACd,sFAAsF,CACvF,CAAC;QACJ,CAAC;aAAM,IAAI,UAAU,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;YACxC,YAAY,GAAG,SAAS,CAAC;YACzB,WAAW,CAAC,IAAI,CACd,uEAAuE,CACxE,CAAC;QACJ,CAAC;aAAM,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YAC1B,YAAY,GAAG,UAAU,CAAC;YAC1B,WAAW,CAAC,IAAI,CACd,4DAA4D,CAC7D,CAAC;QACJ,CAAC;QAED,OAAO;YACL,oBAAoB,EAAE,UAAU;YAChC,GAAG;YACH,YAAY;YACZ,WAAW;SACZ,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC"}
@@ -1,51 +1,62 @@
1
1
  import { readFile } from "../filesystem/FileService.js";
2
- export class DependencyService {
3
- /**
4
- * Extracts imports and exports from a file to map its structural network.
5
- */
6
- static async getFileNetwork(filePath) {
7
- try {
8
- const content = await readFile(filePath);
9
- // Heuristic regex patterns for ESM imports and exports
10
- const importRegex = /import\s+(?:.*?\s+from\s+)?['"](.*?)['"]/g;
11
- const exportRegex = /export\s+(?:const|class|function|type|interface|enum|default)\s+(\w+)/g;
12
- const imports = [];
13
- const exports = [];
14
- let match;
15
- while ((match = importRegex.exec(content)) !== null) {
16
- imports.push(match[1]);
17
- }
18
- while ((match = exportRegex.exec(content)) !== null) {
19
- exports.push(match[1]);
20
- }
21
- let result = `# File Network: ${filePath.split("/").pop()}\n\n`;
22
- result += `## 📥 Imports (Dependencies)\n`;
23
- if (imports.length > 0) {
24
- imports.forEach((i) => (result += `- \`${i}\`\n`));
25
- }
26
- else {
27
- result += `*None detected (Self-contained logic)*\n`;
28
- }
29
- result += `\n## 📤 Exports (Offerings)\n`;
30
- if (exports.length > 0) {
31
- exports.forEach((e) => (result += `- \`${e}\`\n`));
32
- }
33
- else {
34
- result += `*None detected (Internal consumer)*\n`;
35
- }
36
- return result;
2
+ /**
3
+ * Extracts imports and exports from a file to map its structural network.
4
+ */
5
+ export async function getFileNetwork(filePath) {
6
+ try {
7
+ const content = await readFile(filePath);
8
+ // Heuristic regex patterns for ESM imports and exports
9
+ const importRegex = /import\s+(?:.*?\s+from\s+)?['"](.*?)['"]/g;
10
+ const exportRegex = /export\s+(?:const|class|function|type|interface|enum|default)\s+(\w+)/g;
11
+ const imports = [];
12
+ const exports = [];
13
+ let match;
14
+ while ((match = importRegex.exec(content)) !== null) {
15
+ imports.push(match[1]);
37
16
  }
38
- catch (error) {
39
- throw new Error(`Failed to map network for ${filePath}: ${error}`);
17
+ while ((match = exportRegex.exec(content)) !== null) {
18
+ exports.push(match[1]);
40
19
  }
20
+ let result = `# File Network: ${filePath.split("/").pop()}\n\n`;
21
+ result += `## 📥 Imports (Dependencies)\n`;
22
+ if (imports.length > 0) {
23
+ imports.forEach((i) => (result += `- \`${i}\`\n`));
24
+ }
25
+ else {
26
+ result += `*None detected (Self-contained logic)*\n`;
27
+ }
28
+ result += `\n## 📤 Exports (Offerings)\n`;
29
+ if (exports.length > 0) {
30
+ exports.forEach((e) => (result += `- \`${e}\`\n`));
31
+ }
32
+ else {
33
+ result += `*None detected (Internal consumer)*\n`;
34
+ }
35
+ return result;
41
36
  }
42
- /**
43
- * STABILITY: Circular Dependency Guard
44
- * Detects if two files depend on each other, which can cause initialization death spirals.
45
- */
46
- static async checkCircularity(fileA, fileB) {
47
- // Placeholder for future graph analysis
48
- return false;
37
+ catch (error) {
38
+ throw new Error(`Failed to map network for ${filePath}: ${error}`);
49
39
  }
50
40
  }
41
+ /**
42
+ * STABILITY: Circular Dependency Guard
43
+ * Detects if two files depend on each other, which can cause initialization death spirals.
44
+ */
45
+ export async function checkCircularity(fileA, fileB) {
46
+ const contentA = await readFile(fileA);
47
+ const contentB = await readFile(fileB);
48
+ const nameA = fileA
49
+ .split("/")
50
+ .pop()
51
+ ?.replace(/\.[^.]+$/, "");
52
+ const nameB = fileB
53
+ .split("/")
54
+ .pop()
55
+ ?.replace(/\.[^.]+$/, "");
56
+ if (!nameA || !nameB)
57
+ return false;
58
+ const importsA = contentA.includes(nameB);
59
+ const importsB = contentB.includes(nameA);
60
+ return importsA && importsB;
61
+ }
51
62
  //# sourceMappingURL=DependencyService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DependencyService.js","sourceRoot":"","sources":["../../../../src/monolith/plumbing/analysis/DependencyService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,MAAM,OAAO,iBAAiB;IAC5B;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,QAAgB;QACjD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEzC,uDAAuD;YACvD,MAAM,WAAW,GAAG,2CAA2C,CAAC;YAChE,MAAM,WAAW,GACf,wEAAwE,CAAC;YAE3E,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;YAE7B,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;YACD,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;YAED,IAAI,MAAM,GAAG,mBAAmB,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC;YAEhE,MAAM,IAAI,gCAAgC,CAAC;YAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,0CAA0C,CAAC;YACvD,CAAC;YAED,MAAM,IAAI,+BAA+B,CAAC;YAC1C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,uCAAuC,CAAC;YACpD,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAClC,KAAa,EACb,KAAa;QAEb,wCAAwC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
1
+ {"version":3,"file":"DependencyService.js","sourceRoot":"","sources":["../../../../src/monolith/plumbing/analysis/DependencyService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,uDAAuD;QACvD,MAAM,WAAW,GAAG,2CAA2C,CAAC;QAChE,MAAM,WAAW,GACf,wEAAwE,CAAC;QAE3E,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,IAAI,KAAK,CAAC;QACV,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,MAAM,GAAG,mBAAmB,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC;QAEhE,MAAM,IAAI,gCAAgC,CAAC;QAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,0CAA0C,CAAC;QACvD,CAAC;QAED,MAAM,IAAI,+BAA+B,CAAC;QAC1C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,uCAAuC,CAAC;QACpD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAa,EACb,KAAa;IAEb,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEvC,MAAM,KAAK,GAAG,KAAK;SAChB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,EAAE;QACN,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,KAAK;SAChB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,EAAE;QACN,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAE5B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEnC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE1C,OAAO,QAAQ,IAAI,QAAQ,CAAC;AAC9B,CAAC"}
@@ -1,49 +1,47 @@
1
1
  import * as fs from "fs/promises";
2
2
  import * as path from "path";
3
- export class DiscoveryService {
4
- /**
5
- * Returns a recursive, tree-like overview of a folder's structure.
6
- */
7
- static async getFolderTree(folderPath, maxDepth = 3) {
8
- try {
9
- const rootName = path.basename(folderPath);
10
- let result = `# Folder Structure: ${rootName}\n\n`;
11
- result += await this.generateTree(folderPath, "", 0, maxDepth);
12
- return result;
13
- }
14
- catch (error) {
15
- throw new Error(`Failed to generate folder tree for ${folderPath}: ${error}`);
16
- }
3
+ /**
4
+ * Returns a recursive, tree-like overview of a folder's structure.
5
+ */
6
+ export async function getFolderTree(folderPath, maxDepth = 3) {
7
+ try {
8
+ const rootName = path.basename(folderPath);
9
+ let result = `# Folder Structure: ${rootName}\n\n`;
10
+ result += await generateTree(folderPath, "", 0, maxDepth);
11
+ return result;
17
12
  }
18
- static async generateTree(dir, indent, currentDepth, maxDepth) {
19
- if (currentDepth > maxDepth)
20
- return "";
21
- let result = "";
22
- const entries = await fs.readdir(dir, { withFileTypes: true });
23
- // Sort: directories first, then files
24
- const sortedEntries = entries.sort((a, b) => {
25
- if (a.isDirectory() && !b.isDirectory())
26
- return -1;
27
- if (!a.isDirectory() && b.isDirectory())
28
- return 1;
29
- return a.name.localeCompare(b.name);
30
- });
31
- // Filter first to get accurate isLast calculation
32
- const visibleEntries = sortedEntries.filter((e) => !e.name.startsWith(".") &&
33
- e.name !== "node_modules" &&
34
- e.name !== "dist" &&
35
- e.name !== "out");
36
- for (let i = 0; i < visibleEntries.length; i++) {
37
- const entry = visibleEntries[i];
38
- const isLast = i === visibleEntries.length - 1;
39
- const prefix = isLast ? "└── " : "├── ";
40
- const nextIndent = indent + (isLast ? " " : "│ ");
41
- result += `${indent}${prefix}${entry.name}${entry.isDirectory() ? "/" : ""}\n`;
42
- if (entry.isDirectory()) {
43
- result += await this.generateTree(path.join(dir, entry.name), nextIndent, currentDepth + 1, maxDepth);
44
- }
13
+ catch (error) {
14
+ throw new Error(`Failed to generate folder tree for ${folderPath}: ${error}`);
15
+ }
16
+ }
17
+ async function generateTree(dir, indent, currentDepth, maxDepth) {
18
+ if (currentDepth > maxDepth)
19
+ return "";
20
+ let result = "";
21
+ const entries = await fs.readdir(dir, { withFileTypes: true });
22
+ // Sort: directories first, then files
23
+ const sortedEntries = entries.sort((a, b) => {
24
+ if (a.isDirectory() && !b.isDirectory())
25
+ return -1;
26
+ if (!a.isDirectory() && b.isDirectory())
27
+ return 1;
28
+ return a.name.localeCompare(b.name);
29
+ });
30
+ // Filter first to get accurate isLast calculation
31
+ const visibleEntries = sortedEntries.filter((e) => !e.name.startsWith(".") &&
32
+ e.name !== "node_modules" &&
33
+ e.name !== "dist" &&
34
+ e.name !== "out");
35
+ for (let i = 0; i < visibleEntries.length; i++) {
36
+ const entry = visibleEntries[i];
37
+ const isLast = i === visibleEntries.length - 1;
38
+ const prefix = isLast ? "└── " : "├── ";
39
+ const nextIndent = indent + (isLast ? " " : "│ ");
40
+ result += `${indent}${prefix}${entry.name}${entry.isDirectory() ? "/" : ""}\n`;
41
+ if (entry.isDirectory()) {
42
+ result += await generateTree(path.join(dir, entry.name), nextIndent, currentDepth + 1, maxDepth);
45
43
  }
46
- return result;
47
44
  }
45
+ return result;
48
46
  }
49
47
  //# sourceMappingURL=DiscoveryService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DiscoveryService.js","sourceRoot":"","sources":["../../../../src/monolith/plumbing/analysis/DiscoveryService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DiscoveryService.js","sourceRoot":"","sources":["../../../../src/monolith/plumbing/analysis/DiscoveryService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAkB,EAClB,WAAmB,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,MAAM,GAAG,uBAAuB,QAAQ,MAAM,CAAC;QACnD,MAAM,IAAI,MAAM,YAAY,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,sCAAsC,UAAU,KAAK,KAAK,EAAE,CAC7D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,GAAW,EACX,MAAc,EACd,YAAoB,EACpB,QAAgB;IAEhB,IAAI,YAAY,GAAG,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEvC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,sCAAsC;IACtC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1C,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,CAAC,CAAC;QAClD,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,kDAAkD;IAClD,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CACzC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACvB,CAAC,CAAC,IAAI,KAAK,cAAc;QACzB,CAAC,CAAC,IAAI,KAAK,MAAM;QACjB,CAAC,CAAC,IAAI,KAAK,KAAK,CACnB,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,CAAC,KAAK,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACxC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAEvD,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QAE/E,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,MAAM,YAAY,CAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAC1B,UAAU,EACV,YAAY,GAAG,CAAC,EAChB,QAAQ,CACT,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}