@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.
- package/README.md +273 -0
- package/bin/stkxp.mjs +198 -0
- package/package.json +97 -0
- package/src/bootstrap.mjs +37 -0
- package/src/bootstrap.test.mjs +73 -0
- package/src/deploy.mjs +145 -0
- package/src/deploy.test.mjs +131 -0
- package/src/export.mjs +30 -0
- package/src/export.test.mjs +56 -0
- package/src/secret-input.mjs +64 -0
- package/src/secret-input.test.mjs +58 -0
- package/src/serve.mjs +83 -0
- package/src/serve.test.mjs +93 -0
- package/vendor/dist-server/asyncapi/generator.js +1 -0
- package/vendor/dist-server/asyncapi/messages.js +1 -0
- package/vendor/dist-server/asyncapi/viewer.html +43 -0
- package/vendor/dist-server/core/app-config/branding.js +1 -0
- package/vendor/dist-server/core/app-config/mantine-theme.js +1 -0
- package/vendor/dist-server/core/app-config/mermaid-theme.js +2 -0
- package/vendor/dist-server/core/app-config/prompt-optimization.js +1 -0
- package/vendor/dist-server/core/app-config/settings.js +1 -0
- package/vendor/dist-server/core/config.js +1 -0
- package/vendor/dist-server/core/graph/a2a-agent-executor.js +2 -0
- package/vendor/dist-server/core/graph/app.js +120 -0
- package/vendor/dist-server/core/graph/delegated-agent-adapter.js +1 -0
- package/vendor/dist-server/core/graph/graph-builder.js +3 -0
- package/vendor/dist-server/core/graph/kibana-agent-executor.js +1 -0
- package/vendor/dist-server/core/graph/nodes/context/assistants-context.js +5 -0
- package/vendor/dist-server/core/graph/nodes/context/compare-context.js +10 -0
- package/vendor/dist-server/core/graph/nodes/context/enrich-context.js +8 -0
- package/vendor/dist-server/core/graph/nodes/context/inventory-context.js +4 -0
- package/vendor/dist-server/core/graph/nodes/context/namespace-context.js +2 -0
- package/vendor/dist-server/core/graph/nodes/context/node-types-context.js +4 -0
- package/vendor/dist-server/core/graph/nodes/context/relevant-assistants-context.js +5 -0
- package/vendor/dist-server/core/graph/nodes/context/relevant-skills-context.js +5 -0
- package/vendor/dist-server/core/graph/nodes/context/skills-context.js +8 -0
- package/vendor/dist-server/core/graph/nodes/context/state-setter.js +1 -0
- package/vendor/dist-server/core/graph/nodes/control/check-reset.js +1 -0
- package/vendor/dist-server/core/graph/nodes/control/topic-detection.js +1 -0
- package/vendor/dist-server/core/graph/nodes/governance/human-approval.js +16 -0
- package/vendor/dist-server/core/graph/nodes/index.js +1 -0
- package/vendor/dist-server/core/graph/nodes/orchestration/suggestion-generator.js +17 -0
- package/vendor/dist-server/core/graph/nodes/orchestration/team-decider.js +1 -0
- package/vendor/dist-server/core/graph/nodes/orchestration/team-execution/decider-error.js +4 -0
- package/vendor/dist-server/core/graph/nodes/orchestration/team-execution/decider-standalone-runner.js +1 -0
- package/vendor/dist-server/core/graph/nodes/orchestration/team-execution/decider-synthesis.js +29 -0
- package/vendor/dist-server/core/graph/nodes/orchestration/team-execution/pipeline-memory.js +2 -0
- package/vendor/dist-server/core/graph/nodes/orchestration/team-execution/pipeline-runner.js +7 -0
- package/vendor/dist-server/core/graph/nodes/orchestration/team-execution/team-assistant-utils.js +1 -0
- package/vendor/dist-server/core/graph/nodes/orchestration/team-finder.js +13 -0
- package/vendor/dist-server/core/graph/nodes/orchestration/team-invoker.js +3 -0
- package/vendor/dist-server/core/graph/nodes/orchestration/team-parallel.js +1 -0
- package/vendor/dist-server/core/graph/nodes/orchestration/team-pipeline.js +6 -0
- package/vendor/dist-server/core/graph/nodes/orchestration/team-router.js +26 -0
- package/vendor/dist-server/core/graph/nodes/reasoning/code-executor/index.js +6 -0
- package/vendor/dist-server/core/graph/nodes/reasoning/code-executor/resource-bridge.js +2 -0
- package/vendor/dist-server/core/graph/nodes/reasoning/code-executor/sandbox.js +6 -0
- package/vendor/dist-server/core/graph/nodes/reasoning/code-executor/tool-bridge.js +1 -0
- package/vendor/dist-server/core/graph/nodes/reasoning/local-extractor.js +5 -0
- package/vendor/dist-server/core/graph/nodes/reasoning/response-generator.js +47 -0
- package/vendor/dist-server/core/graph/nodes/reasoning/static-code-executor/index.js +1 -0
- package/vendor/dist-server/core/graph/nodes/reasoning/system.js +54 -0
- package/vendor/dist-server/core/graph/nodes/reasoning/tool-executor.js +9 -0
- package/vendor/dist-server/core/graph/nodes/tools/raw-output.js +4 -0
- package/vendor/dist-server/core/graph/nodes/tools/tool-cleaner.js +7 -0
- package/vendor/dist-server/core/graph/nodes/tools/tool-execution/execute-tool-calls.js +3 -0
- package/vendor/dist-server/core/graph/nodes/tools/tool-execution/invoke.js +1 -0
- package/vendor/dist-server/core/graph/nodes/tools/tool-execution/namespace-guard.js +1 -0
- package/vendor/dist-server/core/graph/nodes/tools/tool-execution/result-limits.js +3 -0
- package/vendor/dist-server/core/graph/nodes/tools/tool-invoker.js +1 -0
- package/vendor/dist-server/core/graph/nodes/tools/tool.js +4 -0
- package/vendor/dist-server/core/graph/schemas.js +1 -0
- package/vendor/dist-server/core/graph/topic-variants.js +1 -0
- package/vendor/dist-server/core/graph/types.js +1 -0
- package/vendor/dist-server/core/graph/utils/content-utils.js +17 -0
- package/vendor/dist-server/core/graph/utils/edge-jsonata-condition.js +1 -0
- package/vendor/dist-server/core/graph/utils/engine-vars.js +1 -0
- package/vendor/dist-server/core/graph/utils/logging-utils.js +4 -0
- package/vendor/dist-server/core/graph/utils/message-utils.js +5 -0
- package/vendor/dist-server/core/graph/utils/node-type-defaults-cache.js +1 -0
- package/vendor/dist-server/core/graph/utils/sandbox-catalog.js +1 -0
- package/vendor/dist-server/core/graph/utils/schema-utils.js +1 -0
- package/vendor/dist-server/core/graph/utils/team-context-policy.js +5 -0
- package/vendor/dist-server/core/graph/utils/team-node-resolvers.js +1 -0
- package/vendor/dist-server/core/graph/utils/tool-result.js +4 -0
- package/vendor/dist-server/core/graph/utils/tool-wrapper.js +14 -0
- package/vendor/dist-server/core/llm/init-indices.js +1 -0
- package/vendor/dist-server/core/llm/models/index.js +1 -0
- package/vendor/dist-server/core/llm/models/model.model.js +1 -0
- package/vendor/dist-server/core/llm/models/provider.model.js +1 -0
- package/vendor/dist-server/core/llm/models/routing-rule.model.js +1 -0
- package/vendor/dist-server/core/llm/providers.js +1 -0
- package/vendor/dist-server/core/mcp/client.js +1 -0
- package/vendor/dist-server/core/runtime/active-runs-registry.js +1 -0
- package/vendor/dist-server/core/runtime/system-prompt-cache.js +1 -0
- package/vendor/dist-server/core/runtime/trace-bus.js +1 -0
- package/vendor/dist-server/core/schema/cluster_health_report.js +1 -0
- package/vendor/dist-server/core/schema/cluster_info.js +1 -0
- package/vendor/dist-server/core/schema/cluster_license.js +5 -0
- package/vendor/dist-server/core/schema/cluster_stats.js +12 -0
- package/vendor/dist-server/core/schema/dashboard.js +1 -0
- package/vendor/dist-server/core/schema/indices_settings.js +1 -0
- package/vendor/dist-server/core/schema/indices_shards.js +1 -0
- package/vendor/dist-server/core/schema/indices_stats.js +1 -0
- package/vendor/dist-server/core/schema/nodes_info.js +2 -0
- package/vendor/dist-server/core/schema/nodes_stats.js +11 -0
- package/vendor/dist-server/core/schema/pricing.js +1 -0
- package/vendor/dist-server/core/schema/ui.js +1 -0
- package/vendor/dist-server/core/schema/zod_client.js +83 -0
- package/vendor/dist-server/core/services/a2a-client.js +2 -0
- package/vendor/dist-server/core/services/alerts-service.js +1 -0
- package/vendor/dist-server/core/services/api-keys-service.js +1 -0
- package/vendor/dist-server/core/services/assistant-resolver.js +1 -0
- package/vendor/dist-server/core/services/assistants-index-service.js +1 -0
- package/vendor/dist-server/core/services/async-conversations-service.js +22 -0
- package/vendor/dist-server/core/services/asyncapi-dispatch.js +1 -0
- package/vendor/dist-server/core/services/asyncapi-drivers/driver-manager.js +1 -0
- package/vendor/dist-server/core/services/asyncapi-drivers/driver-types.js +0 -0
- package/vendor/dist-server/core/services/asyncapi-drivers/http-driver.js +1 -0
- package/vendor/dist-server/core/services/asyncapi-drivers/nats-driver.js +1 -0
- package/vendor/dist-server/core/services/asyncapi-drivers/websocket-driver.js +1 -0
- package/vendor/dist-server/core/services/asyncapi-events-service.js +1 -0
- package/vendor/dist-server/core/services/asyncapi-reply-service.js +1 -0
- package/vendor/dist-server/core/services/asyncapi-sink.js +1 -0
- package/vendor/dist-server/core/services/asyncapi-tools-service.js +1 -0
- package/vendor/dist-server/core/services/block-repair-service.js +13 -0
- package/vendor/dist-server/core/services/chart-renderer.js +1 -0
- package/vendor/dist-server/core/services/chat-llms-service.js +1 -0
- package/vendor/dist-server/core/services/chat-runs-service.js +1 -0
- package/vendor/dist-server/core/services/chat-tools-service.js +1 -0
- package/vendor/dist-server/core/services/chat-traces-service.js +1 -0
- package/vendor/dist-server/core/services/chats-service.js +5 -0
- package/vendor/dist-server/core/services/comparison-service.js +107 -0
- package/vendor/dist-server/core/services/default-model.service.js +1 -0
- package/vendor/dist-server/core/services/elastic-stack-sync-service.js +2 -0
- package/vendor/dist-server/core/services/elasticsearch-wrapper.js +1 -0
- package/vendor/dist-server/core/services/embed-rate-limiter.js +1 -0
- package/vendor/dist-server/core/services/error-analytics-service.js +1 -0
- package/vendor/dist-server/core/services/es-field-resolver.js +1 -0
- package/vendor/dist-server/core/services/gateway-platform-types.js +1 -0
- package/vendor/dist-server/core/services/gliner-tagging-service.js +1 -0
- package/vendor/dist-server/core/services/golden-questions-scoring.js +1 -0
- package/vendor/dist-server/core/services/golden-questions-service.js +1 -0
- package/vendor/dist-server/core/services/graph-drilldown-service.js +1 -0
- package/vendor/dist-server/core/services/graph-registry-service.js +1 -0
- package/vendor/dist-server/core/services/hitl-analytics-service.js +1 -0
- package/vendor/dist-server/core/services/ingestion-jobs-service.js +1 -0
- package/vendor/dist-server/core/services/ingestion-service.js +5 -0
- package/vendor/dist-server/core/services/kibana-client-factory.js +1 -0
- package/vendor/dist-server/core/services/kibana-client.js +2 -0
- package/vendor/dist-server/core/services/kibana-dashboard-extractor.js +1 -0
- package/vendor/dist-server/core/services/kibana-service.js +1 -0
- package/vendor/dist-server/core/services/llm-analytics-service.js +1 -0
- package/vendor/dist-server/core/services/llm-client-resolver.js +1 -0
- package/vendor/dist-server/core/services/llm-models-service.js +1 -0
- package/vendor/dist-server/core/services/llm-pricing-pure.js +1 -0
- package/vendor/dist-server/core/services/llm-pricing-service.js +1 -0
- package/vendor/dist-server/core/services/llm-providers-service.js +1 -0
- package/vendor/dist-server/core/services/llm-routing-service.js +1 -0
- package/vendor/dist-server/core/services/llm-services.js +1 -0
- package/vendor/dist-server/core/services/llm-sync-service.js +1 -0
- package/vendor/dist-server/core/services/manifest-loader.js +1 -0
- package/vendor/dist-server/core/services/mcp-servers-service.js +1 -0
- package/vendor/dist-server/core/services/mcp-sync-service.js +1 -0
- package/vendor/dist-server/core/services/mcp-tools-service.js +1 -0
- package/vendor/dist-server/core/services/memories-service.js +2 -0
- package/vendor/dist-server/core/services/memory-analytics-service.js +1 -0
- package/vendor/dist-server/core/services/monitoring-analytics-service.js +1 -0
- package/vendor/dist-server/core/services/monitoring-service.js +1 -0
- package/vendor/dist-server/core/services/multi-kibana-service.js +1 -0
- package/vendor/dist-server/core/services/node-latency-service.js +1 -0
- package/vendor/dist-server/core/services/package-policy-service.js +2 -0
- package/vendor/dist-server/core/services/pdf-service.js +572 -0
- package/vendor/dist-server/core/services/plan-service.js +1 -0
- package/vendor/dist-server/core/services/platform-direction.js +1 -0
- package/vendor/dist-server/core/services/platform-secrets.js +1 -0
- package/vendor/dist-server/core/services/platforms-service.js +1 -0
- package/vendor/dist-server/core/services/policy-factory.js +1 -0
- package/vendor/dist-server/core/services/prompt-cache-service.js +1 -0
- package/vendor/dist-server/core/services/provider-rate-limits.js +1 -0
- package/vendor/dist-server/core/services/quota-service.js +1 -0
- package/vendor/dist-server/core/services/report-assets-service.js +1 -0
- package/vendor/dist-server/core/services/run-analytics-collector.js +1 -0
- package/vendor/dist-server/core/services/run-stream-sink.js +1 -0
- package/vendor/dist-server/core/services/send_mail.js +460 -0
- package/vendor/dist-server/core/services/share-service.js +1 -0
- package/vendor/dist-server/core/services/slack-signature.js +1 -0
- package/vendor/dist-server/core/services/sources-service.js +6 -0
- package/vendor/dist-server/core/services/team-mcp-result.js +4 -0
- package/vendor/dist-server/core/services/team-mcp-run-tokens.js +1 -0
- package/vendor/dist-server/core/services/team-mcp-runner.js +1 -0
- package/vendor/dist-server/core/services/team-mcp-server.js +1 -0
- package/vendor/dist-server/core/services/team-mcp-tools.js +1 -0
- package/vendor/dist-server/core/services/team-mcp-ui.js +551 -0
- package/vendor/dist-server/core/services/team-run-progress.js +1 -0
- package/vendor/dist-server/core/services/team-runner-headless.js +7 -0
- package/vendor/dist-server/core/services/team-search-service.js +1 -0
- package/vendor/dist-server/core/services/teams-service.js +1 -0
- package/vendor/dist-server/core/services/token-projection-service.js +1 -0
- package/vendor/dist-server/core/services/tool-analytics-service.js +1 -0
- package/vendor/dist-server/core/services/tool-history-service.js +1 -0
- package/vendor/dist-server/core/services/tool-metrics-service.js +1 -0
- package/vendor/dist-server/core/services/tool-scoring.js +1 -0
- package/vendor/dist-server/core/services/toolbox-import-mappers.js +1 -0
- package/vendor/dist-server/core/services/toolbox-import-service.js +1 -0
- package/vendor/dist-server/core/services/trigger-service.js +1 -0
- package/vendor/dist-server/core/services/version-snapshot-service.js +1 -0
- package/vendor/dist-server/core/services/webhook-calls-service.js +1 -0
- package/vendor/dist-server/core/tools/compare-chat.js +46 -0
- package/vendor/dist-server/core/tools/enrich-chat.js +50 -0
- package/vendor/dist-server/core/tools/variable-encoding.js +1 -0
- package/vendor/dist-server/core/types/settings.js +1 -0
- package/vendor/dist-server/core/utils/ab-evaluator.js +5 -0
- package/vendor/dist-server/core/utils/condition-evaluator.js +1 -0
- package/vendor/dist-server/core/utils/http-client.js +1 -0
- package/vendor/dist-server/core/utils/json-schema-to-form.js +1 -0
- package/vendor/dist-server/core/utils/logger.js +3 -0
- package/vendor/dist-server/core/utils/owner-scope.js +1 -0
- package/vendor/dist-server/core/utils/ownership.js +1 -0
- package/vendor/dist-server/core/utils/parallel-tool-executor.js +1 -0
- package/vendor/dist-server/core/utils/performance-tracker.js +3 -0
- package/vendor/dist-server/core/utils/prompt-optimizer.js +40 -0
- package/vendor/dist-server/core/utils/response-cache.js +1 -0
- package/vendor/dist-server/core/utils/schema-validator.js +1 -0
- package/vendor/dist-server/core/utils/streaming-optimizer.js +2 -0
- package/vendor/dist-server/core/utils/string-helpers.js +1 -0
- package/vendor/dist-server/core/utils/test-responses.js +9 -0
- package/vendor/dist-server/core/utils/text-utils.js +1 -0
- package/vendor/dist-server/core/utils/tool-form-trigger.js +1 -0
- package/vendor/dist-server/entrypoints/cli-bootstrap-run.js +1 -0
- package/vendor/dist-server/entrypoints/cli-deploy-run.js +1 -0
- package/vendor/dist-server/entrypoints/cli-deploy.js +1 -0
- package/vendor/dist-server/entrypoints/team-runner.js +1 -0
- package/vendor/dist-server/generated/toolbox-catalog.js +1 -0
- package/vendor/dist-server/index.js +2 -0
- package/vendor/dist-server/middleware/integration-logos.js +1 -0
- package/vendor/dist-server/middleware/plan-guard.js +1 -0
- package/vendor/dist-server/openapi/generator.js +1 -0
- package/vendor/dist-server/openapi/html-tool-spec.js +1 -0
- package/vendor/dist-server/routes/a2a-routes.js +1 -0
- package/vendor/dist-server/routes/a2a-server-routes.js +5 -0
- package/vendor/dist-server/routes/admin.js +1 -0
- package/vendor/dist-server/routes/assistants-routes.js +1 -0
- package/vendor/dist-server/routes/asyncapi-routes.js +1 -0
- package/vendor/dist-server/routes/auth.js +1 -0
- package/vendor/dist-server/routes/billing-routes.js +1 -0
- package/vendor/dist-server/routes/chat-llms.js +1 -0
- package/vendor/dist-server/routes/chat-tools.js +1 -0
- package/vendor/dist-server/routes/chat-traces.js +1 -0
- package/vendor/dist-server/routes/chats.js +1 -0
- package/vendor/dist-server/routes/clusters.js +1 -0
- package/vendor/dist-server/routes/compare.js +43 -0
- package/vendor/dist-server/routes/connectors-routes.js +1 -0
- package/vendor/dist-server/routes/consumptions-routes.js +1 -0
- package/vendor/dist-server/routes/data-admin-routes.js +1 -0
- package/vendor/dist-server/routes/data-transfer-routes.js +1 -0
- package/vendor/dist-server/routes/elastic-tool-execution-routes.js +1 -0
- package/vendor/dist-server/routes/geo-proxy-routes.js +1 -0
- package/vendor/dist-server/routes/golden-questions-routes.js +1 -0
- package/vendor/dist-server/routes/graph-registry.js +1 -0
- package/vendor/dist-server/routes/graph-templates-routes.js +1 -0
- package/vendor/dist-server/routes/helpdesk-routes.js +35 -0
- package/vendor/dist-server/routes/html-routes.js +1 -0
- package/vendor/dist-server/routes/index.js +1 -0
- package/vendor/dist-server/routes/indices.js +1 -0
- package/vendor/dist-server/routes/integrations-routes.js +1 -0
- package/vendor/dist-server/routes/langgraph.js +7 -0
- package/vendor/dist-server/routes/live-resources-routes.js +1 -0
- package/vendor/dist-server/routes/llm-analytics.js +1 -0
- package/vendor/dist-server/routes/llm-control-plane.js +1 -0
- package/vendor/dist-server/routes/llm.js +1 -0
- package/vendor/dist-server/routes/mcp-gateway-routes.js +1 -0
- package/vendor/dist-server/routes/mcp-query-routes.js +1 -0
- package/vendor/dist-server/routes/mcp-servers-routes.js +1 -0
- package/vendor/dist-server/routes/mcp-team-routes.js +1 -0
- package/vendor/dist-server/routes/mcp-tools-routes.js +1 -0
- package/vendor/dist-server/routes/me-routes.js +63 -0
- package/vendor/dist-server/routes/memories-routes.js +1 -0
- package/vendor/dist-server/routes/monitoring-analytics.js +12 -0
- package/vendor/dist-server/routes/monitoring.js +1 -0
- package/vendor/dist-server/routes/node-types-routes.js +171 -0
- package/vendor/dist-server/routes/nodes.js +1 -0
- package/vendor/dist-server/routes/packages.js +1 -0
- package/vendor/dist-server/routes/pdf.js +3 -0
- package/vendor/dist-server/routes/plan-routes.js +1 -0
- package/vendor/dist-server/routes/platform-requests-routes.js +1 -0
- package/vendor/dist-server/routes/platforms-routes.js +1 -0
- package/vendor/dist-server/routes/prompts-routes.js +1 -0
- package/vendor/dist-server/routes/proxy-logos.js +1 -0
- package/vendor/dist-server/routes/quality-routes.js +1 -0
- package/vendor/dist-server/routes/resources-ingest-routes.js +1 -0
- package/vendor/dist-server/routes/resources-routes.js +1 -0
- package/vendor/dist-server/routes/schema-routes.js +1 -0
- package/vendor/dist-server/routes/settings-original.js +1 -0
- package/vendor/dist-server/routes/settings.js +1 -0
- package/vendor/dist-server/routes/share-routes.js +1 -0
- package/vendor/dist-server/routes/sources-catalog-routes.js +1 -0
- package/vendor/dist-server/routes/sources-routes.js +1 -0
- package/vendor/dist-server/routes/team-optimizer-routes.js +1 -0
- package/vendor/dist-server/routes/team-schedule-routes.js +1 -0
- package/vendor/dist-server/routes/teams-routes.js +1 -0
- package/vendor/dist-server/routes/tool-analytics.js +1 -0
- package/vendor/dist-server/routes/tool-history-routes.js +1 -0
- package/vendor/dist-server/routes/tool-metrics-routes.js +1 -0
- package/vendor/dist-server/routes/toolbox-import-routes.js +1 -0
- package/vendor/dist-server/routes/tools-routes.js +5 -0
- package/vendor/dist-server/routes/transcribe-routes.js +1 -0
- package/vendor/dist-server/routes/triggers.js +1 -0
- package/vendor/dist-server/routes/versions-routes.js +1 -0
- package/vendor/dist-server/routes/webhooks-routes.js +1 -0
- package/vendor/dist-server/scripts/add-label-to-tools.js +4 -0
- package/vendor/dist-server/scripts/migrate-assistants-to-mcp.js +10 -0
- package/vendor/dist-server/scripts/migrate-chat-runs.js +8 -0
- package/vendor/dist-server/scripts/migrate-mcp-protocol.js +8 -0
- package/vendor/dist-server/scripts/migrate-mcp-to-platforms.js +15 -0
- package/vendor/dist-server/services/alert-evaluator.js +3 -0
- package/vendor/dist-server/services/auth.js +1 -0
- package/vendor/dist-server/services/billing-service.js +1 -0
- package/vendor/dist-server/services/chat-title-generator.js +12 -0
- package/vendor/dist-server/services/clone/clone-executor.js +1 -0
- package/vendor/dist-server/services/clone/closure-resolver.js +3 -0
- package/vendor/dist-server/services/clone/entity-graph.js +3 -0
- package/vendor/dist-server/services/clone/team-bundle-bootstrap.js +1 -0
- package/vendor/dist-server/services/clone/team-bundle-crypto.js +1 -0
- package/vendor/dist-server/services/clone/team-bundle-encrypted.js +1 -0
- package/vendor/dist-server/services/clone/team-bundle.js +1 -0
- package/vendor/dist-server/services/cluster-service.js +1 -0
- package/vendor/dist-server/services/connection-adapters.js +1 -0
- package/vendor/dist-server/services/connectors-service.js +10 -0
- package/vendor/dist-server/services/cost-forecast-service.js +1 -0
- package/vendor/dist-server/services/eui-ssr-renderer.js +4 -0
- package/vendor/dist-server/services/graph-canvas/full-structure-builder.js +1 -0
- package/vendor/dist-server/services/graph-templates-service.js +13 -0
- package/vendor/dist-server/services/guest-service.js +1 -0
- package/vendor/dist-server/services/html-service.js +1 -0
- package/vendor/dist-server/services/langgraph-service.js +2 -0
- package/vendor/dist-server/services/leaflet-render-service.js +80 -0
- package/vendor/dist-server/services/live-resources-service.js +16 -0
- package/vendor/dist-server/services/mcp-app-tester-package.js +1 -0
- package/vendor/dist-server/services/mcp-gateway/executors/openapi-executor.js +1 -0
- package/vendor/dist-server/services/mcp-gateway/gateway-grant-service.js +2 -0
- package/vendor/dist-server/services/team-optimizer-service.js +1 -0
- package/vendor/dist-server/services/trace-bus-sink.js +1 -0
- package/vendor/dist-server/services/user-provisioning-service.js +3 -0
- package/vendor/dist-server/templates/mcp-app-tester/src/mcp-http.js +3 -0
- package/vendor/dist-server/templates/mcp-app-tester/src/server.js +1 -0
- package/vendor/dist-server/utils.js +1 -0
- package/vendor/dist-server/ws/assistant-executor.js +7 -0
- package/vendor/dist-server/ws/classify-streamed-json-block.js +1 -0
- package/vendor/dist-server/ws/collect-response-generator-node-ids.js +1 -0
- package/vendor/dist-server/ws/extractors/blockkit-extractor.js +1 -0
- package/vendor/dist-server/ws/extractors/echarts-extractor.js +1 -0
- package/vendor/dist-server/ws/extractors/eui-extractor.js +1 -0
- package/vendor/dist-server/ws/extractors/form-extractor.js +1 -0
- package/vendor/dist-server/ws/extractors/index.js +1 -0
- package/vendor/dist-server/ws/extractors/leaflet-extractor.js +1 -0
- package/vendor/dist-server/ws/extractors/mantine-extractor.js +1 -0
- package/vendor/dist-server/ws/extractors/markdown-extractor.js +7 -0
- package/vendor/dist-server/ws/extractors/mermaid-extractor.js +1 -0
- package/vendor/dist-server/ws/extractors/recharts-extractor.js +1 -0
- package/vendor/dist-server/ws/extractors/remotion-extractor.js +1 -0
- package/vendor/dist-server/ws/handler.js +66 -0
- package/vendor/dist-server/ws/parsers/anthropic-parser.js +7 -0
- package/vendor/dist-server/ws/parsers/base-parser.js +3 -0
- package/vendor/dist-server/ws/parsers/gemini-parser.js +8 -0
- package/vendor/dist-server/ws/parsers/index.js +1 -0
- package/vendor/dist-server/ws/parsers/parse-json-blocks.js +1 -0
- package/vendor/dist-server/ws/types.js +0 -0
- package/vendor/dist-server/ws/utils.js +1 -0
- package/vendor/shared/engine-vars.ts +51 -0
- 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};
|