@stkxp/cli 0.1.2

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 (371) hide show
  1. package/README.md +273 -0
  2. package/bin/stkxp.mjs +198 -0
  3. package/package.json +97 -0
  4. package/src/bootstrap.mjs +37 -0
  5. package/src/bootstrap.test.mjs +73 -0
  6. package/src/deploy.mjs +145 -0
  7. package/src/deploy.test.mjs +131 -0
  8. package/src/export.mjs +30 -0
  9. package/src/export.test.mjs +56 -0
  10. package/src/secret-input.mjs +64 -0
  11. package/src/secret-input.test.mjs +58 -0
  12. package/src/serve.mjs +83 -0
  13. package/src/serve.test.mjs +93 -0
  14. package/vendor/dist-server/asyncapi/generator.js +1 -0
  15. package/vendor/dist-server/asyncapi/messages.js +1 -0
  16. package/vendor/dist-server/asyncapi/viewer.html +43 -0
  17. package/vendor/dist-server/core/app-config/branding.js +1 -0
  18. package/vendor/dist-server/core/app-config/mantine-theme.js +1 -0
  19. package/vendor/dist-server/core/app-config/mermaid-theme.js +2 -0
  20. package/vendor/dist-server/core/app-config/prompt-optimization.js +1 -0
  21. package/vendor/dist-server/core/app-config/settings.js +1 -0
  22. package/vendor/dist-server/core/config.js +1 -0
  23. package/vendor/dist-server/core/graph/a2a-agent-executor.js +2 -0
  24. package/vendor/dist-server/core/graph/app.js +120 -0
  25. package/vendor/dist-server/core/graph/delegated-agent-adapter.js +1 -0
  26. package/vendor/dist-server/core/graph/graph-builder.js +3 -0
  27. package/vendor/dist-server/core/graph/kibana-agent-executor.js +1 -0
  28. package/vendor/dist-server/core/graph/nodes/context/assistants-context.js +5 -0
  29. package/vendor/dist-server/core/graph/nodes/context/compare-context.js +10 -0
  30. package/vendor/dist-server/core/graph/nodes/context/enrich-context.js +8 -0
  31. package/vendor/dist-server/core/graph/nodes/context/inventory-context.js +4 -0
  32. package/vendor/dist-server/core/graph/nodes/context/namespace-context.js +2 -0
  33. package/vendor/dist-server/core/graph/nodes/context/node-types-context.js +4 -0
  34. package/vendor/dist-server/core/graph/nodes/context/relevant-assistants-context.js +5 -0
  35. package/vendor/dist-server/core/graph/nodes/context/relevant-skills-context.js +5 -0
  36. package/vendor/dist-server/core/graph/nodes/context/skills-context.js +8 -0
  37. package/vendor/dist-server/core/graph/nodes/context/state-setter.js +1 -0
  38. package/vendor/dist-server/core/graph/nodes/control/check-reset.js +1 -0
  39. package/vendor/dist-server/core/graph/nodes/control/topic-detection.js +1 -0
  40. package/vendor/dist-server/core/graph/nodes/governance/human-approval.js +16 -0
  41. package/vendor/dist-server/core/graph/nodes/index.js +1 -0
  42. package/vendor/dist-server/core/graph/nodes/orchestration/suggestion-generator.js +17 -0
  43. package/vendor/dist-server/core/graph/nodes/orchestration/team-decider.js +1 -0
  44. package/vendor/dist-server/core/graph/nodes/orchestration/team-execution/decider-error.js +4 -0
  45. package/vendor/dist-server/core/graph/nodes/orchestration/team-execution/decider-standalone-runner.js +1 -0
  46. package/vendor/dist-server/core/graph/nodes/orchestration/team-execution/decider-synthesis.js +29 -0
  47. package/vendor/dist-server/core/graph/nodes/orchestration/team-execution/pipeline-memory.js +2 -0
  48. package/vendor/dist-server/core/graph/nodes/orchestration/team-execution/pipeline-runner.js +7 -0
  49. package/vendor/dist-server/core/graph/nodes/orchestration/team-execution/team-assistant-utils.js +1 -0
  50. package/vendor/dist-server/core/graph/nodes/orchestration/team-finder.js +13 -0
  51. package/vendor/dist-server/core/graph/nodes/orchestration/team-invoker.js +3 -0
  52. package/vendor/dist-server/core/graph/nodes/orchestration/team-parallel.js +1 -0
  53. package/vendor/dist-server/core/graph/nodes/orchestration/team-pipeline.js +6 -0
  54. package/vendor/dist-server/core/graph/nodes/orchestration/team-router.js +26 -0
  55. package/vendor/dist-server/core/graph/nodes/reasoning/code-executor/index.js +6 -0
  56. package/vendor/dist-server/core/graph/nodes/reasoning/code-executor/resource-bridge.js +2 -0
  57. package/vendor/dist-server/core/graph/nodes/reasoning/code-executor/sandbox.js +6 -0
  58. package/vendor/dist-server/core/graph/nodes/reasoning/code-executor/tool-bridge.js +1 -0
  59. package/vendor/dist-server/core/graph/nodes/reasoning/local-extractor.js +5 -0
  60. package/vendor/dist-server/core/graph/nodes/reasoning/response-generator.js +47 -0
  61. package/vendor/dist-server/core/graph/nodes/reasoning/static-code-executor/index.js +1 -0
  62. package/vendor/dist-server/core/graph/nodes/reasoning/system.js +54 -0
  63. package/vendor/dist-server/core/graph/nodes/reasoning/tool-executor.js +9 -0
  64. package/vendor/dist-server/core/graph/nodes/tools/raw-output.js +4 -0
  65. package/vendor/dist-server/core/graph/nodes/tools/tool-cleaner.js +7 -0
  66. package/vendor/dist-server/core/graph/nodes/tools/tool-execution/execute-tool-calls.js +3 -0
  67. package/vendor/dist-server/core/graph/nodes/tools/tool-execution/invoke.js +1 -0
  68. package/vendor/dist-server/core/graph/nodes/tools/tool-execution/namespace-guard.js +1 -0
  69. package/vendor/dist-server/core/graph/nodes/tools/tool-execution/result-limits.js +3 -0
  70. package/vendor/dist-server/core/graph/nodes/tools/tool-invoker.js +1 -0
  71. package/vendor/dist-server/core/graph/nodes/tools/tool.js +4 -0
  72. package/vendor/dist-server/core/graph/schemas.js +1 -0
  73. package/vendor/dist-server/core/graph/topic-variants.js +1 -0
  74. package/vendor/dist-server/core/graph/types.js +1 -0
  75. package/vendor/dist-server/core/graph/utils/content-utils.js +17 -0
  76. package/vendor/dist-server/core/graph/utils/edge-jsonata-condition.js +1 -0
  77. package/vendor/dist-server/core/graph/utils/engine-vars.js +1 -0
  78. package/vendor/dist-server/core/graph/utils/logging-utils.js +4 -0
  79. package/vendor/dist-server/core/graph/utils/message-utils.js +5 -0
  80. package/vendor/dist-server/core/graph/utils/node-type-defaults-cache.js +1 -0
  81. package/vendor/dist-server/core/graph/utils/sandbox-catalog.js +1 -0
  82. package/vendor/dist-server/core/graph/utils/schema-utils.js +1 -0
  83. package/vendor/dist-server/core/graph/utils/team-context-policy.js +5 -0
  84. package/vendor/dist-server/core/graph/utils/team-node-resolvers.js +1 -0
  85. package/vendor/dist-server/core/graph/utils/tool-result.js +4 -0
  86. package/vendor/dist-server/core/graph/utils/tool-wrapper.js +14 -0
  87. package/vendor/dist-server/core/llm/init-indices.js +1 -0
  88. package/vendor/dist-server/core/llm/models/index.js +1 -0
  89. package/vendor/dist-server/core/llm/models/model.model.js +1 -0
  90. package/vendor/dist-server/core/llm/models/provider.model.js +1 -0
  91. package/vendor/dist-server/core/llm/models/routing-rule.model.js +1 -0
  92. package/vendor/dist-server/core/llm/providers.js +1 -0
  93. package/vendor/dist-server/core/mcp/client.js +1 -0
  94. package/vendor/dist-server/core/runtime/active-runs-registry.js +1 -0
  95. package/vendor/dist-server/core/runtime/system-prompt-cache.js +1 -0
  96. package/vendor/dist-server/core/runtime/trace-bus.js +1 -0
  97. package/vendor/dist-server/core/schema/cluster_health_report.js +1 -0
  98. package/vendor/dist-server/core/schema/cluster_info.js +1 -0
  99. package/vendor/dist-server/core/schema/cluster_license.js +5 -0
  100. package/vendor/dist-server/core/schema/cluster_stats.js +12 -0
  101. package/vendor/dist-server/core/schema/dashboard.js +1 -0
  102. package/vendor/dist-server/core/schema/indices_settings.js +1 -0
  103. package/vendor/dist-server/core/schema/indices_shards.js +1 -0
  104. package/vendor/dist-server/core/schema/indices_stats.js +1 -0
  105. package/vendor/dist-server/core/schema/nodes_info.js +2 -0
  106. package/vendor/dist-server/core/schema/nodes_stats.js +11 -0
  107. package/vendor/dist-server/core/schema/pricing.js +1 -0
  108. package/vendor/dist-server/core/schema/ui.js +1 -0
  109. package/vendor/dist-server/core/schema/zod_client.js +83 -0
  110. package/vendor/dist-server/core/services/a2a-client.js +2 -0
  111. package/vendor/dist-server/core/services/alerts-service.js +1 -0
  112. package/vendor/dist-server/core/services/api-keys-service.js +1 -0
  113. package/vendor/dist-server/core/services/assistant-resolver.js +1 -0
  114. package/vendor/dist-server/core/services/assistants-index-service.js +1 -0
  115. package/vendor/dist-server/core/services/async-conversations-service.js +22 -0
  116. package/vendor/dist-server/core/services/asyncapi-dispatch.js +1 -0
  117. package/vendor/dist-server/core/services/asyncapi-drivers/driver-manager.js +1 -0
  118. package/vendor/dist-server/core/services/asyncapi-drivers/driver-types.js +0 -0
  119. package/vendor/dist-server/core/services/asyncapi-drivers/http-driver.js +1 -0
  120. package/vendor/dist-server/core/services/asyncapi-drivers/nats-driver.js +1 -0
  121. package/vendor/dist-server/core/services/asyncapi-drivers/websocket-driver.js +1 -0
  122. package/vendor/dist-server/core/services/asyncapi-events-service.js +1 -0
  123. package/vendor/dist-server/core/services/asyncapi-reply-service.js +1 -0
  124. package/vendor/dist-server/core/services/asyncapi-sink.js +1 -0
  125. package/vendor/dist-server/core/services/asyncapi-tools-service.js +1 -0
  126. package/vendor/dist-server/core/services/block-repair-service.js +13 -0
  127. package/vendor/dist-server/core/services/chart-renderer.js +1 -0
  128. package/vendor/dist-server/core/services/chat-llms-service.js +1 -0
  129. package/vendor/dist-server/core/services/chat-runs-service.js +1 -0
  130. package/vendor/dist-server/core/services/chat-tools-service.js +1 -0
  131. package/vendor/dist-server/core/services/chat-traces-service.js +1 -0
  132. package/vendor/dist-server/core/services/chats-service.js +5 -0
  133. package/vendor/dist-server/core/services/comparison-service.js +107 -0
  134. package/vendor/dist-server/core/services/default-model.service.js +1 -0
  135. package/vendor/dist-server/core/services/elastic-stack-sync-service.js +2 -0
  136. package/vendor/dist-server/core/services/elasticsearch-wrapper.js +1 -0
  137. package/vendor/dist-server/core/services/embed-rate-limiter.js +1 -0
  138. package/vendor/dist-server/core/services/error-analytics-service.js +1 -0
  139. package/vendor/dist-server/core/services/es-field-resolver.js +1 -0
  140. package/vendor/dist-server/core/services/gateway-platform-types.js +1 -0
  141. package/vendor/dist-server/core/services/gliner-tagging-service.js +1 -0
  142. package/vendor/dist-server/core/services/golden-questions-scoring.js +1 -0
  143. package/vendor/dist-server/core/services/golden-questions-service.js +1 -0
  144. package/vendor/dist-server/core/services/graph-drilldown-service.js +1 -0
  145. package/vendor/dist-server/core/services/graph-registry-service.js +1 -0
  146. package/vendor/dist-server/core/services/hitl-analytics-service.js +1 -0
  147. package/vendor/dist-server/core/services/ingestion-jobs-service.js +1 -0
  148. package/vendor/dist-server/core/services/ingestion-service.js +5 -0
  149. package/vendor/dist-server/core/services/kibana-client-factory.js +1 -0
  150. package/vendor/dist-server/core/services/kibana-client.js +2 -0
  151. package/vendor/dist-server/core/services/kibana-dashboard-extractor.js +1 -0
  152. package/vendor/dist-server/core/services/kibana-service.js +1 -0
  153. package/vendor/dist-server/core/services/llm-analytics-service.js +1 -0
  154. package/vendor/dist-server/core/services/llm-client-resolver.js +1 -0
  155. package/vendor/dist-server/core/services/llm-models-service.js +1 -0
  156. package/vendor/dist-server/core/services/llm-pricing-pure.js +1 -0
  157. package/vendor/dist-server/core/services/llm-pricing-service.js +1 -0
  158. package/vendor/dist-server/core/services/llm-providers-service.js +1 -0
  159. package/vendor/dist-server/core/services/llm-routing-service.js +1 -0
  160. package/vendor/dist-server/core/services/llm-services.js +1 -0
  161. package/vendor/dist-server/core/services/llm-sync-service.js +1 -0
  162. package/vendor/dist-server/core/services/manifest-loader.js +1 -0
  163. package/vendor/dist-server/core/services/mcp-servers-service.js +1 -0
  164. package/vendor/dist-server/core/services/mcp-sync-service.js +1 -0
  165. package/vendor/dist-server/core/services/mcp-tools-service.js +1 -0
  166. package/vendor/dist-server/core/services/memories-service.js +2 -0
  167. package/vendor/dist-server/core/services/memory-analytics-service.js +1 -0
  168. package/vendor/dist-server/core/services/monitoring-analytics-service.js +1 -0
  169. package/vendor/dist-server/core/services/monitoring-service.js +1 -0
  170. package/vendor/dist-server/core/services/multi-kibana-service.js +1 -0
  171. package/vendor/dist-server/core/services/node-latency-service.js +1 -0
  172. package/vendor/dist-server/core/services/package-policy-service.js +2 -0
  173. package/vendor/dist-server/core/services/pdf-service.js +572 -0
  174. package/vendor/dist-server/core/services/plan-service.js +1 -0
  175. package/vendor/dist-server/core/services/platform-direction.js +1 -0
  176. package/vendor/dist-server/core/services/platform-secrets.js +1 -0
  177. package/vendor/dist-server/core/services/platforms-service.js +1 -0
  178. package/vendor/dist-server/core/services/policy-factory.js +1 -0
  179. package/vendor/dist-server/core/services/prompt-cache-service.js +1 -0
  180. package/vendor/dist-server/core/services/provider-rate-limits.js +1 -0
  181. package/vendor/dist-server/core/services/quota-service.js +1 -0
  182. package/vendor/dist-server/core/services/report-assets-service.js +1 -0
  183. package/vendor/dist-server/core/services/run-analytics-collector.js +1 -0
  184. package/vendor/dist-server/core/services/run-stream-sink.js +1 -0
  185. package/vendor/dist-server/core/services/send_mail.js +460 -0
  186. package/vendor/dist-server/core/services/share-service.js +1 -0
  187. package/vendor/dist-server/core/services/slack-signature.js +1 -0
  188. package/vendor/dist-server/core/services/sources-service.js +6 -0
  189. package/vendor/dist-server/core/services/team-mcp-result.js +4 -0
  190. package/vendor/dist-server/core/services/team-mcp-run-tokens.js +1 -0
  191. package/vendor/dist-server/core/services/team-mcp-runner.js +1 -0
  192. package/vendor/dist-server/core/services/team-mcp-server.js +1 -0
  193. package/vendor/dist-server/core/services/team-mcp-tools.js +1 -0
  194. package/vendor/dist-server/core/services/team-mcp-ui.js +551 -0
  195. package/vendor/dist-server/core/services/team-run-progress.js +1 -0
  196. package/vendor/dist-server/core/services/team-runner-headless.js +7 -0
  197. package/vendor/dist-server/core/services/team-search-service.js +1 -0
  198. package/vendor/dist-server/core/services/teams-service.js +1 -0
  199. package/vendor/dist-server/core/services/token-projection-service.js +1 -0
  200. package/vendor/dist-server/core/services/tool-analytics-service.js +1 -0
  201. package/vendor/dist-server/core/services/tool-history-service.js +1 -0
  202. package/vendor/dist-server/core/services/tool-metrics-service.js +1 -0
  203. package/vendor/dist-server/core/services/tool-scoring.js +1 -0
  204. package/vendor/dist-server/core/services/toolbox-import-mappers.js +1 -0
  205. package/vendor/dist-server/core/services/toolbox-import-service.js +1 -0
  206. package/vendor/dist-server/core/services/trigger-service.js +1 -0
  207. package/vendor/dist-server/core/services/version-snapshot-service.js +1 -0
  208. package/vendor/dist-server/core/services/webhook-calls-service.js +1 -0
  209. package/vendor/dist-server/core/tools/compare-chat.js +46 -0
  210. package/vendor/dist-server/core/tools/enrich-chat.js +50 -0
  211. package/vendor/dist-server/core/tools/variable-encoding.js +1 -0
  212. package/vendor/dist-server/core/types/settings.js +1 -0
  213. package/vendor/dist-server/core/utils/ab-evaluator.js +5 -0
  214. package/vendor/dist-server/core/utils/condition-evaluator.js +1 -0
  215. package/vendor/dist-server/core/utils/http-client.js +1 -0
  216. package/vendor/dist-server/core/utils/json-schema-to-form.js +1 -0
  217. package/vendor/dist-server/core/utils/logger.js +3 -0
  218. package/vendor/dist-server/core/utils/owner-scope.js +1 -0
  219. package/vendor/dist-server/core/utils/ownership.js +1 -0
  220. package/vendor/dist-server/core/utils/parallel-tool-executor.js +1 -0
  221. package/vendor/dist-server/core/utils/performance-tracker.js +3 -0
  222. package/vendor/dist-server/core/utils/prompt-optimizer.js +40 -0
  223. package/vendor/dist-server/core/utils/response-cache.js +1 -0
  224. package/vendor/dist-server/core/utils/schema-validator.js +1 -0
  225. package/vendor/dist-server/core/utils/streaming-optimizer.js +2 -0
  226. package/vendor/dist-server/core/utils/string-helpers.js +1 -0
  227. package/vendor/dist-server/core/utils/test-responses.js +9 -0
  228. package/vendor/dist-server/core/utils/text-utils.js +1 -0
  229. package/vendor/dist-server/core/utils/tool-form-trigger.js +1 -0
  230. package/vendor/dist-server/entrypoints/cli-bootstrap-run.js +1 -0
  231. package/vendor/dist-server/entrypoints/cli-deploy-run.js +1 -0
  232. package/vendor/dist-server/entrypoints/cli-deploy.js +1 -0
  233. package/vendor/dist-server/entrypoints/team-runner.js +1 -0
  234. package/vendor/dist-server/generated/toolbox-catalog.js +1 -0
  235. package/vendor/dist-server/index.js +2 -0
  236. package/vendor/dist-server/middleware/integration-logos.js +1 -0
  237. package/vendor/dist-server/middleware/plan-guard.js +1 -0
  238. package/vendor/dist-server/openapi/generator.js +1 -0
  239. package/vendor/dist-server/openapi/html-tool-spec.js +1 -0
  240. package/vendor/dist-server/routes/a2a-routes.js +1 -0
  241. package/vendor/dist-server/routes/a2a-server-routes.js +5 -0
  242. package/vendor/dist-server/routes/admin.js +1 -0
  243. package/vendor/dist-server/routes/assistants-routes.js +1 -0
  244. package/vendor/dist-server/routes/asyncapi-routes.js +1 -0
  245. package/vendor/dist-server/routes/auth.js +1 -0
  246. package/vendor/dist-server/routes/billing-routes.js +1 -0
  247. package/vendor/dist-server/routes/chat-llms.js +1 -0
  248. package/vendor/dist-server/routes/chat-tools.js +1 -0
  249. package/vendor/dist-server/routes/chat-traces.js +1 -0
  250. package/vendor/dist-server/routes/chats.js +1 -0
  251. package/vendor/dist-server/routes/clusters.js +1 -0
  252. package/vendor/dist-server/routes/compare.js +43 -0
  253. package/vendor/dist-server/routes/connectors-routes.js +1 -0
  254. package/vendor/dist-server/routes/consumptions-routes.js +1 -0
  255. package/vendor/dist-server/routes/data-admin-routes.js +1 -0
  256. package/vendor/dist-server/routes/data-transfer-routes.js +1 -0
  257. package/vendor/dist-server/routes/elastic-tool-execution-routes.js +1 -0
  258. package/vendor/dist-server/routes/geo-proxy-routes.js +1 -0
  259. package/vendor/dist-server/routes/golden-questions-routes.js +1 -0
  260. package/vendor/dist-server/routes/graph-registry.js +1 -0
  261. package/vendor/dist-server/routes/graph-templates-routes.js +1 -0
  262. package/vendor/dist-server/routes/helpdesk-routes.js +35 -0
  263. package/vendor/dist-server/routes/html-routes.js +1 -0
  264. package/vendor/dist-server/routes/index.js +1 -0
  265. package/vendor/dist-server/routes/indices.js +1 -0
  266. package/vendor/dist-server/routes/integrations-routes.js +1 -0
  267. package/vendor/dist-server/routes/langgraph.js +7 -0
  268. package/vendor/dist-server/routes/live-resources-routes.js +1 -0
  269. package/vendor/dist-server/routes/llm-analytics.js +1 -0
  270. package/vendor/dist-server/routes/llm-control-plane.js +1 -0
  271. package/vendor/dist-server/routes/llm.js +1 -0
  272. package/vendor/dist-server/routes/mcp-gateway-routes.js +1 -0
  273. package/vendor/dist-server/routes/mcp-query-routes.js +1 -0
  274. package/vendor/dist-server/routes/mcp-servers-routes.js +1 -0
  275. package/vendor/dist-server/routes/mcp-team-routes.js +1 -0
  276. package/vendor/dist-server/routes/mcp-tools-routes.js +1 -0
  277. package/vendor/dist-server/routes/me-routes.js +63 -0
  278. package/vendor/dist-server/routes/memories-routes.js +1 -0
  279. package/vendor/dist-server/routes/monitoring-analytics.js +12 -0
  280. package/vendor/dist-server/routes/monitoring.js +1 -0
  281. package/vendor/dist-server/routes/node-types-routes.js +171 -0
  282. package/vendor/dist-server/routes/nodes.js +1 -0
  283. package/vendor/dist-server/routes/packages.js +1 -0
  284. package/vendor/dist-server/routes/pdf.js +3 -0
  285. package/vendor/dist-server/routes/plan-routes.js +1 -0
  286. package/vendor/dist-server/routes/platform-requests-routes.js +1 -0
  287. package/vendor/dist-server/routes/platforms-routes.js +1 -0
  288. package/vendor/dist-server/routes/prompts-routes.js +1 -0
  289. package/vendor/dist-server/routes/proxy-logos.js +1 -0
  290. package/vendor/dist-server/routes/quality-routes.js +1 -0
  291. package/vendor/dist-server/routes/resources-ingest-routes.js +1 -0
  292. package/vendor/dist-server/routes/resources-routes.js +1 -0
  293. package/vendor/dist-server/routes/schema-routes.js +1 -0
  294. package/vendor/dist-server/routes/settings-original.js +1 -0
  295. package/vendor/dist-server/routes/settings.js +1 -0
  296. package/vendor/dist-server/routes/share-routes.js +1 -0
  297. package/vendor/dist-server/routes/sources-catalog-routes.js +1 -0
  298. package/vendor/dist-server/routes/sources-routes.js +1 -0
  299. package/vendor/dist-server/routes/team-optimizer-routes.js +1 -0
  300. package/vendor/dist-server/routes/team-schedule-routes.js +1 -0
  301. package/vendor/dist-server/routes/teams-routes.js +1 -0
  302. package/vendor/dist-server/routes/tool-analytics.js +1 -0
  303. package/vendor/dist-server/routes/tool-history-routes.js +1 -0
  304. package/vendor/dist-server/routes/tool-metrics-routes.js +1 -0
  305. package/vendor/dist-server/routes/toolbox-import-routes.js +1 -0
  306. package/vendor/dist-server/routes/tools-routes.js +5 -0
  307. package/vendor/dist-server/routes/transcribe-routes.js +1 -0
  308. package/vendor/dist-server/routes/triggers.js +1 -0
  309. package/vendor/dist-server/routes/versions-routes.js +1 -0
  310. package/vendor/dist-server/routes/webhooks-routes.js +1 -0
  311. package/vendor/dist-server/scripts/add-label-to-tools.js +4 -0
  312. package/vendor/dist-server/scripts/migrate-assistants-to-mcp.js +10 -0
  313. package/vendor/dist-server/scripts/migrate-chat-runs.js +8 -0
  314. package/vendor/dist-server/scripts/migrate-mcp-protocol.js +8 -0
  315. package/vendor/dist-server/scripts/migrate-mcp-to-platforms.js +15 -0
  316. package/vendor/dist-server/services/alert-evaluator.js +3 -0
  317. package/vendor/dist-server/services/auth.js +1 -0
  318. package/vendor/dist-server/services/billing-service.js +1 -0
  319. package/vendor/dist-server/services/chat-title-generator.js +12 -0
  320. package/vendor/dist-server/services/clone/clone-executor.js +1 -0
  321. package/vendor/dist-server/services/clone/closure-resolver.js +3 -0
  322. package/vendor/dist-server/services/clone/entity-graph.js +3 -0
  323. package/vendor/dist-server/services/clone/team-bundle-bootstrap.js +1 -0
  324. package/vendor/dist-server/services/clone/team-bundle-crypto.js +1 -0
  325. package/vendor/dist-server/services/clone/team-bundle-encrypted.js +1 -0
  326. package/vendor/dist-server/services/clone/team-bundle.js +1 -0
  327. package/vendor/dist-server/services/cluster-service.js +1 -0
  328. package/vendor/dist-server/services/connection-adapters.js +1 -0
  329. package/vendor/dist-server/services/connectors-service.js +10 -0
  330. package/vendor/dist-server/services/cost-forecast-service.js +1 -0
  331. package/vendor/dist-server/services/eui-ssr-renderer.js +4 -0
  332. package/vendor/dist-server/services/graph-canvas/full-structure-builder.js +1 -0
  333. package/vendor/dist-server/services/graph-templates-service.js +13 -0
  334. package/vendor/dist-server/services/guest-service.js +1 -0
  335. package/vendor/dist-server/services/html-service.js +1 -0
  336. package/vendor/dist-server/services/langgraph-service.js +2 -0
  337. package/vendor/dist-server/services/leaflet-render-service.js +80 -0
  338. package/vendor/dist-server/services/live-resources-service.js +16 -0
  339. package/vendor/dist-server/services/mcp-app-tester-package.js +1 -0
  340. package/vendor/dist-server/services/mcp-gateway/executors/openapi-executor.js +1 -0
  341. package/vendor/dist-server/services/mcp-gateway/gateway-grant-service.js +2 -0
  342. package/vendor/dist-server/services/team-optimizer-service.js +1 -0
  343. package/vendor/dist-server/services/trace-bus-sink.js +1 -0
  344. package/vendor/dist-server/services/user-provisioning-service.js +3 -0
  345. package/vendor/dist-server/templates/mcp-app-tester/src/mcp-http.js +3 -0
  346. package/vendor/dist-server/templates/mcp-app-tester/src/server.js +1 -0
  347. package/vendor/dist-server/utils.js +1 -0
  348. package/vendor/dist-server/ws/assistant-executor.js +7 -0
  349. package/vendor/dist-server/ws/classify-streamed-json-block.js +1 -0
  350. package/vendor/dist-server/ws/collect-response-generator-node-ids.js +1 -0
  351. package/vendor/dist-server/ws/extractors/blockkit-extractor.js +1 -0
  352. package/vendor/dist-server/ws/extractors/echarts-extractor.js +1 -0
  353. package/vendor/dist-server/ws/extractors/eui-extractor.js +1 -0
  354. package/vendor/dist-server/ws/extractors/form-extractor.js +1 -0
  355. package/vendor/dist-server/ws/extractors/index.js +1 -0
  356. package/vendor/dist-server/ws/extractors/leaflet-extractor.js +1 -0
  357. package/vendor/dist-server/ws/extractors/mantine-extractor.js +1 -0
  358. package/vendor/dist-server/ws/extractors/markdown-extractor.js +7 -0
  359. package/vendor/dist-server/ws/extractors/mermaid-extractor.js +1 -0
  360. package/vendor/dist-server/ws/extractors/recharts-extractor.js +1 -0
  361. package/vendor/dist-server/ws/extractors/remotion-extractor.js +1 -0
  362. package/vendor/dist-server/ws/handler.js +66 -0
  363. package/vendor/dist-server/ws/parsers/anthropic-parser.js +7 -0
  364. package/vendor/dist-server/ws/parsers/base-parser.js +3 -0
  365. package/vendor/dist-server/ws/parsers/gemini-parser.js +8 -0
  366. package/vendor/dist-server/ws/parsers/index.js +1 -0
  367. package/vendor/dist-server/ws/parsers/parse-json-blocks.js +1 -0
  368. package/vendor/dist-server/ws/types.js +0 -0
  369. package/vendor/dist-server/ws/utils.js +1 -0
  370. package/vendor/shared/engine-vars.ts +51 -0
  371. package/vendor/shared/llm-providers-config.ts +69 -0
