@robinmordasiewicz/f5xc-api-mcp 1.0.82-2512312028
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 +415 -0
- package/dist/auth/credential-manager.d.ts +151 -0
- package/dist/auth/credential-manager.d.ts.map +1 -0
- package/dist/auth/credential-manager.js +330 -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/config/config-manager.d.ts +72 -0
- package/dist/config/config-manager.d.ts.map +1 -0
- package/dist/config/config-manager.js +247 -0
- package/dist/config/config-manager.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +74 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +75 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/types.d.ts +77 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +31 -0
- package/dist/config/types.js.map +1 -0
- package/dist/generator/dependency-extractor.d.ts +103 -0
- package/dist/generator/dependency-extractor.d.ts.map +1 -0
- package/dist/generator/dependency-extractor.js +473 -0
- package/dist/generator/dependency-extractor.js.map +1 -0
- package/dist/generator/dependency-graph.d.ts +67 -0
- package/dist/generator/dependency-graph.d.ts.map +1 -0
- package/dist/generator/dependency-graph.js +330 -0
- package/dist/generator/dependency-graph.js.map +1 -0
- package/dist/generator/dependency-types.d.ts +206 -0
- package/dist/generator/dependency-types.d.ts.map +1 -0
- package/dist/generator/dependency-types.js +37 -0
- package/dist/generator/dependency-types.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 +701 -0
- package/dist/generator/openapi-parser.d.ts.map +1 -0
- package/dist/generator/openapi-parser.js +704 -0
- package/dist/generator/openapi-parser.js.map +1 -0
- package/dist/generator/tool-generator.d.ts +118 -0
- package/dist/generator/tool-generator.d.ts.map +1 -0
- package/dist/generator/tool-generator.js +529 -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 +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +101 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/error-resolution.d.ts +70 -0
- package/dist/prompts/error-resolution.d.ts.map +1 -0
- package/dist/prompts/error-resolution.js +350 -0
- package/dist/prompts/error-resolution.js.map +1 -0
- package/dist/prompts/index.d.ts +8 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +7 -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 +441 -0
- package/dist/prompts/workflows.js.map +1 -0
- package/dist/resources/handlers.d.ts +70 -0
- package/dist/resources/handlers.d.ts.map +1 -0
- package/dist/resources/handlers.js +270 -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 +721 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/discovery/best-practices.d.ts +140 -0
- package/dist/tools/discovery/best-practices.d.ts.map +1 -0
- package/dist/tools/discovery/best-practices.js +499 -0
- package/dist/tools/discovery/best-practices.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/cost-estimator.d.ts +114 -0
- package/dist/tools/discovery/cost-estimator.d.ts.map +1 -0
- package/dist/tools/discovery/cost-estimator.js +273 -0
- package/dist/tools/discovery/cost-estimator.js.map +1 -0
- package/dist/tools/discovery/dependencies.d.ts +113 -0
- package/dist/tools/discovery/dependencies.d.ts.map +1 -0
- package/dist/tools/discovery/dependencies.js +258 -0
- package/dist/tools/discovery/dependencies.js.map +1 -0
- package/dist/tools/discovery/describe.d.ts +133 -0
- package/dist/tools/discovery/describe.d.ts.map +1 -0
- package/dist/tools/discovery/describe.js +208 -0
- package/dist/tools/discovery/describe.js.map +1 -0
- package/dist/tools/discovery/execute.d.ts +96 -0
- package/dist/tools/discovery/execute.d.ts.map +1 -0
- package/dist/tools/discovery/execute.js +220 -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 +72 -0
- package/dist/tools/discovery/index-loader.js.map +1 -0
- package/dist/tools/discovery/index.d.ts +363 -0
- package/dist/tools/discovery/index.d.ts.map +1 -0
- package/dist/tools/discovery/index.js +361 -0
- package/dist/tools/discovery/index.js.map +1 -0
- package/dist/tools/discovery/resolver.d.ts +119 -0
- package/dist/tools/discovery/resolver.d.ts.map +1 -0
- package/dist/tools/discovery/resolver.js +369 -0
- package/dist/tools/discovery/resolver.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 +176 -0
- package/dist/tools/discovery/search.js.map +1 -0
- package/dist/tools/discovery/types.d.ts +91 -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/discovery/validate.d.ts +63 -0
- package/dist/tools/discovery/validate.d.ts.map +1 -0
- package/dist/tools/discovery/validate.js +239 -0
- package/dist/tools/discovery/validate.js.map +1 -0
- package/dist/tools/generated/admin_console_and_ui/index.d.ts +8 -0
- package/dist/tools/generated/admin_console_and_ui/index.d.ts.map +1 -0
- package/dist/tools/generated/admin_console_and_ui/index.js +265 -0
- package/dist/tools/generated/admin_console_and_ui/index.js.map +1 -0
- package/dist/tools/generated/api/index.d.ts +8 -0
- package/dist/tools/generated/api/index.d.ts.map +1 -0
- package/dist/tools/generated/api/index.js +7016 -0
- package/dist/tools/generated/api/index.js.map +1 -0
- package/dist/tools/generated/authentication/index.d.ts +8 -0
- package/dist/tools/generated/authentication/index.d.ts.map +1 -0
- package/dist/tools/generated/authentication/index.js +907 -0
- package/dist/tools/generated/authentication/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 +3152 -0
- package/dist/tools/generated/bigip/index.js.map +1 -0
- package/dist/tools/generated/billing_and_usage/index.d.ts +8 -0
- package/dist/tools/generated/billing_and_usage/index.d.ts.map +1 -0
- package/dist/tools/generated/billing_and_usage/index.js +2452 -0
- package/dist/tools/generated/billing_and_usage/index.js.map +1 -0
- package/dist/tools/generated/blindfold/index.d.ts +8 -0
- package/dist/tools/generated/blindfold/index.d.ts.map +1 -0
- package/dist/tools/generated/blindfold/index.js +3790 -0
- package/dist/tools/generated/blindfold/index.js.map +1 -0
- package/dist/tools/generated/bot_and_threat_defense/index.d.ts +8 -0
- package/dist/tools/generated/bot_and_threat_defense/index.d.ts.map +1 -0
- package/dist/tools/generated/bot_and_threat_defense/index.js +2746 -0
- package/dist/tools/generated/bot_and_threat_defense/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 +2686 -0
- package/dist/tools/generated/cdn/index.js.map +1 -0
- package/dist/tools/generated/ce_management/index.d.ts +8 -0
- package/dist/tools/generated/ce_management/index.d.ts.map +1 -0
- package/dist/tools/generated/ce_management/index.js +3812 -0
- package/dist/tools/generated/ce_management/index.js.map +1 -0
- package/dist/tools/generated/certificates/index.d.ts +8 -0
- package/dist/tools/generated/certificates/index.d.ts.map +1 -0
- package/dist/tools/generated/certificates/index.js +2547 -0
- package/dist/tools/generated/certificates/index.js.map +1 -0
- package/dist/tools/generated/cloud_infrastructure/index.d.ts +8 -0
- package/dist/tools/generated/cloud_infrastructure/index.d.ts.map +1 -0
- package/dist/tools/generated/cloud_infrastructure/index.js +3959 -0
- package/dist/tools/generated/cloud_infrastructure/index.js.map +1 -0
- package/dist/tools/generated/container_services/index.d.ts +8 -0
- package/dist/tools/generated/container_services/index.d.ts.map +1 -0
- package/dist/tools/generated/container_services/index.js +2018 -0
- package/dist/tools/generated/container_services/index.js.map +1 -0
- package/dist/tools/generated/data_and_privacy_security/index.d.ts +8 -0
- package/dist/tools/generated/data_and_privacy_security/index.d.ts.map +1 -0
- package/dist/tools/generated/data_and_privacy_security/index.js +1662 -0
- package/dist/tools/generated/data_and_privacy_security/index.js.map +1 -0
- package/dist/tools/generated/data_intelligence/index.d.ts +8 -0
- package/dist/tools/generated/data_intelligence/index.d.ts.map +1 -0
- package/dist/tools/generated/data_intelligence/index.js +1600 -0
- package/dist/tools/generated/data_intelligence/index.js.map +1 -0
- package/dist/tools/generated/ddos/index.d.ts +8 -0
- package/dist/tools/generated/ddos/index.d.ts.map +1 -0
- package/dist/tools/generated/ddos/index.js +8091 -0
- package/dist/tools/generated/ddos/index.js.map +1 -0
- package/dist/tools/generated/dependency-graph.json +26358 -0
- package/dist/tools/generated/dns/index.d.ts +8 -0
- package/dist/tools/generated/dns/index.d.ts.map +1 -0
- package/dist/tools/generated/dns/index.js +6096 -0
- package/dist/tools/generated/dns/index.js.map +1 -0
- package/dist/tools/generated/generative_ai/index.d.ts +8 -0
- package/dist/tools/generated/generative_ai/index.d.ts.map +1 -0
- package/dist/tools/generated/generative_ai/index.js +1019 -0
- package/dist/tools/generated/generative_ai/index.js.map +1 -0
- package/dist/tools/generated/managed_kubernetes/index.d.ts +8 -0
- package/dist/tools/generated/managed_kubernetes/index.d.ts.map +1 -0
- package/dist/tools/generated/managed_kubernetes/index.js +3368 -0
- package/dist/tools/generated/managed_kubernetes/index.js.map +1 -0
- package/dist/tools/generated/marketplace/index.d.ts +8 -0
- package/dist/tools/generated/marketplace/index.d.ts.map +1 -0
- package/dist/tools/generated/marketplace/index.js +4329 -0
- package/dist/tools/generated/marketplace/index.js.map +1 -0
- package/dist/tools/generated/network/index.d.ts +8 -0
- package/dist/tools/generated/network/index.d.ts.map +1 -0
- package/dist/tools/generated/network/index.js +12424 -0
- package/dist/tools/generated/network/index.js.map +1 -0
- package/dist/tools/generated/network_security/index.d.ts +8 -0
- package/dist/tools/generated/network_security/index.d.ts.map +1 -0
- package/dist/tools/generated/network_security/index.js +9637 -0
- package/dist/tools/generated/network_security/index.js.map +1 -0
- package/dist/tools/generated/nginx_one/index.d.ts +8 -0
- package/dist/tools/generated/nginx_one/index.d.ts.map +1 -0
- package/dist/tools/generated/nginx_one/index.js +1692 -0
- package/dist/tools/generated/nginx_one/index.js.map +1 -0
- package/dist/tools/generated/object_storage/index.d.ts +8 -0
- package/dist/tools/generated/object_storage/index.d.ts.map +1 -0
- package/dist/tools/generated/object_storage/index.js +996 -0
- package/dist/tools/generated/object_storage/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 +5285 -0
- package/dist/tools/generated/observability/index.js.map +1 -0
- package/dist/tools/generated/rate_limiting/index.d.ts +8 -0
- package/dist/tools/generated/rate_limiting/index.d.ts.map +1 -0
- package/dist/tools/generated/rate_limiting/index.js +2108 -0
- package/dist/tools/generated/rate_limiting/index.js.map +1 -0
- package/dist/tools/generated/secops_and_incident_response/index.d.ts +8 -0
- package/dist/tools/generated/secops_and_incident_response/index.d.ts.map +1 -0
- package/dist/tools/generated/secops_and_incident_response/index.js +710 -0
- package/dist/tools/generated/secops_and_incident_response/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 +6062 -0
- package/dist/tools/generated/service_mesh/index.js.map +1 -0
- package/dist/tools/generated/shape/index.d.ts +8 -0
- package/dist/tools/generated/shape/index.d.ts.map +1 -0
- package/dist/tools/generated/shape/index.js +19381 -0
- package/dist/tools/generated/shape/index.js.map +1 -0
- package/dist/tools/generated/sites/index.d.ts +8 -0
- package/dist/tools/generated/sites/index.d.ts.map +1 -0
- package/dist/tools/generated/sites/index.js +13160 -0
- package/dist/tools/generated/sites/index.js.map +1 -0
- package/dist/tools/generated/statistics/index.d.ts +8 -0
- package/dist/tools/generated/statistics/index.d.ts.map +1 -0
- package/dist/tools/generated/statistics/index.js +8131 -0
- package/dist/tools/generated/statistics/index.js.map +1 -0
- package/dist/tools/generated/support/index.d.ts +8 -0
- package/dist/tools/generated/support/index.d.ts.map +1 -0
- package/dist/tools/generated/support/index.js +5608 -0
- package/dist/tools/generated/support/index.js.map +1 -0
- package/dist/tools/generated/telemetry_and_insights/index.d.ts +8 -0
- package/dist/tools/generated/telemetry_and_insights/index.d.ts.map +1 -0
- package/dist/tools/generated/telemetry_and_insights/index.js +2404 -0
- package/dist/tools/generated/telemetry_and_insights/index.js.map +1 -0
- package/dist/tools/generated/tenant_and_identity/index.d.ts +8 -0
- package/dist/tools/generated/tenant_and_identity/index.d.ts.map +1 -0
- package/dist/tools/generated/tenant_and_identity/index.js +18938 -0
- package/dist/tools/generated/tenant_and_identity/index.js.map +1 -0
- package/dist/tools/generated/threat_campaign/index.d.ts +8 -0
- package/dist/tools/generated/threat_campaign/index.d.ts.map +1 -0
- package/dist/tools/generated/threat_campaign/index.js +102 -0
- package/dist/tools/generated/threat_campaign/index.js.map +1 -0
- package/dist/tools/generated/users/index.d.ts +8 -0
- package/dist/tools/generated/users/index.d.ts.map +1 -0
- package/dist/tools/generated/users/index.js +1515 -0
- package/dist/tools/generated/users/index.js.map +1 -0
- package/dist/tools/generated/virtual/index.d.ts +8 -0
- package/dist/tools/generated/virtual/index.d.ts.map +1 -0
- package/dist/tools/generated/virtual/index.js +11263 -0
- package/dist/tools/generated/virtual/index.js.map +1 -0
- package/dist/tools/generated/vpm_and_node_management/index.d.ts +8 -0
- package/dist/tools/generated/vpm_and_node_management/index.d.ts.map +1 -0
- package/dist/tools/generated/vpm_and_node_management/index.js +88 -0
- package/dist/tools/generated/vpm_and_node_management/index.js.map +1 -0
- package/dist/tools/generated/waf/index.d.ts +8 -0
- package/dist/tools/generated/waf/index.d.ts.map +1 -0
- package/dist/tools/generated/waf/index.js +4586 -0
- package/dist/tools/generated/waf/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 +115 -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 +110 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cost and Performance Estimation
|
|
3
|
+
*
|
|
4
|
+
* Provides token usage estimates, latency expectations, and
|
|
5
|
+
* workflow cost aggregation for F5XC API operations.
|
|
6
|
+
*/
|
|
7
|
+
import { getToolByName } from "../registry.js";
|
|
8
|
+
import { toolExists } from "./index-loader.js";
|
|
9
|
+
/**
|
|
10
|
+
* Latency level to milliseconds mapping
|
|
11
|
+
*/
|
|
12
|
+
const LATENCY_MS_MAP = {
|
|
13
|
+
low: 500,
|
|
14
|
+
moderate: 2000,
|
|
15
|
+
high: 5000,
|
|
16
|
+
unknown: 1500,
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Latency level descriptions
|
|
20
|
+
*/
|
|
21
|
+
const LATENCY_DESCRIPTIONS = {
|
|
22
|
+
low: "Fast operation, typically completes in under 1 second",
|
|
23
|
+
moderate: "Standard operation, may take 1-3 seconds",
|
|
24
|
+
high: "Complex operation, may take 3-10 seconds or involve async processing",
|
|
25
|
+
unknown: "Latency not specified, estimate based on operation type",
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Estimate token count for a string (rough approximation)
|
|
29
|
+
*/
|
|
30
|
+
function estimateTokens(text) {
|
|
31
|
+
// Rough approximation: 1 token per 4 characters for English text
|
|
32
|
+
// JSON tends to be more verbose, so use 1 token per 3.5 characters
|
|
33
|
+
return Math.ceil(text.length / 3.5);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get latency level from tool metadata
|
|
37
|
+
*/
|
|
38
|
+
function getLatencyLevel(toolName) {
|
|
39
|
+
const tool = getToolByName(toolName);
|
|
40
|
+
if (!tool) {
|
|
41
|
+
return "unknown";
|
|
42
|
+
}
|
|
43
|
+
// Check operation metadata for performance impact
|
|
44
|
+
const metadata = tool.operationMetadata;
|
|
45
|
+
if (metadata?.performance_impact?.latency) {
|
|
46
|
+
const latency = metadata.performance_impact.latency;
|
|
47
|
+
if (latency === "low" || latency === "moderate" || latency === "high") {
|
|
48
|
+
return latency;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Fallback: estimate based on operation type
|
|
52
|
+
switch (tool.operation) {
|
|
53
|
+
case "list":
|
|
54
|
+
return "low";
|
|
55
|
+
case "get":
|
|
56
|
+
return "low";
|
|
57
|
+
case "create":
|
|
58
|
+
return "moderate";
|
|
59
|
+
case "update":
|
|
60
|
+
return "moderate";
|
|
61
|
+
case "delete":
|
|
62
|
+
return "moderate";
|
|
63
|
+
default:
|
|
64
|
+
return "unknown";
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Estimate tokens for a tool call
|
|
69
|
+
*/
|
|
70
|
+
export function estimateToolTokens(toolName) {
|
|
71
|
+
const tool = getToolByName(toolName);
|
|
72
|
+
if (!tool) {
|
|
73
|
+
// Default estimate for unknown tools
|
|
74
|
+
return {
|
|
75
|
+
schemaTokens: 200,
|
|
76
|
+
requestTokens: 100,
|
|
77
|
+
responseTokens: 300,
|
|
78
|
+
totalTokens: 600,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
// Schema tokens: tool description + parameters
|
|
82
|
+
const descriptionTokens = estimateTokens(tool.description);
|
|
83
|
+
const pathParamTokens = tool.pathParameters.length * 30;
|
|
84
|
+
const queryParamTokens = (tool.queryParameters?.length ?? 0) * 40;
|
|
85
|
+
const schemaTokens = descriptionTokens + pathParamTokens + queryParamTokens;
|
|
86
|
+
// Request tokens: based on operation type
|
|
87
|
+
let requestTokens;
|
|
88
|
+
switch (tool.operation) {
|
|
89
|
+
case "create":
|
|
90
|
+
requestTokens = 500; // Create operations typically have larger request bodies
|
|
91
|
+
break;
|
|
92
|
+
case "update":
|
|
93
|
+
requestTokens = 400;
|
|
94
|
+
break;
|
|
95
|
+
case "list":
|
|
96
|
+
requestTokens = 50; // List operations have minimal request
|
|
97
|
+
break;
|
|
98
|
+
case "get":
|
|
99
|
+
requestTokens = 30;
|
|
100
|
+
break;
|
|
101
|
+
case "delete":
|
|
102
|
+
requestTokens = 30;
|
|
103
|
+
break;
|
|
104
|
+
default:
|
|
105
|
+
requestTokens = 200;
|
|
106
|
+
}
|
|
107
|
+
// Response tokens: based on operation type
|
|
108
|
+
let responseTokens;
|
|
109
|
+
switch (tool.operation) {
|
|
110
|
+
case "list":
|
|
111
|
+
responseTokens = 1000; // List operations can return many items
|
|
112
|
+
break;
|
|
113
|
+
case "get":
|
|
114
|
+
responseTokens = 500;
|
|
115
|
+
break;
|
|
116
|
+
case "create":
|
|
117
|
+
responseTokens = 400;
|
|
118
|
+
break;
|
|
119
|
+
case "update":
|
|
120
|
+
responseTokens = 400;
|
|
121
|
+
break;
|
|
122
|
+
case "delete":
|
|
123
|
+
responseTokens = 100;
|
|
124
|
+
break;
|
|
125
|
+
default:
|
|
126
|
+
responseTokens = 300;
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
schemaTokens,
|
|
130
|
+
requestTokens,
|
|
131
|
+
responseTokens,
|
|
132
|
+
totalTokens: schemaTokens + requestTokens + responseTokens,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Estimate latency for a tool call
|
|
137
|
+
*/
|
|
138
|
+
export function estimateToolLatency(toolName) {
|
|
139
|
+
const level = getLatencyLevel(toolName);
|
|
140
|
+
return {
|
|
141
|
+
level,
|
|
142
|
+
estimatedMs: LATENCY_MS_MAP[level],
|
|
143
|
+
description: LATENCY_DESCRIPTIONS[level],
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get complete cost estimate for a single tool
|
|
148
|
+
*/
|
|
149
|
+
export function estimateToolCost(toolName) {
|
|
150
|
+
const exists = toolExists(toolName);
|
|
151
|
+
const tool = getToolByName(toolName);
|
|
152
|
+
return {
|
|
153
|
+
toolName,
|
|
154
|
+
tokens: estimateToolTokens(toolName),
|
|
155
|
+
latency: estimateToolLatency(toolName),
|
|
156
|
+
dangerLevel: tool?.dangerLevel ?? "low",
|
|
157
|
+
exists,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Estimate costs for multiple tools
|
|
162
|
+
*/
|
|
163
|
+
export function estimateMultipleToolsCost(toolNames) {
|
|
164
|
+
return toolNames.map((name) => estimateToolCost(name));
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Aggregate latency levels into average
|
|
168
|
+
*/
|
|
169
|
+
function aggregateLatency(levels) {
|
|
170
|
+
if (levels.length === 0) {
|
|
171
|
+
return "unknown";
|
|
172
|
+
}
|
|
173
|
+
const levelValues = {
|
|
174
|
+
low: 1,
|
|
175
|
+
moderate: 2,
|
|
176
|
+
high: 3,
|
|
177
|
+
unknown: 2,
|
|
178
|
+
};
|
|
179
|
+
const total = levels.reduce((sum, level) => sum + levelValues[level], 0);
|
|
180
|
+
const avg = total / levels.length;
|
|
181
|
+
if (avg < 1.5)
|
|
182
|
+
return "low";
|
|
183
|
+
if (avg < 2.5)
|
|
184
|
+
return "moderate";
|
|
185
|
+
return "high";
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Estimate costs for a creation plan workflow
|
|
189
|
+
*/
|
|
190
|
+
export function estimateWorkflowCost(plan) {
|
|
191
|
+
const warnings = [];
|
|
192
|
+
const latencyLevels = [];
|
|
193
|
+
const steps = plan.steps.map((step) => {
|
|
194
|
+
const tokens = estimateToolTokens(step.toolName);
|
|
195
|
+
const latency = estimateToolLatency(step.toolName);
|
|
196
|
+
if (!toolExists(step.toolName)) {
|
|
197
|
+
warnings.push(`Tool '${step.toolName}' not found - estimates may be inaccurate`);
|
|
198
|
+
}
|
|
199
|
+
latencyLevels.push(latency.level);
|
|
200
|
+
return {
|
|
201
|
+
stepNumber: step.stepNumber,
|
|
202
|
+
toolName: step.toolName,
|
|
203
|
+
tokens: tokens.totalTokens,
|
|
204
|
+
latencyMs: latency.estimatedMs,
|
|
205
|
+
};
|
|
206
|
+
});
|
|
207
|
+
const totalTokens = steps.reduce((sum, step) => sum + step.tokens, 0);
|
|
208
|
+
const estimatedTotalMs = steps.reduce((sum, step) => sum + step.latencyMs, 0);
|
|
209
|
+
return {
|
|
210
|
+
totalTokens,
|
|
211
|
+
averageLatency: aggregateLatency(latencyLevels),
|
|
212
|
+
estimatedTotalMs,
|
|
213
|
+
stepCount: steps.length,
|
|
214
|
+
steps,
|
|
215
|
+
warnings,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Format cost estimate for human-readable output
|
|
220
|
+
*/
|
|
221
|
+
export function formatCostEstimate(estimate) {
|
|
222
|
+
const lines = [];
|
|
223
|
+
lines.push(`# Cost Estimate: ${estimate.toolName}`);
|
|
224
|
+
lines.push("");
|
|
225
|
+
if (!estimate.exists) {
|
|
226
|
+
lines.push("**Warning**: Tool not found - estimates are approximate");
|
|
227
|
+
lines.push("");
|
|
228
|
+
}
|
|
229
|
+
lines.push("## Token Usage");
|
|
230
|
+
lines.push(`- Schema/Description: ~${estimate.tokens.schemaTokens} tokens`);
|
|
231
|
+
lines.push(`- Request Body: ~${estimate.tokens.requestTokens} tokens`);
|
|
232
|
+
lines.push(`- Response: ~${estimate.tokens.responseTokens} tokens`);
|
|
233
|
+
lines.push(`- **Total per call**: ~${estimate.tokens.totalTokens} tokens`);
|
|
234
|
+
lines.push("");
|
|
235
|
+
lines.push("## Latency");
|
|
236
|
+
lines.push(`- Level: ${estimate.latency.level}`);
|
|
237
|
+
lines.push(`- Estimated: ~${estimate.latency.estimatedMs}ms`);
|
|
238
|
+
lines.push(`- ${estimate.latency.description}`);
|
|
239
|
+
lines.push("");
|
|
240
|
+
lines.push("## Risk");
|
|
241
|
+
lines.push(`- Danger Level: ${estimate.dangerLevel}`);
|
|
242
|
+
return lines.join("\n");
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Format workflow cost estimate for human-readable output
|
|
246
|
+
*/
|
|
247
|
+
export function formatWorkflowCostEstimate(estimate) {
|
|
248
|
+
const lines = [];
|
|
249
|
+
lines.push("# Workflow Cost Estimate");
|
|
250
|
+
lines.push("");
|
|
251
|
+
lines.push("## Summary");
|
|
252
|
+
lines.push(`- **Total Steps**: ${estimate.stepCount}`);
|
|
253
|
+
lines.push(`- **Total Tokens**: ~${estimate.totalTokens}`);
|
|
254
|
+
lines.push(`- **Average Latency**: ${estimate.averageLatency}`);
|
|
255
|
+
lines.push(`- **Estimated Total Time**: ~${(estimate.estimatedTotalMs / 1000).toFixed(1)}s`);
|
|
256
|
+
lines.push("");
|
|
257
|
+
if (estimate.warnings.length > 0) {
|
|
258
|
+
lines.push("## Warnings");
|
|
259
|
+
for (const warning of estimate.warnings) {
|
|
260
|
+
lines.push(`- ${warning}`);
|
|
261
|
+
}
|
|
262
|
+
lines.push("");
|
|
263
|
+
}
|
|
264
|
+
lines.push("## Step Breakdown");
|
|
265
|
+
lines.push("");
|
|
266
|
+
lines.push("| Step | Tool | Tokens | Latency |");
|
|
267
|
+
lines.push("|------|------|--------|---------|");
|
|
268
|
+
for (const step of estimate.steps) {
|
|
269
|
+
lines.push(`| ${step.stepNumber} | ${step.toolName} | ~${step.tokens} | ~${step.latencyMs}ms |`);
|
|
270
|
+
}
|
|
271
|
+
return lines.join("\n");
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=cost-estimator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-estimator.js","sourceRoot":"","sources":["../../../src/tools/discovery/cost-estimator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Discovery Module
|
|
3
|
+
*
|
|
4
|
+
* Provides LLM-accessible tools for querying resource dependency information,
|
|
5
|
+
* prerequisite sequences, mutually exclusive fields, and subscription requirements.
|
|
6
|
+
*
|
|
7
|
+
* This module enables LLMs to understand resource relationships and execute
|
|
8
|
+
* operations in the correct order without hallucinating dependencies.
|
|
9
|
+
*/
|
|
10
|
+
import type { DependencyGraph, ResourceDependencies, ResourceReference, OneOfGroup, SubscriptionRequirement, DependencyDiscoveryAction, DependencyDiscoveryResponse } from "../../generator/dependency-types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Load the dependency graph from the generated JSON file
|
|
13
|
+
* Uses caching for efficiency
|
|
14
|
+
*/
|
|
15
|
+
export declare function loadDependencyGraph(): DependencyGraph;
|
|
16
|
+
/**
|
|
17
|
+
* Clear the cached dependency graph (useful for testing or hot reload)
|
|
18
|
+
*/
|
|
19
|
+
export declare function clearDependencyCache(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Get dependency information for a specific resource
|
|
22
|
+
*
|
|
23
|
+
* @param domain - The domain containing the resource (e.g., "virtual")
|
|
24
|
+
* @param resource - The resource name (e.g., "http-loadbalancer")
|
|
25
|
+
* @returns Resource dependencies or null if not found
|
|
26
|
+
*/
|
|
27
|
+
export declare function getResourceDependencies(domain: string, resource: string): ResourceDependencies | null;
|
|
28
|
+
/**
|
|
29
|
+
* Get the recommended creation order for a resource and its dependencies
|
|
30
|
+
*
|
|
31
|
+
* @param domain - The domain containing the resource
|
|
32
|
+
* @param resource - The resource name
|
|
33
|
+
* @returns Array of resource keys in creation order (prerequisites first)
|
|
34
|
+
*/
|
|
35
|
+
export declare function getCreationOrder(domain: string, resource: string): string[];
|
|
36
|
+
/**
|
|
37
|
+
* Get resources that must be created before this resource
|
|
38
|
+
*
|
|
39
|
+
* @param domain - The domain containing the resource
|
|
40
|
+
* @param resource - The resource name
|
|
41
|
+
* @returns Array of prerequisite resource references
|
|
42
|
+
*/
|
|
43
|
+
export declare function getPrerequisiteResources(domain: string, resource: string): ResourceReference[];
|
|
44
|
+
/**
|
|
45
|
+
* Get resources that depend on this resource
|
|
46
|
+
*
|
|
47
|
+
* @param domain - The domain containing the resource
|
|
48
|
+
* @param resource - The resource name
|
|
49
|
+
* @returns Array of dependent resource references
|
|
50
|
+
*/
|
|
51
|
+
export declare function getDependentResources(domain: string, resource: string): ResourceReference[];
|
|
52
|
+
/**
|
|
53
|
+
* Get mutually exclusive field groups for a resource
|
|
54
|
+
*
|
|
55
|
+
* @param domain - The domain containing the resource
|
|
56
|
+
* @param resource - The resource name
|
|
57
|
+
* @returns Array of oneOf field groups
|
|
58
|
+
*/
|
|
59
|
+
export declare function getOneOfGroups(domain: string, resource: string): OneOfGroup[];
|
|
60
|
+
/**
|
|
61
|
+
* Get subscription requirements for a resource
|
|
62
|
+
*
|
|
63
|
+
* @param domain - The domain containing the resource
|
|
64
|
+
* @param resource - The resource name
|
|
65
|
+
* @returns Array of subscription requirements
|
|
66
|
+
*/
|
|
67
|
+
export declare function getSubscriptionRequirements(domain: string, resource: string): SubscriptionRequirement[];
|
|
68
|
+
/**
|
|
69
|
+
* Get all resources that require a specific addon service subscription
|
|
70
|
+
*
|
|
71
|
+
* @param addonService - The addon service ID (e.g., "f5xc_waap_advanced")
|
|
72
|
+
* @returns Array of resource keys requiring this subscription
|
|
73
|
+
*/
|
|
74
|
+
export declare function getResourcesRequiringSubscription(addonService: string): string[];
|
|
75
|
+
/**
|
|
76
|
+
* Get all available addon services
|
|
77
|
+
*
|
|
78
|
+
* @returns Array of addon service IDs
|
|
79
|
+
*/
|
|
80
|
+
export declare function getAvailableAddonServices(): string[];
|
|
81
|
+
/**
|
|
82
|
+
* Generate a comprehensive dependency report for a resource
|
|
83
|
+
*
|
|
84
|
+
* @param domain - The domain containing the resource
|
|
85
|
+
* @param resource - The resource name
|
|
86
|
+
* @param action - The type of information to retrieve
|
|
87
|
+
* @returns Formatted dependency discovery response
|
|
88
|
+
*/
|
|
89
|
+
export declare function generateDependencyReport(domain: string, resource: string, action?: DependencyDiscoveryAction): DependencyDiscoveryResponse;
|
|
90
|
+
/**
|
|
91
|
+
* Get dependency graph statistics
|
|
92
|
+
*/
|
|
93
|
+
export declare function getDependencyStats(): {
|
|
94
|
+
totalResources: number;
|
|
95
|
+
totalDependencies: number;
|
|
96
|
+
totalOneOfGroups: number;
|
|
97
|
+
totalSubscriptions: number;
|
|
98
|
+
addonServices: string[];
|
|
99
|
+
graphVersion: string;
|
|
100
|
+
generatedAt: string;
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Search for resources by domain
|
|
104
|
+
*
|
|
105
|
+
* @param domain - The domain to search in
|
|
106
|
+
* @returns Array of resource names in the domain
|
|
107
|
+
*/
|
|
108
|
+
export declare function getResourcesInDomain(domain: string): string[];
|
|
109
|
+
/**
|
|
110
|
+
* Get all domains in the dependency graph
|
|
111
|
+
*/
|
|
112
|
+
export declare function getAllDependencyDomains(): string[];
|
|
113
|
+
//# sourceMappingURL=dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../../src/tools/discovery/dependencies.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,EACV,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,EAC5B,MAAM,qCAAqC,CAAC;AAoB7C;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,eAAe,CAerD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,oBAAoB,GAAG,IAAI,CAI7B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAM3E;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAM9F;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAM3F;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAM7E;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,uBAAuB,EAAE,CAM3B;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAGhF;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,EAAE,CAGpD;AAYD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,yBAAkC,GACzC,2BAA2B,CAoD7B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB,CAsBA;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAW7D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CASlD"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Discovery Module
|
|
3
|
+
*
|
|
4
|
+
* Provides LLM-accessible tools for querying resource dependency information,
|
|
5
|
+
* prerequisite sequences, mutually exclusive fields, and subscription requirements.
|
|
6
|
+
*
|
|
7
|
+
* This module enables LLMs to understand resource relationships and execute
|
|
8
|
+
* operations in the correct order without hallucinating dependencies.
|
|
9
|
+
*/
|
|
10
|
+
import { readFileSync, existsSync } from "fs";
|
|
11
|
+
import { join, dirname } from "path";
|
|
12
|
+
import { fileURLToPath } from "url";
|
|
13
|
+
import { deserializeDependencyGraph, getResourcesBySubscription, } from "../../generator/dependency-graph.js";
|
|
14
|
+
import { createResourceKey } from "../../generator/dependency-types.js";
|
|
15
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
16
|
+
const __dirname = dirname(__filename);
|
|
17
|
+
/**
|
|
18
|
+
* Cached dependency graph
|
|
19
|
+
*/
|
|
20
|
+
let cachedGraph = null;
|
|
21
|
+
/**
|
|
22
|
+
* Path to the generated dependency graph JSON
|
|
23
|
+
*/
|
|
24
|
+
const DEPENDENCY_GRAPH_PATH = join(__dirname, "..", "generated", "dependency-graph.json");
|
|
25
|
+
/**
|
|
26
|
+
* Load the dependency graph from the generated JSON file
|
|
27
|
+
* Uses caching for efficiency
|
|
28
|
+
*/
|
|
29
|
+
export function loadDependencyGraph() {
|
|
30
|
+
if (cachedGraph) {
|
|
31
|
+
return cachedGraph;
|
|
32
|
+
}
|
|
33
|
+
if (!existsSync(DEPENDENCY_GRAPH_PATH)) {
|
|
34
|
+
throw new Error(`Dependency graph not found at ${DEPENDENCY_GRAPH_PATH}. ` +
|
|
35
|
+
"Run 'npm run generate' to create it.");
|
|
36
|
+
}
|
|
37
|
+
const json = readFileSync(DEPENDENCY_GRAPH_PATH, "utf-8");
|
|
38
|
+
cachedGraph = deserializeDependencyGraph(json);
|
|
39
|
+
return cachedGraph;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Clear the cached dependency graph (useful for testing or hot reload)
|
|
43
|
+
*/
|
|
44
|
+
export function clearDependencyCache() {
|
|
45
|
+
cachedGraph = null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get dependency information for a specific resource
|
|
49
|
+
*
|
|
50
|
+
* @param domain - The domain containing the resource (e.g., "virtual")
|
|
51
|
+
* @param resource - The resource name (e.g., "http-loadbalancer")
|
|
52
|
+
* @returns Resource dependencies or null if not found
|
|
53
|
+
*/
|
|
54
|
+
export function getResourceDependencies(domain, resource) {
|
|
55
|
+
const graph = loadDependencyGraph();
|
|
56
|
+
const key = createResourceKey(domain, resource);
|
|
57
|
+
return graph.dependencies[key] ?? null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get the recommended creation order for a resource and its dependencies
|
|
61
|
+
*
|
|
62
|
+
* @param domain - The domain containing the resource
|
|
63
|
+
* @param resource - The resource name
|
|
64
|
+
* @returns Array of resource keys in creation order (prerequisites first)
|
|
65
|
+
*/
|
|
66
|
+
export function getCreationOrder(domain, resource) {
|
|
67
|
+
const deps = getResourceDependencies(domain, resource);
|
|
68
|
+
if (!deps) {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
return deps.creationOrder;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get resources that must be created before this resource
|
|
75
|
+
*
|
|
76
|
+
* @param domain - The domain containing the resource
|
|
77
|
+
* @param resource - The resource name
|
|
78
|
+
* @returns Array of prerequisite resource references
|
|
79
|
+
*/
|
|
80
|
+
export function getPrerequisiteResources(domain, resource) {
|
|
81
|
+
const deps = getResourceDependencies(domain, resource);
|
|
82
|
+
if (!deps) {
|
|
83
|
+
return [];
|
|
84
|
+
}
|
|
85
|
+
return deps.requires;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get resources that depend on this resource
|
|
89
|
+
*
|
|
90
|
+
* @param domain - The domain containing the resource
|
|
91
|
+
* @param resource - The resource name
|
|
92
|
+
* @returns Array of dependent resource references
|
|
93
|
+
*/
|
|
94
|
+
export function getDependentResources(domain, resource) {
|
|
95
|
+
const deps = getResourceDependencies(domain, resource);
|
|
96
|
+
if (!deps) {
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
99
|
+
return deps.requiredBy;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get mutually exclusive field groups for a resource
|
|
103
|
+
*
|
|
104
|
+
* @param domain - The domain containing the resource
|
|
105
|
+
* @param resource - The resource name
|
|
106
|
+
* @returns Array of oneOf field groups
|
|
107
|
+
*/
|
|
108
|
+
export function getOneOfGroups(domain, resource) {
|
|
109
|
+
const deps = getResourceDependencies(domain, resource);
|
|
110
|
+
if (!deps) {
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
return deps.oneOfGroups;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get subscription requirements for a resource
|
|
117
|
+
*
|
|
118
|
+
* @param domain - The domain containing the resource
|
|
119
|
+
* @param resource - The resource name
|
|
120
|
+
* @returns Array of subscription requirements
|
|
121
|
+
*/
|
|
122
|
+
export function getSubscriptionRequirements(domain, resource) {
|
|
123
|
+
const deps = getResourceDependencies(domain, resource);
|
|
124
|
+
if (!deps) {
|
|
125
|
+
return [];
|
|
126
|
+
}
|
|
127
|
+
return deps.subscriptions;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get all resources that require a specific addon service subscription
|
|
131
|
+
*
|
|
132
|
+
* @param addonService - The addon service ID (e.g., "f5xc_waap_advanced")
|
|
133
|
+
* @returns Array of resource keys requiring this subscription
|
|
134
|
+
*/
|
|
135
|
+
export function getResourcesRequiringSubscription(addonService) {
|
|
136
|
+
const graph = loadDependencyGraph();
|
|
137
|
+
return getResourcesBySubscription(addonService, graph);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get all available addon services
|
|
141
|
+
*
|
|
142
|
+
* @returns Array of addon service IDs
|
|
143
|
+
*/
|
|
144
|
+
export function getAvailableAddonServices() {
|
|
145
|
+
const graph = loadDependencyGraph();
|
|
146
|
+
return Object.keys(graph.addonServiceMap);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Format a resource reference for human-readable output
|
|
150
|
+
*/
|
|
151
|
+
function formatResourceRef(ref) {
|
|
152
|
+
const domain = ref.domain || "unknown";
|
|
153
|
+
const required = ref.required ? " (required)" : " (optional)";
|
|
154
|
+
const inline = ref.inline ? " [inline allowed]" : "";
|
|
155
|
+
return `${domain}/${ref.resourceType}${required}${inline}`;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Generate a comprehensive dependency report for a resource
|
|
159
|
+
*
|
|
160
|
+
* @param domain - The domain containing the resource
|
|
161
|
+
* @param resource - The resource name
|
|
162
|
+
* @param action - The type of information to retrieve
|
|
163
|
+
* @returns Formatted dependency discovery response
|
|
164
|
+
*/
|
|
165
|
+
export function generateDependencyReport(domain, resource, action = "full") {
|
|
166
|
+
const deps = getResourceDependencies(domain, resource);
|
|
167
|
+
if (!deps) {
|
|
168
|
+
return {
|
|
169
|
+
resource,
|
|
170
|
+
domain,
|
|
171
|
+
prerequisites: [],
|
|
172
|
+
dependents: [],
|
|
173
|
+
mutuallyExclusiveFields: [],
|
|
174
|
+
subscriptionRequirements: [],
|
|
175
|
+
creationSequence: [],
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const response = {
|
|
179
|
+
resource,
|
|
180
|
+
domain,
|
|
181
|
+
prerequisites: [],
|
|
182
|
+
dependents: [],
|
|
183
|
+
mutuallyExclusiveFields: [],
|
|
184
|
+
subscriptionRequirements: [],
|
|
185
|
+
creationSequence: [],
|
|
186
|
+
};
|
|
187
|
+
// Build response based on action
|
|
188
|
+
if (action === "full" || action === "prerequisites") {
|
|
189
|
+
response.prerequisites = deps.requires.map(formatResourceRef);
|
|
190
|
+
}
|
|
191
|
+
if (action === "full" || action === "dependents") {
|
|
192
|
+
response.dependents = deps.requiredBy.map(formatResourceRef);
|
|
193
|
+
}
|
|
194
|
+
if (action === "full" || action === "oneOf") {
|
|
195
|
+
response.mutuallyExclusiveFields = deps.oneOfGroups.map((group) => ({
|
|
196
|
+
field: group.choiceField,
|
|
197
|
+
options: group.options,
|
|
198
|
+
}));
|
|
199
|
+
}
|
|
200
|
+
if (action === "full" || action === "subscriptions") {
|
|
201
|
+
response.subscriptionRequirements = deps.subscriptions.map((sub) => `${sub.displayName} (${sub.tier})${sub.required ? " - required" : ""}`);
|
|
202
|
+
}
|
|
203
|
+
if (action === "full" || action === "creationOrder") {
|
|
204
|
+
response.creationSequence = deps.creationOrder;
|
|
205
|
+
}
|
|
206
|
+
return response;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Get dependency graph statistics
|
|
210
|
+
*/
|
|
211
|
+
export function getDependencyStats() {
|
|
212
|
+
const graph = loadDependencyGraph();
|
|
213
|
+
let totalDependencies = 0;
|
|
214
|
+
let totalOneOfGroups = 0;
|
|
215
|
+
let totalSubscriptions = 0;
|
|
216
|
+
for (const deps of Object.values(graph.dependencies)) {
|
|
217
|
+
totalDependencies += deps.requires.length;
|
|
218
|
+
totalOneOfGroups += deps.oneOfGroups.length;
|
|
219
|
+
totalSubscriptions += deps.subscriptions.length;
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
totalResources: graph.totalResources,
|
|
223
|
+
totalDependencies,
|
|
224
|
+
totalOneOfGroups,
|
|
225
|
+
totalSubscriptions,
|
|
226
|
+
addonServices: Object.keys(graph.addonServiceMap),
|
|
227
|
+
graphVersion: graph.version,
|
|
228
|
+
generatedAt: graph.generatedAt,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Search for resources by domain
|
|
233
|
+
*
|
|
234
|
+
* @param domain - The domain to search in
|
|
235
|
+
* @returns Array of resource names in the domain
|
|
236
|
+
*/
|
|
237
|
+
export function getResourcesInDomain(domain) {
|
|
238
|
+
const graph = loadDependencyGraph();
|
|
239
|
+
const resources = [];
|
|
240
|
+
for (const [_key, deps] of Object.entries(graph.dependencies)) {
|
|
241
|
+
if (deps.domain === domain) {
|
|
242
|
+
resources.push(deps.resource);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return resources.sort();
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Get all domains in the dependency graph
|
|
249
|
+
*/
|
|
250
|
+
export function getAllDependencyDomains() {
|
|
251
|
+
const graph = loadDependencyGraph();
|
|
252
|
+
const domains = new Set();
|
|
253
|
+
for (const deps of Object.values(graph.dependencies)) {
|
|
254
|
+
domains.add(deps.domain);
|
|
255
|
+
}
|
|
256
|
+
return Array.from(domains).sort();
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../src/tools/discovery/dependencies.ts"],"names":[],"mappings":"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"}
|