skedyul 0.3.0 → 0.3.2
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/dist/.build-stamp +1 -1
- package/dist/config/app-config.d.ts +73 -0
- package/dist/config/app-config.js +12 -0
- package/dist/config/index.d.ts +9 -0
- package/dist/config/index.js +33 -0
- package/dist/config/loader.d.ts +7 -0
- package/dist/config/loader.js +119 -0
- package/dist/config/types/agent.d.ts +29 -0
- package/dist/config/types/agent.js +5 -0
- package/dist/config/types/channel.d.ts +46 -0
- package/dist/config/types/channel.js +2 -0
- package/dist/config/types/compute.d.ts +1 -0
- package/dist/config/types/compute.js +5 -0
- package/dist/config/types/env.d.ts +16 -0
- package/dist/config/types/env.js +5 -0
- package/dist/config/types/index.d.ts +9 -0
- package/dist/config/types/index.js +26 -0
- package/dist/config/types/model.d.ts +62 -0
- package/dist/config/types/model.js +2 -0
- package/dist/config/types/page.d.ts +436 -0
- package/dist/config/types/page.js +5 -0
- package/dist/config/types/resource.d.ts +30 -0
- package/dist/config/types/resource.js +5 -0
- package/dist/config/types/webhook.d.ts +35 -0
- package/dist/config/types/webhook.js +5 -0
- package/dist/config/types/workflow.d.ts +24 -0
- package/dist/config/types/workflow.js +2 -0
- package/dist/config/utils.d.ts +16 -0
- package/dist/config/utils.js +37 -0
- package/dist/config.d.ts +5 -767
- package/dist/config.js +11 -151
- package/dist/schemas.d.ts +43 -43
- package/dist/server/core-api-handler.d.ts +8 -0
- package/dist/server/core-api-handler.js +148 -0
- package/dist/server/dedicated.d.ts +7 -0
- package/dist/server/dedicated.js +610 -0
- package/dist/server/handler-helpers.d.ts +24 -0
- package/dist/server/handler-helpers.js +75 -0
- package/dist/server/index.d.ts +19 -0
- package/dist/server/index.js +196 -0
- package/dist/server/serverless.d.ts +7 -0
- package/dist/server/serverless.js +629 -0
- package/dist/server/startup-logger.d.ts +9 -0
- package/dist/server/startup-logger.js +113 -0
- package/dist/server/tool-handler.d.ts +14 -0
- package/dist/server/tool-handler.js +189 -0
- package/dist/server/types.d.ts +22 -0
- package/dist/server/types.js +2 -0
- package/dist/server/utils/env.d.ts +12 -0
- package/dist/server/utils/env.js +38 -0
- package/dist/server/utils/http.d.ts +30 -0
- package/dist/server/utils/http.js +81 -0
- package/dist/server/utils/index.d.ts +3 -0
- package/dist/server/utils/index.js +24 -0
- package/dist/server/utils/schema.d.ts +22 -0
- package/dist/server/utils/schema.js +102 -0
- package/dist/server.d.ts +7 -11
- package/dist/server.js +39 -2026
- package/dist/types/aws.d.ts +15 -0
- package/dist/types/aws.js +5 -0
- package/dist/types/handlers.d.ts +122 -0
- package/dist/types/handlers.js +2 -0
- package/dist/types/index.d.ts +16 -0
- package/dist/types/index.js +16 -0
- package/dist/types/server.d.ts +43 -0
- package/dist/types/server.js +2 -0
- package/dist/types/shared.d.ts +16 -0
- package/dist/types/shared.js +5 -0
- package/dist/types/tool-context.d.ts +64 -0
- package/dist/types/tool-context.js +12 -0
- package/dist/types/tool.d.ts +96 -0
- package/dist/types/tool.js +19 -0
- package/dist/types/webhook.d.ts +116 -0
- package/dist/types/webhook.js +7 -0
- package/dist/types.d.ts +4 -461
- package/dist/types.js +21 -31
- package/package.json +2 -2
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseHandlerEnvelope = parseHandlerEnvelope;
|
|
4
|
+
exports.buildRequestFromRaw = buildRequestFromRaw;
|
|
5
|
+
exports.buildRequestScopedConfig = buildRequestScopedConfig;
|
|
6
|
+
/**
|
|
7
|
+
* Parses a handler envelope from the request body.
|
|
8
|
+
* Detects envelope format: { env: {...}, request: {...}, context?: {...} }
|
|
9
|
+
* Returns the extracted env and request, or null if not an envelope.
|
|
10
|
+
*/
|
|
11
|
+
function parseHandlerEnvelope(parsedBody) {
|
|
12
|
+
// Check if parsedBody is an object with env and request properties
|
|
13
|
+
if (typeof parsedBody !== 'object' ||
|
|
14
|
+
parsedBody === null ||
|
|
15
|
+
Array.isArray(parsedBody) ||
|
|
16
|
+
!('env' in parsedBody) ||
|
|
17
|
+
!('request' in parsedBody)) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
const envelope = parsedBody;
|
|
21
|
+
// Validate env is an object (not null, not array)
|
|
22
|
+
if (typeof envelope.env !== 'object' ||
|
|
23
|
+
envelope.env === null ||
|
|
24
|
+
Array.isArray(envelope.env)) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
// Validate request is an object (structure validation happens in buildRequestFromRaw)
|
|
28
|
+
if (typeof envelope.request !== 'object' ||
|
|
29
|
+
envelope.request === null ||
|
|
30
|
+
Array.isArray(envelope.request)) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
env: envelope.env,
|
|
35
|
+
request: envelope.request,
|
|
36
|
+
context: envelope.context,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Converts a raw HandlerRawRequest (wire format) to a rich WebhookRequest.
|
|
41
|
+
* Parses JSON body if content-type is application/json, creates Buffer rawBody.
|
|
42
|
+
*/
|
|
43
|
+
function buildRequestFromRaw(raw) {
|
|
44
|
+
// Parse the original request body
|
|
45
|
+
let parsedBody = raw.body;
|
|
46
|
+
const contentType = raw.headers['content-type'] ?? '';
|
|
47
|
+
if (contentType.includes('application/json')) {
|
|
48
|
+
try {
|
|
49
|
+
parsedBody = raw.body ? JSON.parse(raw.body) : {};
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Keep as string if JSON parsing fails
|
|
53
|
+
parsedBody = raw.body;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
method: raw.method,
|
|
58
|
+
url: raw.url,
|
|
59
|
+
path: raw.path,
|
|
60
|
+
headers: raw.headers,
|
|
61
|
+
query: raw.query,
|
|
62
|
+
body: parsedBody,
|
|
63
|
+
rawBody: raw.body ? Buffer.from(raw.body, 'utf-8') : undefined,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Builds request-scoped config by merging env from envelope with process.env fallbacks.
|
|
68
|
+
* Used for SKEDYUL_API_TOKEN and SKEDYUL_API_URL overrides.
|
|
69
|
+
*/
|
|
70
|
+
function buildRequestScopedConfig(env) {
|
|
71
|
+
return {
|
|
72
|
+
baseUrl: env.SKEDYUL_API_URL ?? process.env.SKEDYUL_API_URL ?? '',
|
|
73
|
+
apiToken: env.SKEDYUL_API_TOKEN ?? process.env.SKEDYUL_API_TOKEN ?? '',
|
|
74
|
+
};
|
|
75
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { DedicatedServerInstance, ServerlessServerInstance, SkedyulServerConfig, SkedyulServerInstance, ToolRegistry, WebhookRegistry } from '../types';
|
|
2
|
+
export type { RequestState, CoreMethod, ToolCallArgs } from './types';
|
|
3
|
+
export { normalizeBilling, toJsonSchema, isToolSchemaWithJson, getZodSchema, getJsonSchemaFromToolSchema, parseJsonRecord, parseNumberEnv, mergeRuntimeEnv, readRawRequestBody, parseJSONBody, sendJSON, sendHTML, getDefaultHeaders, createResponse, getListeningPort, } from './utils';
|
|
4
|
+
export { handleCoreMethod } from './core-api-handler';
|
|
5
|
+
export { buildToolMetadata, createRequestState, createCallToolHandler } from './tool-handler';
|
|
6
|
+
export { parseHandlerEnvelope, buildRequestFromRaw, buildRequestScopedConfig } from './handler-helpers';
|
|
7
|
+
export { printStartupLog, padEnd } from './startup-logger';
|
|
8
|
+
export { createDedicatedServerInstance } from './dedicated';
|
|
9
|
+
export { createServerlessInstance } from './serverless';
|
|
10
|
+
export declare function createSkedyulServer(config: SkedyulServerConfig & {
|
|
11
|
+
computeLayer: 'dedicated';
|
|
12
|
+
}, registry: ToolRegistry, webhookRegistry?: WebhookRegistry): DedicatedServerInstance;
|
|
13
|
+
export declare function createSkedyulServer(config: SkedyulServerConfig & {
|
|
14
|
+
computeLayer: 'serverless';
|
|
15
|
+
}, registry: ToolRegistry, webhookRegistry?: WebhookRegistry): ServerlessServerInstance;
|
|
16
|
+
export declare function createSkedyulServer(config: SkedyulServerConfig, registry: ToolRegistry, webhookRegistry?: WebhookRegistry): SkedyulServerInstance;
|
|
17
|
+
export declare const server: {
|
|
18
|
+
create: typeof createSkedyulServer;
|
|
19
|
+
};
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.server = exports.createServerlessInstance = exports.createDedicatedServerInstance = exports.padEnd = exports.printStartupLog = exports.buildRequestScopedConfig = exports.buildRequestFromRaw = exports.parseHandlerEnvelope = exports.createCallToolHandler = exports.createRequestState = exports.buildToolMetadata = exports.handleCoreMethod = exports.getListeningPort = exports.createResponse = exports.getDefaultHeaders = exports.sendHTML = exports.sendJSON = exports.parseJSONBody = exports.readRawRequestBody = exports.mergeRuntimeEnv = exports.parseNumberEnv = exports.parseJsonRecord = exports.getJsonSchemaFromToolSchema = exports.getZodSchema = exports.isToolSchemaWithJson = exports.toJsonSchema = exports.normalizeBilling = void 0;
|
|
37
|
+
exports.createSkedyulServer = createSkedyulServer;
|
|
38
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
39
|
+
const z = __importStar(require("zod"));
|
|
40
|
+
const service_1 = require("../core/service");
|
|
41
|
+
const tool_handler_1 = require("./tool-handler");
|
|
42
|
+
const dedicated_1 = require("./dedicated");
|
|
43
|
+
const serverless_1 = require("./serverless");
|
|
44
|
+
const utils_1 = require("./utils");
|
|
45
|
+
// Re-export utilities
|
|
46
|
+
var utils_2 = require("./utils");
|
|
47
|
+
Object.defineProperty(exports, "normalizeBilling", { enumerable: true, get: function () { return utils_2.normalizeBilling; } });
|
|
48
|
+
Object.defineProperty(exports, "toJsonSchema", { enumerable: true, get: function () { return utils_2.toJsonSchema; } });
|
|
49
|
+
Object.defineProperty(exports, "isToolSchemaWithJson", { enumerable: true, get: function () { return utils_2.isToolSchemaWithJson; } });
|
|
50
|
+
Object.defineProperty(exports, "getZodSchema", { enumerable: true, get: function () { return utils_2.getZodSchema; } });
|
|
51
|
+
Object.defineProperty(exports, "getJsonSchemaFromToolSchema", { enumerable: true, get: function () { return utils_2.getJsonSchemaFromToolSchema; } });
|
|
52
|
+
Object.defineProperty(exports, "parseJsonRecord", { enumerable: true, get: function () { return utils_2.parseJsonRecord; } });
|
|
53
|
+
Object.defineProperty(exports, "parseNumberEnv", { enumerable: true, get: function () { return utils_2.parseNumberEnv; } });
|
|
54
|
+
Object.defineProperty(exports, "mergeRuntimeEnv", { enumerable: true, get: function () { return utils_2.mergeRuntimeEnv; } });
|
|
55
|
+
Object.defineProperty(exports, "readRawRequestBody", { enumerable: true, get: function () { return utils_2.readRawRequestBody; } });
|
|
56
|
+
Object.defineProperty(exports, "parseJSONBody", { enumerable: true, get: function () { return utils_2.parseJSONBody; } });
|
|
57
|
+
Object.defineProperty(exports, "sendJSON", { enumerable: true, get: function () { return utils_2.sendJSON; } });
|
|
58
|
+
Object.defineProperty(exports, "sendHTML", { enumerable: true, get: function () { return utils_2.sendHTML; } });
|
|
59
|
+
Object.defineProperty(exports, "getDefaultHeaders", { enumerable: true, get: function () { return utils_2.getDefaultHeaders; } });
|
|
60
|
+
Object.defineProperty(exports, "createResponse", { enumerable: true, get: function () { return utils_2.createResponse; } });
|
|
61
|
+
Object.defineProperty(exports, "getListeningPort", { enumerable: true, get: function () { return utils_2.getListeningPort; } });
|
|
62
|
+
// Re-export handlers
|
|
63
|
+
var core_api_handler_1 = require("./core-api-handler");
|
|
64
|
+
Object.defineProperty(exports, "handleCoreMethod", { enumerable: true, get: function () { return core_api_handler_1.handleCoreMethod; } });
|
|
65
|
+
var tool_handler_2 = require("./tool-handler");
|
|
66
|
+
Object.defineProperty(exports, "buildToolMetadata", { enumerable: true, get: function () { return tool_handler_2.buildToolMetadata; } });
|
|
67
|
+
Object.defineProperty(exports, "createRequestState", { enumerable: true, get: function () { return tool_handler_2.createRequestState; } });
|
|
68
|
+
Object.defineProperty(exports, "createCallToolHandler", { enumerable: true, get: function () { return tool_handler_2.createCallToolHandler; } });
|
|
69
|
+
var handler_helpers_1 = require("./handler-helpers");
|
|
70
|
+
Object.defineProperty(exports, "parseHandlerEnvelope", { enumerable: true, get: function () { return handler_helpers_1.parseHandlerEnvelope; } });
|
|
71
|
+
Object.defineProperty(exports, "buildRequestFromRaw", { enumerable: true, get: function () { return handler_helpers_1.buildRequestFromRaw; } });
|
|
72
|
+
Object.defineProperty(exports, "buildRequestScopedConfig", { enumerable: true, get: function () { return handler_helpers_1.buildRequestScopedConfig; } });
|
|
73
|
+
var startup_logger_1 = require("./startup-logger");
|
|
74
|
+
Object.defineProperty(exports, "printStartupLog", { enumerable: true, get: function () { return startup_logger_1.printStartupLog; } });
|
|
75
|
+
Object.defineProperty(exports, "padEnd", { enumerable: true, get: function () { return startup_logger_1.padEnd; } });
|
|
76
|
+
var dedicated_2 = require("./dedicated");
|
|
77
|
+
Object.defineProperty(exports, "createDedicatedServerInstance", { enumerable: true, get: function () { return dedicated_2.createDedicatedServerInstance; } });
|
|
78
|
+
var serverless_2 = require("./serverless");
|
|
79
|
+
Object.defineProperty(exports, "createServerlessInstance", { enumerable: true, get: function () { return serverless_2.createServerlessInstance; } });
|
|
80
|
+
function createSkedyulServer(config, registry, webhookRegistry) {
|
|
81
|
+
(0, utils_1.mergeRuntimeEnv)();
|
|
82
|
+
if (config.coreApi?.service) {
|
|
83
|
+
service_1.coreApiService.register(config.coreApi.service);
|
|
84
|
+
if (config.coreApi.webhookHandler) {
|
|
85
|
+
service_1.coreApiService.setWebhookHandler(config.coreApi.webhookHandler);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const tools = (0, tool_handler_1.buildToolMetadata)(registry);
|
|
89
|
+
const toolNames = Object.values(registry).map((tool) => tool.name);
|
|
90
|
+
const runtimeLabel = config.computeLayer;
|
|
91
|
+
const maxRequests = config.maxRequests ??
|
|
92
|
+
(0, utils_1.parseNumberEnv)(process.env.MCP_MAX_REQUESTS) ??
|
|
93
|
+
null;
|
|
94
|
+
const ttlExtendSeconds = config.ttlExtendSeconds ??
|
|
95
|
+
(0, utils_1.parseNumberEnv)(process.env.MCP_TTL_EXTEND) ??
|
|
96
|
+
3600;
|
|
97
|
+
const state = (0, tool_handler_1.createRequestState)(maxRequests, ttlExtendSeconds, runtimeLabel, toolNames);
|
|
98
|
+
const mcpServer = new mcp_js_1.McpServer({
|
|
99
|
+
name: config.metadata.name,
|
|
100
|
+
version: config.metadata.version,
|
|
101
|
+
});
|
|
102
|
+
const dedicatedShutdown = () => {
|
|
103
|
+
// eslint-disable-next-line no-console
|
|
104
|
+
console.log('Max requests reached, shutting down...');
|
|
105
|
+
setTimeout(() => process.exit(0), 1000);
|
|
106
|
+
};
|
|
107
|
+
const callTool = (0, tool_handler_1.createCallToolHandler)(registry, state, config.computeLayer === 'dedicated' ? dedicatedShutdown : undefined);
|
|
108
|
+
// Register all tools from the registry
|
|
109
|
+
for (const [toolKey, tool] of Object.entries(registry)) {
|
|
110
|
+
// Use the tool's name or fall back to the registry key
|
|
111
|
+
const toolName = tool.name || toolKey;
|
|
112
|
+
const toolDisplayName = tool.label || toolName;
|
|
113
|
+
const inputZodSchema = (0, utils_1.getZodSchema)(tool.inputSchema);
|
|
114
|
+
const outputZodSchema = (0, utils_1.getZodSchema)(tool.outputSchema);
|
|
115
|
+
// Wrap the input schema to accept Skedyul format: { inputs: {...}, env: {...} }
|
|
116
|
+
// This allows the MCP SDK to pass through the wrapper without stripping fields
|
|
117
|
+
const wrappedInputSchema = z.object({
|
|
118
|
+
inputs: inputZodSchema ?? z.record(z.string(), z.unknown()).optional(),
|
|
119
|
+
env: z.record(z.string(), z.string()).optional(),
|
|
120
|
+
}).passthrough();
|
|
121
|
+
mcpServer.registerTool(toolName, {
|
|
122
|
+
title: toolDisplayName,
|
|
123
|
+
description: tool.description,
|
|
124
|
+
inputSchema: wrappedInputSchema,
|
|
125
|
+
outputSchema: outputZodSchema,
|
|
126
|
+
}, async (args) => {
|
|
127
|
+
// Args are in Skedyul format: { inputs: {...}, context: {...}, env: {...} }
|
|
128
|
+
const rawArgs = args;
|
|
129
|
+
const toolInputs = (rawArgs.inputs ?? {});
|
|
130
|
+
const toolContext = rawArgs.context;
|
|
131
|
+
const toolEnv = rawArgs.env;
|
|
132
|
+
// Validate inputs if schema exists
|
|
133
|
+
let validatedInputs = toolInputs;
|
|
134
|
+
if (inputZodSchema) {
|
|
135
|
+
try {
|
|
136
|
+
validatedInputs = inputZodSchema.parse(toolInputs);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
console.error(`[registerTool] Input validation failed for tool ${toolName}:`, error);
|
|
140
|
+
// Return error response instead of throwing
|
|
141
|
+
return {
|
|
142
|
+
content: [
|
|
143
|
+
{
|
|
144
|
+
type: 'text',
|
|
145
|
+
text: JSON.stringify({
|
|
146
|
+
error: `Input validation failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
147
|
+
}),
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
structuredContent: {
|
|
151
|
+
error: `Input validation failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
152
|
+
},
|
|
153
|
+
isError: true,
|
|
154
|
+
billing: { credits: 0 },
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
const result = await callTool(toolKey, {
|
|
159
|
+
inputs: validatedInputs,
|
|
160
|
+
context: toolContext,
|
|
161
|
+
env: toolEnv,
|
|
162
|
+
});
|
|
163
|
+
// Handle error case
|
|
164
|
+
if (result.error) {
|
|
165
|
+
const errorOutput = { error: result.error };
|
|
166
|
+
return {
|
|
167
|
+
content: [{ type: 'text', text: JSON.stringify(errorOutput) }],
|
|
168
|
+
structuredContent: errorOutput,
|
|
169
|
+
isError: true,
|
|
170
|
+
billing: result.billing,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
// Transform internal format to MCP protocol format
|
|
174
|
+
// Note: effect is embedded in structuredContent because the MCP SDK
|
|
175
|
+
// transport strips custom top-level fields in dedicated mode
|
|
176
|
+
const outputData = result.output;
|
|
177
|
+
const structuredContent = outputData
|
|
178
|
+
? { ...outputData, __effect: result.effect }
|
|
179
|
+
: result.effect
|
|
180
|
+
? { __effect: result.effect }
|
|
181
|
+
: undefined;
|
|
182
|
+
return {
|
|
183
|
+
content: [{ type: 'text', text: JSON.stringify(result.output) }],
|
|
184
|
+
structuredContent,
|
|
185
|
+
billing: result.billing,
|
|
186
|
+
};
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
if (config.computeLayer === 'dedicated') {
|
|
190
|
+
return (0, dedicated_1.createDedicatedServerInstance)(config, tools, callTool, state, mcpServer, webhookRegistry);
|
|
191
|
+
}
|
|
192
|
+
return (0, serverless_1.createServerlessInstance)(config, tools, callTool, state, mcpServer, registry, webhookRegistry);
|
|
193
|
+
}
|
|
194
|
+
exports.server = {
|
|
195
|
+
create: createSkedyulServer,
|
|
196
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { SkedyulServerConfig, SkedyulServerInstance, ToolCallResponse, ToolMetadata, ToolRegistry, WebhookRegistry } from '../types';
|
|
3
|
+
import type { RequestState } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* Creates a serverless (Lambda-style) server instance
|
|
6
|
+
*/
|
|
7
|
+
export declare function createServerlessInstance(config: SkedyulServerConfig, tools: ToolMetadata[], callTool: (nameRaw: unknown, argsRaw: unknown) => Promise<ToolCallResponse>, state: RequestState, mcpServer: McpServer, registry: ToolRegistry, webhookRegistry?: WebhookRegistry): SkedyulServerInstance;
|