@nanocollective/nanocoder 1.14.3 → 1.15.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/README.md +31 -1
- package/dist/ai-sdk-client.d.ts +22 -0
- package/dist/ai-sdk-client.d.ts.map +1 -0
- package/dist/ai-sdk-client.js +389 -0
- package/dist/ai-sdk-client.js.map +1 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +1 -1
- package/dist/app.js.map +1 -1
- package/dist/client-factory.d.ts.map +1 -1
- package/dist/client-factory.js +5 -5
- package/dist/client-factory.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/recommendations.js +1 -1
- package/dist/commands/recommendations.js.map +1 -1
- package/dist/commands/streaming.d.ts +3 -0
- package/dist/commands/streaming.d.ts.map +1 -0
- package/dist/commands/streaming.js +23 -0
- package/dist/commands/streaming.js.map +1 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +17 -3
- package/dist/commands.js.map +1 -1
- package/dist/components/assistant-message.d.ts +0 -1
- package/dist/components/assistant-message.d.ts.map +1 -1
- package/dist/components/assistant-message.js +70 -122
- package/dist/components/assistant-message.js.map +1 -1
- package/dist/components/thinking-indicator.js +1 -1
- package/dist/components/thinking-indicator.js.map +1 -1
- package/dist/components/user-input.d.ts.map +1 -1
- package/dist/components/user-input.js +135 -27
- package/dist/components/user-input.js.map +1 -1
- package/dist/components/user-message.d.ts.map +1 -1
- package/dist/components/user-message.js +34 -1
- package/dist/components/user-message.js.map +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/index.spec.d.ts +2 -0
- package/dist/config/index.spec.d.ts.map +1 -0
- package/dist/config/index.spec.js +99 -0
- package/dist/config/index.spec.js.map +1 -0
- package/dist/config/preferences.d.ts +2 -0
- package/dist/config/preferences.d.ts.map +1 -1
- package/dist/config/preferences.js +10 -0
- package/dist/config/preferences.js.map +1 -1
- package/dist/hooks/useAppInitialization.d.ts.map +1 -1
- package/dist/hooks/useAppInitialization.js +2 -1
- package/dist/hooks/useAppInitialization.js.map +1 -1
- package/dist/hooks/useChatHandler.d.ts +2 -0
- package/dist/hooks/useChatHandler.d.ts.map +1 -1
- package/dist/hooks/useChatHandler.js +59 -9
- package/dist/hooks/useChatHandler.js.map +1 -1
- package/dist/mcp/mcp-client.d.ts +20 -1
- package/dist/mcp/mcp-client.d.ts.map +1 -1
- package/dist/mcp/mcp-client.js +57 -0
- package/dist/mcp/mcp-client.js.map +1 -1
- package/dist/message-handler.d.ts.map +1 -1
- package/dist/message-handler.js +7 -2
- package/dist/message-handler.js.map +1 -1
- package/dist/tool-calling/index.d.ts +1 -1
- package/dist/tool-calling/index.d.ts.map +1 -1
- package/dist/tool-calling/index.js +1 -1
- package/dist/tool-calling/index.js.map +1 -1
- package/dist/tool-calling/json-parser.d.ts +19 -2
- package/dist/tool-calling/json-parser.d.ts.map +1 -1
- package/dist/tool-calling/json-parser.js +65 -28
- package/dist/tool-calling/json-parser.js.map +1 -1
- package/dist/tool-calling/json-parser.spec.d.ts +2 -0
- package/dist/tool-calling/json-parser.spec.d.ts.map +1 -0
- package/dist/tool-calling/json-parser.spec.js +518 -0
- package/dist/tool-calling/json-parser.spec.js.map +1 -0
- package/dist/tool-calling/tool-parser.d.ts +20 -0
- package/dist/tool-calling/tool-parser.d.ts.map +1 -0
- package/dist/tool-calling/tool-parser.js +58 -0
- package/dist/tool-calling/tool-parser.js.map +1 -0
- package/dist/tool-calling/tool-parser.spec.d.ts +2 -0
- package/dist/tool-calling/tool-parser.spec.d.ts.map +1 -0
- package/dist/tool-calling/tool-parser.spec.js +250 -0
- package/dist/tool-calling/tool-parser.spec.js.map +1 -0
- package/dist/tool-calling/xml-parser.d.ts +17 -0
- package/dist/tool-calling/xml-parser.d.ts.map +1 -1
- package/dist/tool-calling/xml-parser.js +101 -13
- package/dist/tool-calling/xml-parser.js.map +1 -1
- package/dist/tool-calling/xml-parser.spec.d.ts +2 -0
- package/dist/tool-calling/xml-parser.spec.d.ts.map +1 -0
- package/dist/tool-calling/xml-parser.spec.js +437 -0
- package/dist/tool-calling/xml-parser.spec.js.map +1 -0
- package/dist/tools/create-file.d.ts.map +1 -1
- package/dist/tools/create-file.js +26 -23
- package/dist/tools/create-file.js.map +1 -1
- package/dist/tools/delete-lines.d.ts.map +1 -1
- package/dist/tools/delete-lines.js +29 -27
- package/dist/tools/delete-lines.js.map +1 -1
- package/dist/tools/execute-bash.d.ts.map +1 -1
- package/dist/tools/execute-bash.js +21 -19
- package/dist/tools/execute-bash.js.map +1 -1
- package/dist/tools/fetch-url.d.ts.map +1 -1
- package/dist/tools/fetch-url.js +21 -19
- package/dist/tools/fetch-url.js.map +1 -1
- package/dist/tools/index.d.ts +2 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +8 -6
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/insert-lines.d.ts.map +1 -1
- package/dist/tools/insert-lines.js +29 -27
- package/dist/tools/insert-lines.js.map +1 -1
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +23 -19
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/read-many-files.d.ts.map +1 -1
- package/dist/tools/read-many-files.js +24 -20
- package/dist/tools/read-many-files.js.map +1 -1
- package/dist/tools/replace-lines.d.ts.map +1 -1
- package/dist/tools/replace-lines.js +33 -31
- package/dist/tools/replace-lines.js.map +1 -1
- package/dist/tools/search-files.d.ts.map +1 -1
- package/dist/tools/search-files.js +33 -31
- package/dist/tools/search-files.js.map +1 -1
- package/dist/tools/tool-manager.d.ts +35 -19
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +63 -33
- package/dist/tools/tool-manager.js.map +1 -1
- package/dist/tools/tool-registry.d.ts +121 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +195 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +25 -23
- package/dist/tools/web-search.js.map +1 -1
- package/dist/types/config.d.ts +2 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/core.d.ts +58 -3
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/core.js +2 -0
- package/dist/types/core.js.map +1 -1
- package/dist/utils/file-autocomplete.d.ts +31 -0
- package/dist/utils/file-autocomplete.d.ts.map +1 -0
- package/dist/utils/file-autocomplete.js +156 -0
- package/dist/utils/file-autocomplete.js.map +1 -0
- package/dist/utils/file-autocomplete.spec.d.ts +2 -0
- package/dist/utils/file-autocomplete.spec.d.ts.map +1 -0
- package/dist/utils/file-autocomplete.spec.js +142 -0
- package/dist/utils/file-autocomplete.spec.js.map +1 -0
- package/dist/utils/file-content-loader.d.ts +31 -0
- package/dist/utils/file-content-loader.d.ts.map +1 -0
- package/dist/utils/file-content-loader.js +142 -0
- package/dist/utils/file-content-loader.js.map +1 -0
- package/dist/utils/file-content-loader.spec.d.ts +2 -0
- package/dist/utils/file-content-loader.spec.d.ts.map +1 -0
- package/dist/utils/file-content-loader.spec.js +140 -0
- package/dist/utils/file-content-loader.spec.js.map +1 -0
- package/dist/utils/file-mention-handler.d.ts +21 -0
- package/dist/utils/file-mention-handler.d.ts.map +1 -0
- package/dist/utils/file-mention-handler.js +59 -0
- package/dist/utils/file-mention-handler.js.map +1 -0
- package/dist/utils/file-mention-handler.spec.d.ts +2 -0
- package/dist/utils/file-mention-handler.spec.d.ts.map +1 -0
- package/dist/utils/file-mention-handler.spec.js +147 -0
- package/dist/utils/file-mention-handler.spec.js.map +1 -0
- package/dist/utils/file-mention-parser.d.ts +40 -0
- package/dist/utils/file-mention-parser.d.ts.map +1 -0
- package/dist/utils/file-mention-parser.js +122 -0
- package/dist/utils/file-mention-parser.js.map +1 -0
- package/dist/utils/file-mention-parser.spec.d.ts +2 -0
- package/dist/utils/file-mention-parser.spec.d.ts.map +1 -0
- package/dist/utils/file-mention-parser.spec.js +149 -0
- package/dist/utils/file-mention-parser.spec.js.map +1 -0
- package/dist/utils/fuzzy-matching.d.ts +13 -0
- package/dist/utils/fuzzy-matching.d.ts.map +1 -0
- package/dist/utils/fuzzy-matching.js +127 -0
- package/dist/utils/fuzzy-matching.js.map +1 -0
- package/dist/utils/fuzzy-matching.spec.d.ts +2 -0
- package/dist/utils/fuzzy-matching.spec.d.ts.map +1 -0
- package/dist/utils/fuzzy-matching.spec.js +123 -0
- package/dist/utils/fuzzy-matching.spec.js.map +1 -0
- package/dist/utils/prompt-assembly.spec.js +100 -2
- package/dist/utils/prompt-assembly.spec.js.map +1 -1
- package/dist/utils/prompt-processor.d.ts +2 -2
- package/dist/utils/prompt-processor.d.ts.map +1 -1
- package/dist/utils/prompt-processor.js +24 -41
- package/dist/utils/prompt-processor.js.map +1 -1
- package/package.json +8 -5
- package/dist/langgraph-client.d.ts +0 -19
- package/dist/langgraph-client.d.ts.map +0 -1
- package/dist/langgraph-client.js +0 -295
- package/dist/langgraph-client.js.map +0 -1
- package/dist/mcp/mcp-tool-adapter.d.ts +0 -22
- package/dist/mcp/mcp-tool-adapter.d.ts.map +0 -1
- package/dist/mcp/mcp-tool-adapter.js +0 -50
- package/dist/mcp/mcp-tool-adapter.js.map +0 -1
|
@@ -1,72 +1,80 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { toolRegistry as staticToolRegistry, toolFormatters as staticToolFormatters, toolValidators as staticToolValidators, nativeToolsRegistry as staticNativeToolsRegistry, } from '../tools/index.js';
|
|
2
2
|
import { MCPClient } from '../mcp/mcp-client.js';
|
|
3
|
-
import {
|
|
3
|
+
import { ToolRegistry } from '../tools/tool-registry.js';
|
|
4
4
|
/**
|
|
5
5
|
* Manages both static tools and dynamic MCP tools
|
|
6
|
+
* All tools are stored in unified ToolEntry format via ToolRegistry
|
|
6
7
|
*/
|
|
7
8
|
export class ToolManager {
|
|
9
|
+
/**
|
|
10
|
+
* Unified tool registry using ToolRegistry helper class
|
|
11
|
+
*/
|
|
12
|
+
registry;
|
|
13
|
+
/**
|
|
14
|
+
* MCP client for dynamic tool discovery and execution
|
|
15
|
+
*/
|
|
8
16
|
mcpClient = null;
|
|
9
|
-
mcpAdapter = null;
|
|
10
|
-
toolRegistry = {};
|
|
11
|
-
toolFormatters = {};
|
|
12
|
-
toolValidators = {};
|
|
13
|
-
allTools = [];
|
|
14
17
|
constructor() {
|
|
15
|
-
// Initialize with static tools
|
|
16
|
-
this.
|
|
17
|
-
this.toolFormatters = { ...staticToolFormatters };
|
|
18
|
-
this.toolValidators = { ...staticToolValidators };
|
|
19
|
-
this.allTools = [...staticTools];
|
|
18
|
+
// Initialize with static tools using ToolRegistry factory method
|
|
19
|
+
this.registry = ToolRegistry.fromRegistries(staticToolRegistry, staticNativeToolsRegistry, staticToolFormatters, staticToolValidators);
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Initialize MCP servers and register their tools
|
|
23
|
+
*/
|
|
21
24
|
async initializeMCP(servers, onProgress) {
|
|
22
25
|
if (servers && servers.length > 0) {
|
|
23
26
|
this.mcpClient = new MCPClient();
|
|
24
|
-
this.mcpAdapter = new MCPToolAdapter(this.mcpClient);
|
|
25
27
|
const results = await this.mcpClient.connectToServers(servers, onProgress);
|
|
26
|
-
// Register MCP tools
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
this.allTools = [...staticTools, ...mcpTools];
|
|
28
|
+
// Register MCP tools using ToolRegistry
|
|
29
|
+
// getToolEntries() returns structured ToolEntry objects
|
|
30
|
+
const mcpToolEntries = this.mcpClient.getToolEntries();
|
|
31
|
+
this.registry.registerMany(mcpToolEntries);
|
|
31
32
|
return results;
|
|
32
33
|
}
|
|
33
34
|
return [];
|
|
34
35
|
}
|
|
35
36
|
/**
|
|
36
|
-
* Get all available tools (static + MCP)
|
|
37
|
+
* Get all available native AI SDK tools (static + MCP)
|
|
37
38
|
*/
|
|
38
39
|
getAllTools() {
|
|
39
|
-
return this.
|
|
40
|
+
return this.registry.getNativeTools();
|
|
40
41
|
}
|
|
41
42
|
/**
|
|
42
|
-
* Get
|
|
43
|
+
* Get all tool handlers
|
|
43
44
|
*/
|
|
44
45
|
getToolRegistry() {
|
|
45
|
-
return this.
|
|
46
|
+
return this.registry.getHandlers();
|
|
46
47
|
}
|
|
47
48
|
/**
|
|
48
49
|
* Get a specific tool handler
|
|
49
50
|
*/
|
|
50
51
|
getToolHandler(toolName) {
|
|
51
|
-
return this.
|
|
52
|
+
return this.registry.getHandler(toolName);
|
|
52
53
|
}
|
|
53
54
|
/**
|
|
54
55
|
* Get a specific tool formatter
|
|
55
56
|
*/
|
|
56
57
|
getToolFormatter(toolName) {
|
|
57
|
-
return this.
|
|
58
|
+
return this.registry.getFormatter(toolName);
|
|
58
59
|
}
|
|
59
60
|
/**
|
|
60
61
|
* Get a specific tool validator
|
|
61
62
|
*/
|
|
62
63
|
getToolValidator(toolName) {
|
|
63
|
-
return this.
|
|
64
|
+
return this.registry.getValidator(toolName);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get native AI SDK tools registry
|
|
68
|
+
* @deprecated Use getAllTools() instead - they now return the same thing
|
|
69
|
+
*/
|
|
70
|
+
getNativeToolsRegistry() {
|
|
71
|
+
return this.registry.getNativeTools();
|
|
64
72
|
}
|
|
65
73
|
/**
|
|
66
74
|
* Check if a tool exists
|
|
67
75
|
*/
|
|
68
76
|
hasTool(toolName) {
|
|
69
|
-
return
|
|
77
|
+
return this.registry.hasTool(toolName);
|
|
70
78
|
}
|
|
71
79
|
/**
|
|
72
80
|
* Check if a tool is an MCP tool and get server info
|
|
@@ -86,20 +94,42 @@ export class ToolManager {
|
|
|
86
94
|
return { isMCPTool: false };
|
|
87
95
|
}
|
|
88
96
|
/**
|
|
89
|
-
* Disconnect MCP servers
|
|
97
|
+
* Disconnect from MCP servers and remove their tools
|
|
90
98
|
*/
|
|
91
99
|
async disconnectMCP() {
|
|
92
|
-
if (this.mcpClient
|
|
93
|
-
//
|
|
94
|
-
this.
|
|
100
|
+
if (this.mcpClient) {
|
|
101
|
+
// Get list of MCP tool names
|
|
102
|
+
const mcpTools = this.mcpClient.getNativeToolsRegistry();
|
|
103
|
+
const mcpToolNames = Object.keys(mcpTools);
|
|
104
|
+
// Remove all MCP tools from registry in one operation
|
|
105
|
+
this.registry.unregisterMany(mcpToolNames);
|
|
95
106
|
// Disconnect from servers
|
|
96
107
|
await this.mcpClient.disconnect();
|
|
97
|
-
// Reset to static tools
|
|
98
|
-
this.
|
|
108
|
+
// Reset registry to only static tools
|
|
109
|
+
this.registry = ToolRegistry.fromRegistries(staticToolRegistry, staticNativeToolsRegistry, staticToolFormatters, staticToolValidators);
|
|
99
110
|
this.mcpClient = null;
|
|
100
|
-
this.mcpAdapter = null;
|
|
101
111
|
}
|
|
102
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* Get a complete tool entry (all metadata)
|
|
115
|
+
*
|
|
116
|
+
* Returns the full ToolEntry with all components (tool, handler, formatter, validator)
|
|
117
|
+
*/
|
|
118
|
+
getToolEntry(toolName) {
|
|
119
|
+
return this.registry.getEntry(toolName);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get all registered tool names
|
|
123
|
+
*/
|
|
124
|
+
getToolNames() {
|
|
125
|
+
return this.registry.getToolNames();
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get total number of registered tools
|
|
129
|
+
*/
|
|
130
|
+
getToolCount() {
|
|
131
|
+
return this.registry.getToolCount();
|
|
132
|
+
}
|
|
103
133
|
/**
|
|
104
134
|
* Get connected MCP servers
|
|
105
135
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-manager.js","sourceRoot":"","sources":["../../source/tools/tool-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool-manager.js","sourceRoot":"","sources":["../../source/tools/tool-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { ToolEntry, ToolHandler, ToolFormatter, ToolValidator, AISDKCoreTool } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Helper class to encapsulate tool registry management
|
|
4
|
+
*
|
|
5
|
+
* This class provides structured access to tool metadata and eliminates
|
|
6
|
+
* the need to manage multiple separate registries manually.
|
|
7
|
+
*
|
|
8
|
+
* Benefits:
|
|
9
|
+
* - Single source of truth for all tool metadata
|
|
10
|
+
* - Type-safe access to tool components
|
|
11
|
+
* - Cleaner API for tool registration and lookup
|
|
12
|
+
* - Easier to extend with future metadata
|
|
13
|
+
*/
|
|
14
|
+
export declare class ToolRegistry {
|
|
15
|
+
private tools;
|
|
16
|
+
/**
|
|
17
|
+
* Register a complete tool entry
|
|
18
|
+
* @param entry - The ToolEntry containing all tool metadata
|
|
19
|
+
*/
|
|
20
|
+
register(entry: ToolEntry): void;
|
|
21
|
+
/**
|
|
22
|
+
* Register multiple tool entries at once
|
|
23
|
+
* @param entries - Array of ToolEntry objects
|
|
24
|
+
*/
|
|
25
|
+
registerMany(entries: ToolEntry[]): void;
|
|
26
|
+
/**
|
|
27
|
+
* Unregister a tool by name
|
|
28
|
+
* @param name - The tool name
|
|
29
|
+
*/
|
|
30
|
+
unregister(name: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* Unregister multiple tools by name
|
|
33
|
+
* @param names - Array of tool names
|
|
34
|
+
*/
|
|
35
|
+
unregisterMany(names: string[]): void;
|
|
36
|
+
/**
|
|
37
|
+
* Get a complete tool entry by name
|
|
38
|
+
* @param name - The tool name
|
|
39
|
+
* @returns The ToolEntry or undefined if not found
|
|
40
|
+
*/
|
|
41
|
+
getEntry(name: string): ToolEntry | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Get a tool handler by name
|
|
44
|
+
* @param name - The tool name
|
|
45
|
+
* @returns The ToolHandler or undefined if not found
|
|
46
|
+
*/
|
|
47
|
+
getHandler(name: string): ToolHandler | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Get a tool formatter by name
|
|
50
|
+
* @param name - The tool name
|
|
51
|
+
* @returns The ToolFormatter or undefined if not found
|
|
52
|
+
*/
|
|
53
|
+
getFormatter(name: string): ToolFormatter | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* Get a tool validator by name
|
|
56
|
+
* @param name - The tool name
|
|
57
|
+
* @returns The ToolValidator or undefined if not found
|
|
58
|
+
*/
|
|
59
|
+
getValidator(name: string): ToolValidator | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Get the native AI SDK tool by name
|
|
62
|
+
* @param name - The tool name
|
|
63
|
+
* @returns The AISDKCoreTool or undefined if not found
|
|
64
|
+
*/
|
|
65
|
+
getTool(name: string): AISDKCoreTool | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Get all handler entries as a record (compatible with old API)
|
|
68
|
+
* @returns Record mapping tool names to handlers
|
|
69
|
+
*/
|
|
70
|
+
getHandlers(): Record<string, ToolHandler>;
|
|
71
|
+
/**
|
|
72
|
+
* Get all formatter entries as a record (compatible with old API)
|
|
73
|
+
* @returns Record mapping tool names to formatters
|
|
74
|
+
*/
|
|
75
|
+
getFormatters(): Record<string, ToolFormatter>;
|
|
76
|
+
/**
|
|
77
|
+
* Get all validator entries as a record (compatible with old API)
|
|
78
|
+
* @returns Record mapping tool names to validators
|
|
79
|
+
*/
|
|
80
|
+
getValidators(): Record<string, ToolValidator>;
|
|
81
|
+
/**
|
|
82
|
+
* Get all native AI SDK tools as a record (compatible with old API)
|
|
83
|
+
* @returns Record mapping tool names to AISDKCoreTool objects
|
|
84
|
+
*/
|
|
85
|
+
getNativeTools(): Record<string, AISDKCoreTool>;
|
|
86
|
+
/**
|
|
87
|
+
* Get all tool entries
|
|
88
|
+
* @returns Array of all ToolEntry objects
|
|
89
|
+
*/
|
|
90
|
+
getAllEntries(): ToolEntry[];
|
|
91
|
+
/**
|
|
92
|
+
* Get all tool names
|
|
93
|
+
* @returns Array of all registered tool names
|
|
94
|
+
*/
|
|
95
|
+
getToolNames(): string[];
|
|
96
|
+
/**
|
|
97
|
+
* Check if a tool is registered
|
|
98
|
+
* @param name - The tool name
|
|
99
|
+
* @returns True if the tool exists, false otherwise
|
|
100
|
+
*/
|
|
101
|
+
hasTool(name: string): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Get the number of registered tools
|
|
104
|
+
* @returns The count of registered tools
|
|
105
|
+
*/
|
|
106
|
+
getToolCount(): number;
|
|
107
|
+
/**
|
|
108
|
+
* Clear all registered tools
|
|
109
|
+
*/
|
|
110
|
+
clear(): void;
|
|
111
|
+
/**
|
|
112
|
+
* Create a new registry from static registries (backward compatibility helper)
|
|
113
|
+
* @param handlers - Record of tool handlers
|
|
114
|
+
* @param tools - Record of native AI SDK tools
|
|
115
|
+
* @param formatters - Optional record of tool formatters
|
|
116
|
+
* @param validators - Optional record of tool validators
|
|
117
|
+
* @returns New ToolRegistry instance
|
|
118
|
+
*/
|
|
119
|
+
static fromRegistries(handlers: Record<string, ToolHandler>, tools: Record<string, AISDKCoreTool>, formatters?: Record<string, ToolFormatter>, validators?: Record<string, ToolValidator>): ToolRegistry;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=tool-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../source/tools/tool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,WAAW,EACX,aAAa,EACb,aAAa,EACb,aAAa,EACb,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;;;GAWG;AACH,qBAAa,YAAY;IACxB,OAAO,CAAC,KAAK,CAAqC;IAElD;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAIhC;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;IAMxC;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAMrC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI7C;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIjD;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIrD;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIrD;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIhD;;;OAGG;IACH,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;IAQ1C;;;OAGG;IACH,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAU9C;;;OAGG;IACH,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAU9C;;;OAGG;IACH,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAQ/C;;;OAGG;IACH,aAAa,IAAI,SAAS,EAAE;IAI5B;;;OAGG;IACH,YAAY,IAAI,MAAM,EAAE;IAIxB;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B;;;OAGG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;;;;OAOG;IACH,MAAM,CAAC,cAAc,CACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACrC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACpC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAC1C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GACxC,YAAY;CAkBf"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper class to encapsulate tool registry management
|
|
3
|
+
*
|
|
4
|
+
* This class provides structured access to tool metadata and eliminates
|
|
5
|
+
* the need to manage multiple separate registries manually.
|
|
6
|
+
*
|
|
7
|
+
* Benefits:
|
|
8
|
+
* - Single source of truth for all tool metadata
|
|
9
|
+
* - Type-safe access to tool components
|
|
10
|
+
* - Cleaner API for tool registration and lookup
|
|
11
|
+
* - Easier to extend with future metadata
|
|
12
|
+
*/
|
|
13
|
+
export class ToolRegistry {
|
|
14
|
+
tools = new Map();
|
|
15
|
+
/**
|
|
16
|
+
* Register a complete tool entry
|
|
17
|
+
* @param entry - The ToolEntry containing all tool metadata
|
|
18
|
+
*/
|
|
19
|
+
register(entry) {
|
|
20
|
+
this.tools.set(entry.name, entry);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Register multiple tool entries at once
|
|
24
|
+
* @param entries - Array of ToolEntry objects
|
|
25
|
+
*/
|
|
26
|
+
registerMany(entries) {
|
|
27
|
+
for (const entry of entries) {
|
|
28
|
+
this.register(entry);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Unregister a tool by name
|
|
33
|
+
* @param name - The tool name
|
|
34
|
+
*/
|
|
35
|
+
unregister(name) {
|
|
36
|
+
this.tools.delete(name);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Unregister multiple tools by name
|
|
40
|
+
* @param names - Array of tool names
|
|
41
|
+
*/
|
|
42
|
+
unregisterMany(names) {
|
|
43
|
+
for (const name of names) {
|
|
44
|
+
this.unregister(name);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get a complete tool entry by name
|
|
49
|
+
* @param name - The tool name
|
|
50
|
+
* @returns The ToolEntry or undefined if not found
|
|
51
|
+
*/
|
|
52
|
+
getEntry(name) {
|
|
53
|
+
return this.tools.get(name);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get a tool handler by name
|
|
57
|
+
* @param name - The tool name
|
|
58
|
+
* @returns The ToolHandler or undefined if not found
|
|
59
|
+
*/
|
|
60
|
+
getHandler(name) {
|
|
61
|
+
return this.tools.get(name)?.handler;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get a tool formatter by name
|
|
65
|
+
* @param name - The tool name
|
|
66
|
+
* @returns The ToolFormatter or undefined if not found
|
|
67
|
+
*/
|
|
68
|
+
getFormatter(name) {
|
|
69
|
+
return this.tools.get(name)?.formatter;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get a tool validator by name
|
|
73
|
+
* @param name - The tool name
|
|
74
|
+
* @returns The ToolValidator or undefined if not found
|
|
75
|
+
*/
|
|
76
|
+
getValidator(name) {
|
|
77
|
+
return this.tools.get(name)?.validator;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get the native AI SDK tool by name
|
|
81
|
+
* @param name - The tool name
|
|
82
|
+
* @returns The AISDKCoreTool or undefined if not found
|
|
83
|
+
*/
|
|
84
|
+
getTool(name) {
|
|
85
|
+
return this.tools.get(name)?.tool;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get all handler entries as a record (compatible with old API)
|
|
89
|
+
* @returns Record mapping tool names to handlers
|
|
90
|
+
*/
|
|
91
|
+
getHandlers() {
|
|
92
|
+
const handlers = {};
|
|
93
|
+
for (const [name, entry] of this.tools) {
|
|
94
|
+
handlers[name] = entry.handler;
|
|
95
|
+
}
|
|
96
|
+
return handlers;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get all formatter entries as a record (compatible with old API)
|
|
100
|
+
* @returns Record mapping tool names to formatters
|
|
101
|
+
*/
|
|
102
|
+
getFormatters() {
|
|
103
|
+
const formatters = {};
|
|
104
|
+
for (const [name, entry] of this.tools) {
|
|
105
|
+
if (entry.formatter) {
|
|
106
|
+
formatters[name] = entry.formatter;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return formatters;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get all validator entries as a record (compatible with old API)
|
|
113
|
+
* @returns Record mapping tool names to validators
|
|
114
|
+
*/
|
|
115
|
+
getValidators() {
|
|
116
|
+
const validators = {};
|
|
117
|
+
for (const [name, entry] of this.tools) {
|
|
118
|
+
if (entry.validator) {
|
|
119
|
+
validators[name] = entry.validator;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return validators;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get all native AI SDK tools as a record (compatible with old API)
|
|
126
|
+
* @returns Record mapping tool names to AISDKCoreTool objects
|
|
127
|
+
*/
|
|
128
|
+
getNativeTools() {
|
|
129
|
+
const nativeTools = {};
|
|
130
|
+
for (const [name, entry] of this.tools) {
|
|
131
|
+
nativeTools[name] = entry.tool;
|
|
132
|
+
}
|
|
133
|
+
return nativeTools;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get all tool entries
|
|
137
|
+
* @returns Array of all ToolEntry objects
|
|
138
|
+
*/
|
|
139
|
+
getAllEntries() {
|
|
140
|
+
return Array.from(this.tools.values());
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get all tool names
|
|
144
|
+
* @returns Array of all registered tool names
|
|
145
|
+
*/
|
|
146
|
+
getToolNames() {
|
|
147
|
+
return Array.from(this.tools.keys());
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Check if a tool is registered
|
|
151
|
+
* @param name - The tool name
|
|
152
|
+
* @returns True if the tool exists, false otherwise
|
|
153
|
+
*/
|
|
154
|
+
hasTool(name) {
|
|
155
|
+
return this.tools.has(name);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get the number of registered tools
|
|
159
|
+
* @returns The count of registered tools
|
|
160
|
+
*/
|
|
161
|
+
getToolCount() {
|
|
162
|
+
return this.tools.size;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Clear all registered tools
|
|
166
|
+
*/
|
|
167
|
+
clear() {
|
|
168
|
+
this.tools.clear();
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Create a new registry from static registries (backward compatibility helper)
|
|
172
|
+
* @param handlers - Record of tool handlers
|
|
173
|
+
* @param tools - Record of native AI SDK tools
|
|
174
|
+
* @param formatters - Optional record of tool formatters
|
|
175
|
+
* @param validators - Optional record of tool validators
|
|
176
|
+
* @returns New ToolRegistry instance
|
|
177
|
+
*/
|
|
178
|
+
static fromRegistries(handlers, tools, formatters, validators) {
|
|
179
|
+
const registry = new ToolRegistry();
|
|
180
|
+
for (const [name, handler] of Object.entries(handlers)) {
|
|
181
|
+
const tool = tools[name];
|
|
182
|
+
if (tool) {
|
|
183
|
+
registry.register({
|
|
184
|
+
name,
|
|
185
|
+
handler,
|
|
186
|
+
tool,
|
|
187
|
+
formatter: formatters?.[name],
|
|
188
|
+
validator: validators?.[name],
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return registry;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=tool-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../source/tools/tool-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-search.d.ts","sourceRoot":"","sources":["../../source/tools/web-search.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"web-search.d.ts","sourceRoot":"","sources":["../../source/tools/web-search.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC;AAyMlD,eAAO,MAAM,aAAa,EAAE,cAO3B,CAAC"}
|
package/dist/tools/web-search.js
CHANGED
|
@@ -3,9 +3,10 @@ import { fetch } from 'undici';
|
|
|
3
3
|
import * as cheerio from 'cheerio';
|
|
4
4
|
import React from 'react';
|
|
5
5
|
import { Text, Box } from 'ink';
|
|
6
|
+
import { tool, jsonSchema } from '../types/core.js';
|
|
6
7
|
import { ThemeContext } from '../hooks/useTheme.js';
|
|
7
8
|
import ToolMessage from '../components/tool-message.js';
|
|
8
|
-
const
|
|
9
|
+
const executeWebSearch = async (args) => {
|
|
9
10
|
const maxResults = args.max_results ?? 10;
|
|
10
11
|
const encodedQuery = encodeURIComponent(args.query);
|
|
11
12
|
try {
|
|
@@ -67,6 +68,25 @@ const handler = async (args) => {
|
|
|
67
68
|
throw new Error(`Web search failed: ${errorMessage}`);
|
|
68
69
|
}
|
|
69
70
|
};
|
|
71
|
+
// AI SDK tool definition
|
|
72
|
+
const webSearchCoreTool = tool({
|
|
73
|
+
description: 'Search the web for information (scrapes Brave Search, returns markdown)',
|
|
74
|
+
inputSchema: jsonSchema({
|
|
75
|
+
type: 'object',
|
|
76
|
+
properties: {
|
|
77
|
+
query: {
|
|
78
|
+
type: 'string',
|
|
79
|
+
description: 'The search query.',
|
|
80
|
+
},
|
|
81
|
+
max_results: {
|
|
82
|
+
type: 'number',
|
|
83
|
+
description: 'Maximum number of search results to return (default: 10).',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
required: ['query'],
|
|
87
|
+
}),
|
|
88
|
+
// NO execute function - prevents AI SDK auto-execution
|
|
89
|
+
});
|
|
70
90
|
// Create a component that will re-render when theme changes
|
|
71
91
|
const WebSearchFormatter = React.memo(({ args, result }) => {
|
|
72
92
|
const themeContext = React.useContext(ThemeContext);
|
|
@@ -108,31 +128,13 @@ const validator = (args) => {
|
|
|
108
128
|
}
|
|
109
129
|
return Promise.resolve({ valid: true });
|
|
110
130
|
};
|
|
131
|
+
// Nanocoder tool definition with AI SDK core tool + custom extensions
|
|
111
132
|
export const webSearchTool = {
|
|
112
|
-
|
|
133
|
+
name: 'web_search',
|
|
134
|
+
tool: webSearchCoreTool, // Native AI SDK tool (no execute)
|
|
135
|
+
handler: executeWebSearch,
|
|
113
136
|
formatter,
|
|
114
137
|
validator,
|
|
115
138
|
requiresConfirmation: false,
|
|
116
|
-
config: {
|
|
117
|
-
type: 'function',
|
|
118
|
-
function: {
|
|
119
|
-
name: 'web_search',
|
|
120
|
-
description: 'Search the web using Brave Search and return relevant results with URLs, titles, and descriptions. Use this to find up-to-date information, documentation, or answers to questions that require. Use in conjuction with the `fetch_url` tool to get page information on search results.',
|
|
121
|
-
parameters: {
|
|
122
|
-
type: 'object',
|
|
123
|
-
properties: {
|
|
124
|
-
query: {
|
|
125
|
-
type: 'string',
|
|
126
|
-
description: 'The search query to look up on the web.',
|
|
127
|
-
},
|
|
128
|
-
max_results: {
|
|
129
|
-
type: 'number',
|
|
130
|
-
description: 'Maximum number of results to return (default: 10, max: 20).',
|
|
131
|
-
},
|
|
132
|
-
},
|
|
133
|
-
required: ['query'],
|
|
134
|
-
},
|
|
135
|
-
},
|
|
136
|
-
},
|
|
137
139
|
};
|
|
138
140
|
//# sourceMappingURL=web-search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-search.js","sourceRoot":"","sources":["../../source/tools/web-search.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,QAAQ,CAAC;AAC7B,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,IAAI,EAAE,GAAG,EAAC,MAAM,KAAK,CAAC;AAE9B,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAC9C,OAAO,WAAW,MAAM,2BAA2B,CAAC;AAapD,MAAM,
|
|
1
|
+
{"version":3,"file":"web-search.js","sourceRoot":"","sources":["../../source/tools/web-search.tsx"],"names":[],"mappings":"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"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ThemePreset } from '../types/ui.js';
|
|
2
|
-
export interface
|
|
2
|
+
export interface AIProviderConfig {
|
|
3
3
|
name: string;
|
|
4
4
|
type: string;
|
|
5
5
|
models: string[];
|
|
@@ -60,5 +60,6 @@ export interface UserPreferences {
|
|
|
60
60
|
lastUpdateCheck?: number;
|
|
61
61
|
selectedTheme?: ThemePreset;
|
|
62
62
|
trustedDirectories?: string[];
|
|
63
|
+
streamingEnabled?: boolean;
|
|
63
64
|
}
|
|
64
65
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../source/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAG5C,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../source/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAG5C,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,wBAAwB,CAAC,EAAE,MAAM,CAAC;KAClC,CAAC;IACF,MAAM,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACvB,CAAC;CACF;AAGD,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,wBAAwB,CAAC,EAAE,MAAM,CAAC;KAClC,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IAEzB,SAAS,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,cAAc,CAAC,EAAE;YAChB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,wBAAwB,CAAC,EAAE,MAAM,CAAC;SAClC,CAAC;QACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACvB,EAAE,CAAC;IAEJ,UAAU,CAAC,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC7B,EAAE,CAAC;CACJ;AAED,MAAM,WAAW,eAAe;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE;SACf,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM;KACxB,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC3B"}
|