@noorm/marie-cli 0.1.0
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/JOY_ZONING.md +200 -0
- package/LICENSE.md +190 -0
- package/README.md +94 -0
- package/dist/cli-new/components/App.js +138 -0
- package/dist/cli-new/components/App.js.map +1 -0
- package/dist/cli-new/components/ApprovalDialog.js +31 -0
- package/dist/cli-new/components/ApprovalDialog.js.map +1 -0
- package/dist/cli-new/components/Banner.js +23 -0
- package/dist/cli-new/components/Banner.js.map +1 -0
- package/dist/cli-new/components/ChatArea.js +49 -0
- package/dist/cli-new/components/ChatArea.js.map +1 -0
- package/dist/cli-new/components/Header.js +20 -0
- package/dist/cli-new/components/Header.js.map +1 -0
- package/dist/cli-new/components/InputArea.js +97 -0
- package/dist/cli-new/components/InputArea.js.map +1 -0
- package/dist/cli-new/components/MessageBubble.js +114 -0
- package/dist/cli-new/components/MessageBubble.js.map +1 -0
- package/dist/cli-new/components/SessionSwitcher.js +46 -0
- package/dist/cli-new/components/SessionSwitcher.js.map +1 -0
- package/dist/cli-new/components/SetupWizard.js +283 -0
- package/dist/cli-new/components/SetupWizard.js.map +1 -0
- package/dist/cli-new/components/ToolCallDisplay.js +45 -0
- package/dist/cli-new/components/ToolCallDisplay.js.map +1 -0
- package/dist/cli-new/hooks/useGit.js +99 -0
- package/dist/cli-new/hooks/useGit.js.map +1 -0
- package/dist/cli-new/hooks/useMarie.js +249 -0
- package/dist/cli-new/hooks/useMarie.js.map +1 -0
- package/dist/cli-new/hooks/useSessions.js +75 -0
- package/dist/cli-new/hooks/useSessions.js.map +1 -0
- package/dist/cli-new/index.js +52 -0
- package/dist/cli-new/index.js.map +1 -0
- package/dist/cli-new/styles/theme.js +68 -0
- package/dist/cli-new/styles/theme.js.map +1 -0
- package/dist/cli-new/types/cli.js +2 -0
- package/dist/cli-new/types/cli.js.map +1 -0
- package/dist/extension.cjs +655 -0
- package/dist/monolith/adapters/CliMarieAdapter.js +72 -0
- package/dist/monolith/adapters/CliMarieAdapter.js.map +1 -0
- package/dist/monolith/adapters/VscodeMarieAdapter.js +81 -0
- package/dist/monolith/adapters/VscodeMarieAdapter.js.map +1 -0
- package/dist/monolith/cli/CliFileSystemPort.js +83 -0
- package/dist/monolith/cli/CliFileSystemPort.js.map +1 -0
- package/dist/monolith/cli/MarieToolDefinitionsCLI.js +438 -0
- package/dist/monolith/cli/MarieToolDefinitionsCLI.js.map +1 -0
- package/dist/monolith/cli/index.js +272 -0
- package/dist/monolith/cli/index.js.map +1 -0
- package/dist/monolith/cli/services/JoyAutomationServiceCLI.js +80 -0
- package/dist/monolith/cli/services/JoyAutomationServiceCLI.js.map +1 -0
- package/dist/monolith/cli/services/JoyServiceCLI.js +63 -0
- package/dist/monolith/cli/services/JoyServiceCLI.js.map +1 -0
- package/dist/monolith/cli/storage.js +119 -0
- package/dist/monolith/cli/storage.js.map +1 -0
- package/dist/monolith/domain/joy/JoyTools.js +513 -0
- package/dist/monolith/domain/joy/JoyTools.js.map +1 -0
- package/dist/monolith/domain/joy/RitualService.js +51 -0
- package/dist/monolith/domain/joy/RitualService.js.map +1 -0
- package/dist/monolith/domain/marie/MarieTypes.js +2 -0
- package/dist/monolith/domain/marie/MarieTypes.js.map +1 -0
- package/dist/monolith/infrastructure/ai/agents/MarieAscendant.js +230 -0
- package/dist/monolith/infrastructure/ai/agents/MarieAscendant.js.map +1 -0
- package/dist/monolith/infrastructure/ai/agents/MarieYOLO.js +207 -0
- package/dist/monolith/infrastructure/ai/agents/MarieYOLO.js.map +1 -0
- package/dist/monolith/infrastructure/ai/context/ContextArchiveService.js +129 -0
- package/dist/monolith/infrastructure/ai/context/ContextArchiveService.js.map +1 -0
- package/dist/monolith/infrastructure/ai/context/ContextManager.js +118 -0
- package/dist/monolith/infrastructure/ai/context/ContextManager.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/FileSystemPort.js +2 -0
- package/dist/monolith/infrastructure/ai/core/FileSystemPort.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/GhostPort.js +2 -0
- package/dist/monolith/infrastructure/ai/core/GhostPort.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/MarieAscensionTypes.js +2 -0
- package/dist/monolith/infrastructure/ai/core/MarieAscensionTypes.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/MarieEngine.js +590 -0
- package/dist/monolith/infrastructure/ai/core/MarieEngine.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/MarieEventDispatcher.js +161 -0
- package/dist/monolith/infrastructure/ai/core/MarieEventDispatcher.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/MarieLockManager.js +121 -0
- package/dist/monolith/infrastructure/ai/core/MarieLockManager.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/MarieProgressTracker.js +256 -0
- package/dist/monolith/infrastructure/ai/core/MarieProgressTracker.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/MariePulseService.js +67 -0
- package/dist/monolith/infrastructure/ai/core/MariePulseService.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/MarieResponse.js +101 -0
- package/dist/monolith/infrastructure/ai/core/MarieResponse.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/MarieSanitizer.js +86 -0
- package/dist/monolith/infrastructure/ai/core/MarieSanitizer.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/MarieSession.js +202 -0
- package/dist/monolith/infrastructure/ai/core/MarieSession.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/MarieStabilityMonitor.js +58 -0
- package/dist/monolith/infrastructure/ai/core/MarieStabilityMonitor.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/MarieToolMender.js +127 -0
- package/dist/monolith/infrastructure/ai/core/MarieToolMender.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js +548 -0
- package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/MarieYOLOTypes.js +2 -0
- package/dist/monolith/infrastructure/ai/core/MarieYOLOTypes.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/ReasoningBudget.js +125 -0
- package/dist/monolith/infrastructure/ai/core/ReasoningBudget.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/VscodeFileSystemPort.js +30 -0
- package/dist/monolith/infrastructure/ai/core/VscodeFileSystemPort.js.map +1 -0
- package/dist/monolith/infrastructure/ai/providers/AIProvider.js +2 -0
- package/dist/monolith/infrastructure/ai/providers/AIProvider.js.map +1 -0
- package/dist/monolith/infrastructure/ai/providers/AnthropicProvider.js +148 -0
- package/dist/monolith/infrastructure/ai/providers/AnthropicProvider.js.map +1 -0
- package/dist/monolith/infrastructure/ai/providers/CerebrasProvider.js +208 -0
- package/dist/monolith/infrastructure/ai/providers/CerebrasProvider.js.map +1 -0
- package/dist/monolith/infrastructure/ai/providers/OpenRouterProvider.js +404 -0
- package/dist/monolith/infrastructure/ai/providers/OpenRouterProvider.js.map +1 -0
- package/dist/monolith/infrastructure/ai/providers/OpenRouterStreamParser.js +283 -0
- package/dist/monolith/infrastructure/ai/providers/OpenRouterStreamParser.js.map +1 -0
- package/dist/monolith/infrastructure/config/ConfigService.js +398 -0
- package/dist/monolith/infrastructure/config/ConfigService.js.map +1 -0
- package/dist/monolith/infrastructure/services/MarieMemoryStore.js +140 -0
- package/dist/monolith/infrastructure/services/MarieMemoryStore.js.map +1 -0
- package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js +1568 -0
- package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js.map +1 -0
- package/dist/monolith/infrastructure/tools/PureStreamParser.js +147 -0
- package/dist/monolith/infrastructure/tools/PureStreamParser.js.map +1 -0
- package/dist/monolith/infrastructure/tools/SharedToolDefinitions.js +223 -0
- package/dist/monolith/infrastructure/tools/SharedToolDefinitions.js.map +1 -0
- package/dist/monolith/infrastructure/tools/ToolRegistry.js +29 -0
- package/dist/monolith/infrastructure/tools/ToolRegistry.js.map +1 -0
- package/dist/monolith/infrastructure/tools/ToolUtils.js +59 -0
- package/dist/monolith/infrastructure/tools/ToolUtils.js.map +1 -0
- package/dist/monolith/plumbing/analysis/CodeHealthService.js +146 -0
- package/dist/monolith/plumbing/analysis/CodeHealthService.js.map +1 -0
- package/dist/monolith/plumbing/analysis/ComplexityService.js +43 -0
- package/dist/monolith/plumbing/analysis/ComplexityService.js.map +1 -0
- package/dist/monolith/plumbing/analysis/DependencyService.js +51 -0
- package/dist/monolith/plumbing/analysis/DependencyService.js.map +1 -0
- package/dist/monolith/plumbing/analysis/DiscoveryService.js +49 -0
- package/dist/monolith/plumbing/analysis/DiscoveryService.js.map +1 -0
- package/dist/monolith/plumbing/analysis/JoyMapService.js +66 -0
- package/dist/monolith/plumbing/analysis/JoyMapService.js.map +1 -0
- package/dist/monolith/plumbing/analysis/LintService.js +132 -0
- package/dist/monolith/plumbing/analysis/LintService.js.map +1 -0
- package/dist/monolith/plumbing/analysis/MarieSentinelService.js +276 -0
- package/dist/monolith/plumbing/analysis/MarieSentinelService.js.map +1 -0
- package/dist/monolith/plumbing/analysis/QualityGuardrailService.js +119 -0
- package/dist/monolith/plumbing/analysis/QualityGuardrailService.js.map +1 -0
- package/dist/monolith/plumbing/analysis/SurgicalMender.js +70 -0
- package/dist/monolith/plumbing/analysis/SurgicalMender.js.map +1 -0
- package/dist/monolith/plumbing/analysis/TestService.js +104 -0
- package/dist/monolith/plumbing/analysis/TestService.js.map +1 -0
- package/dist/monolith/plumbing/filesystem/FileService.js +406 -0
- package/dist/monolith/plumbing/filesystem/FileService.js.map +1 -0
- package/dist/monolith/plumbing/filesystem/PathResolver.js +26 -0
- package/dist/monolith/plumbing/filesystem/PathResolver.js.map +1 -0
- package/dist/monolith/plumbing/git/GitService.js +71 -0
- package/dist/monolith/plumbing/git/GitService.js.map +1 -0
- package/dist/monolith/plumbing/lsp/SymbolService.js +36 -0
- package/dist/monolith/plumbing/lsp/SymbolService.js.map +1 -0
- package/dist/monolith/plumbing/terminal/ProcessRegistry.js +31 -0
- package/dist/monolith/plumbing/terminal/ProcessRegistry.js.map +1 -0
- package/dist/monolith/plumbing/terminal/TerminalService.js +180 -0
- package/dist/monolith/plumbing/terminal/TerminalService.js.map +1 -0
- package/dist/monolith/plumbing/ui/DecorationService.js +54 -0
- package/dist/monolith/plumbing/ui/DecorationService.js.map +1 -0
- package/dist/monolith/plumbing/utils/ErrorUtils.js +11 -0
- package/dist/monolith/plumbing/utils/ErrorUtils.js.map +1 -0
- package/dist/monolith/plumbing/utils/JsonUtils.js +360 -0
- package/dist/monolith/plumbing/utils/JsonUtils.js.map +1 -0
- package/dist/monolith/plumbing/utils/PrefixTree.js +153 -0
- package/dist/monolith/plumbing/utils/PrefixTree.js.map +1 -0
- package/dist/monolith/plumbing/utils/RetryUtils.js +141 -0
- package/dist/monolith/plumbing/utils/RetryUtils.js.map +1 -0
- package/dist/monolith/plumbing/utils/StreamTagDetector.js +128 -0
- package/dist/monolith/plumbing/utils/StreamTagDetector.js.map +1 -0
- package/dist/monolith/plumbing/utils/StringUtils.js +97 -0
- package/dist/monolith/plumbing/utils/StringUtils.js.map +1 -0
- package/dist/monolith/plumbing/utils/TimeoutUtils.js +21 -0
- package/dist/monolith/plumbing/utils/TimeoutUtils.js.map +1 -0
- package/dist/monolith/runtime/MarieRuntime.js +354 -0
- package/dist/monolith/runtime/MarieRuntime.js.map +1 -0
- package/dist/monolith/runtime/RuntimeAdapterBase.js +59 -0
- package/dist/monolith/runtime/RuntimeAdapterBase.js.map +1 -0
- package/dist/monolith/runtime/providerFactory.js +11 -0
- package/dist/monolith/runtime/providerFactory.js.map +1 -0
- package/dist/monolith/runtime/types.js +2 -0
- package/dist/monolith/runtime/types.js.map +1 -0
- package/dist/monolith/services/HealthService.js +38 -0
- package/dist/monolith/services/HealthService.js.map +1 -0
- package/dist/monolith/services/JoyAutomationService.js +131 -0
- package/dist/monolith/services/JoyAutomationService.js.map +1 -0
- package/dist/monolith/services/JoyLogService.js +48 -0
- package/dist/monolith/services/JoyLogService.js.map +1 -0
- package/dist/monolith/services/JoyService.js +190 -0
- package/dist/monolith/services/JoyService.js.map +1 -0
- package/dist/monolith/services/MarieGhostService.js +168 -0
- package/dist/monolith/services/MarieGhostService.js.map +1 -0
- package/dist/monolith/services/MarieSCMProvider.js +41 -0
- package/dist/monolith/services/MarieSCMProvider.js.map +1 -0
- package/package.json +168 -0
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
// ConfigService - Environment-aware configuration
|
|
2
|
+
// Works in both VSCode extension and CLI environments
|
|
3
|
+
import { createRequire } from "node:module";
|
|
4
|
+
// ISOMORPHIC REQUIRE: Resolves the correct require function for both ESM and CJS
|
|
5
|
+
const nodeRequire = (() => {
|
|
6
|
+
if (typeof require !== "undefined") {
|
|
7
|
+
return require;
|
|
8
|
+
}
|
|
9
|
+
// In ESM environments (CLI), we must create a require function
|
|
10
|
+
// We use an indirect eval to prevent esbuild from complaining during bundling
|
|
11
|
+
try {
|
|
12
|
+
const metaUrl = (0, eval)("import.meta.url");
|
|
13
|
+
return createRequire(metaUrl);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return (id) => {
|
|
17
|
+
throw new Error(`Cannot require ${id} in this environment`);
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
})();
|
|
21
|
+
let vscodeModule = null;
|
|
22
|
+
let hasAttemptedVscodeLoad = false;
|
|
23
|
+
function isLikelyVscodeExtensionHost() {
|
|
24
|
+
return Boolean(process.env.VSCODE_IPC_HOOK ||
|
|
25
|
+
process.env.VSCODE_PID ||
|
|
26
|
+
process.env.VSCODE_CWD ||
|
|
27
|
+
process.env.VSCODE_NLS_CONFIG);
|
|
28
|
+
}
|
|
29
|
+
function getVscode() {
|
|
30
|
+
// In CLI runtime, a local vscode shim may be resolvable as "vscode".
|
|
31
|
+
// Only treat vscode as available when running inside VS Code extension host.
|
|
32
|
+
if (!isLikelyVscodeExtensionHost()) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
if (!hasAttemptedVscodeLoad) {
|
|
36
|
+
hasAttemptedVscodeLoad = true;
|
|
37
|
+
try {
|
|
38
|
+
const loaded = nodeRequire("vscode");
|
|
39
|
+
// Guard against the CLI vscode shim which doesn't include the full VS Code API.
|
|
40
|
+
const version = loaded.version;
|
|
41
|
+
const isShim = Boolean(loaded.marieShim);
|
|
42
|
+
if (isShim ||
|
|
43
|
+
!version ||
|
|
44
|
+
typeof version !== "string" ||
|
|
45
|
+
!version.startsWith("1.")) {
|
|
46
|
+
vscodeModule = null;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
vscodeModule = loaded;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// VSCode not available - we're in CLI mode
|
|
54
|
+
vscodeModule = null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return vscodeModule;
|
|
58
|
+
}
|
|
59
|
+
function getCliConfig() {
|
|
60
|
+
try {
|
|
61
|
+
// Prefer loading the CLI config directly from ~/.marie to avoid module resolution issues
|
|
62
|
+
// when running the globally installed CLI.
|
|
63
|
+
const fs = nodeRequire("fs");
|
|
64
|
+
const path = nodeRequire("path");
|
|
65
|
+
const os = nodeRequire("os");
|
|
66
|
+
const configPath = path.join(os.homedir(), ".marie", "config.json");
|
|
67
|
+
if (!fs.existsSync(configPath)) {
|
|
68
|
+
return {};
|
|
69
|
+
}
|
|
70
|
+
const raw = fs.readFileSync(configPath, "utf-8");
|
|
71
|
+
return JSON.parse(raw) || {};
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
try {
|
|
75
|
+
// Fallback when ConfigService is loaded from the CLI entrypoint path.
|
|
76
|
+
const { Storage } = nodeRequire("../monolith/cli/storage.js");
|
|
77
|
+
return Storage.getConfig() || {};
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return {};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
export class ConfigService {
|
|
85
|
+
/** Cached excluded files list — invalidated on config change */
|
|
86
|
+
static _excludedFilesCache = null;
|
|
87
|
+
static getVscodeConfig() {
|
|
88
|
+
const vscode = getVscode();
|
|
89
|
+
if (!vscode)
|
|
90
|
+
return null;
|
|
91
|
+
return vscode.workspace.getConfiguration("marie");
|
|
92
|
+
}
|
|
93
|
+
static isVscode() {
|
|
94
|
+
return getVscode() !== null;
|
|
95
|
+
}
|
|
96
|
+
static getApiKey() {
|
|
97
|
+
const vscode = getVscode();
|
|
98
|
+
if (vscode) {
|
|
99
|
+
return vscode.workspace.getConfiguration("marie").get("apiKey");
|
|
100
|
+
}
|
|
101
|
+
return process.env.ANTHROPIC_API_KEY;
|
|
102
|
+
}
|
|
103
|
+
static getOpenRouterApiKey() {
|
|
104
|
+
const vscode = getVscode();
|
|
105
|
+
if (vscode) {
|
|
106
|
+
return vscode.workspace
|
|
107
|
+
.getConfiguration("marie")
|
|
108
|
+
.get("openrouterApiKey");
|
|
109
|
+
}
|
|
110
|
+
return process.env.OPENROUTER_API_KEY;
|
|
111
|
+
}
|
|
112
|
+
static getCerebrasApiKey() {
|
|
113
|
+
const vscode = getVscode();
|
|
114
|
+
if (vscode) {
|
|
115
|
+
return vscode.workspace
|
|
116
|
+
.getConfiguration("marie")
|
|
117
|
+
.get("cerebrasApiKey");
|
|
118
|
+
}
|
|
119
|
+
return process.env.CEREBRAS_API_KEY;
|
|
120
|
+
}
|
|
121
|
+
static getAiProvider() {
|
|
122
|
+
const vscode = getVscode();
|
|
123
|
+
if (vscode) {
|
|
124
|
+
return vscode.workspace
|
|
125
|
+
.getConfiguration("marie")
|
|
126
|
+
.get("aiProvider", "anthropic");
|
|
127
|
+
}
|
|
128
|
+
const config = getCliConfig();
|
|
129
|
+
return (config.aiProvider ||
|
|
130
|
+
"anthropic");
|
|
131
|
+
}
|
|
132
|
+
static getModel() {
|
|
133
|
+
const vscode = getVscode();
|
|
134
|
+
if (vscode) {
|
|
135
|
+
return vscode.workspace
|
|
136
|
+
.getConfiguration("marie")
|
|
137
|
+
.get("model", "claude-3-5-sonnet-20241022");
|
|
138
|
+
}
|
|
139
|
+
const config = getCliConfig();
|
|
140
|
+
return config.model || "claude-3-5-sonnet-20241022";
|
|
141
|
+
}
|
|
142
|
+
static getAutonomyMode() {
|
|
143
|
+
const vscode = getVscode();
|
|
144
|
+
if (vscode) {
|
|
145
|
+
const configured = vscode.workspace
|
|
146
|
+
.getConfiguration("marie")
|
|
147
|
+
.get("autonomyMode");
|
|
148
|
+
if (configured)
|
|
149
|
+
return configured;
|
|
150
|
+
return "high";
|
|
151
|
+
}
|
|
152
|
+
const config = getCliConfig();
|
|
153
|
+
const configured = config.autonomyMode;
|
|
154
|
+
if (configured)
|
|
155
|
+
return configured;
|
|
156
|
+
return "high";
|
|
157
|
+
}
|
|
158
|
+
static getMaxContextTokens() {
|
|
159
|
+
const vscode = getVscode();
|
|
160
|
+
if (vscode) {
|
|
161
|
+
return vscode.workspace
|
|
162
|
+
.getConfiguration("marie")
|
|
163
|
+
.get("maxContextTokens", 100000);
|
|
164
|
+
}
|
|
165
|
+
return 100000;
|
|
166
|
+
}
|
|
167
|
+
static getExcludedFiles() {
|
|
168
|
+
const vscode = getVscode();
|
|
169
|
+
if (vscode) {
|
|
170
|
+
if (this._excludedFilesCache) {
|
|
171
|
+
return this._excludedFilesCache;
|
|
172
|
+
}
|
|
173
|
+
const filesExclude = vscode.workspace
|
|
174
|
+
.getConfiguration("files")
|
|
175
|
+
.get("exclude", {});
|
|
176
|
+
const userExclusions = Object.keys(filesExclude).filter((key) => filesExclude[key]);
|
|
177
|
+
const defaultExclusions = [
|
|
178
|
+
"node_modules",
|
|
179
|
+
"dist",
|
|
180
|
+
"build",
|
|
181
|
+
"out",
|
|
182
|
+
"coverage",
|
|
183
|
+
".git",
|
|
184
|
+
".vscode",
|
|
185
|
+
".idea",
|
|
186
|
+
".DS_Store",
|
|
187
|
+
];
|
|
188
|
+
this._excludedFilesCache = Array.from(new Set([...defaultExclusions, ...userExclusions]));
|
|
189
|
+
return this._excludedFilesCache;
|
|
190
|
+
}
|
|
191
|
+
// CLI default exclusions
|
|
192
|
+
return [
|
|
193
|
+
"node_modules",
|
|
194
|
+
"dist",
|
|
195
|
+
"build",
|
|
196
|
+
"out",
|
|
197
|
+
"coverage",
|
|
198
|
+
".git",
|
|
199
|
+
".vscode",
|
|
200
|
+
".idea",
|
|
201
|
+
".DS_Store",
|
|
202
|
+
];
|
|
203
|
+
}
|
|
204
|
+
static getKeepRecentMessages() {
|
|
205
|
+
const vscode = getVscode();
|
|
206
|
+
if (vscode) {
|
|
207
|
+
return vscode.workspace
|
|
208
|
+
.getConfiguration("marie")
|
|
209
|
+
.get("keepRecentMessages", 30);
|
|
210
|
+
}
|
|
211
|
+
return 30;
|
|
212
|
+
}
|
|
213
|
+
static getTokensPerChar() {
|
|
214
|
+
const vscode = getVscode();
|
|
215
|
+
if (vscode) {
|
|
216
|
+
return vscode.workspace
|
|
217
|
+
.getConfiguration("marie")
|
|
218
|
+
.get("tokensPerChar", 0.25);
|
|
219
|
+
}
|
|
220
|
+
return 0.25;
|
|
221
|
+
}
|
|
222
|
+
static isAscensionEnabled() {
|
|
223
|
+
const vscode = getVscode();
|
|
224
|
+
if (vscode) {
|
|
225
|
+
return vscode.workspace
|
|
226
|
+
.getConfiguration("marie")
|
|
227
|
+
.get("ascensionEnabled", true);
|
|
228
|
+
}
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
static getAscensionProfile() {
|
|
232
|
+
const vscode = getVscode();
|
|
233
|
+
if (vscode) {
|
|
234
|
+
return vscode.workspace
|
|
235
|
+
.getConfiguration("marie")
|
|
236
|
+
.get("ascensionProfile", "balanced");
|
|
237
|
+
}
|
|
238
|
+
return "balanced";
|
|
239
|
+
}
|
|
240
|
+
static getAscensionIntensity() {
|
|
241
|
+
const vscode = getVscode();
|
|
242
|
+
let value = 1.0;
|
|
243
|
+
if (vscode) {
|
|
244
|
+
value = vscode.workspace
|
|
245
|
+
.getConfiguration("marie")
|
|
246
|
+
.get("ascensionIntensity", 1.0);
|
|
247
|
+
}
|
|
248
|
+
return Math.max(0.5, Math.min(1.5, value));
|
|
249
|
+
}
|
|
250
|
+
static getAscensionMaxRequiredActions() {
|
|
251
|
+
const vscode = getVscode();
|
|
252
|
+
let value = 2;
|
|
253
|
+
if (vscode) {
|
|
254
|
+
value = vscode.workspace
|
|
255
|
+
.getConfiguration("marie")
|
|
256
|
+
.get("ascensionMaxRequiredActions", 2);
|
|
257
|
+
}
|
|
258
|
+
return Math.max(0, Math.min(5, value));
|
|
259
|
+
}
|
|
260
|
+
static isAgentStreamsEnabled() {
|
|
261
|
+
const vscode = getVscode();
|
|
262
|
+
if (vscode) {
|
|
263
|
+
return vscode.workspace
|
|
264
|
+
.getConfiguration("marie")
|
|
265
|
+
.get("agentStreamsEnabled", false);
|
|
266
|
+
}
|
|
267
|
+
const config = getCliConfig();
|
|
268
|
+
const fromConfig = config.agentStreamsEnabled;
|
|
269
|
+
if (typeof fromConfig === "boolean")
|
|
270
|
+
return fromConfig;
|
|
271
|
+
return process.env.MARIE_AGENT_STREAMS_ENABLED === "1";
|
|
272
|
+
}
|
|
273
|
+
static getAgentStreamMaxConcurrent() {
|
|
274
|
+
const vscode = getVscode();
|
|
275
|
+
let value = 2;
|
|
276
|
+
if (vscode) {
|
|
277
|
+
value = vscode.workspace
|
|
278
|
+
.getConfiguration("marie")
|
|
279
|
+
.get("agentStreamMaxConcurrent", 2);
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
const config = getCliConfig();
|
|
283
|
+
if (typeof config.agentStreamMaxConcurrent === "number") {
|
|
284
|
+
value = config.agentStreamMaxConcurrent;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return Math.max(1, Math.min(8, value));
|
|
288
|
+
}
|
|
289
|
+
static getAgentStreamSpawnThreshold() {
|
|
290
|
+
const vscode = getVscode();
|
|
291
|
+
let value = 1.25;
|
|
292
|
+
if (vscode) {
|
|
293
|
+
value = vscode.workspace
|
|
294
|
+
.getConfiguration("marie")
|
|
295
|
+
.get("agentStreamSpawnThreshold", 1.25);
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
const config = getCliConfig();
|
|
299
|
+
if (typeof config.agentStreamSpawnThreshold === "number") {
|
|
300
|
+
value = config.agentStreamSpawnThreshold;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return Math.max(0.25, Math.min(5, value));
|
|
304
|
+
}
|
|
305
|
+
static getAgentStreamTimeoutMs() {
|
|
306
|
+
const vscode = getVscode();
|
|
307
|
+
let value = 20000;
|
|
308
|
+
if (vscode) {
|
|
309
|
+
value = vscode.workspace
|
|
310
|
+
.getConfiguration("marie")
|
|
311
|
+
.get("agentStreamTimeoutMs", 20000);
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
const config = getCliConfig();
|
|
315
|
+
if (typeof config.agentStreamTimeoutMs === "number") {
|
|
316
|
+
value = config.agentStreamTimeoutMs;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return Math.max(3000, Math.min(120000, value));
|
|
320
|
+
}
|
|
321
|
+
static getAgentStreamPilotAgents() {
|
|
322
|
+
const normalize = (value) => {
|
|
323
|
+
if (Array.isArray(value)) {
|
|
324
|
+
return value
|
|
325
|
+
.filter((v) => typeof v === "string")
|
|
326
|
+
.map((v) => v.trim())
|
|
327
|
+
.filter(Boolean);
|
|
328
|
+
}
|
|
329
|
+
if (typeof value === "string") {
|
|
330
|
+
return value
|
|
331
|
+
.split(",")
|
|
332
|
+
.map((v) => v.trim())
|
|
333
|
+
.filter(Boolean);
|
|
334
|
+
}
|
|
335
|
+
return [];
|
|
336
|
+
};
|
|
337
|
+
const vscode = getVscode();
|
|
338
|
+
if (vscode) {
|
|
339
|
+
const configured = vscode.workspace
|
|
340
|
+
.getConfiguration("marie")
|
|
341
|
+
.get("agentStreamPilotAgents", ["QASRE"]);
|
|
342
|
+
return normalize(configured).length > 0
|
|
343
|
+
? normalize(configured)
|
|
344
|
+
: ["QASRE"];
|
|
345
|
+
}
|
|
346
|
+
const config = getCliConfig();
|
|
347
|
+
const fromConfig = normalize(config.agentStreamPilotAgents);
|
|
348
|
+
if (fromConfig.length > 0)
|
|
349
|
+
return fromConfig;
|
|
350
|
+
const fromEnv = normalize(process.env.MARIE_AGENT_STREAM_PILOT_AGENTS);
|
|
351
|
+
if (fromEnv.length > 0)
|
|
352
|
+
return fromEnv;
|
|
353
|
+
return ["QASRE"];
|
|
354
|
+
}
|
|
355
|
+
static getAgentStreamMaxSpawnsPerTurn() {
|
|
356
|
+
const vscode = getVscode();
|
|
357
|
+
let value = 3;
|
|
358
|
+
if (vscode) {
|
|
359
|
+
value = vscode.workspace
|
|
360
|
+
.getConfiguration("marie")
|
|
361
|
+
.get("agentStreamMaxSpawnsPerTurn", 3);
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
const config = getCliConfig();
|
|
365
|
+
if (typeof config.agentStreamMaxSpawnsPerTurn === "number") {
|
|
366
|
+
value = config.agentStreamMaxSpawnsPerTurn;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return Math.max(1, Math.min(16, value));
|
|
370
|
+
}
|
|
371
|
+
static isAgentStreamPressureSheddingEnabled() {
|
|
372
|
+
const vscode = getVscode();
|
|
373
|
+
if (vscode) {
|
|
374
|
+
return vscode.workspace
|
|
375
|
+
.getConfiguration("marie")
|
|
376
|
+
.get("agentStreamPressureSheddingEnabled", true);
|
|
377
|
+
}
|
|
378
|
+
const config = getCliConfig();
|
|
379
|
+
if (typeof config.agentStreamPressureSheddingEnabled === "boolean") {
|
|
380
|
+
return config.agentStreamPressureSheddingEnabled;
|
|
381
|
+
}
|
|
382
|
+
if (process.env.MARIE_AGENT_STREAM_PRESSURE_SHEDDING_ENABLED === "0") {
|
|
383
|
+
return false;
|
|
384
|
+
}
|
|
385
|
+
return true;
|
|
386
|
+
}
|
|
387
|
+
static getAutoRepair() {
|
|
388
|
+
const vscode = getVscode();
|
|
389
|
+
if (vscode) {
|
|
390
|
+
return vscode.workspace
|
|
391
|
+
.getConfiguration("marie")
|
|
392
|
+
.get("autoRepair", false);
|
|
393
|
+
}
|
|
394
|
+
const config = getCliConfig();
|
|
395
|
+
return config.autoRepair || false;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
//# sourceMappingURL=ConfigService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigService.js","sourceRoot":"","sources":["../../../../src/monolith/infrastructure/config/ConfigService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
export class MarieMemoryStore {
|
|
4
|
+
static memoryPath = path.join(process.cwd(), ".marie", "swarm_memory.json");
|
|
5
|
+
static async loadAsync() {
|
|
6
|
+
try {
|
|
7
|
+
await fs.promises.access(this.memoryPath);
|
|
8
|
+
const data = await fs.promises.readFile(this.memoryPath, "utf8");
|
|
9
|
+
return JSON.parse(data);
|
|
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
|
+
};
|
|
24
|
+
}
|
|
25
|
+
static async saveAsync(memory) {
|
|
26
|
+
try {
|
|
27
|
+
const dir = path.dirname(this.memoryPath);
|
|
28
|
+
await fs.promises.mkdir(dir, { recursive: true });
|
|
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);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Keep synchronous load for constructor initialization (fallback)
|
|
36
|
+
static load() {
|
|
37
|
+
try {
|
|
38
|
+
if (fs.existsSync(this.memoryPath)) {
|
|
39
|
+
const data = fs.readFileSync(this.memoryPath, "utf8");
|
|
40
|
+
return JSON.parse(data);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
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
|
+
static 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
|
+
static async syncRun(recoveryPatterns, toolExecutions, sessionScore, intuition) {
|
|
60
|
+
// ATOMIC INTEGRITY: Serialize all persistence operations
|
|
61
|
+
const previous = this.persistencePromise;
|
|
62
|
+
let resolveLock;
|
|
63
|
+
this.persistencePromise = new Promise((resolve) => {
|
|
64
|
+
resolveLock = resolve;
|
|
65
|
+
});
|
|
66
|
+
try {
|
|
67
|
+
await previous;
|
|
68
|
+
const memory = await this.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 &&
|
|
72
|
+
ep.recoveryTool === p.recoveryTool);
|
|
73
|
+
if (existing) {
|
|
74
|
+
existing.count += p.count;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
memory.recoveryPatterns.push(p);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// 2. Sync Lifetime Tool Stats
|
|
81
|
+
for (const exec of toolExecutions) {
|
|
82
|
+
const stats = memory.lifetimeToolStats[exec.name] || {
|
|
83
|
+
total: 0,
|
|
84
|
+
successes: 0,
|
|
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;
|
|
92
|
+
}
|
|
93
|
+
// 3. Sync High Scores (Keep top 10)
|
|
94
|
+
memory.highScores.push({ ...sessionScore, timestamp: Date.now() });
|
|
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
|
|
102
|
+
}
|
|
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
|
+
/**
|
|
112
|
+
* Save agent performance data for cross-session persistence
|
|
113
|
+
*/
|
|
114
|
+
static async syncAgentPerformance(data) {
|
|
115
|
+
try {
|
|
116
|
+
const dir = path.dirname(this.agentPerformancePath);
|
|
117
|
+
await fs.promises.mkdir(dir, { recursive: true });
|
|
118
|
+
await fs.promises.writeFile(this.agentPerformancePath, JSON.stringify(data, null, 2));
|
|
119
|
+
}
|
|
120
|
+
catch (e) {
|
|
121
|
+
console.error("[MarieMemoryStore] Failed to save agent performance:", e);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Load persisted agent performance data
|
|
126
|
+
*/
|
|
127
|
+
static loadAgentPerformance() {
|
|
128
|
+
try {
|
|
129
|
+
if (fs.existsSync(this.agentPerformancePath)) {
|
|
130
|
+
const data = fs.readFileSync(this.agentPerformancePath, "utf8");
|
|
131
|
+
return JSON.parse(data);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch (e) {
|
|
135
|
+
console.warn("[MarieMemoryStore] Failed to load agent performance:", e);
|
|
136
|
+
}
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=MarieMemoryStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarieMemoryStore.js","sourceRoot":"","sources":["../../../../src/monolith/infrastructure/services/MarieMemoryStore.ts"],"names":[],"mappings":"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"}
|