@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.
Files changed (329) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/README.md +415 -0
  3. package/dist/auth/credential-manager.d.ts +151 -0
  4. package/dist/auth/credential-manager.d.ts.map +1 -0
  5. package/dist/auth/credential-manager.js +330 -0
  6. package/dist/auth/credential-manager.js.map +1 -0
  7. package/dist/auth/http-client.d.ts +81 -0
  8. package/dist/auth/http-client.d.ts.map +1 -0
  9. package/dist/auth/http-client.js +197 -0
  10. package/dist/auth/http-client.js.map +1 -0
  11. package/dist/auth/index.d.ts +8 -0
  12. package/dist/auth/index.d.ts.map +1 -0
  13. package/dist/auth/index.js +6 -0
  14. package/dist/auth/index.js.map +1 -0
  15. package/dist/config/config-manager.d.ts +72 -0
  16. package/dist/config/config-manager.d.ts.map +1 -0
  17. package/dist/config/config-manager.js +247 -0
  18. package/dist/config/config-manager.js.map +1 -0
  19. package/dist/config/index.d.ts +7 -0
  20. package/dist/config/index.d.ts.map +1 -0
  21. package/dist/config/index.js +7 -0
  22. package/dist/config/index.js.map +1 -0
  23. package/dist/config/schema.d.ts +74 -0
  24. package/dist/config/schema.d.ts.map +1 -0
  25. package/dist/config/schema.js +75 -0
  26. package/dist/config/schema.js.map +1 -0
  27. package/dist/config/types.d.ts +77 -0
  28. package/dist/config/types.d.ts.map +1 -0
  29. package/dist/config/types.js +31 -0
  30. package/dist/config/types.js.map +1 -0
  31. package/dist/generator/dependency-extractor.d.ts +103 -0
  32. package/dist/generator/dependency-extractor.d.ts.map +1 -0
  33. package/dist/generator/dependency-extractor.js +473 -0
  34. package/dist/generator/dependency-extractor.js.map +1 -0
  35. package/dist/generator/dependency-graph.d.ts +67 -0
  36. package/dist/generator/dependency-graph.d.ts.map +1 -0
  37. package/dist/generator/dependency-graph.js +330 -0
  38. package/dist/generator/dependency-graph.js.map +1 -0
  39. package/dist/generator/dependency-types.d.ts +206 -0
  40. package/dist/generator/dependency-types.d.ts.map +1 -0
  41. package/dist/generator/dependency-types.js +37 -0
  42. package/dist/generator/dependency-types.js.map +1 -0
  43. package/dist/generator/index.d.ts +7 -0
  44. package/dist/generator/index.d.ts.map +1 -0
  45. package/dist/generator/index.js +7 -0
  46. package/dist/generator/index.js.map +1 -0
  47. package/dist/generator/naming/acronyms.d.ts +81 -0
  48. package/dist/generator/naming/acronyms.d.ts.map +1 -0
  49. package/dist/generator/naming/acronyms.js +253 -0
  50. package/dist/generator/naming/acronyms.js.map +1 -0
  51. package/dist/generator/naming/index.d.ts +6 -0
  52. package/dist/generator/naming/index.d.ts.map +1 -0
  53. package/dist/generator/naming/index.js +6 -0
  54. package/dist/generator/naming/index.js.map +1 -0
  55. package/dist/generator/naming/volterra-mapping.d.ts +102 -0
  56. package/dist/generator/naming/volterra-mapping.d.ts.map +1 -0
  57. package/dist/generator/naming/volterra-mapping.js +259 -0
  58. package/dist/generator/naming/volterra-mapping.js.map +1 -0
  59. package/dist/generator/openapi-parser.d.ts +701 -0
  60. package/dist/generator/openapi-parser.d.ts.map +1 -0
  61. package/dist/generator/openapi-parser.js +704 -0
  62. package/dist/generator/openapi-parser.js.map +1 -0
  63. package/dist/generator/tool-generator.d.ts +118 -0
  64. package/dist/generator/tool-generator.d.ts.map +1 -0
  65. package/dist/generator/tool-generator.js +529 -0
  66. package/dist/generator/tool-generator.js.map +1 -0
  67. package/dist/generator/transformers/index.d.ts +7 -0
  68. package/dist/generator/transformers/index.d.ts.map +1 -0
  69. package/dist/generator/transformers/index.js +7 -0
  70. package/dist/generator/transformers/index.js.map +1 -0
  71. package/dist/generator/transformers/normalize-examples.d.ts +48 -0
  72. package/dist/generator/transformers/normalize-examples.d.ts.map +1 -0
  73. package/dist/generator/transformers/normalize-examples.js +66 -0
  74. package/dist/generator/transformers/normalize-examples.js.map +1 -0
  75. package/dist/index.d.ts +22 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +101 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/prompts/error-resolution.d.ts +70 -0
  80. package/dist/prompts/error-resolution.d.ts.map +1 -0
  81. package/dist/prompts/error-resolution.js +350 -0
  82. package/dist/prompts/error-resolution.js.map +1 -0
  83. package/dist/prompts/index.d.ts +8 -0
  84. package/dist/prompts/index.d.ts.map +1 -0
  85. package/dist/prompts/index.js +7 -0
  86. package/dist/prompts/index.js.map +1 -0
  87. package/dist/prompts/workflows.d.ts +59 -0
  88. package/dist/prompts/workflows.d.ts.map +1 -0
  89. package/dist/prompts/workflows.js +441 -0
  90. package/dist/prompts/workflows.js.map +1 -0
  91. package/dist/resources/handlers.d.ts +70 -0
  92. package/dist/resources/handlers.d.ts.map +1 -0
  93. package/dist/resources/handlers.js +270 -0
  94. package/dist/resources/handlers.js.map +1 -0
  95. package/dist/resources/index.d.ts +8 -0
  96. package/dist/resources/index.d.ts.map +1 -0
  97. package/dist/resources/index.js +6 -0
  98. package/dist/resources/index.js.map +1 -0
  99. package/dist/resources/templates.d.ts +86 -0
  100. package/dist/resources/templates.d.ts.map +1 -0
  101. package/dist/resources/templates.js +248 -0
  102. package/dist/resources/templates.js.map +1 -0
  103. package/dist/server.d.ts +78 -0
  104. package/dist/server.d.ts.map +1 -0
  105. package/dist/server.js +721 -0
  106. package/dist/server.js.map +1 -0
  107. package/dist/tools/discovery/best-practices.d.ts +140 -0
  108. package/dist/tools/discovery/best-practices.d.ts.map +1 -0
  109. package/dist/tools/discovery/best-practices.js +499 -0
  110. package/dist/tools/discovery/best-practices.js.map +1 -0
  111. package/dist/tools/discovery/consolidate.d.ts +97 -0
  112. package/dist/tools/discovery/consolidate.d.ts.map +1 -0
  113. package/dist/tools/discovery/consolidate.js +200 -0
  114. package/dist/tools/discovery/consolidate.js.map +1 -0
  115. package/dist/tools/discovery/cost-estimator.d.ts +114 -0
  116. package/dist/tools/discovery/cost-estimator.d.ts.map +1 -0
  117. package/dist/tools/discovery/cost-estimator.js +273 -0
  118. package/dist/tools/discovery/cost-estimator.js.map +1 -0
  119. package/dist/tools/discovery/dependencies.d.ts +113 -0
  120. package/dist/tools/discovery/dependencies.d.ts.map +1 -0
  121. package/dist/tools/discovery/dependencies.js +258 -0
  122. package/dist/tools/discovery/dependencies.js.map +1 -0
  123. package/dist/tools/discovery/describe.d.ts +133 -0
  124. package/dist/tools/discovery/describe.d.ts.map +1 -0
  125. package/dist/tools/discovery/describe.js +208 -0
  126. package/dist/tools/discovery/describe.js.map +1 -0
  127. package/dist/tools/discovery/execute.d.ts +96 -0
  128. package/dist/tools/discovery/execute.d.ts.map +1 -0
  129. package/dist/tools/discovery/execute.js +220 -0
  130. package/dist/tools/discovery/execute.js.map +1 -0
  131. package/dist/tools/discovery/index-loader.d.ts +28 -0
  132. package/dist/tools/discovery/index-loader.d.ts.map +1 -0
  133. package/dist/tools/discovery/index-loader.js +72 -0
  134. package/dist/tools/discovery/index-loader.js.map +1 -0
  135. package/dist/tools/discovery/index.d.ts +363 -0
  136. package/dist/tools/discovery/index.d.ts.map +1 -0
  137. package/dist/tools/discovery/index.js +361 -0
  138. package/dist/tools/discovery/index.js.map +1 -0
  139. package/dist/tools/discovery/resolver.d.ts +119 -0
  140. package/dist/tools/discovery/resolver.d.ts.map +1 -0
  141. package/dist/tools/discovery/resolver.js +369 -0
  142. package/dist/tools/discovery/resolver.js.map +1 -0
  143. package/dist/tools/discovery/search.d.ts +41 -0
  144. package/dist/tools/discovery/search.d.ts.map +1 -0
  145. package/dist/tools/discovery/search.js +176 -0
  146. package/dist/tools/discovery/search.js.map +1 -0
  147. package/dist/tools/discovery/types.d.ts +91 -0
  148. package/dist/tools/discovery/types.d.ts.map +1 -0
  149. package/dist/tools/discovery/types.js +9 -0
  150. package/dist/tools/discovery/types.js.map +1 -0
  151. package/dist/tools/discovery/validate.d.ts +63 -0
  152. package/dist/tools/discovery/validate.d.ts.map +1 -0
  153. package/dist/tools/discovery/validate.js +239 -0
  154. package/dist/tools/discovery/validate.js.map +1 -0
  155. package/dist/tools/generated/admin_console_and_ui/index.d.ts +8 -0
  156. package/dist/tools/generated/admin_console_and_ui/index.d.ts.map +1 -0
  157. package/dist/tools/generated/admin_console_and_ui/index.js +265 -0
  158. package/dist/tools/generated/admin_console_and_ui/index.js.map +1 -0
  159. package/dist/tools/generated/api/index.d.ts +8 -0
  160. package/dist/tools/generated/api/index.d.ts.map +1 -0
  161. package/dist/tools/generated/api/index.js +7016 -0
  162. package/dist/tools/generated/api/index.js.map +1 -0
  163. package/dist/tools/generated/authentication/index.d.ts +8 -0
  164. package/dist/tools/generated/authentication/index.d.ts.map +1 -0
  165. package/dist/tools/generated/authentication/index.js +907 -0
  166. package/dist/tools/generated/authentication/index.js.map +1 -0
  167. package/dist/tools/generated/bigip/index.d.ts +8 -0
  168. package/dist/tools/generated/bigip/index.d.ts.map +1 -0
  169. package/dist/tools/generated/bigip/index.js +3152 -0
  170. package/dist/tools/generated/bigip/index.js.map +1 -0
  171. package/dist/tools/generated/billing_and_usage/index.d.ts +8 -0
  172. package/dist/tools/generated/billing_and_usage/index.d.ts.map +1 -0
  173. package/dist/tools/generated/billing_and_usage/index.js +2452 -0
  174. package/dist/tools/generated/billing_and_usage/index.js.map +1 -0
  175. package/dist/tools/generated/blindfold/index.d.ts +8 -0
  176. package/dist/tools/generated/blindfold/index.d.ts.map +1 -0
  177. package/dist/tools/generated/blindfold/index.js +3790 -0
  178. package/dist/tools/generated/blindfold/index.js.map +1 -0
  179. package/dist/tools/generated/bot_and_threat_defense/index.d.ts +8 -0
  180. package/dist/tools/generated/bot_and_threat_defense/index.d.ts.map +1 -0
  181. package/dist/tools/generated/bot_and_threat_defense/index.js +2746 -0
  182. package/dist/tools/generated/bot_and_threat_defense/index.js.map +1 -0
  183. package/dist/tools/generated/cdn/index.d.ts +8 -0
  184. package/dist/tools/generated/cdn/index.d.ts.map +1 -0
  185. package/dist/tools/generated/cdn/index.js +2686 -0
  186. package/dist/tools/generated/cdn/index.js.map +1 -0
  187. package/dist/tools/generated/ce_management/index.d.ts +8 -0
  188. package/dist/tools/generated/ce_management/index.d.ts.map +1 -0
  189. package/dist/tools/generated/ce_management/index.js +3812 -0
  190. package/dist/tools/generated/ce_management/index.js.map +1 -0
  191. package/dist/tools/generated/certificates/index.d.ts +8 -0
  192. package/dist/tools/generated/certificates/index.d.ts.map +1 -0
  193. package/dist/tools/generated/certificates/index.js +2547 -0
  194. package/dist/tools/generated/certificates/index.js.map +1 -0
  195. package/dist/tools/generated/cloud_infrastructure/index.d.ts +8 -0
  196. package/dist/tools/generated/cloud_infrastructure/index.d.ts.map +1 -0
  197. package/dist/tools/generated/cloud_infrastructure/index.js +3959 -0
  198. package/dist/tools/generated/cloud_infrastructure/index.js.map +1 -0
  199. package/dist/tools/generated/container_services/index.d.ts +8 -0
  200. package/dist/tools/generated/container_services/index.d.ts.map +1 -0
  201. package/dist/tools/generated/container_services/index.js +2018 -0
  202. package/dist/tools/generated/container_services/index.js.map +1 -0
  203. package/dist/tools/generated/data_and_privacy_security/index.d.ts +8 -0
  204. package/dist/tools/generated/data_and_privacy_security/index.d.ts.map +1 -0
  205. package/dist/tools/generated/data_and_privacy_security/index.js +1662 -0
  206. package/dist/tools/generated/data_and_privacy_security/index.js.map +1 -0
  207. package/dist/tools/generated/data_intelligence/index.d.ts +8 -0
  208. package/dist/tools/generated/data_intelligence/index.d.ts.map +1 -0
  209. package/dist/tools/generated/data_intelligence/index.js +1600 -0
  210. package/dist/tools/generated/data_intelligence/index.js.map +1 -0
  211. package/dist/tools/generated/ddos/index.d.ts +8 -0
  212. package/dist/tools/generated/ddos/index.d.ts.map +1 -0
  213. package/dist/tools/generated/ddos/index.js +8091 -0
  214. package/dist/tools/generated/ddos/index.js.map +1 -0
  215. package/dist/tools/generated/dependency-graph.json +26358 -0
  216. package/dist/tools/generated/dns/index.d.ts +8 -0
  217. package/dist/tools/generated/dns/index.d.ts.map +1 -0
  218. package/dist/tools/generated/dns/index.js +6096 -0
  219. package/dist/tools/generated/dns/index.js.map +1 -0
  220. package/dist/tools/generated/generative_ai/index.d.ts +8 -0
  221. package/dist/tools/generated/generative_ai/index.d.ts.map +1 -0
  222. package/dist/tools/generated/generative_ai/index.js +1019 -0
  223. package/dist/tools/generated/generative_ai/index.js.map +1 -0
  224. package/dist/tools/generated/managed_kubernetes/index.d.ts +8 -0
  225. package/dist/tools/generated/managed_kubernetes/index.d.ts.map +1 -0
  226. package/dist/tools/generated/managed_kubernetes/index.js +3368 -0
  227. package/dist/tools/generated/managed_kubernetes/index.js.map +1 -0
  228. package/dist/tools/generated/marketplace/index.d.ts +8 -0
  229. package/dist/tools/generated/marketplace/index.d.ts.map +1 -0
  230. package/dist/tools/generated/marketplace/index.js +4329 -0
  231. package/dist/tools/generated/marketplace/index.js.map +1 -0
  232. package/dist/tools/generated/network/index.d.ts +8 -0
  233. package/dist/tools/generated/network/index.d.ts.map +1 -0
  234. package/dist/tools/generated/network/index.js +12424 -0
  235. package/dist/tools/generated/network/index.js.map +1 -0
  236. package/dist/tools/generated/network_security/index.d.ts +8 -0
  237. package/dist/tools/generated/network_security/index.d.ts.map +1 -0
  238. package/dist/tools/generated/network_security/index.js +9637 -0
  239. package/dist/tools/generated/network_security/index.js.map +1 -0
  240. package/dist/tools/generated/nginx_one/index.d.ts +8 -0
  241. package/dist/tools/generated/nginx_one/index.d.ts.map +1 -0
  242. package/dist/tools/generated/nginx_one/index.js +1692 -0
  243. package/dist/tools/generated/nginx_one/index.js.map +1 -0
  244. package/dist/tools/generated/object_storage/index.d.ts +8 -0
  245. package/dist/tools/generated/object_storage/index.d.ts.map +1 -0
  246. package/dist/tools/generated/object_storage/index.js +996 -0
  247. package/dist/tools/generated/object_storage/index.js.map +1 -0
  248. package/dist/tools/generated/observability/index.d.ts +8 -0
  249. package/dist/tools/generated/observability/index.d.ts.map +1 -0
  250. package/dist/tools/generated/observability/index.js +5285 -0
  251. package/dist/tools/generated/observability/index.js.map +1 -0
  252. package/dist/tools/generated/rate_limiting/index.d.ts +8 -0
  253. package/dist/tools/generated/rate_limiting/index.d.ts.map +1 -0
  254. package/dist/tools/generated/rate_limiting/index.js +2108 -0
  255. package/dist/tools/generated/rate_limiting/index.js.map +1 -0
  256. package/dist/tools/generated/secops_and_incident_response/index.d.ts +8 -0
  257. package/dist/tools/generated/secops_and_incident_response/index.d.ts.map +1 -0
  258. package/dist/tools/generated/secops_and_incident_response/index.js +710 -0
  259. package/dist/tools/generated/secops_and_incident_response/index.js.map +1 -0
  260. package/dist/tools/generated/service_mesh/index.d.ts +8 -0
  261. package/dist/tools/generated/service_mesh/index.d.ts.map +1 -0
  262. package/dist/tools/generated/service_mesh/index.js +6062 -0
  263. package/dist/tools/generated/service_mesh/index.js.map +1 -0
  264. package/dist/tools/generated/shape/index.d.ts +8 -0
  265. package/dist/tools/generated/shape/index.d.ts.map +1 -0
  266. package/dist/tools/generated/shape/index.js +19381 -0
  267. package/dist/tools/generated/shape/index.js.map +1 -0
  268. package/dist/tools/generated/sites/index.d.ts +8 -0
  269. package/dist/tools/generated/sites/index.d.ts.map +1 -0
  270. package/dist/tools/generated/sites/index.js +13160 -0
  271. package/dist/tools/generated/sites/index.js.map +1 -0
  272. package/dist/tools/generated/statistics/index.d.ts +8 -0
  273. package/dist/tools/generated/statistics/index.d.ts.map +1 -0
  274. package/dist/tools/generated/statistics/index.js +8131 -0
  275. package/dist/tools/generated/statistics/index.js.map +1 -0
  276. package/dist/tools/generated/support/index.d.ts +8 -0
  277. package/dist/tools/generated/support/index.d.ts.map +1 -0
  278. package/dist/tools/generated/support/index.js +5608 -0
  279. package/dist/tools/generated/support/index.js.map +1 -0
  280. package/dist/tools/generated/telemetry_and_insights/index.d.ts +8 -0
  281. package/dist/tools/generated/telemetry_and_insights/index.d.ts.map +1 -0
  282. package/dist/tools/generated/telemetry_and_insights/index.js +2404 -0
  283. package/dist/tools/generated/telemetry_and_insights/index.js.map +1 -0
  284. package/dist/tools/generated/tenant_and_identity/index.d.ts +8 -0
  285. package/dist/tools/generated/tenant_and_identity/index.d.ts.map +1 -0
  286. package/dist/tools/generated/tenant_and_identity/index.js +18938 -0
  287. package/dist/tools/generated/tenant_and_identity/index.js.map +1 -0
  288. package/dist/tools/generated/threat_campaign/index.d.ts +8 -0
  289. package/dist/tools/generated/threat_campaign/index.d.ts.map +1 -0
  290. package/dist/tools/generated/threat_campaign/index.js +102 -0
  291. package/dist/tools/generated/threat_campaign/index.js.map +1 -0
  292. package/dist/tools/generated/users/index.d.ts +8 -0
  293. package/dist/tools/generated/users/index.d.ts.map +1 -0
  294. package/dist/tools/generated/users/index.js +1515 -0
  295. package/dist/tools/generated/users/index.js.map +1 -0
  296. package/dist/tools/generated/virtual/index.d.ts +8 -0
  297. package/dist/tools/generated/virtual/index.d.ts.map +1 -0
  298. package/dist/tools/generated/virtual/index.js +11263 -0
  299. package/dist/tools/generated/virtual/index.js.map +1 -0
  300. package/dist/tools/generated/vpm_and_node_management/index.d.ts +8 -0
  301. package/dist/tools/generated/vpm_and_node_management/index.d.ts.map +1 -0
  302. package/dist/tools/generated/vpm_and_node_management/index.js +88 -0
  303. package/dist/tools/generated/vpm_and_node_management/index.js.map +1 -0
  304. package/dist/tools/generated/waf/index.d.ts +8 -0
  305. package/dist/tools/generated/waf/index.d.ts.map +1 -0
  306. package/dist/tools/generated/waf/index.js +4586 -0
  307. package/dist/tools/generated/waf/index.js.map +1 -0
  308. package/dist/tools/index.d.ts +7 -0
  309. package/dist/tools/index.d.ts.map +1 -0
  310. package/dist/tools/index.js +6 -0
  311. package/dist/tools/index.js.map +1 -0
  312. package/dist/tools/registry.d.ts +27 -0
  313. package/dist/tools/registry.d.ts.map +1 -0
  314. package/dist/tools/registry.js +115 -0
  315. package/dist/tools/registry.js.map +1 -0
  316. package/dist/utils/error-handling.d.ts +109 -0
  317. package/dist/utils/error-handling.d.ts.map +1 -0
  318. package/dist/utils/error-handling.js +239 -0
  319. package/dist/utils/error-handling.js.map +1 -0
  320. package/dist/utils/index.d.ts +7 -0
  321. package/dist/utils/index.d.ts.map +1 -0
  322. package/dist/utils/index.js +6 -0
  323. package/dist/utils/index.js.map +1 -0
  324. package/dist/utils/logging.d.ts +75 -0
  325. package/dist/utils/logging.d.ts.map +1 -0
  326. package/dist/utils/logging.js +131 -0
  327. package/dist/utils/logging.js.map +1 -0
  328. package/manifest.json +143 -0
  329. package/package.json +110 -0
