@oas-tools/oas-telemetry 0.7.1 → 0.8.0-alpha.1

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 (194) hide show
  1. package/.env.example +17 -3
  2. package/README.md +1 -2
  3. package/dist/cjs/config/bootConfig.cjs +16 -14
  4. package/dist/cjs/config/config.cjs +120 -125
  5. package/dist/cjs/config/config.types.cjs +1 -4
  6. package/dist/cjs/docs/openapi.yaml +158 -4
  7. package/dist/cjs/index.cjs +27 -30
  8. package/dist/cjs/routesManager.cjs +62 -70
  9. package/dist/cjs/telemetry/custom-implementations/exporters/DiskLogExporter.cjs +121 -0
  10. package/dist/cjs/telemetry/custom-implementations/exporters/DiskMetricExporter.cjs +101 -0
  11. package/dist/cjs/telemetry/custom-implementations/exporters/DiskTraceExporter.cjs +103 -0
  12. package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbLogExporter.cjs +194 -190
  13. package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.cjs +147 -99
  14. package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.cjs +143 -116
  15. package/dist/cjs/telemetry/custom-implementations/exporters/MultiMetricExporter.cjs +57 -0
  16. package/dist/cjs/telemetry/custom-implementations/instrumentations/logsInstrumentation.cjs +92 -0
  17. package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/Chunk.cjs +159 -0
  18. package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/Series.cjs +168 -0
  19. package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/SeriesRegistry.cjs +392 -0
  20. package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/types.cjs +2 -0
  21. package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/utils.cjs +77 -0
  22. package/dist/cjs/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.cjs +65 -63
  23. package/dist/cjs/telemetry/custom-implementations/processors/dynamicMultiSpanProcessor.cjs +63 -62
  24. package/dist/cjs/telemetry/custom-implementations/utils/circular.cjs +47 -47
  25. package/dist/cjs/telemetry/custom-implementations/wrappers.cjs +209 -138
  26. package/dist/cjs/telemetry/initializeTelemetry.cjs +35 -91
  27. package/dist/cjs/telemetry/persistence/DiskImporter.cjs +85 -0
  28. package/dist/cjs/telemetry/persistence/DiskUtils.cjs +61 -0
  29. package/dist/cjs/telemetry/persistence/DiskWriter.cjs +66 -0
  30. package/dist/cjs/telemetry/telemetryConfigurator.cjs +139 -72
  31. package/dist/cjs/telemetry/telemetryRegistry.cjs +45 -31
  32. package/dist/cjs/tlm-ai/agent.cjs +49 -64
  33. package/dist/cjs/tlm-ai/aiController.cjs +54 -76
  34. package/dist/cjs/tlm-ai/aiRoutes.cjs +17 -20
  35. package/dist/cjs/tlm-ai/aiService.cjs +91 -95
  36. package/dist/cjs/tlm-ai/tools.cjs +177 -174
  37. package/dist/cjs/tlm-auth/authController.cjs +80 -123
  38. package/dist/cjs/tlm-auth/authMiddleware.cjs +25 -30
  39. package/dist/cjs/tlm-auth/authRoutes.cjs +11 -14
  40. package/dist/cjs/tlm-log/logController.cjs +135 -116
  41. package/dist/cjs/tlm-log/logRoutes.cjs +19 -20
  42. package/dist/cjs/tlm-log/logService.cjs +29 -0
  43. package/dist/cjs/tlm-metric/metricsController.cjs +154 -122
  44. package/dist/cjs/tlm-metric/metricsRoutes.cjs +22 -20
  45. package/dist/cjs/tlm-metric/metricsService.cjs +26 -0
  46. package/dist/cjs/tlm-plugin/pluginController.cjs +128 -140
  47. package/dist/cjs/tlm-plugin/pluginProcess.cjs +89 -94
  48. package/dist/cjs/tlm-plugin/pluginRoutes.cjs +11 -14
  49. package/dist/cjs/tlm-plugin/pluginService.cjs +73 -74
  50. package/dist/cjs/tlm-trace/traceController.cjs +140 -123
  51. package/dist/cjs/tlm-trace/traceRoutes.cjs +19 -20
  52. package/dist/cjs/tlm-trace/traceService.cjs +29 -0
  53. package/dist/cjs/tlm-ui/uiRoutes.cjs +63 -32
  54. package/dist/cjs/tlm-util/utilController.cjs +68 -70
  55. package/dist/cjs/tlm-util/utilRoutes.cjs +51 -63
  56. package/dist/cjs/types/index.cjs +2 -5
  57. package/dist/cjs/utils/logger.cjs +38 -43
  58. package/dist/cjs/utils/regexUtils.cjs +22 -22
  59. package/dist/esm/config/bootConfig.js +5 -2
  60. package/dist/esm/config/config.js +9 -2
  61. package/dist/esm/docs/openapi.yaml +158 -4
  62. package/dist/esm/index.js +9 -8
  63. package/dist/esm/routesManager.js +6 -10
  64. package/dist/esm/telemetry/custom-implementations/exporters/DiskLogExporter.js +114 -0
  65. package/dist/esm/telemetry/custom-implementations/exporters/DiskMetricExporter.js +94 -0
  66. package/dist/esm/telemetry/custom-implementations/exporters/DiskTraceExporter.js +96 -0
  67. package/dist/esm/telemetry/custom-implementations/exporters/InMemoryDbLogExporter.js +38 -7
  68. package/dist/esm/telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.js +107 -48
  69. package/dist/esm/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.js +60 -29
  70. package/dist/esm/telemetry/custom-implementations/exporters/MultiMetricExporter.js +53 -0
  71. package/dist/esm/telemetry/custom-implementations/instrumentations/logsInstrumentation.js +85 -0
  72. package/dist/esm/telemetry/custom-implementations/metrics/tsdb/Chunk.js +155 -0
  73. package/dist/esm/telemetry/custom-implementations/metrics/tsdb/Series.js +164 -0
  74. package/dist/esm/telemetry/custom-implementations/metrics/tsdb/SeriesRegistry.js +385 -0
  75. package/dist/esm/telemetry/custom-implementations/metrics/tsdb/types.js +1 -0
  76. package/dist/esm/telemetry/custom-implementations/metrics/tsdb/utils.js +74 -0
  77. package/dist/esm/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.js +2 -1
  78. package/dist/esm/telemetry/custom-implementations/processors/dynamicMultiSpanProcessor.js +1 -1
  79. package/dist/esm/telemetry/custom-implementations/wrappers.js +77 -6
  80. package/dist/esm/telemetry/initializeTelemetry.js +27 -69
  81. package/dist/esm/telemetry/persistence/DiskImporter.js +78 -0
  82. package/dist/esm/telemetry/persistence/DiskUtils.js +51 -0
  83. package/dist/esm/telemetry/persistence/DiskWriter.js +59 -0
  84. package/dist/esm/telemetry/telemetryConfigurator.js +110 -39
  85. package/dist/esm/telemetry/telemetryRegistry.js +12 -1
  86. package/dist/esm/tlm-ai/agent.js +5 -3
  87. package/dist/esm/tlm-ai/aiController.js +3 -3
  88. package/dist/esm/tlm-ai/aiService.js +6 -2
  89. package/dist/esm/tlm-ai/tools.js +5 -9
  90. package/dist/esm/tlm-auth/authController.js +3 -2
  91. package/dist/esm/tlm-log/logController.js +62 -18
  92. package/dist/esm/tlm-log/logRoutes.js +3 -1
  93. package/dist/esm/tlm-log/logService.js +25 -0
  94. package/dist/esm/tlm-metric/metricsController.js +116 -50
  95. package/dist/esm/tlm-metric/metricsRoutes.js +8 -3
  96. package/dist/esm/tlm-metric/metricsService.js +22 -0
  97. package/dist/esm/tlm-plugin/pluginController.js +6 -11
  98. package/dist/esm/tlm-plugin/pluginService.js +2 -4
  99. package/dist/esm/tlm-trace/traceController.js +87 -36
  100. package/dist/esm/tlm-trace/traceRoutes.js +3 -1
  101. package/dist/esm/tlm-trace/traceService.js +25 -0
  102. package/dist/esm/tlm-ui/uiRoutes.js +5 -5
  103. package/dist/esm/tlm-util/utilController.js +3 -9
  104. package/dist/esm/tlm-util/utilRoutes.js +2 -2
  105. package/dist/types/config/bootConfig.d.ts +3 -0
  106. package/dist/types/config/config.d.ts +48 -7
  107. package/dist/types/config/config.types.d.ts +7 -0
  108. package/dist/types/index.d.ts +2 -3
  109. package/dist/types/telemetry/custom-implementations/exporters/DiskLogExporter.d.ts +24 -0
  110. package/dist/types/telemetry/custom-implementations/exporters/DiskMetricExporter.d.ts +23 -0
  111. package/dist/types/telemetry/custom-implementations/exporters/DiskTraceExporter.d.ts +23 -0
  112. package/dist/types/telemetry/custom-implementations/exporters/InMemoryDbLogExporter.d.ts +3 -1
  113. package/dist/types/telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.d.ts +56 -15
  114. package/dist/types/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.d.ts +8 -4
  115. package/dist/types/telemetry/custom-implementations/exporters/MultiMetricExporter.d.ts +9 -0
  116. package/dist/types/telemetry/custom-implementations/instrumentations/logsInstrumentation.d.ts +23 -0
  117. package/dist/types/telemetry/custom-implementations/metrics/tsdb/Chunk.d.ts +49 -0
  118. package/dist/types/telemetry/custom-implementations/metrics/tsdb/Series.d.ts +67 -0
  119. package/dist/types/telemetry/custom-implementations/metrics/tsdb/SeriesRegistry.d.ts +69 -0
  120. package/dist/types/telemetry/custom-implementations/metrics/tsdb/types.d.ts +68 -0
  121. package/dist/types/telemetry/custom-implementations/metrics/tsdb/utils.d.ts +21 -0
  122. package/dist/types/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.d.ts +2 -2
  123. package/dist/types/telemetry/custom-implementations/wrappers.d.ts +2 -1
  124. package/dist/types/telemetry/persistence/DiskImporter.d.ts +17 -0
  125. package/dist/types/telemetry/persistence/DiskUtils.d.ts +11 -0
  126. package/dist/types/telemetry/persistence/DiskWriter.d.ts +21 -0
  127. package/dist/types/telemetry/telemetryConfigurator.d.ts +1 -1
  128. package/dist/types/telemetry/telemetryRegistry.d.ts +8 -0
  129. package/dist/types/tlm-ai/agent.d.ts +1 -1
  130. package/dist/types/tlm-ai/aiService.d.ts +1 -1
  131. package/dist/types/tlm-log/logController.d.ts +2 -0
  132. package/dist/types/tlm-log/logService.d.ts +4 -0
  133. package/dist/types/tlm-metric/metricsController.d.ts +11 -2
  134. package/dist/types/tlm-metric/metricsService.d.ts +6 -0
  135. package/dist/types/tlm-trace/traceController.d.ts +9 -7
  136. package/dist/types/tlm-trace/traceService.d.ts +4 -0
  137. package/dist/types/types/index.d.ts +2 -2
  138. package/dist/ui/assets/{ApiDocsPage-C_VVPPHa.js → ApiDocsPage-DTCgVbW2.js} +2 -2
  139. package/dist/ui/assets/CollapsibleCard-lWgfsaAn.js +1 -0
  140. package/dist/ui/assets/DevToolsPage-DEhf8CBy.js +1 -0
  141. package/dist/ui/assets/LandingPage-CfEHCDxY.js +6 -0
  142. package/dist/ui/assets/LogsPage-DFDKRuGH.js +1 -0
  143. package/dist/ui/assets/{NotFoundPage-B3quk3P1.js → NotFoundPage-DCy0DcV7.js} +1 -1
  144. package/dist/ui/assets/PluginCreatePage-BawZ5_-h.js +50 -0
  145. package/dist/ui/assets/PluginPage-D3FmgU7d.js +27 -0
  146. package/dist/ui/assets/TraceSpansPage-D0_L45Rb.js +6 -0
  147. package/dist/ui/assets/VirtualizedListPanel-q605n9He.js +16 -0
  148. package/dist/ui/assets/alert-DBAFshSi.js +1133 -0
  149. package/dist/ui/assets/badge-DGNBtnxU.js +1 -0
  150. package/dist/ui/assets/{chevron-down-CPsvsmqj.js → chevron-down-CFEqYzGC.js} +1 -1
  151. package/dist/ui/assets/{chevron-up-Df9jMo1X.js → chevron-up-lDnFwAJq.js} +1 -1
  152. package/dist/ui/assets/{circle-alert-DOPQPvU8.js → circle-alert-BpYUuRs7.js} +1 -1
  153. package/dist/ui/assets/dialog-1dRyI6SC.js +15 -0
  154. package/dist/ui/assets/index-C7RfU6hR.js +1 -0
  155. package/dist/ui/assets/index-C9dDYIpd.js +305 -0
  156. package/dist/ui/assets/index-D6f1KjWV.css +1 -0
  157. package/dist/ui/assets/info-CuJQWoBU.js +6 -0
  158. package/dist/ui/assets/{input-Dzvg_ZEZ.js → input-BLXaar0X.js} +1 -1
  159. package/dist/ui/assets/label-DfAcltsl.js +1 -0
  160. package/dist/ui/assets/{loader-circle-CrvlRy5o.js → loader-circle-B7oLyPsi.js} +1 -1
  161. package/dist/ui/assets/{loginPage-qa4V-B70.js → loginPage-DswZvOJ-.js} +1 -1
  162. package/dist/ui/assets/metrics-page-BhtXrfUW.js +31 -0
  163. package/dist/ui/assets/metrics-page-D1GxaB_c.css +1 -0
  164. package/dist/ui/assets/popover-IDker85U.js +11 -0
  165. package/dist/ui/assets/select-B8y5IidE.js +6 -0
  166. package/dist/ui/assets/separator-B6EzrxYY.js +6 -0
  167. package/dist/ui/assets/severityOptions-DtCsaAZK.js +11 -0
  168. package/dist/ui/assets/square-pen-D_oecB1x.js +6 -0
  169. package/dist/ui/assets/switch-Dqo0XkRD.js +1 -0
  170. package/dist/ui/assets/trace-DJq1miYa.js +1 -0
  171. package/dist/ui/assets/upload-prIohEdY.js +11 -0
  172. package/dist/ui/assets/{utilService-DNyqzwj0.js → utilService-C8TJKLqs.js} +1 -1
  173. package/dist/ui/assets/wand-sparkles-OgXuzsSx.js +6 -0
  174. package/dist/ui/index.html +2 -2
  175. package/package.json +44 -49
  176. package/dist/ui/assets/CollapsibleCard-B3KR_8mL.js +0 -1
  177. package/dist/ui/assets/DevToolsPage-OyZcDcmw.js +0 -1
  178. package/dist/ui/assets/LandingPage-CppFBA6K.js +0 -6
  179. package/dist/ui/assets/LogsPage-9Fq8GArS.js +0 -26
  180. package/dist/ui/assets/PluginCreatePage-X_aCH4t4.js +0 -50
  181. package/dist/ui/assets/PluginPage-DMDSihrZ.js +0 -27
  182. package/dist/ui/assets/alert-jQ9HCPIf.js +0 -1133
  183. package/dist/ui/assets/badge-CNq0-mH5.js +0 -1
  184. package/dist/ui/assets/card-DFAwwhN3.js +0 -1
  185. package/dist/ui/assets/index-BkD6DijD.js +0 -15
  186. package/dist/ui/assets/index-CERGVYZK.js +0 -292
  187. package/dist/ui/assets/index-CSIPf9qw.css +0 -1
  188. package/dist/ui/assets/label-DuVnkZ4q.js +0 -1
  189. package/dist/ui/assets/select-DhS8YUtJ.js +0 -1
  190. package/dist/ui/assets/separator-isK4chBP.js +0 -6
  191. package/dist/ui/assets/severityOptions-O38dSOfk.js +0 -11
  192. package/dist/ui/assets/switch-Z3mImG9n.js +0 -1
  193. package/dist/ui/assets/tabs-_77MUUQe.js +0 -16
  194. package/dist/ui/assets/upload-C1LT4Gkb.js +0 -16
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DiskWriter = void 0;
7
+ const promises_1 = __importDefault(require("fs/promises"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const DiskUtils_js_1 = require("./DiskUtils.cjs");
10
+ class DiskWriter {
11
+ directoryPath;
12
+ segmentPrefix;
13
+ maxSegmentBytes;
14
+ initialized = false;
15
+ currentSegmentIndex = 0;
16
+ currentSegmentPath = '';
17
+ currentSegmentSize = 0;
18
+ writeQueue = Promise.resolve();
19
+ constructor(options) {
20
+ this.directoryPath = path_1.default.resolve(options.directoryPath);
21
+ this.segmentPrefix = options.segmentPrefix || DiskUtils_js_1.DEFAULT_SEGMENT_PREFIX;
22
+ this.maxSegmentBytes = options.maxSegmentBytes || DiskUtils_js_1.DEFAULT_MAX_SEGMENT_BYTES;
23
+ }
24
+ async appendRecords(records) {
25
+ if (!records.length)
26
+ return;
27
+ const frame = (0, DiskUtils_js_1.encodeRecordBatchFrame)(records);
28
+ this.writeQueue = this.writeQueue.then(() => this.appendFrame(frame));
29
+ return this.writeQueue;
30
+ }
31
+ async flush() {
32
+ await this.writeQueue;
33
+ }
34
+ async ensureInitialized() {
35
+ if (this.initialized)
36
+ return;
37
+ await promises_1.default.mkdir(this.directoryPath, { recursive: true });
38
+ const segments = await (0, DiskUtils_js_1.listSegments)(this.directoryPath, this.segmentPrefix);
39
+ if (segments.length === 0) {
40
+ this.currentSegmentIndex = 0;
41
+ this.currentSegmentPath = path_1.default.join(this.directoryPath, (0, DiskUtils_js_1.getSegmentName)(this.currentSegmentIndex, this.segmentPrefix));
42
+ this.currentSegmentSize = 0;
43
+ }
44
+ else {
45
+ const lastSegment = segments[segments.length - 1];
46
+ this.currentSegmentIndex = lastSegment.index;
47
+ this.currentSegmentPath = lastSegment.filePath;
48
+ this.currentSegmentSize = (await promises_1.default.stat(lastSegment.filePath)).size;
49
+ }
50
+ this.initialized = true;
51
+ }
52
+ async rotateSegment() {
53
+ this.currentSegmentIndex += 1;
54
+ this.currentSegmentPath = path_1.default.join(this.directoryPath, (0, DiskUtils_js_1.getSegmentName)(this.currentSegmentIndex, this.segmentPrefix));
55
+ this.currentSegmentSize = 0;
56
+ }
57
+ async appendFrame(frame) {
58
+ await this.ensureInitialized();
59
+ if (this.currentSegmentSize > 0 && this.currentSegmentSize + frame.length > this.maxSegmentBytes) {
60
+ await this.rotateSegment();
61
+ }
62
+ await promises_1.default.appendFile(this.currentSegmentPath, frame);
63
+ this.currentSegmentSize += frame.length;
64
+ }
65
+ }
66
+ exports.DiskWriter = DiskWriter;
@@ -1,81 +1,148 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.configureTelemetry = void 0;
7
- var _sdkTraceNode = require("@opentelemetry/sdk-trace-node");
8
- var _telemetryRegistry = require("./telemetryRegistry.cjs");
9
- var _logger = _interopRequireDefault(require("../utils/logger.cjs"));
10
- var _sdkLogs = require("@opentelemetry/sdk-logs");
11
- var _sdkMetrics = require("@opentelemetry/sdk-metrics");
12
- var _hostMetrics = require("@opentelemetry/host-metrics");
13
- var _bootConfig = require("../config/bootConfig.cjs");
14
- var _pluginService = require("../tlm-plugin/pluginService.cjs");
15
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
- const configureTelemetry = oasTlmConfig => {
17
- configurePlugins(oasTlmConfig);
18
- configureTraces(oasTlmConfig);
19
- configureMetrics(oasTlmConfig);
20
- configureLogs(oasTlmConfig);
21
- _logger.default.info("✅ Telemetry configured successfully. All exporters are ready");
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
22
4
  };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
23
6
  exports.configureTelemetry = configureTelemetry;
7
+ const sdk_logs_1 = require("@opentelemetry/sdk-logs");
8
+ const sdk_metrics_1 = require("@opentelemetry/sdk-metrics");
9
+ const sdk_trace_node_1 = require("@opentelemetry/sdk-trace-node");
10
+ const logger_js_1 = __importDefault(require("../utils/logger.cjs"));
11
+ const telemetryRegistry_js_1 = require("./telemetryRegistry.cjs");
12
+ const sdk_node_1 = require("@opentelemetry/sdk-node");
13
+ const bootConfig_js_1 = require("../config/bootConfig.cjs");
14
+ const pluginService_js_1 = require("../tlm-plugin/pluginService.cjs");
15
+ const DiskTraceExporter_js_1 = require("./custom-implementations/exporters/DiskTraceExporter.cjs");
16
+ const DiskLogExporter_js_1 = require("./custom-implementations/exporters/DiskLogExporter.cjs");
17
+ const DiskMetricExporter_js_1 = require("./custom-implementations/exporters/DiskMetricExporter.cjs");
18
+ const MultiMetricExporter_js_1 = require("./custom-implementations/exporters/MultiMetricExporter.cjs");
19
+ const DiskImporter_js_1 = require("./persistence/DiskImporter.cjs");
20
+ const traceService_js_1 = require("../tlm-trace/traceService.cjs");
21
+ const logService_js_1 = require("../tlm-log/logService.cjs");
22
+ const metricsService_js_1 = require("../tlm-metric/metricsService.cjs");
23
+ function configureTelemetry(oasTlmConfig) {
24
+ logger_js_1.default.info("🚀 Configuring Telemetry...");
25
+ configureStorage(oasTlmConfig);
26
+ if (oasTlmConfig.instrumentations) {
27
+ telemetryRegistry_js_1.instrumentations.push(...oasTlmConfig.instrumentations);
28
+ }
29
+ configurePlugins(oasTlmConfig);
30
+ const mainTraceProcessor = configureTraces(oasTlmConfig);
31
+ const mainMetricReader = configureMetrics(oasTlmConfig);
32
+ const mainLogProcessor = configureLogs(oasTlmConfig);
33
+ const sdk = new sdk_node_1.NodeSDK({
34
+ instrumentations: telemetryRegistry_js_1.instrumentations,
35
+ resource: telemetryRegistry_js_1.oasTelemetryResource,
36
+ traceExporter: telemetryRegistry_js_1.inMemoryDbSpanExporter,
37
+ spanProcessors: [mainTraceProcessor, ...oasTlmConfig.traces.extraProcessors || []],
38
+ metricReaders: [mainMetricReader, ...(oasTlmConfig.metrics.extraReaders || [])],
39
+ logRecordProcessors: [mainLogProcessor, ...oasTlmConfig.logs.extraProcessors || []],
40
+ });
41
+ sdk.start();
42
+ logger_js_1.default.info("✅ Node SDK started with telemetry configuration");
43
+ if (oasTlmConfig.storage.path && oasTlmConfig.storage.loadFromStart) {
44
+ scheduleStartupImports(oasTlmConfig.storage.path);
45
+ }
46
+ else if (oasTlmConfig.storage.path && !oasTlmConfig.storage.loadFromStart) {
47
+ logger_js_1.default.info(`[DiskImporter] Startup import skipped by storage.loadFromStart=false. Path: ${oasTlmConfig.storage.path}`);
48
+ }
49
+ return true;
50
+ }
51
+ function configureStorage(oasTlmConfig) {
52
+ const path = oasTlmConfig.storage.path;
53
+ oasTlmConfig.storage.path = typeof path === 'string' && path.trim().length > 0
54
+ ? path.trim()
55
+ : null;
56
+ }
24
57
  function configurePlugins(oasTlmConfig) {
25
- _pluginService.pluginService.enabled = oasTlmConfig.plugins.enabled;
58
+ pluginService_js_1.pluginService.enabled = oasTlmConfig.plugins.enabled;
26
59
  }
27
60
  function configureTraces(oasTlmConfig) {
28
- // TRACES CONFIGURATION
29
- // [OT]Provider -> [OT]SpanProcessor(multiSpan) -> n Processors(eg mainProcessor, extra) -> 1 SpanExporter
30
- _telemetryRegistry.inMemoryDbSpanExporter.baseUrl = oasTlmConfig.general.baseUrl; // TODO this will be done with filters
31
- _telemetryRegistry.inMemoryDbSpanExporter.retentionTimeInSeconds = oasTlmConfig.traces.memoryExporter.retentionTimeSeconds;
32
- _telemetryRegistry.inMemoryDbSpanExporter.setEnabledValue(oasTlmConfig.traces.memoryExporter.enabled);
33
- const mainExporter = _telemetryRegistry.multiSpanExporter;
34
- let mainProcessor = new _sdkTraceNode.BatchSpanProcessor(mainExporter);
35
- if (_bootConfig.bootEnvVariables.OASTLM_BOOT_ENV !== 'production') {
36
- _logger.default.info('Not in production, using SimpleSpanProcessor for traces');
37
- mainProcessor = new _sdkTraceNode.SimpleSpanProcessor(mainExporter);
38
- }
39
- mainExporter.addExporters(_telemetryRegistry.inMemoryDbSpanExporter); // Main exporter have at least the in-memory exporter used by the traces controller
40
- mainExporter.addExporters(oasTlmConfig.traces.extraExporters);
41
- _telemetryRegistry.dynamicMultiSpanProcessor.addProcessors(mainProcessor);
42
- _telemetryRegistry.dynamicMultiSpanProcessor.addProcessors(oasTlmConfig.traces.extraProcessors);
61
+ // TRACES CONFIGURATION
62
+ // [OT]Provider -> [OT]SpanProcessor(multiSpan) -> n Processors(eg mainProcessor, extra) -> 1 SpanExporter
63
+ telemetryRegistry_js_1.inMemoryDbSpanExporter.retentionTimeInSeconds = oasTlmConfig.traces.memoryExporter.retentionTimeSeconds;
64
+ telemetryRegistry_js_1.inMemoryDbSpanExporter.setEnabledValue(oasTlmConfig.traces.memoryExporter.enabled);
65
+ const mainExporter = telemetryRegistry_js_1.multiSpanExporter;
66
+ mainExporter.clearExporters();
67
+ let mainProcessor = new sdk_trace_node_1.BatchSpanProcessor(mainExporter);
68
+ if (bootConfig_js_1.bootEnvVariables.OASTLM_BOOT_ENV !== 'production') {
69
+ logger_js_1.default.info('Not in production, using SimpleSpanProcessor for traces');
70
+ mainProcessor = new sdk_trace_node_1.SimpleSpanProcessor(mainExporter);
71
+ }
72
+ mainExporter.addExporters(telemetryRegistry_js_1.inMemoryDbSpanExporter); // Main exporter have at least the in-memory exporter used by the traces controller
73
+ if (oasTlmConfig.storage.path) {
74
+ mainExporter.addExporters(new DiskTraceExporter_js_1.DiskTraceExporter({ directoryPath: oasTlmConfig.storage.path }));
75
+ logger_js_1.default.info(`[TraceDiskExporter] Enabled at: ${oasTlmConfig.storage.path}`);
76
+ }
77
+ mainExporter.addExporters(oasTlmConfig.traces.extraExporters);
78
+ return mainProcessor;
79
+ }
80
+ function configureMetrics(oasTlmConfig) {
81
+ // METRICS CONFIGURATION
82
+ telemetryRegistry_js_1.inMemoryDbMetricExporter.setEnabledValue(oasTlmConfig.metrics.memoryExporter.enabled);
83
+ telemetryRegistry_js_1.inMemoryDbMetricExporter.retentionTimeInSeconds = oasTlmConfig.metrics.memoryExporter.retentionTimeSeconds;
84
+ const metricExporters = [telemetryRegistry_js_1.inMemoryDbMetricExporter];
85
+ if (oasTlmConfig.storage.path) {
86
+ metricExporters.push(new DiskMetricExporter_js_1.DiskMetricExporter({ directoryPath: oasTlmConfig.storage.path }));
87
+ logger_js_1.default.info(`[MetricDiskExporter] Enabled at: ${oasTlmConfig.storage.path}`);
88
+ }
89
+ const mainReader = new sdk_metrics_1.PeriodicExportingMetricReader({
90
+ exporter: new MultiMetricExporter_js_1.MultiMetricExporter(metricExporters),
91
+ exportIntervalMillis: oasTlmConfig.metrics.mainMetricReaderOptions.exportIntervalMillis,
92
+ metricProducers: oasTlmConfig.metrics.mainMetricReaderOptions.metricProducers
93
+ });
94
+ return mainReader;
43
95
  }
44
96
  function configureLogs(oasTlmConfig) {
45
- // LOGS CONFIGURATION
46
- // [OT]LoggerProvider -> [OT]LogRecordProcessor(multiLogProcessor) -> n Processors(eg mainProcessor, extra) -> 1 LogExporter
47
- _telemetryRegistry.inMemoryDbLogExporter.setEnabledValue(oasTlmConfig.logs.memoryExporter.enabled);
48
- _telemetryRegistry.inMemoryDbLogExporter.retentionTimeInSeconds = oasTlmConfig.logs.memoryExporter.retentionTimeSeconds;
49
- const mainExporter = _telemetryRegistry.multiLogExporter;
50
- let mainProcessor = new _sdkLogs.BatchLogRecordProcessor(mainExporter);
51
- if (_bootConfig.bootEnvVariables.OASTLM_BOOT_ENV !== 'production') {
52
- _logger.default.info('Not in production, using SimpleLogRecordProcessor for logs');
53
- mainProcessor = new _sdkLogs.SimpleLogRecordProcessor(mainExporter);
54
- }
55
- mainExporter.addExporters(_telemetryRegistry.inMemoryDbLogExporter); // Main exporter have at least the in-memory exporter used by the logs controller
56
- mainExporter.addExporters(oasTlmConfig.logs.extraExporters);
57
- _telemetryRegistry.dynamicMultiLogProcessor.addProcessors(mainProcessor);
58
- _telemetryRegistry.dynamicMultiLogProcessor.addProcessors(oasTlmConfig.logs.extraProcessors);
97
+ // LOGS CONFIGURATION
98
+ // [OT]LoggerProvider -> [OT]LogRecordProcessor(multiLogProcessor) -> n Processors(eg mainProcessor, extra) -> 1 LogExporter
99
+ telemetryRegistry_js_1.inMemoryDbLogExporter.setEnabledValue(oasTlmConfig.logs.memoryExporter.enabled);
100
+ telemetryRegistry_js_1.inMemoryDbLogExporter.retentionTimeInSeconds = oasTlmConfig.logs.memoryExporter.retentionTimeSeconds;
101
+ const mainExporter = telemetryRegistry_js_1.multiLogExporter;
102
+ mainExporter.clearExporters();
103
+ let mainProcessor = new sdk_logs_1.BatchLogRecordProcessor(mainExporter);
104
+ if (bootConfig_js_1.bootEnvVariables.OASTLM_BOOT_ENV !== 'production') {
105
+ logger_js_1.default.info('Not in production, using SimpleLogRecordProcessor for logs');
106
+ mainProcessor = new sdk_logs_1.SimpleLogRecordProcessor(mainExporter);
107
+ }
108
+ mainExporter.addExporters(telemetryRegistry_js_1.inMemoryDbLogExporter); // Main exporter have at least the in-memory exporter used by the logs controller
109
+ if (oasTlmConfig.storage.path) {
110
+ mainExporter.addExporters(new DiskLogExporter_js_1.DiskLogExporter({ directoryPath: oasTlmConfig.storage.path }));
111
+ logger_js_1.default.info(`[LogDiskExporter] Enabled at: ${oasTlmConfig.storage.path}`);
112
+ }
113
+ mainExporter.addExporters(oasTlmConfig.logs.extraExporters);
114
+ return mainProcessor;
115
+ }
116
+ function scheduleStartupImports(storagePath) {
117
+ setTimeout(async () => {
118
+ try {
119
+ await runTimedImport('TraceDiskImport', storagePath, new DiskImporter_js_1.DiskImporter({ directoryPath: storagePath }), async (spans) => {
120
+ await (0, traceService_js_1.importTracesToMemory)(spans);
121
+ });
122
+ await runTimedImport('LogDiskImport', storagePath, new DiskImporter_js_1.DiskImporter({ directoryPath: storagePath, segmentPrefix: 'logs' }), async (logs) => {
123
+ await (0, logService_js_1.importLogsToMemory)(logs);
124
+ });
125
+ await runTimedImport('MetricDiskImport', storagePath, new DiskImporter_js_1.DiskImporter({ directoryPath: storagePath, segmentPrefix: 'metrics' }), async (scopeMetrics) => {
126
+ (0, metricsService_js_1.importMetricsToMemory)(scopeMetrics, { format: 'otel' });
127
+ });
128
+ }
129
+ catch (error) {
130
+ logger_js_1.default.error(`[DiskImporter] Startup import sequence failed: ${error?.message || error}`);
131
+ }
132
+ }, 0);
133
+ }
134
+ async function runTimedImport(label, storagePath, importer, onBatch) {
135
+ const startedAt = Date.now();
136
+ logger_js_1.default.info(`[${label}] Startup import started. Path: ${storagePath}`);
137
+ try {
138
+ const result = await importer.import(onBatch);
139
+ logger_js_1.default.info(`[${label}] Startup import completed. Files: ${result.segmentFilesRead}, imported records: ${result.importedRecords}, failed frames: ${result.failedFrames}`);
140
+ }
141
+ catch (error) {
142
+ logger_js_1.default.error(`[${label}] Startup import failed: ${error?.message || error}`);
143
+ }
144
+ finally {
145
+ const elapsedMs = Date.now() - startedAt;
146
+ logger_js_1.default.info(`[${label}] Startup import finished in ${elapsedMs}ms`);
147
+ }
59
148
  }
60
- function configureMetrics(oasTlmConfig) {
61
- // METRICS CONFIGURATION
62
- // [CUSTOM]MeterProvider -> n [OTel]MetricReader -> (0-1) MetricExporter (only if push-based reader)
63
- _telemetryRegistry.inMemoryDbMetricExporter.setEnabledValue(oasTlmConfig.metrics.memoryExporter.enabled);
64
- _telemetryRegistry.inMemoryDbMetricExporter.retentionTimeInSeconds = oasTlmConfig.metrics.memoryExporter.retentionTimeSeconds;
65
- const mainReader = new _sdkMetrics.PeriodicExportingMetricReader({
66
- exporter: _telemetryRegistry.inMemoryDbMetricExporter,
67
- exportIntervalMillis: oasTlmConfig.metrics.mainMetricReaderOptions.exportIntervalMillis,
68
- metricProducers: oasTlmConfig.metrics.mainMetricReaderOptions.metricProducers
69
- });
70
- const meterProvider = new _sdkMetrics.MeterProvider({
71
- resource: _telemetryRegistry.oasTelemetryResource,
72
- readers: [mainReader, ...oasTlmConfig.metrics.extraReaders],
73
- views: oasTlmConfig.metrics.extraViews || []
74
- });
75
- // TODO maybe hostMetrics are too much, consider using only a subset of them.
76
- const hostMetrics = new _hostMetrics.HostMetrics({
77
- meterProvider: meterProvider
78
- });
79
- // AFTER adding all readers, start the instrumentations
80
- hostMetrics.start();
81
- }
@@ -1,43 +1,57 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.originalConsoleMethods = exports.oasTelemetryResource = exports.multiSpanExporter = exports.multiLogExporter = exports.inMemoryDbSpanExporter = exports.inMemoryDbMetricExporter = exports.inMemoryDbLogExporter = exports.dynamicMultiSpanProcessor = exports.dynamicMultiLogProcessor = void 0;
7
- var _InMemoryDbSpanExporter = require("./custom-implementations/exporters/InMemoryDbSpanExporter.cjs");
8
- var _wrappers = require("./custom-implementations/wrappers.cjs");
9
- var _InMemoryDbLogExporter = require("./custom-implementations/exporters/InMemoryDbLogExporter.cjs");
10
- var _InMemoryDbMetricExporter = require("./custom-implementations/exporters/InMemoryDbMetricExporter.cjs");
11
- var _dynamicMultiSpanProcessor = require("./custom-implementations/processors/dynamicMultiSpanProcessor.cjs");
12
- var _dynamicMultiLogProcessor = require("./custom-implementations/processors/dynamicMultiLogProcessor.cjs");
13
- var _semanticConventions = require("@opentelemetry/semantic-conventions");
14
- var _resources = require("@opentelemetry/resources");
15
- var _bootConfig = require("../config/bootConfig.cjs");
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.instrumentations = exports.inMemoryDbMetricExporter = exports.originalConsoleMethods = exports.dynamicMultiLogProcessor = exports.multiLogExporter = exports.inMemoryDbLogExporter = exports.dynamicMultiSpanProcessor = exports.multiSpanExporter = exports.inMemoryDbSpanExporter = exports.oasTelemetryResource = void 0;
4
+ exports.isBootInitialized = isBootInitialized;
5
+ exports.setBootInitialized = setBootInitialized;
6
+ exports.isTelemetryConfigured = isTelemetryConfigured;
7
+ exports.setTelemetryConfigured = setTelemetryConfigured;
8
+ exports.setTelemetryRouter = setTelemetryRouter;
9
+ exports.getTelemetryRouter = getTelemetryRouter;
10
+ const InMemoryDbSpanExporter_js_1 = require("./custom-implementations/exporters/InMemoryDbSpanExporter.cjs");
11
+ const wrappers_js_1 = require("./custom-implementations/wrappers.cjs");
12
+ const InMemoryDbLogExporter_js_1 = require("./custom-implementations/exporters/InMemoryDbLogExporter.cjs");
13
+ const InMemoryDbMetricExporter_js_1 = require("./custom-implementations/exporters/InMemoryDbMetricExporter.cjs");
14
+ const dynamicMultiSpanProcessor_js_1 = require("./custom-implementations/processors/dynamicMultiSpanProcessor.cjs");
15
+ const dynamicMultiLogProcessor_js_1 = require("./custom-implementations/processors/dynamicMultiLogProcessor.cjs");
16
+ const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
17
+ const resources_1 = require("@opentelemetry/resources");
18
+ const bootConfig_js_1 = require("../config/bootConfig.cjs");
16
19
  // GLOBAL REGISTRY of telemetry components, used by SDKs and controllers.
17
- const oasTelemetryResource = exports.oasTelemetryResource = (0, _resources.resourceFromAttributes)({
18
- [_semanticConventions.ATTR_SERVICE_NAME]: _bootConfig.bootEnvVariables.OASTLM_BOOT_SERVICE_NAME
20
+ let _bootInitialized = false;
21
+ let _telemetryConfigured = false;
22
+ let _router = undefined;
23
+ function isBootInitialized() { return _bootInitialized; }
24
+ function setBootInitialized(v) { _bootInitialized = v; }
25
+ function isTelemetryConfigured() { return _telemetryConfigured; }
26
+ function setTelemetryConfigured(v) { _telemetryConfigured = v; }
27
+ function setTelemetryRouter(router) { _router = router; }
28
+ function getTelemetryRouter() { return _router; }
29
+ exports.oasTelemetryResource = (0, resources_1.resourceFromAttributes)({
30
+ [semantic_conventions_1.ATTR_SERVICE_NAME]: bootConfig_js_1.bootEnvVariables.OASTLM_BOOT_SERVICE_NAME
19
31
  });
20
32
  // TRACES -------------------------------------------------------------------------------------
21
33
  // This is the main exporter for oas-telemetry spans. (Used by the traces controller)
22
- const inMemoryDbSpanExporter = exports.inMemoryDbSpanExporter = new _InMemoryDbSpanExporter.InMemoryDbSpanExporter();
34
+ exports.inMemoryDbSpanExporter = new InMemoryDbSpanExporter_js_1.InMemoryDbSpanExporter();
23
35
  // This allows to add more exporter in the future without changing the code
24
- const multiSpanExporter = exports.multiSpanExporter = new _wrappers.EnablerMultiSpanExporter();
36
+ exports.multiSpanExporter = new wrappers_js_1.EnablerMultiSpanExporter();
25
37
  // This allows the addition of more processors at runtime
26
- const dynamicMultiSpanProcessor = exports.dynamicMultiSpanProcessor = new _dynamicMultiSpanProcessor.DynamicMultiSpanProcessor();
38
+ exports.dynamicMultiSpanProcessor = new dynamicMultiSpanProcessor_js_1.DynamicMultiSpanProcessor();
27
39
  // LOGS ----------------------------------------------------------------------------------------
28
- const inMemoryDbLogExporter = exports.inMemoryDbLogExporter = new _InMemoryDbLogExporter.InMemoryDbLogExporter();
29
- const multiLogExporter = exports.multiLogExporter = new _wrappers.EnablerMultiLogExporter();
30
- const dynamicMultiLogProcessor = exports.dynamicMultiLogProcessor = new _dynamicMultiLogProcessor.DynamicMultiLogRecordProcessor();
31
- // Override console methods to emit logs via OpenTelemetry, like an instrumentation
32
- const originalConsoleMethods = exports.originalConsoleMethods = {
33
- log: console.log,
34
- warn: console.warn,
35
- error: console.error,
36
- info: console.info,
37
- debug: console.debug
40
+ exports.inMemoryDbLogExporter = new InMemoryDbLogExporter_js_1.InMemoryDbLogExporter();
41
+ exports.multiLogExporter = new wrappers_js_1.EnablerMultiLogExporter();
42
+ exports.dynamicMultiLogProcessor = new dynamicMultiLogProcessor_js_1.DynamicMultiLogRecordProcessor();
43
+ // For custom log instrumentation, and lib logging
44
+ exports.originalConsoleMethods = {
45
+ log: console.log,
46
+ warn: console.warn,
47
+ error: console.error,
48
+ info: console.info,
49
+ debug: console.debug,
38
50
  };
39
51
  // METRICS -------------------------------------------------------------------------------------
40
52
  // Metrics follow a different pattern in OpenTelemetry
41
- const inMemoryDbMetricExporter = exports.inMemoryDbMetricExporter = new _InMemoryDbMetricExporter.InMemoryDbMetricExporter();
53
+ exports.inMemoryDbMetricExporter = new InMemoryDbMetricExporter_js_1.InMemoryDbMetricExporter();
42
54
  // Readers and their exporters cannot be grouped together in a MultiReader or similar construct
43
- // due to differences in aggregation temporality and aggregation selection.
55
+ // due to differences in aggregation temporality and aggregation selection.
56
+ // INSTRUMENTATIONS -----------------------------------------------------------------------
57
+ exports.instrumentations = [];
@@ -1,68 +1,53 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.agent = agent;
7
- var _tools = require("./tools.cjs");
8
- var _logger = _interopRequireDefault(require("../utils/logger.cjs"));
9
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
11
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
13
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
14
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
15
- async function agent(openai, messages, model = "gpt-3.5-turbo", extraPrompts = []) {
16
- for (let i = 0; i < 5; i++) {
17
- const modelResponse = await openai.chat.completions.create({
18
- model,
19
- messages,
20
- tools: _tools.tools
21
- });
22
- const {
23
- finish_reason,
24
- message
25
- } = modelResponse.choices[0];
26
- if (finish_reason === "tool_calls" && message.tool_calls) {
27
- _logger.default.debug("Tool calls detected:", message.tool_calls);
28
- const results = [];
29
- for (const toolCall of message.tool_calls) {
30
- const functionName = toolCall.function.name;
31
- const functionToCall = _tools.availableTools[functionName];
32
- const functionArgs = JSON.parse(toolCall.function.arguments);
33
- const functionArgsArr = Object.values(functionArgs);
34
- // @ts-expect-error yes
35
- // eslint-disable-next-line prefer-spread
36
- const functionResponse = await functionToCall.apply(null, functionArgsArr);
37
- results.push({
38
- name: functionName,
39
- response: functionResponse
7
+ const tools_js_1 = require("./tools.cjs");
8
+ const logger_js_1 = __importDefault(require("../utils/logger.cjs"));
9
+ async function agent(openai, messages, model = "gpt-3.5-turbo") {
10
+ for (let i = 0; i < 5; i++) {
11
+ const modelResponse = await openai.chat.completions.create({
12
+ model,
13
+ messages,
14
+ tools: tools_js_1.tools,
40
15
  });
41
- }
42
- const resultMessage = results.map(({
43
- name,
44
- response
45
- }, idx) => {
46
- const toolCall = message.tool_calls?.[idx];
47
- const params = toolCall ? JSON.parse(toolCall.function.arguments) : {};
48
- return `Tool "${name}" called with parameters:\n${JSON.stringify(params, null, 2)}\nResult:\n${JSON.stringify(response, null, 2)}`;
49
- }).join("\n\n");
50
- messages.push({
51
- role: "function",
52
- name: "multiple_tool_calls",
53
- content: resultMessage,
54
- timestamp: new Date().toISOString()
55
- });
56
- } else if (finish_reason === "stop") {
57
- messages.push(_objectSpread(_objectSpread({}, message), {}, {
58
- timestamp: new Date().toISOString()
59
- }));
60
- return;
16
+ const { finish_reason, message } = modelResponse.choices[0];
17
+ if (finish_reason === "tool_calls" && message.tool_calls) {
18
+ logger_js_1.default.debug("Tool calls detected:", message.tool_calls);
19
+ const results = [];
20
+ for (const toolCall of message.tool_calls) {
21
+ // Type guard for tool_calls
22
+ if (toolCall.type !== 'function' || !toolCall.function)
23
+ continue;
24
+ const functionName = toolCall.function.name;
25
+ const functionToCall = tools_js_1.availableTools[functionName];
26
+ const functionArgs = JSON.parse(toolCall.function.arguments);
27
+ const functionArgsArr = Object.values(functionArgs);
28
+ // eslint-disable-next-line prefer-spread
29
+ const functionResponse = await functionToCall.apply(null, functionArgsArr);
30
+ results.push({
31
+ name: functionName,
32
+ response: functionResponse,
33
+ });
34
+ }
35
+ const resultMessage = results.map(({ name, response }, idx) => {
36
+ const toolCall = message.tool_calls?.[idx];
37
+ const params = toolCall && toolCall.type === 'function' && toolCall.function ? JSON.parse(toolCall.function.arguments) : {};
38
+ return `Tool "${name}" called with parameters:\n${JSON.stringify(params, null, 2)}\nResult:\n${JSON.stringify(response, null, 2)}`;
39
+ }).join("\n\n");
40
+ messages.push({
41
+ role: "function",
42
+ name: "multiple_tool_calls",
43
+ content: resultMessage,
44
+ timestamp: new Date().toISOString()
45
+ });
46
+ }
47
+ else if (finish_reason === "stop") {
48
+ messages.push({ ...message, timestamp: new Date().toISOString() });
49
+ return;
50
+ }
61
51
  }
62
- }
63
- messages.push({
64
- role: "assistant",
65
- content: "Maximum iterations reached without a suitable response. Try a more specific query.",
66
- timestamp: new Date().toISOString()
67
- });
68
- }
52
+ messages.push({ role: "assistant", content: "Maximum iterations reached without a suitable response. Try a more specific query.", timestamp: new Date().toISOString() });
53
+ }