@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
@@ -1,38 +1,35 @@
1
- import * as vscode from "vscode";
2
1
  import { exec } from "child_process";
3
2
  import { promisify } from "util";
4
3
  const execAsync = promisify(exec);
5
- export class HealthService {
6
- static async checkDependencies() {
7
- const diagnostics = [];
8
- // 1. Check ripgrep (rg)
9
- try {
10
- // Stability check: Set shell timeout to prevent hanging activation
11
- await execAsync("rg --version", { timeout: 5000 });
12
- }
13
- catch (e) {
14
- diagnostics.push("ripgrep (rg) is missing. Global search will be slow or disabled.");
15
- }
16
- // 2. Check fd
17
- try {
18
- await execAsync("fd --version", { timeout: 5000 });
19
- }
20
- catch (e) {
21
- diagnostics.push("fd is missing. File discovery will be slow.");
22
- }
23
- // 3. Check npm
24
- try {
25
- await execAsync("npm --version", { timeout: 5000 });
26
- }
27
- catch (e) {
28
- diagnostics.push("npm is missing. Building projects might fail.");
29
- }
30
- if (diagnostics.length > 0) {
31
- vscode.window.showWarningMessage(`Marie Stability Warning: ${diagnostics.join(" ")}`);
32
- }
33
- else {
34
- console.log("[MarieHealth] All planetary dependencies verified. 🌍");
35
- }
4
+ export async function checkDependencies() {
5
+ const diagnostics = [];
6
+ // 1. Check ripgrep (rg)
7
+ try {
8
+ // Stability check: Set shell timeout to prevent hanging activation
9
+ await execAsync("rg --version", { timeout: 5000 });
10
+ }
11
+ catch (e) {
12
+ diagnostics.push("ripgrep (rg) is missing. Global search will be slow or disabled.");
13
+ }
14
+ // 2. Check fd
15
+ try {
16
+ await execAsync("fd --version", { timeout: 5000 });
17
+ }
18
+ catch (e) {
19
+ diagnostics.push("fd is missing. File discovery will be slow.");
20
+ }
21
+ // 3. Check npm
22
+ try {
23
+ await execAsync("npm --version", { timeout: 5000 });
24
+ }
25
+ catch (e) {
26
+ diagnostics.push("npm is missing. Building projects might fail.");
27
+ }
28
+ if (diagnostics.length > 0) {
29
+ console.warn(`Marie Stability Warning: ${diagnostics.join(" ")}`);
30
+ }
31
+ else {
32
+ console.log("[MarieHealth] All planetary dependencies verified. 🌍");
36
33
  }
37
34
  }
38
35
  //# sourceMappingURL=HealthService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HealthService.js","sourceRoot":"","sources":["../../../src/monolith/services/HealthService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,OAAO,aAAa;IACjB,MAAM,CAAC,KAAK,CAAC,iBAAiB;QACnC,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,wBAAwB;QACxB,IAAI,CAAC;YACH,mEAAmE;YACnE,MAAM,SAAS,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,IAAI,CACd,kEAAkE,CACnE,CAAC;QACJ,CAAC;QAED,cAAc;QACd,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAClE,CAAC;QAED,eAAe;QACf,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAC9B,4BAA4B,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACpD,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"HealthService.js","sourceRoot":"","sources":["../../../src/monolith/services/HealthService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,wBAAwB;IACxB,IAAI,CAAC;QACH,mEAAmE;QACnE,MAAM,SAAS,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,WAAW,CAAC,IAAI,CACd,kEAAkE,CACnE,CAAC;IACJ,CAAC;IAED,cAAc;IACd,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,WAAW,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAClE,CAAC;IAED,eAAe;IACf,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,WAAW,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,4BAA4B,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACvE,CAAC;AACH,CAAC"}
@@ -1,13 +1,21 @@
1
- import * as vscode from "vscode";
2
- import { proposeReorganization, executeRestoration, scaffoldZoneAbstractions, sowFeature, proposeClustering, executeGenesisRitual, isProjectJoyful, ensureJoyZoningFolders, } from "../infrastructure/joy/JoyTools.js";
3
- import { MarieSentinelService } from "../plumbing/analysis/MarieSentinelService.js";
1
+ import { ensureJoyZoningFolders, executeGenesisRitual, scaffoldZoneAbstractions, sowFeature, synthesizeZoneManuals, isProjectJoyful, proposeReorganization, proposeClustering, generateJoyDashboard, generateTidyChecklist, executeRestoration, } from "../infrastructure/joy/JoyTools.js";
2
+ /**
3
+ * JoyAutomationService - Real implementation for automation rituals.
4
+ * Ported from CLI variant to be the unified automation service.
5
+ */
4
6
  export class JoyAutomationService {
5
- context;
6
- joyService;
7
+ workingDir;
8
+ fs;
9
+ achievementCallback;
7
10
  currentRun;
8
- constructor(context, joyService) {
9
- this.context = context;
10
- this.joyService = joyService;
11
+ constructor(workingDir, fs, achievementCallback) {
12
+ this.workingDir = workingDir;
13
+ this.fs = fs;
14
+ this.achievementCallback = achievementCallback;
15
+ }
16
+ async ensureWorkingDir() {
17
+ const fs = await import("fs/promises");
18
+ await fs.mkdir(this.workingDir, { recursive: true });
11
19
  }
12
20
  setCurrentRun(run) {
13
21
  this.currentRun = run;
@@ -15,117 +23,72 @@ export class JoyAutomationService {
15
23
  getCurrentRun() {
16
24
  return this.currentRun;
17
25
  }
26
+ async addAchievement(msg, points) {
27
+ if (this.achievementCallback) {
28
+ await this.achievementCallback(msg, points);
29
+ }
30
+ else {
31
+ console.log(`[Achievement] ${msg} (+${points} XP)`);
32
+ }
33
+ }
18
34
  async triggerGenesis() {
19
- const root = vscode.workspace.workspaceFolders?.[0].uri.fsPath;
20
- if (!root)
21
- return "No workspace detected.";
22
- const result = await executeGenesisRitual(root);
23
- await this.joyService.addAchievement(`Performed the Genesis Ritual. Project reborn in JOY. ✨`, 100);
35
+ await this.ensureWorkingDir();
36
+ const result = await executeGenesisRitual(this.workingDir);
37
+ await this.addAchievement("Performed Genesis Ritual. Project reborn in JOY. ✨", 50);
24
38
  return result;
25
39
  }
26
40
  async sowJoyFeature(name, intent) {
27
- const root = vscode.workspace.workspaceFolders?.[0].uri.fsPath;
28
- if (!root)
29
- return "No workspace detected.";
30
- const result = await sowFeature(root, name, intent);
31
- await this.joyService.addAchievement(`Sowed the seeds of '${name}' across the garden. 🌱`, 25);
41
+ await this.ensureWorkingDir();
42
+ const result = await sowFeature(this.workingDir, name, intent);
43
+ await this.addAchievement(`Sowed feature '${name}' into the garden. 🌱`, 10);
32
44
  return result;
33
45
  }
34
- heartbeatTimer;
35
46
  async performGardenPulse() {
36
- const root = vscode.workspace.workspaceFolders?.[0].uri.fsPath;
37
- if (!root)
38
- return "No workspace folder detected.";
47
+ await this.ensureWorkingDir();
39
48
  let finalReport = "";
40
49
  try {
41
- // 🛡️ Marie Sentinel v2 - Serious Architectural Guardian
42
- const report = await MarieSentinelService.audit(root);
43
- finalReport += `🛡️ **Sentinel Scan Complete**: ${report.stability} (Entropy: ${report.entropyScore})\n`;
44
- if (report.zoneViolations.length > 0) {
45
- finalReport += `- Found ${report.zoneViolations.length} architectural violations.\n`;
46
- }
47
- else {
48
- finalReport += `- ✅ No cross-zone contamination detected. Domain remains pure.\n`;
49
- }
50
- const joyful = await isProjectJoyful(root);
51
- await ensureJoyZoningFolders(root);
52
- const scaffolded = await scaffoldZoneAbstractions(root);
53
- const proposals = await proposeReorganization(root);
54
- const clustering = await proposeClustering(root);
50
+ const joyful = await isProjectJoyful(this.workingDir);
51
+ await ensureJoyZoningFolders(this.workingDir);
52
+ const scaffolded = await scaffoldZoneAbstractions(this.workingDir);
53
+ finalReport += scaffolded;
54
+ const proposals = await proposeReorganization(this.workingDir);
55
+ const clustering = await proposeClustering(this.workingDir);
56
+ const manuals = await synthesizeZoneManuals(this.workingDir);
55
57
  if (!joyful) {
56
- finalReport += `\n- ⚠️ **Architectural Void**: Project has not yet embraced the JOY structure.`;
58
+ finalReport += `\n- ⚠️ **Architectural Void**: This project has not yet embraced the JOY structure. Use the Genesis Ritual to begin your journey.`;
57
59
  }
58
- if (proposals.length > 0) {
60
+ if (proposals.length > 0)
59
61
  finalReport += `\n- ${proposals.length} structural drifts detected.`;
60
- const { ConfigService } = await import("../infrastructure/config/ConfigService.js");
61
- const autoRepair = ConfigService.getAutoRepair();
62
- if (proposals.length > 5 || report.entropyScore > 10) {
63
- if (autoRepair) {
64
- await this.joyService.addAchievement("Sentinel Auto-Repair initiated. 🛠️", 10);
65
- const repairResult = await this.executeAutonomousRestoration();
66
- finalReport += `\n- 🛠️ **Auto-Repair Executed**: ${repairResult}`;
67
- }
68
- }
69
- }
70
- await this.scoutAchievements();
62
+ if (clustering.length > 0)
63
+ finalReport += `\n- ${clustering.length} zones ripe for clustering.`;
64
+ await this.addAchievement("Performed garden pulse. 🌸", 5);
65
+ return `${finalReport}\n${manuals}\n\nThe garden continues to evolve in harmony. ✨`;
71
66
  }
72
67
  catch (e) {
73
- finalReport += `\n- ❌ **Pulse Interrupted**: ${e.message}`;
68
+ return `\n- ❌ **Pulse Interrupted**: A structural error occurred during synthesis: ${e.message}`;
74
69
  }
75
- return `${finalReport}\n\nThe system remains under Sentinel protection. 🛡️`;
76
70
  }
77
- startAutonomousHeartbeat(intervalMs = 300000) {
78
- if (this.heartbeatTimer)
79
- return;
80
- this.heartbeatTimer = setInterval(async () => {
81
- await this.performGardenPulse();
82
- }, intervalMs);
71
+ async triggerReview() {
72
+ const dashboard = await generateJoyDashboard(this.workingDir);
73
+ const checklist = await generateTidyChecklist(this.workingDir);
74
+ return `# 🌸 Joy Review\n\n${dashboard}\n\n## 📋 Tidy Checklist\n${checklist}`;
83
75
  }
84
- stopAutonomousHeartbeat() {
85
- if (this.heartbeatTimer) {
86
- clearInterval(this.heartbeatTimer);
87
- this.heartbeatTimer = undefined;
88
- }
76
+ async autoScaffold() {
77
+ await this.ensureWorkingDir();
78
+ await scaffoldZoneAbstractions(this.workingDir);
89
79
  }
90
80
  async executeAutonomousRestoration() {
91
- const root = vscode.workspace.workspaceFolders?.[0].uri.fsPath;
92
- if (!root)
93
- return "No workspace folder detected.";
94
- const result = await executeRestoration(root);
95
- await this.joyService.addAchievement("The Garden was autonomously restored to harmony. ✨", 50);
81
+ await this.ensureWorkingDir();
82
+ const result = await executeRestoration(this.workingDir);
83
+ await this.addAchievement("The Garden was autonomously restored to harmony.", 50);
96
84
  return result;
97
85
  }
98
86
  async executeSelfHealing(failedPath, errorReason) {
99
- await this.joyService.addAchievement("Self-healing initiated. 🧬", 15);
100
- if (errorReason.includes("content check failed") ||
101
- errorReason.includes("could not find")) {
102
- return `Self-healing: Analyzing \`${failedPath}\` to resolve: ${errorReason}. \nPlease retry the operation with \`find_files\` or \`grep_search\` to refresh context. ✨`;
103
- }
104
- return `Self-healing could not determine a recovery path for: ${errorReason}`;
105
- }
106
- async autoScaffold() {
107
- const root = vscode.workspace.workspaceFolders?.[0].uri.fsPath;
108
- if (root) {
109
- await scaffoldZoneAbstractions(root);
110
- }
111
- }
112
- async scoutAchievements() {
113
- const root = vscode.workspace.workspaceFolders?.[0].uri.fsPath;
114
- if (!root)
115
- return;
116
- try {
117
- await this.joyService.addAchievement("Sentinel Resonance achieved. 🌌", 5);
118
- const joyful = await isProjectJoyful(root);
119
- if (joyful) {
120
- await this.joyService.addAchievement("Structural Harmony attained. 🏛️", 20);
121
- }
122
- }
123
- catch (e) {
124
- console.error("[Singularity] Scouting failed", e);
125
- }
87
+ await this.addAchievement("Self-healing initiated. 🧬", 15);
88
+ return `Self-healing: Analyzing \`${failedPath}\` to resolve: ${errorReason}. \nPlease retry the operation to refresh context. ✨`;
126
89
  }
127
90
  dispose() {
128
- this.stopAutonomousHeartbeat();
91
+ void this.workingDir;
129
92
  }
130
93
  }
131
94
  //# sourceMappingURL=JoyAutomationService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"JoyAutomationService.js","sourceRoot":"","sources":["../../../src/monolith/services/JoyAutomationService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JoyAutomationService.js","sourceRoot":"","sources":["../../../src/monolith/services/JoyAutomationService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { MarieEngine } from "../infrastructure/ai/core/MarieEngine.js";
2
+ import { getErrorMessage } from "../plumbing/utils/PlumbingCore.js";
3
+ import { executeGenesisRitual, sowFeature, isProjectJoyful, generateJoyDashboard } from "../infrastructure/joy/JoyTools.js";
4
+ import { Storage } from "../cli/storage.js";
5
+ export class MarieAutomationService {
6
+ workingDir;
7
+ currentRun;
8
+ provider;
9
+ constructor(workingDir) {
10
+ this.workingDir = workingDir;
11
+ }
12
+ setProvider(provider) {
13
+ this.provider = provider;
14
+ }
15
+ setCurrentRun(run) { this.currentRun = run; }
16
+ getCurrentRun() { return this.currentRun; }
17
+ dispose() { }
18
+ async triggerGenesis() { return this.workingDir ? executeGenesisRitual(this.workingDir) : "No workspace."; }
19
+ async sowJoyFeature(name, intent) { return this.workingDir ? sowFeature(this.workingDir, name, intent) : "No workspace."; }
20
+ async performGardenPulse() {
21
+ if (!this.workingDir)
22
+ return { joyful: false, dashboard: "No workspace." };
23
+ const joyful = await isProjectJoyful(this.workingDir);
24
+ const dashboard = await generateJoyDashboard(this.workingDir);
25
+ return { joyful, dashboard };
26
+ }
27
+ async executeRun(sessionId, messages, callbacks, signal) {
28
+ if (!this.provider) {
29
+ throw new Error("AI Provider not set in MarieAutomationService");
30
+ }
31
+ const runId = `run_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
32
+ const run = { runId, startedAt: Date.now() };
33
+ const engine = new MarieEngine(this.provider);
34
+ try {
35
+ callbacks.onEvent?.({ type: "status", runId, status: "active", phase: "Research" });
36
+ const response = await engine.chatLoop(messages, run, callbacks, async () => {
37
+ await Storage.saveSessions({ [sessionId]: messages });
38
+ }, signal);
39
+ run.success = true;
40
+ run.completedAt = Date.now();
41
+ callbacks.onEvent?.({ type: "telemetry", runId, telemetry: run });
42
+ messages.push({ role: "assistant", content: response });
43
+ await Storage.saveSessions({ [sessionId]: messages });
44
+ return run;
45
+ }
46
+ catch (error) {
47
+ run.success = false;
48
+ run.error = getErrorMessage(error);
49
+ run.completedAt = Date.now();
50
+ callbacks.onEvent?.({ type: "error", runId, error: run.error });
51
+ callbacks.onEvent?.({ type: "telemetry", runId, telemetry: run });
52
+ throw error;
53
+ }
54
+ finally {
55
+ engine.dispose();
56
+ }
57
+ }
58
+ }
59
+ //# sourceMappingURL=MarieAutomationService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarieAutomationService.js","sourceRoot":"","sources":["../../../src/monolith/services/MarieAutomationService.ts"],"names":[],"mappings":"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"}
@@ -1,168 +1,53 @@
1
- import * as vscode from "vscode";
2
- import { PureStreamParser, } from "../infrastructure/tools/PureStreamParser.js";
3
- import { MarieSCMProvider } from "./MarieSCMProvider.js";
4
- import { StringUtils } from "../plumbing/utils/StringUtils.js";
1
+ import { createPureStreamParser } from "../infrastructure/tools/PureStreamParser.js";
5
2
  /**
6
- * Provides inline 'Ghost Text' previews of AI edits and coordinates with SCM for gutter markers.
3
+ * MarieGhostService (CLI Edition)
4
+ * Provides state management for tool stream deltas without VS Code UI dependencies.
5
+ * Coordinates with PureStreamParser to track proposed changes during execution.
7
6
  */
8
- export class MarieGhostService {
9
- static parser = new PureStreamParser();
10
- static lastUpdate = 0;
11
- static activeGhosts = new Map();
12
- static ghostDecoration = vscode.window.createTextEditorDecorationType({
13
- before: {
14
- color: new vscode.ThemeColor("editorGhostText.foreground"),
15
- fontStyle: "italic",
16
- margin: "0 0.5em 0 0",
17
- },
18
- opacity: "0.4",
19
- backgroundColor: new vscode.ThemeColor("editorGhostText.background"),
20
- isWholeLine: true,
21
- });
22
- static init(context) {
23
- // Ensure ghosts persist across tab switches
24
- context.subscriptions.push(vscode.window.onDidChangeVisibleTextEditors(() => {
25
- const uris = new Set(Array.from(this.activeGhosts.values()).map((g) => g.uri));
26
- uris.forEach((u) => this.refreshDecorations(vscode.Uri.parse(u)));
27
- }));
28
- }
29
- static thoughtDecoration = vscode.window.createTextEditorDecorationType({
30
- after: {
31
- color: new vscode.ThemeColor("editorCodeLens.foreground"),
32
- fontStyle: "italic",
33
- margin: "0 0 0 2em",
34
- },
35
- isWholeLine: true,
36
- });
37
- /**
38
- * projects a "Thought" from the swarm into the editor as a ghost comment.
39
- * These are ephemeral and clear on next run.
40
- */
41
- static showThought(agent, text) {
42
- const activeEditor = vscode.window.activeTextEditor;
43
- if (!activeEditor)
44
- return;
45
- const line = activeEditor.selection.active.line;
46
- const decoration = {
47
- range: new vscode.Range(line, 0, line, 0),
48
- renderOptions: {
49
- after: { contentText: ` // 🧠 ${agent}: ${text}` },
50
- },
51
- };
52
- activeEditor.setDecorations(this.thoughtDecoration, [decoration]);
53
- const timeoutKey = `${activeEditor.document.uri.toString()}:${line}`;
54
- if (this.thoughtTimeouts.has(timeoutKey))
55
- clearTimeout(this.thoughtTimeouts.get(timeoutKey));
56
- const timeout = setTimeout(() => {
57
- activeEditor.setDecorations(this.thoughtDecoration, []);
58
- this.thoughtTimeouts.delete(timeoutKey);
59
- }, 2000);
60
- this.thoughtTimeouts.set(timeoutKey, timeout);
61
- }
62
- static pendingDeltas = new Map();
63
- static updateTimer = null;
64
- static handleDelta(toolCallId, name, delta) {
65
- if (![
66
- "write_file",
67
- "replace_in_file",
68
- "write_to_file",
69
- "replace_file_content",
70
- "multi_replace_file_content",
71
- ].includes(name))
72
- return;
73
- // Buffer the delta
74
- const current = this.pendingDeltas.get(toolCallId) || "";
75
- this.pendingDeltas.set(toolCallId, current + delta);
76
- // Schedule flush if not already pending
77
- if (!this.updateTimer) {
78
- this.updateTimer = setTimeout(() => this.flushUpdates(), 20);
79
- }
80
- }
81
- static flushUpdates() {
82
- this.updateTimer = null;
83
- for (const [toolCallId, delta] of Array.from(this.pendingDeltas.entries())) {
84
- const input = this.parser.append(toolCallId, delta);
85
- const hasContent = input.content !== undefined || input.replace !== undefined;
86
- if (input.path && hasContent) {
87
- const uri = vscode.Uri.file(input.path);
88
- this.updateGhost(toolCallId, uri, input);
89
- }
90
- }
91
- this.pendingDeltas.clear();
92
- }
93
- static updateGhost(toolCallId, uri, input) {
94
- const editors = vscode.window.visibleTextEditors.filter((e) => e.document.uri.toString() === uri.toString());
95
- if (editors.length === 0)
96
- return;
97
- const editor = editors[0];
98
- let targetLine = 0;
99
- if (input.line_start !== undefined) {
100
- targetLine = Math.max(0, input.line_start - 1);
101
- }
102
- else if (input.old_content || input.search) {
103
- const searchString = input.search || input.old_content || "";
104
- const snapshot = searchString.substring(0, 30);
105
- if (snapshot) {
106
- for (let i = 0; i < editor.document.lineCount; i++) {
107
- if (editor.document.lineAt(i).text.includes(snapshot)) {
108
- targetLine = i;
109
- break;
110
- }
111
- }
112
- }
113
- }
114
- const range = new vscode.Range(targetLine, 0, targetLine, 0);
115
- const previewText = input.replace || StringUtils.extractText(input.content) || "";
116
- const textPreview = ` $(sync~spin) Proposed: ${previewText.substring(0, 80).replace(/\n/g, " ")}...`;
117
- this.activeGhosts.set(toolCallId, {
118
- uri: uri.toString(),
119
- range,
120
- text: textPreview,
121
- });
122
- this.refreshDecorations(uri);
123
- MarieSCMProvider.getInstance()?.registerDiff(uri, uri);
124
- }
125
- static refreshDecorations(uri) {
126
- const uriStr = uri.toString();
127
- const relevantGhosts = Array.from(this.activeGhosts.values()).filter((g) => g.uri === uriStr);
128
- const decorations = relevantGhosts.map((g) => ({
129
- range: g.range,
130
- renderOptions: {
131
- before: { contentText: g.text },
132
- },
133
- }));
134
- vscode.window.visibleTextEditors
135
- .filter((e) => e.document.uri.toString() === uriStr)
136
- .forEach((e) => e.setDecorations(this.ghostDecoration, decorations));
137
- }
138
- static clear(toolCallId) {
139
- const ghost = this.activeGhosts.get(toolCallId);
140
- if (ghost) {
141
- this.activeGhosts.delete(toolCallId);
142
- this.refreshDecorations(vscode.Uri.parse(ghost.uri));
143
- // Only clear SCM if no more ghosts for this URI
144
- const remaining = Array.from(this.activeGhosts.values()).some((g) => g.uri === ghost.uri);
145
- if (!remaining) {
146
- MarieSCMProvider.getInstance()?.clear(vscode.Uri.parse(ghost.uri));
147
- }
148
- }
149
- this.parser.clear(toolCallId);
7
+ const parser = createPureStreamParser();
8
+ const pendingDeltas = new Map();
9
+ let updateTimer = null;
10
+ /**
11
+ * Handles incoming deltas for file-writing tools.
12
+ * In CLI mode, we use this to track proposed changes for telemetry or post-mortem.
13
+ */
14
+ export function handleGhostDelta(toolCallId, name, delta) {
15
+ if (![
16
+ "write_file",
17
+ "replace_in_file",
18
+ "write_to_file",
19
+ "replace_file_content",
20
+ "multi_replace_file_content",
21
+ ].includes(name))
22
+ return;
23
+ const current = pendingDeltas.get(toolCallId) || "";
24
+ pendingDeltas.set(toolCallId, current + delta);
25
+ if (!updateTimer) {
26
+ updateTimer = setTimeout(() => flushGhostUpdates(), 20);
150
27
  }
151
- static clearAll() {
152
- const uris = new Set(Array.from(this.activeGhosts.values()).map((g) => g.uri));
153
- this.activeGhosts.clear();
154
- this.parser.clearAll();
155
- uris.forEach((u) => this.refreshDecorations(vscode.Uri.parse(u)));
156
- MarieSCMProvider.getInstance()?.clearAll();
28
+ }
29
+ export function flushGhostUpdates() {
30
+ updateTimer = null;
31
+ for (const [toolCallId, delta] of Array.from(pendingDeltas.entries())) {
32
+ // Feeding the parser ensures internal state consistency
33
+ parser.append(toolCallId, delta);
157
34
  }
158
- static thoughtTimeouts = new Map();
159
- static dispose() {
160
- this.ghostDecoration.dispose();
161
- this.thoughtDecoration.dispose();
162
- this.thoughtTimeouts.forEach((t) => clearTimeout(t));
163
- this.thoughtTimeouts.clear();
164
- if (this.updateTimer)
165
- clearTimeout(this.updateTimer);
35
+ pendingDeltas.clear();
36
+ }
37
+ export function clearGhost(toolCallId) {
38
+ pendingDeltas.delete(toolCallId);
39
+ parser.clear(toolCallId);
40
+ }
41
+ /**
42
+ * Absolute Resource Sanctity.
43
+ * Clears all active parsers and pending deltas.
44
+ */
45
+ export function clearAllGhosts() {
46
+ pendingDeltas.clear();
47
+ parser.clearAll();
48
+ if (updateTimer) {
49
+ clearTimeout(updateTimer);
50
+ updateTimer = null;
166
51
  }
167
52
  }
168
53
  //# sourceMappingURL=MarieGhostService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarieGhostService.js","sourceRoot":"","sources":["../../../src/monolith/services/MarieGhostService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MarieGhostService.js","sourceRoot":"","sources":["../../../src/monolith/services/MarieGhostService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAErF;;;;GAIG;AACH,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;AACxC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;AAChD,IAAI,WAAW,GAA0B,IAAI,CAAC;AAE9C;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAkB,EAClB,IAAY,EACZ,KAAa;IAEb,IACE,CAAC;QACC,YAAY;QACZ,iBAAiB;QACjB,eAAe;QACf,sBAAsB;QACtB,4BAA4B;KAC7B,CAAC,QAAQ,CAAC,IAAI,CAAC;QAEhB,OAAO;IAET,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACpD,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC;IAE/C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,WAAW,GAAG,IAAI,CAAC;IACnB,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACtE,wDAAwD;QACxD,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,aAAa,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,aAAa,CAAC,KAAK,EAAE,CAAC;IACtB,MAAM,CAAC,QAAQ,EAAE,CAAC;IAClB,IAAI,WAAW,EAAE,CAAC;QAChB,YAAY,CAAC,WAAW,CAAC,CAAC;QAC1B,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;AACH,CAAC"}