@robinmordasiewicz/f5xc-api-mcp 3.0.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/CHANGELOG.md +74 -0
- package/README.md +234 -0
- package/dist/auth/credential-manager.d.ts +116 -0
- package/dist/auth/credential-manager.d.ts.map +1 -0
- package/dist/auth/credential-manager.js +208 -0
- package/dist/auth/credential-manager.js.map +1 -0
- package/dist/auth/http-client.d.ts +81 -0
- package/dist/auth/http-client.d.ts.map +1 -0
- package/dist/auth/http-client.js +197 -0
- package/dist/auth/http-client.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +6 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/generator/index.d.ts +7 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +7 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/naming/acronyms.d.ts +81 -0
- package/dist/generator/naming/acronyms.d.ts.map +1 -0
- package/dist/generator/naming/acronyms.js +253 -0
- package/dist/generator/naming/acronyms.js.map +1 -0
- package/dist/generator/naming/index.d.ts +6 -0
- package/dist/generator/naming/index.d.ts.map +1 -0
- package/dist/generator/naming/index.js +6 -0
- package/dist/generator/naming/index.js.map +1 -0
- package/dist/generator/naming/volterra-mapping.d.ts +102 -0
- package/dist/generator/naming/volterra-mapping.d.ts.map +1 -0
- package/dist/generator/naming/volterra-mapping.js +259 -0
- package/dist/generator/naming/volterra-mapping.js.map +1 -0
- package/dist/generator/openapi-parser.d.ts +339 -0
- package/dist/generator/openapi-parser.d.ts.map +1 -0
- package/dist/generator/openapi-parser.js +463 -0
- package/dist/generator/openapi-parser.js.map +1 -0
- package/dist/generator/tool-generator.d.ts +74 -0
- package/dist/generator/tool-generator.d.ts.map +1 -0
- package/dist/generator/tool-generator.js +387 -0
- package/dist/generator/tool-generator.js.map +1 -0
- package/dist/generator/transformers/index.d.ts +7 -0
- package/dist/generator/transformers/index.d.ts.map +1 -0
- package/dist/generator/transformers/index.js +7 -0
- package/dist/generator/transformers/index.js.map +1 -0
- package/dist/generator/transformers/normalize-examples.d.ts +48 -0
- package/dist/generator/transformers/normalize-examples.d.ts.map +1 -0
- package/dist/generator/transformers/normalize-examples.js +66 -0
- package/dist/generator/transformers/normalize-examples.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +70 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +6 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +5 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/workflows.d.ts +59 -0
- package/dist/prompts/workflows.d.ts.map +1 -0
- package/dist/prompts/workflows.js +585 -0
- package/dist/prompts/workflows.js.map +1 -0
- package/dist/resources/handlers.d.ts +72 -0
- package/dist/resources/handlers.d.ts.map +1 -0
- package/dist/resources/handlers.js +279 -0
- package/dist/resources/handlers.js.map +1 -0
- package/dist/resources/index.d.ts +8 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +6 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/templates.d.ts +86 -0
- package/dist/resources/templates.d.ts.map +1 -0
- package/dist/resources/templates.js +248 -0
- package/dist/resources/templates.js.map +1 -0
- package/dist/server.d.ts +78 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +426 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/discovery/consolidate.d.ts +97 -0
- package/dist/tools/discovery/consolidate.d.ts.map +1 -0
- package/dist/tools/discovery/consolidate.js +200 -0
- package/dist/tools/discovery/consolidate.js.map +1 -0
- package/dist/tools/discovery/describe.d.ts +132 -0
- package/dist/tools/discovery/describe.d.ts.map +1 -0
- package/dist/tools/discovery/describe.js +206 -0
- package/dist/tools/discovery/describe.js.map +1 -0
- package/dist/tools/discovery/execute.d.ts +98 -0
- package/dist/tools/discovery/execute.d.ts.map +1 -0
- package/dist/tools/discovery/execute.js +251 -0
- package/dist/tools/discovery/execute.js.map +1 -0
- package/dist/tools/discovery/index-loader.d.ts +28 -0
- package/dist/tools/discovery/index-loader.d.ts.map +1 -0
- package/dist/tools/discovery/index-loader.js +69 -0
- package/dist/tools/discovery/index-loader.js.map +1 -0
- package/dist/tools/discovery/index.d.ts +185 -0
- package/dist/tools/discovery/index.d.ts.map +1 -0
- package/dist/tools/discovery/index.js +177 -0
- package/dist/tools/discovery/index.js.map +1 -0
- package/dist/tools/discovery/search.d.ts +41 -0
- package/dist/tools/discovery/search.d.ts.map +1 -0
- package/dist/tools/discovery/search.js +155 -0
- package/dist/tools/discovery/search.js.map +1 -0
- package/dist/tools/discovery/types.d.ts +70 -0
- package/dist/tools/discovery/types.d.ts.map +1 -0
- package/dist/tools/discovery/types.js +9 -0
- package/dist/tools/discovery/types.js.map +1 -0
- package/dist/tools/generated/ai_intelligence/index.d.ts +8 -0
- package/dist/tools/generated/ai_intelligence/index.d.ts.map +1 -0
- package/dist/tools/generated/ai_intelligence/index.js +282 -0
- package/dist/tools/generated/ai_intelligence/index.js.map +1 -0
- package/dist/tools/generated/api_security/index.d.ts +8 -0
- package/dist/tools/generated/api_security/index.d.ts.map +1 -0
- package/dist/tools/generated/api_security/index.js +1852 -0
- package/dist/tools/generated/api_security/index.js.map +1 -0
- package/dist/tools/generated/applications/index.d.ts +8 -0
- package/dist/tools/generated/applications/index.d.ts.map +1 -0
- package/dist/tools/generated/applications/index.js +1589 -0
- package/dist/tools/generated/applications/index.js.map +1 -0
- package/dist/tools/generated/bigip/index.d.ts +8 -0
- package/dist/tools/generated/bigip/index.d.ts.map +1 -0
- package/dist/tools/generated/bigip/index.js +1173 -0
- package/dist/tools/generated/bigip/index.js.map +1 -0
- package/dist/tools/generated/billing/index.d.ts +8 -0
- package/dist/tools/generated/billing/index.d.ts.map +1 -0
- package/dist/tools/generated/billing/index.js +759 -0
- package/dist/tools/generated/billing/index.js.map +1 -0
- package/dist/tools/generated/cdn/index.d.ts +8 -0
- package/dist/tools/generated/cdn/index.d.ts.map +1 -0
- package/dist/tools/generated/cdn/index.js +841 -0
- package/dist/tools/generated/cdn/index.js.map +1 -0
- package/dist/tools/generated/config/index.d.ts +8 -0
- package/dist/tools/generated/config/index.d.ts.map +1 -0
- package/dist/tools/generated/config/index.js +316 -0
- package/dist/tools/generated/config/index.js.map +1 -0
- package/dist/tools/generated/identity/index.d.ts +8 -0
- package/dist/tools/generated/identity/index.d.ts.map +1 -0
- package/dist/tools/generated/identity/index.js +5371 -0
- package/dist/tools/generated/identity/index.js.map +1 -0
- package/dist/tools/generated/infrastructure/index.d.ts +8 -0
- package/dist/tools/generated/infrastructure/index.d.ts.map +1 -0
- package/dist/tools/generated/infrastructure/index.js +5342 -0
- package/dist/tools/generated/infrastructure/index.js.map +1 -0
- package/dist/tools/generated/infrastructure_protection/index.d.ts +8 -0
- package/dist/tools/generated/infrastructure_protection/index.d.ts.map +1 -0
- package/dist/tools/generated/infrastructure_protection/index.js +2919 -0
- package/dist/tools/generated/infrastructure_protection/index.js.map +1 -0
- package/dist/tools/generated/integrations/index.d.ts +8 -0
- package/dist/tools/generated/integrations/index.d.ts.map +1 -0
- package/dist/tools/generated/integrations/index.js +1995 -0
- package/dist/tools/generated/integrations/index.js.map +1 -0
- package/dist/tools/generated/load_balancer/index.d.ts +8 -0
- package/dist/tools/generated/load_balancer/index.d.ts.map +1 -0
- package/dist/tools/generated/load_balancer/index.js +2269 -0
- package/dist/tools/generated/load_balancer/index.js.map +1 -0
- package/dist/tools/generated/networking/index.d.ts +8 -0
- package/dist/tools/generated/networking/index.d.ts.map +1 -0
- package/dist/tools/generated/networking/index.js +11289 -0
- package/dist/tools/generated/networking/index.js.map +1 -0
- package/dist/tools/generated/nginx/index.d.ts +8 -0
- package/dist/tools/generated/nginx/index.d.ts.map +1 -0
- package/dist/tools/generated/nginx/index.js +680 -0
- package/dist/tools/generated/nginx/index.js.map +1 -0
- package/dist/tools/generated/observability/index.d.ts +8 -0
- package/dist/tools/generated/observability/index.d.ts.map +1 -0
- package/dist/tools/generated/observability/index.js +6140 -0
- package/dist/tools/generated/observability/index.js.map +1 -0
- package/dist/tools/generated/operations/index.d.ts +8 -0
- package/dist/tools/generated/operations/index.d.ts.map +1 -0
- package/dist/tools/generated/operations/index.js +1759 -0
- package/dist/tools/generated/operations/index.js.map +1 -0
- package/dist/tools/generated/security/index.d.ts +8 -0
- package/dist/tools/generated/security/index.d.ts.map +1 -0
- package/dist/tools/generated/security/index.js +9111 -0
- package/dist/tools/generated/security/index.js.map +1 -0
- package/dist/tools/generated/service_mesh/index.d.ts +8 -0
- package/dist/tools/generated/service_mesh/index.d.ts.map +1 -0
- package/dist/tools/generated/service_mesh/index.js +1628 -0
- package/dist/tools/generated/service_mesh/index.js.map +1 -0
- package/dist/tools/generated/shape_security/index.d.ts +8 -0
- package/dist/tools/generated/shape_security/index.d.ts.map +1 -0
- package/dist/tools/generated/shape_security/index.js +4121 -0
- package/dist/tools/generated/shape_security/index.js.map +1 -0
- package/dist/tools/generated/subscriptions/index.d.ts +8 -0
- package/dist/tools/generated/subscriptions/index.d.ts.map +1 -0
- package/dist/tools/generated/subscriptions/index.js +778 -0
- package/dist/tools/generated/subscriptions/index.js.map +1 -0
- package/dist/tools/generated/tenant_management/index.d.ts +8 -0
- package/dist/tools/generated/tenant_management/index.d.ts.map +1 -0
- package/dist/tools/generated/tenant_management/index.js +2292 -0
- package/dist/tools/generated/tenant_management/index.js.map +1 -0
- package/dist/tools/generated/vpn/index.d.ts +8 -0
- package/dist/tools/generated/vpn/index.d.ts.map +1 -0
- package/dist/tools/generated/vpn/index.js +1183 -0
- package/dist/tools/generated/vpn/index.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/registry.d.ts +27 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +83 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/utils/error-handling.d.ts +109 -0
- package/dist/utils/error-handling.d.ts.map +1 -0
- package/dist/utils/error-handling.js +239 -0
- package/dist/utils/error-handling.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logging.d.ts +75 -0
- package/dist/utils/logging.d.ts.map +1 -0
- package/dist/utils/logging.js +131 -0
- package/dist/utils/logging.js.map +1 -0
- package/manifest.json +143 -0
- package/package.json +95 -0
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates MCP tool definitions from parsed OpenAPI operations.
|
|
5
|
+
* Handles both documentation mode and execution mode tool behaviors.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
import { AuthMode } from "../auth/credential-manager.js";
|
|
9
|
+
import { formatErrorForMcp } from "../utils/error-handling.js";
|
|
10
|
+
import { logger } from "../utils/logging.js";
|
|
11
|
+
/**
|
|
12
|
+
* Subscription tier constants
|
|
13
|
+
*/
|
|
14
|
+
export const SUBSCRIPTION_TIERS = {
|
|
15
|
+
NO_TIER: "NO_TIER",
|
|
16
|
+
STANDARD: "STANDARD",
|
|
17
|
+
ADVANCED: "ADVANCED",
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Map resource types to subscription tiers
|
|
21
|
+
*/
|
|
22
|
+
const RESOURCE_TIER_MAP = {
|
|
23
|
+
// Standard tier resources
|
|
24
|
+
http_loadbalancer: SUBSCRIPTION_TIERS.STANDARD,
|
|
25
|
+
origin_pool: SUBSCRIPTION_TIERS.STANDARD,
|
|
26
|
+
dns_zone: SUBSCRIPTION_TIERS.STANDARD,
|
|
27
|
+
healthcheck: SUBSCRIPTION_TIERS.STANDARD,
|
|
28
|
+
// Advanced tier resources
|
|
29
|
+
app_firewall: SUBSCRIPTION_TIERS.ADVANCED,
|
|
30
|
+
bot_defense: SUBSCRIPTION_TIERS.ADVANCED,
|
|
31
|
+
api_discovery: SUBSCRIPTION_TIERS.ADVANCED,
|
|
32
|
+
malicious_user_detection: SUBSCRIPTION_TIERS.ADVANCED,
|
|
33
|
+
// Core resources (no tier)
|
|
34
|
+
namespace: SUBSCRIPTION_TIERS.NO_TIER,
|
|
35
|
+
certificate: SUBSCRIPTION_TIERS.NO_TIER,
|
|
36
|
+
secret: SUBSCRIPTION_TIERS.NO_TIER,
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Get subscription tier for a resource type
|
|
40
|
+
*/
|
|
41
|
+
function getSubscriptionTier(resource) {
|
|
42
|
+
const normalizedResource = resource.toLowerCase().replace(/-/g, "_");
|
|
43
|
+
return RESOURCE_TIER_MAP[normalizedResource] ?? SUBSCRIPTION_TIERS.NO_TIER;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Generate f5xcctl equivalent command
|
|
47
|
+
*/
|
|
48
|
+
function generateF5xcctlCommand(operation) {
|
|
49
|
+
const resource = operation.resource.replace(/-/g, "_");
|
|
50
|
+
switch (operation.operation) {
|
|
51
|
+
case "list":
|
|
52
|
+
return `f5xcctl get ${resource}s -n {namespace}`;
|
|
53
|
+
case "get":
|
|
54
|
+
return `f5xcctl get ${resource} {name} -n {namespace}`;
|
|
55
|
+
case "create":
|
|
56
|
+
return `f5xcctl apply -f ${resource}.yaml`;
|
|
57
|
+
case "update":
|
|
58
|
+
return `f5xcctl apply -f ${resource}.yaml`;
|
|
59
|
+
case "delete":
|
|
60
|
+
return `f5xcctl delete ${resource} {name} -n {namespace}`;
|
|
61
|
+
default:
|
|
62
|
+
return `f5xcctl ${operation.operation} ${resource}`;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Generate Terraform resource name
|
|
67
|
+
*/
|
|
68
|
+
function generateTerraformResource(operation) {
|
|
69
|
+
const resource = operation.resource.replace(/-/g, "_");
|
|
70
|
+
return `volterra_${resource}`;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Generate Terraform example
|
|
74
|
+
*/
|
|
75
|
+
function generateTerraformExample(operation) {
|
|
76
|
+
const resource = operation.resource.replace(/-/g, "_");
|
|
77
|
+
const terraformResource = `volterra_${resource}`;
|
|
78
|
+
if (operation.operation !== "create" && operation.operation !== "update") {
|
|
79
|
+
return `# Use data source for ${operation.operation} operations\ndata "${terraformResource}" "example" {\n name = "example"\n namespace = "default"\n}`;
|
|
80
|
+
}
|
|
81
|
+
return `resource "${terraformResource}" "example" {
|
|
82
|
+
name = "example"
|
|
83
|
+
namespace = "default"
|
|
84
|
+
|
|
85
|
+
# Add resource-specific configuration here
|
|
86
|
+
# See F5XC Terraform Provider documentation for details
|
|
87
|
+
}`;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Generate prerequisites based on resource type
|
|
91
|
+
*/
|
|
92
|
+
function generatePrerequisites(operation) {
|
|
93
|
+
const prerequisites = [];
|
|
94
|
+
// Common prerequisites
|
|
95
|
+
if (operation.path.includes("{namespace}")) {
|
|
96
|
+
prerequisites.push("Namespace must exist");
|
|
97
|
+
}
|
|
98
|
+
// Resource-specific prerequisites
|
|
99
|
+
const resource = operation.resource.toLowerCase();
|
|
100
|
+
if (resource.includes("loadbalancer") || resource.includes("lb")) {
|
|
101
|
+
prerequisites.push("Origin pool required for backend configuration");
|
|
102
|
+
prerequisites.push("DNS zone required for automatic DNS management (optional)");
|
|
103
|
+
}
|
|
104
|
+
if (resource.includes("origin") && resource.includes("pool")) {
|
|
105
|
+
prerequisites.push("Backend servers must be accessible");
|
|
106
|
+
prerequisites.push("Health check configuration recommended");
|
|
107
|
+
}
|
|
108
|
+
if (resource.includes("site")) {
|
|
109
|
+
prerequisites.push("Cloud credentials must be configured");
|
|
110
|
+
prerequisites.push("VPC/VNet must exist in target cloud");
|
|
111
|
+
}
|
|
112
|
+
if (resource.includes("waf") || resource.includes("firewall")) {
|
|
113
|
+
prerequisites.push("WAAP subscription required");
|
|
114
|
+
}
|
|
115
|
+
return prerequisites;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Convert OpenAPI parameter to Zod schema
|
|
119
|
+
*/
|
|
120
|
+
function parameterToZodSchema(param) {
|
|
121
|
+
const schema = param.schema;
|
|
122
|
+
const type = schema?.type;
|
|
123
|
+
let zodSchema;
|
|
124
|
+
switch (type) {
|
|
125
|
+
case "integer":
|
|
126
|
+
zodSchema = z.number().int();
|
|
127
|
+
break;
|
|
128
|
+
case "number":
|
|
129
|
+
zodSchema = z.number();
|
|
130
|
+
break;
|
|
131
|
+
case "boolean":
|
|
132
|
+
zodSchema = z.boolean();
|
|
133
|
+
break;
|
|
134
|
+
case "array":
|
|
135
|
+
zodSchema = z.array(z.unknown());
|
|
136
|
+
break;
|
|
137
|
+
case "object":
|
|
138
|
+
zodSchema = z.record(z.string(), z.unknown());
|
|
139
|
+
break;
|
|
140
|
+
default:
|
|
141
|
+
zodSchema = z.string();
|
|
142
|
+
}
|
|
143
|
+
if (!param.required) {
|
|
144
|
+
zodSchema = zodSchema.optional();
|
|
145
|
+
}
|
|
146
|
+
if (param.description) {
|
|
147
|
+
zodSchema = zodSchema.describe(param.description);
|
|
148
|
+
}
|
|
149
|
+
return zodSchema;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Build Zod schema for tool parameters
|
|
153
|
+
*/
|
|
154
|
+
function buildToolSchema(operation) {
|
|
155
|
+
const shape = {};
|
|
156
|
+
// Add path parameters
|
|
157
|
+
for (const param of operation.pathParameters) {
|
|
158
|
+
shape[param.name] = parameterToZodSchema(param);
|
|
159
|
+
}
|
|
160
|
+
// Add query parameters
|
|
161
|
+
for (const param of operation.queryParameters) {
|
|
162
|
+
shape[param.name] = parameterToZodSchema(param);
|
|
163
|
+
}
|
|
164
|
+
// Add body parameter for create/update operations
|
|
165
|
+
if (operation.requestBodySchema &&
|
|
166
|
+
(operation.operation === "create" || operation.operation === "update")) {
|
|
167
|
+
shape["body"] = z
|
|
168
|
+
.record(z.string(), z.unknown())
|
|
169
|
+
.optional()
|
|
170
|
+
.describe("Request body (JSON object)");
|
|
171
|
+
}
|
|
172
|
+
return z.object(shape);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Build documentation response for a tool
|
|
176
|
+
*/
|
|
177
|
+
function buildDocumentationResponse(operation) {
|
|
178
|
+
const parameters = [];
|
|
179
|
+
// Add path parameters
|
|
180
|
+
for (const param of operation.pathParameters) {
|
|
181
|
+
parameters.push({
|
|
182
|
+
name: param.name,
|
|
183
|
+
location: "path",
|
|
184
|
+
type: param.schema?.type ?? "string",
|
|
185
|
+
required: param.required ?? true,
|
|
186
|
+
description: param.description ?? "",
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
// Add query parameters
|
|
190
|
+
for (const param of operation.queryParameters) {
|
|
191
|
+
parameters.push({
|
|
192
|
+
name: param.name,
|
|
193
|
+
location: "query",
|
|
194
|
+
type: param.schema?.type ?? "string",
|
|
195
|
+
required: param.required ?? false,
|
|
196
|
+
description: param.description ?? "",
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
// Add body info
|
|
200
|
+
let requestBody = null;
|
|
201
|
+
if (operation.requestBodySchema) {
|
|
202
|
+
requestBody = {
|
|
203
|
+
required: operation.requiredParams.includes("body"),
|
|
204
|
+
contentType: "application/json",
|
|
205
|
+
schema: operation.requestBodySchema,
|
|
206
|
+
};
|
|
207
|
+
parameters.push({
|
|
208
|
+
name: "body",
|
|
209
|
+
location: "body",
|
|
210
|
+
type: "object",
|
|
211
|
+
required: operation.requiredParams.includes("body"),
|
|
212
|
+
description: "Request body as JSON object",
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
mode: "documentation",
|
|
217
|
+
tool: operation.toolName,
|
|
218
|
+
description: operation.summary,
|
|
219
|
+
httpMethod: operation.method,
|
|
220
|
+
apiPath: operation.path,
|
|
221
|
+
parameters,
|
|
222
|
+
requestBody,
|
|
223
|
+
exampleRequest: generateExampleRequest(operation),
|
|
224
|
+
f5xcctlCommand: generateF5xcctlCommand(operation),
|
|
225
|
+
terraformResource: generateTerraformResource(operation),
|
|
226
|
+
terraformExample: generateTerraformExample(operation),
|
|
227
|
+
prerequisites: generatePrerequisites(operation),
|
|
228
|
+
subscriptionTier: getSubscriptionTier(operation.resource),
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Generate example request for documentation
|
|
233
|
+
*/
|
|
234
|
+
function generateExampleRequest(operation) {
|
|
235
|
+
if (operation.operation !== "create" && operation.operation !== "update") {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
// Generate a basic example based on the resource type
|
|
239
|
+
const resource = operation.resource.toLowerCase();
|
|
240
|
+
if (resource.includes("loadbalancer") || resource.includes("lb")) {
|
|
241
|
+
return {
|
|
242
|
+
metadata: {
|
|
243
|
+
name: "example-lb",
|
|
244
|
+
namespace: "default",
|
|
245
|
+
},
|
|
246
|
+
spec: {
|
|
247
|
+
domains: ["app.example.com"],
|
|
248
|
+
default_route_pools: [
|
|
249
|
+
{
|
|
250
|
+
pool: {
|
|
251
|
+
tenant: "your-tenant",
|
|
252
|
+
namespace: "default",
|
|
253
|
+
name: "example-origin-pool",
|
|
254
|
+
},
|
|
255
|
+
},
|
|
256
|
+
],
|
|
257
|
+
},
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
if (resource.includes("origin") && resource.includes("pool")) {
|
|
261
|
+
return {
|
|
262
|
+
metadata: {
|
|
263
|
+
name: "example-origin-pool",
|
|
264
|
+
namespace: "default",
|
|
265
|
+
},
|
|
266
|
+
spec: {
|
|
267
|
+
origin_servers: [
|
|
268
|
+
{
|
|
269
|
+
public_ip: {
|
|
270
|
+
ip: "10.0.0.1",
|
|
271
|
+
},
|
|
272
|
+
},
|
|
273
|
+
],
|
|
274
|
+
port: 80,
|
|
275
|
+
no_tls: {},
|
|
276
|
+
},
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
// Generic example
|
|
280
|
+
return {
|
|
281
|
+
metadata: {
|
|
282
|
+
name: `example-${resource}`,
|
|
283
|
+
namespace: "default",
|
|
284
|
+
},
|
|
285
|
+
spec: {},
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Register a tool on the MCP server
|
|
290
|
+
*/
|
|
291
|
+
export function registerTool(server, operation, credentialManager, httpClient) {
|
|
292
|
+
const schema = buildToolSchema(operation);
|
|
293
|
+
const description = `${operation.summary}\n\nDomain: ${operation.domain}\nResource: ${operation.resource}\nHTTP: ${operation.method} ${operation.path}`;
|
|
294
|
+
server.tool(operation.toolName, description, schema.shape, async (params) => {
|
|
295
|
+
try {
|
|
296
|
+
// Check authentication mode
|
|
297
|
+
if (credentialManager.getAuthMode() === AuthMode.NONE || !httpClient) {
|
|
298
|
+
// Documentation mode - return API documentation
|
|
299
|
+
const docResponse = buildDocumentationResponse(operation);
|
|
300
|
+
return {
|
|
301
|
+
content: [
|
|
302
|
+
{
|
|
303
|
+
type: "text",
|
|
304
|
+
text: JSON.stringify(docResponse, null, 2),
|
|
305
|
+
},
|
|
306
|
+
],
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
// Execution mode - make actual API call
|
|
310
|
+
const startTime = Date.now();
|
|
311
|
+
// Build API path with parameters
|
|
312
|
+
let apiPath = operation.path;
|
|
313
|
+
for (const param of operation.pathParameters) {
|
|
314
|
+
const value = params[param.name];
|
|
315
|
+
if (value !== undefined) {
|
|
316
|
+
apiPath = apiPath.replace(`{${param.name}}`, String(value));
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// Build query string
|
|
320
|
+
const queryParams = new URLSearchParams();
|
|
321
|
+
for (const param of operation.queryParameters) {
|
|
322
|
+
const value = params[param.name];
|
|
323
|
+
if (value !== undefined) {
|
|
324
|
+
queryParams.append(param.name, String(value));
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
if (queryParams.toString()) {
|
|
328
|
+
apiPath += `?${queryParams.toString()}`;
|
|
329
|
+
}
|
|
330
|
+
// Execute request
|
|
331
|
+
let response;
|
|
332
|
+
const body = params["body"];
|
|
333
|
+
switch (operation.method) {
|
|
334
|
+
case "GET":
|
|
335
|
+
response = await httpClient.get(apiPath);
|
|
336
|
+
break;
|
|
337
|
+
case "POST":
|
|
338
|
+
response = await httpClient.post(apiPath, body);
|
|
339
|
+
break;
|
|
340
|
+
case "PUT":
|
|
341
|
+
response = await httpClient.put(apiPath, body);
|
|
342
|
+
break;
|
|
343
|
+
case "DELETE":
|
|
344
|
+
response = await httpClient.delete(apiPath);
|
|
345
|
+
break;
|
|
346
|
+
default:
|
|
347
|
+
throw new Error(`Unsupported HTTP method: ${operation.method}`);
|
|
348
|
+
}
|
|
349
|
+
const duration = Date.now() - startTime;
|
|
350
|
+
const tenant = credentialManager.getTenant();
|
|
351
|
+
const resourceUrl = tenant ? `https://${tenant}.console.ves.volterra.io${apiPath}` : null;
|
|
352
|
+
const execResponse = {
|
|
353
|
+
mode: "execution",
|
|
354
|
+
tool: operation.toolName,
|
|
355
|
+
status: "success",
|
|
356
|
+
response: response.data,
|
|
357
|
+
resourceUrl,
|
|
358
|
+
duration,
|
|
359
|
+
};
|
|
360
|
+
return {
|
|
361
|
+
content: [
|
|
362
|
+
{
|
|
363
|
+
type: "text",
|
|
364
|
+
text: JSON.stringify(execResponse, null, 2),
|
|
365
|
+
},
|
|
366
|
+
],
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
catch (error) {
|
|
370
|
+
logger.error(`Tool execution failed: ${operation.toolName}`, {
|
|
371
|
+
error: error instanceof Error ? error.message : String(error),
|
|
372
|
+
});
|
|
373
|
+
return formatErrorForMcp(error);
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
logger.debug(`Registered tool: ${operation.toolName}`);
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Register all tools from parsed operations
|
|
380
|
+
*/
|
|
381
|
+
export function registerAllTools(server, operations, credentialManager, httpClient) {
|
|
382
|
+
for (const operation of operations) {
|
|
383
|
+
registerTool(server, operation, credentialManager, httpClient);
|
|
384
|
+
}
|
|
385
|
+
logger.info(`Registered ${operations.length} tools`);
|
|
386
|
+
}
|
|
387
|
+
//# sourceMappingURL=tool-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-generator.js","sourceRoot":"","sources":["../../src/generator/tool-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generator/transformers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generator/transformers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Example Normalization Transformer
|
|
3
|
+
*
|
|
4
|
+
* Normalizes example names in OpenAPI descriptions to follow
|
|
5
|
+
* the project's naming convention (using "example-" prefix).
|
|
6
|
+
*
|
|
7
|
+
* @deprecated Pre-enriched specs already have normalized examples.
|
|
8
|
+
* This module is only used by the deprecated parseSpecDirectory() function.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Normalize examples in a description string
|
|
12
|
+
*
|
|
13
|
+
* Replaces "my-" prefixed example names with "example-" prefix
|
|
14
|
+
* to maintain consistent naming conventions throughout the codebase.
|
|
15
|
+
*
|
|
16
|
+
* @param description - The description text to normalize
|
|
17
|
+
* @returns Normalized description with "example-" prefixes
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* normalizeExamples("my-file, shared/my-file, my-ns/my-file")
|
|
22
|
+
* // Returns: "example-file, shared/example-file, example-ns/example-file"
|
|
23
|
+
*
|
|
24
|
+
* normalizeExamples("Use namespace 'my-namespace' with resource 'my-lb'")
|
|
25
|
+
* // Returns: "Use namespace 'example-namespace' with resource 'example-lb'"
|
|
26
|
+
* ```
|
|
27
|
+
* @deprecated Pre-enriched specs already have normalized examples
|
|
28
|
+
*/
|
|
29
|
+
export declare function normalizeExamples(description: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Normalize examples in a parameter object
|
|
32
|
+
*
|
|
33
|
+
* Creates a new parameter object with normalized description
|
|
34
|
+
*
|
|
35
|
+
* @param param - The parameter object to normalize
|
|
36
|
+
* @returns New parameter object with normalized description
|
|
37
|
+
*/
|
|
38
|
+
export declare function normalizeParameterExamples<T extends {
|
|
39
|
+
description?: string;
|
|
40
|
+
}>(param: T): T;
|
|
41
|
+
/**
|
|
42
|
+
* Check if a string contains "my-" prefixed examples
|
|
43
|
+
*
|
|
44
|
+
* @param text - Text to check
|
|
45
|
+
* @returns True if "my-" prefixed examples are found
|
|
46
|
+
*/
|
|
47
|
+
export declare function hasMyPrefixExamples(text: string): boolean;
|
|
48
|
+
//# sourceMappingURL=normalize-examples.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-examples.d.ts","sourceRoot":"","sources":["../../../src/generator/transformers/normalize-examples.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK7D;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAQ1F;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Example Normalization Transformer
|
|
3
|
+
*
|
|
4
|
+
* Normalizes example names in OpenAPI descriptions to follow
|
|
5
|
+
* the project's naming convention (using "example-" prefix).
|
|
6
|
+
*
|
|
7
|
+
* @deprecated Pre-enriched specs already have normalized examples.
|
|
8
|
+
* This module is only used by the deprecated parseSpecDirectory() function.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Pattern to match "my-" prefixed example names
|
|
12
|
+
* Matches whole words only to avoid partial replacements
|
|
13
|
+
*/
|
|
14
|
+
const MY_PREFIX_PATTERN = /\bmy-(\w+)/g;
|
|
15
|
+
/**
|
|
16
|
+
* Normalize examples in a description string
|
|
17
|
+
*
|
|
18
|
+
* Replaces "my-" prefixed example names with "example-" prefix
|
|
19
|
+
* to maintain consistent naming conventions throughout the codebase.
|
|
20
|
+
*
|
|
21
|
+
* @param description - The description text to normalize
|
|
22
|
+
* @returns Normalized description with "example-" prefixes
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* normalizeExamples("my-file, shared/my-file, my-ns/my-file")
|
|
27
|
+
* // Returns: "example-file, shared/example-file, example-ns/example-file"
|
|
28
|
+
*
|
|
29
|
+
* normalizeExamples("Use namespace 'my-namespace' with resource 'my-lb'")
|
|
30
|
+
* // Returns: "Use namespace 'example-namespace' with resource 'example-lb'"
|
|
31
|
+
* ```
|
|
32
|
+
* @deprecated Pre-enriched specs already have normalized examples
|
|
33
|
+
*/
|
|
34
|
+
export function normalizeExamples(description) {
|
|
35
|
+
if (!description) {
|
|
36
|
+
return description;
|
|
37
|
+
}
|
|
38
|
+
return description.replace(MY_PREFIX_PATTERN, "example-$1");
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Normalize examples in a parameter object
|
|
42
|
+
*
|
|
43
|
+
* Creates a new parameter object with normalized description
|
|
44
|
+
*
|
|
45
|
+
* @param param - The parameter object to normalize
|
|
46
|
+
* @returns New parameter object with normalized description
|
|
47
|
+
*/
|
|
48
|
+
export function normalizeParameterExamples(param) {
|
|
49
|
+
if (!param.description) {
|
|
50
|
+
return param;
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
...param,
|
|
54
|
+
description: normalizeExamples(param.description),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Check if a string contains "my-" prefixed examples
|
|
59
|
+
*
|
|
60
|
+
* @param text - Text to check
|
|
61
|
+
* @returns True if "my-" prefixed examples are found
|
|
62
|
+
*/
|
|
63
|
+
export function hasMyPrefixExamples(text) {
|
|
64
|
+
return MY_PREFIX_PATTERN.test(text);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=normalize-examples.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-examples.js","sourceRoot":"","sources":["../../../src/generator/transformers/normalize-examples.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAExC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,WAAW,CAAC,OAAO,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,0BAA0B,CAAqC,KAAQ;IACrF,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO;QACL,GAAG,KAAK;QACR,WAAW,EAAE,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC;KAClD,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* F5 Distributed Cloud API MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Entry point for the MCP server that provides tools for interacting
|
|
6
|
+
* with F5 XC APIs via Model Context Protocol.
|
|
7
|
+
*
|
|
8
|
+
* Supports dual-mode operation:
|
|
9
|
+
* - Documentation mode: No credentials required - provides API documentation,
|
|
10
|
+
* f5xcctl equivalents, and Terraform examples
|
|
11
|
+
* - Execution mode: When F5XC credentials are provided, enables direct API calls
|
|
12
|
+
*
|
|
13
|
+
* Environment Variables:
|
|
14
|
+
* - F5XC_API_URL: Tenant URL (auto-normalized)
|
|
15
|
+
* - F5XC_API_TOKEN: API token for authentication
|
|
16
|
+
* - F5XC_P12_FILE: Path to P12 certificate file (alternative to token)
|
|
17
|
+
* - F5XC_P12_PASSWORD: Password for P12 certificate
|
|
18
|
+
*/
|
|
19
|
+
/** Server version - synchronized with package.json */
|
|
20
|
+
export declare const VERSION = "0.1.0";
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;GAgBG;AAKH,sDAAsD;AACtD,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* F5 Distributed Cloud API MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Entry point for the MCP server that provides tools for interacting
|
|
6
|
+
* with F5 XC APIs via Model Context Protocol.
|
|
7
|
+
*
|
|
8
|
+
* Supports dual-mode operation:
|
|
9
|
+
* - Documentation mode: No credentials required - provides API documentation,
|
|
10
|
+
* f5xcctl equivalents, and Terraform examples
|
|
11
|
+
* - Execution mode: When F5XC credentials are provided, enables direct API calls
|
|
12
|
+
*
|
|
13
|
+
* Environment Variables:
|
|
14
|
+
* - F5XC_API_URL: Tenant URL (auto-normalized)
|
|
15
|
+
* - F5XC_API_TOKEN: API token for authentication
|
|
16
|
+
* - F5XC_P12_FILE: Path to P12 certificate file (alternative to token)
|
|
17
|
+
* - F5XC_P12_PASSWORD: Password for P12 certificate
|
|
18
|
+
*/
|
|
19
|
+
import { createServer } from "./server.js";
|
|
20
|
+
import { logger } from "./utils/logging.js";
|
|
21
|
+
/** Server version - synchronized with package.json */
|
|
22
|
+
export const VERSION = "0.1.0";
|
|
23
|
+
/**
|
|
24
|
+
* Main entry point
|
|
25
|
+
*/
|
|
26
|
+
async function main() {
|
|
27
|
+
try {
|
|
28
|
+
const server = createServer();
|
|
29
|
+
await server.start();
|
|
30
|
+
// Handle graceful shutdown
|
|
31
|
+
const shutdown = async (signal) => {
|
|
32
|
+
logger.info(`Received ${signal}, shutting down gracefully`);
|
|
33
|
+
await server.stop();
|
|
34
|
+
process.exit(0);
|
|
35
|
+
};
|
|
36
|
+
process.on("SIGINT", () => void shutdown("SIGINT"));
|
|
37
|
+
process.on("SIGTERM", () => void shutdown("SIGTERM"));
|
|
38
|
+
// Handle uncaught errors
|
|
39
|
+
process.on("uncaughtException", (error) => {
|
|
40
|
+
logger.error("Uncaught exception", {
|
|
41
|
+
error: error.message,
|
|
42
|
+
stack: error.stack,
|
|
43
|
+
});
|
|
44
|
+
process.exit(1);
|
|
45
|
+
});
|
|
46
|
+
process.on("unhandledRejection", (reason) => {
|
|
47
|
+
logger.error("Unhandled rejection", {
|
|
48
|
+
reason: reason instanceof Error ? reason.message : String(reason),
|
|
49
|
+
});
|
|
50
|
+
process.exit(1);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
logger.error("Failed to start server", {
|
|
55
|
+
error: error instanceof Error ? error.message : String(error),
|
|
56
|
+
});
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Only run main when executed directly, not when imported (e.g., during tests)
|
|
61
|
+
const isMainModule = import.meta.url === `file://${process.argv[1]}` || process.argv[1]?.endsWith("f5xc-api-mcp");
|
|
62
|
+
if (isMainModule) {
|
|
63
|
+
main().catch((error) => {
|
|
64
|
+
logger.error("Fatal error", {
|
|
65
|
+
error: error instanceof Error ? error.message : String(error),
|
|
66
|
+
});
|
|
67
|
+
process.exit(1);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,sDAAsD;AACtD,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAErB,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAiB,EAAE;YACvD,MAAM,CAAC,IAAI,CAAC,YAAY,MAAM,4BAA4B,CAAC,CAAC;YAC5D,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAEtD,yBAAyB;QACzB,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAY,EAAE,EAAE;YAC/C,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;gBACjC,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAe,EAAE,EAAE;YACnD,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE;gBAClC,MAAM,EAAE,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;aAClE,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;YACrC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,YAAY,GAChB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;AAE/F,IAAI,YAAY,EAAE,CAAC;IACjB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC9B,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE;YAC1B,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompts Module - Export all prompt utilities
|
|
3
|
+
*/
|
|
4
|
+
export { WORKFLOW_PROMPTS, getWorkflowPrompt, processPromptTemplate, deployHttpLoadBalancerPrompt, configureWafPrompt, createMultiCloudSitePrompt, generateTerraformPrompt, } from "./workflows.js";
|
|
5
|
+
export type { WorkflowPrompt, WorkflowArgument } from "./workflows.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,4BAA4B,EAC5B,kBAAkB,EAClB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|