Initial commit: Complete Hive distributed AI orchestration platform
This comprehensive implementation includes: - FastAPI backend with MCP server integration - React/TypeScript frontend with Vite - PostgreSQL database with Redis caching - Grafana/Prometheus monitoring stack - Docker Compose orchestration - Full MCP protocol support for Claude Code integration Features: - Agent discovery and management across network - Visual workflow editor and execution engine - Real-time task coordination and monitoring - Multi-model support with specialized agents - Distributed development task allocation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
382
mcp-server/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/protocol.js
generated
vendored
Normal file
382
mcp-server/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/protocol.js
generated
vendored
Normal file
@@ -0,0 +1,382 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.Protocol = exports.DEFAULT_REQUEST_TIMEOUT_MSEC = void 0;
|
||||
exports.mergeCapabilities = mergeCapabilities;
|
||||
const types_js_1 = require("../types.js");
|
||||
/**
|
||||
* The default request timeout, in miliseconds.
|
||||
*/
|
||||
exports.DEFAULT_REQUEST_TIMEOUT_MSEC = 60000;
|
||||
/**
|
||||
* Implements MCP protocol framing on top of a pluggable transport, including
|
||||
* features like request/response linking, notifications, and progress.
|
||||
*/
|
||||
class Protocol {
|
||||
constructor(_options) {
|
||||
this._options = _options;
|
||||
this._requestMessageId = 0;
|
||||
this._requestHandlers = new Map();
|
||||
this._requestHandlerAbortControllers = new Map();
|
||||
this._notificationHandlers = new Map();
|
||||
this._responseHandlers = new Map();
|
||||
this._progressHandlers = new Map();
|
||||
this._timeoutInfo = new Map();
|
||||
this.setNotificationHandler(types_js_1.CancelledNotificationSchema, (notification) => {
|
||||
const controller = this._requestHandlerAbortControllers.get(notification.params.requestId);
|
||||
controller === null || controller === void 0 ? void 0 : controller.abort(notification.params.reason);
|
||||
});
|
||||
this.setNotificationHandler(types_js_1.ProgressNotificationSchema, (notification) => {
|
||||
this._onprogress(notification);
|
||||
});
|
||||
this.setRequestHandler(types_js_1.PingRequestSchema,
|
||||
// Automatic pong by default.
|
||||
(_request) => ({}));
|
||||
}
|
||||
_setupTimeout(messageId, timeout, maxTotalTimeout, onTimeout, resetTimeoutOnProgress = false) {
|
||||
this._timeoutInfo.set(messageId, {
|
||||
timeoutId: setTimeout(onTimeout, timeout),
|
||||
startTime: Date.now(),
|
||||
timeout,
|
||||
maxTotalTimeout,
|
||||
resetTimeoutOnProgress,
|
||||
onTimeout
|
||||
});
|
||||
}
|
||||
_resetTimeout(messageId) {
|
||||
const info = this._timeoutInfo.get(messageId);
|
||||
if (!info)
|
||||
return false;
|
||||
const totalElapsed = Date.now() - info.startTime;
|
||||
if (info.maxTotalTimeout && totalElapsed >= info.maxTotalTimeout) {
|
||||
this._timeoutInfo.delete(messageId);
|
||||
throw new types_js_1.McpError(types_js_1.ErrorCode.RequestTimeout, "Maximum total timeout exceeded", { maxTotalTimeout: info.maxTotalTimeout, totalElapsed });
|
||||
}
|
||||
clearTimeout(info.timeoutId);
|
||||
info.timeoutId = setTimeout(info.onTimeout, info.timeout);
|
||||
return true;
|
||||
}
|
||||
_cleanupTimeout(messageId) {
|
||||
const info = this._timeoutInfo.get(messageId);
|
||||
if (info) {
|
||||
clearTimeout(info.timeoutId);
|
||||
this._timeoutInfo.delete(messageId);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Attaches to the given transport, starts it, and starts listening for messages.
|
||||
*
|
||||
* The Protocol object assumes ownership of the Transport, replacing any callbacks that have already been set, and expects that it is the only user of the Transport instance going forward.
|
||||
*/
|
||||
async connect(transport) {
|
||||
var _a, _b, _c;
|
||||
this._transport = transport;
|
||||
const _onclose = (_a = this.transport) === null || _a === void 0 ? void 0 : _a.onclose;
|
||||
this._transport.onclose = () => {
|
||||
_onclose === null || _onclose === void 0 ? void 0 : _onclose();
|
||||
this._onclose();
|
||||
};
|
||||
const _onerror = (_b = this.transport) === null || _b === void 0 ? void 0 : _b.onerror;
|
||||
this._transport.onerror = (error) => {
|
||||
_onerror === null || _onerror === void 0 ? void 0 : _onerror(error);
|
||||
this._onerror(error);
|
||||
};
|
||||
const _onmessage = (_c = this._transport) === null || _c === void 0 ? void 0 : _c.onmessage;
|
||||
this._transport.onmessage = (message, extra) => {
|
||||
_onmessage === null || _onmessage === void 0 ? void 0 : _onmessage(message, extra);
|
||||
if ((0, types_js_1.isJSONRPCResponse)(message) || (0, types_js_1.isJSONRPCError)(message)) {
|
||||
this._onresponse(message);
|
||||
}
|
||||
else if ((0, types_js_1.isJSONRPCRequest)(message)) {
|
||||
this._onrequest(message, extra);
|
||||
}
|
||||
else if ((0, types_js_1.isJSONRPCNotification)(message)) {
|
||||
this._onnotification(message);
|
||||
}
|
||||
else {
|
||||
this._onerror(new Error(`Unknown message type: ${JSON.stringify(message)}`));
|
||||
}
|
||||
};
|
||||
await this._transport.start();
|
||||
}
|
||||
_onclose() {
|
||||
var _a;
|
||||
const responseHandlers = this._responseHandlers;
|
||||
this._responseHandlers = new Map();
|
||||
this._progressHandlers.clear();
|
||||
this._transport = undefined;
|
||||
(_a = this.onclose) === null || _a === void 0 ? void 0 : _a.call(this);
|
||||
const error = new types_js_1.McpError(types_js_1.ErrorCode.ConnectionClosed, "Connection closed");
|
||||
for (const handler of responseHandlers.values()) {
|
||||
handler(error);
|
||||
}
|
||||
}
|
||||
_onerror(error) {
|
||||
var _a;
|
||||
(_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, error);
|
||||
}
|
||||
_onnotification(notification) {
|
||||
var _a;
|
||||
const handler = (_a = this._notificationHandlers.get(notification.method)) !== null && _a !== void 0 ? _a : this.fallbackNotificationHandler;
|
||||
// Ignore notifications not being subscribed to.
|
||||
if (handler === undefined) {
|
||||
return;
|
||||
}
|
||||
// Starting with Promise.resolve() puts any synchronous errors into the monad as well.
|
||||
Promise.resolve()
|
||||
.then(() => handler(notification))
|
||||
.catch((error) => this._onerror(new Error(`Uncaught error in notification handler: ${error}`)));
|
||||
}
|
||||
_onrequest(request, extra) {
|
||||
var _a, _b, _c, _d;
|
||||
const handler = (_a = this._requestHandlers.get(request.method)) !== null && _a !== void 0 ? _a : this.fallbackRequestHandler;
|
||||
if (handler === undefined) {
|
||||
(_b = this._transport) === null || _b === void 0 ? void 0 : _b.send({
|
||||
jsonrpc: "2.0",
|
||||
id: request.id,
|
||||
error: {
|
||||
code: types_js_1.ErrorCode.MethodNotFound,
|
||||
message: "Method not found",
|
||||
},
|
||||
}).catch((error) => this._onerror(new Error(`Failed to send an error response: ${error}`)));
|
||||
return;
|
||||
}
|
||||
const abortController = new AbortController();
|
||||
this._requestHandlerAbortControllers.set(request.id, abortController);
|
||||
const fullExtra = {
|
||||
signal: abortController.signal,
|
||||
sessionId: (_c = this._transport) === null || _c === void 0 ? void 0 : _c.sessionId,
|
||||
_meta: (_d = request.params) === null || _d === void 0 ? void 0 : _d._meta,
|
||||
sendNotification: (notification) => this.notification(notification, { relatedRequestId: request.id }),
|
||||
sendRequest: (r, resultSchema, options) => this.request(r, resultSchema, { ...options, relatedRequestId: request.id }),
|
||||
authInfo: extra === null || extra === void 0 ? void 0 : extra.authInfo,
|
||||
requestId: request.id,
|
||||
requestInfo: extra === null || extra === void 0 ? void 0 : extra.requestInfo
|
||||
};
|
||||
// Starting with Promise.resolve() puts any synchronous errors into the monad as well.
|
||||
Promise.resolve()
|
||||
.then(() => handler(request, fullExtra))
|
||||
.then((result) => {
|
||||
var _a;
|
||||
if (abortController.signal.aborted) {
|
||||
return;
|
||||
}
|
||||
return (_a = this._transport) === null || _a === void 0 ? void 0 : _a.send({
|
||||
result,
|
||||
jsonrpc: "2.0",
|
||||
id: request.id,
|
||||
});
|
||||
}, (error) => {
|
||||
var _a, _b;
|
||||
if (abortController.signal.aborted) {
|
||||
return;
|
||||
}
|
||||
return (_a = this._transport) === null || _a === void 0 ? void 0 : _a.send({
|
||||
jsonrpc: "2.0",
|
||||
id: request.id,
|
||||
error: {
|
||||
code: Number.isSafeInteger(error["code"])
|
||||
? error["code"]
|
||||
: types_js_1.ErrorCode.InternalError,
|
||||
message: (_b = error.message) !== null && _b !== void 0 ? _b : "Internal error",
|
||||
},
|
||||
});
|
||||
})
|
||||
.catch((error) => this._onerror(new Error(`Failed to send response: ${error}`)))
|
||||
.finally(() => {
|
||||
this._requestHandlerAbortControllers.delete(request.id);
|
||||
});
|
||||
}
|
||||
_onprogress(notification) {
|
||||
const { progressToken, ...params } = notification.params;
|
||||
const messageId = Number(progressToken);
|
||||
const handler = this._progressHandlers.get(messageId);
|
||||
if (!handler) {
|
||||
this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(notification)}`));
|
||||
return;
|
||||
}
|
||||
const responseHandler = this._responseHandlers.get(messageId);
|
||||
const timeoutInfo = this._timeoutInfo.get(messageId);
|
||||
if (timeoutInfo && responseHandler && timeoutInfo.resetTimeoutOnProgress) {
|
||||
try {
|
||||
this._resetTimeout(messageId);
|
||||
}
|
||||
catch (error) {
|
||||
responseHandler(error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
handler(params);
|
||||
}
|
||||
_onresponse(response) {
|
||||
const messageId = Number(response.id);
|
||||
const handler = this._responseHandlers.get(messageId);
|
||||
if (handler === undefined) {
|
||||
this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(response)}`));
|
||||
return;
|
||||
}
|
||||
this._responseHandlers.delete(messageId);
|
||||
this._progressHandlers.delete(messageId);
|
||||
this._cleanupTimeout(messageId);
|
||||
if ((0, types_js_1.isJSONRPCResponse)(response)) {
|
||||
handler(response);
|
||||
}
|
||||
else {
|
||||
const error = new types_js_1.McpError(response.error.code, response.error.message, response.error.data);
|
||||
handler(error);
|
||||
}
|
||||
}
|
||||
get transport() {
|
||||
return this._transport;
|
||||
}
|
||||
/**
|
||||
* Closes the connection.
|
||||
*/
|
||||
async close() {
|
||||
var _a;
|
||||
await ((_a = this._transport) === null || _a === void 0 ? void 0 : _a.close());
|
||||
}
|
||||
/**
|
||||
* Sends a request and wait for a response.
|
||||
*
|
||||
* Do not use this method to emit notifications! Use notification() instead.
|
||||
*/
|
||||
request(request, resultSchema, options) {
|
||||
const { relatedRequestId, resumptionToken, onresumptiontoken } = options !== null && options !== void 0 ? options : {};
|
||||
return new Promise((resolve, reject) => {
|
||||
var _a, _b, _c, _d, _e, _f;
|
||||
if (!this._transport) {
|
||||
reject(new Error("Not connected"));
|
||||
return;
|
||||
}
|
||||
if (((_a = this._options) === null || _a === void 0 ? void 0 : _a.enforceStrictCapabilities) === true) {
|
||||
this.assertCapabilityForMethod(request.method);
|
||||
}
|
||||
(_b = options === null || options === void 0 ? void 0 : options.signal) === null || _b === void 0 ? void 0 : _b.throwIfAborted();
|
||||
const messageId = this._requestMessageId++;
|
||||
const jsonrpcRequest = {
|
||||
...request,
|
||||
jsonrpc: "2.0",
|
||||
id: messageId,
|
||||
};
|
||||
if (options === null || options === void 0 ? void 0 : options.onprogress) {
|
||||
this._progressHandlers.set(messageId, options.onprogress);
|
||||
jsonrpcRequest.params = {
|
||||
...request.params,
|
||||
_meta: {
|
||||
...(((_c = request.params) === null || _c === void 0 ? void 0 : _c._meta) || {}),
|
||||
progressToken: messageId
|
||||
},
|
||||
};
|
||||
}
|
||||
const cancel = (reason) => {
|
||||
var _a;
|
||||
this._responseHandlers.delete(messageId);
|
||||
this._progressHandlers.delete(messageId);
|
||||
this._cleanupTimeout(messageId);
|
||||
(_a = this._transport) === null || _a === void 0 ? void 0 : _a.send({
|
||||
jsonrpc: "2.0",
|
||||
method: "notifications/cancelled",
|
||||
params: {
|
||||
requestId: messageId,
|
||||
reason: String(reason),
|
||||
},
|
||||
}, { relatedRequestId, resumptionToken, onresumptiontoken }).catch((error) => this._onerror(new Error(`Failed to send cancellation: ${error}`)));
|
||||
reject(reason);
|
||||
};
|
||||
this._responseHandlers.set(messageId, (response) => {
|
||||
var _a;
|
||||
if ((_a = options === null || options === void 0 ? void 0 : options.signal) === null || _a === void 0 ? void 0 : _a.aborted) {
|
||||
return;
|
||||
}
|
||||
if (response instanceof Error) {
|
||||
return reject(response);
|
||||
}
|
||||
try {
|
||||
const result = resultSchema.parse(response.result);
|
||||
resolve(result);
|
||||
}
|
||||
catch (error) {
|
||||
reject(error);
|
||||
}
|
||||
});
|
||||
(_d = options === null || options === void 0 ? void 0 : options.signal) === null || _d === void 0 ? void 0 : _d.addEventListener("abort", () => {
|
||||
var _a;
|
||||
cancel((_a = options === null || options === void 0 ? void 0 : options.signal) === null || _a === void 0 ? void 0 : _a.reason);
|
||||
});
|
||||
const timeout = (_e = options === null || options === void 0 ? void 0 : options.timeout) !== null && _e !== void 0 ? _e : exports.DEFAULT_REQUEST_TIMEOUT_MSEC;
|
||||
const timeoutHandler = () => cancel(new types_js_1.McpError(types_js_1.ErrorCode.RequestTimeout, "Request timed out", { timeout }));
|
||||
this._setupTimeout(messageId, timeout, options === null || options === void 0 ? void 0 : options.maxTotalTimeout, timeoutHandler, (_f = options === null || options === void 0 ? void 0 : options.resetTimeoutOnProgress) !== null && _f !== void 0 ? _f : false);
|
||||
this._transport.send(jsonrpcRequest, { relatedRequestId, resumptionToken, onresumptiontoken }).catch((error) => {
|
||||
this._cleanupTimeout(messageId);
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Emits a notification, which is a one-way message that does not expect a response.
|
||||
*/
|
||||
async notification(notification, options) {
|
||||
if (!this._transport) {
|
||||
throw new Error("Not connected");
|
||||
}
|
||||
this.assertNotificationCapability(notification.method);
|
||||
const jsonrpcNotification = {
|
||||
...notification,
|
||||
jsonrpc: "2.0",
|
||||
};
|
||||
await this._transport.send(jsonrpcNotification, options);
|
||||
}
|
||||
/**
|
||||
* Registers a handler to invoke when this protocol object receives a request with the given method.
|
||||
*
|
||||
* Note that this will replace any previous request handler for the same method.
|
||||
*/
|
||||
setRequestHandler(requestSchema, handler) {
|
||||
const method = requestSchema.shape.method.value;
|
||||
this.assertRequestHandlerCapability(method);
|
||||
this._requestHandlers.set(method, (request, extra) => {
|
||||
return Promise.resolve(handler(requestSchema.parse(request), extra));
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Removes the request handler for the given method.
|
||||
*/
|
||||
removeRequestHandler(method) {
|
||||
this._requestHandlers.delete(method);
|
||||
}
|
||||
/**
|
||||
* Asserts that a request handler has not already been set for the given method, in preparation for a new one being automatically installed.
|
||||
*/
|
||||
assertCanSetRequestHandler(method) {
|
||||
if (this._requestHandlers.has(method)) {
|
||||
throw new Error(`A request handler for ${method} already exists, which would be overridden`);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Registers a handler to invoke when this protocol object receives a notification with the given method.
|
||||
*
|
||||
* Note that this will replace any previous notification handler for the same method.
|
||||
*/
|
||||
setNotificationHandler(notificationSchema, handler) {
|
||||
this._notificationHandlers.set(notificationSchema.shape.method.value, (notification) => Promise.resolve(handler(notificationSchema.parse(notification))));
|
||||
}
|
||||
/**
|
||||
* Removes the notification handler for the given method.
|
||||
*/
|
||||
removeNotificationHandler(method) {
|
||||
this._notificationHandlers.delete(method);
|
||||
}
|
||||
}
|
||||
exports.Protocol = Protocol;
|
||||
function mergeCapabilities(base, additional) {
|
||||
return Object.entries(additional).reduce((acc, [key, value]) => {
|
||||
if (value && typeof value === "object") {
|
||||
acc[key] = acc[key] ? { ...acc[key], ...value } : value;
|
||||
}
|
||||
else {
|
||||
acc[key] = value;
|
||||
}
|
||||
return acc;
|
||||
}, { ...base });
|
||||
}
|
||||
//# sourceMappingURL=protocol.js.map
|
||||
Reference in New Issue
Block a user