@weavelogic/knowledge-graph-agent 0.6.0 → 0.7.1
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/LICENSE +21 -0
- package/README.md +70 -3
- package/dist/_virtual/__vite-browser-external.js +2 -2
- package/dist/_virtual/__vite-browser-external.js.map +1 -1
- package/dist/_virtual/index12.js +7 -0
- package/dist/_virtual/index12.js.map +1 -0
- package/dist/_virtual/ort-web.min.js +8 -0
- package/dist/_virtual/ort-web.min.js.map +1 -0
- package/dist/_virtual/ort-web.min2.js +5 -0
- package/dist/_virtual/ort-web.min2.js.map +1 -0
- package/dist/agents/base-agent.d.ts +63 -0
- package/dist/agents/base-agent.d.ts.map +1 -1
- package/dist/agents/base-agent.js +139 -0
- package/dist/agents/base-agent.js.map +1 -1
- package/dist/agents/coordinator-agent.d.ts +422 -0
- package/dist/agents/coordinator-agent.d.ts.map +1 -0
- package/dist/agents/documenter-agent.d.ts +298 -0
- package/dist/agents/documenter-agent.d.ts.map +1 -0
- package/dist/agents/index.d.ts +11 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +4 -0
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/mixins/index.d.ts +9 -0
- package/dist/agents/mixins/index.d.ts.map +1 -0
- package/dist/agents/mixins/trajectory-mixin.d.ts +112 -0
- package/dist/agents/mixins/trajectory-mixin.d.ts.map +1 -0
- package/dist/agents/optimizer-agent.d.ts +388 -0
- package/dist/agents/optimizer-agent.d.ts.map +1 -0
- package/dist/agents/planner-agent.d.ts +395 -0
- package/dist/agents/planner-agent.d.ts.map +1 -0
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +5 -0
- package/dist/agents/registry.js.map +1 -1
- package/dist/agents/reviewer-agent.d.ts +330 -0
- package/dist/agents/reviewer-agent.d.ts.map +1 -0
- package/dist/agents/types.d.ts +12 -1
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/types.js +1 -0
- package/dist/agents/types.js.map +1 -1
- package/dist/cli/commands/hive-mind/add-frontmatter.d.ts +102 -0
- package/dist/cli/commands/hive-mind/add-frontmatter.d.ts.map +1 -0
- package/dist/cli/commands/hive-mind/add-frontmatter.js +439 -0
- package/dist/cli/commands/hive-mind/add-frontmatter.js.map +1 -0
- package/dist/cli/commands/hive-mind/analyze-links.d.ts +80 -0
- package/dist/cli/commands/hive-mind/analyze-links.d.ts.map +1 -0
- package/dist/cli/commands/hive-mind/analyze-links.js +367 -0
- package/dist/cli/commands/hive-mind/analyze-links.js.map +1 -0
- package/dist/cli/commands/hive-mind/find-connections.d.ts +75 -0
- package/dist/cli/commands/hive-mind/find-connections.d.ts.map +1 -0
- package/dist/cli/commands/hive-mind/find-connections.js +347 -0
- package/dist/cli/commands/hive-mind/find-connections.js.map +1 -0
- package/dist/cli/commands/hive-mind/index.d.ts +37 -0
- package/dist/cli/commands/hive-mind/index.d.ts.map +1 -0
- package/dist/cli/commands/hive-mind/index.js +33 -0
- package/dist/cli/commands/hive-mind/index.js.map +1 -0
- package/dist/cli/commands/hive-mind/validate-names.d.ts +79 -0
- package/dist/cli/commands/hive-mind/validate-names.d.ts.map +1 -0
- package/dist/cli/commands/hive-mind/validate-names.js +353 -0
- package/dist/cli/commands/hive-mind/validate-names.js.map +1 -0
- package/dist/cli/commands/vector.js +2 -0
- package/dist/cli/commands/vector.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +7 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/equilibrium/agent-equilibrium.d.ts +194 -0
- package/dist/equilibrium/agent-equilibrium.d.ts.map +1 -0
- package/dist/equilibrium/agent-equilibrium.js +304 -0
- package/dist/equilibrium/agent-equilibrium.js.map +1 -0
- package/dist/equilibrium/graph-equilibrium.d.ts +177 -0
- package/dist/equilibrium/graph-equilibrium.d.ts.map +1 -0
- package/dist/equilibrium/index.d.ts +11 -0
- package/dist/equilibrium/index.d.ts.map +1 -0
- package/dist/equilibrium/memory-equilibrium.d.ts +153 -0
- package/dist/equilibrium/memory-equilibrium.d.ts.map +1 -0
- package/dist/graphql/resolvers/index.d.ts.map +1 -1
- package/dist/graphql/resolvers/queries.d.ts +11 -0
- package/dist/graphql/resolvers/queries.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/inference/index.d.ts +9 -0
- package/dist/inference/index.d.ts.map +1 -0
- package/dist/inference/model-selection.d.ts +131 -0
- package/dist/inference/model-selection.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/agent-booster-adapter.d.ts +265 -0
- package/dist/integrations/agentic-flow/adapters/agent-booster-adapter.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/agentdb-adapter.d.ts +197 -0
- package/dist/integrations/agentic-flow/adapters/agentdb-adapter.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/agentdb-vector-store.d.ts +249 -0
- package/dist/integrations/agentic-flow/adapters/agentdb-vector-store.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/base-adapter.d.ts +120 -0
- package/dist/integrations/agentic-flow/adapters/base-adapter.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/federation-hub-adapter.d.ts +444 -0
- package/dist/integrations/agentic-flow/adapters/federation-hub-adapter.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/index.d.ts +17 -0
- package/dist/integrations/agentic-flow/adapters/index.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/model-router-adapter.d.ts +242 -0
- package/dist/integrations/agentic-flow/adapters/model-router-adapter.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/quic-transport-adapter.d.ts +364 -0
- package/dist/integrations/agentic-flow/adapters/quic-transport-adapter.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/reasoning-bank-adapter.d.ts +209 -0
- package/dist/integrations/agentic-flow/adapters/reasoning-bank-adapter.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/benchmark/index.d.ts +9 -0
- package/dist/integrations/agentic-flow/benchmark/index.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/benchmark/vector-benchmark.d.ts +253 -0
- package/dist/integrations/agentic-flow/benchmark/vector-benchmark.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/config.d.ts +109 -0
- package/dist/integrations/agentic-flow/config.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/feature-flags.d.ts +140 -0
- package/dist/integrations/agentic-flow/feature-flags.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/index.d.ts +22 -0
- package/dist/integrations/agentic-flow/index.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/migration/index.d.ts +9 -0
- package/dist/integrations/agentic-flow/migration/index.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/migration/migrate-to-agentdb.d.ts +242 -0
- package/dist/integrations/agentic-flow/migration/migrate-to-agentdb.d.ts.map +1 -0
- package/dist/learning/index.d.ts +91 -0
- package/dist/learning/index.d.ts.map +1 -0
- package/dist/learning/learning-loop.d.ts +176 -0
- package/dist/learning/learning-loop.d.ts.map +1 -0
- package/dist/learning/services/ab-testing-framework.d.ts +135 -0
- package/dist/learning/services/ab-testing-framework.d.ts.map +1 -0
- package/dist/learning/services/agent-priming-service.d.ts +207 -0
- package/dist/learning/services/agent-priming-service.d.ts.map +1 -0
- package/dist/learning/services/daily-log-generator.d.ts +113 -0
- package/dist/learning/services/daily-log-generator.d.ts.map +1 -0
- package/dist/learning/services/index.d.ts +14 -0
- package/dist/learning/services/index.d.ts.map +1 -0
- package/dist/learning/services/memory-extraction-service.d.ts +87 -0
- package/dist/learning/services/memory-extraction-service.d.ts.map +1 -0
- package/dist/learning/services/task-completion-consumer.d.ts +162 -0
- package/dist/learning/services/task-completion-consumer.d.ts.map +1 -0
- package/dist/learning/services/trajectory-tracker.d.ts +174 -0
- package/dist/learning/services/trajectory-tracker.d.ts.map +1 -0
- package/dist/learning/types.d.ts +516 -0
- package/dist/learning/types.d.ts.map +1 -0
- package/dist/mcp/clients/claude-flow-memory-client.d.ts +259 -0
- package/dist/mcp/clients/claude-flow-memory-client.d.ts.map +1 -0
- package/dist/mcp/clients/claude-flow-memory-client.js +305 -0
- package/dist/mcp/clients/claude-flow-memory-client.js.map +1 -0
- package/dist/mcp/clients/index.d.ts +11 -0
- package/dist/mcp/clients/index.d.ts.map +1 -0
- package/dist/mcp/clients/mcp-client-adapter.d.ts +146 -0
- package/dist/mcp/clients/mcp-client-adapter.d.ts.map +1 -0
- package/dist/mcp/clients/mcp-client-adapter.js +372 -0
- package/dist/mcp/clients/mcp-client-adapter.js.map +1 -0
- package/dist/mcp/index.d.ts +10 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/memory/vault-sync.d.ts +12 -0
- package/dist/memory/vault-sync.d.ts.map +1 -1
- package/dist/memory/vault-sync.js +94 -11
- package/dist/memory/vault-sync.js.map +1 -1
- package/dist/node_modules/@huggingface/jinja/dist/index.js +118 -0
- package/dist/node_modules/@huggingface/jinja/dist/index.js.map +1 -0
- package/dist/node_modules/@typescript-eslint/project-service/dist/index.js +1 -1
- package/dist/node_modules/@xenova/transformers/src/backends/onnx.js +24 -0
- package/dist/node_modules/@xenova/transformers/src/backends/onnx.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/configs.js +52 -0
- package/dist/node_modules/@xenova/transformers/src/configs.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/env.js +35 -0
- package/dist/node_modules/@xenova/transformers/src/env.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/models.js +3852 -0
- package/dist/node_modules/@xenova/transformers/src/models.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/tokenizers.js +144 -0
- package/dist/node_modules/@xenova/transformers/src/tokenizers.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/utils/core.js +52 -0
- package/dist/node_modules/@xenova/transformers/src/utils/core.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/utils/generation.js +623 -0
- package/dist/node_modules/@xenova/transformers/src/utils/generation.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/utils/hub.js +395 -0
- package/dist/node_modules/@xenova/transformers/src/utils/hub.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/utils/image.js +12 -0
- package/dist/node_modules/@xenova/transformers/src/utils/image.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/utils/maths.js +89 -0
- package/dist/node_modules/@xenova/transformers/src/utils/maths.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/utils/tensor.js +750 -0
- package/dist/node_modules/@xenova/transformers/src/utils/tensor.js.map +1 -0
- package/dist/node_modules/fdir/dist/index.js +13 -13
- package/dist/node_modules/fdir/dist/index.js.map +1 -1
- package/dist/node_modules/onnxruntime-common/dist/lib/backend-impl.js +67 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/backend-impl.js.map +1 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/env-impl.js +24 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/env-impl.js.map +1 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/env.js +6 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/env.js.map +1 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/index.js +11 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/index.js.map +1 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/inference-session-impl.js +162 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/inference-session-impl.js.map +1 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/inference-session.js +6 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/inference-session.js.map +1 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/tensor-impl.js +393 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/tensor-impl.js.map +1 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/tensor.js +6 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/tensor.js.map +1 -0
- package/dist/node_modules/onnxruntime-web/dist/ort-web.min.js +12919 -0
- package/dist/node_modules/onnxruntime-web/dist/ort-web.min.js.map +1 -0
- package/dist/node_modules/tinyglobby/dist/index.js +14 -14
- package/dist/node_modules/tinyglobby/dist/index.js.map +1 -1
- package/dist/node_modules/typescript/lib/typescript.js +24 -24
- package/dist/node_modules/typescript/lib/typescript.js.map +1 -1
- package/dist/transport/agent-transport.d.ts +269 -0
- package/dist/transport/agent-transport.d.ts.map +1 -0
- package/dist/transport/index.d.ts +10 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/vector/index.d.ts +1 -1
- package/dist/vector/index.d.ts.map +1 -1
- package/dist/vector/services/embedding-service.d.ts +244 -0
- package/dist/vector/services/embedding-service.d.ts.map +1 -0
- package/dist/vector/services/embedding-service.js +10 -0
- package/dist/vector/services/embedding-service.js.map +1 -0
- package/dist/vector/services/hybrid-search.d.ts +320 -0
- package/dist/vector/services/hybrid-search.d.ts.map +1 -0
- package/dist/vector/services/hybrid-search.js +3 -0
- package/dist/vector/services/hybrid-search.js.map +1 -0
- package/dist/vector/services/index.d.ts +4 -0
- package/dist/vector/services/index.d.ts.map +1 -1
- package/package.json +10 -1
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Client Adapter
|
|
3
|
+
*
|
|
4
|
+
* Provides real MCP tool execution via the claude-flow CLI with retry logic,
|
|
5
|
+
* timeout handling, and graceful fallback to in-memory storage when CLI is unavailable.
|
|
6
|
+
*
|
|
7
|
+
* @module mcp/clients/mcp-client-adapter
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* MCP Client Configuration
|
|
11
|
+
*/
|
|
12
|
+
export interface McpClientConfig {
|
|
13
|
+
/** Maximum number of retry attempts (default: 3) */
|
|
14
|
+
maxRetries: number;
|
|
15
|
+
/** Initial delay in milliseconds between retries (default: 1000) */
|
|
16
|
+
retryDelayMs: number;
|
|
17
|
+
/** Command execution timeout in milliseconds (default: 30000) */
|
|
18
|
+
timeoutMs: number;
|
|
19
|
+
/** Whether to fallback to in-memory storage when CLI unavailable (default: true) */
|
|
20
|
+
fallbackEnabled: boolean;
|
|
21
|
+
/** Claude-flow CLI command (default: 'npx claude-flow@alpha') */
|
|
22
|
+
cliCommand: string;
|
|
23
|
+
/** Whether to use JSON output format from CLI when available */
|
|
24
|
+
useJsonOutput: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Result of a memory operation
|
|
28
|
+
*/
|
|
29
|
+
export interface MemoryOperationResult {
|
|
30
|
+
/** Whether the operation succeeded */
|
|
31
|
+
success: boolean;
|
|
32
|
+
/** Result data (if successful) */
|
|
33
|
+
data?: unknown;
|
|
34
|
+
/** Error message (if failed) */
|
|
35
|
+
error?: string;
|
|
36
|
+
/** Whether the result came from fallback storage */
|
|
37
|
+
fromFallback: boolean;
|
|
38
|
+
/** Number of attempts made */
|
|
39
|
+
attempts: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* MCP Client Adapter
|
|
43
|
+
*
|
|
44
|
+
* Executes real claude-flow CLI commands with robust retry logic and fallback.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const adapter = new McpClientAdapter({
|
|
49
|
+
* maxRetries: 3,
|
|
50
|
+
* timeoutMs: 30000,
|
|
51
|
+
* });
|
|
52
|
+
*
|
|
53
|
+
* // Store value
|
|
54
|
+
* await adapter.memoryStore('myKey', 'myValue', 'myNamespace');
|
|
55
|
+
*
|
|
56
|
+
* // Retrieve value
|
|
57
|
+
* const value = await adapter.memoryRetrieve('myKey', 'myNamespace');
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare class McpClientAdapter {
|
|
61
|
+
private config;
|
|
62
|
+
private fallbackStore;
|
|
63
|
+
private cliAvailable;
|
|
64
|
+
private lastCliCheck;
|
|
65
|
+
private readonly CLI_CHECK_INTERVAL;
|
|
66
|
+
constructor(config?: Partial<McpClientConfig>);
|
|
67
|
+
/**
|
|
68
|
+
* Store a value in memory
|
|
69
|
+
*
|
|
70
|
+
* @param key - Memory key
|
|
71
|
+
* @param value - Value to store (will be JSON stringified if object)
|
|
72
|
+
* @param namespace - Memory namespace (default: 'default')
|
|
73
|
+
* @param ttl - Time to live in seconds (optional)
|
|
74
|
+
* @returns Whether the operation succeeded
|
|
75
|
+
*/
|
|
76
|
+
memoryStore(key: string, value: string | object, namespace?: string, ttl?: number): Promise<boolean>;
|
|
77
|
+
/**
|
|
78
|
+
* Retrieve a value from memory
|
|
79
|
+
*
|
|
80
|
+
* @param key - Memory key
|
|
81
|
+
* @param namespace - Memory namespace (default: 'default')
|
|
82
|
+
* @returns The stored value or null if not found
|
|
83
|
+
*/
|
|
84
|
+
memoryRetrieve(key: string, namespace?: string): Promise<string | null>;
|
|
85
|
+
/**
|
|
86
|
+
* Search memory by pattern
|
|
87
|
+
*
|
|
88
|
+
* @param pattern - Search pattern (supports glob-like matching)
|
|
89
|
+
* @param namespace - Memory namespace (default: 'default')
|
|
90
|
+
* @param limit - Maximum number of results (default: 10)
|
|
91
|
+
* @returns Array of matching keys
|
|
92
|
+
*/
|
|
93
|
+
memorySearch(pattern: string, namespace?: string, limit?: number): Promise<string[]>;
|
|
94
|
+
/**
|
|
95
|
+
* Delete a value from memory
|
|
96
|
+
*
|
|
97
|
+
* @param key - Memory key
|
|
98
|
+
* @param namespace - Memory namespace (default: 'default')
|
|
99
|
+
* @returns Whether the operation succeeded
|
|
100
|
+
*/
|
|
101
|
+
memoryDelete(key: string, namespace?: string): Promise<boolean>;
|
|
102
|
+
/**
|
|
103
|
+
* List all keys in a namespace
|
|
104
|
+
*
|
|
105
|
+
* @param namespace - Memory namespace (default: 'default')
|
|
106
|
+
* @returns Array of keys
|
|
107
|
+
*/
|
|
108
|
+
memoryList(namespace?: string): Promise<string[]>;
|
|
109
|
+
/**
|
|
110
|
+
* Check if CLI is available
|
|
111
|
+
*/
|
|
112
|
+
isCliAvailable(): Promise<boolean>;
|
|
113
|
+
/**
|
|
114
|
+
* Get current configuration
|
|
115
|
+
*/
|
|
116
|
+
getConfig(): Readonly<McpClientConfig>;
|
|
117
|
+
/**
|
|
118
|
+
* Get fallback store size for a namespace
|
|
119
|
+
*/
|
|
120
|
+
getFallbackSize(namespace?: string): number;
|
|
121
|
+
/**
|
|
122
|
+
* Clear fallback store
|
|
123
|
+
*/
|
|
124
|
+
clearFallback(namespace?: string): void;
|
|
125
|
+
private executeWithRetry;
|
|
126
|
+
private executeCli;
|
|
127
|
+
private buildStoreCommand;
|
|
128
|
+
private buildQueryCommand;
|
|
129
|
+
private buildSearchCommand;
|
|
130
|
+
private buildDeleteCommand;
|
|
131
|
+
private parseQueryOutput;
|
|
132
|
+
private parseSearchOutput;
|
|
133
|
+
private parseListOutput;
|
|
134
|
+
private escapeShellArg;
|
|
135
|
+
private getOrCreateNamespace;
|
|
136
|
+
private storeFallback;
|
|
137
|
+
private retrieveFallback;
|
|
138
|
+
private searchFallback;
|
|
139
|
+
private deleteFallback;
|
|
140
|
+
private listFallback;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Create a configured MCP client adapter
|
|
144
|
+
*/
|
|
145
|
+
export declare function createMcpClientAdapter(config?: Partial<McpClientConfig>): McpClientAdapter;
|
|
146
|
+
//# sourceMappingURL=mcp-client-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-client-adapter.d.ts","sourceRoot":"","sources":["../../../src/mcp/clients/mcp-client-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAuBH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IAEnB,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAC;IAErB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAElB,oFAAoF;IACpF,eAAe,EAAE,OAAO,CAAC;IAEzB,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IAEnB,gEAAgE;IAChE,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IAEjB,kCAAkC;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,oDAAoD;IACpD,YAAY,EAAE,OAAO,CAAC;IAEtB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAYD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;gBAEhC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM;IAYjD;;;;;;;;OAQG;IACG,WAAW,CACf,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,SAAS,GAAE,MAAkB,EAC7B,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC;IAyBnB;;;;;;OAMG;IACG,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAyBxF;;;;;;;OAOG;IACG,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAkB,EAC7B,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC;IAuBpB;;;;;;OAMG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBhF;;;;;OAKG;IACG,UAAU,CAAC,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAsBlE;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAoBxC;;OAEG;IACH,SAAS,IAAI,QAAQ,CAAC,eAAe,CAAC;IAItC;;OAEG;IACH,eAAe,CAAC,SAAS,GAAE,MAAkB,GAAG,MAAM;IAItD;;OAEG;IACH,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;YAUzB,gBAAgB;YA2BhB,UAAU;IA+BxB,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,cAAc;IA+BtB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,YAAY;CAkBrB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,gBAAgB,CAE1F"}
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
import { exec } from "child_process";
|
|
2
|
+
import { promisify } from "util";
|
|
3
|
+
import { withRetry } from "../../utils/error-recovery.js";
|
|
4
|
+
import { createLogger } from "../../utils/logger.js";
|
|
5
|
+
const execAsync = promisify(exec);
|
|
6
|
+
const logger = createLogger("mcp-client-adapter");
|
|
7
|
+
class McpClientAdapter {
|
|
8
|
+
config;
|
|
9
|
+
fallbackStore;
|
|
10
|
+
cliAvailable = null;
|
|
11
|
+
lastCliCheck = 0;
|
|
12
|
+
CLI_CHECK_INTERVAL = 6e4;
|
|
13
|
+
// Re-check CLI availability every 60s
|
|
14
|
+
constructor(config = {}) {
|
|
15
|
+
this.config = {
|
|
16
|
+
maxRetries: config.maxRetries ?? 3,
|
|
17
|
+
retryDelayMs: config.retryDelayMs ?? 1e3,
|
|
18
|
+
timeoutMs: config.timeoutMs ?? 3e4,
|
|
19
|
+
fallbackEnabled: config.fallbackEnabled ?? true,
|
|
20
|
+
cliCommand: config.cliCommand ?? "npx claude-flow@alpha",
|
|
21
|
+
useJsonOutput: config.useJsonOutput ?? true
|
|
22
|
+
};
|
|
23
|
+
this.fallbackStore = /* @__PURE__ */ new Map();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Store a value in memory
|
|
27
|
+
*
|
|
28
|
+
* @param key - Memory key
|
|
29
|
+
* @param value - Value to store (will be JSON stringified if object)
|
|
30
|
+
* @param namespace - Memory namespace (default: 'default')
|
|
31
|
+
* @param ttl - Time to live in seconds (optional)
|
|
32
|
+
* @returns Whether the operation succeeded
|
|
33
|
+
*/
|
|
34
|
+
async memoryStore(key, value, namespace = "default", ttl) {
|
|
35
|
+
const stringValue = typeof value === "string" ? value : JSON.stringify(value);
|
|
36
|
+
const result = await this.executeWithRetry(async () => {
|
|
37
|
+
const command = this.buildStoreCommand(key, stringValue, namespace, ttl);
|
|
38
|
+
await this.executeCli(command);
|
|
39
|
+
return true;
|
|
40
|
+
});
|
|
41
|
+
if (result.success) {
|
|
42
|
+
logger.debug("Memory store succeeded via CLI", { key, namespace });
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
if (this.config.fallbackEnabled) {
|
|
46
|
+
this.storeFallback(key, stringValue, namespace, ttl);
|
|
47
|
+
logger.warn("Memory store fell back to in-memory", { key, namespace, error: result.error });
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
logger.error("Memory store failed", void 0, { key, namespace, error: result.error });
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Retrieve a value from memory
|
|
55
|
+
*
|
|
56
|
+
* @param key - Memory key
|
|
57
|
+
* @param namespace - Memory namespace (default: 'default')
|
|
58
|
+
* @returns The stored value or null if not found
|
|
59
|
+
*/
|
|
60
|
+
async memoryRetrieve(key, namespace = "default") {
|
|
61
|
+
const result = await this.executeWithRetry(async () => {
|
|
62
|
+
const command = this.buildQueryCommand(key, namespace);
|
|
63
|
+
const output = await this.executeCli(command);
|
|
64
|
+
return this.parseQueryOutput(output, key);
|
|
65
|
+
});
|
|
66
|
+
if (result.success && result.value !== void 0) {
|
|
67
|
+
logger.debug("Memory retrieve succeeded via CLI", { key, namespace });
|
|
68
|
+
return result.value;
|
|
69
|
+
}
|
|
70
|
+
if (this.config.fallbackEnabled) {
|
|
71
|
+
const fallbackValue = this.retrieveFallback(key, namespace);
|
|
72
|
+
if (fallbackValue !== null) {
|
|
73
|
+
logger.debug("Memory retrieve fell back to in-memory", { key, namespace });
|
|
74
|
+
return fallbackValue;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
logger.debug("Memory retrieve returned null", { key, namespace });
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Search memory by pattern
|
|
82
|
+
*
|
|
83
|
+
* @param pattern - Search pattern (supports glob-like matching)
|
|
84
|
+
* @param namespace - Memory namespace (default: 'default')
|
|
85
|
+
* @param limit - Maximum number of results (default: 10)
|
|
86
|
+
* @returns Array of matching keys
|
|
87
|
+
*/
|
|
88
|
+
async memorySearch(pattern, namespace = "default", limit = 10) {
|
|
89
|
+
const result = await this.executeWithRetry(async () => {
|
|
90
|
+
const command = this.buildSearchCommand(pattern, namespace, limit);
|
|
91
|
+
const output = await this.executeCli(command);
|
|
92
|
+
return this.parseSearchOutput(output);
|
|
93
|
+
});
|
|
94
|
+
if (result.success && result.value) {
|
|
95
|
+
logger.debug("Memory search succeeded via CLI", { pattern, namespace, count: result.value.length });
|
|
96
|
+
return result.value;
|
|
97
|
+
}
|
|
98
|
+
if (this.config.fallbackEnabled) {
|
|
99
|
+
const fallbackResults = this.searchFallback(pattern, namespace, limit);
|
|
100
|
+
logger.debug("Memory search fell back to in-memory", { pattern, namespace, count: fallbackResults.length });
|
|
101
|
+
return fallbackResults;
|
|
102
|
+
}
|
|
103
|
+
logger.debug("Memory search returned empty", { pattern, namespace });
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Delete a value from memory
|
|
108
|
+
*
|
|
109
|
+
* @param key - Memory key
|
|
110
|
+
* @param namespace - Memory namespace (default: 'default')
|
|
111
|
+
* @returns Whether the operation succeeded
|
|
112
|
+
*/
|
|
113
|
+
async memoryDelete(key, namespace = "default") {
|
|
114
|
+
const result = await this.executeWithRetry(async () => {
|
|
115
|
+
const command = this.buildDeleteCommand(key, namespace);
|
|
116
|
+
await this.executeCli(command);
|
|
117
|
+
return true;
|
|
118
|
+
});
|
|
119
|
+
if (result.success) {
|
|
120
|
+
logger.debug("Memory delete succeeded via CLI", { key, namespace });
|
|
121
|
+
}
|
|
122
|
+
if (this.config.fallbackEnabled) {
|
|
123
|
+
this.deleteFallback(key, namespace);
|
|
124
|
+
}
|
|
125
|
+
return result.success || this.config.fallbackEnabled;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* List all keys in a namespace
|
|
129
|
+
*
|
|
130
|
+
* @param namespace - Memory namespace (default: 'default')
|
|
131
|
+
* @returns Array of keys
|
|
132
|
+
*/
|
|
133
|
+
async memoryList(namespace = "default") {
|
|
134
|
+
const result = await this.executeWithRetry(async () => {
|
|
135
|
+
const command = `${this.config.cliCommand} memory list --namespace "${namespace}"`;
|
|
136
|
+
const output = await this.executeCli(command);
|
|
137
|
+
return this.parseListOutput(output);
|
|
138
|
+
});
|
|
139
|
+
if (result.success && result.value) {
|
|
140
|
+
logger.debug("Memory list succeeded via CLI", { namespace, count: result.value.length });
|
|
141
|
+
return result.value;
|
|
142
|
+
}
|
|
143
|
+
if (this.config.fallbackEnabled) {
|
|
144
|
+
const fallbackKeys = this.listFallback(namespace);
|
|
145
|
+
logger.debug("Memory list fell back to in-memory", { namespace, count: fallbackKeys.length });
|
|
146
|
+
return fallbackKeys;
|
|
147
|
+
}
|
|
148
|
+
return [];
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Check if CLI is available
|
|
152
|
+
*/
|
|
153
|
+
async isCliAvailable() {
|
|
154
|
+
const now = Date.now();
|
|
155
|
+
if (this.cliAvailable !== null && now - this.lastCliCheck < this.CLI_CHECK_INTERVAL) {
|
|
156
|
+
return this.cliAvailable;
|
|
157
|
+
}
|
|
158
|
+
try {
|
|
159
|
+
await this.executeCli(`${this.config.cliCommand} --version`, 5e3);
|
|
160
|
+
this.cliAvailable = true;
|
|
161
|
+
this.lastCliCheck = now;
|
|
162
|
+
return true;
|
|
163
|
+
} catch {
|
|
164
|
+
this.cliAvailable = false;
|
|
165
|
+
this.lastCliCheck = now;
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get current configuration
|
|
171
|
+
*/
|
|
172
|
+
getConfig() {
|
|
173
|
+
return { ...this.config };
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Get fallback store size for a namespace
|
|
177
|
+
*/
|
|
178
|
+
getFallbackSize(namespace = "default") {
|
|
179
|
+
return this.fallbackStore.get(namespace)?.size ?? 0;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Clear fallback store
|
|
183
|
+
*/
|
|
184
|
+
clearFallback(namespace) {
|
|
185
|
+
if (namespace) {
|
|
186
|
+
this.fallbackStore.delete(namespace);
|
|
187
|
+
} else {
|
|
188
|
+
this.fallbackStore.clear();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// Private methods
|
|
192
|
+
async executeWithRetry(operation) {
|
|
193
|
+
const retryOptions = {
|
|
194
|
+
maxRetries: this.config.maxRetries,
|
|
195
|
+
initialDelay: this.config.retryDelayMs,
|
|
196
|
+
backoffFactor: 2,
|
|
197
|
+
jitter: true,
|
|
198
|
+
onRetry: (error, attempt, delay) => {
|
|
199
|
+
logger.debug("Retrying MCP operation", {
|
|
200
|
+
attempt,
|
|
201
|
+
delay,
|
|
202
|
+
error: error.message
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
const result = await withRetry(operation, retryOptions);
|
|
207
|
+
return {
|
|
208
|
+
success: result.success,
|
|
209
|
+
value: result.value,
|
|
210
|
+
error: result.error?.message,
|
|
211
|
+
attempts: result.attempts
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
async executeCli(command, timeout) {
|
|
215
|
+
const effectiveTimeout = timeout ?? this.config.timeoutMs;
|
|
216
|
+
logger.debug("Executing CLI command", { command: command.substring(0, 100) });
|
|
217
|
+
try {
|
|
218
|
+
const { stdout, stderr } = await execAsync(command, {
|
|
219
|
+
timeout: effectiveTimeout,
|
|
220
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
221
|
+
// 10MB buffer
|
|
222
|
+
shell: "/bin/bash"
|
|
223
|
+
});
|
|
224
|
+
if (stderr && !stderr.includes("DeprecationWarning")) {
|
|
225
|
+
logger.warn("CLI stderr output", { stderr: stderr.substring(0, 500) });
|
|
226
|
+
}
|
|
227
|
+
return stdout.trim();
|
|
228
|
+
} catch (error) {
|
|
229
|
+
const execError = error;
|
|
230
|
+
if (execError.code === "ETIMEDOUT" || execError.killed) {
|
|
231
|
+
throw new Error(`CLI command timed out after ${effectiveTimeout}ms`);
|
|
232
|
+
}
|
|
233
|
+
const message = execError.message || "CLI execution failed";
|
|
234
|
+
const details = execError.stderr || execError.stdout || "";
|
|
235
|
+
throw new Error(`${message}${details ? `: ${details.substring(0, 200)}` : ""}`);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
buildStoreCommand(key, value, namespace, ttl) {
|
|
239
|
+
const escapedValue = this.escapeShellArg(value);
|
|
240
|
+
let command = `${this.config.cliCommand} memory store "${key}" ${escapedValue} --namespace "${namespace}"`;
|
|
241
|
+
if (ttl !== void 0 && ttl > 0) {
|
|
242
|
+
command += ` --ttl ${ttl}`;
|
|
243
|
+
}
|
|
244
|
+
return command;
|
|
245
|
+
}
|
|
246
|
+
buildQueryCommand(key, namespace) {
|
|
247
|
+
return `${this.config.cliCommand} memory query "${key}" --namespace "${namespace}"`;
|
|
248
|
+
}
|
|
249
|
+
buildSearchCommand(pattern, namespace, limit) {
|
|
250
|
+
return `${this.config.cliCommand} memory query "${pattern}" --namespace "${namespace}"`;
|
|
251
|
+
}
|
|
252
|
+
buildDeleteCommand(key, namespace) {
|
|
253
|
+
return `${this.config.cliCommand} memory clear --namespace "${namespace}"`;
|
|
254
|
+
}
|
|
255
|
+
parseQueryOutput(output, key) {
|
|
256
|
+
if (!output || output.includes("not found") || output.includes("No results")) {
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
try {
|
|
260
|
+
const parsed = JSON.parse(output);
|
|
261
|
+
if (typeof parsed === "object" && parsed !== null) {
|
|
262
|
+
if (key in parsed) {
|
|
263
|
+
return typeof parsed[key] === "string" ? parsed[key] : JSON.stringify(parsed[key]);
|
|
264
|
+
}
|
|
265
|
+
return JSON.stringify(parsed);
|
|
266
|
+
}
|
|
267
|
+
return String(parsed);
|
|
268
|
+
} catch {
|
|
269
|
+
return output;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
parseSearchOutput(output) {
|
|
273
|
+
if (!output || output.includes("No results")) {
|
|
274
|
+
return [];
|
|
275
|
+
}
|
|
276
|
+
try {
|
|
277
|
+
const parsed = JSON.parse(output);
|
|
278
|
+
if (Array.isArray(parsed)) {
|
|
279
|
+
return parsed.map((item) => typeof item === "string" ? item : JSON.stringify(item));
|
|
280
|
+
}
|
|
281
|
+
if (typeof parsed === "object" && parsed !== null) {
|
|
282
|
+
return Object.keys(parsed);
|
|
283
|
+
}
|
|
284
|
+
} catch {
|
|
285
|
+
return output.split("\n").map((line) => line.trim()).filter((line) => line.length > 0 && !line.startsWith("#"));
|
|
286
|
+
}
|
|
287
|
+
return [];
|
|
288
|
+
}
|
|
289
|
+
parseListOutput(output) {
|
|
290
|
+
return this.parseSearchOutput(output);
|
|
291
|
+
}
|
|
292
|
+
escapeShellArg(arg) {
|
|
293
|
+
const escaped = arg.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/`/g, "\\`").replace(/\$/g, "\\$").replace(/\n/g, "\\n");
|
|
294
|
+
return `"${escaped}"`;
|
|
295
|
+
}
|
|
296
|
+
// Fallback storage methods
|
|
297
|
+
getOrCreateNamespace(namespace) {
|
|
298
|
+
let ns = this.fallbackStore.get(namespace);
|
|
299
|
+
if (!ns) {
|
|
300
|
+
ns = /* @__PURE__ */ new Map();
|
|
301
|
+
this.fallbackStore.set(namespace, ns);
|
|
302
|
+
}
|
|
303
|
+
return ns;
|
|
304
|
+
}
|
|
305
|
+
storeFallback(key, value, namespace, ttl) {
|
|
306
|
+
const ns = this.getOrCreateNamespace(namespace);
|
|
307
|
+
const now = Date.now();
|
|
308
|
+
ns.set(key, {
|
|
309
|
+
value,
|
|
310
|
+
ttl,
|
|
311
|
+
createdAt: now,
|
|
312
|
+
expiresAt: ttl ? now + ttl * 1e3 : void 0
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
retrieveFallback(key, namespace) {
|
|
316
|
+
const ns = this.fallbackStore.get(namespace);
|
|
317
|
+
if (!ns) return null;
|
|
318
|
+
const entry = ns.get(key);
|
|
319
|
+
if (!entry) return null;
|
|
320
|
+
if (entry.expiresAt && Date.now() > entry.expiresAt) {
|
|
321
|
+
ns.delete(key);
|
|
322
|
+
return null;
|
|
323
|
+
}
|
|
324
|
+
return entry.value;
|
|
325
|
+
}
|
|
326
|
+
searchFallback(pattern, namespace, limit) {
|
|
327
|
+
const ns = this.fallbackStore.get(namespace);
|
|
328
|
+
if (!ns) return [];
|
|
329
|
+
const now = Date.now();
|
|
330
|
+
const results = [];
|
|
331
|
+
const regexPattern = pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*").replace(/\?/g, ".");
|
|
332
|
+
const regex = new RegExp(`^${regexPattern}$`, "i");
|
|
333
|
+
for (const [key, entry] of ns) {
|
|
334
|
+
if (results.length >= limit) break;
|
|
335
|
+
if (entry.expiresAt && now > entry.expiresAt) {
|
|
336
|
+
ns.delete(key);
|
|
337
|
+
continue;
|
|
338
|
+
}
|
|
339
|
+
if (regex.test(key)) {
|
|
340
|
+
results.push(key);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
return results;
|
|
344
|
+
}
|
|
345
|
+
deleteFallback(key, namespace) {
|
|
346
|
+
const ns = this.fallbackStore.get(namespace);
|
|
347
|
+
if (!ns) return false;
|
|
348
|
+
return ns.delete(key);
|
|
349
|
+
}
|
|
350
|
+
listFallback(namespace) {
|
|
351
|
+
const ns = this.fallbackStore.get(namespace);
|
|
352
|
+
if (!ns) return [];
|
|
353
|
+
const now = Date.now();
|
|
354
|
+
const keys = [];
|
|
355
|
+
for (const [key, entry] of ns) {
|
|
356
|
+
if (entry.expiresAt && now > entry.expiresAt) {
|
|
357
|
+
ns.delete(key);
|
|
358
|
+
continue;
|
|
359
|
+
}
|
|
360
|
+
keys.push(key);
|
|
361
|
+
}
|
|
362
|
+
return keys;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
function createMcpClientAdapter(config) {
|
|
366
|
+
return new McpClientAdapter(config);
|
|
367
|
+
}
|
|
368
|
+
export {
|
|
369
|
+
McpClientAdapter,
|
|
370
|
+
createMcpClientAdapter
|
|
371
|
+
};
|
|
372
|
+
//# sourceMappingURL=mcp-client-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-client-adapter.js","sources":["../../../src/mcp/clients/mcp-client-adapter.ts"],"sourcesContent":["/**\n * MCP Client Adapter\n *\n * Provides real MCP tool execution via the claude-flow CLI with retry logic,\n * timeout handling, and graceful fallback to in-memory storage when CLI is unavailable.\n *\n * @module mcp/clients/mcp-client-adapter\n */\n\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\nimport {\n createLogger,\n withRetry,\n type RetryOptions,\n} from '../../utils/index.js';\n\nconst execAsync = promisify(exec);\n\n/**\n * Extended exec error type with additional properties\n */\ninterface ExecError extends Error {\n code?: string | number;\n killed?: boolean;\n stderr?: string;\n stdout?: string;\n}\nconst logger = createLogger('mcp-client-adapter');\n\n/**\n * MCP Client Configuration\n */\nexport interface McpClientConfig {\n /** Maximum number of retry attempts (default: 3) */\n maxRetries: number;\n\n /** Initial delay in milliseconds between retries (default: 1000) */\n retryDelayMs: number;\n\n /** Command execution timeout in milliseconds (default: 30000) */\n timeoutMs: number;\n\n /** Whether to fallback to in-memory storage when CLI unavailable (default: true) */\n fallbackEnabled: boolean;\n\n /** Claude-flow CLI command (default: 'npx claude-flow@alpha') */\n cliCommand: string;\n\n /** Whether to use JSON output format from CLI when available */\n useJsonOutput: boolean;\n}\n\n/**\n * Result of a memory operation\n */\nexport interface MemoryOperationResult {\n /** Whether the operation succeeded */\n success: boolean;\n\n /** Result data (if successful) */\n data?: unknown;\n\n /** Error message (if failed) */\n error?: string;\n\n /** Whether the result came from fallback storage */\n fromFallback: boolean;\n\n /** Number of attempts made */\n attempts: number;\n}\n\n/**\n * Memory entry stored in fallback\n */\ninterface FallbackEntry {\n value: string;\n ttl?: number;\n createdAt: number;\n expiresAt?: number;\n}\n\n/**\n * MCP Client Adapter\n *\n * Executes real claude-flow CLI commands with robust retry logic and fallback.\n *\n * @example\n * ```typescript\n * const adapter = new McpClientAdapter({\n * maxRetries: 3,\n * timeoutMs: 30000,\n * });\n *\n * // Store value\n * await adapter.memoryStore('myKey', 'myValue', 'myNamespace');\n *\n * // Retrieve value\n * const value = await adapter.memoryRetrieve('myKey', 'myNamespace');\n * ```\n */\nexport class McpClientAdapter {\n private config: McpClientConfig;\n private fallbackStore: Map<string, Map<string, FallbackEntry>>;\n private cliAvailable: boolean | null = null;\n private lastCliCheck: number = 0;\n private readonly CLI_CHECK_INTERVAL = 60000; // Re-check CLI availability every 60s\n\n constructor(config: Partial<McpClientConfig> = {}) {\n this.config = {\n maxRetries: config.maxRetries ?? 3,\n retryDelayMs: config.retryDelayMs ?? 1000,\n timeoutMs: config.timeoutMs ?? 30000,\n fallbackEnabled: config.fallbackEnabled ?? true,\n cliCommand: config.cliCommand ?? 'npx claude-flow@alpha',\n useJsonOutput: config.useJsonOutput ?? true,\n };\n this.fallbackStore = new Map();\n }\n\n /**\n * Store a value in memory\n *\n * @param key - Memory key\n * @param value - Value to store (will be JSON stringified if object)\n * @param namespace - Memory namespace (default: 'default')\n * @param ttl - Time to live in seconds (optional)\n * @returns Whether the operation succeeded\n */\n async memoryStore(\n key: string,\n value: string | object,\n namespace: string = 'default',\n ttl?: number\n ): Promise<boolean> {\n const stringValue = typeof value === 'string' ? value : JSON.stringify(value);\n\n const result = await this.executeWithRetry(async () => {\n const command = this.buildStoreCommand(key, stringValue, namespace, ttl);\n await this.executeCli(command);\n return true;\n });\n\n if (result.success) {\n logger.debug('Memory store succeeded via CLI', { key, namespace });\n return true;\n }\n\n // Fallback to in-memory storage\n if (this.config.fallbackEnabled) {\n this.storeFallback(key, stringValue, namespace, ttl);\n logger.warn('Memory store fell back to in-memory', { key, namespace, error: result.error });\n return true;\n }\n\n logger.error('Memory store failed', undefined, { key, namespace, error: result.error });\n return false;\n }\n\n /**\n * Retrieve a value from memory\n *\n * @param key - Memory key\n * @param namespace - Memory namespace (default: 'default')\n * @returns The stored value or null if not found\n */\n async memoryRetrieve(key: string, namespace: string = 'default'): Promise<string | null> {\n const result = await this.executeWithRetry(async () => {\n const command = this.buildQueryCommand(key, namespace);\n const output = await this.executeCli(command);\n return this.parseQueryOutput(output, key);\n });\n\n if (result.success && result.value !== undefined) {\n logger.debug('Memory retrieve succeeded via CLI', { key, namespace });\n return result.value;\n }\n\n // Fallback to in-memory storage\n if (this.config.fallbackEnabled) {\n const fallbackValue = this.retrieveFallback(key, namespace);\n if (fallbackValue !== null) {\n logger.debug('Memory retrieve fell back to in-memory', { key, namespace });\n return fallbackValue;\n }\n }\n\n logger.debug('Memory retrieve returned null', { key, namespace });\n return null;\n }\n\n /**\n * Search memory by pattern\n *\n * @param pattern - Search pattern (supports glob-like matching)\n * @param namespace - Memory namespace (default: 'default')\n * @param limit - Maximum number of results (default: 10)\n * @returns Array of matching keys\n */\n async memorySearch(\n pattern: string,\n namespace: string = 'default',\n limit: number = 10\n ): Promise<string[]> {\n const result = await this.executeWithRetry(async () => {\n const command = this.buildSearchCommand(pattern, namespace, limit);\n const output = await this.executeCli(command);\n return this.parseSearchOutput(output);\n });\n\n if (result.success && result.value) {\n logger.debug('Memory search succeeded via CLI', { pattern, namespace, count: result.value.length });\n return result.value;\n }\n\n // Fallback to in-memory search\n if (this.config.fallbackEnabled) {\n const fallbackResults = this.searchFallback(pattern, namespace, limit);\n logger.debug('Memory search fell back to in-memory', { pattern, namespace, count: fallbackResults.length });\n return fallbackResults;\n }\n\n logger.debug('Memory search returned empty', { pattern, namespace });\n return [];\n }\n\n /**\n * Delete a value from memory\n *\n * @param key - Memory key\n * @param namespace - Memory namespace (default: 'default')\n * @returns Whether the operation succeeded\n */\n async memoryDelete(key: string, namespace: string = 'default'): Promise<boolean> {\n const result = await this.executeWithRetry(async () => {\n // Use clear command with specific key pattern\n const command = this.buildDeleteCommand(key, namespace);\n await this.executeCli(command);\n return true;\n });\n\n if (result.success) {\n logger.debug('Memory delete succeeded via CLI', { key, namespace });\n }\n\n // Also delete from fallback (regardless of CLI success)\n if (this.config.fallbackEnabled) {\n this.deleteFallback(key, namespace);\n }\n\n return result.success || this.config.fallbackEnabled;\n }\n\n /**\n * List all keys in a namespace\n *\n * @param namespace - Memory namespace (default: 'default')\n * @returns Array of keys\n */\n async memoryList(namespace: string = 'default'): Promise<string[]> {\n const result = await this.executeWithRetry(async () => {\n const command = `${this.config.cliCommand} memory list --namespace \"${namespace}\"`;\n const output = await this.executeCli(command);\n return this.parseListOutput(output);\n });\n\n if (result.success && result.value) {\n logger.debug('Memory list succeeded via CLI', { namespace, count: result.value.length });\n return result.value;\n }\n\n // Fallback\n if (this.config.fallbackEnabled) {\n const fallbackKeys = this.listFallback(namespace);\n logger.debug('Memory list fell back to in-memory', { namespace, count: fallbackKeys.length });\n return fallbackKeys;\n }\n\n return [];\n }\n\n /**\n * Check if CLI is available\n */\n async isCliAvailable(): Promise<boolean> {\n const now = Date.now();\n\n // Use cached result if recent\n if (this.cliAvailable !== null && now - this.lastCliCheck < this.CLI_CHECK_INTERVAL) {\n return this.cliAvailable;\n }\n\n try {\n await this.executeCli(`${this.config.cliCommand} --version`, 5000);\n this.cliAvailable = true;\n this.lastCliCheck = now;\n return true;\n } catch {\n this.cliAvailable = false;\n this.lastCliCheck = now;\n return false;\n }\n }\n\n /**\n * Get current configuration\n */\n getConfig(): Readonly<McpClientConfig> {\n return { ...this.config };\n }\n\n /**\n * Get fallback store size for a namespace\n */\n getFallbackSize(namespace: string = 'default'): number {\n return this.fallbackStore.get(namespace)?.size ?? 0;\n }\n\n /**\n * Clear fallback store\n */\n clearFallback(namespace?: string): void {\n if (namespace) {\n this.fallbackStore.delete(namespace);\n } else {\n this.fallbackStore.clear();\n }\n }\n\n // Private methods\n\n private async executeWithRetry<T>(\n operation: () => Promise<T>\n ): Promise<{ success: boolean; value?: T; error?: string; attempts: number }> {\n const retryOptions: RetryOptions = {\n maxRetries: this.config.maxRetries,\n initialDelay: this.config.retryDelayMs,\n backoffFactor: 2,\n jitter: true,\n onRetry: (error, attempt, delay) => {\n logger.debug('Retrying MCP operation', {\n attempt,\n delay,\n error: error.message,\n });\n },\n };\n\n const result = await withRetry(operation, retryOptions);\n\n return {\n success: result.success,\n value: result.value,\n error: result.error?.message,\n attempts: result.attempts,\n };\n }\n\n private async executeCli(command: string, timeout?: number): Promise<string> {\n const effectiveTimeout = timeout ?? this.config.timeoutMs;\n\n logger.debug('Executing CLI command', { command: command.substring(0, 100) });\n\n try {\n const { stdout, stderr } = await execAsync(command, {\n timeout: effectiveTimeout,\n maxBuffer: 10 * 1024 * 1024, // 10MB buffer\n shell: '/bin/bash',\n });\n\n if (stderr && !stderr.includes('DeprecationWarning')) {\n logger.warn('CLI stderr output', { stderr: stderr.substring(0, 500) });\n }\n\n return stdout.trim();\n } catch (error) {\n const execError = error as ExecError;\n\n if (execError.code === 'ETIMEDOUT' || execError.killed) {\n throw new Error(`CLI command timed out after ${effectiveTimeout}ms`);\n }\n\n // Include any output in the error for debugging\n const message = execError.message || 'CLI execution failed';\n const details = execError.stderr || execError.stdout || '';\n throw new Error(`${message}${details ? `: ${details.substring(0, 200)}` : ''}`);\n }\n }\n\n private buildStoreCommand(\n key: string,\n value: string,\n namespace: string,\n ttl?: number\n ): string {\n const escapedValue = this.escapeShellArg(value);\n let command = `${this.config.cliCommand} memory store \"${key}\" ${escapedValue} --namespace \"${namespace}\"`;\n\n if (ttl !== undefined && ttl > 0) {\n command += ` --ttl ${ttl}`;\n }\n\n return command;\n }\n\n private buildQueryCommand(key: string, namespace: string): string {\n // Use query command to search for exact key\n return `${this.config.cliCommand} memory query \"${key}\" --namespace \"${namespace}\"`;\n }\n\n private buildSearchCommand(pattern: string, namespace: string, limit: number): string {\n return `${this.config.cliCommand} memory query \"${pattern}\" --namespace \"${namespace}\"`;\n }\n\n private buildDeleteCommand(key: string, namespace: string): string {\n // claude-flow uses 'clear' for deletion\n return `${this.config.cliCommand} memory clear --namespace \"${namespace}\"`;\n }\n\n private parseQueryOutput(output: string, key: string): string | null {\n if (!output || output.includes('not found') || output.includes('No results')) {\n return null;\n }\n\n // Try to parse as JSON first\n try {\n const parsed = JSON.parse(output);\n if (typeof parsed === 'object' && parsed !== null) {\n // Look for the key in the result\n if (key in parsed) {\n return typeof parsed[key] === 'string' ? parsed[key] : JSON.stringify(parsed[key]);\n }\n // Return the whole object as JSON string\n return JSON.stringify(parsed);\n }\n return String(parsed);\n } catch {\n // Return raw output\n return output;\n }\n }\n\n private parseSearchOutput(output: string): string[] {\n if (!output || output.includes('No results')) {\n return [];\n }\n\n // Try to parse as JSON array\n try {\n const parsed = JSON.parse(output);\n if (Array.isArray(parsed)) {\n return parsed.map((item) => (typeof item === 'string' ? item : JSON.stringify(item)));\n }\n if (typeof parsed === 'object' && parsed !== null) {\n return Object.keys(parsed);\n }\n } catch {\n // Parse line by line\n return output\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0 && !line.startsWith('#'));\n }\n\n return [];\n }\n\n private parseListOutput(output: string): string[] {\n return this.parseSearchOutput(output);\n }\n\n private escapeShellArg(arg: string): string {\n // Escape for shell and wrap in quotes\n const escaped = arg\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/`/g, '\\\\`')\n .replace(/\\$/g, '\\\\$')\n .replace(/\\n/g, '\\\\n');\n return `\"${escaped}\"`;\n }\n\n // Fallback storage methods\n\n private getOrCreateNamespace(namespace: string): Map<string, FallbackEntry> {\n let ns = this.fallbackStore.get(namespace);\n if (!ns) {\n ns = new Map();\n this.fallbackStore.set(namespace, ns);\n }\n return ns;\n }\n\n private storeFallback(key: string, value: string, namespace: string, ttl?: number): void {\n const ns = this.getOrCreateNamespace(namespace);\n const now = Date.now();\n\n ns.set(key, {\n value,\n ttl,\n createdAt: now,\n expiresAt: ttl ? now + ttl * 1000 : undefined,\n });\n }\n\n private retrieveFallback(key: string, namespace: string): string | null {\n const ns = this.fallbackStore.get(namespace);\n if (!ns) return null;\n\n const entry = ns.get(key);\n if (!entry) return null;\n\n // Check expiration\n if (entry.expiresAt && Date.now() > entry.expiresAt) {\n ns.delete(key);\n return null;\n }\n\n return entry.value;\n }\n\n private searchFallback(pattern: string, namespace: string, limit: number): string[] {\n const ns = this.fallbackStore.get(namespace);\n if (!ns) return [];\n\n const now = Date.now();\n const results: string[] = [];\n\n // Convert glob pattern to regex\n const regexPattern = pattern\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/\\?/g, '.');\n const regex = new RegExp(`^${regexPattern}$`, 'i');\n\n for (const [key, entry] of ns) {\n if (results.length >= limit) break;\n\n // Skip expired entries\n if (entry.expiresAt && now > entry.expiresAt) {\n ns.delete(key);\n continue;\n }\n\n if (regex.test(key)) {\n results.push(key);\n }\n }\n\n return results;\n }\n\n private deleteFallback(key: string, namespace: string): boolean {\n const ns = this.fallbackStore.get(namespace);\n if (!ns) return false;\n return ns.delete(key);\n }\n\n private listFallback(namespace: string): string[] {\n const ns = this.fallbackStore.get(namespace);\n if (!ns) return [];\n\n const now = Date.now();\n const keys: string[] = [];\n\n for (const [key, entry] of ns) {\n // Skip expired entries\n if (entry.expiresAt && now > entry.expiresAt) {\n ns.delete(key);\n continue;\n }\n keys.push(key);\n }\n\n return keys;\n }\n}\n\n/**\n * Create a configured MCP client adapter\n */\nexport function createMcpClientAdapter(config?: Partial<McpClientConfig>): McpClientAdapter {\n return new McpClientAdapter(config);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,cAAc,oBAAoB,CAAC"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
import { type RetryOptions } from '../utils/index.js';
|
|
10
10
|
import { type FileChange } from '../core/cache.js';
|
|
11
11
|
import { KnowledgeGraphDatabase } from '../core/database.js';
|
|
12
|
+
import { ClaudeFlowMemoryClient, type ClaudeFlowMemoryClientConfig } from '../mcp/clients/index.js';
|
|
12
13
|
/**
|
|
13
14
|
* Sync direction
|
|
14
15
|
*/
|
|
@@ -92,6 +93,8 @@ export interface VaultSyncOptions {
|
|
|
92
93
|
includeContent?: boolean;
|
|
93
94
|
/** Maximum content length to store */
|
|
94
95
|
maxContentLength?: number;
|
|
96
|
+
/** MCP client configuration */
|
|
97
|
+
mcpClientConfig?: Partial<ClaudeFlowMemoryClientConfig>;
|
|
95
98
|
}
|
|
96
99
|
/**
|
|
97
100
|
* Sync result for a single operation
|
|
@@ -152,6 +155,7 @@ export declare class VaultMemorySync {
|
|
|
152
155
|
private isSyncing;
|
|
153
156
|
private syncErrors;
|
|
154
157
|
private autoSyncTimer;
|
|
158
|
+
private mcpClient;
|
|
155
159
|
constructor(options: VaultSyncOptions);
|
|
156
160
|
/**
|
|
157
161
|
* Initialize the sync system with database
|
|
@@ -189,6 +193,14 @@ export declare class VaultMemorySync {
|
|
|
189
193
|
* Stop the sync system
|
|
190
194
|
*/
|
|
191
195
|
stop(): void;
|
|
196
|
+
/**
|
|
197
|
+
* Check if the claude-flow CLI is available
|
|
198
|
+
*/
|
|
199
|
+
isCliAvailable(): Promise<boolean>;
|
|
200
|
+
/**
|
|
201
|
+
* Get the MCP client for advanced usage
|
|
202
|
+
*/
|
|
203
|
+
getMcpClient(): ClaudeFlowMemoryClient;
|
|
192
204
|
private startAutoSync;
|
|
193
205
|
private nodeToMemoryEntry;
|
|
194
206
|
private extractSummary;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vault-sync.d.ts","sourceRoot":"","sources":["../../src/memory/vault-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAkC,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"vault-sync.d.ts","sourceRoot":"","sources":["../../src/memory/vault-sync.ts"],"names":[],"mappings":"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"}
|