@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,230 @@
|
|
|
1
|
+
import { MARIE_YOLO_SYSTEM_PROMPT } from "../../../../prompts.js";
|
|
2
|
+
import { ConfigService } from "../../config/ConfigService.js";
|
|
3
|
+
import { MarieResponse } from "../core/MarieResponse.js";
|
|
4
|
+
export class MarieAscendant {
|
|
5
|
+
provider;
|
|
6
|
+
// ASCENSION PROTOCOL: Spirit pressure persistence across turns
|
|
7
|
+
lastConfidence = 1.2;
|
|
8
|
+
consecutiveSuccesses = 0;
|
|
9
|
+
constructor(provider) {
|
|
10
|
+
this.provider = provider;
|
|
11
|
+
}
|
|
12
|
+
async evaluate(messages, state, options) {
|
|
13
|
+
try {
|
|
14
|
+
const profile = options?.profile ?? ConfigService.getAscensionProfile();
|
|
15
|
+
const aggression = options?.aggression ?? ConfigService.getAscensionIntensity();
|
|
16
|
+
const maxRequiredActions = options?.maxRequiredActions ??
|
|
17
|
+
ConfigService.getAscensionMaxRequiredActions();
|
|
18
|
+
const hotspots = Object.entries(state.errorHotspots)
|
|
19
|
+
.filter(([_, c]) => c >= 2)
|
|
20
|
+
.map(([f, c]) => `${f}(${c}x)`)
|
|
21
|
+
.join(", ") || "None";
|
|
22
|
+
const contextPrompt = `
|
|
23
|
+
[ASCENSION CONTEXT]
|
|
24
|
+
Memory Snapshot:
|
|
25
|
+
- Spirit Pressure (Flow): ${state.spiritPressure}/100
|
|
26
|
+
- Victory Streak: ${state.victoryStreak}
|
|
27
|
+
- Karma Drain (Errors): ${state.totalErrorCount}
|
|
28
|
+
- Curse Hotspots: ${hotspots}
|
|
29
|
+
- Recent Echoes: ${state.recentFiles.slice(-5).join(", ")}
|
|
30
|
+
- Protocol: ${profile}
|
|
31
|
+
- Intensity: ${aggression}
|
|
32
|
+
- Environment: ${state.environment}
|
|
33
|
+
|
|
34
|
+
[SOVEREIGN DUTIES]
|
|
35
|
+
Your decree integrates Strategic Trajectory, Quality Audit, and Stability Guardianship.
|
|
36
|
+
|
|
37
|
+
Return guidance in the exact structure below:
|
|
38
|
+
Strategy: EXECUTE|DEBUG|RESEARCH|HYPE|PANIC
|
|
39
|
+
Urgency: LOW|MEDIUM|HIGH
|
|
40
|
+
Confidence: 0.5-3.0
|
|
41
|
+
Structural Uncertainty: YES|NO
|
|
42
|
+
Continue Directive: YES|NO
|
|
43
|
+
Required Actions: action1 | action2
|
|
44
|
+
Blocked By: blocker1 | blocker2
|
|
45
|
+
Stop Condition: landed|structural_uncertainty
|
|
46
|
+
Reason: <one concise line integrating Auditor/ISO findings>
|
|
47
|
+
|
|
48
|
+
Required Actions must be <= ${maxRequiredActions}.`;
|
|
49
|
+
const providerResponse = await this.provider.createMessage({
|
|
50
|
+
model: ConfigService.getModel(),
|
|
51
|
+
system: MARIE_YOLO_SYSTEM_PROMPT,
|
|
52
|
+
messages: [
|
|
53
|
+
...messages.map((m) => ({ role: m.role, content: m.content })),
|
|
54
|
+
{ role: "user", content: contextPrompt },
|
|
55
|
+
],
|
|
56
|
+
max_tokens: 900,
|
|
57
|
+
});
|
|
58
|
+
const raw = MarieResponse.wrap(providerResponse.content)
|
|
59
|
+
.getText()
|
|
60
|
+
.substring(0, 1200);
|
|
61
|
+
return this.parseDecree(raw, messages, state, profile, aggression, maxRequiredActions, state.victoryStreak);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
console.error("MarieAscendant evaluation error", error);
|
|
65
|
+
return {
|
|
66
|
+
strategy: "EXECUTE",
|
|
67
|
+
urgency: "MEDIUM",
|
|
68
|
+
confidence: Math.max(1.2, this.lastConfidence * 0.8),
|
|
69
|
+
isContinueDirective: this.hasContinueDirective(messages),
|
|
70
|
+
structuralUncertainty: false,
|
|
71
|
+
reason: "Fallback: Hero maintains course via instinct.",
|
|
72
|
+
requiredActions: [],
|
|
73
|
+
blockedBy: [],
|
|
74
|
+
stopCondition: "landed",
|
|
75
|
+
profile: ConfigService.getAscensionProfile(),
|
|
76
|
+
raw: "Fallback decree (spirit pressure rift)",
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
parseDecree(raw, messages, state, profile, aggression, maxRequiredActions, victoryStreak) {
|
|
81
|
+
const normalized = raw.replace(/\r/g, "");
|
|
82
|
+
const strategyMatch = normalized.match(/Strategy\s*:\s*(EXECUTE|DEBUG|RESEARCH|HYPE|PANIC)/i);
|
|
83
|
+
const urgencyMatch = normalized.match(/Urgency\s*:\s*(LOW|MEDIUM|HIGH)/i);
|
|
84
|
+
const confidenceMatch = normalized.match(/Confidence\s*:\s*([0-9]+(?:\.[0-9]+)?)/i);
|
|
85
|
+
const uncertaintyMatch = normalized.match(/Structural\s*Uncertainty\s*:\s*(YES|NO|TRUE|FALSE)/i);
|
|
86
|
+
const continueMatch = normalized.match(/Continue\s*Directive\s*:\s*(YES|NO|TRUE|FALSE)/i);
|
|
87
|
+
const requiredActionsMatch = normalized.match(/Required\s*Actions\s*:\s*(.+)/i);
|
|
88
|
+
const vowMatch = normalized.match(/Heroic\s*Vow\s*:\s*(.+)/i);
|
|
89
|
+
const bondMatch = normalized.match(/Karma\s*Bond\s*:\s*(.+)/i);
|
|
90
|
+
const sacrificeMatch = normalized.match(/Sacrifice\s*Triggered\s*:\s*(YES|NO|TRUE|FALSE)/i);
|
|
91
|
+
const blockedByMatch = normalized.match(/Blocked\s*By\s*:\s*(.+)/i);
|
|
92
|
+
const stopConditionMatch = normalized.match(/Stop\s*Condition\s*:\s*(landed|structural_uncertainty)/i);
|
|
93
|
+
const reasonMatch = normalized.match(/Reason\s*:\s*(.+)/i);
|
|
94
|
+
const inferredStrategy = this.inferStrategy(normalized);
|
|
95
|
+
const strategy = strategyMatch?.[1]?.toUpperCase() ||
|
|
96
|
+
inferredStrategy;
|
|
97
|
+
const urgency = urgencyMatch?.[1]?.toUpperCase() ||
|
|
98
|
+
this.inferUrgency(normalized);
|
|
99
|
+
let confidence = this.clampConfidence(Number(confidenceMatch?.[1] ?? this.inferConfidence(urgency, strategy)));
|
|
100
|
+
const structuralUncertainty = this.parseBoolean(uncertaintyMatch?.[1]) ||
|
|
101
|
+
this.inferUncertainty(normalized);
|
|
102
|
+
const isContinueDirective = this.parseBoolean(continueMatch?.[1]) ||
|
|
103
|
+
this.hasContinueDirective(messages) ||
|
|
104
|
+
/continue\s+immediately/i.test(normalized);
|
|
105
|
+
const requiredActions = this.parseDelimitedList(requiredActionsMatch?.[1]).slice(0, maxRequiredActions);
|
|
106
|
+
const heroicVow = vowMatch?.[1]?.trim();
|
|
107
|
+
const karmaBond = bondMatch?.[1]?.trim();
|
|
108
|
+
const sacrificeTriggered = this.parseBoolean(sacrificeMatch?.[1]);
|
|
109
|
+
const blockedBy = this.parseDelimitedList(blockedByMatch?.[1]).slice(0, 4);
|
|
110
|
+
const stopCondition = stopConditionMatch?.[1]?.toLowerCase() ||
|
|
111
|
+
(structuralUncertainty ? "structural_uncertainty" : "landed");
|
|
112
|
+
if (heroicVow) {
|
|
113
|
+
confidence = Math.min(3.0, confidence + 0.5); // Vow bonus
|
|
114
|
+
}
|
|
115
|
+
if (state.isAwakened) {
|
|
116
|
+
confidence = 3.0; // Awakened state locks confidence at maximum
|
|
117
|
+
}
|
|
118
|
+
confidence = this.applyProfileTuning(confidence, profile, aggression, structuralUncertainty, victoryStreak);
|
|
119
|
+
if (isContinueDirective &&
|
|
120
|
+
(strategy === "EXECUTE" || strategy === "HYPE")) {
|
|
121
|
+
confidence = Math.min(3.0, confidence + 0.3);
|
|
122
|
+
}
|
|
123
|
+
// Update persistence for next turn
|
|
124
|
+
this.lastConfidence = confidence;
|
|
125
|
+
if (strategy === "EXECUTE" || strategy === "HYPE") {
|
|
126
|
+
this.consecutiveSuccesses++;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
this.consecutiveSuccesses = 0;
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
strategy,
|
|
133
|
+
urgency,
|
|
134
|
+
confidence,
|
|
135
|
+
structuralUncertainty,
|
|
136
|
+
isContinueDirective,
|
|
137
|
+
heroicVow,
|
|
138
|
+
sacrificeTriggered,
|
|
139
|
+
reason: (reasonMatch?.[1] || this.defaultReason(strategy, urgency))
|
|
140
|
+
.trim()
|
|
141
|
+
.substring(0, 220),
|
|
142
|
+
requiredActions,
|
|
143
|
+
blockedBy,
|
|
144
|
+
stopCondition,
|
|
145
|
+
profile,
|
|
146
|
+
raw: normalized.substring(0, 1200),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
inferStrategy(text) {
|
|
150
|
+
if (/uncertainty|unknown|unclear|ambiguous\s+structure|dependency\s+risk/i.test(text))
|
|
151
|
+
return "DEBUG";
|
|
152
|
+
if (/research|investigate|inspect/i.test(text))
|
|
153
|
+
return "RESEARCH";
|
|
154
|
+
if (/ship|launch|demo day|hype|singularity/i.test(text))
|
|
155
|
+
return "HYPE";
|
|
156
|
+
if (/panic|halt|assess\s+failure/i.test(text))
|
|
157
|
+
return "PANIC";
|
|
158
|
+
if (/limit\s*break|absolute\s*conviction|no\s*limit/i.test(text))
|
|
159
|
+
return "LIMIT_BREAK";
|
|
160
|
+
return "EXECUTE";
|
|
161
|
+
}
|
|
162
|
+
inferUrgency(text) {
|
|
163
|
+
if (/immediately|now|urgent|critical momentum|no hesitation/i.test(text))
|
|
164
|
+
return "HIGH";
|
|
165
|
+
if (/careful|cautious|stability/i.test(text))
|
|
166
|
+
return "LOW";
|
|
167
|
+
return "MEDIUM";
|
|
168
|
+
}
|
|
169
|
+
inferConfidence(urgency, strategy) {
|
|
170
|
+
if (strategy === "HYPE")
|
|
171
|
+
return 2.0;
|
|
172
|
+
if (strategy === "PANIC")
|
|
173
|
+
return 0.5;
|
|
174
|
+
if (urgency === "HIGH")
|
|
175
|
+
return 1.9;
|
|
176
|
+
if (urgency === "LOW")
|
|
177
|
+
return 1.0;
|
|
178
|
+
return 1.5;
|
|
179
|
+
}
|
|
180
|
+
inferUncertainty(text) {
|
|
181
|
+
return /structural\s+uncertainty|critical unknown|not enough context|missing wiring/i.test(text);
|
|
182
|
+
}
|
|
183
|
+
defaultReason(strategy, urgency) {
|
|
184
|
+
return `Hero signal: ${strategy} with ${urgency.toLowerCase()} urgency.`;
|
|
185
|
+
}
|
|
186
|
+
parseBoolean(value) {
|
|
187
|
+
if (!value)
|
|
188
|
+
return false;
|
|
189
|
+
return ["YES", "TRUE"].includes(value.toUpperCase());
|
|
190
|
+
}
|
|
191
|
+
clampConfidence(value) {
|
|
192
|
+
if (!Number.isFinite(value))
|
|
193
|
+
return 1.2;
|
|
194
|
+
return Math.min(3.0, Math.max(0.5, value));
|
|
195
|
+
}
|
|
196
|
+
applyProfileTuning(baseConfidence, profile, aggression, structuralUncertainty, victoryStreak) {
|
|
197
|
+
let profileMultiplier = 1.0;
|
|
198
|
+
if (profile === "demo_day")
|
|
199
|
+
profileMultiplier = 1.2;
|
|
200
|
+
if (profile === "recovery")
|
|
201
|
+
profileMultiplier = 0.9;
|
|
202
|
+
const streakBonus = Math.min(0.5, (victoryStreak || 0) * 0.05);
|
|
203
|
+
let tuned = baseConfidence * profileMultiplier * aggression * (1 + streakBonus);
|
|
204
|
+
if (structuralUncertainty)
|
|
205
|
+
tuned *= 0.85;
|
|
206
|
+
const persistenceBonus = this.lastConfidence * 0.15;
|
|
207
|
+
tuned += persistenceBonus;
|
|
208
|
+
return this.clampConfidence(tuned);
|
|
209
|
+
}
|
|
210
|
+
parseDelimitedList(raw) {
|
|
211
|
+
if (!raw)
|
|
212
|
+
return [];
|
|
213
|
+
if (/^none$/i.test(raw.trim()))
|
|
214
|
+
return [];
|
|
215
|
+
return raw
|
|
216
|
+
.split(/[|,;]/)
|
|
217
|
+
.map((s) => s.trim())
|
|
218
|
+
.filter(Boolean)
|
|
219
|
+
.slice(0, 6);
|
|
220
|
+
}
|
|
221
|
+
hasContinueDirective(messages) {
|
|
222
|
+
const lastUser = [...messages]
|
|
223
|
+
.reverse()
|
|
224
|
+
.find((m) => m?.role === "user" && typeof m?.content === "string");
|
|
225
|
+
if (!lastUser)
|
|
226
|
+
return false;
|
|
227
|
+
return /\bcontinue\b/i.test(lastUser.content);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=MarieAscendant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarieAscendant.js","sourceRoot":"","sources":["../../../../../src/monolith/infrastructure/ai/agents/MarieAscendant.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { MARIE_YOLO_SYSTEM_PROMPT } from "../../../../prompts.js";
|
|
2
|
+
import { ConfigService } from "../../config/ConfigService.js";
|
|
3
|
+
import { MarieResponse } from "../core/MarieResponse.js";
|
|
4
|
+
export class MarieYOLO {
|
|
5
|
+
provider;
|
|
6
|
+
// ASCENSION PROTOCOL: Spirit pressure persistence across turns
|
|
7
|
+
lastConfidence = 1.2;
|
|
8
|
+
consecutiveSuccesses = 0;
|
|
9
|
+
constructor(provider) {
|
|
10
|
+
this.provider = provider;
|
|
11
|
+
}
|
|
12
|
+
async evaluate(messages, memory, options) {
|
|
13
|
+
try {
|
|
14
|
+
const profile = options?.profile ?? ConfigService.getYoloProfile();
|
|
15
|
+
const aggression = options?.aggression ?? ConfigService.getYoloAggression();
|
|
16
|
+
const maxRequiredActions = options?.maxRequiredActions ?? ConfigService.getYoloMaxRequiredActions();
|
|
17
|
+
// CONSOLIDATED REASONING: YOLO now acts as Auditor, Strategist, and ISO9001
|
|
18
|
+
const hotspots = Object.entries(memory.errorHotspots)
|
|
19
|
+
.filter(([_, c]) => c >= 2)
|
|
20
|
+
.map(([f, c]) => `${f}(${c}x)`)
|
|
21
|
+
.join(', ') || 'None';
|
|
22
|
+
const contextPrompt = `
|
|
23
|
+
[ASCENSION CONTEXT]
|
|
24
|
+
Memory Snapshot:
|
|
25
|
+
- Spirit Pressure (Flow): ${memory.flowState}/100
|
|
26
|
+
- Victory Streak: ${memory.successStreak}
|
|
27
|
+
- Karma Drain (Errors): ${memory.totalErrorCount}
|
|
28
|
+
- Curse Hotspots: ${hotspots}
|
|
29
|
+
- Recent Echoes: ${memory.recentFiles.slice(-5).join(', ')}
|
|
30
|
+
- Protocol: ${profile}
|
|
31
|
+
- Intensity: ${aggression}
|
|
32
|
+
|
|
33
|
+
[SOVEREIGN DUTIES]
|
|
34
|
+
Your decree integrates Strategic Trajectory, Quality Audit, and Stability Guardianship.
|
|
35
|
+
|
|
36
|
+
Return guidance in the exact structure below:
|
|
37
|
+
Strategy: EXECUTE|DEBUG|RESEARCH|HYPE|PANIC
|
|
38
|
+
Urgency: LOW|MEDIUM|HIGH
|
|
39
|
+
Confidence: 0.5-3.0
|
|
40
|
+
Structural Uncertainty: YES|NO
|
|
41
|
+
Continue Directive: YES|NO
|
|
42
|
+
Required Actions: action1 | action2
|
|
43
|
+
Blocked By: blocker1 | blocker2
|
|
44
|
+
Stop Condition: landed|structural_uncertainty
|
|
45
|
+
Reason: <one concise line integrating Auditor/ISO findings>
|
|
46
|
+
|
|
47
|
+
Required Actions must be <= ${maxRequiredActions}.`;
|
|
48
|
+
const providerResponse = await this.provider.createMessage({
|
|
49
|
+
model: ConfigService.getModel(),
|
|
50
|
+
system: MARIE_YOLO_SYSTEM_PROMPT,
|
|
51
|
+
messages: [
|
|
52
|
+
...messages.map(m => ({ role: m.role, content: m.content })),
|
|
53
|
+
{ role: 'user', content: contextPrompt }
|
|
54
|
+
],
|
|
55
|
+
max_tokens: 900,
|
|
56
|
+
});
|
|
57
|
+
const raw = MarieResponse.wrap(providerResponse.content).getText().substring(0, 1200);
|
|
58
|
+
return this.parseDecision(raw, messages, profile, aggression, maxRequiredActions, memory.successStreak);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
console.error("MarieYOLO evaluation error", error);
|
|
62
|
+
return {
|
|
63
|
+
strategy: 'EXECUTE',
|
|
64
|
+
urgency: 'MEDIUM',
|
|
65
|
+
confidence: Math.max(1.2, this.lastConfidence * 0.8),
|
|
66
|
+
isContinueDirective: this.hasContinueDirective(messages),
|
|
67
|
+
structuralUncertainty: false,
|
|
68
|
+
reason: 'Fallback: Hero maintains course via instinct.',
|
|
69
|
+
requiredActions: [],
|
|
70
|
+
blockedBy: [],
|
|
71
|
+
stopCondition: 'landed',
|
|
72
|
+
profile: ConfigService.getYoloProfile(),
|
|
73
|
+
raw: 'Fallback decision (spirit pressure rift)'
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
parseDecision(raw, messages, profile, aggression, maxRequiredActions, successStreak) {
|
|
78
|
+
const normalized = raw.replace(/\r/g, '');
|
|
79
|
+
const strategyMatch = normalized.match(/Strategy\s*:\s*(EXECUTE|DEBUG|RESEARCH|HYPE|PANIC)/i);
|
|
80
|
+
const urgencyMatch = normalized.match(/Urgency\s*:\s*(LOW|MEDIUM|HIGH)/i);
|
|
81
|
+
const confidenceMatch = normalized.match(/Confidence\s*:\s*([0-9]+(?:\.[0-9]+)?)/i);
|
|
82
|
+
const uncertaintyMatch = normalized.match(/Structural\s*Uncertainty\s*:\s*(YES|NO|TRUE|FALSE)/i);
|
|
83
|
+
const continueMatch = normalized.match(/Continue\s*Directive\s*:\s*(YES|NO|TRUE|FALSE)/i);
|
|
84
|
+
const requiredActionsMatch = normalized.match(/Required\s*Actions\s*:\s*(.+)/i);
|
|
85
|
+
const blockedByMatch = normalized.match(/Blocked\s*By\s*:\s*(.+)/i);
|
|
86
|
+
const stopConditionMatch = normalized.match(/Stop\s*Condition\s*:\s*(landed|structural_uncertainty)/i);
|
|
87
|
+
const reasonMatch = normalized.match(/Reason\s*:\s*(.+)/i);
|
|
88
|
+
const inferredStrategy = this.inferStrategy(normalized);
|
|
89
|
+
const strategy = strategyMatch?.[1]?.toUpperCase() || inferredStrategy;
|
|
90
|
+
const urgency = urgencyMatch?.[1]?.toUpperCase() || this.inferUrgency(normalized);
|
|
91
|
+
let confidence = this.clampConfidence(Number(confidenceMatch?.[1] ?? this.inferConfidence(urgency, strategy)));
|
|
92
|
+
const structuralUncertainty = this.parseBoolean(uncertaintyMatch?.[1]) || this.inferUncertainty(normalized);
|
|
93
|
+
const isContinueDirective = this.parseBoolean(continueMatch?.[1]) || this.hasContinueDirective(messages) || /continue\s+immediately/i.test(normalized);
|
|
94
|
+
const requiredActions = this.parseDelimitedList(requiredActionsMatch?.[1]).slice(0, maxRequiredActions);
|
|
95
|
+
const blockedBy = this.parseDelimitedList(blockedByMatch?.[1]).slice(0, 4);
|
|
96
|
+
const stopCondition = stopConditionMatch?.[1]?.toLowerCase()
|
|
97
|
+
|| (structuralUncertainty ? 'structural_uncertainty' : 'landed');
|
|
98
|
+
confidence = this.applyProfileTuning(confidence, profile, aggression, structuralUncertainty, successStreak);
|
|
99
|
+
// ASCENSION PROTOCOL: Stronger continue directive boost
|
|
100
|
+
if (isContinueDirective && (strategy === 'EXECUTE' || strategy === 'HYPE')) {
|
|
101
|
+
confidence = Math.min(3.0, confidence + 0.3);
|
|
102
|
+
}
|
|
103
|
+
// Update persistence for next turn
|
|
104
|
+
this.lastConfidence = confidence;
|
|
105
|
+
if (strategy === 'EXECUTE' || strategy === 'HYPE') {
|
|
106
|
+
this.consecutiveSuccesses++;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
this.consecutiveSuccesses = 0;
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
strategy,
|
|
113
|
+
urgency,
|
|
114
|
+
confidence,
|
|
115
|
+
structuralUncertainty,
|
|
116
|
+
isContinueDirective,
|
|
117
|
+
reason: (reasonMatch?.[1] || this.defaultReason(strategy, urgency)).trim().substring(0, 220),
|
|
118
|
+
requiredActions,
|
|
119
|
+
blockedBy,
|
|
120
|
+
stopCondition,
|
|
121
|
+
profile,
|
|
122
|
+
raw: normalized.substring(0, 1200)
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
inferStrategy(text) {
|
|
126
|
+
if (/uncertainty|unknown|unclear|ambiguous\s+structure|dependency\s+risk/i.test(text))
|
|
127
|
+
return 'DEBUG';
|
|
128
|
+
if (/research|investigate|inspect/i.test(text))
|
|
129
|
+
return 'RESEARCH';
|
|
130
|
+
if (/ship|launch|demo day|hype|singularity/i.test(text))
|
|
131
|
+
return 'HYPE';
|
|
132
|
+
if (/panic|halt|assess\s+failure/i.test(text))
|
|
133
|
+
return 'PANIC';
|
|
134
|
+
return 'EXECUTE';
|
|
135
|
+
}
|
|
136
|
+
inferUrgency(text) {
|
|
137
|
+
if (/immediately|now|urgent|critical momentum|no hesitation/i.test(text))
|
|
138
|
+
return 'HIGH';
|
|
139
|
+
if (/careful|cautious|stability/i.test(text))
|
|
140
|
+
return 'LOW';
|
|
141
|
+
return 'MEDIUM';
|
|
142
|
+
}
|
|
143
|
+
inferConfidence(urgency, strategy) {
|
|
144
|
+
if (strategy === 'HYPE')
|
|
145
|
+
return 2.0;
|
|
146
|
+
if (strategy === 'PANIC')
|
|
147
|
+
return 0.5;
|
|
148
|
+
if (urgency === 'HIGH')
|
|
149
|
+
return 1.9;
|
|
150
|
+
if (urgency === 'LOW')
|
|
151
|
+
return 1.0;
|
|
152
|
+
return 1.5;
|
|
153
|
+
}
|
|
154
|
+
inferUncertainty(text) {
|
|
155
|
+
return /structural\s+uncertainty|critical unknown|not enough context|missing wiring/i.test(text);
|
|
156
|
+
}
|
|
157
|
+
defaultReason(strategy, urgency) {
|
|
158
|
+
return `Founder signal: ${strategy} with ${urgency.toLowerCase()} urgency.`;
|
|
159
|
+
}
|
|
160
|
+
parseBoolean(value) {
|
|
161
|
+
if (!value)
|
|
162
|
+
return false;
|
|
163
|
+
return ['YES', 'TRUE'].includes(value.toUpperCase());
|
|
164
|
+
}
|
|
165
|
+
// BALANCED SUPREMACY: Higher max confidence (3.0 vs 2.5)
|
|
166
|
+
clampConfidence(value) {
|
|
167
|
+
if (!Number.isFinite(value))
|
|
168
|
+
return 1.2;
|
|
169
|
+
return Math.min(3.0, Math.max(0.5, value));
|
|
170
|
+
}
|
|
171
|
+
applyProfileTuning(baseConfidence, profile, aggression, structuralUncertainty, successStreak) {
|
|
172
|
+
let profileMultiplier = 1.0;
|
|
173
|
+
// BALANCED SUPREMACY: Boosted profile multipliers
|
|
174
|
+
if (profile === 'demo_day')
|
|
175
|
+
profileMultiplier = 1.2;
|
|
176
|
+
if (profile === 'recovery')
|
|
177
|
+
profileMultiplier = 0.9;
|
|
178
|
+
// ASCENSION PROTOCOL: Success streak amplification (+0.05 per streak, max +0.5)
|
|
179
|
+
const streakBonus = Math.min(0.5, (successStreak || 0) * 0.05);
|
|
180
|
+
let tuned = baseConfidence * profileMultiplier * aggression * (1 + streakBonus);
|
|
181
|
+
// ASCENSION PROTOCOL: Gentler structural uncertainty penalty
|
|
182
|
+
if (structuralUncertainty)
|
|
183
|
+
tuned *= 0.85;
|
|
184
|
+
// ASCENSION PROTOCOL: Conviction persistence (15% carryover from last turn)
|
|
185
|
+
const persistenceBonus = this.lastConfidence * 0.15;
|
|
186
|
+
tuned += persistenceBonus;
|
|
187
|
+
return this.clampConfidence(tuned);
|
|
188
|
+
}
|
|
189
|
+
parseDelimitedList(raw) {
|
|
190
|
+
if (!raw)
|
|
191
|
+
return [];
|
|
192
|
+
if (/^none$/i.test(raw.trim()))
|
|
193
|
+
return [];
|
|
194
|
+
return raw
|
|
195
|
+
.split(/[|,;]/)
|
|
196
|
+
.map(s => s.trim())
|
|
197
|
+
.filter(Boolean)
|
|
198
|
+
.slice(0, 6);
|
|
199
|
+
}
|
|
200
|
+
hasContinueDirective(messages) {
|
|
201
|
+
const lastUser = [...messages].reverse().find(m => m?.role === 'user' && typeof m?.content === 'string');
|
|
202
|
+
if (!lastUser)
|
|
203
|
+
return false;
|
|
204
|
+
return /\bcontinue\b/i.test(lastUser.content);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=MarieYOLO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarieYOLO.js","sourceRoot":"","sources":["../../../../../src/monolith/infrastructure/ai/agents/MarieYOLO.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import * as vscode from "vscode";
|
|
2
|
+
import * as fs from "fs/promises";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
/**
|
|
5
|
+
* Manages "anchored" context for Marie, providing a stable memory for critical information.
|
|
6
|
+
*/
|
|
7
|
+
export class ContextArchiveService {
|
|
8
|
+
static instance;
|
|
9
|
+
anchors = new Map();
|
|
10
|
+
ready;
|
|
11
|
+
saveQueue = Promise.resolve();
|
|
12
|
+
static context;
|
|
13
|
+
constructor() {
|
|
14
|
+
this.ready = this.loadFromDisk();
|
|
15
|
+
}
|
|
16
|
+
static init(context) {
|
|
17
|
+
this.context = context;
|
|
18
|
+
}
|
|
19
|
+
async awaitReady() {
|
|
20
|
+
return this.ready;
|
|
21
|
+
}
|
|
22
|
+
static getInstance() {
|
|
23
|
+
if (!ContextArchiveService.instance) {
|
|
24
|
+
ContextArchiveService.instance = new ContextArchiveService();
|
|
25
|
+
}
|
|
26
|
+
return ContextArchiveService.instance;
|
|
27
|
+
}
|
|
28
|
+
async loadFromDisk() {
|
|
29
|
+
if (!ContextArchiveService.context)
|
|
30
|
+
return;
|
|
31
|
+
const storageUri = ContextArchiveService.context.storageUri;
|
|
32
|
+
if (!storageUri)
|
|
33
|
+
return;
|
|
34
|
+
const memoryPath = path.join(storageUri.fsPath, "marie_memory.json");
|
|
35
|
+
try {
|
|
36
|
+
// Ensure storage directory exists
|
|
37
|
+
await fs.mkdir(storageUri.fsPath, { recursive: true });
|
|
38
|
+
const data = await fs.readFile(memoryPath, "utf-8");
|
|
39
|
+
const parsed = JSON.parse(data);
|
|
40
|
+
this.anchors = new Map(Object.entries(parsed));
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
// Check for migration from workspace root
|
|
44
|
+
await this.migrateFromWorkspaceRoot(memoryPath);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async migrateFromWorkspaceRoot(newPath) {
|
|
48
|
+
const root = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath;
|
|
49
|
+
if (!root)
|
|
50
|
+
return;
|
|
51
|
+
const oldPath = path.join(root, ".marie_memory.json");
|
|
52
|
+
try {
|
|
53
|
+
const data = await fs.readFile(oldPath, "utf-8");
|
|
54
|
+
const parsed = JSON.parse(data);
|
|
55
|
+
this.anchors = new Map(Object.entries(parsed));
|
|
56
|
+
// Save to new location immediately
|
|
57
|
+
const serialized = JSON.stringify(Object.fromEntries(this.anchors.entries()), null, 2);
|
|
58
|
+
await fs.writeFile(newPath, serialized);
|
|
59
|
+
// Optional: delete old file? Let's leave it for now but maybe rename it to .marie_memory.json.bak
|
|
60
|
+
await fs.rename(oldPath, oldPath + ".bak");
|
|
61
|
+
console.log(`[ContextArchiveService] Migrated memory from ${oldPath} to ${newPath}`);
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
// No old file to migrate
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async saveToDisk() {
|
|
68
|
+
if (!ContextArchiveService.context)
|
|
69
|
+
return;
|
|
70
|
+
const storageUri = ContextArchiveService.context.storageUri;
|
|
71
|
+
if (!storageUri)
|
|
72
|
+
return;
|
|
73
|
+
const memoryPath = path.join(storageUri.fsPath, "marie_memory.json");
|
|
74
|
+
try {
|
|
75
|
+
await fs.mkdir(storageUri.fsPath, { recursive: true });
|
|
76
|
+
const data = JSON.stringify(Object.fromEntries(this.anchors.entries()), null, 2);
|
|
77
|
+
await fs.writeFile(memoryPath, data);
|
|
78
|
+
}
|
|
79
|
+
catch (e) {
|
|
80
|
+
console.error("Failed to save strategic memory", e);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Anchors a new piece of context.
|
|
85
|
+
*/
|
|
86
|
+
/**
|
|
87
|
+
* Anchors a new piece of context. Safe to call anytime; awaits initialization if needed.
|
|
88
|
+
*/
|
|
89
|
+
async anchor(anchor) {
|
|
90
|
+
await this.ready;
|
|
91
|
+
this.anchors.set(anchor.id, {
|
|
92
|
+
...anchor,
|
|
93
|
+
timestamp: Date.now(),
|
|
94
|
+
});
|
|
95
|
+
this.queueSave();
|
|
96
|
+
}
|
|
97
|
+
queueSave() {
|
|
98
|
+
this.saveQueue = this.saveQueue
|
|
99
|
+
.then(() => this.saveToDisk())
|
|
100
|
+
.catch((e) => console.error("Save queue error:", e));
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Retrieves all anchored context as a formatted string for the AI.
|
|
104
|
+
*/
|
|
105
|
+
getAllAnchors() {
|
|
106
|
+
if (this.anchors.size === 0) {
|
|
107
|
+
return "No context is currently anchored.";
|
|
108
|
+
}
|
|
109
|
+
const parts = ["# ⚓ Anchored Strategic Context\n\n"];
|
|
110
|
+
const sortedAnchors = Array.from(this.anchors.values()).sort((a, b) => b.timestamp - a.timestamp);
|
|
111
|
+
for (const anchor of sortedAnchors) {
|
|
112
|
+
parts.push(`### ${anchor.label} (${anchor.type})\n`);
|
|
113
|
+
parts.push(`ID: \`${anchor.id}\` | Time: ${new Date(anchor.timestamp).toLocaleTimeString()}\n`);
|
|
114
|
+
parts.push(`\`\`\`\n${anchor.content}\n\`\`\`\n\n`);
|
|
115
|
+
}
|
|
116
|
+
return parts.join("");
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Removes an anchor by ID.
|
|
120
|
+
*/
|
|
121
|
+
async release(id) {
|
|
122
|
+
await this.ready;
|
|
123
|
+
const deleted = this.anchors.delete(id);
|
|
124
|
+
if (deleted)
|
|
125
|
+
this.queueSave();
|
|
126
|
+
return deleted;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=ContextArchiveService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextArchiveService.js","sourceRoot":"","sources":["../../../../../src/monolith/infrastructure/ai/context/ContextArchiveService.ts"],"names":[],"mappings":"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"}
|