@spotlightjs/spotlight 4.7.2 → 4.9.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 (618) hide show
  1. package/dist/_virtual/_commonjsHelpers.js +1 -3
  2. package/dist/_virtual/_commonjsHelpers.js.map +1 -1
  3. package/dist/_virtual/_sentry-release-injection-file.js +2 -2
  4. package/dist/_virtual/additionalItems.js +13 -0
  5. package/dist/_virtual/additionalItems.js.map +1 -0
  6. package/dist/_virtual/additionalProperties.js +13 -0
  7. package/dist/_virtual/additionalProperties.js.map +1 -0
  8. package/dist/_virtual/{cache.js → ajv.js} +4 -4
  9. package/dist/_virtual/ajv.js.map +1 -0
  10. package/dist/_virtual/{uri.all.js → allOf.js} +4 -4
  11. package/dist/_virtual/allOf.js.map +1 -0
  12. package/dist/_virtual/anyOf.js +13 -0
  13. package/dist/_virtual/anyOf.js.map +1 -0
  14. package/dist/_virtual/applicability.js +13 -0
  15. package/dist/_virtual/applicability.js.map +1 -0
  16. package/dist/_virtual/boolSchema.js +13 -0
  17. package/dist/_virtual/boolSchema.js.map +1 -0
  18. package/dist/_virtual/code.js +13 -0
  19. package/dist/_virtual/code.js.map +1 -0
  20. package/dist/_virtual/code2.js +13 -0
  21. package/dist/_virtual/code2.js.map +1 -0
  22. package/dist/_virtual/const.js +13 -0
  23. package/dist/_virtual/const.js.map +1 -0
  24. package/dist/_virtual/contains.js +13 -0
  25. package/dist/_virtual/contains.js.map +1 -0
  26. package/dist/_virtual/core.js +13 -0
  27. package/dist/_virtual/core.js.map +1 -0
  28. package/dist/_virtual/dataType.js +13 -0
  29. package/dist/_virtual/dataType.js.map +1 -0
  30. package/dist/_virtual/defaults.js +13 -0
  31. package/dist/_virtual/defaults.js.map +1 -0
  32. package/dist/_virtual/dependencies.js +13 -0
  33. package/dist/_virtual/dependencies.js.map +1 -0
  34. package/dist/_virtual/draft7.js +13 -0
  35. package/dist/_virtual/draft7.js.map +1 -0
  36. package/dist/_virtual/enum.js +13 -0
  37. package/dist/_virtual/enum.js.map +1 -0
  38. package/dist/_virtual/equal.js +13 -0
  39. package/dist/_virtual/equal.js.map +1 -0
  40. package/dist/_virtual/errors.js +13 -0
  41. package/dist/_virtual/errors.js.map +1 -0
  42. package/dist/_virtual/format.js +13 -0
  43. package/dist/_virtual/format.js.map +1 -0
  44. package/dist/_virtual/formats.js +13 -0
  45. package/dist/_virtual/formats.js.map +1 -0
  46. package/dist/_virtual/id.js +13 -0
  47. package/dist/_virtual/id.js.map +1 -0
  48. package/dist/_virtual/if.js +13 -0
  49. package/dist/_virtual/if.js.map +1 -0
  50. package/dist/_virtual/index.js +3 -3
  51. package/dist/_virtual/index10.js +13 -0
  52. package/dist/_virtual/index10.js.map +1 -0
  53. package/dist/_virtual/index11.js +13 -0
  54. package/dist/_virtual/index11.js.map +1 -0
  55. package/dist/_virtual/index2.js +13 -0
  56. package/dist/_virtual/index2.js.map +1 -0
  57. package/dist/_virtual/index3.js +13 -0
  58. package/dist/_virtual/index3.js.map +1 -0
  59. package/dist/_virtual/index4.js +13 -0
  60. package/dist/_virtual/index4.js.map +1 -0
  61. package/dist/_virtual/index5.js +13 -0
  62. package/dist/_virtual/index5.js.map +1 -0
  63. package/dist/_virtual/index6.js +13 -0
  64. package/dist/_virtual/index6.js.map +1 -0
  65. package/dist/_virtual/index7.js +13 -0
  66. package/dist/_virtual/index7.js.map +1 -0
  67. package/dist/_virtual/index8.js +13 -0
  68. package/dist/_virtual/index8.js.map +1 -0
  69. package/dist/_virtual/index9.js +13 -0
  70. package/dist/_virtual/index9.js.map +1 -0
  71. package/dist/_virtual/items.js +13 -0
  72. package/dist/_virtual/items.js.map +1 -0
  73. package/dist/_virtual/items2020.js +13 -0
  74. package/dist/_virtual/items2020.js.map +1 -0
  75. package/dist/_virtual/keyword.js +13 -0
  76. package/dist/_virtual/keyword.js.map +1 -0
  77. package/dist/_virtual/limit.js +13 -0
  78. package/dist/_virtual/limit.js.map +1 -0
  79. package/dist/_virtual/limitItems.js +13 -0
  80. package/dist/_virtual/limitItems.js.map +1 -0
  81. package/dist/_virtual/limitLength.js +13 -0
  82. package/dist/_virtual/limitLength.js.map +1 -0
  83. package/dist/_virtual/limitNumber.js +13 -0
  84. package/dist/_virtual/limitNumber.js.map +1 -0
  85. package/dist/_virtual/limitProperties.js +13 -0
  86. package/dist/_virtual/limitProperties.js.map +1 -0
  87. package/dist/_virtual/metadata.js +13 -0
  88. package/dist/_virtual/metadata.js.map +1 -0
  89. package/dist/_virtual/multipleOf.js +13 -0
  90. package/dist/_virtual/multipleOf.js.map +1 -0
  91. package/dist/_virtual/names.js +13 -0
  92. package/dist/_virtual/names.js.map +1 -0
  93. package/dist/_virtual/not.js +13 -0
  94. package/dist/_virtual/not.js.map +1 -0
  95. package/dist/_virtual/oneOf.js +13 -0
  96. package/dist/_virtual/oneOf.js.map +1 -0
  97. package/dist/_virtual/pattern.js +13 -0
  98. package/dist/_virtual/pattern.js.map +1 -0
  99. package/dist/_virtual/patternProperties.js +13 -0
  100. package/dist/_virtual/patternProperties.js.map +1 -0
  101. package/dist/_virtual/prefixItems.js +13 -0
  102. package/dist/_virtual/prefixItems.js.map +1 -0
  103. package/dist/_virtual/properties.js +13 -0
  104. package/dist/_virtual/properties.js.map +1 -0
  105. package/dist/_virtual/propertyNames.js +13 -0
  106. package/dist/_virtual/propertyNames.js.map +1 -0
  107. package/dist/_virtual/ref.js +13 -0
  108. package/dist/_virtual/ref.js.map +1 -0
  109. package/dist/_virtual/ref_error.js +13 -0
  110. package/dist/_virtual/ref_error.js.map +1 -0
  111. package/dist/_virtual/required.js +13 -0
  112. package/dist/_virtual/required.js.map +1 -0
  113. package/dist/_virtual/resolve.js +13 -0
  114. package/dist/_virtual/resolve.js.map +1 -0
  115. package/dist/_virtual/rules.js +13 -0
  116. package/dist/_virtual/rules.js.map +1 -0
  117. package/dist/_virtual/scope.js +13 -0
  118. package/dist/_virtual/scope.js.map +1 -0
  119. package/dist/_virtual/subschema.js +13 -0
  120. package/dist/_virtual/subschema.js.map +1 -0
  121. package/dist/_virtual/thenElse.js +13 -0
  122. package/dist/_virtual/thenElse.js.map +1 -0
  123. package/dist/_virtual/types.js +13 -0
  124. package/dist/_virtual/types.js.map +1 -0
  125. package/dist/_virtual/ucs2length.js +13 -0
  126. package/dist/_virtual/ucs2length.js.map +1 -0
  127. package/dist/_virtual/uniqueItems.js +13 -0
  128. package/dist/_virtual/uniqueItems.js.map +1 -0
  129. package/dist/_virtual/uri.js +13 -0
  130. package/dist/_virtual/uri.js.map +1 -0
  131. package/dist/_virtual/util.js +13 -0
  132. package/dist/_virtual/util.js.map +1 -0
  133. package/dist/_virtual/validation_error.js +13 -0
  134. package/dist/_virtual/validation_error.js.map +1 -0
  135. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js +454 -0
  136. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js.map +1 -0
  137. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/client.js +166 -0
  138. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/client.js.map +1 -0
  139. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js +44 -0
  140. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js.map +1 -0
  141. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js +15 -0
  142. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js.map +1 -0
  143. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/mcp-server.js +25 -0
  144. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/mcp-server.js.map +1 -0
  145. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js +82 -0
  146. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js.map +1 -0
  147. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js +27 -0
  148. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js.map +1 -0
  149. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js +400 -0
  150. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js.map +1 -0
  151. package/dist/node_modules/.pnpm/{@modelcontextprotocol_sdk@1.16.0 → @modelcontextprotocol_sdk@1.24.3_zod@4.1.13}/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js +284 -97
  152. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js.map +1 -0
  153. package/dist/node_modules/.pnpm/{@modelcontextprotocol_sdk@1.16.0 → @modelcontextprotocol_sdk@1.24.3_zod@4.1.13}/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js +1 -1
  154. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js.map +1 -0
  155. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js +176 -0
  156. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js.map +1 -0
  157. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js +59 -0
  158. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js.map +1 -0
  159. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js +968 -0
  160. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js.map +1 -0
  161. package/dist/node_modules/.pnpm/{@modelcontextprotocol_sdk@1.16.0 → @modelcontextprotocol_sdk@1.24.3_zod@4.1.13}/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js +1 -1
  162. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js.map +1 -0
  163. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/toolNameValidation.js +70 -0
  164. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/toolNameValidation.js.map +1 -0
  165. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js +1623 -0
  166. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js.map +1 -0
  167. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js +79 -0
  168. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.24.3_zod@4.1.13/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js.map +1 -0
  169. package/dist/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.17.1/node_modules/ajv-formats/dist/formats.js +209 -0
  170. package/dist/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.17.1/node_modules/ajv-formats/dist/formats.js.map +1 -0
  171. package/dist/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.17.1/node_modules/ajv-formats/dist/index.js +59 -0
  172. package/dist/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.17.1/node_modules/ajv-formats/dist/index.js.map +1 -0
  173. package/dist/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.17.1/node_modules/ajv-formats/dist/limit.js +81 -0
  174. package/dist/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.17.1/node_modules/ajv-formats/dist/limit.js.map +1 -0
  175. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/ajv.js +95 -0
  176. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/ajv.js.map +1 -0
  177. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/codegen/code.js +160 -0
  178. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/codegen/code.js.map +1 -0
  179. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/codegen/index.js +730 -0
  180. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/codegen/index.js.map +1 -0
  181. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/codegen/scope.js +153 -0
  182. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/codegen/scope.js.map +1 -0
  183. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/errors.js +134 -0
  184. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/errors.js.map +1 -0
  185. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/index.js +243 -0
  186. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/index.js.map +1 -0
  187. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/names.js +45 -0
  188. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/names.js.map +1 -0
  189. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/ref_error.js +23 -0
  190. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/ref_error.js.map +1 -0
  191. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/resolve.js +167 -0
  192. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/resolve.js.map +1 -0
  193. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/rules.js +38 -0
  194. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/rules.js.map +1 -0
  195. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/util.js +178 -0
  196. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/util.js.map +1 -0
  197. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/applicability.js +30 -0
  198. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/applicability.js.map +1 -0
  199. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/boolSchema.js +64 -0
  200. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/boolSchema.js.map +1 -0
  201. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/dataType.js +201 -0
  202. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/dataType.js.map +1 -0
  203. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/defaults.js +48 -0
  204. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/defaults.js.map +1 -0
  205. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/index.js +536 -0
  206. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/index.js.map +1 -0
  207. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/keyword.js +133 -0
  208. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/keyword.js.map +1 -0
  209. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/subschema.js +94 -0
  210. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/subschema.js.map +1 -0
  211. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/core.js +638 -0
  212. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/core.js.map +1 -0
  213. package/dist/node_modules/.pnpm/{ajv@6.12.6/node_modules/ajv/lib → ajv@8.17.1/node_modules/ajv/dist}/refs/data.json.js +4 -7
  214. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/refs/data.json.js.map +1 -0
  215. package/dist/node_modules/.pnpm/{ajv@6.12.6/node_modules/ajv/lib → ajv@8.17.1/node_modules/ajv/dist}/refs/json-schema-draft-07.json.js +3 -3
  216. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/runtime/equal.js +16 -0
  217. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/runtime/equal.js.map +1 -0
  218. package/dist/node_modules/.pnpm/{ajv@6.12.6/node_modules/ajv/lib/compile → ajv@8.17.1/node_modules/ajv/dist/runtime}/ucs2length.js +13 -8
  219. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/runtime/ucs2length.js.map +1 -0
  220. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/runtime/uri.js +16 -0
  221. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/runtime/uri.js.map +1 -0
  222. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/runtime/validation_error.js +20 -0
  223. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/runtime/validation_error.js.map +1 -0
  224. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +61 -0
  225. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js.map +1 -0
  226. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +118 -0
  227. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js.map +1 -0
  228. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/allOf.js +33 -0
  229. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/allOf.js.map +1 -0
  230. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/anyOf.js +23 -0
  231. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/anyOf.js.map +1 -0
  232. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/contains.js +102 -0
  233. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/contains.js.map +1 -0
  234. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/dependencies.js +106 -0
  235. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/dependencies.js.map +1 -0
  236. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/if.js +77 -0
  237. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/if.js.map +1 -0
  238. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/index.js +84 -0
  239. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/index.js.map +1 -0
  240. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/items.js +67 -0
  241. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/items.js.map +1 -0
  242. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/items2020.js +47 -0
  243. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/items2020.js.map +1 -0
  244. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/not.js +37 -0
  245. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/not.js.map +1 -0
  246. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/oneOf.js +66 -0
  247. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/oneOf.js.map +1 -0
  248. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +84 -0
  249. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js.map +1 -0
  250. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +23 -0
  251. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js.map +1 -0
  252. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/properties.js +70 -0
  253. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/properties.js.map +1 -0
  254. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +51 -0
  255. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js.map +1 -0
  256. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/thenElse.js +24 -0
  257. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/thenElse.js.map +1 -0
  258. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/code.js +146 -0
  259. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/code.js.map +1 -0
  260. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/core/id.js +19 -0
  261. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/core/id.js.map +1 -0
  262. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/core/index.js +29 -0
  263. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/core/index.js.map +1 -0
  264. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/core/ref.js +138 -0
  265. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/core/ref.js.map +1 -0
  266. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/discriminator/index.js +119 -0
  267. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/discriminator/index.js.map +1 -0
  268. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/discriminator/types.js +21 -0
  269. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/discriminator/types.js.map +1 -0
  270. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/draft7.js +36 -0
  271. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/draft7.js.map +1 -0
  272. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/format/format.js +96 -0
  273. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/format/format.js.map +1 -0
  274. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/format/index.js +17 -0
  275. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/format/index.js.map +1 -0
  276. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/metadata.js +30 -0
  277. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/metadata.js.map +1 -0
  278. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/const.js +39 -0
  279. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/const.js.map +1 -0
  280. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/enum.js +59 -0
  281. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/enum.js.map +1 -0
  282. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/index.js +62 -0
  283. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/index.js.map +1 -0
  284. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitItems.js +35 -0
  285. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitItems.js.map +1 -0
  286. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitLength.js +42 -0
  287. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitLength.js.map +1 -0
  288. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitNumber.js +38 -0
  289. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitNumber.js.map +1 -0
  290. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitProperties.js +35 -0
  291. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitProperties.js.map +1 -0
  292. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/multipleOf.js +34 -0
  293. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/multipleOf.js.map +1 -0
  294. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/pattern.js +36 -0
  295. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/pattern.js.map +1 -0
  296. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/required.js +92 -0
  297. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/required.js.map +1 -0
  298. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +79 -0
  299. package/dist/node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js.map +1 -0
  300. package/dist/node_modules/.pnpm/fast-uri@3.0.2/node_modules/fast-uri/index.js +267 -0
  301. package/dist/node_modules/.pnpm/fast-uri@3.0.2/node_modules/fast-uri/index.js.map +1 -0
  302. package/dist/node_modules/.pnpm/fast-uri@3.0.2/node_modules/fast-uri/lib/schemes.js +152 -0
  303. package/dist/node_modules/.pnpm/fast-uri@3.0.2/node_modules/fast-uri/lib/schemes.js.map +1 -0
  304. package/dist/node_modules/.pnpm/fast-uri@3.0.2/node_modules/fast-uri/lib/scopedChars.js +40 -0
  305. package/dist/node_modules/.pnpm/fast-uri@3.0.2/node_modules/fast-uri/lib/scopedChars.js.map +1 -0
  306. package/dist/node_modules/.pnpm/fast-uri@3.0.2/node_modules/fast-uri/lib/utils.js +236 -0
  307. package/dist/node_modules/.pnpm/fast-uri@3.0.2/node_modules/fast-uri/lib/utils.js.map +1 -0
  308. package/dist/node_modules/.pnpm/{json-schema-traverse@0.4.1 → json-schema-traverse@1.0.0}/node_modules/json-schema-traverse/index.js +7 -3
  309. package/dist/node_modules/.pnpm/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js.map +1 -0
  310. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/Options.js.map +1 -0
  311. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/Refs.js.map +1 -0
  312. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/errorMessages.js.map +1 -0
  313. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js.map +1 -0
  314. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parseDef.js.map +1 -0
  315. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/any.js.map +1 -0
  316. package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/array.js +2 -2
  317. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/array.js.map +1 -0
  318. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js.map +1 -0
  319. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js.map +1 -0
  320. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js.map +1 -0
  321. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js.map +1 -0
  322. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/date.js.map +1 -0
  323. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/default.js.map +1 -0
  324. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js.map +1 -0
  325. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js.map +1 -0
  326. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js.map +1 -0
  327. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js.map +1 -0
  328. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/map.js.map +1 -0
  329. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js.map +1 -0
  330. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/never.js.map +1 -0
  331. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/null.js.map +1 -0
  332. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js.map +1 -0
  333. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/number.js.map +1 -0
  334. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/object.js.map +1 -0
  335. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js.map +1 -0
  336. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js.map +1 -0
  337. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js.map +1 -0
  338. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js.map +1 -0
  339. package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/record.js +2 -2
  340. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/record.js.map +1 -0
  341. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/set.js.map +1 -0
  342. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/string.js.map +1 -0
  343. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js.map +1 -0
  344. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js.map +1 -0
  345. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/union.js.map +1 -0
  346. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js.map +1 -0
  347. package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/selectParser.js +2 -2
  348. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/selectParser.js.map +1 -0
  349. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.0_zod@4.1.13/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js.map +1 -0
  350. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v3/ZodError.js +126 -0
  351. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v3/ZodError.js.map +1 -0
  352. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v3/errors.js +18 -0
  353. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v3/errors.js.map +1 -0
  354. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v3/helpers/errorUtil.js +17 -0
  355. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v3/helpers/errorUtil.js.map +1 -0
  356. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v3/helpers/parseUtil.js +130 -0
  357. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v3/helpers/parseUtil.js.map +1 -0
  358. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v3/helpers/util.js +147 -0
  359. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v3/helpers/util.js.map +1 -0
  360. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v3/locales/en.js +114 -0
  361. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v3/locales/en.js.map +1 -0
  362. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v3/types.js +3169 -0
  363. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v3/types.js.map +1 -0
  364. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/classic/errors.js +53 -0
  365. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/classic/errors.js.map +1 -0
  366. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/classic/iso.js +52 -0
  367. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/classic/iso.js.map +1 -0
  368. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/classic/parse.js +38 -0
  369. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/classic/parse.js.map +1 -0
  370. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/classic/schemas.js +686 -0
  371. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/classic/schemas.js.map +1 -0
  372. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/api.js +542 -0
  373. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/api.js.map +1 -0
  374. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/checks.js +414 -0
  375. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/checks.js.map +1 -0
  376. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/core.js +82 -0
  377. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/core.js.map +1 -0
  378. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/doc.js +46 -0
  379. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/doc.js.map +1 -0
  380. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/errors.js +81 -0
  381. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/errors.js.map +1 -0
  382. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/parse.js +108 -0
  383. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/parse.js.map +1 -0
  384. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/regexes.js +94 -0
  385. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/regexes.js.map +1 -0
  386. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/registries.js +63 -0
  387. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/registries.js.map +1 -0
  388. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/schemas.js +1391 -0
  389. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/schemas.js.map +1 -0
  390. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/to-json-schema.js +782 -0
  391. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/to-json-schema.js.map +1 -0
  392. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/util.js +419 -0
  393. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/util.js.map +1 -0
  394. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/versions.js +17 -0
  395. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/versions.js.map +1 -0
  396. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/mini/schemas.js +61 -0
  397. package/dist/node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/mini/schemas.js.map +1 -0
  398. package/dist/run.js +3 -3
  399. package/dist/run.js.map +1 -1
  400. package/dist/sentry-config.js +2 -2
  401. package/dist/server/cli/help.d.ts +2 -1
  402. package/dist/server/cli/help.js +42 -17
  403. package/dist/server/cli/help.js.map +1 -1
  404. package/dist/server/cli/mcp.d.ts +8 -2
  405. package/dist/server/cli/mcp.js +29 -5
  406. package/dist/server/cli/mcp.js.map +1 -1
  407. package/dist/server/cli/run.d.ts +8 -2
  408. package/dist/server/cli/run.js +57 -20
  409. package/dist/server/cli/run.js.map +1 -1
  410. package/dist/server/cli/server.d.ts +8 -2
  411. package/dist/server/cli/server.js +34 -4
  412. package/dist/server/cli/server.js.map +1 -1
  413. package/dist/server/cli/tail.d.ts +8 -2
  414. package/dist/server/cli/tail.js +28 -3
  415. package/dist/server/cli/tail.js.map +1 -1
  416. package/dist/server/cli.d.ts +4 -2
  417. package/dist/server/cli.js +25 -17
  418. package/dist/server/cli.js.map +1 -1
  419. package/dist/server/formatters/md/errors.d.ts +1 -1
  420. package/dist/server/formatters/md/errors.js.map +1 -1
  421. package/dist/server/formatters/md/event.d.ts +1 -1
  422. package/dist/server/formatters/md/event.js.map +1 -1
  423. package/dist/server/formatters/schema.d.ts +345 -345
  424. package/dist/server/mcp/mcp.d.ts +1 -1
  425. package/dist/server/mcp/mcp.js +14 -13
  426. package/dist/server/mcp/mcp.js.map +1 -1
  427. package/dist/server/parser/types.d.ts +47 -1
  428. package/dist/server/routes/clear.js +2 -1
  429. package/dist/server/routes/clear.js.map +1 -1
  430. package/dist/server/routes/stream/index.js +3 -2
  431. package/dist/server/routes/stream/index.js.map +1 -1
  432. package/dist/server/types/cli.d.ts +12 -0
  433. package/dist/server/utils/docker-compose.d.ts +24 -0
  434. package/dist/server/utils/docker-compose.js +142 -37
  435. package/dist/server/utils/docker-compose.js.map +1 -1
  436. package/dist/server/utils/extras.d.ts +2 -0
  437. package/dist/server/utils/extras.js +29 -2
  438. package/dist/server/utils/extras.js.map +1 -1
  439. package/dist/ui/assets/index.js +58 -58
  440. package/dist/ui/assets/index.js.map +1 -1
  441. package/dist/ui/assets/instrumentation.js +2 -2
  442. package/dist/ui/assets/main.css +1 -1
  443. package/dist/ui/assets/main.js +1 -1
  444. package/dist/ui/assets/serverTimingMeta.js +11 -11
  445. package/dist/ui/assets/serverTimingMeta.js.map +1 -1
  446. package/package.json +7 -8
  447. package/dist/_virtual/cache.js.map +0 -1
  448. package/dist/_virtual/uri.all.js.map +0 -1
  449. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js +0 -241
  450. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js.map +0 -1
  451. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js +0 -64
  452. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js.map +0 -1
  453. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js +0 -196
  454. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js.map +0 -1
  455. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js.map +0 -1
  456. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js.map +0 -1
  457. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js +0 -391
  458. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js.map +0 -1
  459. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js.map +0 -1
  460. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js +0 -1045
  461. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js.map +0 -1
  462. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/ajv.js +0 -365
  463. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/ajv.js.map +0 -1
  464. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/cache.js +0 -30
  465. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/cache.js.map +0 -1
  466. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/async.js +0 -74
  467. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/async.js.map +0 -1
  468. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/error_classes.js +0 -37
  469. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/error_classes.js.map +0 -1
  470. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/formats.js +0 -119
  471. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/formats.js.map +0 -1
  472. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/index.js +0 -288
  473. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/index.js.map +0 -1
  474. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/resolve.js +0 -228
  475. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/resolve.js.map +0 -1
  476. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/rules.js +0 -101
  477. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/rules.js.map +0 -1
  478. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/schema_obj.js +0 -19
  479. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/schema_obj.js.map +0 -1
  480. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/ucs2length.js.map +0 -1
  481. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/util.js +0 -192
  482. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/util.js.map +0 -1
  483. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/data.js +0 -57
  484. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/data.js.map +0 -1
  485. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/definition_schema.js +0 -48
  486. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/definition_schema.js.map +0 -1
  487. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limit.js +0 -160
  488. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limit.js.map +0 -1
  489. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitItems.js +0 -90
  490. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitItems.js.map +0 -1
  491. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitLength.js +0 -95
  492. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitLength.js.map +0 -1
  493. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitProperties.js +0 -90
  494. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitProperties.js.map +0 -1
  495. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/allOf.js +0 -52
  496. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/allOf.js.map +0 -1
  497. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/anyOf.js +0 -83
  498. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/anyOf.js.map +0 -1
  499. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/comment.js +0 -26
  500. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/comment.js.map +0 -1
  501. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/const.js +0 -63
  502. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/const.js.map +0 -1
  503. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/contains.js +0 -88
  504. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/contains.js.map +0 -1
  505. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/custom.js +0 -230
  506. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/custom.js.map +0 -1
  507. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/dependencies.js +0 -171
  508. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/dependencies.js.map +0 -1
  509. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/enum.js +0 -72
  510. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/enum.js.map +0 -1
  511. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/format.js +0 -157
  512. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/format.js.map +0 -1
  513. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/if.js +0 -110
  514. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/if.js.map +0 -1
  515. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/index.js +0 -67
  516. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/index.js.map +0 -1
  517. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/items.js +0 -147
  518. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/items.js.map +0 -1
  519. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/multipleOf.js +0 -90
  520. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/multipleOf.js.map +0 -1
  521. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/not.js +0 -95
  522. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/not.js.map +0 -1
  523. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/oneOf.js +0 -81
  524. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/oneOf.js.map +0 -1
  525. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/pattern.js +0 -85
  526. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/pattern.js.map +0 -1
  527. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/properties.js +0 -322
  528. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/properties.js.map +0 -1
  529. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/propertyNames.js +0 -84
  530. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/propertyNames.js.map +0 -1
  531. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/ref.js +0 -134
  532. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/ref.js.map +0 -1
  533. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/required.js +0 -263
  534. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/required.js.map +0 -1
  535. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/uniqueItems.js +0 -95
  536. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/uniqueItems.js.map +0 -1
  537. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/validate.js +0 -464
  538. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/validate.js.map +0 -1
  539. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/keyword.js +0 -108
  540. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/keyword.js.map +0 -1
  541. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/refs/data.json.js.map +0 -1
  542. package/dist/node_modules/.pnpm/fast-json-stable-stringify@2.1.0/node_modules/fast-json-stable-stringify/index.js +0 -62
  543. package/dist/node_modules/.pnpm/fast-json-stable-stringify@2.1.0/node_modules/fast-json-stable-stringify/index.js.map +0 -1
  544. package/dist/node_modules/.pnpm/json-schema-traverse@0.4.1/node_modules/json-schema-traverse/index.js.map +0 -1
  545. package/dist/node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/dist/es5/uri.all.js +0 -1035
  546. package/dist/node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/dist/es5/uri.all.js.map +0 -1
  547. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Options.js.map +0 -1
  548. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Refs.js.map +0 -1
  549. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/errorMessages.js.map +0 -1
  550. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js.map +0 -1
  551. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parseDef.js.map +0 -1
  552. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/any.js.map +0 -1
  553. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/array.js.map +0 -1
  554. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js.map +0 -1
  555. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js.map +0 -1
  556. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js.map +0 -1
  557. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js.map +0 -1
  558. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/date.js.map +0 -1
  559. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/default.js.map +0 -1
  560. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js.map +0 -1
  561. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js.map +0 -1
  562. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js.map +0 -1
  563. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js.map +0 -1
  564. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/map.js.map +0 -1
  565. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js.map +0 -1
  566. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/never.js.map +0 -1
  567. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/null.js.map +0 -1
  568. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js.map +0 -1
  569. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/number.js.map +0 -1
  570. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/object.js.map +0 -1
  571. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js.map +0 -1
  572. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js.map +0 -1
  573. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js.map +0 -1
  574. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js.map +0 -1
  575. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/record.js.map +0 -1
  576. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/set.js.map +0 -1
  577. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/string.js.map +0 -1
  578. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js.map +0 -1
  579. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js.map +0 -1
  580. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/union.js.map +0 -1
  581. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js.map +0 -1
  582. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/selectParser.js.map +0 -1
  583. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js.map +0 -1
  584. /package/dist/node_modules/.pnpm/{ajv@6.12.6/node_modules/ajv/lib → ajv@8.17.1/node_modules/ajv/dist}/refs/json-schema-draft-07.json.js.map +0 -0
  585. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/Options.js +0 -0
  586. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/Refs.js +0 -0
  587. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/errorMessages.js +0 -0
  588. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js +0 -0
  589. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parseDef.js +0 -0
  590. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/any.js +0 -0
  591. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js +0 -0
  592. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js +0 -0
  593. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js +0 -0
  594. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js +0 -0
  595. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/date.js +0 -0
  596. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/default.js +0 -0
  597. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js +0 -0
  598. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js +0 -0
  599. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js +0 -0
  600. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js +0 -0
  601. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/map.js +0 -0
  602. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js +0 -0
  603. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/never.js +0 -0
  604. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/null.js +0 -0
  605. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js +0 -0
  606. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/number.js +0 -0
  607. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/object.js +0 -0
  608. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js +0 -0
  609. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js +0 -0
  610. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js +0 -0
  611. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js +0 -0
  612. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/set.js +0 -0
  613. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/string.js +0 -0
  614. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js +0 -0
  615. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js +0 -0
  616. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/union.js +0 -0
  617. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js +0 -0
  618. /package/dist/node_modules/.pnpm/{zod-to-json-schema@3.24.6_zod@3.25.76 → zod-to-json-schema@3.25.0_zod@4.1.13}/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sources":["../../../src/server/cli/run.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport { readFileSync } from \"node:fs\";\nimport type { AddressInfo } from \"node:net\";\nimport * as path from \"node:path\";\nimport * as readline from \"node:readline\";\nimport type { SerializedLog } from \"@sentry/core\";\nimport { metrics } from \"@sentry/node\";\nimport { Searcher } from \"fast-fuzzy\";\nimport { uuidv7 } from \"uuidv7\";\nimport { SENTRY_CONTENT_TYPE } from \"../constants.ts\";\nimport { logger } from \"../logger.ts\";\nimport type { SentryLogEvent } from \"../parser/types.ts\";\nimport type { CLIHandlerOptions } from \"../types/cli.ts\";\nimport { buildDockerComposeCommand, detectDockerCompose } from \"../utils/docker-compose.ts\";\nimport { getSpotlightURL } from \"../utils/extras.ts\";\nimport { EventContainer, getBuffer } from \"../utils/index.ts\";\nimport tail, { type OnItemCallback } from \"./tail.ts\";\n\nconst SPOTLIGHT_VERSION = process.env.npm_package_version || \"unknown\";\n\n// Environment variable host configurations\nconst LOCALHOST_HOST = \"localhost\";\nconst DOCKER_HOST = \"host.docker.internal\";\n\n/**\n * Detect if there's a package.json with runnable scripts\n */\nfunction detectPackageJson(): { scriptName: string; scriptCommand: string } | null {\n try {\n const scripts = JSON.parse(readFileSync(\"./package.json\", \"utf-8\")).scripts;\n const scriptName = [\"dev\", \"develop\", \"serve\", \"start\"].find(name => scripts[name]);\n if (!scriptName || !scripts[scriptName]) {\n return null;\n }\n return { scriptName, scriptCommand: scripts[scriptName] };\n } catch {\n // pass\n }\n return null;\n}\n\n/**\n * Prompt the user to choose between Docker Compose and package.json\n */\nasync function promptUserChoice(): Promise<\"docker\" | \"package\"> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise(resolve => {\n console.log(\"\\n⚠️ Both Docker Compose and package.json detected!\");\n console.log(\"\\nWhich would you like to use?\");\n console.log(\" 1) docker compose\");\n console.log(\" 2) package.json\");\n\n rl.question(\"Enter your choice (1 or 2): \", answer => {\n rl.close();\n const choice = answer.trim();\n const selected = choice === \"2\" ? \"package\" : \"docker\";\n logger.info(`Selected: ${selected === \"docker\" ? \"Docker compose\" : \"package.json\"}`);\n resolve(selected);\n });\n });\n}\n\nfunction createLogEnvelope(level: \"info\" | \"error\", body: string, timestamp: number): Buffer {\n const envelopeHeader = {\n sdk: {\n name: \"sentry.spotlight.stdio\",\n version: SPOTLIGHT_VERSION,\n },\n };\n\n const logItem: SerializedLog = {\n timestamp,\n level,\n body,\n attributes: {},\n };\n\n const logPayload: SentryLogEvent = {\n type: \"log\",\n event_id: uuidv7(),\n timestamp,\n items: [\n {\n ...logItem,\n id: uuidv7(),\n severity_number: level === \"error\" ? 17 : 9, // ERROR=17, INFO=9 per OpenTelemetry spec\n sdk: undefined,\n },\n ],\n };\n\n const payloadJson = JSON.stringify(logPayload);\n const payloadBuffer = Buffer.from(payloadJson, \"utf-8\");\n\n const itemHeader = {\n type: \"log\",\n length: payloadBuffer.length, // Use byte length, not string length\n item_count: 1,\n content_type: \"application/json\",\n };\n\n const parts = [JSON.stringify(envelopeHeader), JSON.stringify(itemHeader), payloadJson];\n\n return Buffer.from(`${parts.join(\"\\n\")}\\n`, \"utf-8\");\n}\n\nexport default async function run({\n port,\n cmdArgs,\n basePath,\n filesToServe,\n format,\n allowedOrigins,\n}: CLIHandlerOptions) {\n let relayStdioAsLogs = true;\n\n const fuzzySearcher = new Searcher([] as string[], {\n threshold: 0.8,\n ignoreCase: false,\n });\n\n const logChecker: OnItemCallback = (type, item, envelopeHeader) => {\n if (type !== \"log\") return true;\n\n const [, payload] = item;\n const logEvent = payload as SentryLogEvent;\n\n if (logEvent.items && logEvent.items.length > 0) {\n for (const logItem of logEvent.items) {\n // Check if this is a stdio log from Spotlight itself\n if (envelopeHeader.sdk?.name === \"sentry.spotlight.stdio\") {\n continue;\n }\n\n if (!relayStdioAsLogs) continue;\n\n const logBody = typeof logItem.body === \"string\" ? logItem.body : String(logItem.body);\n const trimmedBody = logBody.trim();\n\n if (trimmedBody) {\n const matches = fuzzySearcher.search(trimmedBody);\n if (matches.length > 0) {\n logger.debug(\"Detected Sentry logging in the process, disabling stdio relay\");\n relayStdioAsLogs = false;\n return false;\n }\n }\n }\n }\n\n return true;\n };\n\n const serverInstance = await tail({ port, cmdArgs: [], basePath, filesToServe, format, allowedOrigins }, logChecker);\n if (!serverInstance) {\n logger.error(\"Failed to start Spotlight sidecar server.\");\n logger.error(`The port ${port} might already be in use — most likely by another Spotlight instance.`);\n process.exit(1);\n }\n\n // We *MUST* have an instance address and a port here\n // as not having that indicates either the server did not start\n // or started in a weird manner (like over a unix socket)\n const actualServerPort = (serverInstance.address() as AddressInfo).port;\n const spotlightUrl = getSpotlightURL(actualServerPort, LOCALHOST_HOST);\n let shell = false;\n let stdin: string | undefined = undefined;\n const env = {\n ...process.env,\n SENTRY_SPOTLIGHT: spotlightUrl,\n // We need the one below for Next.js projects -- they only allow NEXT_PUBLIC_ prefixed env vars\n // on frontend code\n NEXT_PUBLIC_SENTRY_SPOTLIGHT: spotlightUrl,\n // This is not supported in all SDKs but worth adding\n // for the ones that support it\n SENTRY_TRACES_SAMPLE_RATE: \"1\",\n } as {\n PATH: string;\n SENTRY_SPOTLIGHT: string;\n NEXT_PUBLIC_SENTRY_SPOTLIGHT: string;\n SENTRY_TRACES_SAMPLE_RATE: string;\n [key: string]: string;\n };\n if (cmdArgs.length === 0) {\n const dockerCompose = detectDockerCompose();\n const packageJson = detectPackageJson();\n\n // If both Docker Compose and package.json are detected, ask the user which one to use\n if (dockerCompose && packageJson) {\n if (!process.stdin.isTTY) {\n logger.error(\"Both Docker Compose and package.json detected, but cannot prompt in non-interactive mode.\");\n logger.error(\"Please specify a command explicitly or run in an interactive terminal.\");\n process.exit(1);\n }\n const choice = await promptUserChoice();\n metrics.count(\"cli.run.prompt_choice\", 1, { attributes: { choice } });\n\n if (choice === \"docker\") {\n logger.info(\n `Detected Docker Compose project with ${dockerCompose.serviceNames.length} service(s): ${dockerCompose.serviceNames.join(\", \")}`,\n );\n metrics.count(\"cli.run.autodetect\", 1, { attributes: { type: \"docker-compose\" } });\n // Use host.docker.internal for backend services to access the host machine\n env.SENTRY_SPOTLIGHT = getSpotlightURL(actualServerPort, DOCKER_HOST);\n const command = buildDockerComposeCommand(dockerCompose);\n cmdArgs = command.cmdArgs;\n stdin = command.stdin;\n // Always unset COMPOSE_FILE to avoid conflicts with explicit -f flags\n // biome-ignore lint/performance/noDelete: need to remove env var entirely\n delete env.COMPOSE_FILE;\n } else {\n logger.info(`Using package.json script: ${packageJson.scriptName}`);\n metrics.count(\"cli.run.autodetect\", 1, { attributes: { type: \"package-json\" } });\n cmdArgs = [packageJson.scriptCommand];\n shell = true;\n env.PATH = path.resolve(\"./node_modules/.bin\") + path.delimiter + env.PATH;\n }\n } else if (dockerCompose) {\n logger.info(\n `Detected Docker Compose project with ${dockerCompose.serviceNames.length} service(s): ${dockerCompose.serviceNames.join(\", \")}`,\n );\n metrics.count(\"cli.run.autodetect\", 1, { attributes: { type: \"docker-compose\" } });\n // Use host.docker.internal for backend services to access the host machine\n env.SENTRY_SPOTLIGHT = getSpotlightURL(actualServerPort, DOCKER_HOST);\n\n const command = buildDockerComposeCommand(dockerCompose);\n cmdArgs = command.cmdArgs;\n stdin = command.stdin;\n // Always unset COMPOSE_FILE to avoid conflicts with explicit -f flags\n // biome-ignore lint/performance/noDelete: need to remove env var entirely\n delete env.COMPOSE_FILE;\n } else if (packageJson) {\n logger.info(`Using package.json script: ${packageJson.scriptName}`);\n metrics.count(\"cli.run.autodetect\", 1, { attributes: { type: \"package-json\" } });\n cmdArgs = [packageJson.scriptCommand];\n shell = true;\n env.PATH = path.resolve(\"./node_modules/.bin\") + path.delimiter + env.PATH;\n }\n }\n if (cmdArgs.length === 0) {\n logger.error(\"Error: No command specified to run and could not infer the command automatically.\");\n process.exit(1);\n }\n const cmdStr = cmdArgs.join(\" \");\n logger.info(`Starting command: ${cmdStr}`);\n // When we have Docker Compose override YAML (for -f -), we need to pipe stdin\n // Otherwise, inherit stdin to relay user input to the downstream process\n const stdinMode: \"pipe\" | \"inherit\" = stdin ? \"pipe\" : \"inherit\";\n const runCmd = spawn(cmdArgs[0], cmdArgs.slice(1), {\n cwd: process.cwd(),\n env,\n shell,\n windowsVerbatimArguments: true,\n windowsHide: true,\n stdio: [stdinMode, \"pipe\", \"pipe\"],\n });\n\n const { stdout, stderr } = runCmd;\n if (!stdout || !stderr) {\n logger.error(\"Failed to create process streams\");\n process.exit(1);\n }\n\n // If our command has a stdin input _and_ we can send to stdin, write and close\n if (stdin) {\n if (!runCmd.stdin) {\n logger.error(\"Failed to pipe Docker Compose override: stdin is not available\");\n process.exit(1);\n }\n runCmd.stdin.write(stdin);\n runCmd.stdin.end();\n }\n\n const processLogLine = (line: string, level: \"info\" | \"error\") => {\n if (!relayStdioAsLogs) return;\n const trimmedLine = line.trim();\n if (!trimmedLine) return;\n\n fuzzySearcher.add(trimmedLine);\n\n const timestamp = Date.now() / 1000;\n const envelopeBuffer = createLogEnvelope(level, trimmedLine, timestamp);\n\n const container = new EventContainer(SENTRY_CONTENT_TYPE, envelopeBuffer);\n // Add to buffer - this will automatically trigger all subscribers\n // including the onEnvelope callback registered in tail()\n getBuffer().put(container);\n };\n\n let stdoutBuffer = \"\";\n let stderrBuffer = \"\";\n\n // Stream stdout as info-level logs\n stdout.on(\"data\", (data: Buffer) => {\n stdoutBuffer += data.toString();\n const lines = stdoutBuffer.split(\"\\n\");\n // Keep the last partial line in the buffer\n stdoutBuffer = lines.pop() || \"\";\n\n for (const line of lines) {\n processLogLine(line, \"info\");\n }\n });\n\n // Stream stderr as error-level logs\n stderr.on(\"data\", (data: Buffer) => {\n stderrBuffer += data.toString();\n const lines = stderrBuffer.split(\"\\n\");\n // Keep the last partial line in the buffer\n stderrBuffer = lines.pop() || \"\";\n\n for (const line of lines) {\n processLogLine(line, \"error\");\n }\n });\n\n runCmd.on(\"error\", err => {\n logger.error(`Failed to run ${cmdStr}:`);\n logger.error(err);\n process.exit(1);\n });\n\n runCmd.on(\"close\", code => {\n // Handle any remaining buffered lines\n if (stdoutBuffer.trim()) {\n processLogLine(stdoutBuffer, \"info\");\n }\n if (stderrBuffer.trim()) {\n processLogLine(stderrBuffer, \"error\");\n }\n\n if (!code) {\n logger.error(`${cmdStr} exited, terminating.`);\n } else {\n logger.error(`${cmdStr} exited with code ${code}.`);\n }\n process.exit(code);\n });\n const killRunCmd = () => {\n if (runCmd.killed) return;\n stdout.destroy();\n stderr.destroy();\n runCmd.kill();\n };\n runCmd.on(\"spawn\", () => {\n runCmd.removeAllListeners(\"spawn\");\n runCmd.removeAllListeners(\"error\");\n process.on(\"SIGINT\", killRunCmd);\n process.on(\"SIGTERM\", killRunCmd);\n process.on(\"beforeExit\", killRunCmd);\n });\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sources":["../../../src/server/cli/run.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport { readFileSync } from \"node:fs\";\nimport type { AddressInfo } from \"node:net\";\nimport * as path from \"node:path\";\nimport * as readline from \"node:readline\";\nimport type { SerializedLog } from \"@sentry/core\";\nimport { metrics } from \"@sentry/node\";\nimport { Searcher } from \"fast-fuzzy\";\nimport { uuidv7 } from \"uuidv7\";\nimport { SENTRY_CONTENT_TYPE } from \"../constants.ts\";\nimport { logger } from \"../logger.ts\";\nimport type { SentryLogEvent } from \"../parser/types.ts\";\nimport type { CLIHandlerOptions, Command, CommandMeta } from \"../types/cli.ts\";\nimport { detectDockerCompose, parseExplicitDockerCompose, prepareDockerComposeRun } from \"../utils/docker-compose.ts\";\nimport { getSpotlightURL, openInBrowser } from \"../utils/extras.ts\";\nimport { EventContainer, getBuffer } from \"../utils/index.ts\";\nimport { type OnItemCallback, handler as tail } from \"./tail.ts\";\n\nexport const meta: CommandMeta = {\n name: \"run\",\n short: \"Run your app with automatic Spotlight instrumentation\",\n usage: \"spotlight run [options] [command...]\",\n long: `Run your application with Spotlight, automatically setting up the necessary\nenvironment variables and capturing telemetry data.\n\nIf no command is provided, Spotlight auto-detects:\n - Docker Compose projects (docker-compose.yml, compose.yml, etc.)\n - package.json scripts (dev, develop, serve, start)\n\nEnvironment variables set automatically:\n - SENTRY_SPOTLIGHT=http://localhost:<port>/stream\n - NEXT_PUBLIC_SENTRY_SPOTLIGHT=http://localhost:<port>/stream\n - SENTRY_TRACES_SAMPLE_RATE=1\n\nstdout/stderr are captured and sent to Spotlight as log events.`,\n examples: [\n \"spotlight run # Auto-detect and run (package.json or docker-compose)\",\n \"spotlight run node server.js # Run a specific command with Spotlight\",\n \"spotlight run -p 3000 npm start # Run with custom port\",\n \"spotlight run python manage.py runserver # Run Python app\",\n \"spotlight run docker compose up # Run Docker Compose with Spotlight injection\",\n ],\n};\n\nconst SPOTLIGHT_VERSION = process.env.npm_package_version || \"unknown\";\n\n// Environment variable host configurations\nconst LOCALHOST_HOST = \"localhost\";\n\n/**\n * Detect if there's a package.json with runnable scripts\n */\nfunction detectPackageJson(): { scriptName: string; scriptCommand: string } | null {\n try {\n const scripts = JSON.parse(readFileSync(\"./package.json\", \"utf-8\")).scripts;\n const scriptName = [\"dev\", \"develop\", \"serve\", \"start\"].find(name => scripts[name]);\n if (!scriptName || !scripts[scriptName]) {\n return null;\n }\n return { scriptName, scriptCommand: scripts[scriptName] };\n } catch {\n // pass\n }\n return null;\n}\n\n/**\n * Prompt the user to choose between Docker Compose and package.json\n */\nasync function promptUserChoice(): Promise<\"docker\" | \"package\"> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise(resolve => {\n console.log(\"\\n⚠️ Both Docker Compose and package.json detected!\");\n console.log(\"\\nWhich would you like to use?\");\n console.log(\" 1) docker compose\");\n console.log(\" 2) package.json\");\n\n rl.question(\"Enter your choice (1 or 2): \", answer => {\n rl.close();\n const choice = answer.trim();\n const selected = choice === \"2\" ? \"package\" : \"docker\";\n logger.info(`Selected: ${selected === \"docker\" ? \"Docker compose\" : \"package.json\"}`);\n resolve(selected);\n });\n });\n}\n\nfunction createLogEnvelope(level: \"info\" | \"error\", body: string, timestamp: number): Buffer {\n const envelopeHeader = {\n sdk: {\n name: \"sentry.spotlight.stdio\",\n version: SPOTLIGHT_VERSION,\n },\n };\n\n const logItem: SerializedLog = {\n timestamp,\n level,\n body,\n attributes: {},\n };\n\n const logPayload: SentryLogEvent = {\n type: \"log\",\n event_id: uuidv7(),\n timestamp,\n items: [\n {\n ...logItem,\n id: uuidv7(),\n severity_number: level === \"error\" ? 17 : 9, // ERROR=17, INFO=9 per OpenTelemetry spec\n sdk: undefined,\n },\n ],\n };\n\n const payloadJson = JSON.stringify(logPayload);\n const payloadBuffer = Buffer.from(payloadJson, \"utf-8\");\n\n const itemHeader = {\n type: \"log\",\n length: payloadBuffer.length, // Use byte length, not string length\n item_count: 1,\n content_type: \"application/json\",\n };\n\n const parts = [JSON.stringify(envelopeHeader), JSON.stringify(itemHeader), payloadJson];\n\n return Buffer.from(`${parts.join(\"\\n\")}\\n`, \"utf-8\");\n}\n\nexport async function handler({\n port,\n cmdArgs,\n basePath,\n filesToServe,\n format,\n allowedOrigins,\n open,\n}: CLIHandlerOptions) {\n let relayStdioAsLogs = true;\n\n const fuzzySearcher = new Searcher([] as string[], {\n threshold: 0.8,\n ignoreCase: false,\n });\n\n const logChecker: OnItemCallback = (type, item, envelopeHeader) => {\n if (type !== \"log\") return true;\n\n const [, payload] = item;\n const logEvent = payload as SentryLogEvent;\n\n if (logEvent.items && logEvent.items.length > 0) {\n for (const logItem of logEvent.items) {\n // Check if this is a stdio log from Spotlight itself\n if (envelopeHeader.sdk?.name === \"sentry.spotlight.stdio\") {\n continue;\n }\n\n if (!relayStdioAsLogs) continue;\n\n const logBody = typeof logItem.body === \"string\" ? logItem.body : String(logItem.body);\n const trimmedBody = logBody.trim();\n\n if (trimmedBody) {\n const matches = fuzzySearcher.search(trimmedBody);\n if (matches.length > 0) {\n logger.debug(\"Detected Sentry logging in the process, disabling stdio relay\");\n relayStdioAsLogs = false;\n return false;\n }\n }\n }\n }\n\n return true;\n };\n\n const serverInstance = await tail({ port, cmdArgs: [], basePath, filesToServe, format, allowedOrigins }, logChecker);\n if (!serverInstance) {\n logger.error(\"Failed to start Spotlight sidecar server.\");\n logger.error(`The port ${port} might already be in use — most likely by another Spotlight instance.`);\n process.exit(1);\n }\n\n // We *MUST* have an instance address and a port here\n // as not having that indicates either the server did not start\n // or started in a weird manner (like over a unix socket)\n const actualServerPort = (serverInstance.address() as AddressInfo).port;\n const spotlightUrl = getSpotlightURL(actualServerPort, LOCALHOST_HOST);\n\n if (open) {\n openInBrowser(actualServerPort);\n }\n let shell = false;\n let stdin: string | undefined = undefined;\n const env = {\n ...process.env,\n SENTRY_SPOTLIGHT: spotlightUrl,\n // We need the one below for Next.js projects -- they only allow NEXT_PUBLIC_ prefixed env vars\n // on frontend code\n NEXT_PUBLIC_SENTRY_SPOTLIGHT: spotlightUrl,\n // This is not supported in all SDKs but worth adding\n // for the ones that support it\n SENTRY_TRACES_SAMPLE_RATE: \"1\",\n } as {\n PATH: string;\n SENTRY_SPOTLIGHT: string;\n NEXT_PUBLIC_SENTRY_SPOTLIGHT: string;\n SENTRY_TRACES_SAMPLE_RATE: string;\n [key: string]: string;\n };\n if (cmdArgs.length === 0) {\n const dockerCompose = detectDockerCompose();\n const packageJson = detectPackageJson();\n\n // If both Docker Compose and package.json are detected, ask the user which one to use\n if (dockerCompose && packageJson) {\n if (!process.stdin.isTTY) {\n logger.error(\"Both Docker Compose and package.json detected, but cannot prompt in non-interactive mode.\");\n logger.error(\"Please specify a command explicitly or run in an interactive terminal.\");\n process.exit(1);\n }\n const choice = await promptUserChoice();\n metrics.count(\"cli.run.prompt_choice\", 1, { attributes: { choice } });\n\n if (choice === \"docker\") {\n logger.info(\n `Detected Docker Compose project with ${dockerCompose.serviceNames.length} service(s): ${dockerCompose.serviceNames.join(\", \")}`,\n );\n metrics.count(\"cli.run.autodetect\", 1, { attributes: { type: \"docker-compose\" } });\n ({ cmdArgs, stdin } = prepareDockerComposeRun(dockerCompose, actualServerPort, env));\n } else {\n logger.info(`Using package.json script: ${packageJson.scriptName}`);\n metrics.count(\"cli.run.autodetect\", 1, { attributes: { type: \"package-json\" } });\n cmdArgs = [packageJson.scriptCommand];\n shell = true;\n env.PATH = path.resolve(\"./node_modules/.bin\") + path.delimiter + env.PATH;\n }\n } else if (dockerCompose) {\n logger.info(\n `Detected Docker Compose project with ${dockerCompose.serviceNames.length} service(s): ${dockerCompose.serviceNames.join(\", \")}`,\n );\n metrics.count(\"cli.run.autodetect\", 1, { attributes: { type: \"docker-compose\" } });\n ({ cmdArgs, stdin } = prepareDockerComposeRun(dockerCompose, actualServerPort, env));\n } else if (packageJson) {\n logger.info(`Using package.json script: ${packageJson.scriptName}`);\n metrics.count(\"cli.run.autodetect\", 1, { attributes: { type: \"package-json\" } });\n cmdArgs = [packageJson.scriptCommand];\n shell = true;\n env.PATH = path.resolve(\"./node_modules/.bin\") + path.delimiter + env.PATH;\n }\n } else {\n // Handle explicit docker compose commands (e.g., \"spotlight run docker compose up\")\n const explicitDockerConfig = parseExplicitDockerCompose(cmdArgs);\n if (explicitDockerConfig) {\n logger.info(\n `Detected explicit Docker Compose command with ${explicitDockerConfig.serviceNames.length} service(s): ${explicitDockerConfig.serviceNames.join(\", \")}`,\n );\n metrics.count(\"cli.run.docker_compose.explicit\", 1, {\n attributes: {\n services: explicitDockerConfig.serviceNames.length,\n subcommand: explicitDockerConfig.subcommandArgs.join(\" \"),\n },\n });\n ({ cmdArgs, stdin } = prepareDockerComposeRun(explicitDockerConfig, actualServerPort, env));\n }\n }\n if (cmdArgs.length === 0) {\n logger.error(\"Error: No command specified to run and could not infer the command automatically.\");\n process.exit(1);\n }\n const cmdStr = cmdArgs.join(\" \");\n logger.info(`Starting command: ${cmdStr}`);\n // When we have Docker Compose override YAML (for -f -), we need to pipe stdin\n // Otherwise, inherit stdin to relay user input to the downstream process\n const stdinMode: \"pipe\" | \"inherit\" = stdin ? \"pipe\" : \"inherit\";\n const runCmd = spawn(cmdArgs[0], cmdArgs.slice(1), {\n cwd: process.cwd(),\n env,\n shell,\n windowsVerbatimArguments: true,\n windowsHide: true,\n stdio: [stdinMode, \"pipe\", \"pipe\"],\n });\n\n const { stdout, stderr } = runCmd;\n if (!stdout || !stderr) {\n logger.error(\"Failed to create process streams\");\n process.exit(1);\n }\n\n // If our command has a stdin input _and_ we can send to stdin, write and close\n if (stdin) {\n if (!runCmd.stdin) {\n logger.error(\"Failed to pipe Docker Compose override: stdin is not available\");\n process.exit(1);\n }\n runCmd.stdin.write(stdin);\n runCmd.stdin.end();\n }\n\n const processLogLine = (line: string, level: \"info\" | \"error\") => {\n if (!relayStdioAsLogs) return;\n const trimmedLine = line.trim();\n if (!trimmedLine) return;\n\n fuzzySearcher.add(trimmedLine);\n\n const timestamp = Date.now() / 1000;\n const envelopeBuffer = createLogEnvelope(level, trimmedLine, timestamp);\n\n const container = new EventContainer(SENTRY_CONTENT_TYPE, envelopeBuffer);\n // Add to buffer - this will automatically trigger all subscribers\n // including the onEnvelope callback registered in tail()\n getBuffer().put(container);\n };\n\n let stdoutBuffer = \"\";\n let stderrBuffer = \"\";\n\n // Stream stdout as info-level logs\n stdout.on(\"data\", (data: Buffer) => {\n stdoutBuffer += data.toString();\n const lines = stdoutBuffer.split(\"\\n\");\n // Keep the last partial line in the buffer\n stdoutBuffer = lines.pop() || \"\";\n\n for (const line of lines) {\n processLogLine(line, \"info\");\n }\n });\n\n // Stream stderr as error-level logs\n stderr.on(\"data\", (data: Buffer) => {\n stderrBuffer += data.toString();\n const lines = stderrBuffer.split(\"\\n\");\n // Keep the last partial line in the buffer\n stderrBuffer = lines.pop() || \"\";\n\n for (const line of lines) {\n processLogLine(line, \"error\");\n }\n });\n\n runCmd.on(\"error\", err => {\n logger.error(`Failed to run ${cmdStr}:`);\n logger.error(err);\n process.exit(1);\n });\n\n runCmd.on(\"close\", code => {\n // Handle any remaining buffered lines\n if (stdoutBuffer.trim()) {\n processLogLine(stdoutBuffer, \"info\");\n }\n if (stderrBuffer.trim()) {\n processLogLine(stderrBuffer, \"error\");\n }\n\n if (!code) {\n logger.error(`${cmdStr} exited, terminating.`);\n } else {\n logger.error(`${cmdStr} exited with code ${code}.`);\n }\n process.exit(code);\n });\n const killRunCmd = () => {\n if (runCmd.killed) return;\n stdout.destroy();\n stderr.destroy();\n runCmd.kill();\n };\n runCmd.on(\"spawn\", () => {\n runCmd.removeAllListeners(\"spawn\");\n runCmd.removeAllListeners(\"error\");\n process.on(\"SIGINT\", killRunCmd);\n process.on(\"SIGTERM\", killRunCmd);\n process.on(\"beforeExit\", killRunCmd);\n });\n}\n\nexport default { meta, handler } satisfies Command;\n"],"names":["tail"],"mappings":"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"}
