@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,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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"}