@noorm/marie-cli 0.1.18 → 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/App.js +16 -63
- package/dist/cli-new/components/App.js.map +1 -1
- package/dist/cli-new/components/ApprovalDialog.js +2 -1
- package/dist/cli-new/components/ApprovalDialog.js.map +1 -1
- package/dist/cli-new/components/Banner.js +4 -3
- 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 +13 -7
- package/dist/cli-new/components/Header.js.map +1 -1
- package/dist/cli-new/components/InputArea.js +73 -12
- package/dist/cli-new/components/InputArea.js.map +1 -1
- package/dist/cli-new/components/MessageBubble.js +26 -18
- package/dist/cli-new/components/MessageBubble.js.map +1 -1
- package/dist/cli-new/components/SessionSwitcher.js +4 -7
- 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/utils/version.js +24 -0
- package/dist/cli-new/utils/version.js.map +1 -0
- package/dist/monolith/adapters/CliMarieAdapter.js +12 -11
- 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 +39 -31
- package/dist/monolith/cli/MarieToolDefinitionsCLI.js.map +1 -1
- package/dist/monolith/cli/index.js +5 -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 +142 -72
- 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 +6 -27
- package/dist/monolith/infrastructure/ai/context/ContextArchiveService.js.map +1 -1
- package/dist/monolith/infrastructure/ai/context/ContextManager.js +142 -131
- package/dist/monolith/infrastructure/ai/context/ContextManager.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieEngine.js +115 -1077
- 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 +6 -1
- package/dist/monolith/infrastructure/ai/core/MarieLockManager.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieProgressTracker.js +172 -221
- package/dist/monolith/infrastructure/ai/core/MarieProgressTracker.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieSanitizer.js +292 -141
- package/dist/monolith/infrastructure/ai/core/MarieSanitizer.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js +331 -614
- 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/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 -392
- 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 -503
- package/dist/monolith/infrastructure/config/ConfigService.js.map +1 -1
- package/dist/monolith/infrastructure/joy/CognitiveRituals.js +4 -165
- package/dist/monolith/infrastructure/joy/CognitiveRituals.js.map +1 -1
- package/dist/monolith/infrastructure/joy/JoyTools.js +14 -47
- 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 +123 -106
- package/dist/monolith/infrastructure/persistence/NoormmeAutonomics.js.map +1 -1
- package/dist/monolith/infrastructure/persistence/NoormmeEngine.js +508 -63
- package/dist/monolith/infrastructure/persistence/NoormmeEngine.js.map +1 -1
- package/dist/monolith/infrastructure/persistence/NoormmeSchema.js +68 -39
- package/dist/monolith/infrastructure/persistence/NoormmeSchema.js.map +1 -1
- package/dist/monolith/infrastructure/persistence/NoormmeSeeder.js +80 -67
- package/dist/monolith/infrastructure/persistence/NoormmeSeeder.js.map +1 -1
- package/dist/monolith/infrastructure/persistence/NoormmeTools.js +122 -75
- package/dist/monolith/infrastructure/persistence/NoormmeTools.js.map +1 -1
- 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 -30
- 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 +39 -153
- package/dist/monolith/infrastructure/tools/definitions/AnalysisTools.js.map +1 -1
- package/dist/monolith/infrastructure/tools/definitions/AutomationTools.js +31 -46
- package/dist/monolith/infrastructure/tools/definitions/AutomationTools.js.map +1 -1
- package/dist/monolith/infrastructure/tools/definitions/ContextTools.js +41 -13
- package/dist/monolith/infrastructure/tools/definitions/ContextTools.js.map +1 -1
- package/dist/monolith/infrastructure/tools/definitions/CoreTools.js +10 -14
- package/dist/monolith/infrastructure/tools/definitions/CoreTools.js.map +1 -1
- package/dist/monolith/infrastructure/tools/definitions/DiagnosticTools.js +39 -70
- package/dist/monolith/infrastructure/tools/definitions/DiagnosticTools.js.map +1 -1
- package/dist/monolith/infrastructure/tools/definitions/NavigationTools.js +30 -181
- package/dist/monolith/infrastructure/tools/definitions/NavigationTools.js.map +1 -1
- package/dist/monolith/infrastructure/tools/definitions/PlanningTools.js +12 -9
- package/dist/monolith/infrastructure/tools/definitions/PlanningTools.js.map +1 -1
- 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 -268
- 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 -141
- 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/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 -499
- 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 -173
- 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 -89
- package/run_test.js +5 -0
- package/.marie_visual_verify_1771225696548/progress_bar_check.txt +0 -1
- package/dist/extension.cjs +0 -1155
- package/dist/extension.js +0 -474
- 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/infrastructure/ai/core/GhostPort.js +0 -2
- package/dist/monolith/infrastructure/ai/core/GhostPort.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 -154
- package/dist/monolith/infrastructure/ai/providers/AnthropicProvider.js.map +0 -1
- package/dist/monolith/infrastructure/ai/providers/CerebrasProvider.js +0 -214
- 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/webview-ui/main.css +0 -1
- package/dist/webview-ui/main.js +0 -108
- package/lint_output.txt +0 -705
- package/lint_output_v2.txt +0 -711
- package/test-mind-p6.sqlite +0 -0
- package/test-mind-p6.sqlite-shm +0 -0
- package/test-mind-p6.sqlite-wal +0 -0
|
@@ -1,151 +1,150 @@
|
|
|
1
1
|
import * as fs from "fs";
|
|
2
2
|
import * as path from "path";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
catch (e) {
|
|
12
|
-
// Ignore ENOENT, warn on others
|
|
13
|
-
if (e.code !== "ENOENT") {
|
|
14
|
-
console.warn("[MarieMemoryStore] Failed to load memory async:", e);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
return {
|
|
18
|
-
recoveryPatterns: [],
|
|
19
|
-
lifetimeToolStats: {},
|
|
20
|
-
highScores: [],
|
|
21
|
-
strategyStats: {},
|
|
22
|
-
intuition: {},
|
|
23
|
-
};
|
|
3
|
+
import { safeStringify, safeGetEntries } from "../ai/core/MarieSanitizer.js";
|
|
4
|
+
const memoryPath = path.join(process.cwd(), ".marie", "swarm_memory.json");
|
|
5
|
+
export async function loadAsync() {
|
|
6
|
+
try {
|
|
7
|
+
await fs.promises.access(memoryPath);
|
|
8
|
+
const data = await fs.promises.readFile(memoryPath, "utf8");
|
|
9
|
+
return JSON.parse(data);
|
|
24
10
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
await fs.promises.writeFile(this.memoryPath, JSON.stringify(memory, null, 2));
|
|
30
|
-
}
|
|
31
|
-
catch (e) {
|
|
32
|
-
console.error("[MarieMemoryStore] Failed to save memory async:", e);
|
|
11
|
+
catch (e) {
|
|
12
|
+
// Ignore ENOENT, warn on others
|
|
13
|
+
if (e.code !== "ENOENT") {
|
|
14
|
+
console.warn("[MarieMemoryStore] Failed to load memory async:", e);
|
|
33
15
|
}
|
|
34
16
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
17
|
+
return {
|
|
18
|
+
recoveryPatterns: [],
|
|
19
|
+
lifetimeToolStats: {},
|
|
20
|
+
highScores: [],
|
|
21
|
+
strategyStats: {},
|
|
22
|
+
intuition: {},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export async function saveAsync(memory) {
|
|
26
|
+
try {
|
|
27
|
+
const dir = path.dirname(memoryPath);
|
|
28
|
+
await fs.promises.mkdir(dir, { recursive: true });
|
|
29
|
+
await fs.promises.writeFile(memoryPath, safeStringify(memory, 2));
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
console.error("[MarieMemoryStore] Failed to save memory async:", e);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Keep synchronous load for constructor initialization (fallback)
|
|
36
|
+
export function loadSync() {
|
|
37
|
+
try {
|
|
38
|
+
if (fs.existsSync(memoryPath)) {
|
|
39
|
+
const data = fs.readFileSync(memoryPath, "utf8");
|
|
40
|
+
return JSON.parse(data);
|
|
45
41
|
}
|
|
46
|
-
return {
|
|
47
|
-
recoveryPatterns: [],
|
|
48
|
-
lifetimeToolStats: {},
|
|
49
|
-
highScores: [],
|
|
50
|
-
strategyStats: {},
|
|
51
|
-
intuition: {},
|
|
52
|
-
};
|
|
53
42
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
totalDuration: 0,
|
|
86
|
-
};
|
|
87
|
-
stats.total++;
|
|
88
|
-
if (exec.success)
|
|
89
|
-
stats.successes++;
|
|
90
|
-
stats.totalDuration += exec.durationMs;
|
|
91
|
-
memory.lifetimeToolStats[exec.name] = stats;
|
|
43
|
+
catch (e) {
|
|
44
|
+
console.warn("[MarieMemoryStore] Failed to load memory sync:", e);
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
recoveryPatterns: [],
|
|
48
|
+
lifetimeToolStats: {},
|
|
49
|
+
highScores: [],
|
|
50
|
+
strategyStats: {},
|
|
51
|
+
intuition: {},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
let persistencePromise = Promise.resolve();
|
|
55
|
+
/**
|
|
56
|
+
* Updates cumulative stats with data from a single run (Async).
|
|
57
|
+
* Hardened with a persistence lock to prevent race conditions during parallel turns.
|
|
58
|
+
*/
|
|
59
|
+
export async function syncRun(recoveryPatterns, toolExecutions, sessionScore, intuition) {
|
|
60
|
+
// ATOMIC INTEGRITY: Serialize all persistence operations
|
|
61
|
+
const previous = persistencePromise;
|
|
62
|
+
let resolveLock;
|
|
63
|
+
persistencePromise = new Promise((resolve) => {
|
|
64
|
+
resolveLock = resolve;
|
|
65
|
+
});
|
|
66
|
+
try {
|
|
67
|
+
await previous;
|
|
68
|
+
const memory = await loadAsync();
|
|
69
|
+
// 1. Sync Recovery Patterns (Merge by failedTool + recoveryTool)
|
|
70
|
+
for (const p of recoveryPatterns) {
|
|
71
|
+
const existing = memory.recoveryPatterns.find((ep) => ep.failedTool === p.failedTool && ep.recoveryTool === p.recoveryTool);
|
|
72
|
+
if (existing) {
|
|
73
|
+
existing.count += p.count;
|
|
92
74
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
memory.highScores.sort((a, b) => b.score - a.score);
|
|
96
|
-
memory.highScores = memory.highScores.slice(0, 10);
|
|
97
|
-
// 4. Sync Intuition
|
|
98
|
-
for (const [file, patterns] of Object.entries(intuition)) {
|
|
99
|
-
const existing = memory.intuition[file] || [];
|
|
100
|
-
const merged = Array.from(new Set([...existing, ...patterns]));
|
|
101
|
-
memory.intuition[file] = merged.slice(-10); // Keep last 10 patterns per file globally
|
|
75
|
+
else {
|
|
76
|
+
memory.recoveryPatterns.push(p);
|
|
102
77
|
}
|
|
103
|
-
await this.saveAsync(memory);
|
|
104
|
-
}
|
|
105
|
-
finally {
|
|
106
|
-
resolveLock();
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
// Agent Performance Persistence
|
|
110
|
-
static agentPerformancePath = path.join(process.cwd(), ".marie", "agent_performance.json");
|
|
111
|
-
static performancePersistencePromise = Promise.resolve();
|
|
112
|
-
/**
|
|
113
|
-
* Save agent performance data for cross-session persistence
|
|
114
|
-
*/
|
|
115
|
-
static async syncAgentPerformance(data) {
|
|
116
|
-
// ATOMIC INTEGRITY: Serialize performance persistence
|
|
117
|
-
const previous = this.performancePersistencePromise;
|
|
118
|
-
let resolveLock;
|
|
119
|
-
this.performancePersistencePromise = new Promise((resolve) => {
|
|
120
|
-
resolveLock = resolve;
|
|
121
|
-
});
|
|
122
|
-
try {
|
|
123
|
-
await previous;
|
|
124
|
-
const dir = path.dirname(this.agentPerformancePath);
|
|
125
|
-
await fs.promises.mkdir(dir, { recursive: true });
|
|
126
|
-
await fs.promises.writeFile(this.agentPerformancePath, JSON.stringify(data, null, 2));
|
|
127
78
|
}
|
|
128
|
-
|
|
129
|
-
|
|
79
|
+
// 2. Sync Lifetime Tool Stats
|
|
80
|
+
for (const exec of toolExecutions) {
|
|
81
|
+
const stats = memory.lifetimeToolStats[exec.name] || {
|
|
82
|
+
total: 0,
|
|
83
|
+
successes: 0,
|
|
84
|
+
totalDuration: 0,
|
|
85
|
+
};
|
|
86
|
+
stats.total++;
|
|
87
|
+
if (exec.success)
|
|
88
|
+
stats.successes++;
|
|
89
|
+
stats.totalDuration += exec.durationMs;
|
|
90
|
+
memory.lifetimeToolStats[exec.name] = stats;
|
|
130
91
|
}
|
|
131
|
-
|
|
132
|
-
|
|
92
|
+
// 3. Sync High Scores (Keep top 10)
|
|
93
|
+
memory.highScores.push({ ...sessionScore, timestamp: Date.now() });
|
|
94
|
+
memory.highScores.sort((a, b) => b.score - a.score);
|
|
95
|
+
memory.highScores = memory.highScores.slice(0, 10);
|
|
96
|
+
// 4. Sync Intuition
|
|
97
|
+
const intuitionEntries = safeGetEntries(intuition, 50);
|
|
98
|
+
for (const [file, patterns] of intuitionEntries) {
|
|
99
|
+
const existing = memory.intuition[file] || [];
|
|
100
|
+
const merged = Array.from(new Set([...existing, ...patterns]));
|
|
101
|
+
memory.intuition[file] = merged.slice(-10); // Keep last 10 patterns per file globally
|
|
133
102
|
}
|
|
103
|
+
await saveAsync(memory);
|
|
134
104
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
105
|
+
finally {
|
|
106
|
+
resolveLock();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Agent Performance Persistence
|
|
110
|
+
const agentPerformancePath = path.join(process.cwd(), ".marie", "agent_performance.json");
|
|
111
|
+
let performancePersistencePromise = Promise.resolve();
|
|
112
|
+
/**
|
|
113
|
+
* Save agent performance data for cross-session persistence
|
|
114
|
+
*/
|
|
115
|
+
export async function syncAgentPerformance(data) {
|
|
116
|
+
// ATOMIC INTEGRITY: Serialize performance persistence
|
|
117
|
+
const previous = performancePersistencePromise;
|
|
118
|
+
let resolveLock;
|
|
119
|
+
performancePersistencePromise = new Promise((resolve) => {
|
|
120
|
+
resolveLock = resolve;
|
|
121
|
+
});
|
|
122
|
+
try {
|
|
123
|
+
await previous;
|
|
124
|
+
const dir = path.dirname(agentPerformancePath);
|
|
125
|
+
await fs.promises.mkdir(dir, { recursive: true });
|
|
126
|
+
await fs.promises.writeFile(agentPerformancePath, safeStringify(data, 2));
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
console.error("[MarieMemoryStore] Failed to save agent performance:", e);
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
resolveLock();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Load persisted agent performance data
|
|
137
|
+
*/
|
|
138
|
+
export function loadAgentPerformance() {
|
|
139
|
+
try {
|
|
140
|
+
if (fs.existsSync(agentPerformancePath)) {
|
|
141
|
+
const data = fs.readFileSync(agentPerformancePath, "utf8");
|
|
142
|
+
return JSON.parse(data);
|
|
147
143
|
}
|
|
148
|
-
return null;
|
|
149
144
|
}
|
|
145
|
+
catch (e) {
|
|
146
|
+
console.warn("[MarieMemoryStore] Failed to load agent performance:", e);
|
|
147
|
+
}
|
|
148
|
+
return null;
|
|
150
149
|
}
|
|
151
150
|
//# sourceMappingURL=MarieMemoryStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarieMemoryStore.js","sourceRoot":"","sources":["../../../../src/monolith/infrastructure/services/MarieMemoryStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"MarieMemoryStore.js","sourceRoot":"","sources":["../../../../src/monolith/infrastructure/services/MarieMemoryStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import { registerPlanningTools } from "./definitions/PlanningTools.js";
|
|
8
|
-
import { registerAutomationTools } from "./definitions/AutomationTools.js";
|
|
9
|
-
import { registerContextTools } from "./definitions/ContextTools.js";
|
|
10
|
-
/**
|
|
11
|
-
* registerMarieTools - Entry point for tool registration.
|
|
12
|
-
* Tools are broken down by concern for clarity and maintenance.
|
|
13
|
-
*/
|
|
14
|
-
export function registerMarieTools(registry, automationService) {
|
|
15
|
-
// 1. Core Platform Tools (FS, Git, etc)
|
|
16
|
-
registerCoreTools(registry);
|
|
17
|
-
// 2. Specialized Persistent Sovereign Mind Tools
|
|
18
|
-
registerNoormmeTools(registry);
|
|
19
|
-
// 3. Diagnostics & Hardening
|
|
20
|
-
registerDiagnosticTools(registry);
|
|
21
|
-
// 4. Codebase Navigation & Semantic Search
|
|
22
|
-
registerNavigationTools(registry);
|
|
23
|
-
// 5. Deep Structural Analysis
|
|
24
|
-
registerAnalysisTools(registry, automationService);
|
|
25
|
-
// 6. Strategic Planning & Roadmapping
|
|
26
|
-
registerPlanningTools(registry);
|
|
27
|
-
// 7. Context Anchoring & Long-term Memory
|
|
28
|
-
registerContextTools(registry);
|
|
29
|
-
// 8. High-order Automation & Maintenance
|
|
30
|
-
registerAutomationTools(registry, automationService);
|
|
1
|
+
import { registerSovereignTools } from "./SovereignTools.js";
|
|
2
|
+
export function registerMarieTools(automationService) {
|
|
3
|
+
// Pass 17: Sovereign Tool Consolidation
|
|
4
|
+
// This is the new high-performance tool graph.
|
|
5
|
+
// We no longer shard tool definitions across multiple files.
|
|
6
|
+
registerSovereignTools(automationService);
|
|
31
7
|
}
|
|
32
8
|
//# sourceMappingURL=MarieToolDefinitions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarieToolDefinitions.js","sourceRoot":"","sources":["../../../../src/monolith/infrastructure/tools/MarieToolDefinitions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MarieToolDefinitions.js","sourceRoot":"","sources":["../../../../src/monolith/infrastructure/tools/MarieToolDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,MAAM,UAAU,kBAAkB,CAAC,iBAAyC;IAC1E,wCAAwC;IACxC,+CAA+C;IAC/C,6DAA6D;IAC7D,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -1,80 +1,11 @@
|
|
|
1
|
+
const LINE_START_REGEX = /[{"\s,]"line_start"\s*:\s*(\d+)/;
|
|
1
2
|
/**
|
|
2
|
-
*
|
|
3
|
+
* Creates a pure logical parser for streaming tool call JSON.
|
|
3
4
|
* Zero external dependencies, focused solely on stateful string transformation.
|
|
4
5
|
*/
|
|
5
|
-
export
|
|
6
|
-
buffers = new Map();
|
|
7
|
-
|
|
8
|
-
static KEY_PATTERNS = new Map([
|
|
9
|
-
['"path":', /[{"\s,]"path":/],
|
|
10
|
-
['"content":', /[{"\s,]"content":/],
|
|
11
|
-
['"old_content":', /[{"\s,]"old_content":/],
|
|
12
|
-
['"search":', /[{"\s,]"search":/],
|
|
13
|
-
['"replace":', /[{"\s,]"replace":/],
|
|
14
|
-
]);
|
|
15
|
-
static LINE_START_REGEX = /[{"\s,]"line_start"\s*:\s*(\d+)/;
|
|
16
|
-
append(toolCallId, delta) {
|
|
17
|
-
const currentBuffer = (this.buffers.get(toolCallId) || "") + delta;
|
|
18
|
-
// STABILITY: If the buffer ends with an unescaped backslash, don't parse it yet
|
|
19
|
-
// as it might be the start of a multi-token escape sequence like \uXXXX or \n
|
|
20
|
-
if (currentBuffer.endsWith("\\")) {
|
|
21
|
-
let backslashes = 0;
|
|
22
|
-
for (let i = currentBuffer.length - 1; i >= 0 && currentBuffer[i] === "\\"; i--) {
|
|
23
|
-
backslashes++;
|
|
24
|
-
}
|
|
25
|
-
if (backslashes % 2 !== 0) {
|
|
26
|
-
// Odd number of backslashes at the end - save the last one for the next chunk
|
|
27
|
-
this.buffers.set(toolCallId, currentBuffer.slice(0, -1));
|
|
28
|
-
return this.parse(currentBuffer.slice(0, -1));
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
this.buffers.set(toolCallId, currentBuffer);
|
|
32
|
-
return this.parse(currentBuffer);
|
|
33
|
-
}
|
|
34
|
-
parse(buffer) {
|
|
35
|
-
const result = {};
|
|
36
|
-
result.path = this.extractString(buffer, '"path":');
|
|
37
|
-
result.content = this.extractString(buffer, '"content":');
|
|
38
|
-
result.old_content = this.extractString(buffer, '"old_content":');
|
|
39
|
-
result.search = this.extractString(buffer, '"search":');
|
|
40
|
-
result.replace = this.extractString(buffer, '"replace":');
|
|
41
|
-
// Hardened numeric parsing for line_start (ensure it's a key-value pair and not hallucinated text)
|
|
42
|
-
const lineStartMatch = buffer.match(PureStreamParser.LINE_START_REGEX);
|
|
43
|
-
if (lineStartMatch) {
|
|
44
|
-
const val = parseInt(lineStartMatch[1]);
|
|
45
|
-
if (!isNaN(val)) {
|
|
46
|
-
result.line_start = val;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return result;
|
|
50
|
-
}
|
|
51
|
-
extractString(buffer, key) {
|
|
52
|
-
const keyIndex = buffer.indexOf(key);
|
|
53
|
-
if (keyIndex === -1)
|
|
54
|
-
return undefined;
|
|
55
|
-
// Ensure key is a property name (preceded by whitespace/delimiter)
|
|
56
|
-
// and NOT inside an existing string context (Stateful Audit)
|
|
57
|
-
if (this.isInsideString(buffer, keyIndex))
|
|
58
|
-
return undefined;
|
|
59
|
-
if (keyIndex > 0) {
|
|
60
|
-
const prev = buffer[keyIndex - 1];
|
|
61
|
-
if (!["{", ",", " ", "\t", "\n", "\r"].includes(prev))
|
|
62
|
-
return undefined;
|
|
63
|
-
}
|
|
64
|
-
const start = keyIndex + key.length;
|
|
65
|
-
const firstQuote = buffer.indexOf('"', start);
|
|
66
|
-
if (firstQuote === -1)
|
|
67
|
-
return undefined;
|
|
68
|
-
const rawContent = buffer.substring(firstQuote + 1);
|
|
69
|
-
const closingQuoteIndex = this.findClosingQuote(rawContent);
|
|
70
|
-
if (closingQuoteIndex !== -1) {
|
|
71
|
-
return this.unescape(rawContent.substring(0, closingQuoteIndex));
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
return this.unescape(rawContent);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
isInsideString(buffer, index) {
|
|
6
|
+
export function createPureStreamParser() {
|
|
7
|
+
const buffers = new Map();
|
|
8
|
+
function isInsideString(buffer, index) {
|
|
78
9
|
let inString = false;
|
|
79
10
|
let escaped = false;
|
|
80
11
|
for (let i = 0; i < index; i++) {
|
|
@@ -93,7 +24,7 @@ export class PureStreamParser {
|
|
|
93
24
|
}
|
|
94
25
|
return inString;
|
|
95
26
|
}
|
|
96
|
-
findClosingQuote(str) {
|
|
27
|
+
function findClosingQuote(str) {
|
|
97
28
|
for (let i = 0; i < str.length; i++) {
|
|
98
29
|
if (str[i] === '"') {
|
|
99
30
|
let backslashes = 0;
|
|
@@ -106,7 +37,7 @@ export class PureStreamParser {
|
|
|
106
37
|
}
|
|
107
38
|
return -1;
|
|
108
39
|
}
|
|
109
|
-
unescape(str) {
|
|
40
|
+
function unescape(str) {
|
|
110
41
|
return str.replace(/\\(u[0-9a-fA-F]{4}|[^u])/g, (_, escape) => {
|
|
111
42
|
if (escape.startsWith("u")) {
|
|
112
43
|
const hex = escape.substring(1);
|
|
@@ -137,11 +68,68 @@ export class PureStreamParser {
|
|
|
137
68
|
}
|
|
138
69
|
});
|
|
139
70
|
}
|
|
140
|
-
|
|
141
|
-
|
|
71
|
+
function extractString(buffer, key) {
|
|
72
|
+
const keyIndex = buffer.indexOf(key);
|
|
73
|
+
if (keyIndex === -1)
|
|
74
|
+
return undefined;
|
|
75
|
+
if (isInsideString(buffer, keyIndex))
|
|
76
|
+
return undefined;
|
|
77
|
+
if (keyIndex > 0) {
|
|
78
|
+
const prev = buffer[keyIndex - 1];
|
|
79
|
+
if (!["{", ",", " ", "\t", "\n", "\r"].includes(prev))
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
const start = keyIndex + key.length;
|
|
83
|
+
const firstQuote = buffer.indexOf('"', start);
|
|
84
|
+
if (firstQuote === -1)
|
|
85
|
+
return undefined;
|
|
86
|
+
const rawContent = buffer.substring(firstQuote + 1);
|
|
87
|
+
const closingQuoteIndex = findClosingQuote(rawContent);
|
|
88
|
+
if (closingQuoteIndex !== -1) {
|
|
89
|
+
return unescape(rawContent.substring(0, closingQuoteIndex));
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
return unescape(rawContent);
|
|
93
|
+
}
|
|
142
94
|
}
|
|
143
|
-
|
|
144
|
-
|
|
95
|
+
function parse(buffer) {
|
|
96
|
+
const result = {};
|
|
97
|
+
result.path = extractString(buffer, '"path":');
|
|
98
|
+
result.content = extractString(buffer, '"content":');
|
|
99
|
+
result.old_content = extractString(buffer, '"old_content":');
|
|
100
|
+
result.search = extractString(buffer, '"search":');
|
|
101
|
+
result.replace = extractString(buffer, '"replace":');
|
|
102
|
+
const lineStartMatch = buffer.match(LINE_START_REGEX);
|
|
103
|
+
if (lineStartMatch) {
|
|
104
|
+
const val = parseInt(lineStartMatch[1]);
|
|
105
|
+
if (!isNaN(val)) {
|
|
106
|
+
result.line_start = val;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return result;
|
|
145
110
|
}
|
|
111
|
+
return {
|
|
112
|
+
append(toolCallId, delta) {
|
|
113
|
+
const currentBuffer = (buffers.get(toolCallId) || "") + delta;
|
|
114
|
+
if (currentBuffer.endsWith("\\")) {
|
|
115
|
+
let backslashes = 0;
|
|
116
|
+
for (let i = currentBuffer.length - 1; i >= 0 && currentBuffer[i] === "\\"; i--) {
|
|
117
|
+
backslashes++;
|
|
118
|
+
}
|
|
119
|
+
if (backslashes % 2 !== 0) {
|
|
120
|
+
buffers.set(toolCallId, currentBuffer.slice(0, -1));
|
|
121
|
+
return parse(currentBuffer.slice(0, -1));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
buffers.set(toolCallId, currentBuffer);
|
|
125
|
+
return parse(currentBuffer);
|
|
126
|
+
},
|
|
127
|
+
clear(toolCallId) {
|
|
128
|
+
buffers.delete(toolCallId);
|
|
129
|
+
},
|
|
130
|
+
clearAll() {
|
|
131
|
+
buffers.clear();
|
|
132
|
+
},
|
|
133
|
+
};
|
|
146
134
|
}
|
|
147
135
|
//# sourceMappingURL=PureStreamParser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PureStreamParser.js","sourceRoot":"","sources":["../../../../src/monolith/infrastructure/tools/PureStreamParser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PureStreamParser.js","sourceRoot":"","sources":["../../../../src/monolith/infrastructure/tools/PureStreamParser.ts"],"names":[],"mappings":"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"}
|