@@ -1,2 +1,8 @@
1
- import { CLIHandlerOptions } from '../types/cli.ts';
2
- export default function server({ port, basePath, filesToServe, allowedOrigins }: CLIHandlerOptions): Promise<import('http').Server<typeof import('http').IncomingMessage, typeof import('http').ServerResponse> | undefined>;
1
+ import { CLIHandlerOptions, CommandMeta } from '../types/cli.ts';
2
+ export declare const meta: CommandMeta;
3
+ export declare function handler({ port, basePath, filesToServe, allowedOrigins, open }: CLIHandlerOptions): Promise<import('http').Server<typeof import('http').IncomingMessage, typeof import('http').ServerResponse> | undefined>;
4
+ declare const _default: {
5
+ meta: CommandMeta;
6
+ handler: typeof handler;
7
+ };
8
+ export default _default;
@@ -2,22 +2,52 @@
2
2
  !function() {
3
3
  try {
4
4
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
5
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "b0df70d8-9df1-45bb-8915-b98805fbbb55", e._sentryDebugIdIdentifier = "sentry-dbid-b0df70d8-9df1-45bb-8915-b98805fbbb55");
5
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "ce0912cd-6bc9-403e-885e-b9e4cee0c3a4", e._sentryDebugIdIdentifier = "sentry-dbid-ce0912cd-6bc9-403e-885e-b9e4cee0c3a4");
6
6
  } catch (e2) {
7
7
  }
