tachibot-mcp 2.0.2
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/.env.example +260 -0
- package/CHANGELOG.md +54 -0
- package/CODE_OF_CONDUCT.md +56 -0
- package/CONTRIBUTING.md +54 -0
- package/Dockerfile +36 -0
- package/LICENSE +644 -0
- package/README.md +201 -0
- package/SECURITY.md +95 -0
- package/dist/personality/komaai-expressions.js +12 -0
- package/dist/profiles/balanced.json +33 -0
- package/dist/profiles/code_focus.json +33 -0
- package/dist/profiles/full.json +33 -0
- package/dist/profiles/minimal.json +33 -0
- package/dist/profiles/research_power.json +33 -0
- package/dist/scripts/build-profiles.js +46 -0
- package/dist/src/application/services/focus/FocusModeRegistry.js +46 -0
- package/dist/src/application/services/focus/FocusTool.service.js +109 -0
- package/dist/src/application/services/focus/ModeRegistry.js +46 -0
- package/dist/src/application/services/focus/modes/focus-deep.mode.js +27 -0
- package/dist/src/application/services/focus/modes/status.mode.js +50 -0
- package/dist/src/application/services/focus/modes/tachibot-status.mode.js +50 -0
- package/dist/src/collaborative-orchestrator.js +391 -0
- package/dist/src/config/model-constants.js +188 -0
- package/dist/src/config/model-defaults.js +57 -0
- package/dist/src/config/model-preferences.js +382 -0
- package/dist/src/config/timeout-config.js +130 -0
- package/dist/src/config.js +173 -0
- package/dist/src/domain/interfaces/IFocusMode.js +5 -0
- package/dist/src/domain/interfaces/IProvider.js +6 -0
- package/dist/src/domain/interfaces/ITool.js +5 -0
- package/dist/src/focus-deep.js +245 -0
- package/dist/src/infrastructure/ascii/art/robots.ascii.js +16 -0
- package/dist/src/mcp-client.js +90 -0
- package/dist/src/memory/index.js +17 -0
- package/dist/src/memory/memory-config.js +135 -0
- package/dist/src/memory/memory-interface.js +174 -0
- package/dist/src/memory/memory-manager.js +383 -0
- package/dist/src/memory/providers/devlog-provider.js +385 -0
- package/dist/src/memory/providers/hybrid-provider.js +399 -0
- package/dist/src/memory/providers/local-provider.js +388 -0
- package/dist/src/memory/providers/mem0-provider.js +337 -0
- package/dist/src/modes/architect.js +477 -0
- package/dist/src/modes/auditor.js +362 -0
- package/dist/src/modes/challenger.js +841 -0
- package/dist/src/modes/code-reviewer.js +382 -0
- package/dist/src/modes/commit-guardian.js +424 -0
- package/dist/src/modes/documentation-writer.js +572 -0
- package/dist/src/modes/scout.js +587 -0
- package/dist/src/modes/shared/helpers/challenger-helpers.js +454 -0
- package/dist/src/modes/shared/helpers/index.js +17 -0
- package/dist/src/modes/shared/helpers/scout-helpers.js +270 -0
- package/dist/src/modes/shared/helpers/verifier-helpers.js +332 -0
- package/dist/src/modes/test-architect.js +767 -0
- package/dist/src/modes/verifier.js +378 -0
- package/dist/src/monitoring/performance-monitor.js +435 -0
- package/dist/src/optimization/batch-executor.js +121 -0
- package/dist/src/optimization/context-pruner.js +196 -0
- package/dist/src/optimization/cost-monitor.js +338 -0
- package/dist/src/optimization/index.js +65 -0
- package/dist/src/optimization/model-router.js +264 -0
- package/dist/src/optimization/result-cache.js +114 -0
- package/dist/src/optimization/token-optimizer.js +257 -0
- package/dist/src/optimization/token-tracker.js +118 -0
- package/dist/src/orchestrator-instructions.js +128 -0
- package/dist/src/orchestrator-lite.js +139 -0
- package/dist/src/orchestrator.js +191 -0
- package/dist/src/orchestrators/collaborative/interfaces/IToolExecutionEngine.js +1 -0
- package/dist/src/orchestrators/collaborative/interfaces/IToolExecutionStrategy.js +5 -0
- package/dist/src/orchestrators/collaborative/interfaces/IVisualizationRenderer.js +1 -0
- package/dist/src/orchestrators/collaborative/registries/ModelProviderRegistry.js +95 -0
- package/dist/src/orchestrators/collaborative/registries/ToolAdapterRegistry.js +64 -0
- package/dist/src/orchestrators/collaborative/services/tool-execution/ToolExecutionService.js +502 -0
- package/dist/src/orchestrators/collaborative/services/visualization/VisualizationService.js +206 -0
- package/dist/src/orchestrators/collaborative/types/session-types.js +5 -0
- package/dist/src/profiles/balanced.js +37 -0
- package/dist/src/profiles/code_focus.js +37 -0
- package/dist/src/profiles/debug_intensive.js +59 -0
- package/dist/src/profiles/full.js +37 -0
- package/dist/src/profiles/minimal.js +37 -0
- package/dist/src/profiles/research_code.js +59 -0
- package/dist/src/profiles/research_power.js +37 -0
- package/dist/src/profiles/types.js +5 -0
- package/dist/src/profiles/workflow_builder.js +53 -0
- package/dist/src/prompt-engineer-lite.js +78 -0
- package/dist/src/prompt-engineer.js +399 -0
- package/dist/src/reasoning-chain.js +508 -0
- package/dist/src/sequential-thinking.js +291 -0
- package/dist/src/server-diagnostic.js +74 -0
- package/dist/src/server-raw.js +158 -0
- package/dist/src/server-simple.js +58 -0
- package/dist/src/server.js +514 -0
- package/dist/src/session/session-logger.js +617 -0
- package/dist/src/session/session-manager.js +571 -0
- package/dist/src/session/session-tools.js +400 -0
- package/dist/src/tools/advanced-modes.js +200 -0
- package/dist/src/tools/claude-integration.js +356 -0
- package/dist/src/tools/consolidated/ai-router.js +174 -0
- package/dist/src/tools/consolidated/ai-tool.js +48 -0
- package/dist/src/tools/consolidated/brainstorm-tool.js +87 -0
- package/dist/src/tools/consolidated/environment-detector.js +80 -0
- package/dist/src/tools/consolidated/index.js +50 -0
- package/dist/src/tools/consolidated/search-tool.js +110 -0
- package/dist/src/tools/consolidated/workflow-tool.js +238 -0
- package/dist/src/tools/gemini-tools.js +329 -0
- package/dist/src/tools/grok-enhanced.js +376 -0
- package/dist/src/tools/grok-tools.js +299 -0
- package/dist/src/tools/lmstudio-tools.js +223 -0
- package/dist/src/tools/openai-tools.js +498 -0
- package/dist/src/tools/openrouter-tools.js +317 -0
- package/dist/src/tools/optimized-wrapper.js +204 -0
- package/dist/src/tools/perplexity-tools.js +294 -0
- package/dist/src/tools/pingpong-tool.js +343 -0
- package/dist/src/tools/qwen-wrapper.js +74 -0
- package/dist/src/tools/tool-router.js +444 -0
- package/dist/src/tools/unified-ai-provider.js +260 -0
- package/dist/src/tools/workflow-runner.js +425 -0
- package/dist/src/tools/workflow-validator-tool.js +107 -0
- package/dist/src/types.js +23 -0
- package/dist/src/utils/input-validator.js +130 -0
- package/dist/src/utils/model-router.js +91 -0
- package/dist/src/utils/progress-stream.js +255 -0
- package/dist/src/utils/provider-router.js +88 -0
- package/dist/src/utils/smart-api-client.js +146 -0
- package/dist/src/utils/table-builder.js +218 -0
- package/dist/src/utils/timestamp-formatter.js +134 -0
- package/dist/src/utils/tool-compressor.js +257 -0
- package/dist/src/utils/tool-config.js +201 -0
- package/dist/src/validators/dependency-graph-validator.js +147 -0
- package/dist/src/validators/interpolation-validator.js +222 -0
- package/dist/src/validators/output-usage-validator.js +151 -0
- package/dist/src/validators/syntax-validator.js +102 -0
- package/dist/src/validators/tool-registry-validator.js +123 -0
- package/dist/src/validators/tool-types.js +97 -0
- package/dist/src/validators/types.js +8 -0
- package/dist/src/validators/workflow-validator.js +134 -0
- package/dist/src/visualizer-lite.js +42 -0
- package/dist/src/visualizer.js +179 -0
- package/dist/src/workflows/circuit-breaker.js +199 -0
- package/dist/src/workflows/custom-workflows.js +451 -0
- package/dist/src/workflows/engine/AutoSynthesizer.js +97 -0
- package/dist/src/workflows/engine/StepParameterResolver.js +74 -0
- package/dist/src/workflows/engine/VariableInterpolator.js +123 -0
- package/dist/src/workflows/engine/WorkflowDiscovery.js +125 -0
- package/dist/src/workflows/engine/WorkflowExecutionEngine.js +485 -0
- package/dist/src/workflows/engine/WorkflowExecutor.js +113 -0
- package/dist/src/workflows/engine/WorkflowFileManager.js +244 -0
- package/dist/src/workflows/engine/WorkflowHelpers.js +114 -0
- package/dist/src/workflows/engine/WorkflowOutputFormatter.js +83 -0
- package/dist/src/workflows/engine/events/WorkflowEventBus.js +132 -0
- package/dist/src/workflows/engine/events/interfaces/IEventBus.js +5 -0
- package/dist/src/workflows/engine/handlers/ErrorRecoveryHandler.js +162 -0
- package/dist/src/workflows/engine/handlers/PromptEnhancementHandler.js +115 -0
- package/dist/src/workflows/engine/handlers/SessionPersistenceHandler.js +167 -0
- package/dist/src/workflows/engine/handlers/StepExecutionHandler.js +231 -0
- package/dist/src/workflows/engine/handlers/ToolInvocationHandler.js +46 -0
- package/dist/src/workflows/engine/interfaces/IAutoSynthesizer.js +5 -0
- package/dist/src/workflows/engine/interfaces/IStepParameterResolver.js +5 -0
- package/dist/src/workflows/engine/interfaces/IVariableInterpolator.js +5 -0
- package/dist/src/workflows/engine/interfaces/IWorkflowDiscovery.js +4 -0
- package/dist/src/workflows/engine/interfaces/IWorkflowFileManager.js +5 -0
- package/dist/src/workflows/engine/interfaces/IWorkflowOutputFormatter.js +5 -0
- package/dist/src/workflows/engine/state/WorkflowStateMachine.js +194 -0
- package/dist/src/workflows/engine/state/interfaces/IStateMachine.js +17 -0
- package/dist/src/workflows/fallback-strategies.js +373 -0
- package/dist/src/workflows/message-queue.js +455 -0
- package/dist/src/workflows/model-router.js +189 -0
- package/dist/src/workflows/orchestrator-examples.js +174 -0
- package/dist/src/workflows/orchestrator-integration.js +200 -0
- package/dist/src/workflows/self-healing.js +524 -0
- package/dist/src/workflows/tool-mapper.js +407 -0
- package/dist/src/workflows/tool-orchestrator.js +796 -0
- package/dist/src/workflows/workflow-engine.js +573 -0
- package/dist/src/workflows/workflow-parser.js +283 -0
- package/dist/src/workflows/workflow-types.js +95 -0
- package/dist/src/workflows.js +568 -0
- package/dist/test-workflow-file-output.js +93 -0
- package/docs/API_KEYS.md +570 -0
- package/docs/CLAUDE_CODE_SETUP.md +181 -0
- package/docs/CLAUDE_DESKTOP_MANUAL.md +127 -0
- package/docs/CONFIGURATION.md +745 -0
- package/docs/FOCUS_MODES.md +240 -0
- package/docs/INSTALLATION_BOTH.md +145 -0
- package/docs/TERMS.md +352 -0
- package/docs/TOOLS_REFERENCE.md +1622 -0
- package/docs/TOOL_PARAMETERS.md +496 -0
- package/docs/TOOL_PROFILES.md +236 -0
- package/docs/WORKFLOWS.md +987 -0
- package/docs/WORKFLOW_OUTPUT.md +198 -0
- package/docs/WORKFLOW_PROGRESS_TRACKING.md +305 -0
- package/docs/workflows/design-brainstorm.md +335 -0
- package/package.json +97 -0
- package/profiles/balanced.json +37 -0
- package/profiles/code_focus.json +37 -0
- package/profiles/debug_intensive.json +34 -0
- package/profiles/full.json +37 -0
- package/profiles/minimal.json +37 -0
- package/profiles/research_power.json +37 -0
- package/profiles/workflow_builder.json +37 -0
- package/smithery.yaml +66 -0
- package/start.sh +8 -0
- package/tools.config.json +81 -0
- package/tsconfig.json +18 -0
- package/workflows/accessibility-code-audit.yaml +92 -0
- package/workflows/code-architecture-review.yaml +202 -0
- package/workflows/code-review.yaml +142 -0
- package/workflows/core/iterative-problem-solver.yaml +283 -0
- package/workflows/creative-brainstorm-yaml.yaml +215 -0
- package/workflows/pingpong.yaml +141 -0
- package/workflows/system/README.md +412 -0
- package/workflows/system/challenger.yaml +175 -0
- package/workflows/system/scout.yaml +164 -0
- package/workflows/system/verifier.yaml +133 -0
- package/workflows/ultra-creative-brainstorm.yaml +318 -0
- package/workflows/ux-research-flow.yaml +92 -0
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DevLog Memory Provider
|
|
3
|
+
* Integration with DevLog for development logging and memory persistence
|
|
4
|
+
*/
|
|
5
|
+
import { BaseMemoryProvider } from '../memory-interface.js';
|
|
6
|
+
/**
|
|
7
|
+
* DevLog provider implementation
|
|
8
|
+
*/
|
|
9
|
+
export class DevLogProvider extends BaseMemoryProvider {
|
|
10
|
+
constructor(config) {
|
|
11
|
+
super();
|
|
12
|
+
this.name = 'devlog';
|
|
13
|
+
this.client = null;
|
|
14
|
+
this.isConnected = false;
|
|
15
|
+
this.config = {
|
|
16
|
+
connectionString: config.connectionString || process.env.DEVLOG_CONNECTION,
|
|
17
|
+
workspace: config.workspace || process.env.DEVLOG_WORKSPACE || 'default',
|
|
18
|
+
projectId: config.projectId || process.env.DEVLOG_PROJECT,
|
|
19
|
+
enableSync: config.enableSync !== false,
|
|
20
|
+
...config
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
async doInitialize() {
|
|
24
|
+
try {
|
|
25
|
+
// Try to load DevLog client dynamically
|
|
26
|
+
const devlogModule = await this.loadDevLogModule();
|
|
27
|
+
if (!devlogModule) {
|
|
28
|
+
// Create a mock/local implementation if DevLog is not available
|
|
29
|
+
this.client = this.createLocalDevLog();
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// Use actual DevLog client
|
|
33
|
+
this.client = new devlogModule.DevLogClient({
|
|
34
|
+
connectionString: this.config.connectionString,
|
|
35
|
+
workspace: this.config.workspace
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
// Connect to DevLog
|
|
39
|
+
if (this.client) {
|
|
40
|
+
await this.client.connect();
|
|
41
|
+
this.isConnected = true;
|
|
42
|
+
}
|
|
43
|
+
console.error(`DevLog provider initialized for workspace: ${this.config.workspace}`);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
console.error('Failed to initialize DevLog provider:', error);
|
|
47
|
+
// Fall back to local implementation
|
|
48
|
+
this.client = this.createLocalDevLog();
|
|
49
|
+
await this.client.connect();
|
|
50
|
+
this.isConnected = true;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async store(item) {
|
|
54
|
+
if (!this.isConnected || !this.client) {
|
|
55
|
+
throw new Error('DevLog provider not initialized');
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
// Convert MemoryItem to DevLog entry
|
|
59
|
+
const entry = {
|
|
60
|
+
type: `memory_${item.tier}`,
|
|
61
|
+
content: item.content,
|
|
62
|
+
metadata: {
|
|
63
|
+
...item.metadata,
|
|
64
|
+
memoryId: item.id,
|
|
65
|
+
tier: item.tier,
|
|
66
|
+
teamId: item.teamId,
|
|
67
|
+
ttl: item.ttl,
|
|
68
|
+
accessCount: item.accessCount
|
|
69
|
+
},
|
|
70
|
+
workspace: this.config.workspace,
|
|
71
|
+
project: item.projectId || this.config.projectId,
|
|
72
|
+
user: item.userId,
|
|
73
|
+
tags: item.tags,
|
|
74
|
+
timestamp: item.timestamp
|
|
75
|
+
};
|
|
76
|
+
// Store in DevLog
|
|
77
|
+
const id = await this.client.log(entry);
|
|
78
|
+
// Update metrics
|
|
79
|
+
this.metrics.totalItems++;
|
|
80
|
+
this.metrics.itemsByTier[item.tier]++;
|
|
81
|
+
return id || item.id;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.error('Failed to store in DevLog:', error);
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async retrieve(query) {
|
|
89
|
+
if (!this.isConnected || !this.client) {
|
|
90
|
+
throw new Error('DevLog provider not initialized');
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
const startTime = Date.now();
|
|
94
|
+
// Build DevLog query
|
|
95
|
+
const devlogQuery = {
|
|
96
|
+
workspace: this.config.workspace,
|
|
97
|
+
project: query.projectId || this.config.projectId,
|
|
98
|
+
search: query.text,
|
|
99
|
+
tags: query.tags,
|
|
100
|
+
startDate: query.startDate,
|
|
101
|
+
endDate: query.endDate,
|
|
102
|
+
limit: query.limit,
|
|
103
|
+
offset: query.offset
|
|
104
|
+
};
|
|
105
|
+
// Add tier filtering
|
|
106
|
+
if (query.tiers && query.tiers.length > 0) {
|
|
107
|
+
devlogQuery.type = query.tiers.map(tier => `memory_${tier}`).join(',');
|
|
108
|
+
}
|
|
109
|
+
// Query DevLog
|
|
110
|
+
const entries = await this.client.query(devlogQuery);
|
|
111
|
+
// Convert to MemoryItems
|
|
112
|
+
const items = this.convertDevLogEntries(entries);
|
|
113
|
+
// Filter by userId if specified
|
|
114
|
+
let filteredItems = items;
|
|
115
|
+
if (query.userId) {
|
|
116
|
+
filteredItems = items.filter(item => item.userId === query.userId);
|
|
117
|
+
}
|
|
118
|
+
// Update metrics
|
|
119
|
+
const retrievalTime = Date.now() - startTime;
|
|
120
|
+
this.metrics.avgRetrievalTime =
|
|
121
|
+
(this.metrics.avgRetrievalTime + retrievalTime) / 2;
|
|
122
|
+
// Update access counts
|
|
123
|
+
filteredItems.forEach(item => {
|
|
124
|
+
item.accessCount = (item.accessCount || 0) + 1;
|
|
125
|
+
item.lastAccessed = new Date();
|
|
126
|
+
});
|
|
127
|
+
return filteredItems;
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
console.error('Failed to retrieve from DevLog:', error);
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async update(id, updates) {
|
|
135
|
+
if (!this.isConnected || !this.client) {
|
|
136
|
+
throw new Error('DevLog provider not initialized');
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
// Convert updates to DevLog format
|
|
140
|
+
const devlogUpdates = {
|
|
141
|
+
content: updates.content,
|
|
142
|
+
metadata: updates.metadata,
|
|
143
|
+
tags: updates.tags
|
|
144
|
+
};
|
|
145
|
+
// Update tier in metadata if changed
|
|
146
|
+
if (updates.tier) {
|
|
147
|
+
devlogUpdates.type = `memory_${updates.tier}`;
|
|
148
|
+
devlogUpdates.metadata = {
|
|
149
|
+
...devlogUpdates.metadata,
|
|
150
|
+
tier: updates.tier
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
return await this.client.update(id, devlogUpdates);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
console.error('Failed to update in DevLog:', error);
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async delete(id) {
|
|
161
|
+
if (!this.isConnected || !this.client) {
|
|
162
|
+
throw new Error('DevLog provider not initialized');
|
|
163
|
+
}
|
|
164
|
+
try {
|
|
165
|
+
const result = await this.client.delete(id);
|
|
166
|
+
if (result) {
|
|
167
|
+
this.metrics.totalItems--;
|
|
168
|
+
}
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
console.error('Failed to delete from DevLog:', error);
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
async cleanup() {
|
|
177
|
+
const now = Date.now();
|
|
178
|
+
let cleaned = 0;
|
|
179
|
+
// Query for expired items
|
|
180
|
+
const items = await this.retrieve({
|
|
181
|
+
endDate: new Date(now - 24 * 60 * 60 * 1000) // Items older than 24 hours
|
|
182
|
+
});
|
|
183
|
+
for (const item of items) {
|
|
184
|
+
if (item.ttl && item.ttl > 0) {
|
|
185
|
+
const expiryTime = item.timestamp.getTime() + (item.ttl * 60 * 1000);
|
|
186
|
+
if (now > expiryTime) {
|
|
187
|
+
if (await this.delete(item.id)) {
|
|
188
|
+
cleaned++;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return cleaned;
|
|
194
|
+
}
|
|
195
|
+
async export() {
|
|
196
|
+
if (!this.isConnected || !this.client) {
|
|
197
|
+
throw new Error('DevLog provider not initialized');
|
|
198
|
+
}
|
|
199
|
+
try {
|
|
200
|
+
const entries = await this.client.query({
|
|
201
|
+
workspace: this.config.workspace,
|
|
202
|
+
project: this.config.projectId,
|
|
203
|
+
type: 'memory_', // Prefix match for all memory types
|
|
204
|
+
limit: 100000 // Large limit to get all
|
|
205
|
+
});
|
|
206
|
+
return this.convertDevLogEntries(entries);
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
console.error('Failed to export from DevLog:', error);
|
|
210
|
+
throw error;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
async import(items) {
|
|
214
|
+
let imported = 0;
|
|
215
|
+
for (const item of items) {
|
|
216
|
+
try {
|
|
217
|
+
await this.store(item);
|
|
218
|
+
imported++;
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
console.error(`Failed to import item ${item.id}:`, error);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return imported;
|
|
225
|
+
}
|
|
226
|
+
async isAvailable() {
|
|
227
|
+
if (!this.isConnected || !this.client)
|
|
228
|
+
return false;
|
|
229
|
+
try {
|
|
230
|
+
// Check connection by getting stats
|
|
231
|
+
await this.client.getStats();
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
async close() {
|
|
239
|
+
if (this.client) {
|
|
240
|
+
await this.client.disconnect();
|
|
241
|
+
this.client = null;
|
|
242
|
+
}
|
|
243
|
+
this.isConnected = false;
|
|
244
|
+
await super.close();
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Helper methods
|
|
248
|
+
*/
|
|
249
|
+
async loadDevLogModule() {
|
|
250
|
+
try {
|
|
251
|
+
// Try to dynamically import devlog package
|
|
252
|
+
// @ts-ignore - Optional dependency
|
|
253
|
+
const devlog = await import('devlog');
|
|
254
|
+
return devlog;
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
// DevLog package not installed
|
|
258
|
+
console.warn('DevLog package not installed. Using local implementation.');
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
createLocalDevLog() {
|
|
263
|
+
// Local implementation that mimics DevLog API
|
|
264
|
+
const localStore = new Map();
|
|
265
|
+
let nextId = 1;
|
|
266
|
+
return {
|
|
267
|
+
async connect() {
|
|
268
|
+
console.error('Using local DevLog implementation');
|
|
269
|
+
},
|
|
270
|
+
async disconnect() {
|
|
271
|
+
localStore.clear();
|
|
272
|
+
},
|
|
273
|
+
async log(entry) {
|
|
274
|
+
const id = entry.id || `devlog_${nextId++}`;
|
|
275
|
+
entry.id = id;
|
|
276
|
+
entry.timestamp = entry.timestamp || new Date();
|
|
277
|
+
localStore.set(id, entry);
|
|
278
|
+
return id;
|
|
279
|
+
},
|
|
280
|
+
async query(params) {
|
|
281
|
+
let results = Array.from(localStore.values());
|
|
282
|
+
// Filter by type
|
|
283
|
+
if (params.type) {
|
|
284
|
+
const types = params.type.split(',');
|
|
285
|
+
results = results.filter(e => types.some(t => e.type.startsWith(t)));
|
|
286
|
+
}
|
|
287
|
+
// Filter by workspace
|
|
288
|
+
if (params.workspace) {
|
|
289
|
+
results = results.filter(e => e.workspace === params.workspace);
|
|
290
|
+
}
|
|
291
|
+
// Filter by project
|
|
292
|
+
if (params.project) {
|
|
293
|
+
results = results.filter(e => e.project === params.project);
|
|
294
|
+
}
|
|
295
|
+
// Text search
|
|
296
|
+
if (params.search) {
|
|
297
|
+
const searchLower = params.search.toLowerCase();
|
|
298
|
+
results = results.filter(e => e.content.toLowerCase().includes(searchLower));
|
|
299
|
+
}
|
|
300
|
+
// Filter by tags
|
|
301
|
+
if (params.tags && params.tags.length > 0) {
|
|
302
|
+
results = results.filter(e => e.tags && params.tags.some(tag => e.tags.includes(tag)));
|
|
303
|
+
}
|
|
304
|
+
// Date filtering
|
|
305
|
+
if (params.startDate) {
|
|
306
|
+
results = results.filter(e => e.timestamp && e.timestamp >= params.startDate);
|
|
307
|
+
}
|
|
308
|
+
if (params.endDate) {
|
|
309
|
+
results = results.filter(e => e.timestamp && e.timestamp <= params.endDate);
|
|
310
|
+
}
|
|
311
|
+
// Sort by timestamp (newest first)
|
|
312
|
+
results.sort((a, b) => {
|
|
313
|
+
const timeA = a.timestamp?.getTime() || 0;
|
|
314
|
+
const timeB = b.timestamp?.getTime() || 0;
|
|
315
|
+
return timeB - timeA;
|
|
316
|
+
});
|
|
317
|
+
// Apply offset and limit
|
|
318
|
+
if (params.offset) {
|
|
319
|
+
results = results.slice(params.offset);
|
|
320
|
+
}
|
|
321
|
+
if (params.limit) {
|
|
322
|
+
results = results.slice(0, params.limit);
|
|
323
|
+
}
|
|
324
|
+
return results;
|
|
325
|
+
},
|
|
326
|
+
async update(id, updates) {
|
|
327
|
+
const entry = localStore.get(id);
|
|
328
|
+
if (!entry)
|
|
329
|
+
return false;
|
|
330
|
+
Object.assign(entry, updates);
|
|
331
|
+
localStore.set(id, entry);
|
|
332
|
+
return true;
|
|
333
|
+
},
|
|
334
|
+
async delete(id) {
|
|
335
|
+
return localStore.delete(id);
|
|
336
|
+
},
|
|
337
|
+
async getStats() {
|
|
338
|
+
const entriesByType = {};
|
|
339
|
+
localStore.forEach(entry => {
|
|
340
|
+
entriesByType[entry.type] = (entriesByType[entry.type] || 0) + 1;
|
|
341
|
+
});
|
|
342
|
+
return {
|
|
343
|
+
totalEntries: localStore.size,
|
|
344
|
+
entriesByType,
|
|
345
|
+
storageUsedMB: localStore.size * 0.001 // Rough estimate
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
convertDevLogEntries(entries) {
|
|
351
|
+
return entries.map(entry => {
|
|
352
|
+
// Extract tier from type (e.g., "memory_session" -> "session")
|
|
353
|
+
const tier = (entry.type.replace('memory_', '') || 'session');
|
|
354
|
+
return {
|
|
355
|
+
id: entry.id || this.generateId(),
|
|
356
|
+
content: entry.content,
|
|
357
|
+
tier,
|
|
358
|
+
userId: entry.user,
|
|
359
|
+
projectId: entry.project || this.config.projectId,
|
|
360
|
+
teamId: entry.metadata?.teamId,
|
|
361
|
+
timestamp: entry.timestamp || new Date(),
|
|
362
|
+
metadata: entry.metadata || {},
|
|
363
|
+
tags: entry.tags,
|
|
364
|
+
ttl: entry.metadata?.ttl,
|
|
365
|
+
accessCount: entry.metadata?.accessCount || 0,
|
|
366
|
+
lastAccessed: entry.metadata?.lastAccessed ?
|
|
367
|
+
new Date(entry.metadata.lastAccessed) : new Date()
|
|
368
|
+
};
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Factory function to create DevLog provider
|
|
374
|
+
*/
|
|
375
|
+
export async function createDevLogProvider(config) {
|
|
376
|
+
try {
|
|
377
|
+
const provider = new DevLogProvider(config);
|
|
378
|
+
await provider.initialize();
|
|
379
|
+
return provider;
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
console.error('Failed to create DevLog provider:', error);
|
|
383
|
+
return null;
|
|
384
|
+
}
|
|
385
|
+
}
|