@@ -0,0 +1,369 @@
1
+ /**
2
+ * Interactive Dependency Resolver
3
+ *
4
+ * Generates complete creation plans with all transitive dependencies,
5
+ * step-by-step workflows with tool names and required inputs,
6
+ * and handles oneOf groups with alternative paths.
7
+ */
8
+ import { getResourceDependencies, getPrerequisiteResources, getOneOfGroups, getSubscriptionRequirements, } from "./dependencies.js";
9
+ import { searchTools } from "./search.js";
10
+ import { getToolByName } from "../registry.js";
11
+ import { createResourceKey } from "../../generator/dependency-types.js";
12
+ /**
13
+ * Find the create tool for a resource
14
+ */
15
+ function findCreateTool(domain, resource) {
16
+ // Search for create tool matching this resource
17
+ const results = searchTools(`${resource} create`, {
18
+ domains: [domain],
19
+ operations: ["create"],
20
+ limit: 5,
21
+ });
22
+ if (results.length > 0 && results[0]) {
23
+ return results[0].tool.name;
24
+ }
25
+ // Try alternative naming patterns
26
+ const normalizedResource = resource.replace(/-/g, "_");
27
+ const altResults = searchTools(`${normalizedResource} create`, {
28
+ operations: ["create"],
29
+ limit: 5,
30
+ });
31
+ if (altResults.length > 0 && altResults[0]) {
32
+ return altResults[0].tool.name;
33
+ }
34
+ return null;
35
+ }
36
+ /**
37
+ * Get required input parameters for a tool
38
+ */
39
+ function getRequiredInputs(toolName) {
40
+ const tool = getToolByName(toolName);
41
+ if (!tool) {
42
+ return ["namespace", "name"];
43
+ }
44
+ const required = [];
45
+ // Add path parameters
46
+ for (const param of tool.pathParameters) {
47
+ required.push(param.name);
48
+ }
49
+ // Add required body fields (simplified - just common ones)
50
+ if (tool.requiredParams) {
51
+ required.push(...tool.requiredParams);
52
+ }
53
+ // Always include common required fields
54
+ if (!required.includes("namespace")) {
55
+ required.push("namespace");
56
+ }
57
+ if (!required.includes("name")) {
58
+ required.push("name");
59
+ }
60
+ return [...new Set(required)];
61
+ }
62
+ /**
63
+ * Resolve all transitive dependencies for a resource
64
+ */
65
+ function resolveTransitiveDependencies(domain, resource, existingResources, visited, includeOptional, maxDepth, currentDepth = 0) {
66
+ const key = createResourceKey(domain, resource);
67
+ if (visited.has(key) || currentDepth > maxDepth) {
68
+ return [];
69
+ }
70
+ visited.add(key);
71
+ const prereqs = getPrerequisiteResources(domain, resource);
72
+ const allDeps = [];
73
+ for (const prereq of prereqs) {
74
+ // Skip optional if not requested
75
+ if (!prereq.required && !includeOptional) {
76
+ continue;
77
+ }
78
+ // Skip if already exists
79
+ const prereqKey = createResourceKey(prereq.domain, prereq.resourceType);
80
+ if (existingResources.has(prereqKey)) {
81
+ continue;
82
+ }
83
+ // Recursively resolve this dependency's dependencies
84
+ const transitive = resolveTransitiveDependencies(prereq.domain, prereq.resourceType, existingResources, visited, includeOptional, maxDepth, currentDepth + 1);
85
+ allDeps.push(...transitive);
86
+ allDeps.push(prereq);
87
+ }
88
+ return allDeps;
89
+ }
90
+ /**
91
+ * Topologically sort dependencies
92
+ */
93
+ function topologicalSort(dependencies) {
94
+ // Build adjacency list
95
+ const graph = new Map();
96
+ const inDegree = new Map();
97
+ const resourceMap = new Map();
98
+ for (const dep of dependencies) {
99
+ const key = createResourceKey(dep.domain, dep.resourceType);
100
+ resourceMap.set(key, dep);
101
+ if (!graph.has(key)) {
102
+ graph.set(key, new Set());
103
+ inDegree.set(key, 0);
104
+ }
105
+ }
106
+ // Build edges based on dependencies
107
+ for (const dep of dependencies) {
108
+ const key = createResourceKey(dep.domain, dep.resourceType);
109
+ const prereqs = getPrerequisiteResources(dep.domain, dep.resourceType);
110
+ for (const prereq of prereqs) {
111
+ const prereqKey = createResourceKey(prereq.domain, prereq.resourceType);
112
+ if (graph.has(prereqKey)) {
113
+ graph.get(prereqKey)?.add(key);
114
+ inDegree.set(key, (inDegree.get(key) ?? 0) + 1);
115
+ }
116
+ }
117
+ }
118
+ // Kahn's algorithm
119
+ const queue = [];
120
+ for (const [key, degree] of inDegree) {
121
+ if (degree === 0) {
122
+ queue.push(key);
123
+ }
124
+ }
125
+ const sorted = [];
126
+ while (queue.length > 0) {
127
+ const key = queue.shift();
128
+ const resource = resourceMap.get(key);
129
+ if (resource) {
130
+ sorted.push(resource);
131
+ }
132
+ for (const neighbor of graph.get(key) ?? []) {
133
+ const newDegree = (inDegree.get(neighbor) ?? 1) - 1;
134
+ inDegree.set(neighbor, newDegree);
135
+ if (newDegree === 0) {
136
+ queue.push(neighbor);
137
+ }
138
+ }
139
+ }
140
+ return sorted;
141
+ }
142
+ /**
143
+ * Resolve dependencies and generate a complete creation plan
144
+ */
145
+ export function resolveDependencies(params) {
146
+ const { resource, domain, existingResources = [], includeOptional = false, maxDepth = 10, expandAlternatives = false, } = params;
147
+ const existingSet = new Set(existingResources);
148
+ const visited = new Set();
149
+ const warnings = [];
150
+ // Check if target resource exists in dependency graph
151
+ const deps = getResourceDependencies(domain, resource);
152
+ if (!deps) {
153
+ return {
154
+ success: false,
155
+ error: `Resource '${domain}/${resource}' not found in dependency graph. ` +
156
+ `Try searching for available resources with f5xc-api-search-resources.`,
157
+ };
158
+ }
159
+ // Resolve all transitive dependencies
160
+ const allDeps = resolveTransitiveDependencies(domain, resource, existingSet, visited, includeOptional, maxDepth);
161
+ // Topologically sort dependencies
162
+ const sortedDeps = topologicalSort(allDeps);
163
+ // Build workflow steps
164
+ const steps = [];
165
+ let stepNumber = 1;
166
+ for (const dep of sortedDeps) {
167
+ const toolName = findCreateTool(dep.domain, dep.resourceType);
168
+ if (!toolName) {
169
+ warnings.push(`No create tool found for ${dep.domain}/${dep.resourceType}. ` +
170
+ `This resource may need to be created manually.`);
171
+ continue;
172
+ }
173
+ const prereqs = getPrerequisiteResources(dep.domain, dep.resourceType);
174
+ const dependsOn = prereqs
175
+ .filter((p) => !existingSet.has(createResourceKey(p.domain, p.resourceType)))
176
+ .map((p) => `${p.domain}/${p.resourceType}`);
177
+ const oneOfGroups = getOneOfGroups(dep.domain, dep.resourceType);
178
+ const step = {
179
+ stepNumber,
180
+ action: "create",
181
+ domain: dep.domain,
182
+ resource: dep.resourceType,
183
+ toolName,
184
+ dependsOn,
185
+ optional: !dep.required,
186
+ requiredInputs: getRequiredInputs(toolName),
187
+ };
188
+ if (oneOfGroups.length > 0) {
189
+ step.oneOfChoices = oneOfGroups.map((g) => ({
190
+ field: g.choiceField,
191
+ options: g.options,
192
+ description: g.description,
193
+ }));
194
+ }
195
+ steps.push(step);
196
+ stepNumber++;
197
+ }
198
+ // Add final step for target resource
199
+ const targetToolName = findCreateTool(domain, resource);
200
+ if (targetToolName) {
201
+ const targetPrereqs = getPrerequisiteResources(domain, resource);
202
+ const dependsOn = targetPrereqs
203
+ .filter((p) => !existingSet.has(createResourceKey(p.domain, p.resourceType)))
204
+ .map((p) => `${p.domain}/${p.resourceType}`);
205
+ const oneOfGroups = getOneOfGroups(domain, resource);
206
+ const targetStep = {
207
+ stepNumber,
208
+ action: "create",
209
+ domain,
210
+ resource,
211
+ toolName: targetToolName,
212
+ dependsOn,
213
+ optional: false,
214
+ requiredInputs: getRequiredInputs(targetToolName),
215
+ };
216
+ if (oneOfGroups.length > 0) {
217
+ targetStep.oneOfChoices = oneOfGroups.map((g) => ({
218
+ field: g.choiceField,
219
+ options: g.options,
220
+ description: g.description,
221
+ }));
222
+ }
223
+ steps.push(targetStep);
224
+ }
225
+ else {
226
+ warnings.push(`No create tool found for target resource ${domain}/${resource}.`);
227
+ }
228
+ // Collect subscription requirements
229
+ const subscriptions = [];
230
+ const subs = getSubscriptionRequirements(domain, resource);
231
+ for (const sub of subs) {
232
+ subscriptions.push(`${sub.displayName} (${sub.tier})${sub.required ? " - required" : ""}`);
233
+ }
234
+ // Build alternatives for oneOf choices if requested
235
+ const alternatives = [];
236
+ if (expandAlternatives) {
237
+ const oneOfGroups = getOneOfGroups(domain, resource);
238
+ for (const group of oneOfGroups) {
239
+ for (const option of group.options) {
240
+ alternatives.push({
241
+ choiceField: group.choiceField,
242
+ selectedOption: option,
243
+ steps: [], // Would need more complex logic to fill these
244
+ description: `Alternative using ${option} for ${group.choiceField}`,
245
+ });
246
+ }
247
+ }
248
+ }
249
+ // Determine complexity
250
+ let complexity = "low";
251
+ if (steps.length > 5) {
252
+ complexity = "high";
253
+ }
254
+ else if (steps.length > 2) {
255
+ complexity = "medium";
256
+ }
257
+ const plan = {
258
+ targetResource: resource,
259
+ targetDomain: domain,
260
+ totalSteps: steps.length,
261
+ steps,
262
+ warnings,
263
+ alternatives,
264
+ subscriptions,
265
+ existingResources: existingResources.length > 0 ? existingResources : undefined,
266
+ complexity,
267
+ };
268
+ return {
269
+ success: true,
270
+ plan,
271
+ };
272
+ }
273
+ /**
274
+ * Format a creation plan for human-readable output
275
+ */
276
+ export function formatCreationPlan(plan) {
277
+ const lines = [];
278
+ lines.push(`# Creation Plan for ${plan.targetDomain}/${plan.targetResource}`);
279
+ lines.push("");
280
+ lines.push(`**Complexity**: ${plan.complexity}`);
281
+ lines.push(`**Total Steps**: ${plan.totalSteps}`);
282
+ lines.push("");
283
+ if (plan.subscriptions.length > 0) {
284
+ lines.push("## Required Subscriptions");
285
+ for (const sub of plan.subscriptions) {
286
+ lines.push(`- ${sub}`);
287
+ }
288
+ lines.push("");
289
+ }
290
+ if (plan.existingResources && plan.existingResources.length > 0) {
291
+ lines.push("## Existing Resources (Skipped)");
292
+ for (const res of plan.existingResources) {
293
+ lines.push(`- ${res}`);
294
+ }
295
+ lines.push("");
296
+ }
297
+ lines.push("## Workflow Steps");
298
+ lines.push("");
299
+ for (const step of plan.steps) {
300
+ lines.push(`### Step ${step.stepNumber}: ${step.action} ${step.domain}/${step.resource}`);
301
+ lines.push(`**Tool**: \`${step.toolName}\``);
302
+ lines.push(`**Optional**: ${step.optional ? "Yes" : "No"}`);
303
+ if (step.dependsOn.length > 0) {
304
+ lines.push(`**Depends On**: ${step.dependsOn.join(", ")}`);
305
+ }
306
+ if (step.requiredInputs.length > 0) {
307
+ lines.push(`**Required Inputs**: ${step.requiredInputs.join(", ")}`);
308
+ }
309
+ if (step.oneOfChoices && step.oneOfChoices.length > 0) {
310
+ lines.push("**Mutually Exclusive Choices**:");
311
+ for (const choice of step.oneOfChoices) {
312
+ lines.push(` - \`${choice.field}\`: Choose one of [${choice.options.join(", ")}]`);
313
+ }
314
+ }
315
+ if (step.notes) {
316
+ lines.push(`**Notes**: ${step.notes}`);
317
+ }
318
+ lines.push("");
319
+ }
320
+ if (plan.warnings.length > 0) {
321
+ lines.push("## Warnings");
322
+ for (const warning of plan.warnings) {
323
+ lines.push(`- ⚠️ ${warning}`);
324
+ }
325
+ lines.push("");
326
+ }
327
+ if (plan.alternatives.length > 0) {
328
+ lines.push("## Alternative Paths");
329
+ for (const alt of plan.alternatives) {
330
+ lines.push(`- **${alt.choiceField}**: ${alt.selectedOption}`);
331
+ if (alt.description) {
332
+ lines.push(` ${alt.description}`);
333
+ }
334
+ }
335
+ lines.push("");
336
+ }
337
+ return lines.join("\n");
338
+ }
339
+ /**
340
+ * Generate a compact JSON creation plan for programmatic use
341
+ */
342
+ export function generateCompactPlan(params) {
343
+ const result = resolveDependencies(params);
344
+ if (!result.success || !result.plan) {
345
+ return {
346
+ success: false,
347
+ error: result.error,
348
+ };
349
+ }
350
+ const steps = result.plan.steps.map((step) => {
351
+ const compactStep = {
352
+ tool: step.toolName,
353
+ resource: `${step.domain}/${step.resource}`,
354
+ inputs: step.requiredInputs,
355
+ };
356
+ if (step.oneOfChoices && step.oneOfChoices.length > 0) {
357
+ compactStep.choices = {};
358
+ for (const choice of step.oneOfChoices) {
359
+ compactStep.choices[choice.field] = choice.options;
360
+ }
361
+ }
362
+ return compactStep;
363
+ });
364
+ return {
365
+ success: true,
366
+ steps,
367
+ };
368
+ }
369
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/tools/discovery/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Tool Search Implementation
3
+ *
4
+ * Provides natural language search across the tool index.
5
+ * Uses lightweight text matching for efficient discovery.
6
+ */
7
+ import type { ToolIndexEntry, SearchResult, SearchOptions } from "./types.js";
8
+ /**
9
+ * Search for tools matching a natural language query
10
+ *
11
+ * @param query - Natural language search query
12
+ * @param options - Search options
13
+ * @returns Ranked list of matching tools
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * // Find load balancer tools
18
+ * const results = searchTools("http load balancer");
19
+ *
20
+ * // Find create operations in WAAP domain
21
+ * const results = searchTools("create", { domains: ["waap"], operations: ["create"] });
22
+ * ```
23
+ */
24
+ export declare function searchTools(query: string, options?: SearchOptions): SearchResult[];
25
+ /**
26
+ * Get tools by exact domain
27
+ */
28
+ export declare function getToolsByDomain(domain: string): ToolIndexEntry[];
29
+ /**
30
+ * Get tools by resource name
31
+ */
32
+ export declare function getToolsByResource(resource: string): ToolIndexEntry[];
33
+ /**
34
+ * Get all available domains
35
+ */
36
+ export declare function getAvailableDomains(): string[];
37
+ /**
38
+ * Get tool count by domain
39
+ */
40
+ export declare function getToolCountByDomain(): Record<string, number>;
41
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/tools/discovery/search.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAiG9E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,YAAY,EAAE,CAkEtF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE,CAGjE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CAIrE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAG9C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAG7D"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Tool Search Implementation
3
+ *
4
+ * Provides natural language search across the tool index.
5
+ * Uses lightweight text matching for efficient discovery.
6
+ */
7
+ import { getToolIndex } from "./index-loader.js";
8
+ import { getPrerequisiteResources } from "./dependencies.js";
9
+ /**
10
+ * Normalize text for search matching
11
+ */
12
+ function normalizeText(text) {
13
+ return text
14
+ .toLowerCase()
15
+ .replace(/[-_]/g, " ")
16
+ .replace(/[^a-z0-9\s]/g, "")
17
+ .trim();
18
+ }
19
+ /**
20
+ * Tokenize text into searchable terms
21
+ */
22
+ function tokenize(text) {
23
+ return normalizeText(text)
24
+ .split(/\s+/)
25
+ .filter((term) => term.length > 1);
26
+ }
27
+ /**
28
+ * Calculate relevance score between query and tool
29
+ */
30
+ function calculateScore(query, tool) {
31
+ const queryTerms = tokenize(query);
32
+ const matchedTerms = [];
33
+ if (queryTerms.length === 0) {
34
+ return { score: 0, matchedTerms };
35
+ }
36
+ // Build searchable text from tool
37
+ const toolText = [tool.name, tool.domain, tool.resource, tool.operation, tool.summary].join(" ");
38
+ const normalizedToolText = normalizeText(toolText);
39
+ const toolTerms = new Set(tokenize(toolText));
40
+ let matchCount = 0;
41
+ for (const queryTerm of queryTerms) {
42
+ // Exact term match
43
+ if (toolTerms.has(queryTerm)) {
44
+ matchCount += 1;
45
+ matchedTerms.push(queryTerm);
46
+ continue;
47
+ }
48
+ // Partial match (query term contained in tool text)
49
+ if (normalizedToolText.includes(queryTerm)) {
50
+ matchCount += 0.7;
51
+ matchedTerms.push(queryTerm);
52
+ continue;
53
+ }
54
+ // Check if any tool term starts with query term (prefix match)
55
+ for (const toolTerm of toolTerms) {
56
+ if (toolTerm.startsWith(queryTerm)) {
57
+ matchCount += 0.5;
58
+ matchedTerms.push(queryTerm);
59
+ break;
60
+ }
61
+ }
62
+ }
63
+ // Boost scores for specific matches
64
+ let score = matchCount / queryTerms.length;
65
+ // Boost for domain match
66
+ if (normalizeText(tool.domain).includes(normalizeText(query.split(" ")[0] || ""))) {
67
+ score *= 1.2;
68
+ }
69
+ // Boost for operation match
70
+ const operationTerms = ["create", "get", "list", "update", "delete", "patch"];
71
+ for (const opTerm of operationTerms) {
72
+ if (query.toLowerCase().includes(opTerm) && tool.operation === opTerm) {
73
+ score *= 1.3;
74
+ break;
75
+ }
76
+ }
77
+ // Boost for resource match
78
+ if (normalizeText(tool.resource).includes(normalizeText(query))) {
79
+ score *= 1.4;
80
+ }
81
+ // Cap score at 1.0
82
+ return { score: Math.min(score, 1), matchedTerms: [...new Set(matchedTerms)] };
83
+ }
84
+ /**
85
+ * Search for tools matching a natural language query
86
+ *
87
+ * @param query - Natural language search query
88
+ * @param options - Search options
89
+ * @returns Ranked list of matching tools
90
+ *
91
+ * @example
92
+ * ```typescript
93
+ * // Find load balancer tools
94
+ * const results = searchTools("http load balancer");
95
+ *
96
+ * // Find create operations in WAAP domain
97
+ * const results = searchTools("create", { domains: ["waap"], operations: ["create"] });
98
+ * ```
99
+ */
100
+ export function searchTools(query, options = {}) {
101
+ const { limit = 10, domains, operations, minScore = 0.1, excludeDangerous, excludeDeprecated, includeDependencies, } = options;
102
+ const index = getToolIndex();
103
+ let tools = index.tools;
104
+ // Apply domain filter
105
+ if (domains && domains.length > 0) {
106
+ const domainSet = new Set(domains.map((d) => d.toLowerCase()));
107
+ tools = tools.filter((t) => domainSet.has(t.domain.toLowerCase()));
108
+ }
109
+ // Apply operation filter
110
+ if (operations && operations.length > 0) {
111
+ const opSet = new Set(operations.map((o) => o.toLowerCase()));
112
+ tools = tools.filter((t) => opSet.has(t.operation.toLowerCase()));
113
+ }
114
+ // Phase A: Apply danger level filter
115
+ if (excludeDangerous) {
116
+ tools = tools.filter((t) => t.dangerLevel !== "high");
117
+ }
118
+ // Phase A: Apply deprecation filter
119
+ if (excludeDeprecated) {
120
+ tools = tools.filter((t) => !t.isDeprecated);
121
+ }
122
+ // Score and rank tools
123
+ const results = [];
124
+ for (const tool of tools) {
125
+ const { score, matchedTerms } = calculateScore(query, tool);
126
+ if (score >= minScore) {
127
+ const result = { tool, score, matchedTerms };
128
+ // Phase B: Add prerequisite hints for create operations
129
+ if (includeDependencies && tool.operation === "create") {
130
+ const prereqs = getPrerequisiteResources(tool.domain, tool.resource);
131
+ if (prereqs.length > 0) {
132
+ const resourceNames = prereqs.map((p) => `${p.domain}/${p.resourceType}`);
133
+ result.prerequisites = {
134
+ resources: resourceNames,
135
+ hint: `To create ${tool.resource}, you first need: ${prereqs.map((p) => p.resourceType).join(", ")}`,
136
+ };
137
+ }
138
+ }
139
+ results.push(result);
140
+ }
141
+ }
142
+ // Sort by score descending
143
+ results.sort((a, b) => b.score - a.score);
144
+ // Return top results
145
+ return results.slice(0, limit);
146
+ }
147
+ /**
148
+ * Get tools by exact domain
149
+ */
150
+ export function getToolsByDomain(domain) {
151
+ const index = getToolIndex();
152
+ return index.tools.filter((t) => t.domain.toLowerCase() === domain.toLowerCase());
153
+ }
154
+ /**
155
+ * Get tools by resource name
156
+ */
157
+ export function getToolsByResource(resource) {
158
+ const index = getToolIndex();
159
+ const normalizedResource = normalizeText(resource);
160
+ return index.tools.filter((t) => normalizeText(t.resource).includes(normalizedResource));
161
+ }
162
+ /**
163
+ * Get all available domains
164
+ */
165
+ export function getAvailableDomains() {
166
+ const index = getToolIndex();
167
+ return Object.keys(index.metadata.domains);
168
+ }
169
+ /**
170
+ * Get tool count by domain
171
+ */
172
+ export function getToolCountByDomain() {
173
+ const index = getToolIndex();
174
+ return { ...index.metadata.domains };
175
+ }
176
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/tools/discovery/search.ts"],"names":[],"mappings":"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"}