gobananas-cli 1.0.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/bin/gobananas-mcp.js +10 -0
- package/bin/gobananas.js +8 -0
- package/dist/commands/account.d.ts +8 -0
- package/dist/commands/account.d.ts.map +1 -0
- package/dist/commands/account.js +200 -0
- package/dist/commands/account.js.map +1 -0
- package/dist/commands/character.d.ts +8 -0
- package/dist/commands/character.d.ts.map +1 -0
- package/dist/commands/character.js +493 -0
- package/dist/commands/character.js.map +1 -0
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +232 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/edit.d.ts +19 -0
- package/dist/commands/edit.d.ts.map +1 -0
- package/dist/commands/edit.js +279 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/generate.d.ts +8 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +177 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/image.d.ts +8 -0
- package/dist/commands/image.d.ts.map +1 -0
- package/dist/commands/image.js +212 -0
- package/dist/commands/image.js.map +1 -0
- package/dist/commands/index.d.ts +19 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +19 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/mcp-help.d.ts +8 -0
- package/dist/commands/mcp-help.d.ts.map +1 -0
- package/dist/commands/mcp-help.js +264 -0
- package/dist/commands/mcp-help.js.map +1 -0
- package/dist/commands/mcp.d.ts +9 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +25 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/product.d.ts +8 -0
- package/dist/commands/product.d.ts.map +1 -0
- package/dist/commands/product.js +316 -0
- package/dist/commands/product.js.map +1 -0
- package/dist/commands/scene.d.ts +8 -0
- package/dist/commands/scene.d.ts.map +1 -0
- package/dist/commands/scene.js +448 -0
- package/dist/commands/scene.js.map +1 -0
- package/dist/commands/search.d.ts +8 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +123 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/session.d.ts +8 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +167 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/style.d.ts +8 -0
- package/dist/commands/style.d.ts.map +1 -0
- package/dist/commands/style.js +297 -0
- package/dist/commands/style.js.map +1 -0
- package/dist/commands/usage.d.ts +8 -0
- package/dist/commands/usage.d.ts.map +1 -0
- package/dist/commands/usage.js +144 -0
- package/dist/commands/usage.js.map +1 -0
- package/dist/config/config.d.ts +65 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +156 -0
- package/dist/config/config.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +130 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/stdio-proxy.d.ts +8 -0
- package/dist/mcp/stdio-proxy.d.ts.map +1 -0
- package/dist/mcp/stdio-proxy.js +297 -0
- package/dist/mcp/stdio-proxy.js.map +1 -0
- package/dist/mcp-stdio.d.ts +3 -0
- package/dist/mcp-stdio.d.ts.map +1 -0
- package/dist/mcp-stdio.js +8 -0
- package/dist/mcp-stdio.js.map +1 -0
- package/dist/transport/index.d.ts +29 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +72 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/mcp-client.d.ts +342 -0
- package/dist/transport/mcp-client.d.ts.map +1 -0
- package/dist/transport/mcp-client.js +478 -0
- package/dist/transport/mcp-client.js.map +1 -0
- package/dist/transport/rest-client.d.ts +297 -0
- package/dist/transport/rest-client.d.ts.map +1 -0
- package/dist/transport/rest-client.js +461 -0
- package/dist/transport/rest-client.js.map +1 -0
- package/dist/types/responses.d.ts +230 -0
- package/dist/types/responses.d.ts.map +1 -0
- package/dist/types/responses.js +46 -0
- package/dist/types/responses.js.map +1 -0
- package/dist/utils/file-handler.d.ts +51 -0
- package/dist/utils/file-handler.d.ts.map +1 -0
- package/dist/utils/file-handler.js +189 -0
- package/dist/utils/file-handler.js.map +1 -0
- package/dist/utils/output.d.ts +111 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +240 -0
- package/dist/utils/output.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
2
|
+
import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
|
|
3
|
+
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
4
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
5
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
6
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, PingRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
7
|
+
import { getConfig } from '../config/config.js';
|
|
8
|
+
const DIAG_TOOL_NAME = 'go_bananas_diagnose';
|
|
9
|
+
function logError(message, error) {
|
|
10
|
+
if (!error) {
|
|
11
|
+
process.stderr.write(`${message}\n`);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const details = error instanceof Error ? error.stack || error.message : String(error);
|
|
15
|
+
process.stderr.write(`${message}\n${details}\n`);
|
|
16
|
+
}
|
|
17
|
+
function redactApiKey(apiKey) {
|
|
18
|
+
if (!apiKey) {
|
|
19
|
+
return '(not set)';
|
|
20
|
+
}
|
|
21
|
+
let prefix = '';
|
|
22
|
+
if (apiKey.startsWith('sk_live_')) {
|
|
23
|
+
prefix = 'sk_live_';
|
|
24
|
+
}
|
|
25
|
+
else if (apiKey.startsWith('sk_test_')) {
|
|
26
|
+
prefix = 'sk_test_';
|
|
27
|
+
}
|
|
28
|
+
const tail = apiKey.length >= 6 ? apiKey.slice(-6) : apiKey;
|
|
29
|
+
return `${prefix}***${tail}`;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Timeout budget constants.
|
|
33
|
+
*
|
|
34
|
+
* CONNECT_TIMEOUT - used for the initial MCP handshake (initialize, listTools).
|
|
35
|
+
* REQUEST_TIMEOUT - used for tool call requests. Generation tools can wait in a
|
|
36
|
+
* queue for up to 5 min plus 120s execution, so 10 min gives comfortable headroom.
|
|
37
|
+
*/
|
|
38
|
+
const CONNECT_TIMEOUT_MS = 30_000; // 30s for handshake
|
|
39
|
+
const REQUEST_TIMEOUT_MS = 600_000; // 10min for tool calls
|
|
40
|
+
function fetchWithTimeout(timeoutMs) {
|
|
41
|
+
return async (input, init) => {
|
|
42
|
+
const controller = new AbortController();
|
|
43
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
44
|
+
try {
|
|
45
|
+
return await fetch(input, { ...(init ?? {}), signal: controller.signal });
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
clearTimeout(timeout);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function normalizeBaseUrl(input) {
|
|
53
|
+
const trimmed = input.trim().replace(/\/+$/, '');
|
|
54
|
+
// Throw for invalid URLs early
|
|
55
|
+
new URL(trimmed);
|
|
56
|
+
return trimmed;
|
|
57
|
+
}
|
|
58
|
+
function toolTextResult(text, isError = false) {
|
|
59
|
+
return {
|
|
60
|
+
content: [{ type: 'text', text }],
|
|
61
|
+
...(isError ? { isError: true } : {}),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function getDiagnosticToolDefinition() {
|
|
65
|
+
return {
|
|
66
|
+
name: DIAG_TOOL_NAME,
|
|
67
|
+
description: 'Diagnose Go Bananas MCP connectivity/configuration (server URL, API key presence, upstream status).',
|
|
68
|
+
inputSchema: {
|
|
69
|
+
type: 'object',
|
|
70
|
+
additionalProperties: false,
|
|
71
|
+
properties: {},
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
class UpstreamGoBananas {
|
|
76
|
+
baseUrl;
|
|
77
|
+
apiKey;
|
|
78
|
+
mode;
|
|
79
|
+
connected = null;
|
|
80
|
+
connectPromise = null;
|
|
81
|
+
lastConnectError = null;
|
|
82
|
+
toolsCache = null;
|
|
83
|
+
constructor(baseUrl, apiKey, mode) {
|
|
84
|
+
this.baseUrl = baseUrl;
|
|
85
|
+
this.apiKey = apiKey;
|
|
86
|
+
this.mode = mode;
|
|
87
|
+
}
|
|
88
|
+
getStatus() {
|
|
89
|
+
return {
|
|
90
|
+
baseUrl: this.baseUrl,
|
|
91
|
+
apiKey: redactApiKey(this.apiKey),
|
|
92
|
+
mode: this.mode,
|
|
93
|
+
connected: this.connected !== null,
|
|
94
|
+
connectedTransport: this.connected?.type ?? null,
|
|
95
|
+
lastConnectError: this.lastConnectError,
|
|
96
|
+
cachedTools: this.toolsCache?.tools?.length ?? 0,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
async ensureConnected() {
|
|
100
|
+
if (this.connected) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
if (this.connectPromise) {
|
|
104
|
+
return await this.connectPromise;
|
|
105
|
+
}
|
|
106
|
+
this.connectPromise = (async () => {
|
|
107
|
+
try {
|
|
108
|
+
let ok = false;
|
|
109
|
+
if (this.mode === 'streamable-http') {
|
|
110
|
+
ok = await this.tryConnectStreamableHttp();
|
|
111
|
+
}
|
|
112
|
+
else if (this.mode === 'sse') {
|
|
113
|
+
ok = await this.tryConnectSse();
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
// Auto mode: try streamable-http first, fall back to SSE
|
|
117
|
+
ok = (await this.tryConnectStreamableHttp()) || (await this.tryConnectSse());
|
|
118
|
+
}
|
|
119
|
+
if (!ok) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
this.lastConnectError = null;
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
this.lastConnectError = error instanceof Error ? error.message : String(error);
|
|
127
|
+
await this.close();
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
finally {
|
|
131
|
+
this.connectPromise = null;
|
|
132
|
+
}
|
|
133
|
+
})();
|
|
134
|
+
return await this.connectPromise;
|
|
135
|
+
}
|
|
136
|
+
async close() {
|
|
137
|
+
try {
|
|
138
|
+
if (this.connected?.transport) {
|
|
139
|
+
await this.connected.transport.close();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// ignore
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
this.connected = null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async listTools() {
|
|
150
|
+
const ok = await this.ensureConnected();
|
|
151
|
+
if (!ok || !this.connected) {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
const result = await this.connected.client.listTools();
|
|
155
|
+
this.toolsCache = result;
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
async callTool(name, args) {
|
|
159
|
+
const ok = await this.ensureConnected();
|
|
160
|
+
if (!ok || !this.connected) {
|
|
161
|
+
throw new Error('Upstream not connected');
|
|
162
|
+
}
|
|
163
|
+
const result = await this.connected.client.callTool({ name, arguments: args });
|
|
164
|
+
return result;
|
|
165
|
+
}
|
|
166
|
+
async tryConnectStreamableHttp() {
|
|
167
|
+
const headers = {};
|
|
168
|
+
if (this.apiKey) {
|
|
169
|
+
headers['X-API-Key'] = this.apiKey;
|
|
170
|
+
}
|
|
171
|
+
const mcpUrl = new URL('/mcp', this.baseUrl);
|
|
172
|
+
// NOTE: Do NOT use reconnectionOptions here. The MCP SDK's reconnection
|
|
173
|
+
// logic sends session IDs with initialize requests, which violates the
|
|
174
|
+
// MCP protocol spec. We handle retries at a higher level instead.
|
|
175
|
+
//
|
|
176
|
+
// Use the long REQUEST_TIMEOUT for the transport fetch — tool calls like
|
|
177
|
+
// generate_with_character can take 5+ min (queue wait + Gemini API).
|
|
178
|
+
// The short CONNECT_TIMEOUT is enforced below via Promise.race on connect().
|
|
179
|
+
const transport = new StreamableHTTPClientTransport(mcpUrl, {
|
|
180
|
+
requestInit: { headers },
|
|
181
|
+
fetch: fetchWithTimeout(REQUEST_TIMEOUT_MS),
|
|
182
|
+
});
|
|
183
|
+
const client = new Client({ name: 'gobananas-mcp-stdio-proxy', version: '1.0.0' }, { capabilities: {} });
|
|
184
|
+
try {
|
|
185
|
+
// Use short timeout for the initial handshake only
|
|
186
|
+
await Promise.race([
|
|
187
|
+
client.connect(transport),
|
|
188
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Connection handshake timed out')), CONNECT_TIMEOUT_MS)),
|
|
189
|
+
]);
|
|
190
|
+
this.connected = { type: 'streamable-http', client, transport };
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
await transport.close().catch(() => { });
|
|
195
|
+
this.lastConnectError = error instanceof Error ? error.message : String(error);
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
async tryConnectSse() {
|
|
200
|
+
const headers = {};
|
|
201
|
+
if (this.apiKey) {
|
|
202
|
+
headers['X-API-Key'] = this.apiKey;
|
|
203
|
+
}
|
|
204
|
+
const sseUrl = new URL('/sse', this.baseUrl);
|
|
205
|
+
// Long timeout for tool calls (same reasoning as streamable-http)
|
|
206
|
+
const transport = new SSEClientTransport(sseUrl, {
|
|
207
|
+
requestInit: { headers },
|
|
208
|
+
fetch: fetchWithTimeout(REQUEST_TIMEOUT_MS),
|
|
209
|
+
});
|
|
210
|
+
const client = new Client({ name: 'gobananas-mcp-stdio-proxy', version: '1.0.0' }, { capabilities: {} });
|
|
211
|
+
try {
|
|
212
|
+
// Short timeout for initial handshake only
|
|
213
|
+
await Promise.race([
|
|
214
|
+
client.connect(transport),
|
|
215
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Connection handshake timed out')), CONNECT_TIMEOUT_MS)),
|
|
216
|
+
]);
|
|
217
|
+
this.connected = { type: 'sse', client, transport };
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
await transport.close().catch(() => { });
|
|
222
|
+
this.lastConnectError = error instanceof Error ? error.message : String(error);
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
export async function runGoBananasMcpStdioProxy(options = {}) {
|
|
228
|
+
const config = getConfig();
|
|
229
|
+
const baseUrl = normalizeBaseUrl(options.serverUrl ?? config.serverUrl);
|
|
230
|
+
const apiKey = options.apiKey ?? config.apiKey;
|
|
231
|
+
// Default to streamable-http (recommended transport per MCP spec 2025-03-26)
|
|
232
|
+
// SSE is deprecated and has reconnection bugs that cause timeouts
|
|
233
|
+
const mode = options.transport ?? process.env.GO_BANANAS_MCP_TRANSPORT ?? 'streamable-http';
|
|
234
|
+
const upstream = new UpstreamGoBananas(baseUrl, apiKey, mode);
|
|
235
|
+
const diagTool = getDiagnosticToolDefinition();
|
|
236
|
+
const server = new Server({ name: 'go-bananas-stdio', version: '1.0.0' }, { capabilities: { tools: {} } });
|
|
237
|
+
server.setRequestHandler(PingRequestSchema, async () => ({}));
|
|
238
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
239
|
+
try {
|
|
240
|
+
const upstreamTools = await upstream.listTools();
|
|
241
|
+
if (!upstreamTools?.tools?.length) {
|
|
242
|
+
return { tools: [diagTool] };
|
|
243
|
+
}
|
|
244
|
+
const merged = [...upstreamTools.tools.filter((t) => t.name !== diagTool.name), diagTool];
|
|
245
|
+
return { ...upstreamTools, tools: merged };
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
logError('Upstream tools/list failed; returning diagnostics-only tool list.', error);
|
|
249
|
+
return { tools: [diagTool] };
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
253
|
+
const toolName = request.params.name;
|
|
254
|
+
const toolArgs = (request.params.arguments ?? {});
|
|
255
|
+
if (toolName === DIAG_TOOL_NAME) {
|
|
256
|
+
const status = upstream.getStatus();
|
|
257
|
+
const message = `Go Bananas MCP stdio proxy\n` +
|
|
258
|
+
`- Base URL: ${status.baseUrl}\n` +
|
|
259
|
+
`- API key: ${status.apiKey}\n` +
|
|
260
|
+
`- Upstream mode: ${status.mode}\n` +
|
|
261
|
+
`- Upstream connected: ${status.connected}\n` +
|
|
262
|
+
(status.connectedTransport ? `- Connected transport: ${status.connectedTransport}\n` : '') +
|
|
263
|
+
`- Cached tools: ${status.cachedTools}\n` +
|
|
264
|
+
(status.lastConnectError ? `- Last connect error: ${status.lastConnectError}\n` : '') +
|
|
265
|
+
`\n` +
|
|
266
|
+
`Fixes:\n` +
|
|
267
|
+
`- Set GO_BANANAS_API_KEY (or MCP_API_KEY)\n` +
|
|
268
|
+
`- Ensure server is reachable: ${status.baseUrl}\n` +
|
|
269
|
+
`- Optionally set GO_BANANAS_MCP_TRANSPORT=streamable-http|sse\n`;
|
|
270
|
+
return toolTextResult(message);
|
|
271
|
+
}
|
|
272
|
+
try {
|
|
273
|
+
return await upstream.callTool(toolName, toolArgs);
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
const status = upstream.getStatus();
|
|
277
|
+
const hint = `Upstream not reachable.\n` +
|
|
278
|
+
`- Base URL: ${status.baseUrl}\n` +
|
|
279
|
+
`- API key: ${status.apiKey}\n` +
|
|
280
|
+
(status.lastConnectError ? `- Last connect error: ${status.lastConnectError}\n` : '') +
|
|
281
|
+
`\n` +
|
|
282
|
+
`Try "${DIAG_TOOL_NAME}" for configuration hints.`;
|
|
283
|
+
return toolTextResult(`Failed to call tool "${toolName}".\n\n${hint}\n\n${error instanceof Error ? error.message : String(error)}`, true);
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
const transport = new StdioServerTransport();
|
|
287
|
+
await server.connect(transport);
|
|
288
|
+
const shutdown = async () => {
|
|
289
|
+
await upstream.close();
|
|
290
|
+
await server.close();
|
|
291
|
+
};
|
|
292
|
+
process.on('SIGINT', () => shutdown().catch(() => process.exit(0)));
|
|
293
|
+
process.on('SIGTERM', () => shutdown().catch(() => process.exit(0)));
|
|
294
|
+
process.on('unhandledRejection', (reason) => logError('Unhandled rejection', reason));
|
|
295
|
+
process.on('uncaughtException', (error) => logError('Uncaught exception', error));
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=stdio-proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio-proxy.js","sourceRoot":"","sources":["../../src/mcp/stdio-proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-stdio.d.ts","sourceRoot":"","sources":["../src/mcp-stdio.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { runGoBananasMcpStdioProxy } from './mcp/stdio-proxy.js';
|
|
3
|
+
runGoBananasMcpStdioProxy().catch((error) => {
|
|
4
|
+
const message = error instanceof Error ? error.stack || error.message : String(error);
|
|
5
|
+
process.stderr.write(`Failed to start Go Bananas MCP stdio proxy\n${message}\n`);
|
|
6
|
+
process.exit(1);
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=mcp-stdio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-stdio.js","sourceRoot":"","sources":["../src/mcp-stdio.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,yBAAyB,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC1C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,OAAO,IAAI,CAAC,CAAC;IACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport Layer Index
|
|
3
|
+
*
|
|
4
|
+
* Provides a unified interface for communicating with Go Bananas server.
|
|
5
|
+
* Automatically selects between MCP and REST based on configuration and availability.
|
|
6
|
+
*/
|
|
7
|
+
import { McpClient } from './mcp-client.js';
|
|
8
|
+
import { RestClient } from './rest-client.js';
|
|
9
|
+
export type TransportType = 'mcp' | 'rest';
|
|
10
|
+
export interface TransportClient {
|
|
11
|
+
type: TransportType;
|
|
12
|
+
mcp?: McpClient;
|
|
13
|
+
rest?: RestClient;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Create a transport client based on configuration
|
|
17
|
+
*
|
|
18
|
+
* If transport is 'auto', tries MCP first then falls back to REST.
|
|
19
|
+
* If transport is 'mcp', uses MCP only.
|
|
20
|
+
* If transport is 'rest', uses REST only.
|
|
21
|
+
*/
|
|
22
|
+
export declare function createTransport(): Promise<TransportClient>;
|
|
23
|
+
/**
|
|
24
|
+
* Get transport type name for display
|
|
25
|
+
*/
|
|
26
|
+
export declare function getTransportName(type: TransportType): string;
|
|
27
|
+
export { McpClient } from './mcp-client.js';
|
|
28
|
+
export { RestClient } from './rest-client.js';
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC,CAgDhE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAE5D;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport Layer Index
|
|
3
|
+
*
|
|
4
|
+
* Provides a unified interface for communicating with Go Bananas server.
|
|
5
|
+
* Automatically selects between MCP and REST based on configuration and availability.
|
|
6
|
+
*/
|
|
7
|
+
import { McpClient } from './mcp-client.js';
|
|
8
|
+
import { RestClient } from './rest-client.js';
|
|
9
|
+
import { getConfig } from '../config/config.js';
|
|
10
|
+
/**
|
|
11
|
+
* Create a transport client based on configuration
|
|
12
|
+
*
|
|
13
|
+
* If transport is 'auto', tries MCP first then falls back to REST.
|
|
14
|
+
* If transport is 'mcp', uses MCP only.
|
|
15
|
+
* If transport is 'rest', uses REST only.
|
|
16
|
+
*/
|
|
17
|
+
export async function createTransport() {
|
|
18
|
+
const config = getConfig();
|
|
19
|
+
const transport = config.transport;
|
|
20
|
+
if (transport === 'rest') {
|
|
21
|
+
return {
|
|
22
|
+
type: 'rest',
|
|
23
|
+
rest: new RestClient(),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
if (transport === 'mcp') {
|
|
27
|
+
const mcpClient = new McpClient();
|
|
28
|
+
try {
|
|
29
|
+
await mcpClient.connect();
|
|
30
|
+
return {
|
|
31
|
+
type: 'mcp',
|
|
32
|
+
mcp: mcpClient,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
throw new Error(`Failed to connect to MCP server: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Auto mode: try MCP first, fall back to REST
|
|
40
|
+
// Always include REST client for operations that require it (e.g., local file uploads)
|
|
41
|
+
const restClient = new RestClient();
|
|
42
|
+
const mcpClient = new McpClient();
|
|
43
|
+
try {
|
|
44
|
+
await mcpClient.connect();
|
|
45
|
+
// MCP connected - use as primary, but include REST for local file uploads
|
|
46
|
+
return {
|
|
47
|
+
type: 'mcp',
|
|
48
|
+
mcp: mcpClient,
|
|
49
|
+
rest: restClient, // Always include REST for local file uploads
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// MCP failed, try REST only
|
|
54
|
+
const canConnect = await restClient.testConnection();
|
|
55
|
+
if (canConnect) {
|
|
56
|
+
return {
|
|
57
|
+
type: 'rest',
|
|
58
|
+
rest: restClient,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
throw new Error('Failed to connect to Go Bananas server via MCP or REST');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get transport type name for display
|
|
66
|
+
*/
|
|
67
|
+
export function getTransportName(type) {
|
|
68
|
+
return type === 'mcp' ? 'MCP Protocol' : 'REST API';
|
|
69
|
+
}
|
|
70
|
+
export { McpClient } from './mcp-client.js';
|
|
71
|
+
export { RestClient } from './rest-client.js';
|
|
72
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAUhD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAEnC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,UAAU,EAAE;SACvB,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;YAC1B,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,GAAG,EAAE,SAAS;aACf,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAClH,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,uFAAuF;IACvF,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;QAC1B,0EAA0E;QAC1E,OAAO;YACL,IAAI,EAAE,KAAK;YACX,GAAG,EAAE,SAAS;YACd,IAAI,EAAE,UAAU,EAAE,6CAA6C;SAChE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,4BAA4B;QAC5B,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE,CAAC;QACrD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU;aACjB,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAmB;IAClD,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC;AACtD,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|