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.
Files changed (214) hide show
  1. package/.env.example +260 -0
  2. package/CHANGELOG.md +54 -0
  3. package/CODE_OF_CONDUCT.md +56 -0
  4. package/CONTRIBUTING.md +54 -0
  5. package/Dockerfile +36 -0
  6. package/LICENSE +644 -0
  7. package/README.md +201 -0
  8. package/SECURITY.md +95 -0
  9. package/dist/personality/komaai-expressions.js +12 -0
  10. package/dist/profiles/balanced.json +33 -0
  11. package/dist/profiles/code_focus.json +33 -0
  12. package/dist/profiles/full.json +33 -0
  13. package/dist/profiles/minimal.json +33 -0
  14. package/dist/profiles/research_power.json +33 -0
  15. package/dist/scripts/build-profiles.js +46 -0
  16. package/dist/src/application/services/focus/FocusModeRegistry.js +46 -0
  17. package/dist/src/application/services/focus/FocusTool.service.js +109 -0
  18. package/dist/src/application/services/focus/ModeRegistry.js +46 -0
  19. package/dist/src/application/services/focus/modes/focus-deep.mode.js +27 -0
  20. package/dist/src/application/services/focus/modes/status.mode.js +50 -0
  21. package/dist/src/application/services/focus/modes/tachibot-status.mode.js +50 -0
  22. package/dist/src/collaborative-orchestrator.js +391 -0
  23. package/dist/src/config/model-constants.js +188 -0
  24. package/dist/src/config/model-defaults.js +57 -0
  25. package/dist/src/config/model-preferences.js +382 -0
  26. package/dist/src/config/timeout-config.js +130 -0
  27. package/dist/src/config.js +173 -0
  28. package/dist/src/domain/interfaces/IFocusMode.js +5 -0
  29. package/dist/src/domain/interfaces/IProvider.js +6 -0
  30. package/dist/src/domain/interfaces/ITool.js +5 -0
  31. package/dist/src/focus-deep.js +245 -0
  32. package/dist/src/infrastructure/ascii/art/robots.ascii.js +16 -0
  33. package/dist/src/mcp-client.js +90 -0
  34. package/dist/src/memory/index.js +17 -0
  35. package/dist/src/memory/memory-config.js +135 -0
  36. package/dist/src/memory/memory-interface.js +174 -0
  37. package/dist/src/memory/memory-manager.js +383 -0
  38. package/dist/src/memory/providers/devlog-provider.js +385 -0
  39. package/dist/src/memory/providers/hybrid-provider.js +399 -0
  40. package/dist/src/memory/providers/local-provider.js +388 -0
  41. package/dist/src/memory/providers/mem0-provider.js +337 -0
  42. package/dist/src/modes/architect.js +477 -0
  43. package/dist/src/modes/auditor.js +362 -0
  44. package/dist/src/modes/challenger.js +841 -0
  45. package/dist/src/modes/code-reviewer.js +382 -0
  46. package/dist/src/modes/commit-guardian.js +424 -0
  47. package/dist/src/modes/documentation-writer.js +572 -0
  48. package/dist/src/modes/scout.js +587 -0
  49. package/dist/src/modes/shared/helpers/challenger-helpers.js +454 -0
  50. package/dist/src/modes/shared/helpers/index.js +17 -0
  51. package/dist/src/modes/shared/helpers/scout-helpers.js +270 -0
  52. package/dist/src/modes/shared/helpers/verifier-helpers.js +332 -0
  53. package/dist/src/modes/test-architect.js +767 -0
  54. package/dist/src/modes/verifier.js +378 -0
  55. package/dist/src/monitoring/performance-monitor.js +435 -0
  56. package/dist/src/optimization/batch-executor.js +121 -0
  57. package/dist/src/optimization/context-pruner.js +196 -0
  58. package/dist/src/optimization/cost-monitor.js +338 -0
  59. package/dist/src/optimization/index.js +65 -0
  60. package/dist/src/optimization/model-router.js +264 -0
  61. package/dist/src/optimization/result-cache.js +114 -0
  62. package/dist/src/optimization/token-optimizer.js +257 -0
  63. package/dist/src/optimization/token-tracker.js +118 -0
  64. package/dist/src/orchestrator-instructions.js +128 -0
  65. package/dist/src/orchestrator-lite.js +139 -0
  66. package/dist/src/orchestrator.js +191 -0
  67. package/dist/src/orchestrators/collaborative/interfaces/IToolExecutionEngine.js +1 -0
  68. package/dist/src/orchestrators/collaborative/interfaces/IToolExecutionStrategy.js +5 -0
  69. package/dist/src/orchestrators/collaborative/interfaces/IVisualizationRenderer.js +1 -0
  70. package/dist/src/orchestrators/collaborative/registries/ModelProviderRegistry.js +95 -0
  71. package/dist/src/orchestrators/collaborative/registries/ToolAdapterRegistry.js +64 -0
  72. package/dist/src/orchestrators/collaborative/services/tool-execution/ToolExecutionService.js +502 -0
  73. package/dist/src/orchestrators/collaborative/services/visualization/VisualizationService.js +206 -0
  74. package/dist/src/orchestrators/collaborative/types/session-types.js +5 -0
  75. package/dist/src/profiles/balanced.js +37 -0
  76. package/dist/src/profiles/code_focus.js +37 -0
  77. package/dist/src/profiles/debug_intensive.js +59 -0
  78. package/dist/src/profiles/full.js +37 -0
  79. package/dist/src/profiles/minimal.js +37 -0
  80. package/dist/src/profiles/research_code.js +59 -0
  81. package/dist/src/profiles/research_power.js +37 -0
  82. package/dist/src/profiles/types.js +5 -0
  83. package/dist/src/profiles/workflow_builder.js +53 -0
  84. package/dist/src/prompt-engineer-lite.js +78 -0
  85. package/dist/src/prompt-engineer.js +399 -0
  86. package/dist/src/reasoning-chain.js +508 -0
  87. package/dist/src/sequential-thinking.js +291 -0
  88. package/dist/src/server-diagnostic.js +74 -0
  89. package/dist/src/server-raw.js +158 -0
  90. package/dist/src/server-simple.js +58 -0
  91. package/dist/src/server.js +514 -0
  92. package/dist/src/session/session-logger.js +617 -0
  93. package/dist/src/session/session-manager.js +571 -0
  94. package/dist/src/session/session-tools.js +400 -0
  95. package/dist/src/tools/advanced-modes.js +200 -0
  96. package/dist/src/tools/claude-integration.js +356 -0
  97. package/dist/src/tools/consolidated/ai-router.js +174 -0
  98. package/dist/src/tools/consolidated/ai-tool.js +48 -0
  99. package/dist/src/tools/consolidated/brainstorm-tool.js +87 -0
  100. package/dist/src/tools/consolidated/environment-detector.js +80 -0
  101. package/dist/src/tools/consolidated/index.js +50 -0
  102. package/dist/src/tools/consolidated/search-tool.js +110 -0
  103. package/dist/src/tools/consolidated/workflow-tool.js +238 -0
  104. package/dist/src/tools/gemini-tools.js +329 -0
  105. package/dist/src/tools/grok-enhanced.js +376 -0
  106. package/dist/src/tools/grok-tools.js +299 -0
  107. package/dist/src/tools/lmstudio-tools.js +223 -0
  108. package/dist/src/tools/openai-tools.js +498 -0
  109. package/dist/src/tools/openrouter-tools.js +317 -0
  110. package/dist/src/tools/optimized-wrapper.js +204 -0
  111. package/dist/src/tools/perplexity-tools.js +294 -0
  112. package/dist/src/tools/pingpong-tool.js +343 -0
  113. package/dist/src/tools/qwen-wrapper.js +74 -0
  114. package/dist/src/tools/tool-router.js +444 -0
  115. package/dist/src/tools/unified-ai-provider.js +260 -0
  116. package/dist/src/tools/workflow-runner.js +425 -0
  117. package/dist/src/tools/workflow-validator-tool.js +107 -0
  118. package/dist/src/types.js +23 -0
  119. package/dist/src/utils/input-validator.js +130 -0
  120. package/dist/src/utils/model-router.js +91 -0
  121. package/dist/src/utils/progress-stream.js +255 -0
  122. package/dist/src/utils/provider-router.js +88 -0
  123. package/dist/src/utils/smart-api-client.js +146 -0
  124. package/dist/src/utils/table-builder.js +218 -0
  125. package/dist/src/utils/timestamp-formatter.js +134 -0
  126. package/dist/src/utils/tool-compressor.js +257 -0
  127. package/dist/src/utils/tool-config.js +201 -0
  128. package/dist/src/validators/dependency-graph-validator.js +147 -0
  129. package/dist/src/validators/interpolation-validator.js +222 -0
  130. package/dist/src/validators/output-usage-validator.js +151 -0
  131. package/dist/src/validators/syntax-validator.js +102 -0
  132. package/dist/src/validators/tool-registry-validator.js +123 -0
  133. package/dist/src/validators/tool-types.js +97 -0
  134. package/dist/src/validators/types.js +8 -0
  135. package/dist/src/validators/workflow-validator.js +134 -0
  136. package/dist/src/visualizer-lite.js +42 -0
  137. package/dist/src/visualizer.js +179 -0
  138. package/dist/src/workflows/circuit-breaker.js +199 -0
  139. package/dist/src/workflows/custom-workflows.js +451 -0
  140. package/dist/src/workflows/engine/AutoSynthesizer.js +97 -0
  141. package/dist/src/workflows/engine/StepParameterResolver.js +74 -0
  142. package/dist/src/workflows/engine/VariableInterpolator.js +123 -0
  143. package/dist/src/workflows/engine/WorkflowDiscovery.js +125 -0
  144. package/dist/src/workflows/engine/WorkflowExecutionEngine.js +485 -0
  145. package/dist/src/workflows/engine/WorkflowExecutor.js +113 -0
  146. package/dist/src/workflows/engine/WorkflowFileManager.js +244 -0
  147. package/dist/src/workflows/engine/WorkflowHelpers.js +114 -0
  148. package/dist/src/workflows/engine/WorkflowOutputFormatter.js +83 -0
  149. package/dist/src/workflows/engine/events/WorkflowEventBus.js +132 -0
  150. package/dist/src/workflows/engine/events/interfaces/IEventBus.js +5 -0
  151. package/dist/src/workflows/engine/handlers/ErrorRecoveryHandler.js +162 -0
  152. package/dist/src/workflows/engine/handlers/PromptEnhancementHandler.js +115 -0
  153. package/dist/src/workflows/engine/handlers/SessionPersistenceHandler.js +167 -0
  154. package/dist/src/workflows/engine/handlers/StepExecutionHandler.js +231 -0
  155. package/dist/src/workflows/engine/handlers/ToolInvocationHandler.js +46 -0
  156. package/dist/src/workflows/engine/interfaces/IAutoSynthesizer.js +5 -0
  157. package/dist/src/workflows/engine/interfaces/IStepParameterResolver.js +5 -0
  158. package/dist/src/workflows/engine/interfaces/IVariableInterpolator.js +5 -0
  159. package/dist/src/workflows/engine/interfaces/IWorkflowDiscovery.js +4 -0
  160. package/dist/src/workflows/engine/interfaces/IWorkflowFileManager.js +5 -0
  161. package/dist/src/workflows/engine/interfaces/IWorkflowOutputFormatter.js +5 -0
  162. package/dist/src/workflows/engine/state/WorkflowStateMachine.js +194 -0
  163. package/dist/src/workflows/engine/state/interfaces/IStateMachine.js +17 -0
  164. package/dist/src/workflows/fallback-strategies.js +373 -0
  165. package/dist/src/workflows/message-queue.js +455 -0
  166. package/dist/src/workflows/model-router.js +189 -0
  167. package/dist/src/workflows/orchestrator-examples.js +174 -0
  168. package/dist/src/workflows/orchestrator-integration.js +200 -0
  169. package/dist/src/workflows/self-healing.js +524 -0
  170. package/dist/src/workflows/tool-mapper.js +407 -0
  171. package/dist/src/workflows/tool-orchestrator.js +796 -0
  172. package/dist/src/workflows/workflow-engine.js +573 -0
  173. package/dist/src/workflows/workflow-parser.js +283 -0
  174. package/dist/src/workflows/workflow-types.js +95 -0
  175. package/dist/src/workflows.js +568 -0
  176. package/dist/test-workflow-file-output.js +93 -0
  177. package/docs/API_KEYS.md +570 -0
  178. package/docs/CLAUDE_CODE_SETUP.md +181 -0
  179. package/docs/CLAUDE_DESKTOP_MANUAL.md +127 -0
  180. package/docs/CONFIGURATION.md +745 -0
  181. package/docs/FOCUS_MODES.md +240 -0
  182. package/docs/INSTALLATION_BOTH.md +145 -0
  183. package/docs/TERMS.md +352 -0
  184. package/docs/TOOLS_REFERENCE.md +1622 -0
  185. package/docs/TOOL_PARAMETERS.md +496 -0
  186. package/docs/TOOL_PROFILES.md +236 -0
  187. package/docs/WORKFLOWS.md +987 -0
  188. package/docs/WORKFLOW_OUTPUT.md +198 -0
  189. package/docs/WORKFLOW_PROGRESS_TRACKING.md +305 -0
  190. package/docs/workflows/design-brainstorm.md +335 -0
  191. package/package.json +97 -0
  192. package/profiles/balanced.json +37 -0
  193. package/profiles/code_focus.json +37 -0
  194. package/profiles/debug_intensive.json +34 -0
  195. package/profiles/full.json +37 -0
  196. package/profiles/minimal.json +37 -0
  197. package/profiles/research_power.json +37 -0
  198. package/profiles/workflow_builder.json +37 -0
  199. package/smithery.yaml +66 -0
  200. package/start.sh +8 -0
  201. package/tools.config.json +81 -0
  202. package/tsconfig.json +18 -0
  203. package/workflows/accessibility-code-audit.yaml +92 -0
  204. package/workflows/code-architecture-review.yaml +202 -0
  205. package/workflows/code-review.yaml +142 -0
  206. package/workflows/core/iterative-problem-solver.yaml +283 -0
  207. package/workflows/creative-brainstorm-yaml.yaml +215 -0
  208. package/workflows/pingpong.yaml +141 -0
  209. package/workflows/system/README.md +412 -0
  210. package/workflows/system/challenger.yaml +175 -0
  211. package/workflows/system/scout.yaml +164 -0
  212. package/workflows/system/verifier.yaml +133 -0
  213. package/workflows/ultra-creative-brainstorm.yaml +318 -0
  214. 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
+ }