5.3 KiB
5.3 KiB
Integration Code Examples
Pure code examples for using context-memory API in skills.
Basic Import
from skills.context_memory.utils.storage_obsidian import (
store_file_analysis,
store_pattern,
store_decision,
recall_query,
recall_file,
get_memory_stats
)
Store Operations
Store File Analysis
store_file_analysis(
file_path='src/auth/jwt-handler.ts',
summary='JWT token validation and refresh logic',
purpose='Handles authentication token lifecycle',
complexity='moderate',
key_functions=['validateToken', 'refreshToken', 'revokeToken'],
dependencies=['jsonwebtoken', 'crypto'],
notes='Uses RSA256 signing with 15-minute expiry'
)
Store Pattern
store_pattern(
name='Repository Pattern',
description='Encapsulates data access logic in repository classes',
category='architecture',
example_path='src/repos/user-repository.ts',
when_to_use='When abstracting database operations'
)
Store Decision
store_decision(
title='Use JWT for Authentication',
decision='Implement stateless JWT tokens instead of server sessions',
context='Need to scale API horizontally across multiple servers',
alternatives='Considered Redis sessions but adds infrastructure dependency',
consequences='Tokens cannot be revoked until expiry'
)
Retrieval Operations
Query All Context
results = recall_query('authentication JWT', limit=10)
for result in results:
print(f"Type: {result['type']}")
print(f"Path: {result.get('path', result.get('name'))}")
print(f"Summary: {result.get('summary', result.get('description'))}")
print("---")
Get Specific File
analysis = recall_file('src/auth/jwt-handler.ts')
if analysis:
print(f"Summary: {analysis['summary']}")
print(f"Complexity: {analysis['complexity']}")
print(f"Functions: {', '.join(analysis.get('key_functions', []))}")
print(f"Dependencies: {', '.join(analysis.get('dependencies', []))}")
Get Stats
stats = get_memory_stats()
print(f"Files analyzed: {stats['files_analyzed']}")
print(f"Patterns stored: {stats['patterns_stored']}")
print(f"Decisions recorded: {stats['decisions_recorded']}")
print(f"Total notes: {stats['total_notes']}")
Conditional Usage (Optional Dependency)
try:
from skills.context_memory.utils.storage_obsidian import recall_query, store_pattern
MEMORY_AVAILABLE = True
except ImportError:
MEMORY_AVAILABLE = False
def get_context(query_text):
if not MEMORY_AVAILABLE:
return None
try:
return recall_query(query_text)
except:
return None
# Use conditionally
context = get_context('authentication')
if context:
# Use context
pass
Batch Operations
Store Multiple Files
files = [
{
'file_path': 'src/auth/jwt.ts',
'summary': 'JWT token utilities',
'complexity': 'moderate'
},
{
'file_path': 'src/auth/middleware.ts',
'summary': 'Authentication middleware',
'complexity': 'simple'
}
]
for file_data in files:
store_file_analysis(**file_data)
Store Multiple Patterns
patterns = [
{
'name': 'Repository Pattern',
'description': 'Data access abstraction',
'category': 'architecture'
},
{
'name': 'Factory Pattern',
'description': 'Object creation abstraction',
'category': 'design'
}
]
for pattern_data in patterns:
store_pattern(**pattern_data)
Query Multiple Topics
topics = ['authentication', 'database', 'error handling']
all_results = {}
for topic in topics:
all_results[topic] = recall_query(topic, limit=5)
# Process results
for topic, results in all_results.items():
print(f"\n{topic}:")
for r in results:
print(f" - {r['path']}")
Error Handling
try:
result = store_file_analysis(
file_path='src/example.ts',
summary='Example file'
)
print(f"Stored: {result}")
except Exception as e:
print(f"Error storing: {e}")
try:
analysis = recall_file('src/nonexistent.ts')
if analysis is None:
print("File not found in memory")
except Exception as e:
print(f"Error recalling: {e}")
Type Hints
from typing import List, Dict, Optional
def analyze_and_store(file_path: str, content: str) -> Optional[str]:
"""
Analyze file and store in memory.
Returns:
Path to created note or None on error
"""
try:
return store_file_analysis(
file_path=file_path,
summary=f"Analysis of {file_path}",
complexity='moderate'
)
except Exception:
return None
def search_context(query: str) -> List[Dict]:
"""
Search memory for context.
Returns:
List of matching notes
"""
try:
return recall_query(query, limit=10)
except Exception:
return []
Path Handling
from pathlib import Path
# Normalize paths
project_root = Path.cwd()
file_path = Path('src/auth/jwt.ts')
relative_path = file_path.relative_to(project_root)
# Store with relative path
store_file_analysis(
file_path=str(relative_path),
summary='JWT utilities'
)
# Recall with relative path
analysis = recall_file(str(relative_path))
Version: 1.7.1