@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.
- package/README.md +7 -15
- package/SENTINEL.md +4 -7
- package/dist/cli-new/components/AgenticSpinner.js +28 -0
- package/dist/cli-new/components/AgenticSpinner.js.map +1 -0
- package/dist/cli-new/components/App.js +16 -63
- package/dist/cli-new/components/App.js.map +1 -1
- package/dist/cli-new/components/ApprovalDialog.js +3 -2
- package/dist/cli-new/components/ApprovalDialog.js.map +1 -1
- package/dist/cli-new/components/Banner.js +16 -5
- package/dist/cli-new/components/Banner.js.map +1 -1
- package/dist/cli-new/components/ChatArea.js +6 -7
- package/dist/cli-new/components/ChatArea.js.map +1 -1
- package/dist/cli-new/components/Header.js +14 -8
- package/dist/cli-new/components/Header.js.map +1 -1
- package/dist/cli-new/components/InputArea.js +98 -31
- package/dist/cli-new/components/InputArea.js.map +1 -1
- package/dist/cli-new/components/MessageBubble.js +28 -19
- package/dist/cli-new/components/MessageBubble.js.map +1 -1
- package/dist/cli-new/components/SessionSwitcher.js +6 -9
- package/dist/cli-new/components/SessionSwitcher.js.map +1 -1
- package/dist/cli-new/components/SetupWizard.js +80 -257
- package/dist/cli-new/components/SetupWizard.js.map +1 -1
- package/dist/cli-new/components/ToolCallDisplay.js +20 -5
- package/dist/cli-new/components/ToolCallDisplay.js.map +1 -1
- package/dist/cli-new/components/WizardSteps.js +22 -0
- package/dist/cli-new/components/WizardSteps.js.map +1 -0
- package/dist/cli-new/constants/SetupConstants.js +42 -0
- package/dist/cli-new/constants/SetupConstants.js.map +1 -0
- package/dist/cli-new/hooks/useGit.js +19 -62
- package/dist/cli-new/hooks/useGit.js.map +1 -1
- package/dist/cli-new/hooks/useMarie.js +26 -18
- package/dist/cli-new/hooks/useMarie.js.map +1 -1
- package/dist/cli-new/hooks/useSessions.js +1 -1
- package/dist/cli-new/hooks/useSessions.js.map +1 -1
- package/dist/cli-new/hooks/useSetupWizard.js +88 -0
- package/dist/cli-new/hooks/useSetupWizard.js.map +1 -0
- package/dist/cli-new/hooks/useUpdateCheck.js +4 -3
- package/dist/cli-new/hooks/useUpdateCheck.js.map +1 -1
- package/dist/cli-new/index.js +2 -4
- package/dist/cli-new/index.js.map +1 -1
- package/dist/cli-new/services/CommandService.js +104 -0
- package/dist/cli-new/services/CommandService.js.map +1 -0
- package/dist/cli-new/services/GitService.js +91 -0
- package/dist/cli-new/services/GitService.js.map +1 -0
- package/dist/cli-new/services/MarieService.js +77 -0
- package/dist/cli-new/services/MarieService.js.map +1 -0
- package/dist/cli-new/services/auth-server.js +128 -0
- package/dist/cli-new/services/auth-server.js.map +1 -0
- package/dist/cli-new/styles/theme.js +17 -17
- package/dist/cli-new/styles/theme.js.map +1 -1
- package/dist/cli-new/utils/version.js +24 -0
- package/dist/cli-new/utils/version.js.map +1 -0
- package/dist/monolith/adapters/CliMarieAdapter.js +19 -18
- package/dist/monolith/adapters/CliMarieAdapter.js.map +1 -1
- package/dist/monolith/cli/CliFileSystemPort.js +17 -3
- package/dist/monolith/cli/CliFileSystemPort.js.map +1 -1
- package/dist/monolith/cli/MarieToolDefinitionsCLI.js +44 -33
- package/dist/monolith/cli/MarieToolDefinitionsCLI.js.map +1 -1
- package/dist/monolith/cli/index.js +11 -20
- package/dist/monolith/cli/index.js.map +1 -1
- package/dist/monolith/cli/services/JoyAutomationServiceCLI.js +15 -62
- package/dist/monolith/cli/services/JoyAutomationServiceCLI.js.map +1 -1
- package/dist/monolith/cli/storage.js +154 -65
- package/dist/monolith/cli/storage.js.map +1 -1
- package/dist/monolith/domain/joy/RitualService.js +44 -46
- package/dist/monolith/domain/joy/RitualService.js.map +1 -1
- package/dist/monolith/domain/marie/MarieCortex.js +148 -0
- package/dist/monolith/domain/marie/MarieCortex.js.map +1 -0
- package/dist/monolith/domain/marie/PersonalityRenderer.js +97 -0
- package/dist/monolith/domain/marie/PersonalityRenderer.js.map +1 -0
- package/dist/monolith/infrastructure/Configuration.js +68 -0
- package/dist/monolith/infrastructure/Configuration.js.map +1 -0
- package/dist/monolith/infrastructure/CoreInfrastructure.js +204 -0
- package/dist/monolith/infrastructure/CoreInfrastructure.js.map +1 -0
- package/dist/monolith/infrastructure/ai/agents/MarieAscendant.js +3 -3
- package/dist/monolith/infrastructure/ai/agents/MarieAscendant.js.map +1 -1
- package/dist/monolith/infrastructure/ai/context/ContextArchiveService.js +51 -57
- package/dist/monolith/infrastructure/ai/context/ContextArchiveService.js.map +1 -1
- package/dist/monolith/infrastructure/ai/context/ContextManager.js +142 -98
- package/dist/monolith/infrastructure/ai/context/ContextManager.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieEngine.js +104 -556
- package/dist/monolith/infrastructure/ai/core/MarieEngine.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieEventDispatcher.js +1 -37
- package/dist/monolith/infrastructure/ai/core/MarieEventDispatcher.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieLockManager.js +30 -5
- package/dist/monolith/infrastructure/ai/core/MarieLockManager.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieProgressTracker.js +176 -196
- package/dist/monolith/infrastructure/ai/core/MarieProgressTracker.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MariePulseService.js +41 -7
- package/dist/monolith/infrastructure/ai/core/MariePulseService.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieSanitizer.js +303 -63
- package/dist/monolith/infrastructure/ai/core/MarieSanitizer.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieSemaphore.js +47 -4
- package/dist/monolith/infrastructure/ai/core/MarieSemaphore.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieSession.js +95 -15
- package/dist/monolith/infrastructure/ai/core/MarieSession.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieStabilityMonitor.js +21 -0
- package/dist/monolith/infrastructure/ai/core/MarieStabilityMonitor.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieToolMender.js +12 -0
- package/dist/monolith/infrastructure/ai/core/MarieToolMender.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js +339 -481
- package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieVitality.js +238 -0
- package/dist/monolith/infrastructure/ai/core/MarieVitality.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/ReasoningBudget.js +23 -12
- package/dist/monolith/infrastructure/ai/core/ReasoningBudget.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/SessionLogService.js +9 -2
- package/dist/monolith/infrastructure/ai/core/SessionLogService.js.map +1 -1
- package/dist/monolith/infrastructure/ai/providers/AIProvider.js +402 -1
- package/dist/monolith/infrastructure/ai/providers/AIProvider.js.map +1 -1
- package/dist/monolith/infrastructure/ai/providers/DreamBeesProvider.js +114 -0
- package/dist/monolith/infrastructure/ai/providers/DreamBeesProvider.js.map +1 -0
- package/dist/monolith/infrastructure/ai/providers/OpenRouterProvider.js +426 -370
- package/dist/monolith/infrastructure/ai/providers/OpenRouterProvider.js.map +1 -1
- package/dist/monolith/infrastructure/ai/providers/OpenRouterStreamParser.js +235 -241
- package/dist/monolith/infrastructure/ai/providers/OpenRouterStreamParser.js.map +1 -1
- package/dist/monolith/infrastructure/ai/workerAi.js +185 -0
- package/dist/monolith/infrastructure/ai/workerAi.js.map +1 -0
- package/dist/monolith/infrastructure/config/ConfigService.js +216 -359
- package/dist/monolith/infrastructure/config/ConfigService.js.map +1 -1
- package/dist/monolith/infrastructure/joy/CognitiveRituals.js +8 -0
- package/dist/monolith/infrastructure/joy/CognitiveRituals.js.map +1 -0
- package/dist/monolith/infrastructure/joy/JoyTools.js +23 -43
- package/dist/monolith/infrastructure/joy/JoyTools.js.map +1 -1
- package/dist/monolith/infrastructure/persistence/MarieMindAutonomics.js +4 -0
- package/dist/monolith/infrastructure/persistence/MarieMindAutonomics.js.map +1 -0
- package/dist/monolith/infrastructure/persistence/MarieMindEngine.js +11 -0
- package/dist/monolith/infrastructure/persistence/MarieMindEngine.js.map +1 -0
- package/dist/monolith/infrastructure/persistence/NoormmeAutonomics.js +135 -0
- package/dist/monolith/infrastructure/persistence/NoormmeAutonomics.js.map +1 -0
- package/dist/monolith/infrastructure/persistence/NoormmeEngine.js +523 -0
- package/dist/monolith/infrastructure/persistence/NoormmeEngine.js.map +1 -0
- package/dist/monolith/infrastructure/persistence/NoormmeSchema.js +179 -0
- package/dist/monolith/infrastructure/persistence/NoormmeSchema.js.map +1 -0
- package/dist/monolith/infrastructure/persistence/NoormmeSeeder.js +94 -0
- package/dist/monolith/infrastructure/persistence/NoormmeSeeder.js.map +1 -0
- package/dist/monolith/infrastructure/persistence/NoormmeTools.js +371 -0
- package/dist/monolith/infrastructure/persistence/NoormmeTools.js.map +1 -0
- package/dist/monolith/infrastructure/services/MarieMemoryStore.js +133 -134
- package/dist/monolith/infrastructure/services/MarieMemoryStore.js.map +1 -1
- package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js +6 -1578
- package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js.map +1 -1
- package/dist/monolith/infrastructure/tools/PureStreamParser.js +68 -80
- package/dist/monolith/infrastructure/tools/PureStreamParser.js.map +1 -1
- package/dist/monolith/infrastructure/tools/SharedToolDefinitions.js +12 -11
- package/dist/monolith/infrastructure/tools/SharedToolDefinitions.js.map +1 -1
- package/dist/monolith/infrastructure/tools/SovereignTools.js +326 -0
- package/dist/monolith/infrastructure/tools/SovereignTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/ToolRegistry.js +45 -26
- package/dist/monolith/infrastructure/tools/ToolRegistry.js.map +1 -1
- package/dist/monolith/infrastructure/tools/definitions/AnalysisTools.js +232 -0
- package/dist/monolith/infrastructure/tools/definitions/AnalysisTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/AutomationTools.js +274 -0
- package/dist/monolith/infrastructure/tools/definitions/AutomationTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/ContextTools.js +71 -0
- package/dist/monolith/infrastructure/tools/definitions/ContextTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/CoreTools.js +37 -0
- package/dist/monolith/infrastructure/tools/definitions/CoreTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/DiagnosticTools.js +154 -0
- package/dist/monolith/infrastructure/tools/definitions/DiagnosticTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/NavigationTools.js +197 -0
- package/dist/monolith/infrastructure/tools/definitions/NavigationTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/PlanningTools.js +300 -0
- package/dist/monolith/infrastructure/tools/definitions/PlanningTools.js.map +1 -0
- package/dist/monolith/plumbing/Plumbing.js +238 -0
- package/dist/monolith/plumbing/Plumbing.js.map +1 -0
- package/dist/monolith/plumbing/PlumbingAnalysis.js +109 -0
- package/dist/monolith/plumbing/PlumbingAnalysis.js.map +1 -0
- package/dist/monolith/plumbing/PlumbingSystem.js +169 -0
- package/dist/monolith/plumbing/PlumbingSystem.js.map +1 -0
- package/dist/monolith/plumbing/analysis/ComplexityService.js +30 -34
- package/dist/monolith/plumbing/analysis/ComplexityService.js.map +1 -1
- package/dist/monolith/plumbing/analysis/DependencyService.js +55 -44
- package/dist/monolith/plumbing/analysis/DependencyService.js.map +1 -1
- package/dist/monolith/plumbing/analysis/DiscoveryService.js +40 -42
- package/dist/monolith/plumbing/analysis/DiscoveryService.js.map +1 -1
- package/dist/monolith/plumbing/analysis/JoyMapService.js +52 -56
- package/dist/monolith/plumbing/analysis/JoyMapService.js.map +1 -1
- package/dist/monolith/plumbing/analysis/LintService.js +118 -118
- package/dist/monolith/plumbing/analysis/LintService.js.map +1 -1
- package/dist/monolith/plumbing/analysis/MarieSentinelService.js +278 -269
- package/dist/monolith/plumbing/analysis/MarieSentinelService.js.map +1 -1
- package/dist/monolith/plumbing/analysis/QualityGuardrailService.js +116 -114
- package/dist/monolith/plumbing/analysis/QualityGuardrailService.js.map +1 -1
- package/dist/monolith/plumbing/analysis/SurgicalMender.js +57 -59
- package/dist/monolith/plumbing/analysis/SurgicalMender.js.map +1 -1
- package/dist/monolith/plumbing/analysis/TestService.js +89 -89
- package/dist/monolith/plumbing/analysis/TestService.js.map +1 -1
- package/dist/monolith/plumbing/filesystem/FileService.js +123 -195
- package/dist/monolith/plumbing/filesystem/FileService.js.map +1 -1
- package/dist/monolith/plumbing/filesystem/PathResolver.js +7 -8
- package/dist/monolith/plumbing/filesystem/PathResolver.js.map +1 -1
- package/dist/monolith/plumbing/git/GitService.js +4 -4
- package/dist/monolith/plumbing/git/GitService.js.map +1 -1
- package/dist/monolith/plumbing/lsp/SymbolService.js +5 -34
- package/dist/monolith/plumbing/lsp/SymbolService.js.map +1 -1
- package/dist/monolith/plumbing/terminal/ProcessRegistry.js +20 -22
- package/dist/monolith/plumbing/terminal/ProcessRegistry.js.map +1 -1
- package/dist/monolith/plumbing/terminal/TerminalService.js +127 -136
- package/dist/monolith/plumbing/terminal/TerminalService.js.map +1 -1
- package/dist/monolith/plumbing/utils/EnvironmentUtils.js +3 -23
- package/dist/monolith/plumbing/utils/EnvironmentUtils.js.map +1 -1
- package/dist/monolith/plumbing/utils/JsonUtils.js +252 -311
- package/dist/monolith/plumbing/utils/JsonUtils.js.map +1 -1
- package/dist/monolith/plumbing/utils/MutexUtils.js.map +1 -1
- package/dist/monolith/plumbing/utils/PlumbingCore.js +549 -0
- package/dist/monolith/plumbing/utils/PlumbingCore.js.map +1 -0
- package/dist/monolith/plumbing/utils/PrefixTree.js +61 -114
- package/dist/monolith/plumbing/utils/PrefixTree.js.map +1 -1
- package/dist/monolith/plumbing/utils/StreamTagDetector.js +89 -127
- package/dist/monolith/plumbing/utils/StreamTagDetector.js.map +1 -1
- package/dist/monolith/plumbing/utils/StringUtils.js +87 -89
- package/dist/monolith/plumbing/utils/StringUtils.js.map +1 -1
- package/dist/monolith/runtime/MarieRuntime.js +76 -417
- package/dist/monolith/runtime/MarieRuntime.js.map +1 -1
- package/dist/monolith/runtime/RuntimeAdapterBase.js +1 -1
- package/dist/monolith/runtime/RuntimeAdapterBase.js.map +1 -1
- package/dist/monolith/runtime/providerFactory.js +1 -7
- package/dist/monolith/runtime/providerFactory.js.map +1 -1
- package/dist/monolith/services/HealthService.js +29 -32
- package/dist/monolith/services/HealthService.js.map +1 -1
- package/dist/monolith/services/JoyAutomationService.js +58 -95
- package/dist/monolith/services/JoyAutomationService.js.map +1 -1
- package/dist/monolith/services/MarieAutomationService.js +59 -0
- package/dist/monolith/services/MarieAutomationService.js.map +1 -0
- package/dist/monolith/services/MarieGhostService.js +46 -161
- package/dist/monolith/services/MarieGhostService.js.map +1 -1
- package/dist/monolith/services/MarieServices.js +102 -0
- package/dist/monolith/services/MarieServices.js.map +1 -0
- package/dist/monolith/services/MarieTypes.js +2 -0
- package/dist/monolith/services/MarieTypes.js.map +1 -0
- package/dist/monolith/services/UpdateService.js +47 -49
- package/dist/monolith/services/UpdateService.js.map +1 -1
- package/dist/prompts.js +11 -5
- package/dist/prompts.js.map +1 -1
- package/dist/test_prefix_tree.js +9 -9
- package/dist/test_prefix_tree.js.map +1 -1
- package/package.json +18 -88
- package/run_test.js +5 -0
- package/.marie_visual_verify_1771225696548/progress_bar_check.txt +0 -1
- package/dist/extension.cjs +0 -635
- package/dist/extension.js +0 -473
- package/dist/extension.js.map +0 -1
- package/dist/monolith/adapters/VscodeMarieAdapter.js +0 -81
- package/dist/monolith/adapters/VscodeMarieAdapter.js.map +0 -1
- package/dist/monolith/domain/joy/JoyTools.js +0 -535
- package/dist/monolith/domain/joy/JoyTools.js.map +0 -1
- package/dist/monolith/infrastructure/ai/agents/MarieYOLO.js +0 -207
- package/dist/monolith/infrastructure/ai/agents/MarieYOLO.js.map +0 -1
- package/dist/monolith/infrastructure/ai/core/GhostPort.js +0 -2
- package/dist/monolith/infrastructure/ai/core/GhostPort.js.map +0 -1
- package/dist/monolith/infrastructure/ai/core/MarieYOLOTypes.js +0 -2
- package/dist/monolith/infrastructure/ai/core/MarieYOLOTypes.js.map +0 -1
- package/dist/monolith/infrastructure/ai/core/VscodeFileSystemPort.js +0 -33
- package/dist/monolith/infrastructure/ai/core/VscodeFileSystemPort.js.map +0 -1
- package/dist/monolith/infrastructure/ai/providers/AnthropicProvider.js +0 -148
- package/dist/monolith/infrastructure/ai/providers/AnthropicProvider.js.map +0 -1
- package/dist/monolith/infrastructure/ai/providers/CerebrasProvider.js +0 -208
- package/dist/monolith/infrastructure/ai/providers/CerebrasProvider.js.map +0 -1
- package/dist/monolith/plumbing/ui/DecorationService.js +0 -54
- package/dist/monolith/plumbing/ui/DecorationService.js.map +0 -1
- package/dist/monolith/services/JoyLogService.js +0 -48
- package/dist/monolith/services/JoyLogService.js.map +0 -1
- package/dist/monolith/services/JoyService.js +0 -209
- package/dist/monolith/services/JoyService.js.map +0 -1
- package/dist/monolith/services/MarieSCMProvider.js +0 -41
- package/dist/monolith/services/MarieSCMProvider.js.map +0 -1
- package/dist/test_agent_stream_control_plane.js +0 -170
- package/dist/test_agent_stream_control_plane.js.map +0 -1
- package/dist/test_strategy_integration.js +0 -114
- package/dist/test_strategy_integration.js.map +0 -1
- package/dist/test_streaming_fragility.js +0 -191
- package/dist/test_streaming_fragility.js.map +0 -1
- package/dist/webview-ui/App.js +0 -16
- package/dist/webview-ui/App.js.map +0 -1
- package/dist/webview-ui/Providers.js +0 -6
- package/dist/webview-ui/Providers.js.map +0 -1
- package/dist/webview-ui/components/ApprovalPanel.js +0 -8
- package/dist/webview-ui/components/ApprovalPanel.js.map +0 -1
- package/dist/webview-ui/components/ChatPanel.js +0 -19
- package/dist/webview-ui/components/ChatPanel.js.map +0 -1
- package/dist/webview-ui/components/Composer.js +0 -19
- package/dist/webview-ui/components/Composer.js.map +0 -1
- package/dist/webview-ui/components/HeaderBar.js +0 -5
- package/dist/webview-ui/components/HeaderBar.js.map +0 -1
- package/dist/webview-ui/components/SessionList.js +0 -14
- package/dist/webview-ui/components/SessionList.js.map +0 -1
- package/dist/webview-ui/context/WebviewStateContext.js +0 -146
- package/dist/webview-ui/context/WebviewStateContext.js.map +0 -1
- package/dist/webview-ui/main.css +0 -1
- package/dist/webview-ui/main.js +0 -108
- package/dist/webview-ui/main.js.map +0 -1
- package/dist/webview-ui/types.js +0 -2
- package/dist/webview-ui/types.js.map +0 -1
- package/dist/webview-ui/vscode.js +0 -4
- package/dist/webview-ui/vscode.js.map +0 -1
- package/lint_output.txt +0 -705
- package/lint_output_v2.txt +0 -711
- 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":"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"}
|
|
@@ -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
|