@nanocollective/nanocoder 1.14.3 → 1.15.0
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 +25 -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 +385 -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/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 +7 -4
- 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
|
@@ -96,7 +96,7 @@ export function processPromptTemplate(tools) {
|
|
|
96
96
|
* Inject dynamic tool documentation into the prompt template
|
|
97
97
|
*/
|
|
98
98
|
function injectToolDocumentation(prompt, tools) {
|
|
99
|
-
if (tools.length === 0) {
|
|
99
|
+
if (Object.keys(tools).length === 0) {
|
|
100
100
|
return prompt.replace(/<!-- DYNAMIC_TOOLS_SECTION_START -->[\s\S]*?<!-- DYNAMIC_TOOLS_SECTION_END -->/, 'No additional tools are currently available.');
|
|
101
101
|
}
|
|
102
102
|
// Generate tool documentation
|
|
@@ -109,55 +109,34 @@ function injectToolDocumentation(prompt, tools) {
|
|
|
109
109
|
*/
|
|
110
110
|
function generateToolDocumentation(tools) {
|
|
111
111
|
const sections = ['Available Tools\n'];
|
|
112
|
+
// Convert tools record to array of [name, tool] entries
|
|
113
|
+
const toolEntries = Object.entries(tools);
|
|
112
114
|
// Group tools by category (built-in vs MCP)
|
|
113
|
-
const builtInTools =
|
|
114
|
-
const mcpTools =
|
|
115
|
+
const builtInTools = toolEntries.filter(([name]) => !name.includes('__'));
|
|
116
|
+
const mcpTools = toolEntries.filter(([name]) => name.includes('__'));
|
|
115
117
|
if (builtInTools.length > 0) {
|
|
116
118
|
sections.push('Built-in Tools:\n');
|
|
117
|
-
builtInTools.forEach(tool => {
|
|
118
|
-
sections.push(formatToolDocumentation(tool));
|
|
119
|
+
builtInTools.forEach(([name, tool]) => {
|
|
120
|
+
sections.push(formatToolDocumentation(name, tool));
|
|
119
121
|
});
|
|
120
122
|
}
|
|
121
123
|
if (mcpTools.length > 0) {
|
|
122
124
|
sections.push('\nMCP Tools:\n');
|
|
123
|
-
mcpTools.forEach(tool => {
|
|
124
|
-
sections.push(formatToolDocumentation(tool));
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
// Add XML format examples for all models
|
|
128
|
-
if (tools.length > 0) {
|
|
129
|
-
sections.push('\nXML Format Examples:\n');
|
|
130
|
-
// Show tool examples in XML format
|
|
131
|
-
tools.forEach(tool => {
|
|
132
|
-
const params = tool.function.parameters?.properties || {};
|
|
133
|
-
const paramNames = Object.keys(params).slice(0, 2); // Show max 2 params per example
|
|
134
|
-
sections.push(`${tool.function.name}:`);
|
|
135
|
-
sections.push('```xml');
|
|
136
|
-
sections.push(`<${tool.function.name}>`);
|
|
137
|
-
paramNames.forEach(paramName => {
|
|
138
|
-
sections.push(`<${paramName}>value</${paramName}>`);
|
|
139
|
-
});
|
|
140
|
-
sections.push(`</${tool.function.name}>`);
|
|
141
|
-
sections.push('```\n');
|
|
125
|
+
mcpTools.forEach(([name, tool]) => {
|
|
126
|
+
sections.push(formatToolDocumentation(name, tool));
|
|
142
127
|
});
|
|
143
128
|
}
|
|
129
|
+
// Note: XML format examples omitted since AI SDK tools don't expose parameter schemas
|
|
130
|
+
// The model will learn tool usage from function calling or from the system prompt
|
|
144
131
|
return sections.join('\n');
|
|
145
132
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
? ' (required)'
|
|
154
|
-
: ' (optional)';
|
|
155
|
-
const paramDescription = schema.description || schema.type || 'No description';
|
|
156
|
-
doc += `- ${paramName}${required}: ${paramDescription}\n`;
|
|
157
|
-
});
|
|
158
|
-
doc += '\n';
|
|
159
|
-
}
|
|
160
|
-
return doc;
|
|
133
|
+
/**
|
|
134
|
+
* Format documentation for a single tool
|
|
135
|
+
*/
|
|
136
|
+
function formatToolDocumentation(name, _tool) {
|
|
137
|
+
// AI SDK's Tool type doesn't expose description or parameters directly
|
|
138
|
+
// We just list the tool name - the model will learn from usage
|
|
139
|
+
return `${name}\n`;
|
|
161
140
|
}
|
|
162
141
|
/**
|
|
163
142
|
* Assemble the final prompt by replacing all placeholders with their full content
|
|
@@ -177,8 +156,12 @@ export function assemblePrompt(inputState) {
|
|
|
177
156
|
break;
|
|
178
157
|
}
|
|
179
158
|
case PlaceholderType.FILE: {
|
|
180
|
-
//
|
|
181
|
-
|
|
159
|
+
// Format file content with header for LLM context
|
|
160
|
+
const fileName = placeholderContent.filePath.split('/').pop() ||
|
|
161
|
+
placeholderContent.filePath;
|
|
162
|
+
const header = `=== File: ${fileName} ===`;
|
|
163
|
+
const footer = '='.repeat(header.length);
|
|
164
|
+
replacementContent = `${header}\n${placeholderContent.content}\n${footer}`;
|
|
182
165
|
break;
|
|
183
166
|
}
|
|
184
167
|
default: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-processor.js","sourceRoot":"","sources":["../../source/utils/prompt-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,UAAU,EAAC,MAAM,IAAI,CAAC;AAC5C,OAAO,EAAC,IAAI,EAAC,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAC,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAE/C;;GAEG;AACH,SAAS,eAAe;IACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IACnC,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,QAAQ,CAAC;IACjB,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt-processor.js","sourceRoot":"","sources":["../../source/utils/prompt-processor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nanocollective/nanocoder",
|
|
3
3
|
"main": "dist/cli.js",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.15.0",
|
|
5
5
|
"description": "A local-first CLI coding agent that brings the power of agentic coding tools like Claude Code and Gemini CLI to local models or controlled APIs like OpenRouter",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"cli",
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"ollama",
|
|
12
12
|
"openrouter",
|
|
13
13
|
"local",
|
|
14
|
-
"typescript"
|
|
14
|
+
"typescript",
|
|
15
|
+
"llama-cpp"
|
|
15
16
|
],
|
|
16
17
|
"author": "Nano Collective",
|
|
17
18
|
"license": "MIT",
|
|
@@ -34,6 +35,7 @@
|
|
|
34
35
|
"build": "tsc && tsc-alias && chmod +x dist/cli.js",
|
|
35
36
|
"dev": "tsc --watch",
|
|
36
37
|
"start": "node dist/cli.js",
|
|
38
|
+
"release:nix": "./scripts/update-nix-version.sh",
|
|
37
39
|
"test:all": "./scripts/test.sh",
|
|
38
40
|
"test:ava": "ava",
|
|
39
41
|
"test:ava:coverage": "c8 ava",
|
|
@@ -50,13 +52,14 @@
|
|
|
50
52
|
"source/app/prompts/main-prompt.md"
|
|
51
53
|
],
|
|
52
54
|
"dependencies": {
|
|
53
|
-
"@
|
|
54
|
-
"@langchain/openai": "^0.6.15",
|
|
55
|
+
"@ai-sdk/openai-compatible": "^1.0.24",
|
|
55
56
|
"@mishieck/ink-titled-box": "^0.3.0",
|
|
56
57
|
"@modelcontextprotocol/sdk": "^1.17.3",
|
|
57
58
|
"@nanocollective/get-md": "^1.0.1",
|
|
59
|
+
"ai": "^5.0.82",
|
|
58
60
|
"cheerio": "^1.1.2",
|
|
59
61
|
"cli-highlight": "^2.1.11",
|
|
62
|
+
"cli-table3": "^0.6.5",
|
|
60
63
|
"dotenv": "^17.2.3",
|
|
61
64
|
"ignore": "^7.0.5",
|
|
62
65
|
"ink": "^6.3.1",
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { Message, Tool, LLMClient, LangChainProviderConfig, LLMChatResponse } from './types/index.js';
|
|
2
|
-
export declare class LangGraphClient implements LLMClient {
|
|
3
|
-
private chatModel;
|
|
4
|
-
private currentModel;
|
|
5
|
-
private availableModels;
|
|
6
|
-
private providerConfig;
|
|
7
|
-
private modelInfoCache;
|
|
8
|
-
private undiciAgent;
|
|
9
|
-
constructor(providerConfig: LangChainProviderConfig);
|
|
10
|
-
static create(providerConfig: LangChainProviderConfig): Promise<LangGraphClient>;
|
|
11
|
-
private createChatModel;
|
|
12
|
-
setModel(model: string): void;
|
|
13
|
-
getCurrentModel(): string;
|
|
14
|
-
getContextSize(): number;
|
|
15
|
-
getAvailableModels(): Promise<string[]>;
|
|
16
|
-
chat(messages: Message[], tools: Tool[], signal?: AbortSignal): Promise<LLMChatResponse>;
|
|
17
|
-
clearContext(): Promise<void>;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=langgraph-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"langgraph-client.d.ts","sourceRoot":"","sources":["../source/langgraph-client.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACX,OAAO,EACP,IAAI,EACJ,SAAS,EACT,uBAAuB,EACvB,eAAe,EACf,MAAM,eAAe,CAAC;AAoJvB,qBAAa,eAAgB,YAAW,SAAS;IAChD,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,WAAW,CAAQ;gBAEf,cAAc,EAAE,uBAAuB;IA0BnD,MAAM,CAAC,MAAM,CACZ,cAAc,EAAE,uBAAuB,GACrC,OAAO,CAAC,eAAe,CAAC;IAK3B,OAAO,CAAC,eAAe;IA8CvB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,eAAe,IAAI,MAAM;IAIzB,cAAc,IAAI,MAAM;IA0BxB,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIjC,IAAI,CACT,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,eAAe,CAAC;IAoGrB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;CAGnC"}
|
package/dist/langgraph-client.js
DELETED
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
import { ChatOpenAI } from '@langchain/openai';
|
|
2
|
-
import { Agent, fetch } from 'undici';
|
|
3
|
-
import { AIMessage, HumanMessage, SystemMessage, ToolMessage, } from '@langchain/core/messages';
|
|
4
|
-
import { XMLToolCallParser } from './tool-calling/xml-parser.js';
|
|
5
|
-
/**
|
|
6
|
-
* Parses LangChain/API errors into user-friendly messages
|
|
7
|
-
*/
|
|
8
|
-
function parseAPIError(error) {
|
|
9
|
-
if (!(error instanceof Error)) {
|
|
10
|
-
return 'An unknown error occurred while communicating with the model';
|
|
11
|
-
}
|
|
12
|
-
const errorMessage = error.message;
|
|
13
|
-
// Extract status code and clean message from common error patterns
|
|
14
|
-
// Pattern: "400 400 Bad Request: message" or "Error: 400 message"
|
|
15
|
-
const statusMatch = errorMessage.match(/(?:Error: )?(\d{3})\s+(?:\d{3}\s+)?(?:Bad Request|[^:]+):\s*(.+)/i);
|
|
16
|
-
if (statusMatch) {
|
|
17
|
-
const [, statusCode, message] = statusMatch;
|
|
18
|
-
const cleanMessage = message.trim();
|
|
19
|
-
switch (statusCode) {
|
|
20
|
-
case '400':
|
|
21
|
-
return `Bad request: ${cleanMessage}`;
|
|
22
|
-
case '401':
|
|
23
|
-
return 'Authentication failed: Invalid API key or credentials';
|
|
24
|
-
case '403':
|
|
25
|
-
return 'Access forbidden: Check your API permissions';
|
|
26
|
-
case '404':
|
|
27
|
-
return 'Model not found: The requested model may not exist or is unavailable';
|
|
28
|
-
case '429':
|
|
29
|
-
return 'Rate limit exceeded: Too many requests. Please wait and try again';
|
|
30
|
-
case '500':
|
|
31
|
-
case '502':
|
|
32
|
-
case '503':
|
|
33
|
-
return `Server error: ${cleanMessage}`;
|
|
34
|
-
default:
|
|
35
|
-
return `Request failed (${statusCode}): ${cleanMessage}`;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
// Handle timeout errors
|
|
39
|
-
if (errorMessage.includes('timeout') || errorMessage.includes('ETIMEDOUT')) {
|
|
40
|
-
return 'Request timed out: The model took too long to respond';
|
|
41
|
-
}
|
|
42
|
-
// Handle network errors
|
|
43
|
-
if (errorMessage.includes('ECONNREFUSED') ||
|
|
44
|
-
errorMessage.includes('connect')) {
|
|
45
|
-
return 'Connection failed: Unable to reach the model server';
|
|
46
|
-
}
|
|
47
|
-
// Handle context length errors specifically
|
|
48
|
-
if (errorMessage.includes('context length') ||
|
|
49
|
-
errorMessage.includes('too many tokens')) {
|
|
50
|
-
return 'Context too large: Please reduce the conversation length or message size';
|
|
51
|
-
}
|
|
52
|
-
// Handle token limit errors
|
|
53
|
-
if (errorMessage.includes('reduce the number of tokens')) {
|
|
54
|
-
return 'Too many tokens: Please shorten your message or clear conversation history';
|
|
55
|
-
}
|
|
56
|
-
// If we can't parse it, return a cleaned up version
|
|
57
|
-
// Remove "Error: " prefix and any technical stack traces
|
|
58
|
-
return errorMessage.replace(/^Error:\s*/i, '').split('\n')[0];
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Converts our Message format to LangChain BaseMessage format
|
|
62
|
-
*/
|
|
63
|
-
function convertToLangChainMessage(message) {
|
|
64
|
-
switch (message.role) {
|
|
65
|
-
case 'user':
|
|
66
|
-
return new HumanMessage(message.content || '');
|
|
67
|
-
case 'system':
|
|
68
|
-
return new SystemMessage(message.content || '');
|
|
69
|
-
case 'assistant':
|
|
70
|
-
if (message.tool_calls && message.tool_calls.length > 0) {
|
|
71
|
-
return new AIMessage({
|
|
72
|
-
content: message.content || '',
|
|
73
|
-
tool_calls: message.tool_calls.map(tc => ({
|
|
74
|
-
id: tc.id,
|
|
75
|
-
name: tc.function.name,
|
|
76
|
-
args: tc.function.arguments,
|
|
77
|
-
})),
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
return new AIMessage(message.content || '');
|
|
81
|
-
case 'tool':
|
|
82
|
-
return new ToolMessage({
|
|
83
|
-
content: message.content || '',
|
|
84
|
-
tool_call_id: message.tool_call_id || '',
|
|
85
|
-
name: message.name || '',
|
|
86
|
-
});
|
|
87
|
-
default: {
|
|
88
|
-
const unknownMessage = message;
|
|
89
|
-
throw new Error(`Unsupported message role: ${unknownMessage.role}`);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Converts LangChain AIMessage back to our Message format
|
|
95
|
-
*/
|
|
96
|
-
function convertFromLangChainMessage(message) {
|
|
97
|
-
const result = {
|
|
98
|
-
role: 'assistant',
|
|
99
|
-
content: message.content,
|
|
100
|
-
};
|
|
101
|
-
if (message.tool_calls && message.tool_calls.length > 0) {
|
|
102
|
-
result.tool_calls = message.tool_calls.map(tc => ({
|
|
103
|
-
id: tc.id || '',
|
|
104
|
-
function: {
|
|
105
|
-
name: tc.name,
|
|
106
|
-
arguments: tc.args,
|
|
107
|
-
},
|
|
108
|
-
}));
|
|
109
|
-
}
|
|
110
|
-
return result;
|
|
111
|
-
}
|
|
112
|
-
export class LangGraphClient {
|
|
113
|
-
chatModel;
|
|
114
|
-
currentModel;
|
|
115
|
-
availableModels;
|
|
116
|
-
providerConfig;
|
|
117
|
-
modelInfoCache = new Map();
|
|
118
|
-
undiciAgent;
|
|
119
|
-
constructor(providerConfig) {
|
|
120
|
-
this.providerConfig = providerConfig;
|
|
121
|
-
this.availableModels = providerConfig.models;
|
|
122
|
-
this.currentModel = providerConfig.models[0] || '';
|
|
123
|
-
const { requestTimeout, socketTimeout, connectionPool } = this.providerConfig;
|
|
124
|
-
const resolvedSocketTimeout = socketTimeout === -1
|
|
125
|
-
? 0
|
|
126
|
-
: socketTimeout || requestTimeout === -1
|
|
127
|
-
? 0
|
|
128
|
-
: requestTimeout || 120000;
|
|
129
|
-
this.undiciAgent = new Agent({
|
|
130
|
-
connect: {
|
|
131
|
-
timeout: resolvedSocketTimeout,
|
|
132
|
-
},
|
|
133
|
-
bodyTimeout: resolvedSocketTimeout,
|
|
134
|
-
headersTimeout: resolvedSocketTimeout,
|
|
135
|
-
keepAliveTimeout: connectionPool?.idleTimeout,
|
|
136
|
-
keepAliveMaxTimeout: connectionPool?.cumulativeMaxIdleTimeout,
|
|
137
|
-
});
|
|
138
|
-
this.chatModel = this.createChatModel();
|
|
139
|
-
}
|
|
140
|
-
static create(providerConfig) {
|
|
141
|
-
const client = new LangGraphClient(providerConfig);
|
|
142
|
-
return Promise.resolve(client);
|
|
143
|
-
}
|
|
144
|
-
createChatModel() {
|
|
145
|
-
const { config, requestTimeout } = this.providerConfig;
|
|
146
|
-
const customFetch = (url, options = {}) => {
|
|
147
|
-
// Ensure the abort signal is preserved from options
|
|
148
|
-
return fetch(url, {
|
|
149
|
-
...options,
|
|
150
|
-
signal: options.signal, // Explicitly preserve the signal
|
|
151
|
-
dispatcher: this.undiciAgent,
|
|
152
|
-
});
|
|
153
|
-
};
|
|
154
|
-
// Add OpenRouter-specific headers for app attribution
|
|
155
|
-
const defaultHeaders = {};
|
|
156
|
-
if (this.providerConfig.name.toLowerCase() === 'openrouter') {
|
|
157
|
-
defaultHeaders['HTTP-Referer'] =
|
|
158
|
-
'https://github.com/Nano-Collective/nanocoder';
|
|
159
|
-
defaultHeaders['X-Title'] = 'Nanocoder';
|
|
160
|
-
}
|
|
161
|
-
const chatConfig = {
|
|
162
|
-
modelName: this.currentModel,
|
|
163
|
-
openAIApiKey: config.apiKey ?? 'dummy-key',
|
|
164
|
-
configuration: {
|
|
165
|
-
baseURL: config.baseURL ?? '',
|
|
166
|
-
fetch: customFetch,
|
|
167
|
-
defaultHeaders,
|
|
168
|
-
},
|
|
169
|
-
...config,
|
|
170
|
-
};
|
|
171
|
-
if (requestTimeout === -1) {
|
|
172
|
-
chatConfig.timeout = undefined;
|
|
173
|
-
}
|
|
174
|
-
else if (requestTimeout) {
|
|
175
|
-
chatConfig.timeout = requestTimeout;
|
|
176
|
-
}
|
|
177
|
-
else {
|
|
178
|
-
// default
|
|
179
|
-
chatConfig.timeout = 120000; // 2 minutes
|
|
180
|
-
}
|
|
181
|
-
return new ChatOpenAI(chatConfig);
|
|
182
|
-
}
|
|
183
|
-
setModel(model) {
|
|
184
|
-
this.currentModel = model;
|
|
185
|
-
this.chatModel = this.createChatModel();
|
|
186
|
-
}
|
|
187
|
-
getCurrentModel() {
|
|
188
|
-
return this.currentModel;
|
|
189
|
-
}
|
|
190
|
-
getContextSize() {
|
|
191
|
-
// For OpenRouter, get from cached model info
|
|
192
|
-
if (this.providerConfig.name.toLowerCase() === 'openrouter') {
|
|
193
|
-
const modelData = this.modelInfoCache.get(this.currentModel);
|
|
194
|
-
if (modelData?.context_length) {
|
|
195
|
-
return modelData.context_length;
|
|
196
|
-
}
|
|
197
|
-
return 0;
|
|
198
|
-
}
|
|
199
|
-
// For OpenAI-compatible (local models), we can't reliably know the context
|
|
200
|
-
if (this.providerConfig.name === 'openai-compatible') {
|
|
201
|
-
return 0;
|
|
202
|
-
}
|
|
203
|
-
// Try to get from LangChain model if available
|
|
204
|
-
const chatModelWithMaxTokens = this.chatModel;
|
|
205
|
-
if (chatModelWithMaxTokens.maxTokens) {
|
|
206
|
-
return chatModelWithMaxTokens.maxTokens;
|
|
207
|
-
}
|
|
208
|
-
return 0;
|
|
209
|
-
}
|
|
210
|
-
getAvailableModels() {
|
|
211
|
-
return Promise.resolve(this.availableModels);
|
|
212
|
-
}
|
|
213
|
-
async chat(messages, tools, signal) {
|
|
214
|
-
// Check if already aborted before starting
|
|
215
|
-
if (signal?.aborted) {
|
|
216
|
-
throw new Error('Operation was cancelled');
|
|
217
|
-
}
|
|
218
|
-
try {
|
|
219
|
-
const langchainMessages = messages.map(convertToLangChainMessage);
|
|
220
|
-
let result;
|
|
221
|
-
// Create options object with abort signal if provided
|
|
222
|
-
const invokeOptions = signal ? { signal } : {};
|
|
223
|
-
// Try to bind tools if available - fallback to XML parsing
|
|
224
|
-
if (tools.length > 0) {
|
|
225
|
-
try {
|
|
226
|
-
// Convert our tools to LangChain format
|
|
227
|
-
const langchainTools = tools.map(tool => ({
|
|
228
|
-
type: 'function',
|
|
229
|
-
function: {
|
|
230
|
-
name: tool.function.name,
|
|
231
|
-
description: tool.function.description,
|
|
232
|
-
parameters: tool.function.parameters,
|
|
233
|
-
},
|
|
234
|
-
}));
|
|
235
|
-
// Try binding tools to the model
|
|
236
|
-
const modelWithTools = this.chatModel.bindTools(langchainTools, {
|
|
237
|
-
parallel_tool_calls: false,
|
|
238
|
-
});
|
|
239
|
-
result = (await modelWithTools.invoke(langchainMessages, invokeOptions));
|
|
240
|
-
}
|
|
241
|
-
catch {
|
|
242
|
-
// Tool binding failed, fall back to base model
|
|
243
|
-
result = (await this.chatModel.invoke(langchainMessages, invokeOptions));
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
else {
|
|
247
|
-
// No tools, use base model
|
|
248
|
-
result = (await this.chatModel.invoke(langchainMessages, invokeOptions));
|
|
249
|
-
}
|
|
250
|
-
let convertedMessage = convertFromLangChainMessage(result);
|
|
251
|
-
// If no native tool calls but tools are available, try XML parsing
|
|
252
|
-
if (tools.length > 0 &&
|
|
253
|
-
(!convertedMessage.tool_calls ||
|
|
254
|
-
convertedMessage.tool_calls.length === 0) &&
|
|
255
|
-
convertedMessage.content) {
|
|
256
|
-
const content = convertedMessage.content;
|
|
257
|
-
if (XMLToolCallParser.hasToolCalls(content)) {
|
|
258
|
-
const parsedToolCalls = XMLToolCallParser.parseToolCalls(content);
|
|
259
|
-
const toolCalls = XMLToolCallParser.convertToToolCalls(parsedToolCalls);
|
|
260
|
-
const cleanedContent = XMLToolCallParser.removeToolCallsFromContent(content);
|
|
261
|
-
convertedMessage = {
|
|
262
|
-
...convertedMessage,
|
|
263
|
-
content: cleanedContent,
|
|
264
|
-
tool_calls: toolCalls,
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
return {
|
|
269
|
-
choices: [
|
|
270
|
-
{
|
|
271
|
-
message: {
|
|
272
|
-
role: 'assistant',
|
|
273
|
-
content: convertedMessage.content,
|
|
274
|
-
tool_calls: convertedMessage.tool_calls,
|
|
275
|
-
},
|
|
276
|
-
},
|
|
277
|
-
],
|
|
278
|
-
};
|
|
279
|
-
}
|
|
280
|
-
catch (error) {
|
|
281
|
-
// Check if this was a cancellation
|
|
282
|
-
if (error instanceof Error && error.name === 'AbortError') {
|
|
283
|
-
throw new Error('Operation was cancelled');
|
|
284
|
-
}
|
|
285
|
-
// Parse and throw a user-friendly error
|
|
286
|
-
const userMessage = parseAPIError(error);
|
|
287
|
-
// Throw cleaned error for user display
|
|
288
|
-
throw new Error(userMessage);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
async clearContext() {
|
|
292
|
-
// No internal state to clear in unified approach
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
//# sourceMappingURL=langgraph-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"langgraph-client.js","sourceRoot":"","sources":["../source/langgraph-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { ToolHandler } from '../types/index.js';
|
|
2
|
-
import { MCPClient } from '../mcp/mcp-client.js';
|
|
3
|
-
/**
|
|
4
|
-
* Creates tool handlers for MCP tools that integrate with the existing tool system
|
|
5
|
-
*/
|
|
6
|
-
export declare class MCPToolAdapter {
|
|
7
|
-
private mcpClient;
|
|
8
|
-
constructor(mcpClient: MCPClient);
|
|
9
|
-
/**
|
|
10
|
-
* Creates a tool handler function for an MCP tool
|
|
11
|
-
*/
|
|
12
|
-
createToolHandler(toolName: string): ToolHandler;
|
|
13
|
-
/**
|
|
14
|
-
* Registers all MCP tools in the tool registry
|
|
15
|
-
*/
|
|
16
|
-
registerMCPTools(toolRegistry: Record<string, ToolHandler>): void;
|
|
17
|
-
/**
|
|
18
|
-
* Unregisters all MCP tools from the tool registry
|
|
19
|
-
*/
|
|
20
|
-
unregisterMCPTools(toolRegistry: Record<string, ToolHandler>): void;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=mcp-tool-adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tool-adapter.d.ts","sourceRoot":"","sources":["../../source/mcp/mcp-tool-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAG3C;;GAEG;AACH,qBAAa,cAAc;IAC1B,OAAO,CAAC,SAAS,CAAY;gBAEjB,SAAS,EAAE,SAAS;IAIhC;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;IAahD;;OAEG;IACH,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI;IAejE;;OAEG;IACH,kBAAkB,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI;CAQnE"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { logError } from '../utils/message-queue.js';
|
|
2
|
-
/**
|
|
3
|
-
* Creates tool handlers for MCP tools that integrate with the existing tool system
|
|
4
|
-
*/
|
|
5
|
-
export class MCPToolAdapter {
|
|
6
|
-
mcpClient;
|
|
7
|
-
constructor(mcpClient) {
|
|
8
|
-
this.mcpClient = mcpClient;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Creates a tool handler function for an MCP tool
|
|
12
|
-
*/
|
|
13
|
-
createToolHandler(toolName) {
|
|
14
|
-
return async (args) => {
|
|
15
|
-
try {
|
|
16
|
-
const result = await this.mcpClient.callTool(toolName, args);
|
|
17
|
-
return result;
|
|
18
|
-
}
|
|
19
|
-
catch (error) {
|
|
20
|
-
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
21
|
-
return `Error executing MCP tool: ${errorMessage}`;
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Registers all MCP tools in the tool registry
|
|
27
|
-
*/
|
|
28
|
-
registerMCPTools(toolRegistry) {
|
|
29
|
-
const mcpTools = this.mcpClient.getAllTools();
|
|
30
|
-
for (const tool of mcpTools) {
|
|
31
|
-
const toolName = tool.function.name;
|
|
32
|
-
// Check for conflicts with existing tools
|
|
33
|
-
if (toolRegistry[toolName]) {
|
|
34
|
-
logError(`Warning: MCP tool "${toolName}" conflicts with existing tool. MCP tool will override.`);
|
|
35
|
-
}
|
|
36
|
-
toolRegistry[toolName] = this.createToolHandler(toolName);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Unregisters all MCP tools from the tool registry
|
|
41
|
-
*/
|
|
42
|
-
unregisterMCPTools(toolRegistry) {
|
|
43
|
-
const mcpTools = this.mcpClient.getAllTools();
|
|
44
|
-
for (const tool of mcpTools) {
|
|
45
|
-
const toolName = tool.function.name;
|
|
46
|
-
delete toolRegistry[toolName];
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=mcp-tool-adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tool-adapter.js","sourceRoot":"","sources":["../../source/mcp/mcp-tool-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAC;AAE/C;;GAEG;AACH,MAAM,OAAO,cAAc;IAClB,SAAS,CAAY;IAE7B,YAAY,SAAoB;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,QAAgB;QACjC,OAAO,KAAK,EAAE,IAA6B,EAAE,EAAE;YAC9C,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC7D,OAAO,MAAM,CAAC;YACf,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,YAAY,GACjB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBAC1D,OAAO,6BAA6B,YAAY,EAAE,CAAC;YACpD,CAAC;QACF,CAAC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,YAAyC;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAE9C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACpC,0CAA0C;YAC1C,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,QAAQ,CACP,sBAAsB,QAAQ,yDAAyD,CACvF,CAAC;YACH,CAAC;YACD,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC3D,CAAC;IACF,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,YAAyC;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAE9C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACpC,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;IACF,CAAC;CACD"}
|