@confluentinc/mcp-confluent 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (489) hide show
  1. package/README.md +57 -34
  2. package/config.example.yaml +36 -7
  3. package/config.oauth.example.yaml +14 -1
  4. package/dist/build-config.d.ts +1 -0
  5. package/dist/build-config.d.ts.map +1 -1
  6. package/dist/build-config.js +1 -0
  7. package/dist/build-config.js.map +1 -1
  8. package/dist/cli.d.ts +1 -1
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +128 -94
  11. package/dist/cli.js.map +1 -1
  12. package/dist/config/env-config.d.ts +9 -3
  13. package/dist/config/env-config.d.ts.map +1 -1
  14. package/dist/config/env-config.js +15 -34
  15. package/dist/config/env-config.js.map +1 -1
  16. package/dist/config/models.d.ts +105 -13
  17. package/dist/config/models.d.ts.map +1 -1
  18. package/dist/config/models.js +49 -37
  19. package/dist/config/models.js.map +1 -1
  20. package/dist/confluent/base-client-manager.d.ts +3 -1
  21. package/dist/confluent/base-client-manager.d.ts.map +1 -1
  22. package/dist/confluent/base-client-manager.js +5 -1
  23. package/dist/confluent/base-client-manager.js.map +1 -1
  24. package/dist/confluent/client-manager.d.ts +15 -1
  25. package/dist/confluent/client-manager.d.ts.map +1 -1
  26. package/dist/confluent/direct-client-manager.d.ts +1 -1
  27. package/dist/confluent/direct-client-manager.d.ts.map +1 -1
  28. package/dist/confluent/middleware.d.ts +1 -1
  29. package/dist/confluent/middleware.d.ts.map +1 -1
  30. package/dist/confluent/node-deps.d.ts +8 -0
  31. package/dist/confluent/node-deps.d.ts.map +1 -1
  32. package/dist/confluent/node-deps.js +9 -2
  33. package/dist/confluent/node-deps.js.map +1 -1
  34. package/dist/confluent/oauth/auth0-config.d.ts +26 -4
  35. package/dist/confluent/oauth/auth0-config.d.ts.map +1 -1
  36. package/dist/confluent/oauth/auth0-config.js +59 -19
  37. package/dist/confluent/oauth/auth0-config.js.map +1 -1
  38. package/dist/confluent/oauth/pkce-login.d.ts.map +1 -1
  39. package/dist/confluent/oauth/pkce-login.js +180 -150
  40. package/dist/confluent/oauth/pkce-login.js.map +1 -1
  41. package/dist/confluent/oauth/types.d.ts +1 -2
  42. package/dist/confluent/oauth/types.d.ts.map +1 -1
  43. package/dist/confluent/oauth-client-manager.d.ts +6 -3
  44. package/dist/confluent/oauth-client-manager.d.ts.map +1 -1
  45. package/dist/confluent/oauth-client-manager.js +28 -6
  46. package/dist/confluent/oauth-client-manager.js.map +1 -1
  47. package/dist/confluent/oauth-resource-resolvers.d.ts +11 -0
  48. package/dist/confluent/oauth-resource-resolvers.d.ts.map +1 -1
  49. package/dist/confluent/oauth-resource-resolvers.js +24 -0
  50. package/dist/confluent/oauth-resource-resolvers.js.map +1 -1
  51. package/dist/confluent/schema-registry-helper.d.ts +131 -7
  52. package/dist/confluent/schema-registry-helper.d.ts.map +1 -1
  53. package/dist/confluent/schema-registry-helper.js +336 -40
  54. package/dist/confluent/schema-registry-helper.js.map +1 -1
  55. package/dist/confluent/schema.d.ts +2 -2
  56. package/dist/confluent/schema.d.ts.map +1 -1
  57. package/dist/confluent/sentry-redact.d.ts +5 -0
  58. package/dist/confluent/sentry-redact.d.ts.map +1 -0
  59. package/dist/confluent/sentry-redact.js +64 -0
  60. package/dist/confluent/sentry-redact.js.map +1 -0
  61. package/dist/confluent/sentry.d.ts +23 -0
  62. package/dist/confluent/sentry.d.ts.map +1 -0
  63. package/dist/confluent/sentry.js +68 -0
  64. package/dist/confluent/sentry.js.map +1 -0
  65. package/dist/confluent/tools/base-tools.d.ts +169 -24
  66. package/dist/confluent/tools/base-tools.d.ts.map +1 -1
  67. package/dist/confluent/tools/base-tools.js +225 -21
  68. package/dist/confluent/tools/base-tools.js.map +1 -1
  69. package/dist/confluent/tools/cluster-arg-resolvers.d.ts +22 -1
  70. package/dist/confluent/tools/cluster-arg-resolvers.d.ts.map +1 -1
  71. package/dist/confluent/tools/cluster-arg-resolvers.js +50 -4
  72. package/dist/confluent/tools/cluster-arg-resolvers.js.map +1 -1
  73. package/dist/confluent/tools/connection-predicates.d.ts +70 -7
  74. package/dist/confluent/tools/connection-predicates.d.ts.map +1 -1
  75. package/dist/confluent/tools/connection-predicates.js +69 -6
  76. package/dist/confluent/tools/connection-predicates.js.map +1 -1
  77. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts +9 -3
  78. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts.map +1 -1
  79. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js +77 -62
  80. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js.map +1 -1
  81. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.d.ts +5 -5
  82. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.d.ts.map +1 -1
  83. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.js +9 -5
  84. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.js.map +1 -1
  85. package/dist/confluent/tools/handlers/catalog/create-topic-tags.d.ts +5 -5
  86. package/dist/confluent/tools/handlers/catalog/create-topic-tags.d.ts.map +1 -1
  87. package/dist/confluent/tools/handlers/catalog/create-topic-tags.js +9 -5
  88. package/dist/confluent/tools/handlers/catalog/create-topic-tags.js.map +1 -1
  89. package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts +5 -5
  90. package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts.map +1 -1
  91. package/dist/confluent/tools/handlers/catalog/delete-tag.js +9 -5
  92. package/dist/confluent/tools/handlers/catalog/delete-tag.js.map +1 -1
  93. package/dist/confluent/tools/handlers/catalog/list-tags.d.ts +6 -6
  94. package/dist/confluent/tools/handlers/catalog/list-tags.d.ts.map +1 -1
  95. package/dist/confluent/tools/handlers/catalog/list-tags.js +14 -6
  96. package/dist/confluent/tools/handlers/catalog/list-tags.js.map +1 -1
  97. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.d.ts +5 -5
  98. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.d.ts.map +1 -1
  99. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.js +9 -5
  100. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.js.map +1 -1
  101. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts +4 -3
  102. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts.map +1 -1
  103. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.js +1 -1
  104. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.js.map +1 -1
  105. package/dist/confluent/tools/handlers/connect/connect-tool-handler.d.ts +8 -8
  106. package/dist/confluent/tools/handlers/connect/connect-tool-handler.d.ts.map +1 -1
  107. package/dist/confluent/tools/handlers/connect/connect-tool-handler.js +9 -10
  108. package/dist/confluent/tools/handlers/connect/connect-tool-handler.js.map +1 -1
  109. package/dist/confluent/tools/handlers/connect/create-connector-handler.d.ts +3 -3
  110. package/dist/confluent/tools/handlers/connect/create-connector-handler.d.ts.map +1 -1
  111. package/dist/confluent/tools/handlers/connect/create-connector-handler.js +1 -2
  112. package/dist/confluent/tools/handlers/connect/create-connector-handler.js.map +1 -1
  113. package/dist/confluent/tools/handlers/connect/delete-connector-handler.d.ts +3 -3
  114. package/dist/confluent/tools/handlers/connect/delete-connector-handler.d.ts.map +1 -1
  115. package/dist/confluent/tools/handlers/connect/delete-connector-handler.js +1 -2
  116. package/dist/confluent/tools/handlers/connect/delete-connector-handler.js.map +1 -1
  117. package/dist/confluent/tools/handlers/connect/get-connector-config-handler.d.ts +3 -3
  118. package/dist/confluent/tools/handlers/connect/get-connector-config-handler.d.ts.map +1 -1
  119. package/dist/confluent/tools/handlers/connect/get-connector-config-handler.js +1 -2
  120. package/dist/confluent/tools/handlers/connect/get-connector-config-handler.js.map +1 -1
  121. package/dist/confluent/tools/handlers/connect/get-connector-error-recommendations-handler.d.ts +3 -3
  122. package/dist/confluent/tools/handlers/connect/get-connector-error-recommendations-handler.d.ts.map +1 -1
  123. package/dist/confluent/tools/handlers/connect/get-connector-error-recommendations-handler.js +1 -2
  124. package/dist/confluent/tools/handlers/connect/get-connector-error-recommendations-handler.js.map +1 -1
  125. package/dist/confluent/tools/handlers/connect/get-connector-error-summary-handler.d.ts +3 -3
  126. package/dist/confluent/tools/handlers/connect/get-connector-error-summary-handler.d.ts.map +1 -1
  127. package/dist/confluent/tools/handlers/connect/get-connector-error-summary-handler.js +2 -3
  128. package/dist/confluent/tools/handlers/connect/get-connector-error-summary-handler.js.map +1 -1
  129. package/dist/confluent/tools/handlers/connect/get-connector-logs-handler.d.ts +3 -3
  130. package/dist/confluent/tools/handlers/connect/get-connector-logs-handler.d.ts.map +1 -1
  131. package/dist/confluent/tools/handlers/connect/get-connector-logs-handler.js +171 -100
  132. package/dist/confluent/tools/handlers/connect/get-connector-logs-handler.js.map +1 -1
  133. package/dist/confluent/tools/handlers/connect/get-connector-offsets-handler.d.ts +3 -3
  134. package/dist/confluent/tools/handlers/connect/get-connector-offsets-handler.d.ts.map +1 -1
  135. package/dist/confluent/tools/handlers/connect/get-connector-offsets-handler.js +1 -2
  136. package/dist/confluent/tools/handlers/connect/get-connector-offsets-handler.js.map +1 -1
  137. package/dist/confluent/tools/handlers/connect/get-connector-status-handler.d.ts +3 -3
  138. package/dist/confluent/tools/handlers/connect/get-connector-status-handler.d.ts.map +1 -1
  139. package/dist/confluent/tools/handlers/connect/get-connector-status-handler.js +1 -2
  140. package/dist/confluent/tools/handlers/connect/get-connector-status-handler.js.map +1 -1
  141. package/dist/confluent/tools/handlers/connect/get-connector-tasks-handler.d.ts +3 -3
  142. package/dist/confluent/tools/handlers/connect/get-connector-tasks-handler.d.ts.map +1 -1
  143. package/dist/confluent/tools/handlers/connect/get-connector-tasks-handler.js +1 -2
  144. package/dist/confluent/tools/handlers/connect/get-connector-tasks-handler.js.map +1 -1
  145. package/dist/confluent/tools/handlers/connect/list-connectors-handler.d.ts +3 -3
  146. package/dist/confluent/tools/handlers/connect/list-connectors-handler.d.ts.map +1 -1
  147. package/dist/confluent/tools/handlers/connect/list-connectors-handler.js +1 -2
  148. package/dist/confluent/tools/handlers/connect/list-connectors-handler.js.map +1 -1
  149. package/dist/confluent/tools/handlers/connect/pause-connector-handler.d.ts +3 -3
  150. package/dist/confluent/tools/handlers/connect/pause-connector-handler.d.ts.map +1 -1
  151. package/dist/confluent/tools/handlers/connect/pause-connector-handler.js +1 -2
  152. package/dist/confluent/tools/handlers/connect/pause-connector-handler.js.map +1 -1
  153. package/dist/confluent/tools/handlers/connect/restart-connector-handler.d.ts +3 -3
  154. package/dist/confluent/tools/handlers/connect/restart-connector-handler.d.ts.map +1 -1
  155. package/dist/confluent/tools/handlers/connect/restart-connector-handler.js +1 -2
  156. package/dist/confluent/tools/handlers/connect/restart-connector-handler.js.map +1 -1
  157. package/dist/confluent/tools/handlers/connect/resume-connector-handler.d.ts +3 -3
  158. package/dist/confluent/tools/handlers/connect/resume-connector-handler.d.ts.map +1 -1
  159. package/dist/confluent/tools/handlers/connect/resume-connector-handler.js +1 -2
  160. package/dist/confluent/tools/handlers/connect/resume-connector-handler.js.map +1 -1
  161. package/dist/confluent/tools/handlers/connect/update-connector-config-handler.d.ts +3 -3
  162. package/dist/confluent/tools/handlers/connect/update-connector-config-handler.d.ts.map +1 -1
  163. package/dist/confluent/tools/handlers/connect/update-connector-config-handler.js +1 -2
  164. package/dist/confluent/tools/handlers/connect/update-connector-config-handler.js.map +1 -1
  165. package/dist/confluent/tools/handlers/diagnostics/config-help-handler.d.ts +43 -0
  166. package/dist/confluent/tools/handlers/diagnostics/config-help-handler.d.ts.map +1 -0
  167. package/dist/confluent/tools/handlers/diagnostics/config-help-handler.js +297 -0
  168. package/dist/confluent/tools/handlers/diagnostics/config-help-handler.js.map +1 -0
  169. package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.d.ts +32 -0
  170. package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.d.ts.map +1 -0
  171. package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.js +116 -0
  172. package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.js.map +1 -0
  173. package/dist/confluent/tools/handlers/diagnostics/describe-fields.d.ts +52 -0
  174. package/dist/confluent/tools/handlers/diagnostics/describe-fields.d.ts.map +1 -0
  175. package/dist/confluent/tools/handlers/diagnostics/describe-fields.js +114 -0
  176. package/dist/confluent/tools/handlers/diagnostics/describe-fields.js.map +1 -0
  177. package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.d.ts +22 -44
  178. package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.d.ts.map +1 -1
  179. package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.js +95 -81
  180. package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.js.map +1 -1
  181. package/dist/confluent/tools/handlers/diagnostics/list-configured-connections-handler.d.ts +28 -0
  182. package/dist/confluent/tools/handlers/diagnostics/list-configured-connections-handler.d.ts.map +1 -0
  183. package/dist/confluent/tools/handlers/diagnostics/list-configured-connections-handler.js +93 -0
  184. package/dist/confluent/tools/handlers/diagnostics/list-configured-connections-handler.js.map +1 -0
  185. package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.d.ts +4 -3
  186. package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.d.ts.map +1 -1
  187. package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.js.map +1 -1
  188. package/dist/confluent/tools/handlers/docs/search-product-docs-handler.d.ts +4 -3
  189. package/dist/confluent/tools/handlers/docs/search-product-docs-handler.d.ts.map +1 -1
  190. package/dist/confluent/tools/handlers/docs/search-product-docs-handler.js.map +1 -1
  191. package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts +9 -3
  192. package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts.map +1 -1
  193. package/dist/confluent/tools/handlers/environments/list-environments-handler.js +68 -46
  194. package/dist/confluent/tools/handlers/environments/list-environments-handler.js.map +1 -1
  195. package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts +4 -3
  196. package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts.map +1 -1
  197. package/dist/confluent/tools/handlers/environments/read-environment-handler.js +2 -2
  198. package/dist/confluent/tools/handlers/environments/read-environment-handler.js.map +1 -1
  199. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts +1 -1
  200. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts.map +1 -1
  201. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js +12 -6
  202. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js.map +1 -1
  203. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts +3 -3
  204. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts.map +1 -1
  205. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js +24 -21
  206. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js.map +1 -1
  207. package/dist/confluent/tools/handlers/flink/catalog/flink-catalog-tool-handler.d.ts +1 -1
  208. package/dist/confluent/tools/handlers/flink/catalog/flink-catalog-tool-handler.d.ts.map +1 -1
  209. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts +3 -3
  210. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts.map +1 -1
  211. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js +24 -21
  212. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js.map +1 -1
  213. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts +3 -3
  214. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts.map +1 -1
  215. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js +9 -7
  216. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js.map +1 -1
  217. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts +3 -3
  218. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts.map +1 -1
  219. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js +14 -12
  220. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js.map +1 -1
  221. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts +3 -3
  222. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts.map +1 -1
  223. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js +14 -12
  224. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js.map +1 -1
  225. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.d.ts +3 -3
  226. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.d.ts.map +1 -1
  227. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.js +27 -22
  228. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.js.map +1 -1
  229. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.d.ts +3 -3
  230. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.d.ts.map +1 -1
  231. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.js +20 -12
  232. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.js.map +1 -1
  233. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts +3 -3
  234. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts.map +1 -1
  235. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js +20 -12
  236. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js.map +1 -1
  237. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts +3 -3
  238. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts.map +1 -1
  239. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js +203 -156
  240. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js.map +1 -1
  241. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts +12 -8
  242. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts.map +1 -1
  243. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.js +346 -377
  244. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.js.map +1 -1
  245. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts +3 -3
  246. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts.map +1 -1
  247. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js +374 -317
  248. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js.map +1 -1
  249. package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts +4 -3
  250. package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts.map +1 -1
  251. package/dist/confluent/tools/handlers/flink/flink-sql-helper.js +133 -57
  252. package/dist/confluent/tools/handlers/flink/flink-sql-helper.js.map +1 -1
  253. package/dist/confluent/tools/handlers/flink/flink-tool-handler.d.ts +27 -6
  254. package/dist/confluent/tools/handlers/flink/flink-tool-handler.d.ts.map +1 -1
  255. package/dist/confluent/tools/handlers/flink/flink-tool-handler.js +37 -7
  256. package/dist/confluent/tools/handlers/flink/flink-tool-handler.js.map +1 -1
  257. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts +3 -3
  258. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts.map +1 -1
  259. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js +20 -12
  260. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js.map +1 -1
  261. package/dist/confluent/tools/handlers/flink/get-flink-statement-results-handler.d.ts +9 -0
  262. package/dist/confluent/tools/handlers/flink/get-flink-statement-results-handler.d.ts.map +1 -0
  263. package/dist/confluent/tools/handlers/flink/{read-flink-statement-handler.js → get-flink-statement-results-handler.js} +30 -22
  264. package/dist/confluent/tools/handlers/flink/get-flink-statement-results-handler.js.map +1 -0
  265. package/dist/confluent/tools/handlers/flink/list-compute-pools-handler.d.ts +11 -0
  266. package/dist/confluent/tools/handlers/flink/list-compute-pools-handler.d.ts.map +1 -0
  267. package/dist/confluent/tools/handlers/flink/list-compute-pools-handler.js +118 -0
  268. package/dist/confluent/tools/handlers/flink/list-compute-pools-handler.js.map +1 -0
  269. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.d.ts +3 -3
  270. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.d.ts.map +1 -1
  271. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js +19 -17
  272. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js.map +1 -1
  273. package/dist/confluent/tools/handlers/kafka/alter-topic-config.d.ts +4 -3
  274. package/dist/confluent/tools/handlers/kafka/alter-topic-config.d.ts.map +1 -1
  275. package/dist/confluent/tools/handlers/kafka/alter-topic-config.js +1 -1
  276. package/dist/confluent/tools/handlers/kafka/alter-topic-config.js.map +1 -1
  277. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.d.ts +21 -10
  278. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.d.ts.map +1 -1
  279. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js +136 -73
  280. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js.map +1 -1
  281. package/dist/confluent/tools/handlers/kafka/create-topics-handler.d.ts +4 -3
  282. package/dist/confluent/tools/handlers/kafka/create-topics-handler.d.ts.map +1 -1
  283. package/dist/confluent/tools/handlers/kafka/create-topics-handler.js +12 -3
  284. package/dist/confluent/tools/handlers/kafka/create-topics-handler.js.map +1 -1
  285. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.d.ts +4 -3
  286. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.d.ts.map +1 -1
  287. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js +1 -1
  288. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js.map +1 -1
  289. package/dist/confluent/tools/handlers/kafka/describe-consumer-group-handler.d.ts +4 -3
  290. package/dist/confluent/tools/handlers/kafka/describe-consumer-group-handler.d.ts.map +1 -1
  291. package/dist/confluent/tools/handlers/kafka/describe-consumer-group-handler.js +6 -41
  292. package/dist/confluent/tools/handlers/kafka/describe-consumer-group-handler.js.map +1 -1
  293. package/dist/confluent/tools/handlers/kafka/get-consumer-group-lag-handler.d.ts +4 -3
  294. package/dist/confluent/tools/handlers/kafka/get-consumer-group-lag-handler.d.ts.map +1 -1
  295. package/dist/confluent/tools/handlers/kafka/get-consumer-group-lag-handler.js +6 -10
  296. package/dist/confluent/tools/handlers/kafka/get-consumer-group-lag-handler.js.map +1 -1
  297. package/dist/confluent/tools/handlers/kafka/get-partition-offsets-handler.d.ts +4 -3
  298. package/dist/confluent/tools/handlers/kafka/get-partition-offsets-handler.d.ts.map +1 -1
  299. package/dist/confluent/tools/handlers/kafka/get-partition-offsets-handler.js +1 -1
  300. package/dist/confluent/tools/handlers/kafka/get-partition-offsets-handler.js.map +1 -1
  301. package/dist/confluent/tools/handlers/kafka/get-topic-config.d.ts +4 -3
  302. package/dist/confluent/tools/handlers/kafka/get-topic-config.d.ts.map +1 -1
  303. package/dist/confluent/tools/handlers/kafka/get-topic-config.js +1 -1
  304. package/dist/confluent/tools/handlers/kafka/get-topic-config.js.map +1 -1
  305. package/dist/confluent/tools/handlers/kafka/list-consumer-groups-handler.d.ts +4 -3
  306. package/dist/confluent/tools/handlers/kafka/list-consumer-groups-handler.d.ts.map +1 -1
  307. package/dist/confluent/tools/handlers/kafka/list-consumer-groups-handler.js +1 -1
  308. package/dist/confluent/tools/handlers/kafka/list-consumer-groups-handler.js.map +1 -1
  309. package/dist/confluent/tools/handlers/kafka/list-topics-handler.d.ts +4 -3
  310. package/dist/confluent/tools/handlers/kafka/list-topics-handler.d.ts.map +1 -1
  311. package/dist/confluent/tools/handlers/kafka/list-topics-handler.js +1 -1
  312. package/dist/confluent/tools/handlers/kafka/list-topics-handler.js.map +1 -1
  313. package/dist/confluent/tools/handlers/kafka/partition-watermarks.d.ts +1 -1
  314. package/dist/confluent/tools/handlers/kafka/partition-watermarks.d.ts.map +1 -1
  315. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.d.ts +12 -4
  316. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.d.ts.map +1 -1
  317. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js +140 -34
  318. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js.map +1 -1
  319. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts +5 -5
  320. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts.map +1 -1
  321. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js +105 -60
  322. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js.map +1 -1
  323. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts +5 -5
  324. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts.map +1 -1
  325. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js +75 -57
  326. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js.map +1 -1
  327. package/dist/confluent/tools/handlers/metrics/telemetry-error.d.ts +9 -0
  328. package/dist/confluent/tools/handlers/metrics/telemetry-error.d.ts.map +1 -0
  329. package/dist/confluent/tools/handlers/metrics/telemetry-error.js +38 -0
  330. package/dist/confluent/tools/handlers/metrics/telemetry-error.js.map +1 -0
  331. package/dist/confluent/tools/handlers/organizations/list-organizations-handler.d.ts +4 -3
  332. package/dist/confluent/tools/handlers/organizations/list-organizations-handler.d.ts.map +1 -1
  333. package/dist/confluent/tools/handlers/organizations/list-organizations-handler.js +2 -1
  334. package/dist/confluent/tools/handlers/organizations/list-organizations-handler.js.map +1 -1
  335. package/dist/confluent/tools/handlers/schema/create-schema-handler.d.ts +11 -0
  336. package/dist/confluent/tools/handlers/schema/create-schema-handler.d.ts.map +1 -0
  337. package/dist/confluent/tools/handlers/schema/create-schema-handler.js +76 -0
  338. package/dist/confluent/tools/handlers/schema/create-schema-handler.js.map +1 -0
  339. package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts +4 -3
  340. package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts.map +1 -1
  341. package/dist/confluent/tools/handlers/schema/delete-schema-handler.js +1 -1
  342. package/dist/confluent/tools/handlers/schema/delete-schema-handler.js.map +1 -1
  343. package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts +4 -3
  344. package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts.map +1 -1
  345. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js +101 -72
  346. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js.map +1 -1
  347. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.d.ts +5 -5
  348. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.d.ts.map +1 -1
  349. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.js +9 -5
  350. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.js.map +1 -1
  351. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.d.ts +5 -5
  352. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.d.ts.map +1 -1
  353. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.js +9 -5
  354. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.js.map +1 -1
  355. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.d.ts +3 -3
  356. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.d.ts.map +1 -1
  357. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.js +2 -2
  358. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.js.map +1 -1
  359. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.d.ts +3 -3
  360. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.d.ts.map +1 -1
  361. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.js +2 -2
  362. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.js.map +1 -1
  363. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.d.ts +3 -3
  364. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.d.ts.map +1 -1
  365. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.js +2 -2
  366. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.js.map +1 -1
  367. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.d.ts +3 -3
  368. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.d.ts.map +1 -1
  369. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.js +2 -2
  370. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.js.map +1 -1
  371. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.d.ts +3 -3
  372. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.d.ts.map +1 -1
  373. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.js +1 -1
  374. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.js.map +1 -1
  375. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.d.ts +3 -3
  376. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.d.ts.map +1 -1
  377. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.js +1 -1
  378. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.js.map +1 -1
  379. package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.d.ts +15 -10
  380. package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.d.ts.map +1 -1
  381. package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.js +17 -14
  382. package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.js.map +1 -1
  383. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.d.ts +3 -3
  384. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.d.ts.map +1 -1
  385. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.js +2 -2
  386. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.js.map +1 -1
  387. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.d.ts +3 -3
  388. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.d.ts.map +1 -1
  389. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.js +2 -2
  390. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.js.map +1 -1
  391. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.d.ts +3 -3
  392. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.d.ts.map +1 -1
  393. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.js +2 -2
  394. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.js.map +1 -1
  395. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.d.ts +3 -3
  396. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.d.ts.map +1 -1
  397. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.js +2 -2
  398. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.js.map +1 -1
  399. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.d.ts +3 -3
  400. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.d.ts.map +1 -1
  401. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.js +1 -1
  402. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.js.map +1 -1
  403. package/dist/confluent/tools/pagination.d.ts +31 -0
  404. package/dist/confluent/tools/pagination.d.ts.map +1 -0
  405. package/dist/confluent/tools/pagination.js +40 -0
  406. package/dist/confluent/tools/pagination.js.map +1 -0
  407. package/dist/confluent/tools/tool-availability.d.ts +63 -32
  408. package/dist/confluent/tools/tool-availability.d.ts.map +1 -1
  409. package/dist/confluent/tools/tool-availability.js +101 -69
  410. package/dist/confluent/tools/tool-availability.js.map +1 -1
  411. package/dist/confluent/tools/tool-input-error.d.ts +17 -0
  412. package/dist/confluent/tools/tool-input-error.d.ts.map +1 -0
  413. package/dist/confluent/tools/tool-input-error.js +23 -0
  414. package/dist/confluent/tools/tool-input-error.js.map +1 -0
  415. package/dist/confluent/tools/tool-metadata-handler.d.ts +52 -0
  416. package/dist/confluent/tools/tool-metadata-handler.d.ts.map +1 -0
  417. package/dist/confluent/tools/tool-metadata-handler.js +61 -0
  418. package/dist/confluent/tools/tool-metadata-handler.js.map +1 -0
  419. package/dist/confluent/tools/tool-name.d.ts +7 -2
  420. package/dist/confluent/tools/tool-name.d.ts.map +1 -1
  421. package/dist/confluent/tools/tool-name.js +6 -1
  422. package/dist/confluent/tools/tool-name.js.map +1 -1
  423. package/dist/confluent/tools/tool-registry.d.ts +1 -1
  424. package/dist/confluent/tools/tool-registry.d.ts.map +1 -1
  425. package/dist/confluent/tools/tool-registry.js +24 -2
  426. package/dist/confluent/tools/tool-registry.js.map +1 -1
  427. package/dist/env-schema.d.ts +0 -1
  428. package/dist/env-schema.d.ts.map +1 -1
  429. package/dist/env-schema.js +0 -7
  430. package/dist/env-schema.js.map +1 -1
  431. package/dist/env.d.ts +1 -2
  432. package/dist/env.d.ts.map +1 -1
  433. package/dist/index.d.ts +54 -64
  434. package/dist/index.d.ts.map +1 -1
  435. package/dist/index.js +78 -324
  436. package/dist/index.js.map +1 -1
  437. package/dist/lazy.d.ts +4 -2
  438. package/dist/lazy.d.ts.map +1 -1
  439. package/dist/lazy.js +27 -12
  440. package/dist/lazy.js.map +1 -1
  441. package/dist/logger.d.ts +1 -1
  442. package/dist/logger.d.ts.map +1 -1
  443. package/dist/mcp/server.d.ts +6 -4
  444. package/dist/mcp/server.d.ts.map +1 -1
  445. package/dist/mcp/server.js +19 -6
  446. package/dist/mcp/server.js.map +1 -1
  447. package/dist/mcp/transports/auth.d.ts +1 -1
  448. package/dist/mcp/transports/auth.d.ts.map +1 -1
  449. package/dist/mcp/transports/http.d.ts +3 -3
  450. package/dist/mcp/transports/http.d.ts.map +1 -1
  451. package/dist/mcp/transports/manager.d.ts +1 -1
  452. package/dist/mcp/transports/manager.d.ts.map +1 -1
  453. package/dist/mcp/transports/manager.js.map +1 -1
  454. package/dist/mcp/transports/ping.d.ts +1 -1
  455. package/dist/mcp/transports/ping.d.ts.map +1 -1
  456. package/dist/mcp/transports/server.d.ts +3 -3
  457. package/dist/mcp/transports/server.d.ts.map +1 -1
  458. package/dist/mcp/transports/server.js +1 -1
  459. package/dist/mcp/transports/server.js.map +1 -1
  460. package/dist/mcp/transports/sse.d.ts +3 -3
  461. package/dist/mcp/transports/sse.d.ts.map +1 -1
  462. package/dist/mcp/transports/stdio.d.ts +2 -2
  463. package/dist/mcp/transports/stdio.d.ts.map +1 -1
  464. package/dist/preflight.d.ts +33 -0
  465. package/dist/preflight.d.ts.map +1 -0
  466. package/dist/preflight.js +68 -0
  467. package/dist/preflight.js.map +1 -0
  468. package/dist/print-md-schema.js +21 -18
  469. package/dist/print-md-schema.js.map +1 -1
  470. package/dist/server-main.d.ts +104 -0
  471. package/dist/server-main.d.ts.map +1 -0
  472. package/dist/server-main.js +410 -0
  473. package/dist/server-main.js.map +1 -0
  474. package/dist/server-runtime.d.ts +22 -7
  475. package/dist/server-runtime.d.ts.map +1 -1
  476. package/dist/server-runtime.js +45 -28
  477. package/dist/server-runtime.js.map +1 -1
  478. package/dist/utils/quote-join-ids.d.ts +9 -0
  479. package/dist/utils/quote-join-ids.d.ts.map +1 -0
  480. package/dist/utils/quote-join-ids.js +11 -0
  481. package/dist/utils/quote-join-ids.js.map +1 -0
  482. package/package.json +37 -35
  483. package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.d.ts +0 -9
  484. package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.d.ts.map +0 -1
  485. package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.js.map +0 -1
  486. package/dist/confluent/tools/handlers/kafka/topic-metadata.d.ts +0 -18
  487. package/dist/confluent/tools/handlers/kafka/topic-metadata.d.ts.map +0 -1
  488. package/dist/confluent/tools/handlers/kafka/topic-metadata.js +0 -18
  489. package/dist/confluent/tools/handlers/kafka/topic-metadata.js.map +0 -1