8
8
  }();
9
9
  import { setupSpotlight } from "../main.js";
10
+ import { openInBrowser } from "../utils/extras.js";
10
11
  import "../../_virtual/_sentry-release-injection-file.js";
11
- async function server({ port, basePath, filesToServe, allowedOrigins }) {
12
- return await setupSpotlight({
12
+ const meta = {
13
+ name: "server",
14
+ short: "Start the Spotlight sidecar server (default command)",
15
+ usage: "spotlight [server] [options]",
16
+ long: `Start the Spotlight sidecar HTTP server.
17
+
18
+ This is the default command when running 'spotlight' without arguments.
19
+ The server listens for events from Sentry SDKs and serves the Spotlight UI.
20
+
21
+ The server provides:
22
+ - HTTP endpoint for receiving Sentry envelopes
23
+ - Server-Sent Events (SSE) stream for real-time updates
24
+ - Web UI at http://localhost:PORT`,
25
+ examples: [
26
+ "spotlight # Start on default port 8969",
27
+ "spotlight server # Explicit server command",
28
+ "spotlight --open # Start and open dashboard in browser",
29
+ "spotlight --port 3000 # Start on port 3000",
30
+ "spotlight -p 3000 -d # Start on port 3000 with debug logging"
31
+ ]
32
+ };
33
+ async function handler({ port, basePath, filesToServe, allowedOrigins, open }) {
34
+ const serverInstance = await setupSpotlight({
13
35
  port,
14
36
  basePath,
15
37
  filesToServe,
16
38
  isStandalone: true,
17
39
  allowedOrigins
18
40
  });
41
+ if (open) {
42
+ const actualPort = serverInstance ? serverInstance.address().port : port;
43
+ openInBrowser(actualPort);
44
+ }
45
+ return serverInstance;
19
46
  }
47
+ const server = { meta, handler };
20
48
  export {
21
- server as default
49
+ server as default,
50
+ handler,
51
+ meta
22
52
  };
23
53
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sources":["../../../src/server/cli/server.ts"],"sourcesContent":["import { setupSpotlight } from \"../main.ts\";\nimport type { CLIHandlerOptions } from \"../types/cli.ts\";\n\nexport default async function server({ port, basePath, filesToServe, allowedOrigins }: CLIHandlerOptions) {\n return await setupSpotlight({\n port,\n basePath,\n filesToServe,\n isStandalone: true,\n allowedOrigins,\n });\n}\n"],"names":[],"mappings":";;;;;;;;;;AAGA,eAA8B,OAAO,EAAE,MAAM,UAAU,cAAc,kBAAqC;AACxG,SAAO,MAAM,eAAe;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd;AAAA,EAAA,CACD;AACH;"}
1
+ {"version":3,"file":"server.js","sources":["../../../src/server/cli/server.ts"],"sourcesContent":["import type { AddressInfo } from \"node:net\";\nimport { setupSpotlight } from \"../main.ts\";\nimport type { CLIHandlerOptions, Command, CommandMeta } from \"../types/cli.ts\";\nimport { openInBrowser } from \"../utils/extras.ts\";\n\nexport const meta: CommandMeta = {\n name: \"server\",\n short: \"Start the Spotlight sidecar server (default command)\",\n usage: \"spotlight [server] [options]\",\n long: `Start the Spotlight sidecar HTTP server.\n\nThis is the default command when running 'spotlight' without arguments.\nThe server listens for events from Sentry SDKs and serves the Spotlight UI.\n\nThe server provides:\n - HTTP endpoint for receiving Sentry envelopes\n - Server-Sent Events (SSE) stream for real-time updates\n - Web UI at http://localhost:PORT`,\n examples: [\n \"spotlight # Start on default port 8969\",\n \"spotlight server # Explicit server command\",\n \"spotlight --open # Start and open dashboard in browser\",\n \"spotlight --port 3000 # Start on port 3000\",\n \"spotlight -p 3000 -d # Start on port 3000 with debug logging\",\n ],\n};\n\nexport async function handler({ port, basePath, filesToServe, allowedOrigins, open }: CLIHandlerOptions) {\n const serverInstance = await setupSpotlight({\n port,\n basePath,\n filesToServe,\n isStandalone: true,\n allowedOrigins,\n });\n\n if (open) {\n // Use actual port from server instance, or fall back to requested port\n // (when serverInstance is undefined, a server is already running on the requested port)\n const actualPort = serverInstance ? (serverInstance.address() as AddressInfo).port : port;\n openInBrowser(actualPort);\n }\n\n return serverInstance;\n}\n\nexport default { meta, handler } satisfies Command;\n"],"names":[],"mappings":";;;;;;;;;;;AAKO,MAAM,OAAoB;AAAA,EAC/B,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASN,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,QAAQ,EAAE,MAAM,UAAU,cAAc,gBAAgB,QAA2B;AACvG,QAAM,iBAAiB,MAAM,eAAe;AAAA,IAC1C;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd;AAAA,EAAA,CACD;AAED,MAAI,MAAM;AAGR,UAAM,aAAa,iBAAkB,eAAe,QAAA,EAA0B,OAAO;AACrF,kBAAc,UAAU;AAAA,EAC1B;AAEA,SAAO;AACT;AAEA,MAAA,SAAe,EAAE,MAAM,QAAA;"}
@@ -1,8 +1,14 @@
1
1
  import { ServerType } from '@hono/node-server';
2
2
  import { ParsedEnvelope } from '../parser/index.ts';
3
- import { CLIHandlerOptions } from '../types/cli.ts';
3
+ import { CLIHandlerOptions, CommandMeta } from '../types/cli.ts';
4
4
  export type OnItemCallback = (type: string, item: ParsedEnvelope["envelope"][1][number], envelopeHeader: ParsedEnvelope["envelope"][0]) => boolean;
5
5
  export declare const NAME_TO_TYPE_MAPPING: Record<string, string[]>;
6
6
  export declare const EVERYTHING_MAGIC_WORDS: Set<string>;
7
7
  export declare const SUPPORTED_TAIL_ARGS: Set<string>;
8
- export default function tail({ port, cmdArgs, basePath, filesToServe, format, allowedOrigins }: CLIHandlerOptions, onItem?: OnItemCallback): Promise<ServerType | undefined>;
8
+ export declare const meta: CommandMeta;
9
+ export declare function handler({ port, cmdArgs, basePath, filesToServe, format, allowedOrigins }: CLIHandlerOptions, onItem?: OnItemCallback): Promise<ServerType | undefined>;
10
+ declare const _default: {
11
+ meta: CommandMeta;
12
+ handler: typeof handler;
13
+ };
14
+ export default _default;
@@ -2,7 +2,7 @@
2
2
  !function() {
3
3
  try {
4
4
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
5
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "f35053fc-26c9-45cd-b2da-1b59b921e9cb", e._sentryDebugIdIdentifier = "sentry-dbid-f35053fc-26c9-45cd-b2da-1b59b921e9cb");
5
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "22ba8cd6-fd16-4260-968d-aa7a00ac6ae6", e._sentryDebugIdIdentifier = "sentry-dbid-22ba8cd6-fd16-4260-968d-aa7a00ac6ae6");
6
6
  } catch (e2) {
7
7
  }