@@ -0,0 +1,572 @@
1
+ import h from"puppeteer";import{ChartRenderer as c}from"./chart-renderer";import{renderMessageContent as f}from"../../services/eui-ssr-renderer";class g{static browser=null;static async getBrowser(){return this.browser||(this.browser=await h.launch({executablePath:"/usr/bin/chromium",headless:!0,args:["--no-sandbox","--disable-setuid-sandbox","--disable-dev-shm-usage","--disable-accelerated-2d-canvas","--no-first-run","--no-zygote","--disable-gpu","--disable-web-security","--disable-features=VizDisplayCompositor","--font-render-hinting=none","--enable-font-antialiasing"]})),this.browser}static async closeBrowser(){this.browser&&(await this.browser.close(),this.browser=null)}static shouldUseSSRRendering(e){if(Array.isArray(e)||e&&typeof e=="object"&&e.blocks)return!0;if(typeof e=="string")try{const t=JSON.parse(e);if(Array.isArray(t)||t.blocks&&Array.isArray(t.blocks))return!0}catch{}return!1}static async legacyContentRendering(e){let t="";if(typeof e.content=="string"){console.log("[PDF Service] Processing string content");let i=null;try{i=JSON.parse(e.content),console.log("[PDF Service] Successfully parsed string as JSON:",{type:typeof i,isArray:Array.isArray(i),keys:i&&typeof i=="object"?Object.keys(i):null})}catch{console.log("[PDF Service] String is not JSON, treating as markdown")}i?i.type==="dashboard"&&i.blocks?(console.log("[PDF Service] Processing dashboard with",i.blocks.length,"blocks"),t=await this.blocksToHtml(i.blocks)):Array.isArray(i)?(console.log("[PDF Service] Processing array of",i.length,"blocks"),t=await this.blocksToHtml(i)):typeof i=="object"?(console.log("[PDF Service] Processing single object"),t=await this.objectToHtml(i)):t=this.markdownToHtml(e.content):t=this.markdownToHtml(e.content)}else Array.isArray(e.content)?(console.log("[PDF Service] Processing array of",e.content.length,"blocks"),t=await this.blocksToHtml(e.content)):typeof e.content=="object"&&e.content!==null?(console.log("[PDF Service] Processing object content"),t=await this.objectToHtml(e.content)):(console.warn("[PDF Service] Unknown content type, converting to string"),t=`<div class="content">${String(e.content)}</div>`);return t}static async generateHTML(e,t){const{title:i="STKXP AI Analysis Report",includeTimestamp:r=!0}=t;console.log("[PDF Service] generateHTML called with:",{contentType:typeof e.content,isArray:Array.isArray(e.content),contentKeys:typeof e.content=="object"&&e.content!==null?Object.keys(e.content):null,contentLength:Array.isArray(e.content)?e.content.length:null,contentSample:typeof e.content=="string"?e.content.substring(0,200):JSON.stringify(e.content).substring(0,200)});let a="",s="";if(this.shouldUseSSRRendering(e.content)){console.log("[PDF Service] Using SSR rendering with Emotion");try{const{html:n,styles:p}=await f(e.content);a=n,s=p,console.log("[PDF Service] SSR rendering successful")}catch(n){console.error("[PDF Service] SSR rendering failed, falling back to legacy method:",n),a=await this.legacyContentRendering(e)}}else console.log("[PDF Service] Using legacy rendering method"),a=await this.legacyContentRendering(e);return`
2
+ <!DOCTYPE html>
3
+ <html>
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>${i}</title>
7
+ ${s}
8
+ <style>
9
+ * {
10
+ margin: 0;
11
+ padding: 0;
12
+ box-sizing: border-box;
13
+ }
14
+
15
+ body {
16
+ font-family: system-ui, -apple-system, 'Segoe UI', sans-serif, 'Segoe UI Emoji', 'Apple Color Emoji', 'Noto Color Emoji';
17
+ line-height: 1.6;
18
+ color: #333;
19
+ background: white;
20
+ padding: 20px;
21
+ }
22
+
23
+ /* Ensure emojis render properly */
24
+ * {
25
+ font-family: system-ui, -apple-system, 'Segoe UI', sans-serif, 'Segoe UI Emoji', 'Apple Color Emoji', 'Noto Color Emoji';
26
+ }
27
+
28
+ /* Force emoji rendering with Unicode support */
29
+ .header h1,
30
+ .block-title,
31
+ h1, h2, h3, h4, h5, h6,
32
+ p, span, div {
33
+ font-family: system-ui, -apple-system, 'Segoe UI', sans-serif, 'Segoe UI Emoji', 'Apple Color Emoji', 'Noto Color Emoji', 'Android Emoji', 'EmojiOne Color' !important;
34
+ }
35
+
36
+ /* Emoji-specific rendering hints */
37
+ @supports (font-variation-settings: normal) {
38
+ body {
39
+ font-variant-emoji: emoji;
40
+ }
41
+ }
42
+
43
+ .header {
44
+ text-align: center;
45
+ margin-bottom: 30px;
46
+ padding-bottom: 20px;
47
+ border-bottom: 2px solid #eee;
48
+ }
49
+
50
+ .header h1 {
51
+ font-size: 24px;
52
+ color: #1a73e8;
53
+ margin-bottom: 10px;
54
+ }
55
+
56
+ .timestamp {
57
+ color: #666;
58
+ font-size: 14px;
59
+ }
60
+
61
+ .content {
62
+ max-width: 100%;
63
+ margin: 0 auto;
64
+ }
65
+
66
+ .block {
67
+ margin-bottom: 20px;
68
+ page-break-inside: avoid;
69
+ }
70
+
71
+ .block-title {
72
+ font-size: 18px;
73
+ font-weight: bold;
74
+ margin-bottom: 10px;
75
+ color: #1a73e8;
76
+ }
77
+
78
+ .block-description {
79
+ color: #666;
80
+ margin-bottom: 15px;
81
+ font-size: 14px;
82
+ }
83
+
84
+ .markdown-content {
85
+ margin: 15px 0;
86
+ }
87
+
88
+ .markdown-content h1,
89
+ .markdown-content h2,
90
+ .markdown-content h3 {
91
+ color: #1a73e8;
92
+ margin: 20px 0 10px 0;
93
+ }
94
+
95
+ .markdown-content p {
96
+ margin: 10px 0;
97
+ }
98
+
99
+ .markdown-content ul,
100
+ .markdown-content ol {
101
+ margin: 10px 0 10px 20px;
102
+ }
103
+
104
+ .markdown-content pre {
105
+ background: #f5f5f5;
106
+ padding: 10px;
107
+ border-radius: 4px;
108
+ overflow-x: auto;
109
+ margin: 10px 0;
110
+ }
111
+
112
+ .markdown-content code {
113
+ background: #f5f5f5;
114
+ padding: 2px 4px;
115
+ border-radius: 3px;
116
+ font-family: 'Monaco', 'Menlo', monospace;
117
+ }
118
+
119
+ .chart-placeholder {
120
+ width: 100%;
121
+ height: 300px;
122
+ background: #f8f9fa;
123
+ border: 1px dashed #ccc;
124
+ display: flex;
125
+ align-items: center;
126
+ justify-content: center;
127
+ color: #666;
128
+ font-style: italic;
129
+ margin: 15px 0;
130
+ }
131
+
132
+ .chart-container {
133
+ width: 100%;
134
+ text-align: center;
135
+ margin: 15px 0;
136
+ }
137
+
138
+ .chart-container img {
139
+ max-width: 100%;
140
+ height: auto;
141
+ border: 1px solid #e1e4e8;
142
+ border-radius: 6px;
143
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
144
+ }
145
+
146
+ .json-content {
147
+ background: #f8f9fa;
148
+ border: 1px solid #e1e4e8;
149
+ border-radius: 6px;
150
+ padding: 16px;
151
+ overflow-x: auto;
152
+ margin: 15px 0;
153
+ }
154
+
155
+ .json-content pre {
156
+ background: none;
157
+ padding: 0;
158
+ margin: 0;
159
+ font-family: 'Monaco', 'Menlo', monospace;
160
+ font-size: 12px;
161
+ }
162
+
163
+ table {
164
+ width: 100%;
165
+ border-collapse: collapse;
166
+ margin: 15px 0;
167
+ }
168
+
169
+ table th,
170
+ table td {
171
+ border: 1px solid #ddd;
172
+ padding: 8px;
173
+ text-align: left;
174
+ }
175
+
176
+ table th {
177
+ background-color: #f5f5f5;
178
+ font-weight: bold;
179
+ }
180
+
181
+ /* PDF-specific adjustments for EUI components */
182
+ .pdf-blocks-container {
183
+ max-width: 100%;
184
+ }
185
+
186
+ .pdf-block {
187
+ margin-bottom: 24px;
188
+ page-break-inside: avoid;
189
+ }
190
+
191
+ /* Ensure EUI panels have proper spacing */
192
+ [class*="euiPanel"] {
193
+ page-break-inside: avoid;
194
+ margin-bottom: 16px;
195
+ }
196
+
197
+ /* Ensure EUI flexbox works in PDF */
198
+ [class*="euiFlexGroup"] {
199
+ display: flex;
200
+ gap: 16px;
201
+ }
202
+
203
+ [class*="euiFlexItem"] {
204
+ flex: 1;
205
+ }
206
+
207
+ /* EUI Stats should be properly sized */
208
+ [class*="euiStat"] {
209
+ text-align: center;
210
+ padding: 16px;
211
+ min-height: 100px;
212
+ }
213
+
214
+ [class*="euiStat__title"] {
215
+ font-size: 32px;
216
+ font-weight: 700;
217
+ margin-bottom: 8px;
218
+ color: #0077CC;
219
+ line-height: 1.2;
220
+ }
221
+
222
+ [class*="euiStat__description"] {
223
+ font-size: 14px;
224
+ color: #666;
225
+ margin-top: 8px;
226
+ }
227
+
228
+ /* Color variants for EuiStat titles */
229
+ [class*="euiStat__title"][class*="--primary"] {
230
+ color: #0077CC;
231
+ }
232
+
233
+ [class*="euiStat__title"][class*="--success"] {
234
+ color: #017D73;
235
+ }
236
+
237
+ [class*="euiStat__title"][class*="--danger"] {
238
+ color: #BD271E;
239
+ }
240
+
241
+ [class*="euiStat__title"][class*="--warning"] {
242
+ color: #F5A700;
243
+ }
244
+
245
+ [class*="euiStat__title"][class*="--accent"] {
246
+ color: #DD0A73;
247
+ }
248
+
249
+ /* EUI tables should fit the page */
250
+ [class*="euiTable"] {
251
+ width: 100%;
252
+ page-break-inside: auto;
253
+ }
254
+
255
+ [class*="euiTable"] tr {
256
+ page-break-inside: avoid;
257
+ }
258
+
259
+ /* Ensure icons render properly */
260
+ [class*="euiIcon"] {
261
+ display: inline-block;
262
+ vertical-align: middle;
263
+ }
264
+
265
+ @media print {
266
+ body {
267
+ padding: 0;
268
+ }
269
+
270
+ .header {
271
+ page-break-after: avoid;
272
+ }
273
+
274
+ .block, .pdf-block {
275
+ page-break-inside: avoid;
276
+ }
277
+
278
+ /* Prevent EUI components from breaking across pages */
279
+ [class*="euiPanel"],
280
+ [class*="euiCallOut"],
281
+ [class*="euiCard"] {
282
+ page-break-inside: avoid;
283
+ }
284
+ }
285
+ </style>
286
+ </head>
287
+ <body>
288
+ <div class="header">
289
+ <h1>${i}</h1>
290
+ ${r?`<div class="timestamp">Generated on: ${e.timestamp.toLocaleString()}</div>`:""}
291
+ </div>
292
+ <div class="content">
293
+ ${a}
294
+ </div>
295
+ </body>
296
+ </html>
297
+ `}static markdownToHtml(e){return`<div class="markdown-content">${e.replace(/### (.*)/g,"<h3>$1</h3>").replace(/## (.*)/g,"<h2>$1</h2>").replace(/# (.*)/g,"<h1>$1</h1>").replace(/\*\*(.*?)\*\*/g,"<strong>$1</strong>").replace(/\*(.*?)\*/g,"<em>$1</em>").replace(/`(.*?)`/g,"<code>$1</code>").replace(/```([\s\S]*?)```/g,"<pre><code>$1</code></pre>").replace(/\n/g,"<br>")}</div>`}static cleanJSXForHTML(e){let t=e.replace(/\s+\w+={[^}]*<[^>]+\s*\/>[^}]*}/g,"");return t=t.replace(/\s+\w+={[^}]+}/g,""),t=t.replace(/<(\w+)[^>]*\/>/g,""),t=t.replace(/\s{2,}/g," "),t=t.replace(/<(\w+)[^>]*>\s*<\/\1>/g,""),t.trim()}static convertEuiToHtml(e){let t="";if(e.stats&&Array.isArray(e.stats)){const i=`
298
+ <div style="display: flex; gap: 16px; margin: 15px 0; flex-wrap: wrap;">
299
+ ${e.stats.map(r=>`
300
+ <div style="flex: 1; min-width: 150px; text-align: center; padding: 16px; border: 1px solid #ddd; border-radius: 6px;">
301
+ <div style="font-size: 32px; font-weight: 700; color: ${this.getColorCode(r.color||r.titleColor||"primary")}; margin-bottom: 8px;">
302
+ ${r.value||r.title}
303
+ </div>
304
+ <div style="font-size: 14px; color: #666;">
305
+ ${r.label||r.description}
306
+ </div>
307
+ </div>
308
+ `).join("")}
309
+ </div>
310
+ `;return`
311
+ <div class="block">
312
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
313
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
314
+ ${i}
315
+ </div>
316
+ `}if(e.body){const i=e.body.replace(/<Eui[A-Z][a-zA-Z]*[^>]*>/g,"").replace(/<\/Eui[A-Z][a-zA-Z]*>/g,"").replace(/<\/?[hH][1-6]>/g,"").replace(/<\/?strong>/g,"").replace(/\s+/g," ").trim();if(e.body.includes("EuiFlexGroup")||e.body.includes("EuiStat")){const r=this.parseEuiStats(e.body);if(r.length>0){const a=`
317
+ <div style="display: flex; gap: 16px; margin: 15px 0; flex-wrap: wrap;">
318
+ ${r.map(s=>`
319
+ <div style="flex: 1; min-width: 150px; text-align: center; padding: 16px; border: 1px solid #ddd; border-radius: 6px;">
320
+ <div style="font-size: 32px; font-weight: 700; color: ${this.getColorCode(s.color)}; margin-bottom: 8px;">
321
+ ${s.value}
322
+ </div>
323
+ <div style="font-size: 14px; color: #666;">
324
+ ${s.label}
325
+ </div>
326
+ </div>
327
+ `).join("")}
328
+ </div>
329
+ `;return`
330
+ <div class="block">
331
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
332
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
333
+ ${a}
334
+ </div>
335
+ `}}if(e.body.includes("EuiStat")||e.body.includes("EuiPanel")){const r=[],a=/<EuiTitle[^>]*><h3>([^<]+)<\/h3><\/EuiTitle>[\s\S]*?<Eui(?:Text|Health)[^>]*>([^<]+)</g;let s;for(;(s=a.exec(e.body))!==null;)r.push({label:s[1],value:s[2]});r.length>0?t=`
336
+ <div class="block">
337
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
338
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
339
+ <table style="width: 100%; border-collapse: collapse; margin: 15px 0;">
340
+ ${r.map(o=>`
341
+ <tr>
342
+ <td style="border: 1px solid #ddd; padding: 12px; background-color: #f5f5f5; font-weight: bold; width: 40%;">${o.label}</td>
343
+ <td style="border: 1px solid #ddd; padding: 12px;">${o.value}</td>
344
+ </tr>
345
+ `).join("")}
346
+ </table>
347
+ </div>
348
+ `:t=`
349
+ <div class="block">
350
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
351
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
352
+ <div class="markdown-content" style="padding: 15px; background-color: #f8f9fa; border-left: 4px solid #1a73e8; border-radius: 4px;">
353
+ ${i}
354
+ </div>
355
+ </div>
356
+ `}else t=`
357
+ <div class="block">
358
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
359
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
360
+ <div class="markdown-content" style="padding: 15px; background-color: #f8f9fa; border-left: 4px solid #1a73e8; border-radius: 4px;">
361
+ ${i}
362
+ </div>
363
+ </div>
364
+ `}else t=`
365
+ <div class="block">
366
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
367
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
368
+ </div>
369
+ `;return t}static parseEuiStats(e){const t=[],i=/<EuiStat[^>]*title=["'{]([^"'}]+)["'}][^>]*description=["']([^"']+)["'][^>]*(?:titleColor=["']([^"']+)["'])?[^>]*\/?>/g;let r;for(;(r=i.exec(e))!==null;)t.push({value:r[1].replace(/['"{}]/g,""),label:r[2],color:r[3]||"primary"});return t}static getColorCode(e){const t={primary:"#0077CC",success:"#017D73",danger:"#BD271E",warning:"#F5A700",accent:"#DD0A73",subdued:"#666"};return t[e]||t.primary}static convertTableToHtml(e){if(!e.data||!Array.isArray(e.data)||e.data.length===0)return`
370
+ <div class="block">
371
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
372
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
373
+ <div style="padding: 15px; background-color: #f8f9fa; border-radius: 4px; text-align: center; color: #666;">
374
+ No data available
375
+ </div>
376
+ </div>
377
+ `;let t=[];if(e.columns&&Array.isArray(e.columns)&&e.columns.length>0)t=e.columns.map(r=>({key:r.key||r.field||"",label:r.label||r.name||r.key||r.field||""}));else{const r=e.data[0];t=Object.keys(r).map(a=>({key:a,label:a.charAt(0).toUpperCase()+a.slice(1).replace(/_/g," ")}))}const i=`
378
+ <table style="width: 100%; border-collapse: collapse; margin: 15px 0;">
379
+ <thead>
380
+ <tr>
381
+ ${t.map(r=>`
382
+ <th style="border: 1px solid #ddd; padding: 10px; background-color: #f5f5f5; text-align: left; font-weight: bold;">
383
+ ${r.label}
384
+ </th>
385
+ `).join("")}
386
+ </tr>
387
+ </thead>
388
+ <tbody>
389
+ ${e.data.map(r=>`
390
+ <tr>
391
+ ${t.map(a=>`
392
+ <td style="border: 1px solid #ddd; padding: 10px;">
393
+ ${r[a.key]!==void 0&&r[a.key]!==null?r[a.key]:""}
394
+ </td>
395
+ `).join("")}
396
+ </tr>
397
+ `).join("")}
398
+ </tbody>
399
+ </table>
400
+ `;return`
401
+ <div class="block">
402
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
403
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
404
+ ${i}
405
+ </div>
406
+ `}static convertRechartsToEcharts(e){if(!e.data||!Array.isArray(e.data)||e.data.length===0)return null;const t=e.data,i=e.component||"BarChart",r=t[0],a=Object.keys(r),s=a[0],o=a.slice(1),n=t.map(l=>l[s]),p=o.map(l=>{const v=t.map(m=>m[l]);let d={name:l,data:v,type:"bar"};switch(i){case"LineChart":d.type="line",d.smooth=!0;break;case"AreaChart":d.type="line",d.areaStyle={},d.smooth=!0;break;case"BarChart":d.type="bar";break;case"ComposedChart":d.type="line";break;default:d.type="bar"}return d});return{tooltip:{trigger:"axis",axisPointer:{type:i==="BarChart"?"shadow":"line"}},legend:{data:o,top:10},grid:{left:"3%",right:"4%",bottom:"3%",top:60,containLabel:!0},xAxis:{type:"category",data:n,axisLabel:{rotate:n.length>10?45:0}},yAxis:{type:"value"},series:p}}static generateDataTable(e){if(!e.data||!Array.isArray(e.data)||e.data.length===0)return`
407
+ <div class="block">
408
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
409
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
410
+ <div class="chart-placeholder">
411
+ <div>
412
+ <div>\u{1F4CA} ${e.component||"Chart"}</div>
413
+ <div style="font-size: 12px; margin-top: 5px;">No data available</div>
414
+ </div>
415
+ </div>
416
+ </div>
417
+ `;const t=Object.keys(e.data[0]),i=`
418
+ <table style="width: 100%; border-collapse: collapse; margin: 15px 0;">
419
+ <thead>
420
+ <tr>
421
+ ${t.map(r=>`<th style="border: 1px solid #ddd; padding: 8px; background-color: #f5f5f5; text-align: left;">${r}</th>`).join("")}
422
+ </tr>
423
+ </thead>
424
+ <tbody>
425
+ ${e.data.map(r=>`
426
+ <tr>
427
+ ${t.map(a=>`<td style="border: 1px solid #ddd; padding: 8px;">${r[a]!==void 0?r[a]:""}</td>`).join("")}
428
+ </tr>
429
+ `).join("")}
430
+ </tbody>
431
+ </table>
432
+ <div style="margin: 10px 0; padding: 10px; background: #f8f9fa; border-radius: 4px; font-size: 12px; color: #666;">
433
+ <strong>Chart Type:</strong> ${e.component||"Chart"} |
434
+ <strong>Data Points:</strong> ${e.data.length}
435
+ </div>
436
+ `;return`
437
+ <div class="block">
438
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
439
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
440
+ ${i}
441
+ </div>
442
+ `}static async blocksToHtml(e){return(await Promise.all(e.map(i=>this.blockToHtml(i)))).join("")}static async blockToHtml(e){if(console.log("[PDF Service] Processing block:",{hasBlock:!!e,type:e?.type,keys:e?Object.keys(e):[],blockSample:e?JSON.stringify(e).substring(0,200):null}),!e)return console.warn("[PDF Service] Received null/undefined block"),"";if(!e.type){if(console.log("[PDF Service] Block has no type, attempting smart extraction"),typeof e=="string")return console.log("[PDF Service] Block is a string, treating as markdown"),`<div class="block">${this.markdownToHtml(e)}</div>`;if(e.body||e.content){const i=e.body||e.content;return console.log("[PDF Service] Found body/content property:",typeof i),`
443
+ <div class="block">
444
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
445
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
446
+ ${typeof i=="string"?this.markdownToHtml(i):`<div class="json-content"><pre>${JSON.stringify(i,null,2)}</pre></div>`}
447
+ </div>
448
+ `}if((e.options||e.option||e.series||e.xAxis||e.yAxis)&&(console.log("[PDF Service] Detected chart-like structure without type"),e.type="echarts",!e.options&&e.option?e.options=e.option:!e.options&&(e.series||e.xAxis)&&(e.options=e)),!e.type){console.warn("[PDF Service] Unable to determine block content type, showing JSON");const i=JSON.stringify(e,null,2);return i.length>10&&i!=="{}"&&i!=="[]"?`<div class="json-content"><pre>${i}</pre></div>`:""}}let t="";switch(e.type){case"markdown":t=`
449
+ <div class="block">
450
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
451
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
452
+ ${this.markdownToHtml(e.body||"")}
453
+ </div>
454
+ `;break;case"echarts":try{if(e.options&&c.validateChartOptions(e.options)){const i=await c.renderChartToBase64(e.options,{width:800,height:400,backgroundColor:"#ffffff"});t=`
455
+ <div class="block">
456
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
457
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
458
+ <div class="chart-container">
459
+ <img src="${i}" alt="${e.title||"Chart"}" style="max-width: 100%; height: auto; border: 1px solid #e1e4e8; border-radius: 6px;" />
460
+ </div>
461
+ </div>
462
+ `}else t=`
463
+ <div class="block">
464
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
465
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
466
+ <div class="chart-placeholder">
467
+ <div>
468
+ <div>\u{1F4CA} ECharts Chart</div>
469
+ <div style="font-size: 12px; margin-top: 5px;">Chart data invalid or incomplete</div>
470
+ ${e.title?`<div style="font-size: 12px;">Chart: ${e.title}</div>`:""}
471
+ </div>
472
+ </div>
473
+ </div>
474
+ `}catch(i){console.error("Chart rendering error:",i),t=`
475
+ <div class="block">
476
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
477
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
478
+ <div class="chart-placeholder">
479
+ <div>
480
+ <div>\u{1F4CA} ECharts Chart</div>
481
+ <div style="font-size: 12px; margin-top: 5px;">Chart rendering failed</div>
482
+ ${e.title?`<div style="font-size: 12px;">Chart: ${e.title}</div>`:""}
483
+ </div>
484
+ </div>
485
+ </div>
486
+ `}break;case"recharts":console.log("[PDF Service] Processing recharts block:",e.component);try{const i=this.convertRechartsToEcharts(e);if(i&&c.validateChartOptions(i)){const r=await c.renderChartToBase64(i,{width:800,height:400,backgroundColor:"#ffffff"});t=`
487
+ <div class="block">
488
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
489
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
490
+ <div class="chart-container">
491
+ <img src="${r}" alt="${e.title||"Chart"}" style="max-width: 100%; height: auto; border: 1px solid #e1e4e8; border-radius: 6px;" />
492
+ </div>
493
+ </div>
494
+ `}else t=this.generateDataTable(e)}catch(i){console.error("[PDF Service] Recharts rendering error:",i),t=this.generateDataTable(e)}break;case"mermaid":console.log("[PDF Service] Processing mermaid block:",e.title||"untitled");try{if(e.chartImage)t=`
495
+ <div class="block">
496
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
497
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
498
+ <div class="chart-container">
499
+ <img src="${e.chartImage}" alt="${e.title||"Mermaid Diagram"}" style="max-width: 100%; height: auto; border: 1px solid #e1e4e8; border-radius: 6px;" />
500
+ </div>
501
+ </div>
502
+ `;else if(e.body){const i=(await import("mermaid")).default;i.initialize({startOnLoad:!1,theme:"base",themeVariables:{primaryColor:"#0077CC",primaryTextColor:"#343741",primaryBorderColor:"#D3DAE6",lineColor:"#69707D",secondaryColor:"#017D73",tertiaryColor:"#DD0A73",background:"#ffffff",mainBkg:"#F5F7FA",textColor:"#343741"},fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif',securityLevel:"strict",logLevel:"error"});const r=`mermaid-pdf-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,{svg:a}=await i.render(r,e.body),o=`data:image/svg+xml;base64,${Buffer.from(a).toString("base64")}`;t=`
503
+ <div class="block">
504
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
505
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
506
+ <div class="chart-container">
507
+ <img src="${o}" alt="${e.title||"Mermaid Diagram"}" style="max-width: 100%; height: auto; border: 1px solid #e1e4e8; border-radius: 6px;" />
508
+ </div>
509
+ </div>
510
+ `}else t=`
511
+ <div class="block">
512
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
513
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
514
+ <div class="chart-placeholder">
515
+ <div>
516
+ <div>\u{1F4CA} Mermaid Diagram</div>
517
+ <div style="font-size: 12px; margin-top: 5px;">No diagram data provided</div>
518
+ </div>
519
+ </div>
520
+ </div>
521
+ `}catch(i){console.error("[PDF Service] Mermaid rendering error:",i),t=`
522
+ <div class="block">
523
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
524
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
525
+ <div class="chart-placeholder">
526
+ <div>
527
+ <div>\u{1F4CA} Mermaid Diagram</div>
528
+ <div style="font-size: 12px; margin-top: 5px;">Diagram rendering failed</div>
529
+ <div style="font-size: 11px; color: #666; margin-top: 3px;">${i instanceof Error?i.message:String(i)}</div>
530
+ </div>
531
+ </div>
532
+ </div>
533
+ `}break;case"leaflet":{if(console.log("[PDF Service] Processing leaflet block:",e.title||"untitled"),e.chartImage)t=`
534
+ <div class="block">
535
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
536
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
537
+ <div class="chart-container">
538
+ <img src="${e.chartImage}" alt="${e.title||"Carte"}" style="max-width: 100%; height: auto; border: 1px solid #e1e4e8; border-radius: 6px;" />
539
+ </div>
540
+ </div>
541
+ `;else{const i=(e.markers??[]).length,r=e.center?`${e.center[0].toFixed(4)}, ${e.center[1].toFixed(4)}`:"N/A";t=`
542
+ <div class="block">
543
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
544
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
545
+ <div class="chart-placeholder">
546
+ <div>
547
+ <div>\u{1F5FA}\uFE0F Carte interactive</div>
548
+ <div style="font-size: 12px; margin-top: 8px;">Centre : ${r} \u2014 Zoom : ${e.zoom??5}</div>
549
+ ${i>0?`<div style="font-size: 12px; margin-top: 4px;">${i} marqueur(s)</div>`:""}
550
+ <div style="font-size: 11px; color: #666; margin-top: 6px;">Carte disponible dans la version web</div>
551
+ </div>
552
+ </div>
553
+ </div>
554
+ `}break}case"remotion":{console.log("[PDF Service] Processing remotion block:",e.title||"untitled"),t=`
555
+ <div class="block">
556
+ ${e.title?`<div class="block-title">${e.title}</div>`:""}
557
+ ${e.description?`<div class="block-description">${e.description}</div>`:""}
558
+ <div class="chart-placeholder">
559
+ <div>
560
+ <div>\u{1F3AC} Animation (${e.templateId??"remotion"})</div>
561
+ <div style="font-size: 11px; color: #666; margin-top: 6px;">Animation disponible dans la version web</div>
562
+ </div>
563
+ </div>
564
+ </div>
565
+ `;break}case"eui":t=this.convertEuiToHtml(e);break;case"table":t=this.convertTableToHtml(e);break;default:t=`
566
+ <div class="block">
567
+ <div class="block-title">Unknown Block Type: ${e.type}</div>
568
+ <div class="json-content">
569
+ <pre>${JSON.stringify(e,null,2)}</pre>
570
+ </div>
571
+ </div>
572
+ `}return t}static async objectToHtml(e){return e&&e.type?await this.blockToHtml(e):`<div class="json-content"><pre>${JSON.stringify(e,null,2)}</pre></div>`}static async generatePDF(e,t={}){const r=await(await this.getBrowser()).newPage();try{await r.setViewport({width:1200,height:800});const a=await this.generateHTML(e,t);try{await r.setContent(a,{waitUntil:"domcontentloaded",timeout:15e3}),await new Promise(n=>setTimeout(n,2e3))}catch(n){console.warn("[PDF] Fast loading failed, retrying with relaxed timeout:",n.message),await r.setContent(a,{waitUntil:"networkidle2",timeout:6e4})}const s={format:t.format||"A4",landscape:t.orientation==="landscape",margin:t.margin||{top:"20mm",right:"15mm",bottom:"20mm",left:"15mm"},printBackground:!0,displayHeaderFooter:t.displayHeaderFooter||!1,headerTemplate:t.headerTemplate||"",footerTemplate:t.footerTemplate||""},o=await r.pdf(s);return Buffer.from(o)}finally{await r.close()}}static async generatePDFFromBlocks(e,t={}){const i={id:`blocks-${Date.now()}`,content:e,role:"agent",timestamp:new Date};return this.generatePDF(i,t)}static async generatePDFFromMarkdown(e,t={}){const i={id:`markdown-${Date.now()}`,content:e,role:"agent",timestamp:new Date};return this.generatePDF(i,t)}static getDefaultFilename(e,t){const i=t||new Date,r=e||"stkxp-ai-response",a=i.toISOString().slice(0,19).replace(/[:.]/g,"-");return`${r}-${a}`}}process.on("SIGTERM",async()=>{await g.closeBrowser()}),process.on("SIGINT",async()=>{await g.closeBrowser()});export{g as PDFService};
@@ -0,0 +1 @@
1
+ import{Client as x}from"@elastic/elasticsearch";import{config as d}from"../config";const g=new x(d.elasticsearch),t=null,s={trial:{maxManagedPlatforms:1,maxSelfHostedPlatforms:2,maxIntegrations:2,maxConnectors:2,maxSharedLinks:5,maxModels:2,maxRoutingRules:2,maxSkills:3,canCreateTools:!1,canCreatePrompts:!1,canCreateResources:!1,canExportPDF:!1,canCopyMessage:!1,canEditMessage:!1,canDownloadJSON:!1,canUseAdvancedSettings:!1,canEnrich:!1,canCompare:!1},basic:{maxManagedPlatforms:1,maxSelfHostedPlatforms:10,maxIntegrations:20,maxConnectors:20,maxSharedLinks:t,maxModels:t,maxRoutingRules:t,maxSkills:t,canCreateTools:!1,canCreatePrompts:!1,canCreateResources:!1,canExportPDF:!0,canCopyMessage:!0,canEditMessage:!0,canDownloadJSON:!0,canUseAdvancedSettings:!0,canEnrich:!0,canCompare:!0},enterprise:{maxManagedPlatforms:1,maxSelfHostedPlatforms:t,maxIntegrations:t,maxConnectors:t,maxSharedLinks:t,maxModels:t,maxRoutingRules:t,maxSkills:t,canCreateTools:!0,canCreatePrompts:!0,canCreateResources:!0,canExportPDF:!0,canCopyMessage:!0,canEditMessage:!0,canDownloadJSON:!0,canUseAdvancedSettings:!0,canEnrich:!0,canCompare:!0},premium:{maxManagedPlatforms:1,maxSelfHostedPlatforms:t,maxIntegrations:t,maxConnectors:t,maxSharedLinks:t,maxModels:t,maxRoutingRules:t,maxSkills:t,canCreateTools:!0,canCreatePrompts:!0,canCreateResources:!0,canExportPDF:!0,canCopyMessage:!0,canEditMessage:!0,canDownloadJSON:!0,canUseAdvancedSettings:!0,canEnrich:!0,canCompare:!0}},h={trial:0,basic:50,enterprise:200,premium:1e3},A={trial:"Trial",basic:"Basic",enterprise:"Enterprise",premium:"Premium"};function f(e){return s[e]??s.trial}function w(e){return e.plan!=="trial"||!e.planExpiresAt?!1:new Date(e.planExpiresAt)<new Date}function D(e){if(e.plan!=="trial"||!e.planExpiresAt)return null;const a=new Date(e.planExpiresAt).getTime()-Date.now();return Math.max(0,Math.ceil(a/(1e3*60*60*24)))}function L(){const e=new Date,a=new Date(e);return a.setDate(a.getDate()+15),{plan:"trial",planStatus:"active",planActivatedAt:e.toISOString(),planExpiresAt:a.toISOString()}}async function r(e,a){try{return(await g.search({index:e,size:0,body:{query:a}})).hits.total?.value??0}catch{return 0}}const P=e=>r(".stkxp_platforms",{bool:{must:[{term:{owner:e}},{term:{managedType:"self-hosted"}}]}}),S=e=>r(".stkxp_packages",{term:{owner:e}}),C=e=>r(".stkxp_connectors",{term:{owner:e}}),b=e=>r(".stkxp_share_links",{bool:{must:[{term:{ownerId:e}}],must_not:[{term:{revoked:!0}}]}}),k=e=>r(".stkxp_llm_deployments",{term:{owner:e}}),R=e=>r(".stkxp_routing_rules",{term:{owner:e}}),M=e=>r(".stkxp_tools",{term:{owner:e}});async function y(e,a){const n=f(a),[o,l,i,c,m,u,p]=await Promise.all([P(e),S(e),C(e),b(e),k(e),R(e),M(e)]);return{selfHostedPlatforms:{used:o,max:n.maxSelfHostedPlatforms},integrations:{used:l,max:n.maxIntegrations},connectors:{used:i,max:n.maxConnectors},sharedLinks:{used:c,max:n.maxSharedLinks},models:{used:m,max:n.maxModels},routingRules:{used:u,max:n.maxRoutingRules},skills:{used:p,max:n.maxSkills}}}export{s as PLAN_CAPABILITIES,A as PLAN_LABELS,h as PLAN_PRICES_EUR,b as countActiveSharedLinks,C as countConnectors,S as countIntegrations,k as countModels,R as countRoutingRules,P as countSelfHostedPlatforms,M as countSkills,f as getCapabilities,y as getQuotaReport,D as getTrialDaysLeft,L as initTrialMetadata,w as isTrialExpired};
@@ -0,0 +1 @@
1
+ const n=["Slack"];function o(t){return n.includes(t)?"output":"input"}export{n as OUTPUT_PLATFORM_TYPES,o as directionForType};
@@ -0,0 +1 @@
1
+ function c(r,t,e){e&&r.push(t)}function o(r,t){if(!t)return{config:t,secretFieldsSet:[]};const e=JSON.parse(JSON.stringify(t)),a=[];switch(e.authKey=c(a,"authKey",e.authKey),r){case"Slack":{e.clientSecret=c(a,"clientSecret",e.clientSecret),e.signingSecret=c(a,"signingSecret",e.signingSecret);break}case"ElasticStack":case"OpenSearch":{const u=r==="ElasticStack"?"elasticsearch":"opensearch";e.endpoints?.[u]&&(e.endpoints[u].password=c(a,`endpoints.${u}.password`,e.endpoints[u].password)),Array.isArray(e.access?.apiKeys)&&(e.access.apiKeys=e.access.apiKeys.map((p,n)=>({...p,name:c(a,`access.apiKeys.${n}.name`,p?.name)}))),e.access?.certificate?.content&&(a.push("access.certificate.content"),e.access.certificate={...e.access.certificate,content:void 0});break}case"OpenAPI":{e.auth&&(e.auth.apiKeyValue=c(a,"auth.apiKeyValue",e.auth.apiKeyValue),e.auth.apiKeySecret=c(a,"auth.apiKeySecret",e.auth.apiKeySecret),e.auth.bearerToken=c(a,"auth.bearerToken",e.auth.bearerToken),e.auth.password=c(a,"auth.password",e.auth.password),e.auth.clientSecret=c(a,"auth.clientSecret",e.auth.clientSecret));break}case"AsyncAPI":{e.broker?.auth&&(e.broker.auth.apiKeyValue=c(a,"broker.auth.apiKeyValue",e.broker.auth.apiKeyValue),e.broker.auth.bearerToken=c(a,"broker.auth.bearerToken",e.broker.auth.bearerToken),e.broker.auth.password=c(a,"broker.auth.password",e.broker.auth.password));break}case"postgres":case"clickhouse":case"mysql":case"elasticsearch":{e.access&&(e.access.password=c(a,"access.password",e.access.password),e.access.apikey=c(a,"access.apikey",e.access.apikey),e.access.certificate=c(a,"access.certificate",e.access.certificate));break}}return{config:e,secretFieldsSet:a}}function s(r,t){return r==null||r===""?t:r}function y(r,t,e){if(!t||!e)return t;const a=JSON.parse(JSON.stringify(t));switch(a.authKey=s(a.authKey,e.authKey),r){case"Slack":{a.clientSecret=s(a.clientSecret,e.clientSecret),a.signingSecret=s(a.signingSecret,e.signingSecret);break}case"ElasticStack":case"OpenSearch":{const u=r==="ElasticStack"?"elasticsearch":"opensearch";a.endpoints?.[u]&&e.endpoints?.[u]&&(a.endpoints[u].password=s(a.endpoints[u].password,e.endpoints[u].password)),Array.isArray(e.access?.apiKeys)&&e.access.apiKeys.length>0&&(!Array.isArray(a.access?.apiKeys)||a.access.apiKeys.length===0?a.access={...a.access,apiKeys:e.access.apiKeys}:a.access.apiKeys=a.access.apiKeys.map((p,n)=>({...p,name:s(p?.name,e.access.apiKeys[n]?.name)}))),a.access?.certificate&&!a.access.certificate.content&&e.access?.certificate?.content&&(a.access.certificate={...a.access.certificate,content:e.access.certificate.content});break}case"OpenAPI":{a.auth&&e.auth&&(a.auth.apiKeyValue=s(a.auth.apiKeyValue,e.auth.apiKeyValue),a.auth.apiKeySecret=s(a.auth.apiKeySecret,e.auth.apiKeySecret),a.auth.bearerToken=s(a.auth.bearerToken,e.auth.bearerToken),a.auth.password=s(a.auth.password,e.auth.password),a.auth.clientSecret=s(a.auth.clientSecret,e.auth.clientSecret));break}case"AsyncAPI":{a.broker?.auth&&e.broker?.auth&&(a.broker.auth.apiKeyValue=s(a.broker.auth.apiKeyValue,e.broker.auth.apiKeyValue),a.broker.auth.bearerToken=s(a.broker.auth.bearerToken,e.broker.auth.bearerToken),a.broker.auth.password=s(a.broker.auth.password,e.broker.auth.password));break}case"postgres":case"clickhouse":case"mysql":case"elasticsearch":{a.access&&e.access&&(a.access.password=s(a.access.password,e.access.password),a.access.apikey=s(a.access.apikey,e.access.apikey),a.access.certificate=s(a.access.certificate,e.access.certificate));break}}return a}export{o as maskPlatformSecrets,y as restoreBlankSecrets};
@@ -0,0 +1 @@
1
+ import{Client as x}from"@elastic/elasticsearch";import{randomUUID as _}from"crypto";import{config as v}from"../config";import{directionForType as b}from"./platform-direction";import{restoreBlankSecrets as C}from"./platform-secrets";const l=new x(v.elasticsearch),d=".stkxp_platforms",D=".stkxp_tools";class g extends Error{}function k(e){if(!e||e.length===0)return[];const n=e.map(r=>({...r,id:r.id||_()})),t=new Set;for(const r of n){if(!r.command||!r.command.startsWith("/"))throw new g(`Command "${r.command}" must start with "/"`);if(!r.description||!r.description.trim())throw new g(`Command "${r.command}" must have a non-empty description`);if(t.has(r.command))throw new g(`Duplicate command "${r.command}" \u2014 commands must be unique within a platform`);t.add(r.command)}return n}const $="logs-*, metrics-*";function U(e){return(e&&e.trim()?e:$).split(",").map(t=>t.trim()).filter(Boolean)}function T(e,n){if(n===e)return!0;if(n.endsWith("*")&&!n.slice(0,-1).includes("*")){const t=n.slice(0,-1);if(e.startsWith(t))return!0}return!1}function K(e,n){if(!e||!e.trim())return{allowed:!1,rejectedEntry:"<empty>"};const t=e.split(",").map(r=>r.trim()).filter(Boolean);for(const r of t)if(!n.some(o=>T(r,o)))return{allowed:!1,rejectedEntry:r};return{allowed:!0}}async function m(){try{await l.indices.exists({index:d})||(await l.indices.create({index:d,body:{mappings:{properties:{id:{type:"keyword"},name:{type:"text",fields:{keyword:{type:"keyword"}}},type:{type:"keyword"},managedType:{type:"keyword"},direction:{type:"keyword"},description:{type:"text"},owner:{type:"keyword"},created:{type:"date"},updated:{type:"date"},enabled:{type:"boolean"},allowedIndexPatterns:{type:"keyword",index:!1},commands:{type:"nested",properties:{id:{type:"keyword"},command:{type:"keyword"},description:{type:"text"}}},config:{type:"object",dynamic:!1,properties:{url:{type:"keyword"},protocol:{type:"keyword"},serverType:{type:"keyword"},packageName:{type:"keyword"},namespace:{type:"keyword"},authKey:{type:"keyword",index:!1,doc_values:!1},headers:{type:"object",dynamic:!0},queryParams:{type:"object",dynamic:!0},clientId:{type:"keyword"},clientSecret:{type:"keyword",index:!1,doc_values:!1},signingSecret:{type:"keyword",index:!1,doc_values:!1},redirectUri:{type:"keyword"},scopes:{type:"keyword"},baseUrl:{type:"keyword"},auth:{type:"object",dynamic:!1,properties:{type:{type:"keyword"},apiKeyHeader:{type:"keyword"},apiKeyValue:{type:"keyword",index:!1,doc_values:!1},bearerToken:{type:"keyword",index:!1,doc_values:!1},username:{type:"keyword"},password:{type:"keyword",index:!1,doc_values:!1}}},endpoints:{type:"object",dynamic:!1,properties:{elasticsearch:{type:"object",properties:{url:{type:"keyword"},port:{type:"keyword"},basePath:{type:"keyword"},username:{type:"keyword"},password:{type:"keyword",index:!1,doc_values:!1}}},kibana:{type:"object",properties:{url:{type:"keyword"},port:{type:"keyword"},basePath:{type:"keyword"}}},opensearch:{type:"object",properties:{url:{type:"keyword"},port:{type:"keyword"},username:{type:"keyword"},password:{type:"keyword",index:!1,doc_values:!1}}},dashboards:{type:"object",properties:{url:{type:"keyword"},port:{type:"keyword"}}}}},access:{type:"object",dynamic:!1,properties:{apiKeys:{type:"nested",properties:{id:{type:"keyword"},name:{type:"keyword"},created:{type:"date"},enabled:{type:"boolean"}}},certificate:{type:"object",dynamic:!1,properties:{content:{type:"keyword",index:!1,doc_values:!1},filename:{type:"keyword"},uploaded:{type:"date"}}}}}}}}},settings:{number_of_shards:1,number_of_replicas:1}}}),console.log(`\u2705 Created index: ${d}`))}catch(e){throw console.error("Failed to ensure platforms index:",e),e}}async function R(e){await m();const n=`platform_${Date.now()}_${Math.random().toString(36).substring(2,9)}`,t=new Date().toISOString(),r=e.type==="MCPServer"&&e.config?.serverType==="local"?"managed":e.managedType,a={id:n,created:t,updated:t,...e,commands:k(e.commands),managedType:r,direction:b(e.type)};return await l.index({index:d,id:n,body:a,refresh:"wait_for"}),a}const P={bool:{filter:[{term:{type:"MCPServer"}},{term:{"config.serverType":"local"}}]}};async function B(e,n,t,r=1,a=20,o,s){await m();const i=[{term:{owner:e}}],y=[];n==="managed"?i.push({bool:{should:[{term:{managedType:"managed"}},P],minimum_should_match:1}}):n==="self-hosted"&&(i.push({term:{managedType:"self-hosted"}}),y.push(P)),t&&i.push({term:{type:t}}),s==="input"?i.push({bool:{should:[{term:{direction:"input"}},{bool:{must_not:{exists:{field:"direction"}}}}],minimum_should_match:1}}):s==="output"&&i.push({term:{direction:"output"}}),o?.trim()&&i.push({wildcard:{"name.keyword":{value:`*${o.trim()}*`,case_insensitive:!0}}});const u=(r-1)*a,p=await l.search({index:d,body:{query:{bool:{must:i,...y.length>0?{must_not:y}:{}}},sort:[{created:{order:"desc"}}],from:u,size:a}}),S=typeof p.hits.total=="number"?p.hits.total:p.hits.total?.value??0;return{platforms:p.hits.hits.map(w=>({...w._source,id:w._id})),total:S,page:r,pageSize:a}}async function N(e){await m();try{return(await l.search({index:d,body:{query:{bool:{must:[{term:{type:e}}],must_not:[{term:{disabled:!0}},{term:{enabled:!1}}]}},size:1e3,sort:[{created:{order:"desc"}}]}})).hits.hits.map(t=>({...t._source,id:t._id}))}catch(n){if(n.meta?.statusCode===404)return[];throw n}}async function F(){try{await l.indices.putMapping({index:d,body:{properties:{description:{type:"text"},config:{type:"object",dynamic:!1,properties:{url:{type:"keyword"},protocol:{type:"keyword"},serverType:{type:"keyword"},packageName:{type:"keyword"},namespace:{type:"keyword"},authKey:{type:"keyword",index:!1,doc_values:!1},headers:{type:"object",dynamic:!0},queryParams:{type:"object",dynamic:!0}}}}}}),console.log(`\u2705 putMcpServerMappingFields applied to ${d}`)}catch(e){throw console.error("Failed to apply MCPServer mapping fields:",e),e}}async function z(){try{await l.indices.putMapping({index:d,body:{properties:{commands:{type:"nested",properties:{id:{type:"keyword"},command:{type:"keyword"},description:{type:"text"}}}}}}),console.log(`\u2705 putCommandsMappingFields applied to ${d}`)}catch(e){throw console.error("Failed to apply commands mapping fields:",e),e}}async function h(e){try{const r=await l.get({index:d,id:e});if(r.found)return{platform:{...r._source,id:r._id},esDocId:r._id}}catch{}const t=(await l.search({index:d,body:{query:{term:{id:e}},size:1}})).hits.hits[0];return t?{platform:{...t._source,id:t._id},esDocId:t._id}:null}async function q(e,n,t=!1,r=!1){await m();try{const a=await h(e);if(!a)return null;const{platform:o}=a;return!r&&o.owner!==n&&!(t&&o.managedType==="managed")?null:o}catch(a){if(a.meta?.statusCode===404)return null;throw a}}async function H(e,n,t){await m();const r=await h(e);if(!r||r.platform.owner!==n)return null;const a=t.type??r.platform.type,o=t.config!==void 0?C(a,t.config,r.platform.config):r.platform.config,s=a==="MCPServer"&&o?.serverType==="local"?"managed":t.managedType??r.platform.managedType,c={...r.platform,...t,config:o,id:e,owner:n,created:r.platform.created,updated:new Date().toISOString(),commands:t.commands!==void 0?k(t.commands):r.platform.commands,managedType:s,direction:b(a)};return await l.index({index:d,id:r.esDocId,body:c,refresh:"wait_for"}),c}async function L(e,n){await m();const t=await h(e);if(!t||t.platform.owner!==n)return{deleted:!1,toolsDeleted:0};await l.delete({index:d,id:t.esDocId,refresh:"wait_for"});const r=t.esDocId,a=t.platform.name;let o=0;try{const s=[{term:{platformId:r}},{term:{mcpServerId:r}}];a&&s.push({term:{mcpServerName:a}});const c=await l.deleteByQuery({index:D,refresh:!0,conflicts:"proceed",body:{query:{bool:{filter:[{term:{owner:n}}],should:s,minimum_should_match:1}}}});o=c?.deleted??c?.body?.deleted??0}catch(s){console.warn(`[deletePlatform] tool cascade failed for platform ${r}: ${s?.message??s}`)}return console.log(`[deletePlatform] deleted platform ${r}; cascaded ${o} linked tool(s)`),{deleted:!0,toolsDeleted:o}}function f(e,n,t="",r=""){const o=`${t?`/${t.replace(/^\/+|\/+$/g,"")}`:""}${r}`;if(e.startsWith("http://")||e.startsWith("https://")){const s=new URL(e);return`${s.protocol}//${s.hostname}:${n}${o}`}return`https://${e}:${n}${o}`}async function A(e){const n=new URLSearchParams({grant_type:"client_credentials"});e.scope&&n.set("scope",e.scope),e.audience&&n.set("audience",e.audience);const t={"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"};(e.authStyle??"body")==="basic"?t.Authorization=`Basic ${Buffer.from(`${e.clientId}:${e.clientSecret}`).toString("base64")}`:(n.set("client_id",e.clientId),n.set("client_secret",e.clientSecret));const r=await fetch(e.tokenUrl,{method:"POST",headers:t,body:n,signal:AbortSignal.timeout(1e4)});if(!r.ok){const o=await r.text().catch(()=>"");throw new Error(`OAuth token request failed: HTTP ${r.status} ${o}`)}const a=await r.json();if(!a?.access_token)throw new Error('OAuth token response missing "access_token"');return a.access_token}async function G(e){const n={};if(e.type==="ElasticStack"){const t=e.config,r=Date.now(),a=f(t.endpoints.elasticsearch.url,t.endpoints.elasticsearch.port,t.endpoints.elasticsearch.basePath);try{const i=await(await fetch(a,{method:"GET",headers:{Authorization:`Basic ${Buffer.from(`${t.endpoints.elasticsearch.username}:${t.endpoints.elasticsearch.password}`).toString("base64")}`}})).json();n.elasticsearch={connected:!0,latency:`${Date.now()-r}ms`,version:i.version?.number,clusterName:i.cluster_name}}catch(c){n.elasticsearch={connected:!1,latency:"N/A",error:String(c)}}const o=Date.now(),s=f(t.endpoints.kibana.url,t.endpoints.kibana.port,t.endpoints.kibana.basePath,"/api/status");try{const i=await(await fetch(s,{method:"GET"})).json();n.kibana={connected:!0,latency:`${Date.now()-o}ms`,version:i.version?.number}}catch(c){n.kibana={connected:!1,latency:"N/A",error:String(c)}}}else if(e.type==="OpenAPI"){const t=e.config,r=Date.now();try{const a={Accept:"application/json"},o=t.auth;if(o?.type==="bearer"&&o.bearerToken)a.Authorization=`Bearer ${o.bearerToken}`;else if(o?.type==="basic"&&o.username)a.Authorization=`Basic ${Buffer.from(`${o.username}:${o.password??""}`).toString("base64")}`;else if(o?.type==="apiKey"&&o.apiKeyHeader&&o.apiKeyValue)a[o.apiKeyHeader]=o.apiKeyValue;else if(o?.type==="oauth2_cc"&&o.tokenUrl&&o.clientId&&o.clientSecret){const u=await A({tokenUrl:o.tokenUrl,clientId:o.clientId,clientSecret:o.clientSecret,scope:o.scope,audience:o.audience,authStyle:o.authStyle}),p=o.tokenHeaderName?.trim()||"Authorization";a[p]=p.toLowerCase()==="authorization"?`Bearer ${u}`:u}const s=await fetch(t.baseUrl,{method:"GET",headers:a,signal:AbortSignal.timeout(1e4)}),c=`${Date.now()-r}ms`;let i;const y=s.headers.get("content-type")??"";try{i=y.includes("json")?await s.json():await s.text()}catch{i=null}n.openapi={connected:!0,status:s.status,latency:c,body:i}}catch(a){n.openapi={connected:!1,latency:`${Date.now()-r}ms`,error:a?.message??String(a)}}}else if(e.type==="OpenSearch"){const t=e.config,r=Date.now(),a=f(t.endpoints.opensearch.url,t.endpoints.opensearch.port);try{const i=await(await fetch(a,{method:"GET",headers:{Authorization:`Basic ${Buffer.from(`${t.endpoints.opensearch.username}:${t.endpoints.opensearch.password}`).toString("base64")}`}})).json();n.opensearch={connected:!0,latency:`${Date.now()-r}ms`,version:i.version?.number,clusterName:i.cluster_name}}catch(c){n.opensearch={connected:!1,latency:"N/A",error:String(c)}}const o=Date.now(),s=f(t.endpoints.dashboards.url,t.endpoints.dashboards.port,"","/api/status");try{const i=await(await fetch(s,{method:"GET"})).json();n.dashboards={connected:!0,latency:`${Date.now()-o}ms`,version:i.version?.number}}catch(c){n.dashboards={connected:!1,latency:"N/A",error:String(c)}}}return n}export{g as CommandValidationError,R as createPlatform,L as deletePlatform,m as ensurePlatformsIndex,A as fetchClientCredentialsToken,N as getEnabledPlatformsByType,q as getPlatformById,B as getPlatforms,K as isToolIndexPatternAllowed,k as normalizeCommandDefinitions,U as parseAllowedIndexPatterns,z as putCommandsMappingFields,F as putMcpServerMappingFields,G as testPlatformHealth,H as updatePlatform};