Granis87's picture
Upload folder using huggingface_hub
c3a3710 verified
# MnemoCore Integration Setup β€” Windows PowerShell
# =================================================
# One-command setup for Claude Code (MCP) on Windows.
# For full hook/wrapper support, use WSL or Git Bash.
#
# Usage:
# .\setup.ps1
# .\setup.ps1 -All
# .\setup.ps1 -ClaudeCode
param(
[switch]$All,
[switch]$ClaudeCode,
[switch]$Gemini,
[switch]$Aider
)
$ErrorActionPreference = "Stop"
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$MnemoDir = Split-Path -Parent $ScriptDir
$BridgePy = Join-Path $ScriptDir "mnemo_bridge.py"
$ClaudeHome = Join-Path $env:USERPROFILE ".claude"
$ClaudeMcp = Join-Path $ClaudeHome "mcp.json"
$ClaudeSettings = Join-Path $ClaudeHome "settings.json"
$HooksDir = Join-Path $ScriptDir "claude_code\hooks"
function Write-Info { Write-Host "[INFO] $args" -ForegroundColor Cyan }
function Write-Success { Write-Host "[OK] $args" -ForegroundColor Green }
function Write-Warn { Write-Host "[WARN] $args" -ForegroundColor Yellow }
function Write-Err { Write-Host "[ERROR] $args" -ForegroundColor Red }
# ── Prerequisite checks ────────────────────────────────────────────────────
Write-Info "Checking Python requests..."
$requestsCheck = python -c "import requests; print('ok')" 2>&1
if ($requestsCheck -ne "ok") {
Write-Warn "Installing requests..."
python -m pip install --quiet requests
}
Write-Success "Python requests available"
Write-Info "Checking MnemoCore connectivity..."
$healthCheck = python "$BridgePy" health 2>&1
if ($LASTEXITCODE -eq 0) {
Write-Success "MnemoCore is online"
} else {
Write-Warn "MnemoCore offline β€” start it first:"
Write-Warn " cd $MnemoDir"
Write-Warn " uvicorn mnemocore.api.main:app --port 8100"
}
# ── Claude Code MCP Setup ─────────────────────────────────────────────────
function Setup-ClaudeCode {
Write-Info "Setting up Claude Code integration..."
if (-not (Test-Path $ClaudeHome)) { New-Item -ItemType Directory -Path $ClaudeHome | Out-Null }
New-Item -ItemType Directory -Path (Join-Path $ClaudeHome "mnemo_context") -Force | Out-Null
# MCP config
$McpTemplate = Get-Content (Join-Path $ScriptDir "claude_code\mcp_config.json") -Raw
$McpTemplate = $McpTemplate `
-replace '\$\{MNEMOCORE_DIR\}', $MnemoDir.Replace('\', '/') `
-replace '\$\{HAIM_API_KEY\}', ($env:HAIM_API_KEY ?? '')
if (-not (Test-Path $ClaudeMcp)) {
'{"mcpServers":{}}' | Set-Content $ClaudeMcp
}
$Existing = Get-Content $ClaudeMcp -Raw | ConvertFrom-Json
$New = $McpTemplate | ConvertFrom-Json
if (-not $Existing.mcpServers) { $Existing | Add-Member -MemberType NoteProperty -Name mcpServers -Value @{} }
$New.mcpServers.PSObject.Properties | ForEach-Object {
$Existing.mcpServers | Add-Member -MemberType NoteProperty -Name $_.Name -Value $_.Value -Force
}
$Existing | ConvertTo-Json -Depth 10 | Set-Content $ClaudeMcp
Write-Success "MCP server registered in $ClaudeMcp"
# Hooks
if (-not (Test-Path $ClaudeSettings)) { '{}' | Set-Content $ClaudeSettings }
$Settings = Get-Content $ClaudeSettings -Raw | ConvertFrom-Json
if (-not $Settings.hooks) {
$Settings | Add-Member -MemberType NoteProperty -Name hooks -Value @{}
}
$hooksObj = $Settings.hooks
$preCmd = "python `"$($HooksDir.Replace('\','/'))/pre_session_inject.py`""
$postCmd = "python `"$($HooksDir.Replace('\','/'))/post_tool_store.py`""
if (-not $hooksObj.PreToolUse) {
$hooksObj | Add-Member -MemberType NoteProperty -Name PreToolUse -Value @()
}
if (-not $hooksObj.PostToolUse) {
$hooksObj | Add-Member -MemberType NoteProperty -Name PostToolUse -Value @()
}
$existingPre = $hooksObj.PreToolUse | ForEach-Object { $_.hooks[0].command }
if ($preCmd -notin $existingPre) {
$hooksObj.PreToolUse += @{matcher=".*"; hooks=@(@{type="command"; command=$preCmd})}
}
$existingPost = $hooksObj.PostToolUse | ForEach-Object { $_.hooks[0].command }
if ($postCmd -notin $existingPost) {
$hooksObj.PostToolUse += @{matcher="Edit|Write|MultiEdit"; hooks=@(@{type="command"; command=$postCmd})}
}
$Settings | ConvertTo-Json -Depth 10 | Set-Content $ClaudeSettings
Write-Success "Hooks installed in $ClaudeSettings"
# CLAUDE.md snippet
$ClaudeMd = Join-Path $MnemoDir "CLAUDE.md"
$Snippet = Get-Content (Join-Path $ScriptDir "claude_code\CLAUDE_memory_snippet.md") -Raw
$Marker = "# MnemoCore β€” Persistent Cognitive Memory"
if (Test-Path $ClaudeMd) {
$Current = Get-Content $ClaudeMd -Raw
if ($Current -notlike "*$Marker*") {
Add-Content $ClaudeMd "`n$Snippet"
Write-Success "Memory instructions appended to CLAUDE.md"
} else {
Write-Info "CLAUDE.md already contains MnemoCore instructions"
}
} else {
$Snippet | Set-Content $ClaudeMd
Write-Success "Created CLAUDE.md with memory instructions"
}
Write-Success "Claude Code integration complete"
}
# ── Main ───────────────────────────────────────────────────────────────────
Write-Host ""
Write-Host "╔══════════════════════════════════════════╗" -ForegroundColor Magenta
Write-Host "β•‘ MnemoCore Integration Setup (Win) β•‘" -ForegroundColor Magenta
Write-Host "β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•" -ForegroundColor Magenta
Write-Host ""
if (-not ($All -or $ClaudeCode -or $Gemini -or $Aider)) {
Write-Host "Choose integrations:"
Write-Host " 1) Claude Code (MCP + hooks + CLAUDE.md) β€” recommended"
Write-Host " 4) All"
$choice = Read-Host "Enter choice"
switch ($choice) {
"1" { $ClaudeCode = $true }
"4" { $All = $true }
}
}
if ($All -or $ClaudeCode) { Setup-ClaudeCode }
Write-Host ""
Write-Host "╔══════════════════════════════════════════╗" -ForegroundColor Green
Write-Host "β•‘ Setup complete! β•‘" -ForegroundColor Green
Write-Host "β•‘ β•‘" -ForegroundColor Green
Write-Host "β•‘ Test: python integrations/mnemo_bridge.py health" -ForegroundColor Green
Write-Host "β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•" -ForegroundColor Green
Write-Host ""