@noorm/marie-cli 0.1.17 → 0.1.18
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/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 +1 -1
- package/dist/cli-new/components/App.js.map +1 -1
- package/dist/cli-new/components/ApprovalDialog.js +1 -1
- package/dist/cli-new/components/ApprovalDialog.js.map +1 -1
- package/dist/cli-new/components/Banner.js +15 -5
- package/dist/cli-new/components/Banner.js.map +1 -1
- package/dist/cli-new/components/Header.js +2 -2
- package/dist/cli-new/components/Header.js.map +1 -1
- package/dist/cli-new/components/InputArea.js +29 -23
- package/dist/cli-new/components/InputArea.js.map +1 -1
- package/dist/cli-new/components/MessageBubble.js +5 -4
- package/dist/cli-new/components/MessageBubble.js.map +1 -1
- package/dist/cli-new/components/SessionSwitcher.js +3 -3
- package/dist/cli-new/components/SessionSwitcher.js.map +1 -1
- package/dist/cli-new/components/SetupWizard.js +11 -11
- package/dist/cli-new/components/SetupWizard.js.map +1 -1
- package/dist/cli-new/components/ToolCallDisplay.js +1 -1
- package/dist/cli-new/components/ToolCallDisplay.js.map +1 -1
- package/dist/cli-new/hooks/useUpdateCheck.js +1 -1
- package/dist/cli-new/hooks/useUpdateCheck.js.map +1 -1
- package/dist/cli-new/styles/theme.js +17 -17
- package/dist/cli-new/styles/theme.js.map +1 -1
- package/dist/extension.cjs +861 -341
- package/dist/extension.js +2 -1
- package/dist/extension.js.map +1 -1
- package/dist/monolith/adapters/CliMarieAdapter.js +7 -7
- package/dist/monolith/adapters/CliMarieAdapter.js.map +1 -1
- package/dist/monolith/adapters/VscodeMarieAdapter.js +9 -9
- package/dist/monolith/adapters/VscodeMarieAdapter.js.map +1 -1
- package/dist/monolith/cli/MarieToolDefinitionsCLI.js +5 -2
- package/dist/monolith/cli/MarieToolDefinitionsCLI.js.map +1 -1
- package/dist/monolith/cli/index.js +6 -0
- package/dist/monolith/cli/index.js.map +1 -1
- package/dist/monolith/cli/storage.js +79 -60
- package/dist/monolith/cli/storage.js.map +1 -1
- package/dist/monolith/infrastructure/ai/context/ContextArchiveService.js +52 -37
- package/dist/monolith/infrastructure/ai/context/ContextArchiveService.js.map +1 -1
- package/dist/monolith/infrastructure/ai/context/ContextManager.js +35 -2
- package/dist/monolith/infrastructure/ai/context/ContextManager.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieEngine.js +513 -3
- package/dist/monolith/infrastructure/ai/core/MarieEngine.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieLockManager.js +25 -5
- package/dist/monolith/infrastructure/ai/core/MarieLockManager.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieProgressTracker.js +29 -0
- 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 +97 -8
- 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 +155 -14
- package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js.map +1 -1
- 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/providers/AnthropicProvider.js +6 -0
- package/dist/monolith/infrastructure/ai/providers/AnthropicProvider.js.map +1 -1
- package/dist/monolith/infrastructure/ai/providers/CerebrasProvider.js +6 -0
- package/dist/monolith/infrastructure/ai/providers/CerebrasProvider.js.map +1 -1
- package/dist/monolith/infrastructure/ai/providers/OpenRouterProvider.js +22 -0
- package/dist/monolith/infrastructure/ai/providers/OpenRouterProvider.js.map +1 -1
- package/dist/monolith/infrastructure/config/ConfigService.js +145 -1
- package/dist/monolith/infrastructure/config/ConfigService.js.map +1 -1
- package/dist/monolith/infrastructure/joy/CognitiveRituals.js +169 -0
- package/dist/monolith/infrastructure/joy/CognitiveRituals.js.map +1 -0
- package/dist/monolith/infrastructure/joy/JoyTools.js +15 -2
- package/dist/monolith/infrastructure/joy/JoyTools.js.map +1 -1
- package/dist/monolith/infrastructure/persistence/NoormmeAutonomics.js +118 -0
- package/dist/monolith/infrastructure/persistence/NoormmeAutonomics.js.map +1 -0
- package/dist/monolith/infrastructure/persistence/NoormmeEngine.js +78 -0
- package/dist/monolith/infrastructure/persistence/NoormmeEngine.js.map +1 -0
- package/dist/monolith/infrastructure/persistence/NoormmeSchema.js +150 -0
- package/dist/monolith/infrastructure/persistence/NoormmeSchema.js.map +1 -0
- package/dist/monolith/infrastructure/persistence/NoormmeSeeder.js +81 -0
- package/dist/monolith/infrastructure/persistence/NoormmeSeeder.js.map +1 -0
- package/dist/monolith/infrastructure/persistence/NoormmeTools.js +324 -0
- package/dist/monolith/infrastructure/persistence/NoormmeTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js +29 -1577
- package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js.map +1 -1
- package/dist/monolith/infrastructure/tools/definitions/AnalysisTools.js +346 -0
- package/dist/monolith/infrastructure/tools/definitions/AnalysisTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/AutomationTools.js +289 -0
- package/dist/monolith/infrastructure/tools/definitions/AutomationTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/ContextTools.js +43 -0
- package/dist/monolith/infrastructure/tools/definitions/ContextTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/CoreTools.js +41 -0
- package/dist/monolith/infrastructure/tools/definitions/CoreTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/DiagnosticTools.js +185 -0
- package/dist/monolith/infrastructure/tools/definitions/DiagnosticTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/NavigationTools.js +348 -0
- package/dist/monolith/infrastructure/tools/definitions/NavigationTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/PlanningTools.js +297 -0
- package/dist/monolith/infrastructure/tools/definitions/PlanningTools.js.map +1 -0
- package/dist/monolith/plumbing/analysis/MarieSentinelService.js +1 -2
- package/dist/monolith/plumbing/analysis/MarieSentinelService.js.map +1 -1
- package/dist/monolith/plumbing/terminal/TerminalService.js +5 -0
- package/dist/monolith/plumbing/terminal/TerminalService.js.map +1 -1
- package/dist/monolith/plumbing/utils/EnvironmentUtils.js +1 -1
- package/dist/monolith/plumbing/utils/EnvironmentUtils.js.map +1 -1
- package/dist/monolith/plumbing/utils/MutexUtils.js.map +1 -1
- package/dist/monolith/runtime/MarieRuntime.js +86 -4
- package/dist/monolith/runtime/MarieRuntime.js.map +1 -1
- package/dist/monolith/runtime/RuntimeAdapterBase.js.map +1 -1
- package/dist/monolith/services/JoyService.js +1 -1
- package/dist/monolith/services/JoyService.js.map +1 -1
- package/dist/monolith/services/MarieGhostService.js +12 -0
- package/dist/monolith/services/MarieGhostService.js.map +1 -1
- package/dist/monolith/services/UpdateService.js +6 -6
- package/dist/monolith/services/UpdateService.js.map +1 -1
- package/dist/webview-ui/main.js +23 -23
- package/package.json +2 -1
- package/test-mind-p6.sqlite +0 -0
- package/test-mind-p6.sqlite-shm +0 -0
- package/test-mind-p6.sqlite-wal +0 -0
- 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/MarieYOLOTypes.js +0 -2
- package/dist/monolith/infrastructure/ai/core/MarieYOLOTypes.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.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/marie-coder-0.1.16.vsix +0 -0
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { ConfigService } from "../../config/ConfigService.js";
|
|
2
|
+
import { NoormmeEngine } from "../../persistence/NoormmeEngine.js";
|
|
1
3
|
/**
|
|
2
|
-
*
|
|
4
|
+
* Clean Fix Pattern: MarieSemaphore
|
|
5
|
+
* Async semaphore to limit global concurrency with timeout and abort support.
|
|
3
6
|
*/
|
|
4
7
|
export class MarieSemaphore {
|
|
5
8
|
maxConcurrency;
|
|
@@ -8,15 +11,55 @@ export class MarieSemaphore {
|
|
|
8
11
|
constructor(maxConcurrency) {
|
|
9
12
|
this.maxConcurrency = maxConcurrency;
|
|
10
13
|
}
|
|
11
|
-
async acquire() {
|
|
14
|
+
async acquire(signal) {
|
|
15
|
+
if (signal?.aborted)
|
|
16
|
+
throw new Error("Semaphore acquisition aborted.");
|
|
12
17
|
if (this.activeCount < this.maxConcurrency) {
|
|
13
18
|
this.activeCount++;
|
|
14
19
|
return;
|
|
15
20
|
}
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
const startWait = Date.now();
|
|
22
|
+
const timeout = ConfigService.getSemaphoreTimeoutMs();
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
let timeoutId;
|
|
25
|
+
const cleanup = () => {
|
|
26
|
+
clearTimeout(timeoutId);
|
|
27
|
+
signal?.removeEventListener("abort", onAbort);
|
|
28
|
+
const idx = this.queue.indexOf(wrappedResolve);
|
|
29
|
+
if (idx > -1)
|
|
30
|
+
this.queue.splice(idx, 1);
|
|
31
|
+
};
|
|
32
|
+
const wrappedResolve = () => {
|
|
33
|
+
const waitDuration = Date.now() - startWait;
|
|
34
|
+
this.reportTelemetry(waitDuration, this.queue.length);
|
|
35
|
+
cleanup();
|
|
36
|
+
resolve();
|
|
37
|
+
};
|
|
38
|
+
const onAbort = () => {
|
|
39
|
+
cleanup();
|
|
40
|
+
reject(new Error("Semaphore acquisition aborted by signal."));
|
|
41
|
+
};
|
|
42
|
+
timeoutId = setTimeout(() => {
|
|
43
|
+
cleanup();
|
|
44
|
+
reject(new Error(`Extreme Stability: Semaphore Acquisition Timeout after ${timeout}ms`));
|
|
45
|
+
}, timeout);
|
|
46
|
+
signal?.addEventListener("abort", onAbort);
|
|
47
|
+
this.queue.push(wrappedResolve);
|
|
18
48
|
});
|
|
19
49
|
}
|
|
50
|
+
async reportTelemetry(waitMs, queueSize) {
|
|
51
|
+
if (waitMs < 100)
|
|
52
|
+
return; // Only report significant contention
|
|
53
|
+
try {
|
|
54
|
+
const db = await NoormmeEngine.getInstance();
|
|
55
|
+
await db.agent.cortex.metrics.recordMetric("semaphore_contention", waitMs, {
|
|
56
|
+
metadata: { queueSize, waitMs }
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
// Background telemetry failure should not crash the turn
|
|
61
|
+
}
|
|
62
|
+
}
|
|
20
63
|
release() {
|
|
21
64
|
this.activeCount--;
|
|
22
65
|
const next = this.queue.shift();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarieSemaphore.js","sourceRoot":"","sources":["../../../../../src/monolith/infrastructure/ai/core/MarieSemaphore.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"MarieSemaphore.js","sourceRoot":"","sources":["../../../../../src/monolith/infrastructure/ai/core/MarieSemaphore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MarieSanitizer } from "./MarieSanitizer.js";
|
|
1
2
|
import { ConfigService } from "../../config/ConfigService.js";
|
|
2
3
|
import { ContextManager } from "../context/ContextManager.js";
|
|
3
4
|
import { SYSTEM_CONTINUATION_PROMPT, SYSTEM_PROMPT, } from "../../../../prompts.js";
|
|
@@ -22,10 +23,88 @@ export class MarieSession {
|
|
|
22
23
|
this.providerFactory = providerFactory;
|
|
23
24
|
this.promptProfile = promptProfile;
|
|
24
25
|
}
|
|
25
|
-
resolveSystemPrompt() {
|
|
26
|
-
|
|
26
|
+
async resolveSystemPrompt() {
|
|
27
|
+
const basePrompt = this.promptProfile === "continuation"
|
|
27
28
|
? SYSTEM_CONTINUATION_PROMPT
|
|
28
29
|
: SYSTEM_PROMPT;
|
|
30
|
+
try {
|
|
31
|
+
const { NoormmeEngine } = await import("../../persistence/NoormmeEngine.js");
|
|
32
|
+
const db = await NoormmeEngine.getInstance();
|
|
33
|
+
// Query for the active or verifying persona
|
|
34
|
+
const result = await db.execute(`
|
|
35
|
+
SELECT * FROM agent_personas
|
|
36
|
+
WHERE status = 'active'
|
|
37
|
+
OR json_extract(metadata, '$.evolution_status') = 'verifying'
|
|
38
|
+
ORDER BY CASE WHEN json_extract(metadata, '$.evolution_status') = 'verifying' THEN 0 ELSE 1 END, updated_at DESC
|
|
39
|
+
LIMIT 1
|
|
40
|
+
`);
|
|
41
|
+
let activePersona = result.length > 0 ? result[0] : null;
|
|
42
|
+
if (!activePersona) {
|
|
43
|
+
activePersona = await db.agent.cortex.personas.getPersona("Marie-Base");
|
|
44
|
+
}
|
|
45
|
+
if (activePersona?.role) {
|
|
46
|
+
const isVerifying = activePersona.metadata && (typeof activePersona.metadata === 'string'
|
|
47
|
+
? JSON.parse(activePersona.metadata).evolution_status === 'verifying'
|
|
48
|
+
: activePersona.metadata.evolution_status === 'verifying');
|
|
49
|
+
let prompt = `[${isVerifying ? 'VERIFYING' : 'EVOLVED'} PERSONA: ${activePersona.name}]\n${activePersona.role}\n\n${basePrompt}`;
|
|
50
|
+
// PHASE 6: Systemic Lesson Injection
|
|
51
|
+
try {
|
|
52
|
+
const lessons = await db.agent.cortex.reasoner.synthesizeLessons();
|
|
53
|
+
const lessonHeadings = Object.keys(lessons);
|
|
54
|
+
if (lessonHeadings.length > 0) {
|
|
55
|
+
const lessonSummary = lessonHeadings
|
|
56
|
+
.slice(0, 3)
|
|
57
|
+
.map(topic => `* ${topic.toUpperCase()}: ${lessons[topic][0]}`)
|
|
58
|
+
.join("\n");
|
|
59
|
+
prompt = `[SYSTEMIC BEST PRACTICES]\n${lessonSummary}\n\n${prompt}`;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
console.warn("[MarieSession] Failed to load systemic lessons", e);
|
|
64
|
+
}
|
|
65
|
+
return prompt;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
console.warn("[MarieSession] Failed to load persona or lessons", e);
|
|
70
|
+
}
|
|
71
|
+
return basePrompt;
|
|
72
|
+
}
|
|
73
|
+
async getEvolvedTools() {
|
|
74
|
+
const baseTools = this.toolRegistry.getTools();
|
|
75
|
+
// PHASE 19: Skill Mutation Gate
|
|
76
|
+
if (!ConfigService.isSkillMutationEnabled()) {
|
|
77
|
+
return baseTools;
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
const { NoormmeEngine } = await import("../../persistence/NoormmeEngine.js");
|
|
81
|
+
const db = await NoormmeEngine.getInstance();
|
|
82
|
+
const capabilities = await db.agent.cortex.capabilities.getCapabilities();
|
|
83
|
+
// Create a map of evolved descriptions (Verified > Experimental)
|
|
84
|
+
const evolvedMap = new Map();
|
|
85
|
+
for (const cap of capabilities) {
|
|
86
|
+
if (cap.status === 'verified' || !evolvedMap.has(cap.name)) {
|
|
87
|
+
if (cap.description)
|
|
88
|
+
evolvedMap.set(cap.name, cap.description);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return baseTools.map(tool => {
|
|
92
|
+
const evolvedDesc = evolvedMap.get(tool.name);
|
|
93
|
+
if (evolvedDesc) {
|
|
94
|
+
// PHASE 19: Mutation Sanitization
|
|
95
|
+
const cleanDesc = MarieSanitizer.sanitizeSkillDescription(evolvedDesc);
|
|
96
|
+
if (process.env.MARIE_DEBUG) {
|
|
97
|
+
console.log(`[MarieSession] Injecting evolved description for tool: ${tool.name}`);
|
|
98
|
+
}
|
|
99
|
+
return { ...tool, description: cleanDesc };
|
|
100
|
+
}
|
|
101
|
+
return tool;
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
console.warn("[MarieSession] Failed to fetch evolved tools", e);
|
|
106
|
+
return baseTools;
|
|
107
|
+
}
|
|
29
108
|
}
|
|
30
109
|
async *executeLoop(messages, signal, state) {
|
|
31
110
|
// PHASE 6: Generator Disposal Grace - Snapshot messages before modification
|
|
@@ -45,8 +124,8 @@ export class MarieSession {
|
|
|
45
124
|
model: ConfigService.getModel(),
|
|
46
125
|
max_tokens: 8192,
|
|
47
126
|
messages: managedMessages,
|
|
48
|
-
system: this.resolveSystemPrompt(),
|
|
49
|
-
tools: this.
|
|
127
|
+
system: await this.resolveSystemPrompt(),
|
|
128
|
+
tools: await this.getEvolvedTools(),
|
|
50
129
|
};
|
|
51
130
|
const eventQueue = [];
|
|
52
131
|
let resolver = null;
|
|
@@ -75,19 +154,20 @@ export class MarieSession {
|
|
|
75
154
|
attempts++;
|
|
76
155
|
const isRetryable = e.status === 429 ||
|
|
77
156
|
e.status >= 500 ||
|
|
78
|
-
e.message?.includes("rate limit")
|
|
157
|
+
e.message?.includes("rate limit") ||
|
|
158
|
+
e.message?.includes("timeout") ||
|
|
159
|
+
e.message?.includes("ECONNRESET");
|
|
79
160
|
if (isRetryable && attempts < maxAttempts && this.providerFactory) {
|
|
80
|
-
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
console.warn(`[SpectralFailover] Attempt ${attempts} failed for ${currentType}. Switching to ${failoverType}.`);
|
|
161
|
+
// Re-evaluating failover logic inside the catch block
|
|
162
|
+
const currentProviderName = this.provider.constructor.name.replace("Provider", "").toLowerCase();
|
|
163
|
+
const failoverPriority = ConfigService.getFailoverPriority();
|
|
164
|
+
const nextIndex = (failoverPriority.indexOf(currentProviderName) + 1) % failoverPriority.length;
|
|
165
|
+
const failoverType = failoverPriority[nextIndex];
|
|
166
|
+
console.warn(`[SpectralFailover] Attempt ${attempts} failed for ${currentProviderName}. Failover to ${failoverType}...`);
|
|
87
167
|
this.tracker?.emitEvent({
|
|
88
168
|
type: "reasoning",
|
|
89
169
|
runId: this.tracker.getRun().runId,
|
|
90
|
-
text: `🔄 SPECTRAL FAILOVER: ${
|
|
170
|
+
text: `🔄 SPECTRAL FAILOVER: ${currentProviderName} is struggling. Switching to ${failoverType} (Attempt ${attempts}/${maxAttempts})...`,
|
|
91
171
|
elapsedMs: this.tracker.elapsedMs(),
|
|
92
172
|
});
|
|
93
173
|
this.provider = this.providerFactory(failoverType);
|
|
@@ -180,8 +260,8 @@ export class MarieSession {
|
|
|
180
260
|
model: ConfigService.getModel(),
|
|
181
261
|
max_tokens: 8192,
|
|
182
262
|
messages: await ContextManager.manage(this.messages, this.provider, state),
|
|
183
|
-
system: this.resolveSystemPrompt(),
|
|
184
|
-
tools: this.
|
|
263
|
+
system: await this.resolveSystemPrompt(),
|
|
264
|
+
tools: await this.getEvolvedTools(),
|
|
185
265
|
};
|
|
186
266
|
const response = await this.provider.createMessageStream(params, () => { });
|
|
187
267
|
let finalContent = response.content;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarieSession.js","sourceRoot":"","sources":["../../../../../src/monolith/infrastructure/ai/core/MarieSession.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EACL,0BAA0B,EAC1B,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOnD;;GAEG;AACH,MAAM,OAAO,YAAY;IAEb;IACA;IACA;IACA;IACA;IACA;IACA;IAPV,YACU,QAAoB,EACpB,YAA0B,EAC1B,WAA+C,EAC/C,QAAe,EACf,OAA8B,EAC9B,eAA8C,EAC9C,gBAA2C,MAAM;QANjD,aAAQ,GAAR,QAAQ,CAAY;QACpB,iBAAY,GAAZ,YAAY,CAAc;QAC1B,gBAAW,GAAX,WAAW,CAAoC;QAC/C,aAAQ,GAAR,QAAQ,CAAO;QACf,YAAO,GAAP,OAAO,CAAuB;QAC9B,oBAAe,GAAf,eAAe,CAA+B;QAC9C,kBAAa,GAAb,aAAa,CAAoC;
|
|
1
|
+
{"version":3,"file":"MarieSession.js","sourceRoot":"","sources":["../../../../../src/monolith/infrastructure/ai/core/MarieSession.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,27 @@ export class MarieStabilityMonitor {
|
|
|
42
42
|
const heapPressure = mem.heapUsed / mem.heapTotal > 0.85;
|
|
43
43
|
return this.lag > 100 || heapPressure || this.cooldownActive;
|
|
44
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* CRITICAL PRESSURE: Returns true if the system is at risk of instability or crash.
|
|
47
|
+
*/
|
|
48
|
+
static isCriticalPressure() {
|
|
49
|
+
const mem = process.memoryUsage();
|
|
50
|
+
const heapPressure = mem.heapUsed / mem.heapTotal > 0.92;
|
|
51
|
+
return this.lag > 300 || heapPressure;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* THROTTLE FACTOR: Returns a value between 0.5 (heavy lag) and 1.0 (stable).
|
|
55
|
+
* Used to scale timeouts and budgets.
|
|
56
|
+
*/
|
|
57
|
+
static getThrottleFactor() {
|
|
58
|
+
if (this.lag > 500)
|
|
59
|
+
return 0.5;
|
|
60
|
+
if (this.lag > 200)
|
|
61
|
+
return 0.7;
|
|
62
|
+
if (this.lag > 100)
|
|
63
|
+
return 0.85;
|
|
64
|
+
return 1.0;
|
|
65
|
+
}
|
|
45
66
|
static getLag() {
|
|
46
67
|
return this.lag;
|
|
47
68
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarieStabilityMonitor.js","sourceRoot":"","sources":["../../../../../src/monolith/infrastructure/ai/core/MarieStabilityMonitor.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IACxB,MAAM,CAAC,GAAG,GAAW,CAAC,CAAC;IACvB,MAAM,CAAC,QAAQ,GAA0B,IAAI,CAAC;IAC9C,MAAM,CAAC,QAAQ,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;IACrC,MAAM,CAAC,cAAc,GAAY,KAAK,CAAC;IAExC,MAAM,CAAC,KAAK;QACjB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACzC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;YAEpB,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CACV,oDAAoD,IAAI,CAAC,GAAG,0CAA0C,CACvG,CAAC;gBACF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC7B,CAAC;iBAAM,IAAI,IAAI,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC;gBACzB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC9B,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,+CAA+C;QAC/C,IAAK,IAAI,CAAC,QAAgB,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,CAAC,QAAgB,CAAC,KAAK,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,IAAI;QAChB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,cAAc;QAC1B,wFAAwF;QACxF,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;QACzD,OAAO,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC;IAC/D,CAAC;IAEM,MAAM,CAAC,MAAM;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAEM,MAAM,CAAC,UAAU;QACtB,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAClC,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,GAAG;YACf,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;YAClD,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;YACpD,QAAQ,EAAE,IAAI,CAAC,cAAc;SAC9B,CAAC;IACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"MarieStabilityMonitor.js","sourceRoot":"","sources":["../../../../../src/monolith/infrastructure/ai/core/MarieStabilityMonitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,12 @@ export class MarieToolMender {
|
|
|
40
40
|
});
|
|
41
41
|
toolCall.name = mappedName;
|
|
42
42
|
toolCall.repaired = true;
|
|
43
|
+
// PHASE 19: Capability Check Post-Repair
|
|
44
|
+
const repairGate = processor.validate(mappedName, toolCall.input);
|
|
45
|
+
if (repairGate) {
|
|
46
|
+
tracker.recordLog(`[ToolMender] Proactive repair to ${mappedName} blocked by security gate: ${repairGate}`);
|
|
47
|
+
return repairGate;
|
|
48
|
+
}
|
|
43
49
|
return await processor.process(toolCall, signal);
|
|
44
50
|
}
|
|
45
51
|
}
|
|
@@ -67,6 +73,12 @@ export class MarieToolMender {
|
|
|
67
73
|
elapsedMs: tracker.elapsedMs(),
|
|
68
74
|
});
|
|
69
75
|
toolCall.name = bestToolMatch.name;
|
|
76
|
+
// PHASE 19: Capability Check Post-Repair
|
|
77
|
+
const repairGate = processor.validate(bestToolMatch.name, toolCall.input);
|
|
78
|
+
if (repairGate) {
|
|
79
|
+
tracker.recordLog(`[ToolMender] Fuzzy repair to ${bestToolMatch.name} blocked by security gate: ${repairGate}`);
|
|
80
|
+
return repairGate;
|
|
81
|
+
}
|
|
70
82
|
return await processor.process(toolCall, signal);
|
|
71
83
|
}
|
|
72
84
|
// 2. Path Repair (if "File not found")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarieToolMender.js","sourceRoot":"","sources":["../../../../../src/monolith/infrastructure/ai/core/MarieToolMender.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"MarieToolMender.js","sourceRoot":"","sources":["../../../../../src/monolith/infrastructure/ai/core/MarieToolMender.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as path from "path";
|
|
2
2
|
import { nodeRequire } from "../../../plumbing/utils/EnvironmentUtils.js";
|
|
3
|
+
import { NoormmeEngine } from "../../persistence/NoormmeEngine.js";
|
|
4
|
+
import { ConfigService } from "../../config/ConfigService.js";
|
|
3
5
|
const require = nodeRequire;
|
|
4
6
|
// Lazy-load vscode to avoid CLI errors
|
|
5
7
|
let vscodeModule = null;
|
|
@@ -20,6 +22,7 @@ import { getStringArg } from "../../tools/ToolUtils.js";
|
|
|
20
22
|
import { getErrorMessage } from "../../../plumbing/utils/ErrorUtils.js";
|
|
21
23
|
import { withRetry, RetryConfig } from "../../../plumbing/utils/RetryUtils.js";
|
|
22
24
|
import { rollbackAll, } from "../../../plumbing/filesystem/FileService.js";
|
|
25
|
+
import { MarieSanitizer } from "./MarieSanitizer.js";
|
|
23
26
|
/**
|
|
24
27
|
* Handles the validation and execution of AI tool calls.
|
|
25
28
|
*/
|
|
@@ -31,6 +34,36 @@ export class MarieToolProcessor {
|
|
|
31
34
|
fs;
|
|
32
35
|
static RETRY_CONFIG = new RetryConfig();
|
|
33
36
|
failureCircuitBreaker = new Map();
|
|
37
|
+
static TOOL_CAPABILITIES = {
|
|
38
|
+
// READ
|
|
39
|
+
"read_file": ["READ"],
|
|
40
|
+
"view_file": ["READ"],
|
|
41
|
+
"list_dir": ["READ"],
|
|
42
|
+
"grep_search": ["READ"],
|
|
43
|
+
"find_by_name": ["READ"],
|
|
44
|
+
"get_file_diagnostics": ["READ"],
|
|
45
|
+
// WRITE
|
|
46
|
+
"write_to_file": ["WRITE"],
|
|
47
|
+
"replace_file_content": ["WRITE"],
|
|
48
|
+
"multi_replace_file_content": ["WRITE"],
|
|
49
|
+
"delete_file": ["WRITE"],
|
|
50
|
+
"rename_file": ["WRITE"],
|
|
51
|
+
"move_file": ["WRITE"],
|
|
52
|
+
// SHELL
|
|
53
|
+
"run_command": ["SHELL"],
|
|
54
|
+
// NETWORK
|
|
55
|
+
"search_web": ["NETWORK"],
|
|
56
|
+
"read_url_content": ["NETWORK"],
|
|
57
|
+
"read_browser_page": ["NETWORK"],
|
|
58
|
+
"open_browser_url": ["NETWORK"],
|
|
59
|
+
// SOVEREIGN OPS
|
|
60
|
+
"evolve_mind_structure": ["WRITE", "SHELL"],
|
|
61
|
+
"prune_sovereign_memory": ["WRITE"],
|
|
62
|
+
"complete_task_ritual": ["READ", "WRITE"],
|
|
63
|
+
// COMPLEX / MULTI
|
|
64
|
+
"execute_semantic_move": ["READ", "WRITE"],
|
|
65
|
+
"self_heal": ["READ", "WRITE", "SHELL"],
|
|
66
|
+
};
|
|
34
67
|
constructor(toolRegistry, tracker, approvalRequester, state, fs) {
|
|
35
68
|
this.toolRegistry = toolRegistry;
|
|
36
69
|
this.tracker = tracker;
|
|
@@ -45,28 +78,54 @@ export class MarieToolProcessor {
|
|
|
45
78
|
if (repaired) {
|
|
46
79
|
this.tracker.recordHeuristicFix(toolCall.name);
|
|
47
80
|
}
|
|
48
|
-
// SUB-ATOMIC INTEGRITY: Tool Circuit Breaker
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
81
|
+
// SUB-ATOMIC INTEGRITY: Persistent Tool Circuit Breaker
|
|
82
|
+
// Check if this tool + input has failed repeatedly in the recent past (persisted in NOORMME)
|
|
83
|
+
try {
|
|
84
|
+
const db = await NoormmeEngine.getInstance();
|
|
85
|
+
const recentFailures = await db.execute(`SELECT COUNT(*) as count FROM agent_actions
|
|
86
|
+
WHERE tool_name = ? AND input_summary = ? AND status = 'failure'
|
|
87
|
+
AND created_at > datetime('now', '-1 hour')`, [name, inputStr.slice(0, 500)] // Use input_summary or similar if available, otherwise truncate input
|
|
88
|
+
);
|
|
89
|
+
if (recentFailures[0]?.count >= 3) {
|
|
90
|
+
this.recordError(name, `PERSISTENT CIRCUIT BREAKER: ${name} has failed ${recentFailures[0].count} times recently with similar input.`, true);
|
|
91
|
+
return `HALT: Protocol Violation. Persistent circuit breaker tripped for ${name}. Your current trajectory for this tool is failing repeatedly. Pivot your strategy.`;
|
|
92
|
+
}
|
|
55
93
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
94
|
+
catch (e) {
|
|
95
|
+
console.warn("[MarieToolProcessor] Persistent circuit breaker check failed", e);
|
|
96
|
+
// Fallback to in-memory breaker if DB is unavailable
|
|
97
|
+
const failureState = this.failureCircuitBreaker.get(name);
|
|
98
|
+
if (failureState &&
|
|
99
|
+
failureState.lastInput === inputStr &&
|
|
100
|
+
failureState.count >= 3) {
|
|
101
|
+
return `HALT: Protocol Violation. In-memory circuit breaker tripped for ${name}.`;
|
|
102
|
+
}
|
|
60
103
|
}
|
|
104
|
+
const tool = this.toolRegistry.getTool(toolCall.name);
|
|
61
105
|
try {
|
|
62
106
|
const validationError = this.validate(toolCall.name, input);
|
|
63
107
|
if (validationError) {
|
|
64
108
|
this.recordError(toolCall.name, validationError);
|
|
65
109
|
return `Error: ${validationError}`;
|
|
66
110
|
}
|
|
67
|
-
//
|
|
111
|
+
// PHASE 23: COGNITIVE MULTI-FACTOR AUTHENTICATION (C-MFA)
|
|
112
|
+
if (this.requiresSovereignAffirmation(toolCall.name, input)) {
|
|
113
|
+
const approved = await this.requestApproval(toolCall.name, input);
|
|
114
|
+
if (!approved) {
|
|
115
|
+
return `Sovereign Denial: High-Entropy operation "${toolCall.name}" rejected by governor. 🛡️`;
|
|
116
|
+
}
|
|
117
|
+
this.tracker.emitEvent({
|
|
118
|
+
type: "reasoning",
|
|
119
|
+
runId: this.tracker.getRun().runId,
|
|
120
|
+
text: `🔐 **C-MFA AFFIRMED**: Sovereign clearance granted for high-risk operation.`,
|
|
121
|
+
elapsedMs: this.tracker.elapsedMs(),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
// Autonomy: destructive tools execute immediately without approval gates (UNLESS C-MFA triggered above).
|
|
68
125
|
const toolStartTime = Date.now();
|
|
69
|
-
|
|
126
|
+
const startMsg = `[Marie] Tool ${toolCall.name} starting. ID: ${toolCall.id}`;
|
|
127
|
+
console.log(startMsg);
|
|
128
|
+
this.tracker.recordLog(startMsg);
|
|
70
129
|
const sanitizedInput = { ...input };
|
|
71
130
|
// Hygiene: Truncate massive fields to prevent log bloat
|
|
72
131
|
if (typeof sanitizedInput.content === "string" &&
|
|
@@ -164,6 +223,27 @@ export class MarieToolProcessor {
|
|
|
164
223
|
}
|
|
165
224
|
// CIRCUIT BREAKER FLUSH: Tool succeeded
|
|
166
225
|
this.failureCircuitBreaker.delete(name);
|
|
226
|
+
// PHASE 7: Milestone Verification
|
|
227
|
+
try {
|
|
228
|
+
const { NoormmeEngine } = await import("../../persistence/NoormmeEngine.js");
|
|
229
|
+
const db = await NoormmeEngine.getInstance();
|
|
230
|
+
const originatingSessionId = this.tracker.getRun().originatingSessionId || "default";
|
|
231
|
+
const pendingGoals = await db.agent.cortex.sessions.getGoals(originatingSessionId);
|
|
232
|
+
for (const goal of pendingGoals) {
|
|
233
|
+
if (goal.status !== "completed" && goal.description.toLowerCase().includes(name.toLowerCase())) {
|
|
234
|
+
await db.agent.cortex.goalArchitect.markGoalAs(goal.id, "completed");
|
|
235
|
+
this.tracker.emitEvent({
|
|
236
|
+
type: "reasoning",
|
|
237
|
+
runId: this.tracker.getRun().runId,
|
|
238
|
+
text: `✅ **Milestone Achieved**: ${goal.description}`,
|
|
239
|
+
elapsedMs: this.tracker.elapsedMs(),
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
catch (e) {
|
|
245
|
+
console.warn("[MarieToolProcessor] Milestone verification failed", e);
|
|
246
|
+
}
|
|
167
247
|
const toolDurationMs = Date.now() - toolStartTime;
|
|
168
248
|
console.log(`[Marie] Tool ${toolCall.name} completed in ${toolDurationMs}ms.`);
|
|
169
249
|
this.tracker.emitEvent({
|
|
@@ -271,6 +351,8 @@ export class MarieToolProcessor {
|
|
|
271
351
|
this.failureCircuitBreaker.set(name, state);
|
|
272
352
|
this.recordError(name, rawMsg, isTerminal, toolCall.id);
|
|
273
353
|
console.error(`[Marie] Tool ${name} failed: ${rawMsg}`);
|
|
354
|
+
this.recordError(name, rawMsg, isTerminal, toolCall.id);
|
|
355
|
+
console.error(`[Marie] Tool ${name} failed: ${rawMsg}`);
|
|
274
356
|
// Ascension Mastery: Record failure
|
|
275
357
|
const failFile = toolCall.input?.path ||
|
|
276
358
|
toolCall.input?.targetFile ||
|
|
@@ -289,12 +371,28 @@ export class MarieToolProcessor {
|
|
|
289
371
|
this.state.errorHotspots[failFile] =
|
|
290
372
|
(this.state.errorHotspots[failFile] || 0) + 1;
|
|
291
373
|
}
|
|
374
|
+
// PHASE 9: Report Consecutive Failures to Metrics
|
|
375
|
+
try {
|
|
376
|
+
const { NoormmeEngine } = await import("../../persistence/NoormmeEngine.js");
|
|
377
|
+
const db = await NoormmeEngine.getInstance();
|
|
378
|
+
const originatingSessionId = this.tracker.getRun().originatingSessionId || "default";
|
|
379
|
+
const failureCount = state.count;
|
|
380
|
+
await db.agent.cortex.metrics.recordMetric("consecutive_failures", failureCount, {
|
|
381
|
+
sessionId: originatingSessionId,
|
|
382
|
+
metadata: { toolName: name, filePath: failFile }
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
catch (e) {
|
|
386
|
+
console.warn("[MarieToolProcessor] Failed to report failure metrics", e);
|
|
387
|
+
}
|
|
292
388
|
if (isTerminal || state.count >= 3) {
|
|
293
389
|
const circuitBreakerSuffix = state.count >= 3 ? " [CIRCUIT BREAKER TRIPPED]" : "";
|
|
294
390
|
return `HALT: Critical protocol or parsing failure in ${name}: ${rawMsg}${circuitBreakerSuffix}${rollbackErrorMsg}`;
|
|
295
391
|
}
|
|
296
392
|
// Constructive Feedback Layer
|
|
297
|
-
const msgParts = [
|
|
393
|
+
const msgParts = [
|
|
394
|
+
`Error executing ${name}: ${rawMsg}${rollbackErrorMsg}`,
|
|
395
|
+
];
|
|
298
396
|
// Ascension-Aware Error Hotspot Hint
|
|
299
397
|
if (failFile && typeof failFile === "string") {
|
|
300
398
|
const hotspotCount = this.state.errorHotspots[failFile] || 0;
|
|
@@ -336,6 +434,15 @@ export class MarieToolProcessor {
|
|
|
336
434
|
return false;
|
|
337
435
|
}
|
|
338
436
|
validate(name, input) {
|
|
437
|
+
// PHASE 21: DEFAULT-DENY POLICY
|
|
438
|
+
// If a tool is not in TOOL_CAPABILITIES, we default to READ only for safety.
|
|
439
|
+
const requirements = MarieToolProcessor.TOOL_CAPABILITIES[name] || ["READ"];
|
|
440
|
+
// Capability check
|
|
441
|
+
const allowedCapabilities = ConfigService.getCapabilities();
|
|
442
|
+
const missing = requirements.filter(cap => !allowedCapabilities.includes(cap));
|
|
443
|
+
if (missing.length > 0) {
|
|
444
|
+
return `Sovereign Capability Breach: Tool "${name}" requires missing capabilities: [${missing.join(", ")}]. 🛑`;
|
|
445
|
+
}
|
|
339
446
|
if (!input || typeof input !== "object")
|
|
340
447
|
return "Input must be a valid object";
|
|
341
448
|
const tool = this.toolRegistry.getTool(name);
|
|
@@ -365,8 +472,37 @@ export class MarieToolProcessor {
|
|
|
365
472
|
return pathError;
|
|
366
473
|
}
|
|
367
474
|
}
|
|
475
|
+
// PHASE 23: Adversarial Reasoning Guard
|
|
476
|
+
const alerts = MarieSanitizer.scanToolArguments(name, input);
|
|
477
|
+
if (alerts.length > 0) {
|
|
478
|
+
this.tracker.emitEvent({
|
|
479
|
+
type: "reasoning",
|
|
480
|
+
runId: this.tracker.getRun().runId,
|
|
481
|
+
text: `🛡️ **ADVERSARIAL GUARD**: ${alerts.join(" ")}`,
|
|
482
|
+
elapsedMs: this.tracker.elapsedMs(),
|
|
483
|
+
});
|
|
484
|
+
if (ConfigService.getAdversarialSensitivity() > 0.8) {
|
|
485
|
+
return `Sovereign Security Breach: Dangerous patterns detected in tool arguments. Execution blocked by Adversarial Guard. 🛑`;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
368
488
|
return null;
|
|
369
489
|
}
|
|
490
|
+
requiresSovereignAffirmation(name, input) {
|
|
491
|
+
if (!ConfigService.isMfaRequired())
|
|
492
|
+
return false;
|
|
493
|
+
// High-risk tools or arguments
|
|
494
|
+
if (name === "run_command") {
|
|
495
|
+
const cmd = (input.CommandLine || input.command || "").toLowerCase();
|
|
496
|
+
const destructiveKeywords = ["sudo ", "rm ", "kill ", "chmod ", "> /dev/", "format ", "mkfs "];
|
|
497
|
+
if (destructiveKeywords.some(kw => cmd.includes(kw)))
|
|
498
|
+
return true;
|
|
499
|
+
}
|
|
500
|
+
if (name === "delete_file" || name === "prune_sovereign_memory")
|
|
501
|
+
return true;
|
|
502
|
+
// Escalate if sanitizer found alerts
|
|
503
|
+
const alerts = MarieSanitizer.scanToolArguments(name, input);
|
|
504
|
+
return alerts.length > 0;
|
|
505
|
+
}
|
|
370
506
|
validatePath(p) {
|
|
371
507
|
const vscode = getVscode();
|
|
372
508
|
const workspaceFolders = vscode?.workspace.workspaceFolders;
|
|
@@ -384,6 +520,11 @@ export class MarieToolProcessor {
|
|
|
384
520
|
return `Security Error: Path ${p} is outside the workspace boundary (${workspaceRoot}). Access denied. 🛑`;
|
|
385
521
|
}
|
|
386
522
|
}
|
|
523
|
+
if (p.startsWith("/") || (p.length > 1 && p[1] === ":")) {
|
|
524
|
+
if (!p.startsWith(workspaceRoot)) {
|
|
525
|
+
return `Security Error: Path ${p} is outside the workspace boundary (${workspaceRoot}). Access denied. 🛑`;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
387
528
|
return null;
|
|
388
529
|
}
|
|
389
530
|
async requestApproval(name, input) {
|