@@ -1,25 +1,10 @@
1
1
  import { READ_ONLY } from "../../../../../confluent/tools/base-tools.js";
2
- import { flinkWithTelemetry } from "../../../../../confluent/tools/connection-predicates.js";
2
+ import { flinkWithTelemetryOrOAuth } from "../../../../../confluent/tools/connection-predicates.js";
3
3
  import { FlinkToolHandler } from "../../../../../confluent/tools/handlers/flink/flink-tool-handler.js";
4
4
  import { ToolName } from "../../../../../confluent/tools/tool-name.js";
5
5
  import { wrapAsPathBasedClient } from "openapi-fetch";
6
6
  import { z } from "zod";
7
7
  const queryProfilerArguments = z.object({
8
- organizationId: z
9
- .string()
10
- .trim()
11
- .optional()
12
- .describe("The unique identifier for the organization."),
13
- environmentId: z
14
- .string()
15
- .trim()
16
- .optional()
17
- .describe("The unique identifier for the environment."),
18
- computePoolId: z
19
- .string()
20
- .trim()
21
- .optional()
22
- .describe("The compute pool ID where the statement runs."),
23
8
  statementName: z
24
9
  .string()
25
10
  .regex(new RegExp("[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*"))
@@ -37,18 +22,34 @@ const queryProfilerArguments = z.object({
37
22
  .boolean()
38
23
  .default(true)
39
24
  .describe("Include automated issue detection based on metrics (backpressure, lag, state size, etc.)."),
25
+ organizationId: z
26
+ .string()
27
+ .trim()
28
+ .optional()
29
+ .describe("Confluent Cloud organization ID. Discover via list-organizations."),
30
+ environmentId: z
31
+ .string()
32
+ .trim()
33
+ .optional()
34
+ .describe("Confluent Cloud environment ID (env-...) that owns the Flink compute pool. Discover via list-environments."),
35
+ computePoolId: z
36
+ .string()
37
+ .trim()
38
+ .optional()
39
+ .describe("Confluent Cloud Flink compute pool ID (lfcp-...). Discover via list-compute-pools."),
40
40
  });
41
41
  // Long.MIN_VALUE indicates no watermark set
42
42
  const LONG_MIN_VALUE = -9223372036854776000;
43
43
  export class QueryProfilerHandler extends FlinkToolHandler {
44
44
  async handle(runtime, toolArguments) {
45
- const clientManager = runtime.clientManager;
46
45
  const { statementName, environmentId, organizationId, computePoolId, intervalMinutes, includeAnalysis, } = queryProfilerArguments.parse(toolArguments);
47
- const flink = this.getFlinkDirectConfig(runtime.config);
48
- const { organization_id, environment_id } = this.resolveOrgAndEnvIds(flink, organizationId, environmentId);
49
- const compute_pool_id = this.resolveComputePoolId(flink, computePoolId);
50
- // Step 1: Fetch the task graph to get human-readable task/operator names
51
- const pathBasedClient = wrapAsPathBasedClient(clientManager.getConfluentCloudFlinkRestClient());
46
+ const { conn, clientManager } = this.resolveConnection(runtime, toolArguments);
47
+ const { organization_id, environment_id, compute_pool_id } = this.resolveFlinkRouting(conn, {
48
+ organizationId,
49
+ environmentId,
50
+ computePoolId,
51
+ });
52
+ const pathBasedClient = wrapAsPathBasedClient(await clientManager.getFlinkRestClient(compute_pool_id, environment_id));
52
53
  const { data: taskGraphResponse, error: taskGraphError } = await pathBasedClient["/sql/v1/organizations/{organization_id}/environments/{environment_id}/statements/{statement_name}/task-graph"].GET({
53
54
  params: {
54
55
  path: {
@@ -61,308 +62,29 @@ export class QueryProfilerHandler extends FlinkToolHandler {
61
62
  if (taskGraphError) {
62
63
  return this.createResponse(`Failed to get task graph: ${JSON.stringify(taskGraphError)}`, true);
63
64
  }
64
- // Parse the task graph (Graph field is JSON-encoded string)
65
- let taskGraph;
66
- try {
67
- const graphJson = taskGraphResponse?.Graph;
68
- if (!graphJson) {
69
- return this.createResponse("Task graph not available. The statement may not be running.", true);
70
- }
71
- taskGraph = JSON.parse(graphJson);
72
- }
73
- catch {
74
- return this.createResponse("Failed to parse task graph.", true);
75
- }
76
- // Build task ID to name mapping
77
- const taskIdToInfo = new Map();
78
- for (const task of taskGraph.tasks) {
79
- taskIdToInfo.set(task.task_id, {
80
- name: task.task_name,
81
- operators: task.included_operators.map((op) => op.operator_name),
82
- inputs: task.input_tasks.map((t) => t.task_id),
83
- });
65
+ const parsed = parseTaskGraph(taskGraphResponse);
66
+ if ("errorMessage" in parsed) {
67
+ return this.createResponse(parsed.errorMessage, true);
84
68
  }
85
- // Step 2: Query telemetry metrics per task
69
+ const taskMetrics = initializeTaskMetrics(parsed.tasks);
86
70
  const telemetryClient = clientManager.getConfluentCloudTelemetryRestClient();
87
71
  const now = new Date();
88
- const startTime = new Date(now.getTime() - intervalMinutes * 60 * 1000);
89
- // Metrics to query per task
90
- const metricsToQuery = [
91
- { metric: "io.confluent.flink/task/num_records_in", field: "recordsIn" },
92
- {
93
- metric: "io.confluent.flink/task/num_records_out",
94
- field: "recordsOut",
95
- },
96
- {
97
- metric: "io.confluent.flink/operator/state_size_bytes",
98
- field: "stateBytes",
99
- },
100
- {
101
- metric: "io.confluent.flink/task/busy_time_ms_per_second",
102
- field: "busyPercent",
103
- isPercent: true,
104
- },
105
- {
106
- metric: "io.confluent.flink/task/idle_time_ms_per_second",
107
- field: "idlePercent",
108
- isPercent: true,
109
- },
110
- {
111
- metric: "io.confluent.flink/task/backpressure_time_ms_per_second",
112
- field: "backpressurePercent",
113
- isPercent: true,
114
- },
115
- {
116
- metric: "io.confluent.flink/operator/current_input_watermark_ms",
117
- field: "inputWatermarkMs",
118
- },
119
- {
120
- metric: "io.confluent.flink/operator/current_output_watermark_ms",
121
- field: "outputWatermarkMs",
122
- },
123
- ];
124
- // Initialize task metrics
125
- const taskMetrics = new Map();
126
- for (const [taskId, info] of taskIdToInfo) {
127
- taskMetrics.set(taskId, {
128
- taskId,
129
- taskName: info.name,
130
- operators: info.operators,
131
- inputTasks: info.inputs.map((id) => taskIdToInfo.get(id)?.name || id),
132
- });
133
- }
134
- // Query each metric
135
- for (const { metric, field, isPercent } of metricsToQuery) {
136
- try {
137
- const response = (await telemetryClient.POST("/v2/metrics/{dataset}/query", {
138
- params: { path: { dataset: "cloud" } },
139
- body: {
140
- aggregations: [{ metric }],
141
- filter: {
142
- op: "AND",
143
- filters: [
144
- {
145
- field: "resource.flink_statement.name",
146
- op: "EQ",
147
- value: statementName,
148
- },
149
- {
150
- field: "resource.compute_pool.id",
151
- op: "EQ",
152
- value: compute_pool_id,
153
- },
154
- ],
155
- },
156
- granularity: "PT1M",
157
- intervals: [`${startTime.toISOString()}/${now.toISOString()}`],
158
- limit: 1000,
159
- group_by: ["metric.flink_task.id"],
160
- format: "GROUPED",
161
- },
162
- }));
163
- const data = response.data?.data;
164
- if (data) {
165
- for (const item of data) {
166
- const taskId = item["metric.flink_task.id"];
167
- const value = item.points?.[item.points.length - 1]?.value;
168
- if (taskId &&
169
- value !== undefined &&
170
- value > LONG_MIN_VALUE + 1000000) {
171
- const task = taskMetrics.get(taskId);
172
- if (task) {
173
- const finalValue = isPercent ? (value / 1000) * 100 : value;
174
- task[field] =
175
- finalValue;
176
- }
177
- }
178
- }
179
- }
180
- }
181
- catch {
182
- // Continue with other metrics
183
- }
184
- }
185
- // Step 3: Query statement-level summary metrics (no group_by)
186
- const summary = {};
187
- const summaryMetrics = [
188
- { metric: "io.confluent.flink/num_records_in", field: "recordsIn" },
189
- { metric: "io.confluent.flink/num_records_out", field: "recordsOut" },
190
- {
191
- metric: "io.confluent.flink/operator/state_size_bytes",
192
- field: "stateBytes",
193
- },
194
- {
195
- metric: "io.confluent.flink/current_input_watermark_milliseconds",
196
- field: "inputWatermarkMs",
197
- },
198
- {
199
- metric: "io.confluent.flink/current_output_watermark_milliseconds",
200
- field: "outputWatermarkMs",
201
- },
202
- {
203
- metric: "io.confluent.flink/statement_utilization/current_cfus",
204
- field: "cfus",
205
- },
206
- { metric: "io.confluent.flink/pending_records", field: "pendingRecords" },
207
- {
208
- metric: "io.confluent.flink/num_late_records_in",
209
- field: "numLateRecordsIn",
210
- },
211
- ];
212
- for (const { metric, field } of summaryMetrics) {
213
- try {
214
- const response = (await telemetryClient.POST("/v2/metrics/{dataset}/query", {
215
- params: { path: { dataset: "cloud" } },
216
- body: {
217
- aggregations: [{ metric }],
218
- filter: {
219
- op: "AND",
220
- filters: [
221
- {
222
- field: "resource.flink_statement.name",
223
- op: "EQ",
224
- value: statementName,
225
- },
226
- {
227
- field: "resource.compute_pool.id",
228
- op: "EQ",
229
- value: compute_pool_id,
230
- },
231
- ],
232
- },
233
- granularity: "PT1M",
234
- intervals: [`${startTime.toISOString()}/${now.toISOString()}`],
235
- limit: 1000,
236
- format: "GROUPED",
237
- },
238
- }));
239
- const data = response.data?.data;
240
- if (data && data.length > 0) {
241
- const firstEntry = data[0];
242
- const points = firstEntry?.points;
243
- if (points && points.length > 0) {
244
- const value = points[points.length - 1]?.value;
245
- if (value !== undefined && value > LONG_MIN_VALUE + 1000000) {
246
- summary[field] = value;
247
- }
248
- }
249
- }
250
- }
251
- catch {
252
- // Continue
253
- }
254
- }
255
- // Build the response
256
- const tasks = Array.from(taskMetrics.values()).map((task) => ({
257
- name: task.taskName,
258
- operators: task.operators,
259
- metrics: {
260
- recordsIn: task.recordsIn,
261
- recordsOut: task.recordsOut,
262
- stateBytes: task.stateBytes,
263
- busyPercent: task.busyPercent !== undefined
264
- ? `${task.busyPercent.toFixed(1)}%`
265
- : undefined,
266
- idlePercent: task.idlePercent !== undefined
267
- ? `${task.idlePercent.toFixed(1)}%`
268
- : undefined,
269
- backpressurePercent: task.backpressurePercent !== undefined
270
- ? `${task.backpressurePercent.toFixed(1)}%`
271
- : undefined,
272
- inputWatermark: task.inputWatermarkMs
273
- ? new Date(task.inputWatermarkMs).toISOString()
274
- : undefined,
275
- outputWatermark: task.outputWatermarkMs
276
- ? new Date(task.outputWatermarkMs).toISOString()
277
- : undefined,
278
- },
279
- }));
280
- // Analyze metrics for issues if requested
281
- const detectedIssues = [];
282
- if (includeAnalysis) {
283
- // Check per-task metrics for backpressure issues
284
- for (const task of taskMetrics.values()) {
285
- if (task.backpressurePercent !== undefined &&
286
- task.backpressurePercent > 50) {
287
- detectedIssues.push({
288
- type: "high_backpressure",
289
- severity: task.backpressurePercent > 80 ? "high" : "medium",
290
- description: `Task '${task.taskName}' has ${task.backpressurePercent.toFixed(1)}% backpressure.`,
291
- suggestion: "Downstream operators are slow. Consider increasing parallelism or optimizing sink performance.",
292
- taskName: task.taskName,
293
- });
294
- }
295
- }
296
- // Check consumer lag
297
- if (summary.pendingRecords !== undefined &&
298
- summary.pendingRecords > 100000) {
299
- detectedIssues.push({
300
- type: "high_consumer_lag",
301
- severity: summary.pendingRecords > 1000000 ? "high" : "medium",
302
- description: `High consumer lag: ${summary.pendingRecords.toLocaleString()} pending records.`,
303
- suggestion: "Statement is falling behind input rate. Consider increasing parallelism or CFUs.",
304
- });
305
- }
306
- // Check late data
307
- if (summary.numLateRecordsIn !== undefined &&
308
- summary.numLateRecordsIn > 0) {
309
- const severity = summary.numLateRecordsIn > 10000
310
- ? "high"
311
- : summary.numLateRecordsIn > 1000
312
- ? "medium"
313
- : "low";
314
- detectedIssues.push({
315
- type: "late_data",
316
- severity,
317
- description: `${summary.numLateRecordsIn.toLocaleString()} late records detected (arrived after watermark).`,
318
- suggestion: "Consider increasing watermark delay tolerance or investigating source timestamp issues.",
319
- });
320
- }
321
- // Check state size
322
- if (summary.stateBytes !== undefined) {
323
- const stateSizeGB = summary.stateBytes / (1024 * 1024 * 1024);
324
- if (stateSizeGB > 10) {
325
- detectedIssues.push({
326
- type: "large_state",
327
- severity: "medium",
328
- description: `Large state size: ${stateSizeGB.toFixed(2)} GB.`,
329
- suggestion: "Consider adding TTL to stateful operations or reviewing deduplication windows.",
330
- });
331
- }
332
- }
333
- // Check for idle with no throughput
334
- const allTasksIdle = Array.from(taskMetrics.values()).every((t) => t.idlePercent !== undefined && t.idlePercent > 90);
335
- if (allTasksIdle && summary.recordsIn === 0) {
336
- detectedIssues.push({
337
- type: "no_input_data",
338
- severity: "medium",
339
- description: "Statement is mostly idle with no input records.",
340
- suggestion: "Check if source topics have data. Verify topic names and connectivity.",
341
- });
342
- }
343
- }
72
+ const queryContext = {
73
+ statementName,
74
+ computePoolId: compute_pool_id,
75
+ startTime: new Date(now.getTime() - intervalMinutes * 60 * 1000),
76
+ now,
77
+ };
78
+ await collectPerTaskMetrics(telemetryClient, taskMetrics, queryContext);
79
+ const summary = await collectSummaryMetrics(telemetryClient, queryContext);
344
80
  const result = {
345
81
  statementName,
346
82
  intervalMinutes,
347
- summary: {
348
- recordsIn: summary.recordsIn,
349
- recordsOut: summary.recordsOut,
350
- stateBytes: summary.stateBytes,
351
- stateSizeMB: summary.stateBytes
352
- ? (summary.stateBytes / (1024 * 1024)).toFixed(2)
353
- : undefined,
354
- pendingRecords: summary.pendingRecords,
355
- inputWatermark: summary.inputWatermarkMs
356
- ? new Date(summary.inputWatermarkMs).toISOString()
357
- : undefined,
358
- outputWatermark: summary.outputWatermarkMs
359
- ? new Date(summary.outputWatermarkMs).toISOString()
360
- : undefined,
361
- cfus: summary.cfus,
362
- },
363
- tasks,
83
+ summary: buildSummaryView(summary),
84
+ tasks: Array.from(taskMetrics.values()).map(buildTaskView),
364
85
  };
365
86
  if (includeAnalysis) {
87
+ const detectedIssues = detectIssues(taskMetrics, summary);
366
88
  result.detectedIssues = detectedIssues;
367
89
  result.issueCount = detectedIssues.length;
368
90
  }
@@ -377,6 +99,341 @@ export class QueryProfilerHandler extends FlinkToolHandler {
377
99
  };
378
100
  }
379
101
  /** Overrides FlinkToolHandler: also requires a telemetry block because profiling fetches metrics from the Telemetry API in addition to the Flink REST API. */
380
- predicate = flinkWithTelemetry;
102
+ predicate = flinkWithTelemetryOrOAuth;
103
+ }
104
+ /**
105
+ * Decode the JSON-encoded `Graph` field returned by the task-graph endpoint.
106
+ * Returns a caller-facing message rather than throwing so the handler can
107
+ * distinguish "statement not running" from "malformed payload".
108
+ */
109
+ function parseTaskGraph(taskGraphResponse) {
110
+ const graphJson = taskGraphResponse?.Graph;
111
+ if (!graphJson) {
112
+ return {
113
+ errorMessage: "Task graph not available. The statement may not be running.",
114
+ };
115
+ }
116
+ let decoded;
117
+ try {
118
+ decoded = JSON.parse(graphJson);
119
+ }
120
+ catch {
121
+ return { errorMessage: "Failed to parse task graph." };
122
+ }
123
+ const tasks = decoded?.tasks;
124
+ if (!Array.isArray(tasks)) {
125
+ return { errorMessage: "Task graph payload is missing its tasks array." };
126
+ }
127
+ return { tasks };
128
+ }
129
+ /**
130
+ * Seed one TaskMetricsData per task, resolving each input-task id to its
131
+ * human-readable name (falling back to the raw id when unknown).
132
+ */
133
+ function initializeTaskMetrics(tasks) {
134
+ const idToName = new Map();
135
+ for (const task of tasks) {
136
+ idToName.set(task.task_id, task.task_name);
137
+ }
138
+ const taskMetrics = new Map();
139
+ for (const task of tasks) {
140
+ taskMetrics.set(task.task_id, {
141
+ taskId: task.task_id,
142
+ taskName: task.task_name,
143
+ operators: task.included_operators.map((op) => op.operator_name),
144
+ inputTasks: task.input_tasks.map((t) => idToName.get(t.task_id) || t.task_id),
145
+ });
146
+ }
147
+ return taskMetrics;
148
+ }
149
+ const PER_TASK_METRICS = [
150
+ { metric: "io.confluent.flink/task/num_records_in", field: "recordsIn" },
151
+ { metric: "io.confluent.flink/task/num_records_out", field: "recordsOut" },
152
+ {
153
+ metric: "io.confluent.flink/operator/state_size_bytes",
154
+ field: "stateBytes",
155
+ },
156
+ {
157
+ metric: "io.confluent.flink/task/busy_time_ms_per_second",
158
+ field: "busyPercent",
159
+ isPercent: true,
160
+ },
161
+ {
162
+ metric: "io.confluent.flink/task/idle_time_ms_per_second",
163
+ field: "idlePercent",
164
+ isPercent: true,
165
+ },
166
+ {
167
+ metric: "io.confluent.flink/task/backpressure_time_ms_per_second",
168
+ field: "backpressurePercent",
169
+ isPercent: true,
170
+ },
171
+ {
172
+ metric: "io.confluent.flink/operator/current_input_watermark_ms",
173
+ field: "inputWatermarkMs",
174
+ },
175
+ {
176
+ metric: "io.confluent.flink/operator/current_output_watermark_ms",
177
+ field: "outputWatermarkMs",
178
+ },
179
+ ];
180
+ const SUMMARY_METRICS = [
181
+ { metric: "io.confluent.flink/num_records_in", field: "recordsIn" },
182
+ { metric: "io.confluent.flink/num_records_out", field: "recordsOut" },
183
+ {
184
+ metric: "io.confluent.flink/operator/state_size_bytes",
185
+ field: "stateBytes",
186
+ },
187
+ {
188
+ metric: "io.confluent.flink/current_input_watermark_milliseconds",
189
+ field: "inputWatermarkMs",
190
+ },
191
+ {
192
+ metric: "io.confluent.flink/current_output_watermark_milliseconds",
193
+ field: "outputWatermarkMs",
194
+ },
195
+ {
196
+ metric: "io.confluent.flink/statement_utilization/current_cfus",
197
+ field: "cfus",
198
+ },
199
+ { metric: "io.confluent.flink/pending_records", field: "pendingRecords" },
200
+ {
201
+ metric: "io.confluent.flink/num_late_records_in",
202
+ field: "numLateRecordsIn",
203
+ },
204
+ ];
205
+ /**
206
+ * POST a single-aggregation telemetry query filtered to one statement and
207
+ * compute pool, returning the grouped rows (empty when none). When
208
+ * `groupByTask` is set the rows carry a per-task id for task-level breakdown.
209
+ */
210
+ async function queryTelemetryMetric(telemetryClient, metric, ctx, groupByTask) {
211
+ const response = (await telemetryClient.POST("/v2/metrics/{dataset}/query", {
212
+ params: { path: { dataset: "cloud" } },
213
+ body: {
214
+ aggregations: [{ metric }],
215
+ filter: {
216
+ op: "AND",
217
+ filters: [
218
+ {
219
+ field: "resource.flink_statement.name",
220
+ op: "EQ",
221
+ value: ctx.statementName,
222
+ },
223
+ {
224
+ field: "resource.compute_pool.id",
225
+ op: "EQ",
226
+ value: ctx.computePoolId,
227
+ },
228
+ ],
229
+ },
230
+ granularity: "PT1M",
231
+ intervals: [`${ctx.startTime.toISOString()}/${ctx.now.toISOString()}`],
232
+ limit: 1000,
233
+ ...(groupByTask ? { group_by: ["metric.flink_task.id"] } : {}),
234
+ format: "GROUPED",
235
+ },
236
+ }));
237
+ return response.data?.data ?? [];
238
+ }
239
+ /** Query every per-task metric and fold each into `taskMetrics`. */
240
+ async function collectPerTaskMetrics(telemetryClient, taskMetrics, ctx) {
241
+ for (const spec of PER_TASK_METRICS) {
242
+ await collectPerTaskMetric(telemetryClient, taskMetrics, spec, ctx);
243
+ }
244
+ }
245
+ async function collectPerTaskMetric(telemetryClient, taskMetrics, spec, ctx) {
246
+ try {
247
+ const groups = await queryTelemetryMetric(telemetryClient, spec.metric, ctx, true);
248
+ for (const group of groups) {
249
+ applyPerTaskPoint(taskMetrics, spec, group);
250
+ }
251
+ }
252
+ catch {
253
+ // A single failing metric shouldn't abort the whole profile.
254
+ }
255
+ }
256
+ /**
257
+ * Fold one grouped telemetry row into its task, honoring the Long.MIN_VALUE
258
+ * "no watermark" sentinel and the ms/second → percent conversion.
259
+ */
260
+ function applyPerTaskPoint(taskMetrics, spec, group) {
261
+ const taskId = group["metric.flink_task.id"];
262
+ const value = lastPointValue(group.points);
263
+ if (!taskId || value === undefined || value <= LONG_MIN_VALUE + 1000000) {
264
+ return;
265
+ }
266
+ const task = taskMetrics.get(taskId);
267
+ if (!task) {
268
+ return;
269
+ }
270
+ task[spec.field] = spec.isPercent
271
+ ? (value / 1000) * 100
272
+ : value;
273
+ }
274
+ /** Query every statement-level metric (no group_by) into a fresh summary. */
275
+ async function collectSummaryMetrics(telemetryClient, ctx) {
276
+ const summary = {};
277
+ for (const spec of SUMMARY_METRICS) {
278
+ await collectSummaryMetric(telemetryClient, summary, spec, ctx);
279
+ }
280
+ return summary;
281
+ }
282
+ async function collectSummaryMetric(telemetryClient, summary, spec, ctx) {
283
+ try {
284
+ const groups = await queryTelemetryMetric(telemetryClient, spec.metric, ctx, false);
285
+ const value = lastPointValue(groups[0]?.points);
286
+ if (value === undefined || value <= LONG_MIN_VALUE + 1000000) {
287
+ return;
288
+ }
289
+ summary[spec.field] = value;
290
+ }
291
+ catch {
292
+ // A single failing metric shouldn't abort the whole profile.
293
+ }
294
+ }
295
+ /** Value of the last data point, or undefined when there are none. */
296
+ function lastPointValue(points) {
297
+ return points?.at(-1)?.value;
298
+ }
299
+ /**
300
+ * Shape one task's metrics for the response, formatting percentages and
301
+ * converting watermark epochs to ISO strings.
302
+ */
303
+ function buildTaskView(task) {
304
+ return {
305
+ name: task.taskName,
306
+ operators: task.operators,
307
+ metrics: {
308
+ recordsIn: task.recordsIn,
309
+ recordsOut: task.recordsOut,
310
+ stateBytes: task.stateBytes,
311
+ busyPercent: formatPercent(task.busyPercent),
312
+ idlePercent: formatPercent(task.idlePercent),
313
+ backpressurePercent: formatPercent(task.backpressurePercent),
314
+ inputWatermark: epochMsToIso(task.inputWatermarkMs),
315
+ outputWatermark: epochMsToIso(task.outputWatermarkMs),
316
+ },
317
+ };
318
+ }
319
+ /** Shape the statement-level summary for the response. */
320
+ function buildSummaryView(summary) {
321
+ return {
322
+ recordsIn: summary.recordsIn,
323
+ recordsOut: summary.recordsOut,
324
+ stateBytes: summary.stateBytes,
325
+ stateSizeMB: formatStateSizeMB(summary.stateBytes),
326
+ pendingRecords: summary.pendingRecords,
327
+ inputWatermark: epochMsToIso(summary.inputWatermarkMs),
328
+ outputWatermark: epochMsToIso(summary.outputWatermarkMs),
329
+ cfus: summary.cfus,
330
+ };
331
+ }
332
+ function formatPercent(value) {
333
+ if (value === undefined) {
334
+ return undefined;
335
+ }
336
+ return `${value.toFixed(1)}%`;
337
+ }
338
+ function formatStateSizeMB(bytes) {
339
+ if (bytes === undefined) {
340
+ return undefined;
341
+ }
342
+ return (bytes / (1024 * 1024)).toFixed(2);
343
+ }
344
+ function epochMsToIso(ms) {
345
+ if (ms === undefined) {
346
+ return undefined;
347
+ }
348
+ return new Date(ms).toISOString();
349
+ }
350
+ /** Run every metric-based issue detector and collect the ones that fired. */
351
+ function detectIssues(taskMetrics, summary) {
352
+ return [
353
+ ...detectBackpressure(taskMetrics),
354
+ detectConsumerLag(summary),
355
+ detectLateData(summary),
356
+ detectLargeState(summary),
357
+ detectNoInputData(taskMetrics, summary),
358
+ ].filter((issue) => issue !== undefined);
359
+ }
360
+ /** One issue per task spending >50% of its time backpressured. */
361
+ function detectBackpressure(taskMetrics) {
362
+ const issues = [];
363
+ for (const task of taskMetrics.values()) {
364
+ if (task.backpressurePercent === undefined ||
365
+ task.backpressurePercent <= 50) {
366
+ continue;
367
+ }
368
+ issues.push({
369
+ type: "high_backpressure",
370
+ severity: task.backpressurePercent > 80 ? "high" : "medium",
371
+ description: `Task '${task.taskName}' has ${task.backpressurePercent.toFixed(1)}% backpressure.`,
372
+ suggestion: "Downstream operators are slow. Consider increasing parallelism or optimizing sink performance.",
373
+ taskName: task.taskName,
374
+ });
375
+ }
376
+ return issues;
377
+ }
378
+ function detectConsumerLag(summary) {
379
+ if (summary.pendingRecords === undefined ||
380
+ summary.pendingRecords <= 100000) {
381
+ return undefined;
382
+ }
383
+ return {
384
+ type: "high_consumer_lag",
385
+ severity: summary.pendingRecords > 1000000 ? "high" : "medium",
386
+ description: `High consumer lag: ${summary.pendingRecords.toLocaleString()} pending records.`,
387
+ suggestion: "Statement is falling behind input rate. Consider increasing parallelism or CFUs.",
388
+ };
389
+ }
390
+ function detectLateData(summary) {
391
+ const lateRecords = summary.numLateRecordsIn;
392
+ if (lateRecords === undefined || lateRecords <= 0) {
393
+ return undefined;
394
+ }
395
+ return {
396
+ type: "late_data",
397
+ severity: lateDataSeverity(lateRecords),
398
+ description: `${lateRecords.toLocaleString()} late records detected (arrived after watermark).`,
399
+ suggestion: "Consider increasing watermark delay tolerance or investigating source timestamp issues.",
400
+ };
401
+ }
402
+ function lateDataSeverity(lateRecords) {
403
+ if (lateRecords > 10000) {
404
+ return "high";
405
+ }
406
+ if (lateRecords > 1000) {
407
+ return "medium";
408
+ }
409
+ return "low";
410
+ }
411
+ function detectLargeState(summary) {
412
+ if (summary.stateBytes === undefined) {
413
+ return undefined;
414
+ }
415
+ const stateSizeGB = summary.stateBytes / (1024 * 1024 * 1024);
416
+ if (stateSizeGB <= 10) {
417
+ return undefined;
418
+ }
419
+ return {
420
+ type: "large_state",
421
+ severity: "medium",
422
+ description: `Large state size: ${stateSizeGB.toFixed(2)} GB.`,
423
+ suggestion: "Consider adding TTL to stateful operations or reviewing deduplication windows.",
424
+ };
425
+ }
426
+ /** Fires when every task is >90% idle and no input records arrived. */
427
+ function detectNoInputData(taskMetrics, summary) {
428
+ const allTasksIdle = Array.from(taskMetrics.values()).every((t) => t.idlePercent !== undefined && t.idlePercent > 90);
429
+ if (!allTasksIdle || summary.recordsIn !== 0) {
430
+ return undefined;
431
+ }
432
+ return {
433
+ type: "no_input_data",
434
+ severity: "medium",
435
+ description: "Statement is mostly idle with no input records.",
436
+ suggestion: "Check if source topics have data. Verify topic names and connectivity.",
437
+ };
381
438
  }
382
439
  //# sourceMappingURL=query-profiler-handler.js.map