@endlessblink/like-i-said-v2
Version:
Task Management & Memory for Claude - Track tasks, remember context, and maintain continuity across sessions with 27 powerful tools. Works with Claude Desktop and Claude Code.
224 lines (184 loc) • 5.17 kB
JavaScript
/**
* Safe Integration Wrapper for Universal Work Detector
* Provides gradual integration without breaking existing functionality
*/
// Universal work detector import removed - fallback implementation
export class WorkDetectorWrapper {
constructor(options = {}) {
this.enabled = options.enabled || false;
this.debugMode = options.debugMode || true;
this.safeMode = options.safeMode !== false; // Safe mode on by default
// Initialize detector only if enabled - fallback disabled
this.detector = null; // Disabled until universal-work-detector.js is available
// Track activity for debugging/monitoring
this.activityLog = [];
this.maxLogSize = 100;
// Integration stats
this.stats = {
totalActivities: 0,
patternsDetected: 0,
memoriesCreated: 0,
errors: 0
};
}
/**
* Safely track activity with error handling
*/
trackActivity(toolName, args, result) {
if (!this.enabled) {
return null;
}
try {
this.stats.totalActivities++;
// Create activity object
const activity = {
tool: toolName,
args: this.safeMode ? this.sanitizeArgs(args) : args,
result: this.safeMode ? this.sanitizeResult(result) : result,
timestamp: Date.now(),
success: !result?.error
};
// Log activity for debugging
this.logActivity(activity);
// Process with detector if available
if (this.detector) {
const memory = this.detector.detectWorkPattern(activity);
if (memory) {
this.stats.memoriesCreated++;
this.stats.patternsDetected++;
if (this.debugMode) {
console.error('[WorkDetector] Pattern detected:', {
tool: toolName,
pattern: memory.metadata?.workType,
domain: memory.metadata?.domain
});
}
return memory;
}
}
return null;
} catch (error) {
this.stats.errors++;
if (this.debugMode) {
console.error('[WorkDetector] Error tracking activity:', error);
}
// In safe mode, errors don't break the system
if (this.safeMode) {
return null;
} else {
throw error;
}
}
}
/**
* Log activity for debugging and monitoring
*/
logActivity(activity) {
this.activityLog.push({
tool: activity.tool,
timestamp: activity.timestamp,
success: activity.success
});
// Keep log size manageable
if (this.activityLog.length > this.maxLogSize) {
this.activityLog.shift();
}
}
/**
* Sanitize arguments to remove sensitive data
*/
sanitizeArgs(args) {
if (!args || typeof args !== 'object') {
return args;
}
const sanitized = { ...args };
// Remove potentially sensitive fields
delete sanitized.password;
delete sanitized.token;
delete sanitized.secret;
delete sanitized.apiKey;
delete sanitized.privateKey;
return sanitized;
}
/**
* Sanitize result to remove sensitive data
*/
sanitizeResult(result) {
if (!result || typeof result !== 'object') {
return result;
}
const sanitized = { ...result };
// Remove potentially sensitive fields
delete sanitized.password;
delete sanitized.token;
delete sanitized.secret;
return sanitized;
}
/**
* Enable the detector
*/
enable() {
this.enabled = true;
// Detector disabled - universal-work-detector.js not available
this.detector = null;
if (this.debugMode) {
console.error('[WorkDetector] Enabled');
}
}
/**
* Disable the detector
*/
disable() {
this.enabled = false;
if (this.debugMode) {
console.error('[WorkDetector] Disabled');
}
}
/**
* Get current statistics
*/
getStats() {
return {
...this.stats,
enabled: this.enabled,
recentActivities: this.activityLog.slice(-10)
};
}
/**
* Get recent activity log
*/
getActivityLog() {
return this.activityLog;
}
/**
* Clear activity log
*/
clearActivityLog() {
this.activityLog = [];
}
/**
* Reset statistics
*/
resetStats() {
this.stats = {
totalActivities: 0,
patternsDetected: 0,
memoriesCreated: 0,
errors: 0
};
}
/**
* Check if detector is healthy
*/
isHealthy() {
if (!this.enabled) {
return { healthy: true, reason: 'Disabled' };
}
const errorRate = this.stats.errors / Math.max(this.stats.totalActivities, 1);
if (errorRate > 0.1) {
return { healthy: false, reason: 'High error rate', errorRate };
}
return { healthy: true, reason: 'Operating normally' };
}
}
export default WorkDetectorWrapper;