8
8
  }();
@@ -38,6 +38,28 @@ const NAME_TO_TYPE_MAPPING = Object.freeze({
38
38
  const SUPPORTED_ENVELOPE_TYPES = new Set(Object.values(NAME_TO_TYPE_MAPPING).flat());
39
39
  const EVERYTHING_MAGIC_WORDS = /* @__PURE__ */ new Set(["everything", "all", "*"]);
40
40
  const SUPPORTED_TAIL_ARGS = /* @__PURE__ */ new Set([...Object.keys(NAME_TO_TYPE_MAPPING), ...EVERYTHING_MAGIC_WORDS]);
41
+ const meta = {
42
+ name: "tail",
43
+ short: `Tail Sentry events (types: ${Object.keys(NAME_TO_TYPE_MAPPING).join(", ")})`,
44
+ usage: "spotlight tail [types...] [options]",
45
+ long: `Stream Sentry events to your terminal in real-time.
46
+
47
+ Available event types:
48
+ ${Object.keys(NAME_TO_TYPE_MAPPING).join(", ")}
49
+
50
+ Magic words (to tail everything):
51
+ ${[...EVERYTHING_MAGIC_WORDS].join(", ")}
52
+
53
+ Use -f/--format to change output format (human, logfmt, json, md).
54
+ Connects to existing sidecar if running, otherwise starts a new one.`,
55
+ examples: [
56
+ "spotlight tail # Tail all event types (human format)",
57
+ "spotlight tail errors # Tail only errors",
58
+ "spotlight tail errors logs # Tail errors and logs",
59
+ "spotlight tail --format json # Use JSON output format",
60
+ "spotlight tail traces -f logfmt # Tail traces with logfmt format"
61
+ ]
62
+ };
41
63
  const FORMATTERS = {
42
64
  md: formatters$3,
43
65
  logfmt: formatters$2,
@@ -49,7 +71,7 @@ const connectUpstream = async (port) => new Promise((resolve, reject) => {
49
71
  client.onerror = reject;
50
72
  client.onopen = () => resolve(client);
51
73
  });
52
- async function tail({ port, cmdArgs, basePath, filesToServe, format = "logfmt", allowedOrigins }, onItem) {
74
+ async function handler({ port, cmdArgs, basePath, filesToServe, format = "logfmt", allowedOrigins }, onItem) {
53
75
  const eventTypes = cmdArgs.length > 0 ? cmdArgs.map((arg) => arg.toLowerCase()) : ["everything"];
54
76
  for (const eventType of eventTypes) {
55
77
  if (!SUPPORTED_TAIL_ARGS.has(eventType)) {
@@ -104,10 +126,13 @@ async function tail({ port, cmdArgs, basePath, filesToServe, format = "logfmt",
104
126
  });
105
127
  return serverInstance;
106
128
  }
129
+ const tail = { meta, handler };
107
130
  export {
108
131
  EVERYTHING_MAGIC_WORDS,
109
132
  NAME_TO_TYPE_MAPPING,
110
133
  SUPPORTED_TAIL_ARGS,
111
- tail as default
134
+ tail as default,
135
+ handler,
136
+ meta
112
137
  };
113
138
  //# sourceMappingURL=tail.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tail.js","sources":["../../../src/server/cli/tail.ts"],"sourcesContent":["import type { ServerType } from \"@hono/node-server\";\nimport { captureException } from \"@sentry/core\";\nimport { metrics } from \"@sentry/node\";\nimport { EventSource } from \"eventsource\";\nimport { SENTRY_CONTENT_TYPE } from \"../constants.ts\";\nimport {\n type FormatterRegistry,\n type FormatterType,\n applyFormatter,\n humanFormatters,\n jsonFormatters,\n logfmtFormatters,\n mdFormatters,\n} from \"../formatters/index.ts\";\nimport { logger } from \"../logger.ts\";\nimport { setupSpotlight } from \"../main.ts\";\nimport type { ParsedEnvelope } from \"../parser/index.ts\";\nimport type { CLIHandlerOptions } from \"../types/cli.ts\";\nimport { getSpotlightURL } from \"../utils/extras.ts\";\nimport { getBuffer } from \"../utils/index.ts\";\n\nexport type OnItemCallback = (\n type: string,\n item: ParsedEnvelope[\"envelope\"][1][number],\n envelopeHeader: ParsedEnvelope[\"envelope\"][0],\n) => boolean;\nexport const NAME_TO_TYPE_MAPPING: Record<string, string[]> = Object.freeze({\n traces: [\"transaction\", \"span\"],\n // profiles: [\"profile\"],\n logs: [\"log\"],\n attachments: [\"attachment\"],\n errors: [\"event\"],\n // sessions: [\"session\"],\n // replays: [\"replay_video\"],\n // client_report\n});\n\nconst SUPPORTED_ENVELOPE_TYPES = new Set(Object.values(NAME_TO_TYPE_MAPPING).flat());\nexport const EVERYTHING_MAGIC_WORDS = new Set([\"everything\", \"all\", \"*\"]);\nexport const SUPPORTED_TAIL_ARGS = new Set([...Object.keys(NAME_TO_TYPE_MAPPING), ...EVERYTHING_MAGIC_WORDS]);\n\nconst FORMATTERS: Record<FormatterType, FormatterRegistry> = {\n md: mdFormatters,\n logfmt: logfmtFormatters,\n json: jsonFormatters,\n human: humanFormatters,\n};\n\nconst connectUpstream = async (port: number) =>\n new Promise<EventSource>((resolve, reject) => {\n const client = new EventSource(getSpotlightURL(port));\n client.onerror = reject;\n client.onopen = () => resolve(client);\n });\n\nexport default async function tail(\n { port, cmdArgs, basePath, filesToServe, format = \"logfmt\", allowedOrigins }: CLIHandlerOptions,\n onItem?: OnItemCallback,\n): Promise<ServerType | undefined> {\n const eventTypes = cmdArgs.length > 0 ? cmdArgs.map(arg => arg.toLowerCase()) : [\"everything\"];\n for (const eventType of eventTypes) {\n if (!SUPPORTED_TAIL_ARGS.has(eventType)) {\n logger.error(`Error: Unsupported argument \"${eventType}\".`);\n logger.error(`Supported arguments are: ${[...SUPPORTED_TAIL_ARGS].join(\", \")}`);\n process.exit(1);\n }\n }\n\n // Track which event types users tail\n for (const eventType of eventTypes) {\n metrics.count(\"cli.tail.event_type\", 1, { attributes: { type: eventType } });\n }\n\n const formatter = FORMATTERS[format];\n const types = eventTypes.some(type => EVERYTHING_MAGIC_WORDS.has(type))\n ? SUPPORTED_ENVELOPE_TYPES\n : new Set([...eventTypes.flatMap(type => NAME_TO_TYPE_MAPPING[type] || [])]);\n const onEnvelope: (envelope: ParsedEnvelope[\"envelope\"]) => void = envelope => {\n const [envelopeHeader, items] = envelope;\n const formatted: string[] = [];\n\n for (const item of items) {\n const [{ type }, payload] = item;\n\n if (!type || !types.has(type)) {\n // Skip if not a type we're interested in\n continue;\n }\n\n // Check if this event type is supported by the formatter\n if (!(type in formatter)) {\n continue;\n }\n\n if (onItem && !onItem(type, item, envelopeHeader)) {\n continue;\n }\n\n formatted.push(...applyFormatter(formatter, type as keyof FormatterRegistry, payload, envelopeHeader));\n }\n\n if (formatted.length > 0) {\n console.log(formatted.join(\"\\n\"));\n }\n };\n\n // try to connect to an already existing server first\n try {\n const client = await connectUpstream(port);\n client.addEventListener(SENTRY_CONTENT_TYPE, event => onEnvelope!(JSON.parse(event.data)));\n // Early return - don't start our own server if we can connect to an upstream one\n return undefined;\n } catch (err) {\n // if we fail, fine then we'll start our own\n if (err instanceof Error && !err.message?.includes(port.toString())) {\n captureException(err);\n logger.error(\"Error when trying to connect to upstream sidecar:\");\n logger.error(err);\n process.exit(1);\n }\n }\n\n const serverInstance = await setupSpotlight({ port, filesToServe, basePath, isStandalone: true, allowedOrigins });\n\n // Subscribe the onEnvelope callback to the message buffer\n // This ensures it gets called whenever any envelope is added to the buffer\n getBuffer().subscribe(container => {\n const parsedEnvelope = container.getParsedEnvelope();\n if (parsedEnvelope) {\n onEnvelope(parsedEnvelope.envelope);\n }\n });\n\n return serverInstance;\n}\n"],"names":["mdFormatters","logfmtFormatters","jsonFormatters","humanFormatters"],"mappings":"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"}
1
+ {"version":3,"file":"tail.js","sources":["../../../src/server/cli/tail.ts"],"sourcesContent":["import type { ServerType } from \"@hono/node-server\";\nimport { captureException } from \"@sentry/core\";\nimport { metrics } from \"@sentry/node\";\nimport { EventSource } from \"eventsource\";\nimport { SENTRY_CONTENT_TYPE } from \"../constants.ts\";\nimport {\n type FormatterRegistry,\n type FormatterType,\n applyFormatter,\n humanFormatters,\n jsonFormatters,\n logfmtFormatters,\n mdFormatters,\n} from \"../formatters/index.ts\";\nimport { logger } from \"../logger.ts\";\nimport { setupSpotlight } from \"../main.ts\";\nimport type { ParsedEnvelope } from \"../parser/index.ts\";\nimport type { CLIHandlerOptions, Command, CommandMeta } from \"../types/cli.ts\";\nimport { getSpotlightURL } from \"../utils/extras.ts\";\nimport { getBuffer } from \"../utils/index.ts\";\n\nexport type OnItemCallback = (\n type: string,\n item: ParsedEnvelope[\"envelope\"][1][number],\n envelopeHeader: ParsedEnvelope[\"envelope\"][0],\n) => boolean;\nexport const NAME_TO_TYPE_MAPPING: Record<string, string[]> = Object.freeze({\n traces: [\"transaction\", \"span\"],\n // profiles: [\"profile\"],\n logs: [\"log\"],\n attachments: [\"attachment\"],\n errors: [\"event\"],\n // sessions: [\"session\"],\n // replays: [\"replay_video\"],\n // client_report\n});\n\nconst SUPPORTED_ENVELOPE_TYPES = new Set(Object.values(NAME_TO_TYPE_MAPPING).flat());\nexport const EVERYTHING_MAGIC_WORDS = new Set([\"everything\", \"all\", \"*\"]);\nexport const SUPPORTED_TAIL_ARGS = new Set([...Object.keys(NAME_TO_TYPE_MAPPING), ...EVERYTHING_MAGIC_WORDS]);\n\nexport const meta: CommandMeta = {\n name: \"tail\",\n short: `Tail Sentry events (types: ${Object.keys(NAME_TO_TYPE_MAPPING).join(\", \")})`,\n usage: \"spotlight tail [types...] [options]\",\n long: `Stream Sentry events to your terminal in real-time.\n\nAvailable event types:\n ${Object.keys(NAME_TO_TYPE_MAPPING).join(\", \")}\n\nMagic words (to tail everything):\n ${[...EVERYTHING_MAGIC_WORDS].join(\", \")}\n\nUse -f/--format to change output format (human, logfmt, json, md).\nConnects to existing sidecar if running, otherwise starts a new one.`,\n examples: [\n \"spotlight tail # Tail all event types (human format)\",\n \"spotlight tail errors # Tail only errors\",\n \"spotlight tail errors logs # Tail errors and logs\",\n \"spotlight tail --format json # Use JSON output format\",\n \"spotlight tail traces -f logfmt # Tail traces with logfmt format\",\n ],\n};\n\nconst FORMATTERS: Record<FormatterType, FormatterRegistry> = {\n md: mdFormatters,\n logfmt: logfmtFormatters,\n json: jsonFormatters,\n human: humanFormatters,\n};\n\nconst connectUpstream = async (port: number) =>\n new Promise<EventSource>((resolve, reject) => {\n const client = new EventSource(getSpotlightURL(port));\n client.onerror = reject;\n client.onopen = () => resolve(client);\n });\n\nexport async function handler(\n { port, cmdArgs, basePath, filesToServe, format = \"logfmt\", allowedOrigins }: CLIHandlerOptions,\n onItem?: OnItemCallback,\n): Promise<ServerType | undefined> {\n const eventTypes = cmdArgs.length > 0 ? cmdArgs.map(arg => arg.toLowerCase()) : [\"everything\"];\n for (const eventType of eventTypes) {\n if (!SUPPORTED_TAIL_ARGS.has(eventType)) {\n logger.error(`Error: Unsupported argument \"${eventType}\".`);\n logger.error(`Supported arguments are: ${[...SUPPORTED_TAIL_ARGS].join(\", \")}`);\n process.exit(1);\n }\n }\n\n // Track which event types users tail\n for (const eventType of eventTypes) {\n metrics.count(\"cli.tail.event_type\", 1, { attributes: { type: eventType } });\n }\n\n const formatter = FORMATTERS[format];\n const types = eventTypes.some(type => EVERYTHING_MAGIC_WORDS.has(type))\n ? SUPPORTED_ENVELOPE_TYPES\n : new Set([...eventTypes.flatMap(type => NAME_TO_TYPE_MAPPING[type] || [])]);\n const onEnvelope: (envelope: ParsedEnvelope[\"envelope\"]) => void = envelope => {\n const [envelopeHeader, items] = envelope;\n const formatted: string[] = [];\n\n for (const item of items) {\n const [{ type }, payload] = item;\n\n if (!type || !types.has(type)) {\n // Skip if not a type we're interested in\n continue;\n }\n\n // Check if this event type is supported by the formatter\n if (!(type in formatter)) {\n continue;\n }\n\n if (onItem && !onItem(type, item, envelopeHeader)) {\n continue;\n }\n\n formatted.push(...applyFormatter(formatter, type as keyof FormatterRegistry, payload, envelopeHeader));\n }\n\n if (formatted.length > 0) {\n console.log(formatted.join(\"\\n\"));\n }\n };\n\n // try to connect to an already existing server first\n try {\n const client = await connectUpstream(port);\n client.addEventListener(SENTRY_CONTENT_TYPE, event => onEnvelope!(JSON.parse(event.data)));\n // Early return - don't start our own server if we can connect to an upstream one\n return undefined;\n } catch (err) {\n // if we fail, fine then we'll start our own\n if (err instanceof Error && !err.message?.includes(port.toString())) {\n captureException(err);\n logger.error(\"Error when trying to connect to upstream sidecar:\");\n logger.error(err);\n process.exit(1);\n }\n }\n\n const serverInstance = await setupSpotlight({ port, filesToServe, basePath, isStandalone: true, allowedOrigins });\n\n // Subscribe the onEnvelope callback to the message buffer\n // This ensures it gets called whenever any envelope is added to the buffer\n getBuffer().subscribe(container => {\n const parsedEnvelope = container.getParsedEnvelope();\n if (parsedEnvelope) {\n onEnvelope(parsedEnvelope.envelope);\n }\n });\n\n return serverInstance;\n}\n\nexport default { meta, handler } satisfies Command;\n"],"names":["mdFormatters","logfmtFormatters","jsonFormatters","humanFormatters"],"mappings":"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"}
@@ -1,16 +1,18 @@
1
1
  import { FormatterType } from './formatters/types.ts';
2
- import { CLIHandler, CLIHandlerOptions } from './types/cli.ts';
2
+ import { CLIHandlerOptions, Command } from './types/cli.ts';
3
3
  export type CLIArgs = {
4
4
  port: number;
5
5
  debug: boolean;
6
6
  help: boolean;
7
+ open: boolean;
7
8
  format: FormatterType;
8
9
  cmd: string | undefined;
9
10
  cmdArgs: string[];
10
11
  allowedOrigins: string[];
11
12
  };
12
13
  export declare function parseCLIArgs(): CLIArgs;
13
- export declare const CLI_CMD_MAP: Map<string | undefined, CLIHandler>;
14
+ export declare const COMMANDS: Command[];
15
+ export declare const CLI_CMD_MAP: Map<string | undefined, import('./types/cli.ts').CLIHandler>;
14
16
  export declare function main({ basePath, filesToServe, }?: {
15
17
  basePath?: CLIHandlerOptions["basePath"];
16
18
  filesToServe?: CLIHandlerOptions["filesToServe"];
@@ -2,7 +2,7 @@
2
2
  !function() {
3
3
  try {
4
4
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
5
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "2fc3f6e8-14bb-49cb-b7d3-76d936f1e359", e._sentryDebugIdIdentifier = "sentry-dbid-2fc3f6e8-14bb-49cb-b7d3-76d936f1e359");
5
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "df0f70e6-e8df-4b3a-bb62-3651a132707e", e._sentryDebugIdIdentifier = "sentry-dbid-df0f70e6-e8df-4b3a-bb62-3651a132707e");
6
6
  } catch (e2) {
7
7
  }
8
8
  }();
@@ -46,6 +46,11 @@ const PARSE_ARGS_CONFIG = {
46
46
  type: "boolean",
47
47
  default: false
48
48
  },
49
+ open: {
50
+ type: "boolean",
51
+ short: "o",
52
+ default: false
53
+ },
49
54
  help: {
50
55
  type: "boolean",
51
56
  short: "h",
@@ -63,9 +68,10 @@ function parseCLIArgs() {
63
68
  tokens: true
64
69
  });
65
70
  let cmdArgs = void 0;
66
- const runToken = preParse.tokens.find((token) => token.kind === "positional" && token.value === "run");
67
- if (runToken) {
68
- const cutOff = preParse.tokens.find((token) => token.index > runToken.index && token.kind === "positional");
71
+ const firstPositional = preParse.tokens.find((token) => token.kind === "positional");
72
+ const isRunCommand = firstPositional?.value === "run";
73
+ if (isRunCommand && firstPositional) {
74
+ const cutOff = preParse.tokens.find((token) => token.index > firstPositional.index && token.kind === "positional");
69
75
  cmdArgs = cutOff ? args.splice(cutOff.index) : [];
70
76
  }
71
77
  const { values, positionals } = parseArgs({
@@ -73,7 +79,7 @@ function parseCLIArgs() {
73
79
  ...PARSE_ARGS_CONFIG
74
80
  });
75
81
  const portInput = positionals.length === 1 && /^\d{1,5}$/.test(positionals[0]) ? positionals.shift() : values.port;
76
- const port = portInput != null ? Number(portInput) : runToken ? MAGIC_PORT_FOR_DYNAMIC_ASSIGNMENT : DEFAULT_PORT;
82
+ const port = portInput != null ? Number(portInput) : isRunCommand ? MAGIC_PORT_FOR_DYNAMIC_ASSIGNMENT : DEFAULT_PORT;
77
83
  if (Number.isNaN(port)) {
78
84
  console.error(`Error: Invalid port number '${portInput}'`);
79
85
  console.error("Port must be a valid number between 1 and 65535");
@@ -98,6 +104,7 @@ function parseCLIArgs() {
98
104
  const result = {
99
105
  debug: values.debug,
100
106
  help: values.help,
107
+ open: values.open,
101
108
  format,
102
109
  port,
103
110
  cmd: positionals[0],
@@ -106,23 +113,21 @@ function parseCLIArgs() {
106
113
  };
107
114
  return result;
108
115
  }
109
- const CLI_CMD_MAP = /* @__PURE__ */ new Map([
116
+ const COMMANDS = [run, tail, mcp, server];
117
+ const CLI_CMD_MAP = new Map([
110
118
  ["help", showHelp],
111
- ["mcp", mcp],
112
- ["tail", tail],
113
- ["run", run],
114
- ["server", server],
115
- [void 0, server]
119
+ ...COMMANDS.map((cmd) => [cmd.meta.name, cmd.handler]),
120
+ [void 0, server.handler]
116
121
  ]);
117
122
  async function main({
118
123
  basePath,
119
124
  filesToServe
120
125
  } = {}) {
121
- let { cmd, cmdArgs, help, port, debug, format, allowedOrigins } = parseCLIArgs();
126
+ const { cmd, cmdArgs, help, port, debug, format, allowedOrigins, open } = parseCLIArgs();
122
127
  if (debug || process.env.SPOTLIGHT_DEBUG) {
123
128
  enableDebugLogging(true);
124
129
  }
125
- const spotlightVersion = "4.7.2";
130
+ const spotlightVersion = "4.9.0";
126
131
  logger.info(`Spotlight by Sentry - v${spotlightVersion}`);
127
132
  metrics.count("cli.invocation", 1, {
128
133
  attributes: {
@@ -131,15 +136,18 @@ async function main({
131
136
  debug: String(debug)
132
137
  }
133
138
  });
134
- if (help) {
135
- cmd = "help";
136
- cmdArgs = [];
139
+ if (help || cmd === "help") {
140
+ const targetCmd = cmd === "help" ? cmdArgs[0] : cmd;
141
+ return showHelp({
142
+ cmdArgs: targetCmd ? [targetCmd] : []
143
+ });
137
144
  }
138
145
  const handler = CLI_CMD_MAP.get(cmd) || showHelp;
139
- return await handler({ cmd, cmdArgs, port, help, debug, format, basePath, filesToServe, allowedOrigins });
146
+ return await handler({ cmd, cmdArgs, port, help, debug, format, basePath, filesToServe, allowedOrigins, open });
140
147
  }
141
148
  export {
142
149
  CLI_CMD_MAP,
150
+ COMMANDS,
143
151
  main,
144
152
  parseCLIArgs
145
153
  };
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sources":["../../src/server/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { parseArgs } from \"node:util\";\nimport { metrics } from \"@sentry/node\";\nimport showHelp from \"./cli/help.ts\";\nimport mcp from \"./cli/mcp.ts\";\nimport run from \"./cli/run.ts\";\nimport server from \"./cli/server.ts\";\nimport tail from \"./cli/tail.ts\";\nimport { DEFAULT_PORT } from \"./constants.ts\";\nimport { AVAILABLE_FORMATTERS } from \"./formatters/types.ts\";\nimport type { FormatterType } from \"./formatters/types.ts\";\nimport { enableDebugLogging, logger } from \"./logger.ts\";\nimport type { CLIHandler, CLIHandlerOptions } from \"./types/cli.ts\";\n\n// When port is set to `0` for a server to listen on,\n// it tells the OS to find a random available port.\n// This can then be retrieved after the server starts.\nconst MAGIC_PORT_FOR_DYNAMIC_ASSIGNMENT = 0;\nconst PARSE_ARGS_CONFIG = {\n options: {\n port: {\n type: \"string\",\n short: \"p\",\n default: undefined,\n },\n debug: {\n type: \"boolean\",\n short: \"d\",\n default: false,\n },\n format: {\n type: \"string\",\n short: \"f\",\n default: \"human\",\n },\n \"allowed-origin\": {\n type: \"string\",\n short: \"A\",\n multiple: true,\n default: [] as string[],\n },\n // Deprecated -- use the positional `mcp` argument instead\n \"stdio-mcp\": {\n type: \"boolean\",\n default: false,\n },\n help: {\n type: \"boolean\",\n short: \"h\",\n default: false,\n },\n },\n allowPositionals: true,\n strict: true,\n} as const;\n\nexport type CLIArgs = {\n port: number;\n debug: boolean;\n help: boolean;\n format: FormatterType;\n cmd: string | undefined;\n cmdArgs: string[];\n allowedOrigins: string[];\n};\n\nexport function parseCLIArgs(): CLIArgs {\n const args = Array.from(process.argv).slice(2);\n const preParse = parseArgs({\n ...PARSE_ARGS_CONFIG,\n strict: false,\n tokens: true,\n });\n let cmdArgs: string[] | undefined = undefined;\n const runToken = preParse.tokens.find(token => token.kind === \"positional\" && token.value === \"run\");\n if (runToken) {\n const cutOff = preParse.tokens.find(token => token.index > runToken.index && token.kind === \"positional\");\n cmdArgs = cutOff ? args.splice(cutOff.index) : [];\n }\n const { values, positionals } = parseArgs({\n args,\n ...PARSE_ARGS_CONFIG,\n });\n\n // Handle legacy positional argument for port (backwards compatibility)\n const portInput = positionals.length === 1 && /^\\d{1,5}$/.test(positionals[0]) ? positionals.shift() : values.port;\n\n const port = portInput != null ? Number(portInput) : runToken ? MAGIC_PORT_FOR_DYNAMIC_ASSIGNMENT : DEFAULT_PORT;\n if (Number.isNaN(port)) {\n // Validate port number\n console.error(`Error: Invalid port number '${portInput}'`);\n console.error(\"Port must be a valid number between 1 and 65535\");\n process.exit(1);\n }\n\n if (port < 0 || port > 65535) {\n console.error(`Error: Port ${port} is out of valid range (1-65535 or 0 for automatic assignment)`);\n process.exit(1);\n }\n\n if (values[\"stdio-mcp\"]) {\n positionals.unshift(\"mcp\");\n console.warn(\"Warning: --stdio-mcp is deprecated. Please use the positional argument 'mcp' instead.\");\n }\n\n const format = values.format as string;\n if (!AVAILABLE_FORMATTERS.includes(format as FormatterType)) {\n console.error(`Error: Invalid format '${format}'`);\n console.error(`Valid formats are: ${AVAILABLE_FORMATTERS.join(\", \")}`);\n process.exit(1);\n }\n\n // Parse allowed origins - supports both repeatable flags and comma-separated values\n const allowedOriginInput = values[\"allowed-origin\"] as string[];\n const allowedOrigins = allowedOriginInput.flatMap(origin => origin.split(\",\").map(o => o.trim())).filter(Boolean);\n\n const result: CLIArgs = {\n debug: values.debug as boolean,\n help: values.help as boolean,\n format: format as FormatterType,\n port,\n cmd: positionals[0],\n cmdArgs: cmdArgs ?? positionals.slice(1),\n allowedOrigins,\n };\n\n return result;\n}\nexport const CLI_CMD_MAP = new Map<string | undefined, CLIHandler>([\n [\"help\", showHelp],\n [\"mcp\", mcp],\n [\"tail\", tail],\n [\"run\", run],\n [\"server\", server],\n [undefined, server],\n]);\n\nexport async function main({\n basePath,\n filesToServe,\n}: { basePath?: CLIHandlerOptions[\"basePath\"]; filesToServe?: CLIHandlerOptions[\"filesToServe\"] } = {}) {\n let { cmd, cmdArgs, help, port, debug, format, allowedOrigins } = parseCLIArgs();\n if (debug || process.env.SPOTLIGHT_DEBUG) {\n enableDebugLogging(true);\n }\n const spotlightVersion = process.env.npm_package_version || \"{unknown}\";\n logger.info(`Spotlight by Sentry - v${spotlightVersion}`);\n\n metrics.count(\"cli.invocation\", 1, {\n attributes: {\n command: cmd || \"server\",\n format,\n debug: String(debug),\n },\n });\n\n if (help) {\n cmd = \"help\";\n cmdArgs = [];\n }\n\n const handler = CLI_CMD_MAP.get(cmd) || showHelp;\n\n return await handler({ cmd, cmdArgs, port, help, debug, format, basePath, filesToServe, allowedOrigins });\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sources":["../../src/server/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { parseArgs } from \"node:util\";\nimport { metrics } from \"@sentry/node\";\nimport showHelp from \"./cli/help.ts\";\nimport mcp from \"./cli/mcp.ts\";\nimport run from \"./cli/run.ts\";\nimport server from \"./cli/server.ts\";\nimport tail from \"./cli/tail.ts\";\nimport { DEFAULT_PORT } from \"./constants.ts\";\nimport { AVAILABLE_FORMATTERS } from \"./formatters/types.ts\";\nimport type { FormatterType } from \"./formatters/types.ts\";\nimport { enableDebugLogging, logger } from \"./logger.ts\";\nimport type { CLIHandlerOptions, Command } from \"./types/cli.ts\";\n\n// When port is set to `0` for a server to listen on,\n// it tells the OS to find a random available port.\n// This can then be retrieved after the server starts.\nconst MAGIC_PORT_FOR_DYNAMIC_ASSIGNMENT = 0;\nconst PARSE_ARGS_CONFIG = {\n options: {\n port: {\n type: \"string\",\n short: \"p\",\n default: undefined,\n },\n debug: {\n type: \"boolean\",\n short: \"d\",\n default: false,\n },\n format: {\n type: \"string\",\n short: \"f\",\n default: \"human\",\n },\n \"allowed-origin\": {\n type: \"string\",\n short: \"A\",\n multiple: true,\n default: [] as string[],\n },\n // Deprecated -- use the positional `mcp` argument instead\n \"stdio-mcp\": {\n type: \"boolean\",\n default: false,\n },\n open: {\n type: \"boolean\",\n short: \"o\",\n default: false,\n },\n help: {\n type: \"boolean\",\n short: \"h\",\n default: false,\n },\n },\n allowPositionals: true,\n strict: true,\n} as const;\n\nexport type CLIArgs = {\n port: number;\n debug: boolean;\n help: boolean;\n open: boolean;\n format: FormatterType;\n cmd: string | undefined;\n cmdArgs: string[];\n allowedOrigins: string[];\n};\n\nexport function parseCLIArgs(): CLIArgs {\n const args = Array.from(process.argv).slice(2);\n const preParse = parseArgs({\n ...PARSE_ARGS_CONFIG,\n strict: false,\n tokens: true,\n });\n let cmdArgs: string[] | undefined = undefined;\n // Only apply special handling for \"run\" if it's the actual command (first positional),\n // not when it appears as an argument to another command like \"spotlight help run\"\n const firstPositional = preParse.tokens.find(token => token.kind === \"positional\");\n const isRunCommand = firstPositional?.value === \"run\";\n if (isRunCommand && firstPositional) {\n const cutOff = preParse.tokens.find(token => token.index > firstPositional.index && token.kind === \"positional\");\n cmdArgs = cutOff ? args.splice(cutOff.index) : [];\n }\n const { values, positionals } = parseArgs({\n args,\n ...PARSE_ARGS_CONFIG,\n });\n\n // Handle legacy positional argument for port (backwards compatibility)\n const portInput = positionals.length === 1 && /^\\d{1,5}$/.test(positionals[0]) ? positionals.shift() : values.port;\n\n const port = portInput != null ? Number(portInput) : isRunCommand ? MAGIC_PORT_FOR_DYNAMIC_ASSIGNMENT : DEFAULT_PORT;\n if (Number.isNaN(port)) {\n // Validate port number\n console.error(`Error: Invalid port number '${portInput}'`);\n console.error(\"Port must be a valid number between 1 and 65535\");\n process.exit(1);\n }\n\n if (port < 0 || port > 65535) {\n console.error(`Error: Port ${port} is out of valid range (1-65535 or 0 for automatic assignment)`);\n process.exit(1);\n }\n\n if (values[\"stdio-mcp\"]) {\n positionals.unshift(\"mcp\");\n console.warn(\"Warning: --stdio-mcp is deprecated. Please use the positional argument 'mcp' instead.\");\n }\n\n const format = values.format as string;\n if (!AVAILABLE_FORMATTERS.includes(format as FormatterType)) {\n console.error(`Error: Invalid format '${format}'`);\n console.error(`Valid formats are: ${AVAILABLE_FORMATTERS.join(\", \")}`);\n process.exit(1);\n }\n\n // Parse allowed origins - supports both repeatable flags and comma-separated values\n const allowedOriginInput = values[\"allowed-origin\"] as string[];\n const allowedOrigins = allowedOriginInput.flatMap(origin => origin.split(\",\").map(o => o.trim())).filter(Boolean);\n\n const result: CLIArgs = {\n debug: values.debug as boolean,\n help: values.help as boolean,\n open: values.open as boolean,\n format: format as FormatterType,\n port,\n cmd: positionals[0],\n cmdArgs: cmdArgs ?? positionals.slice(1),\n allowedOrigins,\n };\n\n return result;\n}\n// Command registry - each command provides its own metadata\nexport const COMMANDS: Command[] = [run, tail, mcp, server];\n\n// Build command map from registry for fast lookup\nexport const CLI_CMD_MAP = new Map<string | undefined, Command[\"handler\"]>([\n [\"help\", showHelp],\n ...COMMANDS.map(cmd => [cmd.meta.name, cmd.handler] as [string, Command[\"handler\"]]),\n [undefined, server.handler],\n]);\n\nexport async function main({\n basePath,\n filesToServe,\n}: { basePath?: CLIHandlerOptions[\"basePath\"]; filesToServe?: CLIHandlerOptions[\"filesToServe\"] } = {}) {\n const { cmd, cmdArgs, help, port, debug, format, allowedOrigins, open } = parseCLIArgs();\n if (debug || process.env.SPOTLIGHT_DEBUG) {\n enableDebugLogging(true);\n }\n const spotlightVersion = process.env.npm_package_version || \"{unknown}\";\n logger.info(`Spotlight by Sentry - v${spotlightVersion}`);\n\n metrics.count(\"cli.invocation\", 1, {\n attributes: {\n command: cmd || \"server\",\n format,\n debug: String(debug),\n },\n });\n\n // Handle help: `spotlight --help`, `spotlight help`, `spotlight help <cmd>`, or `spotlight <cmd> --help`\n if (help || cmd === \"help\") {\n // If `spotlight <cmd> --help`, show help for that specific command\n // If `spotlight help <cmd>`, cmdArgs[0] contains the command name\n const targetCmd = cmd === \"help\" ? cmdArgs[0] : cmd;\n return showHelp({\n cmd: \"help\",\n cmdArgs: targetCmd ? [targetCmd] : [],\n port,\n help: true,\n debug,\n format,\n basePath,\n filesToServe,\n allowedOrigins,\n open,\n });\n }\n\n const handler = CLI_CMD_MAP.get(cmd) || showHelp;\n\n return await handler({ cmd, cmdArgs, port, help, debug, format, basePath, filesToServe, allowedOrigins, open });\n}\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Envelope, EnvelopeItem } from '@sentry/core';
2
- import { z } from 'zod';
2
+ import { z } from 'zod/v3';
3
3
  import { EventContainer } from '../../utils/index.ts';
4
4
  import { ErrorEventSchema } from '../schema.ts';
5
5
  export declare function formatErrorEnvelope(container: EventContainer): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sources":["../../../../src/server/formatters/md/errors.ts"],"sourcesContent":["import type { Envelope, EnvelopeItem } from \"@sentry/core\";\nimport type { z } from \"zod\";\nimport { type SentryErrorEvent, type SentryEvent, isErrorEvent } from \"../../parser/index.ts\";\nimport type { EventContainer } from \"../../utils/index.ts\";\nimport type { ErrorEventSchema } from \"../schema.ts\";\nimport { formatTimestamp } from \"../utils.ts\";\nimport { formatEventOutput } from \"./event.ts\";\n\nexport function formatErrorEnvelope(container: EventContainer) {\n const processedEnvelope = container.getParsedEnvelope();\n\n const {\n envelope: [envelopeHeader, items],\n } = processedEnvelope;\n\n const formatted: string[] = [];\n for (const item of items) {\n const [{ type }, payload] = item;\n\n if (type === \"event\" && isErrorEvent(payload as SentryEvent)) {\n formatted.push(...formatError(payload, envelopeHeader));\n }\n }\n\n return formatted;\n}\n\nexport function processErrorEvent(event: any): z.infer<typeof ErrorEventSchema> {\n const entries: z.infer<typeof ErrorEventSchema>[\"entries\"] = [];\n\n if (event.exception) {\n entries.push({\n type: \"exception\",\n data: event.exception,\n });\n }\n\n if (event.request) {\n entries.push({\n type: \"request\",\n data: event.request,\n });\n }\n\n if (event.breadcrumbs) {\n entries.push({\n type: \"breadcrumbs\",\n data: event.breadcrumbs,\n });\n }\n\n if (event.spans) {\n entries.push({\n type: \"spans\",\n data: event.spans,\n });\n }\n\n if (event.threads) {\n entries.push({\n type: \"threads\",\n data: event.threads,\n });\n }\n\n const message = typeof event.message === \"string\" ? event.message : (event.message?.formatted ?? \"\");\n\n return {\n message,\n id: event.event_id ?? \"\",\n type: \"error\" as const,\n culprit: event.culprit ?? null,\n tags: Object.entries(event.tags ?? {}).map(([key, value]) => ({\n key,\n value: String(value),\n })),\n dateCreated: formatTimestamp(event.timestamp),\n title: message,\n entries,\n contexts: event.contexts as any,\n platform: event.platform,\n };\n}\n\n/**\n * Format an error event to markdown string\n */\nexport function formatError(payload: EnvelopeItem[1], _envelopeHeader: Envelope[0]): string[] {\n const event = payload as SentryErrorEvent;\n return [formatEventOutput(processErrorEvent(event))];\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAQO,SAAS,oBAAoB,WAA2B;AAC7D,QAAM,oBAAoB,UAAU,kBAAA;AAEpC,QAAM;AAAA,IACJ,UAAU,CAAC,gBAAgB,KAAK;AAAA,EAAA,IAC9B;AAEJ,QAAM,YAAsB,CAAA;AAC5B,aAAW,QAAQ,OAAO;AACxB,UAAM,CAAC,EAAE,QAAQ,OAAO,IAAI;AAE5B,QAAI,SAAS,WAAW,aAAa,OAAsB,GAAG;AAC5D,gBAAU,KAAK,GAAG,YAAY,OAAuB,CAAC;AAAA,IACxD;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,kBAAkB,OAA8C;AAC9E,QAAM,UAAuD,CAAA;AAE7D,MAAI,MAAM,WAAW;AACnB,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,MAAM,MAAM;AAAA,IAAA,CACb;AAAA,EACH;AAEA,MAAI,MAAM,SAAS;AACjB,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,MAAM,MAAM;AAAA,IAAA,CACb;AAAA,EACH;AAEA,MAAI,MAAM,aAAa;AACrB,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,MAAM,MAAM;AAAA,IAAA,CACb;AAAA,EACH;AAEA,MAAI,MAAM,OAAO;AACf,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,MAAM,MAAM;AAAA,IAAA,CACb;AAAA,EACH;AAEA,MAAI,MAAM,SAAS;AACjB,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,MAAM,MAAM;AAAA,IAAA,CACb;AAAA,EACH;AAEA,QAAM,UAAU,OAAO,MAAM,YAAY,WAAW,MAAM,UAAW,MAAM,SAAS,aAAa;AAEjG,SAAO;AAAA,IACL;AAAA,IACA,IAAI,MAAM,YAAY;AAAA,IACtB,MAAM;AAAA,IACN,SAAS,MAAM,WAAW;AAAA,IAC1B,MAAM,OAAO,QAAQ,MAAM,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO;AAAA,MAC5D;AAAA,MACA,OAAO,OAAO,KAAK;AAAA,IAAA,EACnB;AAAA,IACF,aAAa,gBAAgB,MAAM,SAAS;AAAA,IAC5C,OAAO;AAAA,IACP;AAAA,IACA,UAAU,MAAM;AAAA,IAChB,UAAU,MAAM;AAAA,EAAA;AAEpB;AAKO,SAAS,YAAY,SAA0B,iBAAwC;AAC5F,QAAM,QAAQ;AACd,SAAO,CAAC,kBAAkB,kBAAkB,KAAK,CAAC,CAAC;AACrD;"}
1
+ {"version":3,"file":"errors.js","sources":["../../../../src/server/formatters/md/errors.ts"],"sourcesContent":["import type { Envelope, EnvelopeItem } from \"@sentry/core\";\nimport type { z } from \"zod/v3\";\nimport { type SentryErrorEvent, type SentryEvent, isErrorEvent } from \"../../parser/index.ts\";\nimport type { EventContainer } from \"../../utils/index.ts\";\nimport type { ErrorEventSchema } from \"../schema.ts\";\nimport { formatTimestamp } from \"../utils.ts\";\nimport { formatEventOutput } from \"./event.ts\";\n\nexport function formatErrorEnvelope(container: EventContainer) {\n const processedEnvelope = container.getParsedEnvelope();\n\n const {\n envelope: [envelopeHeader, items],\n } = processedEnvelope;\n\n const formatted: string[] = [];\n for (const item of items) {\n const [{ type }, payload] = item;\n\n if (type === \"event\" && isErrorEvent(payload as SentryEvent)) {\n formatted.push(...formatError(payload, envelopeHeader));\n }\n }\n\n return formatted;\n}\n\nexport function processErrorEvent(event: any): z.infer<typeof ErrorEventSchema> {\n const entries: z.infer<typeof ErrorEventSchema>[\"entries\"] = [];\n\n if (event.exception) {\n entries.push({\n type: \"exception\",\n data: event.exception,\n });\n }\n\n if (event.request) {\n entries.push({\n type: \"request\",\n data: event.request,\n });\n }\n\n if (event.breadcrumbs) {\n entries.push({\n type: \"breadcrumbs\",\n data: event.breadcrumbs,\n });\n }\n\n if (event.spans) {\n entries.push({\n type: \"spans\",\n data: event.spans,\n });\n }\n\n if (event.threads) {\n entries.push({\n type: \"threads\",\n data: event.threads,\n });\n }\n\n const message = typeof event.message === \"string\" ? event.message : (event.message?.formatted ?? \"\");\n\n return {\n message,\n id: event.event_id ?? \"\",\n type: \"error\" as const,\n culprit: event.culprit ?? null,\n tags: Object.entries(event.tags ?? {}).map(([key, value]) => ({\n key,\n value: String(value),\n })),\n dateCreated: formatTimestamp(event.timestamp),\n title: message,\n entries,\n contexts: event.contexts as any,\n platform: event.platform,\n };\n}\n\n/**\n * Format an error event to markdown string\n */\nexport function formatError(payload: EnvelopeItem[1], _envelopeHeader: Envelope[0]): string[] {\n const event = payload as SentryErrorEvent;\n return [formatEventOutput(processErrorEvent(event))];\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAQO,SAAS,oBAAoB,WAA2B;AAC7D,QAAM,oBAAoB,UAAU,kBAAA;AAEpC,QAAM;AAAA,IACJ,UAAU,CAAC,gBAAgB,KAAK;AAAA,EAAA,IAC9B;AAEJ,QAAM,YAAsB,CAAA;AAC5B,aAAW,QAAQ,OAAO;AACxB,UAAM,CAAC,EAAE,QAAQ,OAAO,IAAI;AAE5B,QAAI,SAAS,WAAW,aAAa,OAAsB,GAAG;AAC5D,gBAAU,KAAK,GAAG,YAAY,OAAuB,CAAC;AAAA,IACxD;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,kBAAkB,OAA8C;AAC9E,QAAM,UAAuD,CAAA;AAE7D,MAAI,MAAM,WAAW;AACnB,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,MAAM,MAAM;AAAA,IAAA,CACb;AAAA,EACH;AAEA,MAAI,MAAM,SAAS;AACjB,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,MAAM,MAAM;AAAA,IAAA,CACb;AAAA,EACH;AAEA,MAAI,MAAM,aAAa;AACrB,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,MAAM,MAAM;AAAA,IAAA,CACb;AAAA,EACH;AAEA,MAAI,MAAM,OAAO;AACf,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,MAAM,MAAM;AAAA,IAAA,CACb;AAAA,EACH;AAEA,MAAI,MAAM,SAAS;AACjB,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,MAAM,MAAM;AAAA,IAAA,CACb;AAAA,EACH;AAEA,QAAM,UAAU,OAAO,MAAM,YAAY,WAAW,MAAM,UAAW,MAAM,SAAS,aAAa;AAEjG,SAAO;AAAA,IACL;AAAA,IACA,IAAI,MAAM,YAAY;AAAA,IACtB,MAAM;AAAA,IACN,SAAS,MAAM,WAAW;AAAA,IAC1B,MAAM,OAAO,QAAQ,MAAM,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO;AAAA,MAC5D;AAAA,MACA,OAAO,OAAO,KAAK;AAAA,IAAA,EACnB;AAAA,IACF,aAAa,gBAAgB,MAAM,SAAS;AAAA,IAC5C,OAAO;AAAA,IACP;AAAA,IACA,UAAU,MAAM;AAAA,IAChB,UAAU,MAAM;AAAA,EAAA;AAEpB;AAKO,SAAS,YAAY,SAA0B,iBAAwC;AAC5F,QAAM,QAAQ;AACd,SAAO,CAAC,kBAAkB,kBAAkB,KAAK,CAAC,CAAC;AACrD;"}
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import { EventSchema } from '../schema.ts';
3
3
  export type Event = z.infer<typeof EventSchema>;
4
4
  /**