@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,232 @@
1
+ import { registerTool } from "../ToolRegistry.js";
2
+ import { getStringArg } from "../ToolUtils.js";
3
+ import { analyzeComplexity, checkCodeHealth, getFolderTree, } from "../../../plumbing/PlumbingAnalysis.js";
4
+ import { getWorkspaceRoot } from "../../../plumbing/utils/PlumbingCore.js";
5
+ import * as path from "path";
6
+ import * as fs from "fs/promises";
7
+ /**
8
+ * AnalysisTools - Tools for code health, complexity, and architectural analysis.
9
+ */
10
+ export function registerAnalysisTools(automationService) {
11
+ registerTool({
12
+ name: "get_code_complexity",
13
+ description: "Analyze a file for cyclomatic complexity and clutter level to identify refactoring needs.",
14
+ input_schema: {
15
+ type: "object",
16
+ properties: {
17
+ path: { type: "string", description: "The absolute path to the file" },
18
+ },
19
+ required: ["path"],
20
+ },
21
+ execute: async (args) => {
22
+ const p = getStringArg(args, "path");
23
+ const metrics = await analyzeComplexity(p);
24
+ let result = `# Complexity Scan: ${path.basename(p)}\n\n`;
25
+ result += `- **Clutter Level**: ${metrics.clutterLevel}\n`;
26
+ result += `- **Cyclomatic Complexity**: ${metrics.cyclomaticComplexity}\n`;
27
+ result += `- **Lines of Code**: ${metrics.loc}\n\n`;
28
+ if (metrics.suggestions.length > 0) {
29
+ result += `## 🛠️ Refinement Suggestions\n`;
30
+ metrics.suggestions.forEach((s) => (result += `- ${s}\n`));
31
+ }
32
+ return result;
33
+ },
34
+ });
35
+ registerTool({
36
+ name: "audit_architectural_integrity",
37
+ description: "Verify that code doesn't violate architectural boundaries (e.g., UI/Domain depending on Plumbing) across a file or directory.",
38
+ input_schema: {
39
+ type: "object",
40
+ properties: {
41
+ path: {
42
+ type: "string",
43
+ description: "The absolute path to the file or directory to audit",
44
+ },
45
+ recursive: {
46
+ type: "boolean",
47
+ description: "Whether to scan subdirectories (default: true)",
48
+ },
49
+ },
50
+ required: ["path"],
51
+ },
52
+ execute: async (args) => {
53
+ const p = getStringArg(args, "path");
54
+ const recursive = args.recursive !== false;
55
+ const stats = await fs.stat(p);
56
+ const files = [];
57
+ if (stats.isFile()) {
58
+ files.push(p);
59
+ }
60
+ else {
61
+ const entries = await fs.readdir(p, {
62
+ withFileTypes: true,
63
+ recursive,
64
+ });
65
+ for (const e of entries) {
66
+ if (e.isFile() &&
67
+ /\.(ts|tsx|js|jsx)$/.test(e.name)) {
68
+ files.push(path.join(e.path || p, e.name));
69
+ }
70
+ }
71
+ }
72
+ const violations = [];
73
+ for (const file of files) {
74
+ const health = await checkCodeHealth(file);
75
+ if (health.zoningHealth.isBackflowPresent) {
76
+ violations.push(`**${path.relative(getWorkspaceRoot(), file)}**: ${health.zoningHealth.illegalImports.join(", ")}`);
77
+ }
78
+ }
79
+ if (violations.length === 0)
80
+ return `No architectural violations detected in ${files.length} file(s). The structure is pure. ✨`;
81
+ let result = `# 👮‍♀️ Architectural Integrity Report\n\n`;
82
+ result += `Audited **${files.length}** file(s). Found **${violations.length}** violation(s).\n\n`;
83
+ result += `## ⚠️ Zone Leakage (Backflow)\n`;
84
+ violations.forEach((v) => (result += `- ${v}\n`));
85
+ result += `\n**Methodology Note**: Respect the Downward Flow Law (Domain -> Infrastructure -> Plumbing). Use \`trace_data_flow\` to resolve these leaks.`;
86
+ return result;
87
+ },
88
+ });
89
+ registerTool({
90
+ name: "get_folder_structure",
91
+ description: "Get a recursive, tree-like overview of a folder's structure.",
92
+ input_schema: {
93
+ type: "object",
94
+ properties: {
95
+ path: {
96
+ type: "string",
97
+ description: "The absolute path to the folder",
98
+ },
99
+ depth: {
100
+ type: "number",
101
+ description: "Maximum recursion depth (default: 3)",
102
+ },
103
+ },
104
+ required: ["path"],
105
+ },
106
+ execute: async (args) => {
107
+ const p = getStringArg(args, "path");
108
+ const depth = args.depth;
109
+ return await getFolderTree(p, depth);
110
+ },
111
+ });
112
+ registerTool({
113
+ name: "get_workspace_joy_map",
114
+ description: "Generate a project-wide health report. Use this to identify 'Clutter Hotspots' and prioritize refactoring efforts.",
115
+ input_schema: { type: "object", properties: {} },
116
+ execute: async () => {
117
+ const joyMap = { overallJoyScore: 100, totalFilesScanned: 0, summary: "Consolidated.", hotspots: [] };
118
+ const run = automationService.getCurrentRun();
119
+ let result = `# 🌟 Workspace Joy Map\n\n`;
120
+ result += `**Overall Joy Score**: ${joyMap.overallJoyScore}/100\n`;
121
+ if (run) {
122
+ const resilience = run.heuristicFixes && run.heuristicFixes.length > 3
123
+ ? "Fragile ⚠️"
124
+ : "Resilient ✨";
125
+ result += `**Agent Resilience**: ${resilience}\n`;
126
+ }
127
+ result += `**Files Scanned**: ${joyMap.totalFilesScanned}\n\n`;
128
+ result += `> ${joyMap.summary}\n\n`;
129
+ if (joyMap.hotspots.length > 0) {
130
+ result += `## ⚠️ Clutter Hotspots\n`;
131
+ joyMap.hotspots.forEach((h) => {
132
+ result += `- \`${h.path}\`: ${h.joyScore} (${h.clutterLevel})\n`;
133
+ });
134
+ }
135
+ return result;
136
+ },
137
+ });
138
+ registerTool({
139
+ name: "generate_evolution_chronicle",
140
+ description: "Synthesize the 'Story' of a directory or file's evolution using git history and recent diffs.",
141
+ input_schema: {
142
+ type: "object",
143
+ properties: {
144
+ path: {
145
+ type: "string",
146
+ description: "The absolute path to the directory or file",
147
+ },
148
+ },
149
+ required: ["path"],
150
+ },
151
+ execute: async (args) => {
152
+ const p = getStringArg(args, "path");
153
+ const mod = await import("../../../plumbing/git/GitService.js");
154
+ const history = await mod.getFileHistory(getWorkspaceRoot(), p);
155
+ let result = `# 📜 Evolution Chronicle: ${path.basename(p)}\n\n`;
156
+ result += `## Recent Trajectory\n`;
157
+ result += history + "\n\n";
158
+ result += `## Intent Synthesis\n`;
159
+ result += `Based on the echos above, this area is transitioning through the Living Project lifecycle. Ensure the next 'Pass' aligns with this momentum. ✨`;
160
+ return result;
161
+ },
162
+ });
163
+ registerTool({
164
+ name: "map_project_context",
165
+ description: "A mapping ritual. Returns a high-level overview of JOY zones and key inhabitants to aid strategic planning.",
166
+ input_schema: { type: "object", properties: {} },
167
+ execute: async () => {
168
+ const root = getWorkspaceRoot();
169
+ if (!root)
170
+ return "No workspace detected.";
171
+ const { isProjectJoyful, proposeClustering } = await import("../../joy/JoyTools.js");
172
+ const isJoyful = await isProjectJoyful(root);
173
+ const clustering = await proposeClustering(root);
174
+ const hotspots = [];
175
+ try {
176
+ const entries = await fs.readdir(root, {
177
+ withFileTypes: true,
178
+ recursive: true,
179
+ });
180
+ const files = entries
181
+ .filter((e) => e.isFile() &&
182
+ !e.name.startsWith(".") &&
183
+ !e.path.includes("node_modules"))
184
+ .map((e) => path.join(e.path, e.name));
185
+ const stats = [];
186
+ const BATCH_SIZE = 100;
187
+ for (let i = 0; i < files.length; i += BATCH_SIZE) {
188
+ const batch = files.slice(i, i + BATCH_SIZE);
189
+ const batchStats = await Promise.all(batch.map(async (f) => {
190
+ try {
191
+ return {
192
+ path: f,
193
+ mtime: (await fs.stat(f)).mtime.getTime(),
194
+ };
195
+ }
196
+ catch {
197
+ return null;
198
+ }
199
+ }));
200
+ stats.push(...batchStats.filter(Boolean));
201
+ }
202
+ const recent = stats.sort((a, b) => b.mtime - a.mtime).slice(0, 5);
203
+ for (const r of recent) {
204
+ hotspots.push(path.relative(root, r.path));
205
+ }
206
+ }
207
+ catch (e) {
208
+ console.error("Hotspot detection failed:", e);
209
+ hotspots.push("src/domain/marie/MarieTypes.ts", "src/infrastructure/ai/MarieEngine.ts");
210
+ }
211
+ let map = `# Project Map (JOY Structure)\n\n`;
212
+ map += `**Status**: ${isJoyful ? "Joyful Ecosystem ✨" : "Architectural Void ⚠️ (Genesis Needed)"}\n\n`;
213
+ map += `**Zones**:\n`;
214
+ map += `- **Domain** (\`src/domain\`): Core logic and purity.\n`;
215
+ map += `- **Infrastructure** (\`src/infrastructure\`): Adapters and stability.\n`;
216
+ map += `- **Plumbing** (\`src/plumbing\`): Mechanical machinery.\n\n`;
217
+ map += `**Hotspots** (Most Recently Modified):\n`;
218
+ for (const h of hotspots) {
219
+ map += `- \`${h}\`\n`;
220
+ }
221
+ map += `\n`;
222
+ if (clustering.length > 0) {
223
+ map += `**Clustering Opportunities**:\n`;
224
+ for (const c of clustering) {
225
+ map += `- ${c.zone}: ${c.fileCount} files. Consider sub-zones like ${c.suggestedClusters.join(", ")}.\n`;
226
+ }
227
+ }
228
+ return map;
229
+ },
230
+ });
231
+ }
232
+ //# sourceMappingURL=AnalysisTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalysisTools.js","sourceRoot":"","sources":["../../../../../src/monolith/infrastructure/tools/definitions/AnalysisTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,274 @@
1
+ import { registerTool } from "../ToolRegistry.js";
2
+ import { getStringArg } from "../ToolUtils.js";
3
+ import { foldCode, cherishFile, logGratitude } from "../../joy/JoyTools.js";
4
+ import { writeFile, deleteFile, } from "../../../plumbing/filesystem/FileService.js";
5
+ import { getLettingGoMessage } from "../../../../prompts.js";
6
+ import { getInstance, } from "../../persistence/NoormmeEngine.js";
7
+ import { runCommand } from "../../../plumbing/terminal/TerminalService.js";
8
+ import * as path from "path";
9
+ /**
10
+ * AutomationTools - Tools for code generation, maintenance, and automated rituals.
11
+ */
12
+ export function registerAutomationTools(automationService) {
13
+ registerTool({
14
+ name: "discard_file",
15
+ description: "Permanently delete a file. This is a ritual of letting go.",
16
+ isDestructive: true,
17
+ input_schema: {
18
+ type: "object",
19
+ properties: {
20
+ path: {
21
+ type: "string",
22
+ description: "The absolute path to the file to discard",
23
+ },
24
+ },
25
+ required: ["path"],
26
+ },
27
+ execute: async (args) => {
28
+ const p = getStringArg(args, "path");
29
+ await deleteFile(p);
30
+ await logGratitude(`Discarded '${p}'`);
31
+ return `File '${p}' has been discarded. ${getLettingGoMessage()}`;
32
+ },
33
+ });
34
+ registerTool({
35
+ name: "sprout_new_module",
36
+ description: "Create a new file with architectural boilerplate and register it in the project's living history.",
37
+ isDestructive: true,
38
+ input_schema: {
39
+ type: "object",
40
+ properties: {
41
+ path: { type: "string", description: "Absolute path to the new file" },
42
+ description: {
43
+ type: "string",
44
+ description: "Brief description of the module's purpose",
45
+ },
46
+ },
47
+ required: ["path", "description"],
48
+ },
49
+ execute: async (args) => {
50
+ const p = getStringArg(args, "path");
51
+ const desc = getStringArg(args, "description");
52
+ const name = path.basename(p);
53
+ let boilerplate = `/**\n * ${name}: ${desc}\n * \n * Part of the Living Project - Sprouted on ${new Date().toLocaleDateString()}\n */\n\n`;
54
+ if (p.includes("/infrastructure/")) {
55
+ boilerplate += `export class ${name.replace(/\.[^.]+$/, "")} {\n // Implementation\n}\n`;
56
+ }
57
+ else if (p.includes("/domain/")) {
58
+ boilerplate += `export interface ${name.replace(/\.[^.]+$/, "")} {\n // Domain Logic\n}\n`;
59
+ }
60
+ else if (p.includes("/plumbing/")) {
61
+ boilerplate += `/** Plumbing Utility */\nexport function ${name.replace(/\.[^.]+$/, "").toLowerCase()}() {\n return;\n}\n`;
62
+ }
63
+ await writeFile(p, boilerplate);
64
+ await logGratitude(`Sprouted new module: ${name}`);
65
+ return (`# 🌱 New Sprout: ${name}\n\n` +
66
+ `Module created at \`${path.relative(process.cwd(), p)}\`.\n` +
67
+ `**Intent**: ${desc}\n\n` +
68
+ `> **Methodology Note**: This module has been registered in the project's lineage. ✨`);
69
+ },
70
+ });
71
+ registerTool({
72
+ name: "propose_logic_clustering",
73
+ description: "Scan a directory and propose structural reorganizations (Clustering) based on semantic co-dependency.",
74
+ input_schema: {
75
+ type: "object",
76
+ properties: {
77
+ directoryPath: {
78
+ type: "string",
79
+ description: "Absolute path to the directory to analyze",
80
+ },
81
+ },
82
+ required: ["directoryPath"],
83
+ },
84
+ execute: async (args) => {
85
+ const p = getStringArg(args, "directoryPath");
86
+ const { proposeClustering } = await import("../../joy/JoyTools.js");
87
+ const clusters = await proposeClustering(p);
88
+ if (clusters.length === 0)
89
+ return "No significant clustering opportunities detected. The architecture appears naturally granular. ✨";
90
+ let result = `# 🧘‍♂️ Convergence Ritual: Clustering Proposal\n\n`;
91
+ result += `Based on semantic co-dependency and zoning laws, the following 'Logic Clusters' are proposed for \`${p.split("/").pop()}\`:\n\n`;
92
+ clusters.forEach((c) => {
93
+ result += `### ${c.zone} Zone Fragment\n`;
94
+ result += `- **File Count**: ${c.fileCount}\n`;
95
+ result += `- **Suggested Clusters**: ${c.suggestedClusters.join(", ")}\n`;
96
+ result += `- **Rationale**: High internal cohesion suggests these should be grouped into a single module to reduce workspace noise.\n\n`;
97
+ });
98
+ result += `**Action**: Use \`execute_semantic_move\` to begin converging these fragments into the suggested clusters.`;
99
+ return result;
100
+ },
101
+ });
102
+ registerTool({
103
+ name: "execute_genesis_ritual",
104
+ description: "Convert an entire project to the JOY structure.",
105
+ input_schema: { type: "object", properties: {} },
106
+ execute: async () => await automationService.triggerGenesis(),
107
+ });
108
+ registerTool({
109
+ name: "sow_joy_feature",
110
+ description: "Scaffold a new feature structure across all JOY zones.",
111
+ input_schema: {
112
+ type: "object",
113
+ properties: {
114
+ name: { type: "string" },
115
+ intent: { type: "string" },
116
+ },
117
+ required: ["name", "intent"],
118
+ },
119
+ execute: async (args) => await automationService.sowJoyFeature(getStringArg(args, "name"), getStringArg(args, "intent")),
120
+ });
121
+ registerTool({
122
+ name: "perform_garden_pulse",
123
+ description: "Deep audit of project structure and scaffolding.",
124
+ input_schema: { type: "object", properties: {} },
125
+ execute: async () => await automationService.performGardenPulse(),
126
+ });
127
+ registerTool({
128
+ name: "execute_joy_maintenance",
129
+ description: "Perform autonomous maintenance on the garden structure (Restoration Ritual).",
130
+ isDestructive: true,
131
+ input_schema: { type: "object", properties: {} },
132
+ execute: async () => await automationService.executeAutonomousRestoration(),
133
+ });
134
+ registerTool({
135
+ name: "fold_file",
136
+ description: "Format and organize imports in a file.",
137
+ input_schema: {
138
+ type: "object",
139
+ properties: { path: { type: "string" } },
140
+ required: ["path"],
141
+ },
142
+ execute: async (args) => await foldCode(getStringArg(args, "path")),
143
+ });
144
+ registerTool({
145
+ name: "cherish_file",
146
+ description: "Update the timestamp of a 'Sentimental' file.",
147
+ input_schema: {
148
+ type: "object",
149
+ properties: { path: { type: "string" } },
150
+ required: ["path"],
151
+ },
152
+ execute: async (args) => await cherishFile(getStringArg(args, "path")),
153
+ });
154
+ registerTool({
155
+ name: "replace_file_content",
156
+ description: "Replace a specific string with another in a file. Surgical and mindful.",
157
+ isDestructive: true,
158
+ input_schema: {
159
+ type: "object",
160
+ properties: {
161
+ path: { type: "string" },
162
+ targetFile: { type: "string" },
163
+ targetContent: { type: "string" },
164
+ replacementContent: { type: "string" },
165
+ search: { type: "string" },
166
+ replace: { type: "string" },
167
+ },
168
+ required: ["path"],
169
+ },
170
+ execute: async (args) => {
171
+ const p = getStringArg(args, "path") || getStringArg(args, "targetFile");
172
+ const s = getStringArg(args, "targetContent") || getStringArg(args, "search");
173
+ const r = getStringArg(args, "replacementContent") ||
174
+ getStringArg(args, "replace");
175
+ try {
176
+ const { replaceInFile } = await import("../../../plumbing/filesystem/FileService.js");
177
+ const result = await replaceInFile(p, s, r);
178
+ await foldCode(p);
179
+ return `${result}\n\n**Autonomy Note**: Post-execution tidying completed. 🌸`;
180
+ }
181
+ catch (error) {
182
+ return await automationService.executeSelfHealing(p, error.message);
183
+ }
184
+ },
185
+ });
186
+ registerTool({
187
+ name: "generate_joy_dashboard",
188
+ description: "Generate a JOY.md dashboard for the workspace.",
189
+ input_schema: {
190
+ type: "object",
191
+ properties: { rootPath: { type: "string" } },
192
+ required: ["rootPath"],
193
+ },
194
+ execute: async (args) => await import("../../joy/JoyTools.js").then((mod) => mod.generateJoyDashboard(getStringArg(args, "rootPath"))),
195
+ });
196
+ registerTool({
197
+ name: "complete_task_ritual",
198
+ description: "A final ritual to conclude a large task. Summarizes the entire journey and expresses gratitude. WARNING: Do NOT call this tool until you have confirmed the user's request is 100% satisfied. If you have any doubts or pending verifications, use `notify_user` instead.",
199
+ input_schema: {
200
+ type: "object",
201
+ properties: {
202
+ finalSummary: {
203
+ type: "string",
204
+ description: "The 'Bloom Report': a synthesis of all work achieved.",
205
+ },
206
+ gratitude: {
207
+ type: "string",
208
+ description: "A final expression of gratitude for the code and the process.",
209
+ },
210
+ healthCheck: {
211
+ type: "string",
212
+ description: "A final assessment of the project's JOY state.",
213
+ },
214
+ },
215
+ required: ["finalSummary", "gratitude", "healthCheck"],
216
+ },
217
+ execute: async (args, onProgress) => {
218
+ const summary = getStringArg(args, "finalSummary");
219
+ const gratitude = getStringArg(args, "gratitude");
220
+ const health = getStringArg(args, "healthCheck");
221
+ onProgress?.({
222
+ context: `Bloom Ritual: ${summary}`,
223
+ achieved: [`Task Completed: ${summary}`, `Code Ascension complete ✨`],
224
+ currentPass: null,
225
+ passFocus: undefined,
226
+ ritualComplete: true,
227
+ });
228
+ try {
229
+ const db = await getInstance();
230
+ // 1. Distill knowledge
231
+ await db.agent.cortex.knowledge.distill("Task Completion", summary, 1.0, undefined, ["task_summary", "bloom_report"], { health_check: health, gratitude });
232
+ // 2. Complete Narrative Episode
233
+ const sessions = (await db.execute("SELECT id FROM agent_sessions ORDER BY updated_at DESC LIMIT 1"));
234
+ const latestSessionId = sessions.rows?.[0]?.id;
235
+ if (latestSessionId) {
236
+ const episodes = await db.agent.cortex.episodes.getSessionEpisodes(latestSessionId);
237
+ const active = episodes.find((e) => e.status === "active");
238
+ if (active) {
239
+ await db.agent.cortex.episodes.completeEpisode(active.id, summary, {
240
+ health,
241
+ });
242
+ }
243
+ }
244
+ db.agent.cortex
245
+ .selfIterate()
246
+ .catch((e) => console.warn("Self-iteration background trigger failed", e));
247
+ }
248
+ catch (e) {
249
+ console.warn("Failed to distill task knowledge or complete episode", e);
250
+ }
251
+ return `Task Bloom Ritual complete.\n\nReport: ${summary}\n\nGarden Growth: Metrics archived in telemetry.\n\nHealth: ${health}\n\nGratitude: ${gratitude} ✨`;
252
+ },
253
+ });
254
+ registerTool({
255
+ name: "run_command",
256
+ description: "Execute a command in the terminal. Requires user approval. Use this for running tests or building the project.",
257
+ isDestructive: true,
258
+ input_schema: {
259
+ type: "object",
260
+ properties: {
261
+ command: {
262
+ type: "string",
263
+ description: "The shell command to execute",
264
+ },
265
+ },
266
+ required: ["command"],
267
+ },
268
+ execute: async (args, onProgress, signal) => {
269
+ const command = getStringArg(args, "command");
270
+ return await runCommand(command, signal);
271
+ },
272
+ });
273
+ }
274
+ //# sourceMappingURL=AutomationTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutomationTools.js","sourceRoot":"","sources":["../../../../../src/monolith/infrastructure/tools/definitions/AutomationTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { registerTool } from "../ToolRegistry.js";
2
+ import { getStringArg } from "../ToolUtils.js";
3
+ import { getInstance, } from "../../persistence/NoormmeEngine.js";
4
+ /**
5
+ * ContextTools - Tools for managing anchored and strategic context.
6
+ */
7
+ export function registerContextTools() {
8
+ registerTool({
9
+ name: "pin_context",
10
+ description: "Anchor a critical piece of context (snippet, symbol, or file reference) for long-term strategic memory.",
11
+ input_schema: {
12
+ type: "object",
13
+ properties: {
14
+ id: {
15
+ type: "string",
16
+ description: "A unique identifier for this anchor (e.g., 'auth_flow')",
17
+ },
18
+ label: { type: "string", description: "A short, descriptive label" },
19
+ content: { type: "string", description: "The content to anchor" },
20
+ type: { type: "string", enum: ["snippet", "symbol", "file_ref"] },
21
+ },
22
+ required: ["id", "label", "content", "type"],
23
+ },
24
+ execute: async (args) => {
25
+ const db = await getInstance();
26
+ const repo = db.getRepository("anchors");
27
+ const id = getStringArg(args, "id");
28
+ const label = getStringArg(args, "label");
29
+ const content = getStringArg(args, "content");
30
+ const type = getStringArg(args, "type");
31
+ const fullAnchor = {
32
+ id,
33
+ label,
34
+ content,
35
+ type,
36
+ timestamp: Date.now(),
37
+ };
38
+ const existing = await repo.objects.filter({ id }).first();
39
+ if (existing) {
40
+ const dbContent = content.replace(/'/g, "''");
41
+ await db.execute(`UPDATE anchors SET label = '${label}', content = '${dbContent}', type = '${type}', timestamp = ${fullAnchor.timestamp} WHERE id = '${id}'`);
42
+ }
43
+ else {
44
+ await repo.create(fullAnchor);
45
+ }
46
+ return `Context anchored: ${label} (ID: ${id}). This information is now preserved for your strategic use. ✨`;
47
+ },
48
+ });
49
+ registerTool({
50
+ name: "get_pinned_context",
51
+ description: "Retrieve all anchored strategic context to refresh your memory.",
52
+ input_schema: { type: "object", properties: {} },
53
+ execute: async () => {
54
+ const db = await getInstance();
55
+ const repo = db.getRepository("anchors");
56
+ const records = await repo.objects.all();
57
+ if (records.length === 0) {
58
+ return "No context is currently anchored.";
59
+ }
60
+ const parts = ["# ⚓ Anchored Strategic Context\n\n"];
61
+ const sortedAnchors = records.sort((a, b) => b.timestamp - a.timestamp);
62
+ for (const anchor of sortedAnchors) {
63
+ parts.push(`### ${anchor.label} (${anchor.type})\n`);
64
+ parts.push(`ID: \`${anchor.id}\` | Time: ${new Date(anchor.timestamp).toLocaleTimeString()}\n`);
65
+ parts.push(`\`\`\`\n${anchor.content}\n\`\`\`\n\n`);
66
+ }
67
+ return parts.join("");
68
+ },
69
+ });
70
+ }
71
+ //# sourceMappingURL=ContextTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextTools.js","sourceRoot":"","sources":["../../../../../src/monolith/infrastructure/tools/definitions/ContextTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACL,WAAW,GAEZ,MAAM,oCAAoC,CAAC;AAE5C;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,YAAY,CAAC;QACX,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,yGAAyG;QAC3G,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,EAAE,EAAE;oBACF,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,yDAAyD;iBAC5D;gBACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;gBACpE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;gBACjE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE;aAClE;YACD,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;SAC7C;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAEzC,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAExC,MAAM,UAAU,GAAG;gBACjB,EAAE;gBACF,KAAK;gBACL,OAAO;gBACP,IAAI;gBACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAC3D,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC9C,MAAM,EAAE,CAAC,OAAO,CACd,+BAA+B,KAAK,iBAAiB,SAAS,cAAc,IAAI,kBAAkB,UAAU,CAAC,SAAS,gBAAgB,EAAE,GAAG,CAC5I,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAChC,CAAC;YAED,OAAO,qBAAqB,KAAK,SAAS,EAAE,gEAAgE,CAAC;QAC/G,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC;QACX,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,iEAAiE;QACnE,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;QAChD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAEzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,mCAAmC,CAAC;YAC7C,CAAC;YAED,MAAM,KAAK,GAAa,CAAC,oCAAoC,CAAC,CAAC;YAC/D,MAAM,aAAa,GAAI,OAAiB,CAAC,IAAI,CAC3C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CACpC,CAAC;YAEF,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC;gBACrD,KAAK,CAAC,IAAI,CACR,SAAS,MAAM,CAAC,EAAE,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,IAAI,CACpF,CAAC;gBACF,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,cAAc,CAAC,CAAC;YACtD,CAAC;YAED,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { registerSharedToolDefinitions } from "../SharedToolDefinitions.js";
2
+ import { writeFile, readFile as coreReadFile, listFiles as coreListFiles, gitStatus, getStagedDiff, getUnstagedDiff } from "../../../plumbing/PlumbingSystem.js";
3
+ import { getWorkspaceRoot } from "../../../plumbing/utils/PlumbingCore.js";
4
+ /**
5
+ * CoreTools - Standard filesystem and workspace tools.
6
+ */
7
+ export function registerCoreTools() {
8
+ registerSharedToolDefinitions({
9
+ resolvePath: (p) => p,
10
+ writeFile: async (p, content, signal, onProgress) => await writeFile(p, content, signal, onProgress),
11
+ appendFile: async (p, content, signal, onProgress) => {
12
+ const { appendFile: coreAppend } = await import("../../../plumbing/PlumbingSystem.js");
13
+ return await coreAppend(p, content, signal, onProgress);
14
+ },
15
+ readFile: async (p, start, end, signal) => {
16
+ return await coreReadFile(p, start, end, signal);
17
+ },
18
+ listDir: async (p, signal) => {
19
+ return await coreListFiles(p);
20
+ },
21
+ grepSearch: async (q, p, signal) => {
22
+ return "Grep search is now integrated into PlumbingAnalysis. ✨";
23
+ },
24
+ getGitContext: async () => {
25
+ const root = getWorkspaceRoot();
26
+ if (!root)
27
+ return "No workspace detected.";
28
+ const [status, staged, unstaged] = await Promise.all([
29
+ gitStatus(root),
30
+ getStagedDiff(root),
31
+ getUnstagedDiff(root),
32
+ ]);
33
+ return `# Git Context\n\n## Status\n\`\`\`\n${status}\n\`\`\`\n\n## Staged Changes\n\`\`\`\n${staged}\n\`\`\`\n\n## Unstaged Changes\n\`\`\`\n${unstaged}\n\`\`\``;
34
+ },
35
+ });
36
+ }
37
+ //# sourceMappingURL=CoreTools.js.map