@dexto/core 1.1.11 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/README.md +24 -4
  2. package/dist/Dexto.cjs +4 -14
  3. package/dist/Dexto.d.ts +8 -29
  4. package/dist/Dexto.d.ts.map +1 -1
  5. package/dist/Dexto.js +4 -12
  6. package/dist/agent/DextoAgent.cjs +92 -3
  7. package/dist/agent/DextoAgent.d.ts +12 -4
  8. package/dist/agent/DextoAgent.d.ts.map +1 -1
  9. package/dist/agent/DextoAgent.js +52 -3
  10. package/dist/agent/agentCard.js +1 -0
  11. package/dist/agent/error-codes.cjs +1 -0
  12. package/dist/agent/error-codes.d.ts +1 -0
  13. package/dist/agent/error-codes.d.ts.map +1 -1
  14. package/dist/agent/error-codes.js +2 -0
  15. package/dist/agent/errors.cjs +13 -0
  16. package/dist/agent/errors.d.ts +4 -0
  17. package/dist/agent/errors.d.ts.map +1 -1
  18. package/dist/agent/errors.js +14 -0
  19. package/dist/agent/index.js +1 -0
  20. package/dist/agent/registry/error-codes.js +1 -0
  21. package/dist/agent/registry/errors.js +1 -0
  22. package/dist/agent/registry/registry.js +1 -0
  23. package/dist/agent/registry/types.js +1 -0
  24. package/dist/agent/registry/user-registry.js +1 -0
  25. package/dist/agent/schemas.cjs +6 -1
  26. package/dist/agent/schemas.d.ts +113 -3
  27. package/dist/agent/schemas.d.ts.map +1 -1
  28. package/dist/agent/schemas.js +7 -1
  29. package/dist/agent/state-manager.js +1 -0
  30. package/dist/approval/error-codes.js +1 -0
  31. package/dist/approval/errors.js +1 -0
  32. package/dist/approval/index.js +1 -0
  33. package/dist/approval/manager.cjs +30 -0
  34. package/dist/approval/manager.d.ts +23 -1
  35. package/dist/approval/manager.d.ts.map +1 -1
  36. package/dist/approval/manager.js +31 -0
  37. package/dist/approval/providers/event-based-approval-provider.js +1 -0
  38. package/dist/approval/providers/factory.js +1 -0
  39. package/dist/approval/providers/noop-approval-provider.js +1 -0
  40. package/dist/approval/schemas.cjs +36 -0
  41. package/dist/approval/schemas.d.ts +173 -0
  42. package/dist/approval/schemas.d.ts.map +1 -1
  43. package/dist/approval/schemas.js +33 -0
  44. package/dist/approval/types.cjs +1 -0
  45. package/dist/approval/types.d.ts +27 -1
  46. package/dist/approval/types.d.ts.map +1 -1
  47. package/dist/approval/types.js +2 -0
  48. package/dist/chunk-C6A6W6XS.js +53 -0
  49. package/dist/config/agent-resolver.js +1 -0
  50. package/dist/config/error-codes.js +1 -0
  51. package/dist/config/errors.js +1 -0
  52. package/dist/config/loader.js +1 -0
  53. package/dist/config/writer.js +1 -0
  54. package/dist/context/compression/middle-removal.js +1 -0
  55. package/dist/context/compression/oldest-removal.js +1 -0
  56. package/dist/context/error-codes.js +1 -0
  57. package/dist/context/errors.js +1 -0
  58. package/dist/context/index.js +1 -0
  59. package/dist/context/manager.cjs +36 -1
  60. package/dist/context/manager.d.ts.map +1 -1
  61. package/dist/context/manager.js +27 -1
  62. package/dist/context/media-helpers.js +1 -0
  63. package/dist/context/utils.cjs +102 -6
  64. package/dist/context/utils.d.ts +35 -2
  65. package/dist/context/utils.d.ts.map +1 -1
  66. package/dist/context/utils.js +100 -6
  67. package/dist/errors/DextoBaseError.js +1 -0
  68. package/dist/errors/DextoRuntimeError.js +1 -0
  69. package/dist/errors/DextoValidationError.js +1 -0
  70. package/dist/errors/index.js +1 -0
  71. package/dist/errors/result-bridge.js +1 -0
  72. package/dist/errors/types.cjs +3 -0
  73. package/dist/errors/types.d.ts +7 -2
  74. package/dist/errors/types.d.ts.map +1 -1
  75. package/dist/errors/types.js +4 -0
  76. package/dist/events/index.cjs +1 -0
  77. package/dist/events/index.d.ts +6 -2
  78. package/dist/events/index.d.ts.map +1 -1
  79. package/dist/events/index.js +2 -0
  80. package/dist/filesystem/error-codes.cjs +53 -0
  81. package/dist/filesystem/error-codes.d.ts +31 -0
  82. package/dist/filesystem/error-codes.d.ts.map +1 -0
  83. package/dist/filesystem/error-codes.js +30 -0
  84. package/dist/filesystem/errors.cjs +303 -0
  85. package/dist/filesystem/errors.d.ts +109 -0
  86. package/dist/filesystem/errors.d.ts.map +1 -0
  87. package/dist/filesystem/errors.js +280 -0
  88. package/dist/filesystem/filesystem-service.cjs +482 -0
  89. package/dist/filesystem/filesystem-service.d.ts +57 -0
  90. package/dist/filesystem/filesystem-service.d.ts.map +1 -0
  91. package/dist/filesystem/filesystem-service.js +449 -0
  92. package/dist/filesystem/index.cjs +37 -0
  93. package/dist/filesystem/index.d.ts +11 -0
  94. package/dist/filesystem/index.d.ts.map +1 -0
  95. package/dist/filesystem/index.js +11 -0
  96. package/dist/filesystem/path-validator.cjs +172 -0
  97. package/dist/filesystem/path-validator.d.ts +53 -0
  98. package/dist/filesystem/path-validator.d.ts.map +1 -0
  99. package/dist/filesystem/path-validator.js +139 -0
  100. package/dist/filesystem/types.cjs +16 -0
  101. package/dist/filesystem/types.d.ts +171 -0
  102. package/dist/filesystem/types.d.ts.map +1 -0
  103. package/dist/filesystem/types.js +0 -0
  104. package/dist/index.browser.js +1 -0
  105. package/dist/index.cjs +3 -3
  106. package/dist/index.d.ts +2 -1
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +3 -2
  109. package/dist/llm/error-codes.js +1 -0
  110. package/dist/llm/errors.js +1 -0
  111. package/dist/llm/formatters/anthropic.js +1 -0
  112. package/dist/llm/formatters/factory.js +1 -0
  113. package/dist/llm/formatters/openai.js +1 -0
  114. package/dist/llm/formatters/vercel.js +1 -0
  115. package/dist/llm/registry.cjs +15 -15
  116. package/dist/llm/registry.d.ts +1 -1
  117. package/dist/llm/registry.js +16 -15
  118. package/dist/llm/resolver.js +1 -0
  119. package/dist/llm/schemas.cjs +6 -2
  120. package/dist/llm/schemas.d.ts +10 -0
  121. package/dist/llm/schemas.d.ts.map +1 -1
  122. package/dist/llm/schemas.js +7 -2
  123. package/dist/llm/services/anthropic.cjs +67 -0
  124. package/dist/llm/services/anthropic.d.ts +6 -0
  125. package/dist/llm/services/anthropic.d.ts.map +1 -1
  126. package/dist/llm/services/anthropic.js +27 -0
  127. package/dist/llm/services/factory.js +1 -0
  128. package/dist/llm/services/openai.cjs +87 -0
  129. package/dist/llm/services/openai.d.ts +6 -0
  130. package/dist/llm/services/openai.d.ts.map +1 -1
  131. package/dist/llm/services/openai.js +47 -0
  132. package/dist/llm/services/test-utils.integration.cjs +1 -1
  133. package/dist/llm/services/test-utils.integration.js +2 -1
  134. package/dist/llm/services/vercel.cjs +144 -97
  135. package/dist/llm/services/vercel.d.ts +6 -1
  136. package/dist/llm/services/vercel.d.ts.map +1 -1
  137. package/dist/llm/services/vercel.js +105 -98
  138. package/dist/llm/tokenizer/anthropic.js +1 -0
  139. package/dist/llm/tokenizer/default.js +1 -0
  140. package/dist/llm/tokenizer/factory.js +1 -0
  141. package/dist/llm/tokenizer/google.js +1 -0
  142. package/dist/llm/tokenizer/openai.cjs +1 -1
  143. package/dist/llm/tokenizer/openai.d.ts +1 -1
  144. package/dist/llm/tokenizer/openai.js +2 -1
  145. package/dist/llm/tokenizer/types.js +1 -0
  146. package/dist/llm/types.d.ts +2 -2
  147. package/dist/llm/types.d.ts.map +1 -1
  148. package/dist/llm/types.js +1 -0
  149. package/dist/llm/validation.js +1 -0
  150. package/dist/logger/browser.js +1 -0
  151. package/dist/logger/logger.d.ts +42 -0
  152. package/dist/logger/logger.d.ts.map +1 -1
  153. package/dist/logger/logger.js +1 -0
  154. package/dist/mcp/error-codes.cjs +1 -0
  155. package/dist/mcp/error-codes.d.ts +1 -0
  156. package/dist/mcp/error-codes.d.ts.map +1 -1
  157. package/dist/mcp/error-codes.js +2 -0
  158. package/dist/mcp/errors.cjs +12 -0
  159. package/dist/mcp/errors.d.ts +7 -0
  160. package/dist/mcp/errors.d.ts.map +1 -1
  161. package/dist/mcp/errors.js +13 -0
  162. package/dist/mcp/manager.cjs +66 -16
  163. package/dist/mcp/manager.d.ts +7 -0
  164. package/dist/mcp/manager.d.ts.map +1 -1
  165. package/dist/mcp/manager.js +67 -16
  166. package/dist/mcp/mcp-client.js +1 -0
  167. package/dist/mcp/resolver.js +1 -0
  168. package/dist/mcp/schemas.js +1 -0
  169. package/dist/mcp/types.d.ts +1 -1
  170. package/dist/mcp/types.d.ts.map +1 -1
  171. package/dist/memory/error-codes.js +1 -0
  172. package/dist/memory/errors.js +1 -0
  173. package/dist/memory/index.js +1 -0
  174. package/dist/memory/manager.js +1 -0
  175. package/dist/memory/schemas.js +1 -0
  176. package/dist/plugins/builtins/content-policy.js +1 -0
  177. package/dist/plugins/builtins/response-sanitizer.js +1 -0
  178. package/dist/plugins/error-codes.js +1 -0
  179. package/dist/plugins/index.js +1 -0
  180. package/dist/plugins/loader.js +1 -0
  181. package/dist/plugins/manager.js +1 -0
  182. package/dist/plugins/registrations/builtins.js +1 -0
  183. package/dist/plugins/schemas.js +1 -0
  184. package/dist/preferences/constants.js +1 -0
  185. package/dist/preferences/error-codes.js +1 -0
  186. package/dist/preferences/errors.js +1 -0
  187. package/dist/preferences/index.js +1 -0
  188. package/dist/preferences/loader.cjs +3 -1
  189. package/dist/preferences/loader.d.ts +10 -1
  190. package/dist/preferences/loader.d.ts.map +1 -1
  191. package/dist/preferences/loader.js +4 -1
  192. package/dist/preferences/schemas.cjs +2 -1
  193. package/dist/preferences/schemas.d.ts +8 -0
  194. package/dist/preferences/schemas.d.ts.map +1 -1
  195. package/dist/preferences/schemas.js +3 -1
  196. package/dist/process/command-validator.cjs +544 -0
  197. package/dist/process/command-validator.d.ts +46 -0
  198. package/dist/process/command-validator.d.ts.map +1 -0
  199. package/dist/process/command-validator.js +521 -0
  200. package/dist/process/error-codes.cjs +47 -0
  201. package/dist/process/error-codes.d.ts +25 -0
  202. package/dist/process/error-codes.d.ts.map +1 -0
  203. package/dist/process/error-codes.js +24 -0
  204. package/dist/process/errors.cjs +244 -0
  205. package/dist/process/errors.d.ts +87 -0
  206. package/dist/process/errors.d.ts.map +1 -0
  207. package/dist/process/errors.js +221 -0
  208. package/dist/process/index.cjs +37 -0
  209. package/dist/process/index.d.ts +11 -0
  210. package/dist/process/index.d.ts.map +1 -0
  211. package/dist/process/index.js +11 -0
  212. package/dist/process/process-service.cjs +443 -0
  213. package/dist/process/process-service.d.ts +62 -0
  214. package/dist/process/process-service.d.ts.map +1 -0
  215. package/dist/process/process-service.js +410 -0
  216. package/dist/process/types.cjs +16 -0
  217. package/dist/process/types.d.ts +107 -0
  218. package/dist/process/types.d.ts.map +1 -0
  219. package/dist/process/types.js +0 -0
  220. package/dist/prompts/error-codes.js +1 -0
  221. package/dist/prompts/errors.js +1 -0
  222. package/dist/prompts/index.js +1 -0
  223. package/dist/prompts/name-validation.js +1 -0
  224. package/dist/prompts/prompt-manager.js +1 -0
  225. package/dist/prompts/providers/custom-prompt-provider.js +1 -0
  226. package/dist/prompts/providers/file-prompt-provider.js +1 -0
  227. package/dist/prompts/providers/mcp-prompt-provider.js +1 -0
  228. package/dist/prompts/providers/starter-prompt-provider.js +1 -0
  229. package/dist/prompts/schemas.js +1 -0
  230. package/dist/prompts/utils.js +1 -0
  231. package/dist/resources/error-codes.js +1 -0
  232. package/dist/resources/errors.js +1 -0
  233. package/dist/resources/handlers/blob-handler.js +1 -0
  234. package/dist/resources/handlers/factory.js +1 -0
  235. package/dist/resources/handlers/filesystem-handler.cjs +1 -1
  236. package/dist/resources/handlers/filesystem-handler.d.ts.map +1 -1
  237. package/dist/resources/handlers/filesystem-handler.js +2 -1
  238. package/dist/resources/index.js +1 -0
  239. package/dist/resources/internal-provider.js +1 -0
  240. package/dist/resources/manager.js +1 -0
  241. package/dist/resources/reference-parser.js +1 -0
  242. package/dist/resources/schemas.js +1 -0
  243. package/dist/search/index.js +1 -0
  244. package/dist/search/search-service.js +1 -0
  245. package/dist/session/chat-session.cjs +2 -2
  246. package/dist/session/chat-session.d.ts +2 -2
  247. package/dist/session/chat-session.js +3 -2
  248. package/dist/session/error-codes.js +1 -0
  249. package/dist/session/errors.js +1 -0
  250. package/dist/session/history/database.js +1 -0
  251. package/dist/session/history/factory.js +1 -0
  252. package/dist/session/history/memory.js +1 -0
  253. package/dist/session/index.js +1 -0
  254. package/dist/session/schemas.js +1 -0
  255. package/dist/session/session-manager.d.ts +6 -0
  256. package/dist/session/session-manager.d.ts.map +1 -1
  257. package/dist/session/session-manager.js +1 -0
  258. package/dist/session/title-generator.js +1 -0
  259. package/dist/storage/blob/factory.cjs +3 -3
  260. package/dist/storage/blob/factory.d.ts +3 -1
  261. package/dist/storage/blob/factory.d.ts.map +1 -1
  262. package/dist/storage/blob/factory.js +4 -3
  263. package/dist/storage/blob/local-blob-store.cjs +18 -2
  264. package/dist/storage/blob/local-blob-store.d.ts +2 -1
  265. package/dist/storage/blob/local-blob-store.d.ts.map +1 -1
  266. package/dist/storage/blob/local-blob-store.js +19 -2
  267. package/dist/storage/blob/schemas.js +1 -0
  268. package/dist/storage/cache/factory.js +1 -0
  269. package/dist/storage/cache/memory-cache-store.js +1 -0
  270. package/dist/storage/cache/redis-store.js +1 -0
  271. package/dist/storage/cache/schemas.js +1 -0
  272. package/dist/storage/database/factory.cjs +7 -5
  273. package/dist/storage/database/factory.d.ts +3 -1
  274. package/dist/storage/database/factory.d.ts.map +1 -1
  275. package/dist/storage/database/factory.js +8 -5
  276. package/dist/storage/database/memory-database-store.js +1 -0
  277. package/dist/storage/database/postgres-store.js +1 -0
  278. package/dist/storage/database/schemas.cjs +1 -1
  279. package/dist/storage/database/schemas.js +2 -1
  280. package/dist/storage/database/sqlite-store.cjs +20 -2
  281. package/dist/storage/database/sqlite-store.d.ts +2 -1
  282. package/dist/storage/database/sqlite-store.d.ts.map +1 -1
  283. package/dist/storage/database/sqlite-store.js +21 -2
  284. package/dist/storage/error-codes.cjs +1 -0
  285. package/dist/storage/error-codes.d.ts +1 -0
  286. package/dist/storage/error-codes.d.ts.map +1 -1
  287. package/dist/storage/error-codes.js +2 -0
  288. package/dist/storage/errors.cjs +15 -0
  289. package/dist/storage/errors.d.ts +4 -0
  290. package/dist/storage/errors.d.ts.map +1 -1
  291. package/dist/storage/errors.js +16 -0
  292. package/dist/storage/index.js +1 -0
  293. package/dist/storage/schemas.js +1 -0
  294. package/dist/storage/storage-manager.cjs +7 -5
  295. package/dist/storage/storage-manager.d.ts +5 -2
  296. package/dist/storage/storage-manager.d.ts.map +1 -1
  297. package/dist/storage/storage-manager.js +8 -5
  298. package/dist/systemPrompt/contributors.js +1 -0
  299. package/dist/systemPrompt/error-codes.js +1 -0
  300. package/dist/systemPrompt/errors.js +1 -0
  301. package/dist/systemPrompt/in-built-prompts.js +1 -0
  302. package/dist/systemPrompt/index.js +1 -0
  303. package/dist/systemPrompt/manager.js +1 -0
  304. package/dist/systemPrompt/registry.js +1 -0
  305. package/dist/systemPrompt/schemas.js +1 -0
  306. package/dist/telemetry/decorators.cjs +175 -0
  307. package/dist/telemetry/decorators.d.ts +17 -0
  308. package/dist/telemetry/decorators.d.ts.map +1 -0
  309. package/dist/telemetry/decorators.js +157 -0
  310. package/dist/telemetry/exporters.cjs +108 -0
  311. package/dist/telemetry/exporters.d.ts +29 -0
  312. package/dist/telemetry/exporters.d.ts.map +1 -0
  313. package/dist/telemetry/exporters.js +85 -0
  314. package/dist/telemetry/index.cjs +28 -0
  315. package/dist/telemetry/index.d.ts +2 -0
  316. package/dist/telemetry/index.d.ts.map +1 -0
  317. package/dist/telemetry/index.js +5 -0
  318. package/dist/telemetry/schemas.cjs +71 -0
  319. package/dist/telemetry/schemas.d.ts +54 -0
  320. package/dist/telemetry/schemas.d.ts.map +1 -0
  321. package/dist/telemetry/schemas.js +48 -0
  322. package/dist/telemetry/telemetry.cjs +228 -0
  323. package/dist/telemetry/telemetry.d.ts +74 -0
  324. package/dist/telemetry/telemetry.d.ts.map +1 -0
  325. package/dist/telemetry/telemetry.js +205 -0
  326. package/dist/telemetry/types.cjs +16 -0
  327. package/dist/telemetry/types.d.ts +22 -0
  328. package/dist/telemetry/types.d.ts.map +1 -0
  329. package/dist/telemetry/types.js +0 -0
  330. package/dist/telemetry/utils.cjs +87 -0
  331. package/dist/telemetry/utils.d.ts +21 -0
  332. package/dist/telemetry/utils.d.ts.map +1 -0
  333. package/dist/telemetry/utils.js +62 -0
  334. package/dist/tools/confirmation/allowed-tools-provider/factory.js +1 -0
  335. package/dist/tools/confirmation/allowed-tools-provider/in-memory.js +1 -0
  336. package/dist/tools/confirmation/allowed-tools-provider/storage.js +1 -0
  337. package/dist/tools/error-codes.js +1 -0
  338. package/dist/tools/errors.js +1 -0
  339. package/dist/tools/index.js +1 -0
  340. package/dist/tools/internal-tools/constants.cjs +39 -0
  341. package/dist/tools/internal-tools/constants.d.ts +12 -0
  342. package/dist/tools/internal-tools/constants.d.ts.map +1 -0
  343. package/dist/tools/internal-tools/constants.js +16 -0
  344. package/dist/tools/internal-tools/implementations/ask-user-tool.js +1 -0
  345. package/dist/tools/internal-tools/implementations/bash-exec-tool.cjs +106 -0
  346. package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts +13 -0
  347. package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts.map +1 -0
  348. package/dist/tools/internal-tools/implementations/bash-exec-tool.js +73 -0
  349. package/dist/tools/internal-tools/implementations/bash-output-tool.cjs +49 -0
  350. package/dist/tools/internal-tools/implementations/bash-output-tool.d.ts +12 -0
  351. package/dist/tools/internal-tools/implementations/bash-output-tool.d.ts.map +1 -0
  352. package/dist/tools/internal-tools/implementations/bash-output-tool.js +26 -0
  353. package/dist/tools/internal-tools/implementations/edit-file-tool.cjs +62 -0
  354. package/dist/tools/internal-tools/implementations/edit-file-tool.d.ts +12 -0
  355. package/dist/tools/internal-tools/implementations/edit-file-tool.d.ts.map +1 -0
  356. package/dist/tools/internal-tools/implementations/edit-file-tool.js +39 -0
  357. package/dist/tools/internal-tools/implementations/glob-files-tool.cjs +57 -0
  358. package/dist/tools/internal-tools/implementations/glob-files-tool.d.ts +12 -0
  359. package/dist/tools/internal-tools/implementations/glob-files-tool.d.ts.map +1 -0
  360. package/dist/tools/internal-tools/implementations/glob-files-tool.js +34 -0
  361. package/dist/tools/internal-tools/implementations/grep-content-tool.cjs +71 -0
  362. package/dist/tools/internal-tools/implementations/grep-content-tool.d.ts +12 -0
  363. package/dist/tools/internal-tools/implementations/grep-content-tool.d.ts.map +1 -0
  364. package/dist/tools/internal-tools/implementations/grep-content-tool.js +48 -0
  365. package/dist/tools/internal-tools/implementations/kill-process-tool.cjs +47 -0
  366. package/dist/tools/internal-tools/implementations/kill-process-tool.d.ts +12 -0
  367. package/dist/tools/internal-tools/implementations/kill-process-tool.d.ts.map +1 -0
  368. package/dist/tools/internal-tools/implementations/kill-process-tool.js +24 -0
  369. package/dist/tools/internal-tools/implementations/read-file-tool.cjs +55 -0
  370. package/dist/tools/internal-tools/implementations/read-file-tool.d.ts +12 -0
  371. package/dist/tools/internal-tools/implementations/read-file-tool.d.ts.map +1 -0
  372. package/dist/tools/internal-tools/implementations/read-file-tool.js +32 -0
  373. package/dist/tools/internal-tools/implementations/search-history-tool.js +1 -0
  374. package/dist/tools/internal-tools/implementations/write-file-tool.cjs +56 -0
  375. package/dist/tools/internal-tools/implementations/write-file-tool.d.ts +12 -0
  376. package/dist/tools/internal-tools/implementations/write-file-tool.d.ts.map +1 -0
  377. package/dist/tools/internal-tools/implementations/write-file-tool.js +33 -0
  378. package/dist/tools/internal-tools/index.cjs +3 -1
  379. package/dist/tools/internal-tools/index.d.ts +1 -0
  380. package/dist/tools/internal-tools/index.d.ts.map +1 -1
  381. package/dist/tools/internal-tools/index.js +1 -0
  382. package/dist/tools/internal-tools/provider.js +1 -0
  383. package/dist/tools/internal-tools/registry.cjs +40 -4
  384. package/dist/tools/internal-tools/registry.d.ts +5 -9
  385. package/dist/tools/internal-tools/registry.d.ts.map +1 -1
  386. package/dist/tools/internal-tools/registry.js +41 -3
  387. package/dist/tools/schemas.cjs +18 -5
  388. package/dist/tools/schemas.d.ts +30 -1
  389. package/dist/tools/schemas.d.ts.map +1 -1
  390. package/dist/tools/schemas.js +15 -2
  391. package/dist/tools/tool-manager.cjs +158 -19
  392. package/dist/tools/tool-manager.d.ts +48 -2
  393. package/dist/tools/tool-manager.d.ts.map +1 -1
  394. package/dist/tools/tool-manager.js +118 -19
  395. package/dist/utils/api-key-resolver.js +1 -0
  396. package/dist/utils/api-key-store.js +1 -0
  397. package/dist/utils/async-context.js +1 -0
  398. package/dist/utils/debug.js +1 -0
  399. package/dist/utils/env.js +1 -0
  400. package/dist/utils/error-conversion.js +1 -0
  401. package/dist/utils/execution-context.js +1 -0
  402. package/dist/utils/fs-walk.js +1 -0
  403. package/dist/utils/path.js +1 -0
  404. package/dist/utils/port-utils.js +1 -0
  405. package/dist/utils/redactor.js +1 -0
  406. package/dist/utils/result.js +1 -0
  407. package/dist/utils/safe-stringify.js +1 -0
  408. package/dist/utils/schema-metadata.js +1 -0
  409. package/dist/utils/schema.js +1 -0
  410. package/dist/utils/service-initializer.cjs +42 -4
  411. package/dist/utils/service-initializer.d.ts +2 -1
  412. package/dist/utils/service-initializer.d.ts.map +1 -1
  413. package/dist/utils/service-initializer.js +33 -4
  414. package/dist/utils/user-info.js +1 -0
  415. package/dist/utils/zod-schema-converter.js +1 -0
  416. package/package.json +11 -1
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var exporters_exports = {};
20
+ __export(exporters_exports, {
21
+ CompositeExporter: () => CompositeExporter
22
+ });
23
+ module.exports = __toCommonJS(exporters_exports);
24
+ var import_core = require("@opentelemetry/core");
25
+ function normalizeUrlPath(url) {
26
+ try {
27
+ const parsedUrl = new URL(url);
28
+ let pathname = parsedUrl.pathname.toLowerCase().trim();
29
+ if (pathname.endsWith("/")) {
30
+ pathname = pathname.slice(0, -1);
31
+ }
32
+ return pathname;
33
+ } catch (_e) {
34
+ let path = url.toLowerCase().trim();
35
+ if (path.endsWith("/")) {
36
+ path = path.slice(0, -1);
37
+ }
38
+ return path;
39
+ }
40
+ }
41
+ class CompositeExporter {
42
+ exporters;
43
+ constructor(exporters) {
44
+ this.exporters = exporters;
45
+ }
46
+ export(spans, resultCallback) {
47
+ const telemetryTraceIds = new Set(
48
+ spans.filter((span) => {
49
+ const attrs = span.attributes || {};
50
+ const relevantHttpAttributes = [
51
+ attrs["http.target"],
52
+ attrs["http.route"],
53
+ attrs["http.url"],
54
+ attrs["url.path"],
55
+ attrs["http.request_path"]
56
+ ];
57
+ const isTelemetrySpan = relevantHttpAttributes.some((attr) => {
58
+ if (typeof attr === "string") {
59
+ const normalizedPath = normalizeUrlPath(attr);
60
+ return normalizedPath === "/api/telemetry" || normalizedPath.startsWith("/api/telemetry/");
61
+ }
62
+ return false;
63
+ });
64
+ return isTelemetrySpan;
65
+ }).map((span) => span.spanContext().traceId)
66
+ );
67
+ const filteredSpans = spans.filter(
68
+ (span) => !telemetryTraceIds.has(span.spanContext().traceId)
69
+ );
70
+ if (filteredSpans.length === 0) {
71
+ resultCallback({ code: import_core.ExportResultCode.SUCCESS });
72
+ return;
73
+ }
74
+ void Promise.all(
75
+ this.exporters.map(
76
+ (exporter) => new Promise((resolve) => {
77
+ if (exporter.export) {
78
+ exporter.export(filteredSpans, resolve);
79
+ } else {
80
+ resolve({ code: import_core.ExportResultCode.FAILED });
81
+ }
82
+ })
83
+ )
84
+ ).then((results) => {
85
+ const hasError = results.some((r) => r.code === import_core.ExportResultCode.FAILED);
86
+ resultCallback({
87
+ code: hasError ? import_core.ExportResultCode.FAILED : import_core.ExportResultCode.SUCCESS
88
+ });
89
+ }).catch((error) => {
90
+ console.error("[CompositeExporter] Export error:", error);
91
+ resultCallback({ code: import_core.ExportResultCode.FAILED });
92
+ });
93
+ }
94
+ shutdown() {
95
+ return Promise.all(this.exporters.map((e) => e.shutdown?.() ?? Promise.resolve())).then(
96
+ () => void 0
97
+ );
98
+ }
99
+ forceFlush() {
100
+ return Promise.all(this.exporters.map((e) => e.forceFlush?.() ?? Promise.resolve())).then(
101
+ () => void 0
102
+ );
103
+ }
104
+ }
105
+ // Annotate the CommonJS export names for ESM import in node:
106
+ 0 && (module.exports = {
107
+ CompositeExporter
108
+ });
@@ -0,0 +1,29 @@
1
+ import type { ExportResult } from '@opentelemetry/core';
2
+ import type { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base';
3
+ /**
4
+ * CompositeExporter wraps multiple span exporters and provides two key features:
5
+ *
6
+ * 1. **Multi-exporter support**: Exports spans to multiple destinations in parallel
7
+ * (e.g., console for development + OTLP for production monitoring)
8
+ *
9
+ * 2. **Recursive telemetry filtering**: Prevents telemetry infinity loops by filtering
10
+ * out spans from `/api/telemetry` endpoints. Without this, telemetry API calls would
11
+ * generate spans, which would be exported via HTTP to `/api/telemetry`, generating
12
+ * more spans, creating an infinite loop.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const exporter = new CompositeExporter([
17
+ * new ConsoleSpanExporter(),
18
+ * new OTLPHttpExporter({ url: 'http://localhost:4318/v1/traces' })
19
+ * ]);
20
+ * ```
21
+ */
22
+ export declare class CompositeExporter implements SpanExporter {
23
+ private exporters;
24
+ constructor(exporters: SpanExporter[]);
25
+ export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void;
26
+ shutdown(): Promise<void>;
27
+ forceFlush(): Promise<void>;
28
+ }
29
+ //# sourceMappingURL=exporters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exporters.d.ts","sourceRoot":"","sources":["../../src/telemetry/exporters.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AA0BhF;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IAClD,OAAO,CAAC,SAAS,CAAiB;gBAEtB,SAAS,EAAE,YAAY,EAAE;IAIrC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAiEnF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAMzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAK9B"}
@@ -0,0 +1,85 @@
1
+ import "../chunk-C6A6W6XS.js";
2
+ import { ExportResultCode } from "@opentelemetry/core";
3
+ function normalizeUrlPath(url) {
4
+ try {
5
+ const parsedUrl = new URL(url);
6
+ let pathname = parsedUrl.pathname.toLowerCase().trim();
7
+ if (pathname.endsWith("/")) {
8
+ pathname = pathname.slice(0, -1);
9
+ }
10
+ return pathname;
11
+ } catch (_e) {
12
+ let path = url.toLowerCase().trim();
13
+ if (path.endsWith("/")) {
14
+ path = path.slice(0, -1);
15
+ }
16
+ return path;
17
+ }
18
+ }
19
+ class CompositeExporter {
20
+ exporters;
21
+ constructor(exporters) {
22
+ this.exporters = exporters;
23
+ }
24
+ export(spans, resultCallback) {
25
+ const telemetryTraceIds = new Set(
26
+ spans.filter((span) => {
27
+ const attrs = span.attributes || {};
28
+ const relevantHttpAttributes = [
29
+ attrs["http.target"],
30
+ attrs["http.route"],
31
+ attrs["http.url"],
32
+ attrs["url.path"],
33
+ attrs["http.request_path"]
34
+ ];
35
+ const isTelemetrySpan = relevantHttpAttributes.some((attr) => {
36
+ if (typeof attr === "string") {
37
+ const normalizedPath = normalizeUrlPath(attr);
38
+ return normalizedPath === "/api/telemetry" || normalizedPath.startsWith("/api/telemetry/");
39
+ }
40
+ return false;
41
+ });
42
+ return isTelemetrySpan;
43
+ }).map((span) => span.spanContext().traceId)
44
+ );
45
+ const filteredSpans = spans.filter(
46
+ (span) => !telemetryTraceIds.has(span.spanContext().traceId)
47
+ );
48
+ if (filteredSpans.length === 0) {
49
+ resultCallback({ code: ExportResultCode.SUCCESS });
50
+ return;
51
+ }
52
+ void Promise.all(
53
+ this.exporters.map(
54
+ (exporter) => new Promise((resolve) => {
55
+ if (exporter.export) {
56
+ exporter.export(filteredSpans, resolve);
57
+ } else {
58
+ resolve({ code: ExportResultCode.FAILED });
59
+ }
60
+ })
61
+ )
62
+ ).then((results) => {
63
+ const hasError = results.some((r) => r.code === ExportResultCode.FAILED);
64
+ resultCallback({
65
+ code: hasError ? ExportResultCode.FAILED : ExportResultCode.SUCCESS
66
+ });
67
+ }).catch((error) => {
68
+ console.error("[CompositeExporter] Export error:", error);
69
+ resultCallback({ code: ExportResultCode.FAILED });
70
+ });
71
+ }
72
+ shutdown() {
73
+ return Promise.all(this.exporters.map((e) => e.shutdown?.() ?? Promise.resolve())).then(
74
+ () => void 0
75
+ );
76
+ }
77
+ forceFlush() {
78
+ return Promise.all(this.exporters.map((e) => e.forceFlush?.() ?? Promise.resolve())).then(
79
+ () => void 0
80
+ );
81
+ }
82
+ }
83
+ export {
84
+ CompositeExporter
85
+ };
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var telemetry_exports = {};
20
+ __export(telemetry_exports, {
21
+ Telemetry: () => import_telemetry.Telemetry
22
+ });
23
+ module.exports = __toCommonJS(telemetry_exports);
24
+ var import_telemetry = require("./telemetry.js");
25
+ // Annotate the CommonJS export names for ESM import in node:
26
+ 0 && (module.exports = {
27
+ Telemetry
28
+ });
@@ -0,0 +1,2 @@
1
+ export { Telemetry } from './telemetry.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import "../chunk-C6A6W6XS.js";
2
+ import { Telemetry } from "./telemetry.js";
3
+ export {
4
+ Telemetry
5
+ };
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var schemas_exports = {};
20
+ __export(schemas_exports, {
21
+ OtelConfigurationSchema: () => OtelConfigurationSchema
22
+ });
23
+ module.exports = __toCommonJS(schemas_exports);
24
+ var import_zod = require("zod");
25
+ const OtelConfigurationSchema = import_zod.z.object({
26
+ serviceName: import_zod.z.string().optional(),
27
+ enabled: import_zod.z.boolean().optional(),
28
+ tracerName: import_zod.z.string().optional(),
29
+ // TODO (Telemetry): Implement sampling support in Phase 5
30
+ // Currently sampling schema is defined but not implemented in telemetry.ts
31
+ // See feature-plans/telemetry.md Phase 5 for implementation details
32
+ // sampling: z
33
+ // .discriminatedUnion('type', [
34
+ // z.object({
35
+ // type: z.literal('ratio'),
36
+ // probability: z.number().min(0).max(1),
37
+ // }),
38
+ // z.object({
39
+ // type: z.literal('always_on'),
40
+ // }),
41
+ // z.object({
42
+ // type: z.literal('always_off'),
43
+ // }),
44
+ // z.object({
45
+ // type: z.literal('parent_based'),
46
+ // root: z.object({
47
+ // probability: z.number().min(0).max(1),
48
+ // }),
49
+ // }),
50
+ // ])
51
+ // .optional(),
52
+ export: import_zod.z.union([
53
+ import_zod.z.object({
54
+ type: import_zod.z.literal("otlp"),
55
+ protocol: import_zod.z.enum(["grpc", "http"]).optional(),
56
+ endpoint: import_zod.z.union([
57
+ import_zod.z.string().url(),
58
+ import_zod.z.string().regex(/^[\w.-]+:\d+$/)
59
+ // host:port
60
+ ]).optional(),
61
+ headers: import_zod.z.record(import_zod.z.string()).optional()
62
+ }),
63
+ import_zod.z.object({
64
+ type: import_zod.z.literal("console")
65
+ })
66
+ ]).optional()
67
+ });
68
+ // Annotate the CommonJS export names for ESM import in node:
69
+ 0 && (module.exports = {
70
+ OtelConfigurationSchema
71
+ });
@@ -0,0 +1,54 @@
1
+ import { z } from 'zod';
2
+ export declare const OtelConfigurationSchema: z.ZodObject<{
3
+ serviceName: z.ZodOptional<z.ZodString>;
4
+ enabled: z.ZodOptional<z.ZodBoolean>;
5
+ tracerName: z.ZodOptional<z.ZodString>;
6
+ export: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
7
+ type: z.ZodLiteral<"otlp">;
8
+ protocol: z.ZodOptional<z.ZodEnum<["grpc", "http"]>>;
9
+ endpoint: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodString]>>;
10
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ type: "otlp";
13
+ headers?: Record<string, string> | undefined;
14
+ protocol?: "http" | "grpc" | undefined;
15
+ endpoint?: string | undefined;
16
+ }, {
17
+ type: "otlp";
18
+ headers?: Record<string, string> | undefined;
19
+ protocol?: "http" | "grpc" | undefined;
20
+ endpoint?: string | undefined;
21
+ }>, z.ZodObject<{
22
+ type: z.ZodLiteral<"console">;
23
+ }, "strip", z.ZodTypeAny, {
24
+ type: "console";
25
+ }, {
26
+ type: "console";
27
+ }>]>>;
28
+ }, "strip", z.ZodTypeAny, {
29
+ enabled?: boolean | undefined;
30
+ serviceName?: string | undefined;
31
+ tracerName?: string | undefined;
32
+ export?: {
33
+ type: "otlp";
34
+ headers?: Record<string, string> | undefined;
35
+ protocol?: "http" | "grpc" | undefined;
36
+ endpoint?: string | undefined;
37
+ } | {
38
+ type: "console";
39
+ } | undefined;
40
+ }, {
41
+ enabled?: boolean | undefined;
42
+ serviceName?: string | undefined;
43
+ tracerName?: string | undefined;
44
+ export?: {
45
+ type: "otlp";
46
+ headers?: Record<string, string> | undefined;
47
+ protocol?: "http" | "grpc" | undefined;
48
+ endpoint?: string | undefined;
49
+ } | {
50
+ type: "console";
51
+ } | undefined;
52
+ }>;
53
+ export type OtelConfiguration = z.output<typeof OtelConfigurationSchema>;
54
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/telemetry/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6ClC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -0,0 +1,48 @@
1
+ import "../chunk-C6A6W6XS.js";
2
+ import { z } from "zod";
3
+ const OtelConfigurationSchema = z.object({
4
+ serviceName: z.string().optional(),
5
+ enabled: z.boolean().optional(),
6
+ tracerName: z.string().optional(),
7
+ // TODO (Telemetry): Implement sampling support in Phase 5
8
+ // Currently sampling schema is defined but not implemented in telemetry.ts
9
+ // See feature-plans/telemetry.md Phase 5 for implementation details
10
+ // sampling: z
11
+ // .discriminatedUnion('type', [
12
+ // z.object({
13
+ // type: z.literal('ratio'),
14
+ // probability: z.number().min(0).max(1),
15
+ // }),
16
+ // z.object({
17
+ // type: z.literal('always_on'),
18
+ // }),
19
+ // z.object({
20
+ // type: z.literal('always_off'),
21
+ // }),
22
+ // z.object({
23
+ // type: z.literal('parent_based'),
24
+ // root: z.object({
25
+ // probability: z.number().min(0).max(1),
26
+ // }),
27
+ // }),
28
+ // ])
29
+ // .optional(),
30
+ export: z.union([
31
+ z.object({
32
+ type: z.literal("otlp"),
33
+ protocol: z.enum(["grpc", "http"]).optional(),
34
+ endpoint: z.union([
35
+ z.string().url(),
36
+ z.string().regex(/^[\w.-]+:\d+$/)
37
+ // host:port
38
+ ]).optional(),
39
+ headers: z.record(z.string()).optional()
40
+ }),
41
+ z.object({
42
+ type: z.literal("console")
43
+ })
44
+ ]).optional()
45
+ });
46
+ export {
47
+ OtelConfigurationSchema
48
+ };
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var telemetry_exports = {};
20
+ __export(telemetry_exports, {
21
+ Telemetry: () => Telemetry
22
+ });
23
+ module.exports = __toCommonJS(telemetry_exports);
24
+ var import_api = require("@opentelemetry/api");
25
+ var import_sdk_node = require("@opentelemetry/sdk-node");
26
+ var import_sdk_trace_base = require("@opentelemetry/sdk-trace-base");
27
+ var import_exporter_trace_otlp_http = require("@opentelemetry/exporter-trace-otlp-http");
28
+ var import_exporter_trace_otlp_grpc = require("@opentelemetry/exporter-trace-otlp-grpc");
29
+ var import_auto_instrumentations_node = require("@opentelemetry/auto-instrumentations-node");
30
+ var import_resources = require("@opentelemetry/resources");
31
+ var import_semantic_conventions = require("@opentelemetry/semantic-conventions");
32
+ var import_exporters = require("./exporters.js");
33
+ var import_logger = require("../logger/logger.js");
34
+ class Telemetry {
35
+ tracer = import_api.trace.getTracer("dexto");
36
+ name = "dexto-service";
37
+ _isInitialized = false;
38
+ _sdk;
39
+ static _initPromise;
40
+ static _signalHandlers;
41
+ constructor(config, enabled, sdk) {
42
+ const serviceName = config.serviceName ?? "dexto-service";
43
+ const tracerName = config.tracerName ?? serviceName;
44
+ this.name = serviceName;
45
+ this.tracer = import_api.trace.getTracer(tracerName);
46
+ if (sdk) {
47
+ this._sdk = sdk;
48
+ }
49
+ this._isInitialized = enabled && !!sdk;
50
+ }
51
+ static buildTraceExporter(config) {
52
+ const e = config?.export;
53
+ if (!e || e.type === "console") {
54
+ return new import_sdk_trace_base.ConsoleSpanExporter();
55
+ }
56
+ if (e.type === "otlp") {
57
+ if (e.protocol === "grpc") {
58
+ const options2 = {};
59
+ if (e.endpoint) {
60
+ options2.url = e.endpoint;
61
+ }
62
+ return new import_exporter_trace_otlp_grpc.OTLPTraceExporter(options2);
63
+ }
64
+ const options = {};
65
+ if (e.endpoint) {
66
+ options.url = e.endpoint;
67
+ }
68
+ if (e.headers) {
69
+ options.headers = e.headers;
70
+ }
71
+ return new import_exporter_trace_otlp_http.OTLPTraceExporter(options);
72
+ }
73
+ return new import_sdk_trace_base.ConsoleSpanExporter();
74
+ }
75
+ /**
76
+ * Initialize telemetry with the given configuration
77
+ * @param config - Optional telemetry configuration object
78
+ * @param exporter - Optional custom span exporter (overrides config.export, useful for testing)
79
+ * @returns Telemetry instance that can be used for tracing
80
+ */
81
+ static async init(config = {}, exporter) {
82
+ try {
83
+ if (globalThis.__TELEMETRY__) return globalThis.__TELEMETRY__;
84
+ if (Telemetry._initPromise) return Telemetry._initPromise;
85
+ Telemetry._initPromise = (async () => {
86
+ if (!globalThis.__TELEMETRY__) {
87
+ const enabled = config.enabled !== false;
88
+ let sdk;
89
+ if (enabled) {
90
+ const resource = new import_resources.Resource({
91
+ [import_semantic_conventions.ATTR_SERVICE_NAME]: config.serviceName ?? "dexto-service"
92
+ });
93
+ const spanExporter = exporter || Telemetry.buildTraceExporter(config);
94
+ const traceExporter = spanExporter instanceof import_exporters.CompositeExporter ? spanExporter : new import_exporters.CompositeExporter([spanExporter]);
95
+ sdk = new import_sdk_node.NodeSDK({
96
+ resource,
97
+ traceExporter,
98
+ instrumentations: [(0, import_auto_instrumentations_node.getNodeAutoInstrumentations)()]
99
+ });
100
+ await sdk.start();
101
+ const sigterm = () => {
102
+ void sdk?.shutdown();
103
+ };
104
+ const sigint = () => {
105
+ void sdk?.shutdown();
106
+ };
107
+ process.once("SIGTERM", sigterm);
108
+ process.once("SIGINT", sigint);
109
+ Telemetry._signalHandlers = { sigterm, sigint };
110
+ }
111
+ globalThis.__TELEMETRY__ = new Telemetry(config, enabled, sdk);
112
+ }
113
+ return globalThis.__TELEMETRY__;
114
+ })();
115
+ return Telemetry._initPromise;
116
+ } catch (error) {
117
+ const wrappedError = new Error(
118
+ `Failed to initialize telemetry: ${error instanceof Error ? error.message : String(error)}`
119
+ );
120
+ Telemetry._initPromise = void 0;
121
+ throw wrappedError;
122
+ }
123
+ }
124
+ static getActiveSpan() {
125
+ const span = import_api.trace.getActiveSpan();
126
+ return span;
127
+ }
128
+ /**
129
+ * Get the global telemetry instance
130
+ * @throws {Error} If telemetry has not been initialized
131
+ * @returns {Telemetry} The global telemetry instance
132
+ */
133
+ static get() {
134
+ if (!globalThis.__TELEMETRY__) {
135
+ throw new Error("Telemetry not initialized");
136
+ }
137
+ return globalThis.__TELEMETRY__;
138
+ }
139
+ /**
140
+ * Check if global telemetry instance exists
141
+ * @returns True if telemetry has been initialized, false otherwise
142
+ */
143
+ static hasGlobalInstance() {
144
+ return globalThis.__TELEMETRY__ !== void 0;
145
+ }
146
+ /**
147
+ * Shutdown global telemetry instance
148
+ * Used during agent switching to cleanly shutdown old agent's telemetry
149
+ * before initializing new agent's telemetry with potentially different config
150
+ * @returns Promise that resolves when shutdown is complete
151
+ */
152
+ static async shutdownGlobal() {
153
+ if (globalThis.__TELEMETRY__) {
154
+ await globalThis.__TELEMETRY__.shutdown();
155
+ globalThis.__TELEMETRY__ = void 0;
156
+ }
157
+ Telemetry._initPromise = void 0;
158
+ }
159
+ /**
160
+ * Checks if the Telemetry instance has been successfully initialized.
161
+ * @returns True if the instance is initialized, false otherwise.
162
+ */
163
+ isInitialized() {
164
+ return this._isInitialized;
165
+ }
166
+ static setBaggage(baggage, ctx = import_api.context.active()) {
167
+ const currentBaggage = Object.fromEntries(
168
+ import_api.propagation.getBaggage(ctx)?.getAllEntries() ?? []
169
+ );
170
+ const newCtx = import_api.propagation.setBaggage(
171
+ ctx,
172
+ import_api.propagation.createBaggage({
173
+ ...currentBaggage,
174
+ ...baggage
175
+ })
176
+ );
177
+ return newCtx;
178
+ }
179
+ static withContext(ctx, fn) {
180
+ return import_api.context.with(ctx, fn);
181
+ }
182
+ /**
183
+ * Forces pending spans to be exported immediately.
184
+ * Useful for testing to ensure spans are available in exporters.
185
+ */
186
+ async forceFlush() {
187
+ if (this._isInitialized) {
188
+ const provider = import_api.trace.getTracerProvider();
189
+ if (provider && typeof provider.forceFlush === "function") {
190
+ await provider.forceFlush();
191
+ }
192
+ }
193
+ }
194
+ /**
195
+ * Shuts down the OpenTelemetry SDK, flushing any pending spans.
196
+ * This should be called before the application exits.
197
+ *
198
+ * Uses two-phase shutdown:
199
+ * 1. Best-effort flush - Try to export pending spans (can fail if backend unavailable)
200
+ * 2. Force cleanup - Always clear global state to allow re-initialization
201
+ *
202
+ * This ensures agent switching works even when telemetry export fails.
203
+ */
204
+ async shutdown() {
205
+ if (this._sdk) {
206
+ try {
207
+ await this._sdk.shutdown();
208
+ } catch (error) {
209
+ const errorMsg = error instanceof Error ? error.message : String(error);
210
+ import_logger.logger.warn(`Telemetry shutdown failed to flush spans (non-blocking): ${errorMsg}`);
211
+ } finally {
212
+ this._isInitialized = false;
213
+ globalThis.__TELEMETRY__ = void 0;
214
+ if (Telemetry._signalHandlers) {
215
+ process.off("SIGTERM", Telemetry._signalHandlers.sigterm);
216
+ process.off("SIGINT", Telemetry._signalHandlers.sigint);
217
+ Telemetry._signalHandlers = void 0;
218
+ }
219
+ this._sdk = void 0;
220
+ Telemetry._initPromise = void 0;
221
+ }
222
+ }
223
+ }
224
+ }
225
+ // Annotate the CommonJS export names for ESM import in node:
226
+ 0 && (module.exports = {
227
+ Telemetry
228
+ });