bin/ 230 CLI tools (ask-*, br-*, agent-*, roadid, carpool) scripts/ 99 automation scripts fleet/ Node configs and deployment workers/ Cloudflare Worker sources (roadpay, road-search, squad webhooks) roadc/ RoadC programming language roadnet/ Mesh network (5 APs, WireGuard) operator/ Memory system scripts config/ System configs dotfiles/ Shell configs docs/ Documentation BlackRoad OS — Pave Tomorrow. RoadChain-SHA2048: d1a24f55318d338b RoadChain-Identity: alexa@sovereign RoadChain-Full: d1a24f55318d338b24b60bad7be39286379c76ae5470817482100cb0ddbbcb97e147d07ac7243da0a9f0363e4e5c833d612b9c0df3a3cd20802465420278ef74875a5b77f55af6fe42a931b8b635b3d0d0b6bde9abf33dc42eea52bc03c951406d8cbe49f1a3d29b26a94dade05e9477f34a7d4d4c6ec4005c3c2ac54e73a68440c512c8e83fd9b1fe234750b898ef8f4032c23db173961fe225e67a0432b5293a9714f76c5c57ed5fdf35b9fb40fd73c03ebf88b7253c6a0575f5afb6a6b49b3bda310602fb1ef676859962dad2aebbb2875814b30eee0a8ba195e482d4cbc91d8819e7f38f6db53e8063401649c77bb994371473cabfb917fb53e8cbe73d60
714 lines
20 KiB
Bash
Executable File
714 lines
20 KiB
Bash
Executable File
#!/bin/bash
|
|
# BlackRoad Memory Codex System
|
|
# A living knowledge base of patterns, solutions, and best practices
|
|
|
|
MEMORY_DIR="$HOME/.blackroad/memory"
|
|
CODEX_DIR="$MEMORY_DIR/codex"
|
|
CODEX_DB="$CODEX_DIR/codex.db"
|
|
|
|
# Colors
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
CYAN='\033[0;36m'
|
|
PURPLE='\033[0;35m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
# Initialize codex
|
|
init() {
|
|
echo -e "${PURPLE}📚 Initializing BlackRoad Memory Codex...${NC}\n"
|
|
|
|
mkdir -p "$CODEX_DIR/patterns"
|
|
mkdir -p "$CODEX_DIR/solutions"
|
|
mkdir -p "$CODEX_DIR/best-practices"
|
|
mkdir -p "$CODEX_DIR/templates"
|
|
|
|
# Create codex database
|
|
sqlite3 "$CODEX_DB" <<EOF
|
|
-- Core codex tables
|
|
CREATE TABLE IF NOT EXISTS solutions (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT UNIQUE NOT NULL,
|
|
category TEXT,
|
|
problem TEXT,
|
|
solution TEXT,
|
|
code_snippet TEXT,
|
|
success_rate REAL DEFAULT 1.0,
|
|
uses INTEGER DEFAULT 0,
|
|
created_at TEXT,
|
|
updated_at TEXT,
|
|
tags TEXT,
|
|
related_solutions TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS patterns (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
pattern_name TEXT UNIQUE NOT NULL,
|
|
pattern_type TEXT,
|
|
description TEXT,
|
|
when_to_use TEXT,
|
|
example TEXT,
|
|
confidence REAL,
|
|
occurrences INTEGER DEFAULT 0,
|
|
first_seen TEXT,
|
|
last_seen TEXT,
|
|
tags TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS best_practices (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
category TEXT,
|
|
practice_name TEXT,
|
|
description TEXT,
|
|
rationale TEXT,
|
|
examples TEXT,
|
|
contraindications TEXT,
|
|
priority TEXT,
|
|
created_at TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS templates (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
template_name TEXT UNIQUE NOT NULL,
|
|
template_type TEXT,
|
|
content TEXT,
|
|
variables TEXT,
|
|
usage_count INTEGER DEFAULT 0,
|
|
success_rate REAL DEFAULT 1.0,
|
|
created_at TEXT,
|
|
tags TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS lessons_learned (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
title TEXT,
|
|
what_happened TEXT,
|
|
what_worked TEXT,
|
|
what_failed TEXT,
|
|
lessons TEXT,
|
|
recommendations TEXT,
|
|
timestamp TEXT,
|
|
source_hash TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS anti_patterns (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT,
|
|
description TEXT,
|
|
why_bad TEXT,
|
|
better_approach TEXT,
|
|
severity TEXT,
|
|
occurrences INTEGER DEFAULT 0,
|
|
first_detected TEXT
|
|
);
|
|
|
|
-- Search and relationships
|
|
CREATE VIRTUAL TABLE IF NOT EXISTS codex_fts USING fts5(
|
|
name,
|
|
category,
|
|
description,
|
|
content,
|
|
tags
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_solution_category ON solutions(category);
|
|
CREATE INDEX IF NOT EXISTS idx_pattern_type ON patterns(pattern_type);
|
|
CREATE INDEX IF NOT EXISTS idx_template_type ON templates(template_type);
|
|
CREATE INDEX IF NOT EXISTS idx_practice_priority ON best_practices(priority);
|
|
EOF
|
|
|
|
echo -e "${GREEN}✅ Codex database created${NC}"
|
|
echo -e "${CYAN}📊 Location: $CODEX_DB${NC}\n"
|
|
|
|
# Load initial knowledge
|
|
load_initial_knowledge
|
|
}
|
|
|
|
# Load initial knowledge from memory analysis
|
|
load_initial_knowledge() {
|
|
echo -e "${CYAN}📖 Loading initial knowledge...${NC}\n"
|
|
|
|
# Extract patterns from memory
|
|
local patterns_found=$(grep -c "pattern\|workflow\|process" "$MEMORY_DIR/journals/master-journal.jsonl" 2>/dev/null || echo 0)
|
|
local solutions_found=$(grep -c "solution\|fix\|resolved" "$MEMORY_DIR/journals/master-journal.jsonl" 2>/dev/null || echo 0)
|
|
|
|
# Add common patterns
|
|
sqlite3 "$CODEX_DB" <<EOF
|
|
-- Common enhancement pattern
|
|
INSERT OR IGNORE INTO patterns (pattern_name, pattern_type, description, when_to_use, confidence)
|
|
VALUES (
|
|
'Repository Enhancement Workflow',
|
|
'workflow',
|
|
'Standard process for enhancing repositories with licensing and automation',
|
|
'When adding proprietary licensing and CI/CD to repos',
|
|
0.95
|
|
);
|
|
|
|
-- Parallel batch processing
|
|
INSERT OR IGNORE INTO patterns (pattern_name, pattern_type, description, when_to_use, confidence)
|
|
VALUES (
|
|
'Parallel Batch Processing',
|
|
'performance',
|
|
'Process multiple repositories in parallel batches',
|
|
'When enhancing multiple repos simultaneously. Optimal batch size: 20 repos',
|
|
0.85
|
|
);
|
|
|
|
-- Agent coordination
|
|
INSERT OR IGNORE INTO patterns (pattern_name, pattern_type, description, when_to_use, confidence)
|
|
VALUES (
|
|
'Pre-work Conflict Check',
|
|
'coordination',
|
|
'Check [MEMORY] before starting work to avoid conflicts',
|
|
'Before any repo/entity modification',
|
|
0.98
|
|
);
|
|
EOF
|
|
|
|
# Add anti-patterns (things that failed)
|
|
sqlite3 "$CODEX_DB" <<EOF
|
|
INSERT OR IGNORE INTO anti_patterns (name, description, why_bad, better_approach, severity)
|
|
VALUES (
|
|
'Large Batch Sizes',
|
|
'Processing 40+ repos in parallel',
|
|
'Causes coordination conflicts (57 detected), high failure rates',
|
|
'Use batch size of 20 repos with delays between batches',
|
|
'HIGH'
|
|
);
|
|
|
|
INSERT OR IGNORE INTO anti_patterns (name, description, why_bad, better_approach, severity)
|
|
VALUES (
|
|
'No Retry Logic',
|
|
'Single-attempt operations without retry',
|
|
'Transient failures cause permanent failures. 36% failure rate observed',
|
|
'Implement exponential backoff with 3 retry attempts',
|
|
'CRITICAL'
|
|
);
|
|
|
|
INSERT OR IGNORE INTO anti_patterns (name, description, why_bad, better_approach, severity)
|
|
VALUES (
|
|
'Missing Pre-work Checks',
|
|
'Starting work without checking [MEMORY] for conflicts',
|
|
'Duplicate work, merge conflicts, wasted agent time',
|
|
'Always check memory-query.sh entity ENTITY before starting',
|
|
'HIGH'
|
|
);
|
|
EOF
|
|
|
|
# Add best practices
|
|
sqlite3 "$CODEX_DB" <<EOF
|
|
INSERT OR IGNORE INTO best_practices (category, practice_name, description, rationale, priority)
|
|
VALUES (
|
|
'Enhancement',
|
|
'Check [MEMORY] Before Work',
|
|
'Always query memory system before starting any enhancement work',
|
|
'Prevents conflicts, duplicate work, and coordination issues. Observed 57 conflicts when skipped',
|
|
'CRITICAL'
|
|
);
|
|
|
|
INSERT OR IGNORE INTO best_practices (category, practice_name, description, rationale, priority)
|
|
VALUES (
|
|
'Performance',
|
|
'Use Optimal Batch Sizes',
|
|
'Process repositories in batches of 20, not 40+',
|
|
'Batch size 40 led to 86% failure rate in some orgs. Size 20 recommended',
|
|
'HIGH'
|
|
);
|
|
|
|
INSERT OR IGNORE INTO best_practices (category, practice_name, description, rationale, priority)
|
|
VALUES (
|
|
'Reliability',
|
|
'Implement Exponential Backoff',
|
|
'Add retry logic with exponential backoff (1s, 2s, 4s delays)',
|
|
'Handles transient failures. Could reduce failure rate from 36% to ~15%',
|
|
'CRITICAL'
|
|
);
|
|
|
|
INSERT OR IGNORE INTO best_practices (category, practice_name, description, rationale, priority)
|
|
VALUES (
|
|
'Monitoring',
|
|
'Track Operation Duration',
|
|
'Log start time and duration for all operations',
|
|
'Enables bottleneck detection. Operations >5min should trigger alerts',
|
|
'HIGH'
|
|
);
|
|
EOF
|
|
|
|
# Add successful templates
|
|
sqlite3 "$CODEX_DB" <<EOF
|
|
INSERT OR IGNORE INTO templates (template_name, template_type, content, success_rate)
|
|
VALUES (
|
|
'Proprietary LICENSE',
|
|
'license',
|
|
'BlackRoad OS, Inc. © 2026\nAll Rights Reserved\n\nThis software is proprietary and confidential.\n\nFor testing and non-commercial use only.\nPublicly visible but legally protected.',
|
|
1.0
|
|
);
|
|
|
|
INSERT OR IGNORE INTO templates (template_name, template_type, content, success_rate)
|
|
VALUES (
|
|
'GitHub Actions: Brand Check',
|
|
'github-workflow',
|
|
'name: Brand Compliance Check
|
|
on: [push, pull_request]
|
|
jobs:
|
|
brand-check:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Check brand compliance
|
|
run: |
|
|
echo "Checking BlackRoad brand guidelines..."
|
|
# Add brand validation logic',
|
|
0.95
|
|
);
|
|
EOF
|
|
|
|
echo -e "${GREEN}✅ Initial knowledge loaded${NC}\n"
|
|
}
|
|
|
|
# Add solution to codex
|
|
add_solution() {
|
|
local name="$1"
|
|
local category="$2"
|
|
local problem="$3"
|
|
local solution="$4"
|
|
|
|
echo -e "${CYAN}💡 Adding solution to codex...${NC}\n"
|
|
|
|
local timestamp=$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ")
|
|
|
|
sqlite3 "$CODEX_DB" <<EOF
|
|
INSERT INTO solutions (name, category, problem, solution, created_at, updated_at)
|
|
VALUES ('$name', '$category', '$problem', '$solution', '$timestamp', '$timestamp')
|
|
ON CONFLICT(name) DO UPDATE SET
|
|
solution = '$solution',
|
|
uses = uses + 1,
|
|
updated_at = '$timestamp';
|
|
EOF
|
|
|
|
echo -e "${GREEN}✅ Solution added: $name${NC}"
|
|
}
|
|
|
|
# Add pattern to codex
|
|
add_pattern() {
|
|
local name="$1"
|
|
local type="$2"
|
|
local description="$3"
|
|
|
|
echo -e "${CYAN}🔍 Adding pattern to codex...${NC}\n"
|
|
|
|
local timestamp=$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ")
|
|
|
|
sqlite3 "$CODEX_DB" <<EOF
|
|
INSERT INTO patterns (pattern_name, pattern_type, description, first_seen, last_seen)
|
|
VALUES ('$name', '$type', '$description', '$timestamp', '$timestamp')
|
|
ON CONFLICT(pattern_name) DO UPDATE SET
|
|
occurrences = occurrences + 1,
|
|
last_seen = '$timestamp';
|
|
EOF
|
|
|
|
echo -e "${GREEN}✅ Pattern added: $name${NC}"
|
|
}
|
|
|
|
# Search codex
|
|
search() {
|
|
local query="$1"
|
|
local category="${2:-all}"
|
|
|
|
echo -e "${CYAN}🔍 Searching codex for: ${YELLOW}$query${NC}\n"
|
|
|
|
if [ "$category" = "all" ]; then
|
|
# Search solutions
|
|
echo -e "${PURPLE}Solutions:${NC}"
|
|
sqlite3 -column -header "$CODEX_DB" <<EOF
|
|
SELECT
|
|
name,
|
|
category,
|
|
substr(problem, 1, 50) as problem
|
|
FROM solutions
|
|
WHERE name LIKE '%$query%'
|
|
OR problem LIKE '%$query%'
|
|
OR solution LIKE '%$query%'
|
|
OR tags LIKE '%$query%'
|
|
LIMIT 5;
|
|
EOF
|
|
|
|
echo ""
|
|
|
|
# Search patterns
|
|
echo -e "${PURPLE}Patterns:${NC}"
|
|
sqlite3 -column -header "$CODEX_DB" <<EOF
|
|
SELECT
|
|
pattern_name,
|
|
pattern_type,
|
|
substr(description, 1, 50) as description
|
|
FROM patterns
|
|
WHERE pattern_name LIKE '%$query%'
|
|
OR description LIKE '%$query%'
|
|
LIMIT 5;
|
|
EOF
|
|
|
|
echo ""
|
|
|
|
# Search best practices
|
|
echo -e "${PURPLE}Best Practices:${NC}"
|
|
sqlite3 -column -header "$CODEX_DB" <<EOF
|
|
SELECT
|
|
practice_name,
|
|
category,
|
|
priority
|
|
FROM best_practices
|
|
WHERE practice_name LIKE '%$query%'
|
|
OR description LIKE '%$query%'
|
|
LIMIT 5;
|
|
EOF
|
|
|
|
else
|
|
# Category-specific search
|
|
case $category in
|
|
solution)
|
|
sqlite3 -column -header "$CODEX_DB" "
|
|
SELECT * FROM solutions WHERE name LIKE '%$query%' OR problem LIKE '%$query%';
|
|
"
|
|
;;
|
|
pattern)
|
|
sqlite3 -column -header "$CODEX_DB" "
|
|
SELECT * FROM patterns WHERE pattern_name LIKE '%$query%';
|
|
"
|
|
;;
|
|
practice)
|
|
sqlite3 -column -header "$CODEX_DB" "
|
|
SELECT * FROM best_practices WHERE practice_name LIKE '%$query%';
|
|
"
|
|
;;
|
|
esac
|
|
fi
|
|
}
|
|
|
|
# Get solution
|
|
get_solution() {
|
|
local name="$1"
|
|
|
|
echo -e "${CYAN}💡 Retrieving solution: ${YELLOW}$name${NC}\n"
|
|
|
|
sqlite3 -column "$CODEX_DB" <<EOF
|
|
SELECT
|
|
'Name: ' || name || '
|
|
Category: ' || category || '
|
|
Success Rate: ' || ROUND(success_rate * 100, 1) || '%
|
|
Uses: ' || uses || '
|
|
|
|
PROBLEM:
|
|
' || problem || '
|
|
|
|
SOLUTION:
|
|
' || solution || CASE WHEN code_snippet IS NOT NULL THEN '
|
|
|
|
CODE:
|
|
' || code_snippet ELSE '' END
|
|
FROM solutions
|
|
WHERE name LIKE '%$name%'
|
|
LIMIT 1;
|
|
EOF
|
|
|
|
# Increment usage counter
|
|
sqlite3 "$CODEX_DB" "UPDATE solutions SET uses = uses + 1 WHERE name LIKE '%$name%'"
|
|
}
|
|
|
|
# Get pattern
|
|
get_pattern() {
|
|
local name="$1"
|
|
|
|
echo -e "${CYAN}🔍 Retrieving pattern: ${YELLOW}$name${NC}\n"
|
|
|
|
sqlite3 -column "$CODEX_DB" <<EOF
|
|
SELECT
|
|
'Pattern: ' || pattern_name || '
|
|
Type: ' || pattern_type || '
|
|
Confidence: ' || ROUND(confidence * 100, 1) || '%
|
|
Occurrences: ' || occurrences || '
|
|
|
|
DESCRIPTION:
|
|
' || description || '
|
|
|
|
WHEN TO USE:
|
|
' || when_to_use || CASE WHEN example IS NOT NULL THEN '
|
|
|
|
EXAMPLE:
|
|
' || example ELSE '' END
|
|
FROM patterns
|
|
WHERE pattern_name LIKE '%$name%'
|
|
LIMIT 1;
|
|
EOF
|
|
}
|
|
|
|
# List all by category
|
|
list_by_category() {
|
|
local type="$1"
|
|
|
|
case $type in
|
|
solutions)
|
|
echo -e "${PURPLE}📚 All Solutions:${NC}\n"
|
|
sqlite3 -column -header "$CODEX_DB" "
|
|
SELECT name, category, ROUND(success_rate * 100, 1) || '%' as success, uses
|
|
FROM solutions ORDER BY uses DESC;
|
|
"
|
|
;;
|
|
patterns)
|
|
echo -e "${PURPLE}🔍 All Patterns:${NC}\n"
|
|
sqlite3 -column -header "$CODEX_DB" "
|
|
SELECT pattern_name, pattern_type, ROUND(confidence * 100, 1) || '%' as conf, occurrences
|
|
FROM patterns ORDER BY confidence DESC;
|
|
"
|
|
;;
|
|
practices)
|
|
echo -e "${PURPLE}⭐ All Best Practices:${NC}\n"
|
|
sqlite3 -column -header "$CODEX_DB" "
|
|
SELECT category, practice_name, priority
|
|
FROM best_practices ORDER BY
|
|
CASE priority
|
|
WHEN 'CRITICAL' THEN 1
|
|
WHEN 'HIGH' THEN 2
|
|
WHEN 'MEDIUM' THEN 3
|
|
ELSE 4
|
|
END;
|
|
"
|
|
;;
|
|
anti-patterns)
|
|
echo -e "${PURPLE}⚠️ All Anti-Patterns:${NC}\n"
|
|
sqlite3 -column -header "$CODEX_DB" "
|
|
SELECT name, severity, occurrences
|
|
FROM anti_patterns ORDER BY
|
|
CASE severity
|
|
WHEN 'CRITICAL' THEN 1
|
|
WHEN 'HIGH' THEN 2
|
|
WHEN 'MEDIUM' THEN 3
|
|
ELSE 4
|
|
END;
|
|
"
|
|
;;
|
|
templates)
|
|
echo -e "${PURPLE}📄 All Templates:${NC}\n"
|
|
sqlite3 -column -header "$CODEX_DB" "
|
|
SELECT template_name, template_type, ROUND(success_rate * 100, 1) || '%' as success, usage_count
|
|
FROM templates ORDER BY usage_count DESC;
|
|
"
|
|
;;
|
|
*)
|
|
echo -e "${RED}Unknown type: $type${NC}"
|
|
echo "Valid types: solutions, patterns, practices, anti-patterns, templates"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Recommend based on problem
|
|
recommend() {
|
|
local problem="$1"
|
|
|
|
echo -e "${CYAN}💡 Recommendations for: ${YELLOW}$problem${NC}\n"
|
|
|
|
# Search for matching solutions
|
|
echo -e "${PURPLE}Relevant Solutions:${NC}"
|
|
sqlite3 -column "$CODEX_DB" <<EOF
|
|
SELECT
|
|
name,
|
|
ROUND(success_rate * 100, 1) || '%' as success
|
|
FROM solutions
|
|
WHERE problem LIKE '%$problem%'
|
|
OR name LIKE '%$problem%'
|
|
ORDER BY success_rate DESC, uses DESC
|
|
LIMIT 3;
|
|
EOF
|
|
|
|
echo ""
|
|
|
|
# Search for matching patterns
|
|
echo -e "${PURPLE}Relevant Patterns:${NC}"
|
|
sqlite3 -column "$CODEX_DB" <<EOF
|
|
SELECT
|
|
pattern_name,
|
|
pattern_type
|
|
FROM patterns
|
|
WHERE description LIKE '%$problem%'
|
|
OR when_to_use LIKE '%$problem%'
|
|
ORDER BY confidence DESC
|
|
LIMIT 3;
|
|
EOF
|
|
|
|
echo ""
|
|
|
|
# Search for matching best practices
|
|
echo -e "${PURPLE}Relevant Best Practices:${NC}"
|
|
sqlite3 -column "$CODEX_DB" <<EOF
|
|
SELECT
|
|
practice_name,
|
|
priority
|
|
FROM best_practices
|
|
WHERE practice_name LIKE '%$problem%'
|
|
OR description LIKE '%$problem%'
|
|
ORDER BY
|
|
CASE priority
|
|
WHEN 'CRITICAL' THEN 1
|
|
WHEN 'HIGH' THEN 2
|
|
ELSE 3
|
|
END
|
|
LIMIT 3;
|
|
EOF
|
|
}
|
|
|
|
# Export codex
|
|
export_codex() {
|
|
local format="${1:-markdown}"
|
|
local output_file="$CODEX_DIR/codex-export-$(date +%Y%m%d-%H%M%S).$format"
|
|
|
|
echo -e "${CYAN}💾 Exporting codex...${NC}\n"
|
|
|
|
if [ "$format" = "markdown" ]; then
|
|
cat > "$output_file" <<'MDEOF'
|
|
# 📚 BlackRoad Memory Codex Export
|
|
|
|
## Solutions
|
|
|
|
MDEOF
|
|
|
|
sqlite3 "$CODEX_DB" "SELECT '### ' || name || '\n**Category:** ' || category || '\n**Success Rate:** ' || ROUND(success_rate * 100, 1) || '%\n\n**Problem:**\n' || problem || '\n\n**Solution:**\n' || solution || '\n\n---\n' FROM solutions;" >> "$output_file"
|
|
|
|
cat >> "$output_file" <<'MDEOF'
|
|
|
|
## Patterns
|
|
|
|
MDEOF
|
|
|
|
sqlite3 "$CODEX_DB" "SELECT '### ' || pattern_name || '\n**Type:** ' || pattern_type || '\n**Confidence:** ' || ROUND(confidence * 100, 1) || '%\n\n' || description || '\n\n---\n' FROM patterns;" >> "$output_file"
|
|
|
|
cat >> "$output_file" <<'MDEOF'
|
|
|
|
## Best Practices
|
|
|
|
MDEOF
|
|
|
|
sqlite3 "$CODEX_DB" "SELECT '### ' || practice_name || '\n**Category:** ' || category || '\n**Priority:** ' || priority || '\n\n' || description || '\n\n**Rationale:** ' || rationale || '\n\n---\n' FROM best_practices;" >> "$output_file"
|
|
|
|
elif [ "$format" = "json" ]; then
|
|
sqlite3 "$CODEX_DB" <<EOF > "$output_file"
|
|
.mode json
|
|
SELECT json_object(
|
|
'solutions', (SELECT json_group_array(json_object('name', name, 'category', category, 'problem', problem, 'solution', solution)) FROM solutions),
|
|
'patterns', (SELECT json_group_array(json_object('name', pattern_name, 'type', pattern_type, 'description', description)) FROM patterns),
|
|
'practices', (SELECT json_group_array(json_object('name', practice_name, 'category', category, 'description', description)) FROM best_practices)
|
|
);
|
|
EOF
|
|
fi
|
|
|
|
echo -e "${GREEN}✅ Codex exported to: $output_file${NC}"
|
|
}
|
|
|
|
# Show codex stats
|
|
stats() {
|
|
echo -e "${PURPLE}📊 Codex Statistics:${NC}\n"
|
|
|
|
local solutions=$(sqlite3 "$CODEX_DB" "SELECT COUNT(*) FROM solutions")
|
|
local patterns=$(sqlite3 "$CODEX_DB" "SELECT COUNT(*) FROM patterns")
|
|
local practices=$(sqlite3 "$CODEX_DB" "SELECT COUNT(*) FROM best_practices")
|
|
local anti_patterns=$(sqlite3 "$CODEX_DB" "SELECT COUNT(*) FROM anti_patterns")
|
|
local templates=$(sqlite3 "$CODEX_DB" "SELECT COUNT(*) FROM templates")
|
|
local lessons=$(sqlite3 "$CODEX_DB" "SELECT COUNT(*) FROM lessons_learned")
|
|
|
|
echo -e " ${CYAN}Solutions:${NC} $solutions"
|
|
echo -e " ${CYAN}Patterns:${NC} $patterns"
|
|
echo -e " ${CYAN}Best Practices:${NC} $practices"
|
|
echo -e " ${CYAN}Anti-Patterns:${NC} $anti_patterns"
|
|
echo -e " ${CYAN}Templates:${NC} $templates"
|
|
echo -e " ${CYAN}Lessons Learned:${NC} $lessons\n"
|
|
|
|
# Most used solutions
|
|
echo -e "${PURPLE}Most Used Solutions:${NC}"
|
|
sqlite3 -column "$CODEX_DB" "
|
|
SELECT name, uses FROM solutions ORDER BY uses DESC LIMIT 5;
|
|
"
|
|
|
|
echo ""
|
|
|
|
# Highest confidence patterns
|
|
echo -e "${PURPLE}Highest Confidence Patterns:${NC}"
|
|
sqlite3 -column "$CODEX_DB" "
|
|
SELECT pattern_name, ROUND(confidence * 100, 1) || '%' as conf
|
|
FROM patterns ORDER BY confidence DESC LIMIT 5;
|
|
"
|
|
}
|
|
|
|
# Main execution
|
|
case "${1:-help}" in
|
|
init)
|
|
init
|
|
;;
|
|
add-solution)
|
|
add_solution "$2" "$3" "$4" "$5"
|
|
;;
|
|
add-pattern)
|
|
add_pattern "$2" "$3" "$4"
|
|
;;
|
|
search)
|
|
search "$2" "$3"
|
|
;;
|
|
get-solution)
|
|
get_solution "$2"
|
|
;;
|
|
get-pattern)
|
|
get_pattern "$2"
|
|
;;
|
|
list)
|
|
list_by_category "$2"
|
|
;;
|
|
recommend)
|
|
recommend "$2"
|
|
;;
|
|
export)
|
|
export_codex "$2"
|
|
;;
|
|
stats)
|
|
stats
|
|
;;
|
|
help|*)
|
|
echo -e "${PURPLE}╔════════════════════════════════════════════════╗${NC}"
|
|
echo -e "${PURPLE}║ 📚 BlackRoad Memory Codex System ║${NC}"
|
|
echo -e "${PURPLE}╚════════════════════════════════════════════════╝${NC}\n"
|
|
echo "Living knowledge base of patterns, solutions, and best practices"
|
|
echo ""
|
|
echo "Usage: $0 COMMAND [OPTIONS]"
|
|
echo ""
|
|
echo "Setup:"
|
|
echo " init - Initialize codex"
|
|
echo ""
|
|
echo "Add Knowledge:"
|
|
echo " add-solution NAME CAT PROBLEM SOL - Add solution"
|
|
echo " add-pattern NAME TYPE DESC - Add pattern"
|
|
echo ""
|
|
echo "Retrieve:"
|
|
echo " search QUERY [TYPE] - Search codex"
|
|
echo " get-solution NAME - Get specific solution"
|
|
echo " get-pattern NAME - Get specific pattern"
|
|
echo " recommend PROBLEM - Get recommendations"
|
|
echo ""
|
|
echo "Browse:"
|
|
echo " list solutions - List all solutions"
|
|
echo " list patterns - List all patterns"
|
|
echo " list practices - List best practices"
|
|
echo " list anti-patterns - List anti-patterns"
|
|
echo " list templates - List templates"
|
|
echo ""
|
|
echo "Export:"
|
|
echo " stats - Show statistics"
|
|
echo " export [markdown|json] - Export codex"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 init"
|
|
echo " $0 search retry"
|
|
echo " $0 get-solution 'Exponential Backoff'"
|
|
echo " $0 recommend 'high failure rate'"
|
|
echo " $0 list practices"
|
|
echo " $0 stats"
|
|
;;
|
|
esac
|