@danieljvdm/dev-kit 1.0.2 → 2.0.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 (329) hide show
  1. package/README.md +6 -6
  2. package/package.json +1 -1
  3. package/skill-sources.jsonc +2 -33
  4. package/skill-sources.lock.json +15 -117
  5. package/skills/animate/LICENSE +21 -0
  6. package/skills/animate/NOTICE +10 -0
  7. package/skills/animate/SKILL.md +34 -0
  8. package/skills/animate/references/gestures.md +27 -0
  9. package/skills/animate/references/glossary.md +136 -0
  10. package/skills/animate/references/implementation.md +22 -0
  11. package/skills/animate/references/opportunities.md +18 -0
  12. package/skills/animate/references/principles.md +48 -0
  13. package/skills/animate/references/review.md +19 -0
  14. package/skills/cloudflare-workers/LICENSE +202 -0
  15. package/skills/cloudflare-workers/NOTICE +9 -0
  16. package/skills/cloudflare-workers/SKILL.md +26 -0
  17. package/skills/cloudflare-workers/references/durable-objects.md +68 -0
  18. package/skills/cloudflare-workers/references/sandbox.md +48 -0
  19. package/skills/cloudflare-workers/references/workers.md +63 -0
  20. package/skills/cloudflare-workers/references/wrangler.md +56 -0
  21. package/skills/design-ui/LICENSE +21 -0
  22. package/skills/design-ui/NOTICE +8 -0
  23. package/skills/design-ui/SKILL.md +29 -0
  24. package/skills/design-ui/references/appearance.md +22 -0
  25. package/skills/design-ui/references/components.md +33 -0
  26. package/skills/design-ui/references/exploration.md +50 -0
  27. package/skills/design-ui/references/libraries.md +39 -0
  28. package/skills/design-ui/references/themes.md +23 -0
  29. package/skills/dev-kit/SKILL.md +19 -38
  30. package/skills/dev-kit/references/cloudflare-worker-api.md +1 -1
  31. package/skills/dev-kit/references/skills.md +2 -2
  32. package/skills/effect-development/SKILL.md +27 -0
  33. package/skills/effect-development/agents/openai.yaml +4 -0
  34. package/skills/effect-development/references/api/index.md +32 -0
  35. package/skills/effect-development/references/api/schema-codecs.md +15 -0
  36. package/skills/{build-effect-apis/references → effect-development/references/api}/verification.md +10 -5
  37. package/skills/{effect-architecture-audit/SKILL.md → effect-development/references/architecture/index.md} +1 -6
  38. package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-client.md +8 -6
  39. package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-testing.md +7 -2
  40. package/skills/effect-development/references/atom/index.md +40 -0
  41. package/skills/{build-effect-clis/references → effect-development/references/cli}/entrypoints-and-testing.md +6 -2
  42. package/skills/effect-development/references/cli/index.md +39 -0
  43. package/skills/effect-development/references/setup.md +15 -0
  44. package/skills/open-pull-request/SKILL.md +10 -70
  45. package/skills/open-pull-request/references/evidence.md +22 -0
  46. package/skills/open-pull-request/references/explanation.md +21 -0
  47. package/skills/open-pull-request/references/publication.md +21 -0
  48. package/skills/sentry/LICENSE +202 -0
  49. package/skills/sentry/LICENSE-UPSTREAM +21 -0
  50. package/skills/sentry/NOTICE +14 -0
  51. package/skills/sentry/SKILL.md +33 -0
  52. package/skills/sentry/references/alert-payloads.md +105 -0
  53. package/skills/sentry/references/alerts.md +17 -0
  54. package/skills/sentry/references/artifacts.md +25 -0
  55. package/skills/sentry/references/auth-token.md +65 -0
  56. package/skills/sentry/references/concepts/ai-monitoring.md +131 -0
  57. package/skills/sentry/references/concepts/choosing-a-signal.md +78 -0
  58. package/skills/sentry/references/concepts/crons.md +50 -0
  59. package/skills/sentry/references/concepts/data-scrubbing.md +43 -0
  60. package/skills/sentry/references/concepts/errors.md +40 -0
  61. package/skills/sentry/references/concepts/logging.md +85 -0
  62. package/skills/sentry/references/concepts/metrics.md +49 -0
  63. package/skills/sentry/references/concepts/monitors.md +78 -0
  64. package/skills/sentry/references/concepts/profiling.md +38 -0
  65. package/skills/sentry/references/concepts/reduce-volume.md +49 -0
  66. package/skills/sentry/references/concepts/releases.md +43 -0
  67. package/skills/sentry/references/concepts/session-replay.md +35 -0
  68. package/skills/sentry/references/concepts/tracing.md +54 -0
  69. package/skills/sentry/references/concepts/user-feedback.md +36 -0
  70. package/skills/sentry/references/debug-artifacts/android.md +68 -0
  71. package/skills/sentry/references/debug-artifacts/apple.md +96 -0
  72. package/skills/sentry/references/debug-artifacts/dotnet.md +70 -0
  73. package/skills/sentry/references/debug-artifacts/flutter.md +65 -0
  74. package/skills/sentry/references/debug-artifacts/index.md +75 -0
  75. package/skills/sentry/references/debug-artifacts/javascript.md +94 -0
  76. package/skills/sentry/references/debug-artifacts/matching.md +73 -0
  77. package/skills/sentry/references/debug-artifacts/react-native.md +75 -0
  78. package/skills/sentry/references/first-error-setup.md +25 -0
  79. package/skills/sentry/references/instrumentation.md +30 -0
  80. package/skills/sentry/references/issues.md +32 -0
  81. package/skills/sentry/references/new-project.md +17 -0
  82. package/skills/sentry/references/otel-exporter.md +30 -0
  83. package/skills/sentry/references/release-workflow.md +31 -0
  84. package/skills/sentry/references/releases/ci-pipeline.md +214 -0
  85. package/skills/sentry/references/releases/index.md +93 -0
  86. package/skills/sentry/references/releases/suspect-commits.md +155 -0
  87. package/skills/sentry/references/releases/tagging.md +131 -0
  88. package/skills/sentry/references/releases/troubleshooting.md +67 -0
  89. package/skills/sentry/references/sdks/android/crons.md +305 -0
  90. package/skills/sentry/references/sdks/android/error-monitoring.md +800 -0
  91. package/skills/sentry/references/sdks/android/index.md +748 -0
  92. package/skills/sentry/references/sdks/android/integrations.md +48 -0
  93. package/skills/sentry/references/sdks/android/logging.md +374 -0
  94. package/skills/sentry/references/sdks/android/metrics.md +288 -0
  95. package/skills/sentry/references/sdks/android/profiling.md +397 -0
  96. package/skills/sentry/references/sdks/android/session-replay.md +406 -0
  97. package/skills/sentry/references/sdks/android/tracing.md +861 -0
  98. package/skills/sentry/references/sdks/browser/error-monitoring.md +861 -0
  99. package/skills/sentry/references/sdks/browser/index.md +714 -0
  100. package/skills/sentry/references/sdks/browser/logging.md +315 -0
  101. package/skills/sentry/references/sdks/browser/profiling.md +236 -0
  102. package/skills/sentry/references/sdks/browser/session-replay.md +586 -0
  103. package/skills/sentry/references/sdks/browser/tracing.md +561 -0
  104. package/skills/sentry/references/sdks/browser/user-feedback.md +354 -0
  105. package/skills/sentry/references/sdks/cloudflare/ai-monitoring.md +661 -0
  106. package/skills/sentry/references/sdks/cloudflare/crons.md +231 -0
  107. package/skills/sentry/references/sdks/cloudflare/durable-objects.md +381 -0
  108. package/skills/sentry/references/sdks/cloudflare/error-monitoring.md +329 -0
  109. package/skills/sentry/references/sdks/cloudflare/index.md +698 -0
  110. package/skills/sentry/references/sdks/cloudflare/logging.md +169 -0
  111. package/skills/sentry/references/sdks/cloudflare/nodejs-compat.md +134 -0
  112. package/skills/sentry/references/sdks/cloudflare/tracing.md +475 -0
  113. package/skills/sentry/references/sdks/cocoa/error-monitoring.md +394 -0
  114. package/skills/sentry/references/sdks/cocoa/index.md +497 -0
  115. package/skills/sentry/references/sdks/cocoa/logging.md +209 -0
  116. package/skills/sentry/references/sdks/cocoa/metrics.md +136 -0
  117. package/skills/sentry/references/sdks/cocoa/profiling.md +223 -0
  118. package/skills/sentry/references/sdks/cocoa/session-replay.md +257 -0
  119. package/skills/sentry/references/sdks/cocoa/tracing.md +524 -0
  120. package/skills/sentry/references/sdks/cocoa/user-feedback.md +310 -0
  121. package/skills/sentry/references/sdks/dotnet/crons.md +465 -0
  122. package/skills/sentry/references/sdks/dotnet/error-monitoring.md +1100 -0
  123. package/skills/sentry/references/sdks/dotnet/index.md +614 -0
  124. package/skills/sentry/references/sdks/dotnet/logging.md +556 -0
  125. package/skills/sentry/references/sdks/dotnet/metrics.md +229 -0
  126. package/skills/sentry/references/sdks/dotnet/profiling.md +296 -0
  127. package/skills/sentry/references/sdks/dotnet/tracing.md +897 -0
  128. package/skills/sentry/references/sdks/elixir/crons.md +371 -0
  129. package/skills/sentry/references/sdks/elixir/error-monitoring.md +335 -0
  130. package/skills/sentry/references/sdks/elixir/index.md +383 -0
  131. package/skills/sentry/references/sdks/elixir/logging.md +239 -0
  132. package/skills/sentry/references/sdks/elixir/tracing.md +233 -0
  133. package/skills/sentry/references/sdks/flutter/ecosystem-integrations.md +70 -0
  134. package/skills/sentry/references/sdks/flutter/error-monitoring.md +312 -0
  135. package/skills/sentry/references/sdks/flutter/index.md +728 -0
  136. package/skills/sentry/references/sdks/flutter/logging.md +387 -0
  137. package/skills/sentry/references/sdks/flutter/metrics.md +310 -0
  138. package/skills/sentry/references/sdks/flutter/profiling.md +214 -0
  139. package/skills/sentry/references/sdks/flutter/session-replay.md +308 -0
  140. package/skills/sentry/references/sdks/flutter/tracing.md +502 -0
  141. package/skills/sentry/references/sdks/go/crons.md +270 -0
  142. package/skills/sentry/references/sdks/go/error-monitoring.md +361 -0
  143. package/skills/sentry/references/sdks/go/index.md +324 -0
  144. package/skills/sentry/references/sdks/go/logging.md +354 -0
  145. package/skills/sentry/references/sdks/go/metrics.md +273 -0
  146. package/skills/sentry/references/sdks/go/profiling.md +46 -0
  147. package/skills/sentry/references/sdks/go/tracing.md +366 -0
  148. package/skills/sentry/references/sdks/index.md +41 -0
  149. package/skills/sentry/references/sdks/nestjs/ai-monitoring.md +410 -0
  150. package/skills/sentry/references/sdks/nestjs/crons.md +268 -0
  151. package/skills/sentry/references/sdks/nestjs/error-monitoring.md +729 -0
  152. package/skills/sentry/references/sdks/nestjs/index.md +699 -0
  153. package/skills/sentry/references/sdks/nestjs/logging.md +174 -0
  154. package/skills/sentry/references/sdks/nestjs/metrics.md +243 -0
  155. package/skills/sentry/references/sdks/nestjs/profiling.md +127 -0
  156. package/skills/sentry/references/sdks/nestjs/tracing.md +762 -0
  157. package/skills/sentry/references/sdks/nextjs/ai-monitoring.md +494 -0
  158. package/skills/sentry/references/sdks/nextjs/crons.md +383 -0
  159. package/skills/sentry/references/sdks/nextjs/error-monitoring.md +974 -0
  160. package/skills/sentry/references/sdks/nextjs/index.md +491 -0
  161. package/skills/sentry/references/sdks/nextjs/logging.md +381 -0
  162. package/skills/sentry/references/sdks/nextjs/metrics.md +411 -0
  163. package/skills/sentry/references/sdks/nextjs/profiling.md +403 -0
  164. package/skills/sentry/references/sdks/nextjs/session-replay.md +462 -0
  165. package/skills/sentry/references/sdks/nextjs/tracing.md +628 -0
  166. package/skills/sentry/references/sdks/node/ai-monitoring.md +303 -0
  167. package/skills/sentry/references/sdks/node/crons.md +432 -0
  168. package/skills/sentry/references/sdks/node/error-monitoring.md +1125 -0
  169. package/skills/sentry/references/sdks/node/index.md +942 -0
  170. package/skills/sentry/references/sdks/node/logging.md +380 -0
  171. package/skills/sentry/references/sdks/node/metrics.md +278 -0
  172. package/skills/sentry/references/sdks/node/profiling.md +373 -0
  173. package/skills/sentry/references/sdks/node/tracing.md +878 -0
  174. package/skills/sentry/references/sdks/php/ai-monitoring.md +310 -0
  175. package/skills/sentry/references/sdks/php/crons.md +265 -0
  176. package/skills/sentry/references/sdks/php/error-monitoring.md +626 -0
  177. package/skills/sentry/references/sdks/php/index.md +362 -0
  178. package/skills/sentry/references/sdks/php/laravel.md +542 -0
  179. package/skills/sentry/references/sdks/php/logging.md +242 -0
  180. package/skills/sentry/references/sdks/php/metrics.md +193 -0
  181. package/skills/sentry/references/sdks/php/profiling.md +115 -0
  182. package/skills/sentry/references/sdks/php/symfony.md +552 -0
  183. package/skills/sentry/references/sdks/php/tracing.md +516 -0
  184. package/skills/sentry/references/sdks/python/ai-monitoring.md +351 -0
  185. package/skills/sentry/references/sdks/python/crons.md +218 -0
  186. package/skills/sentry/references/sdks/python/error-monitoring.md +292 -0
  187. package/skills/sentry/references/sdks/python/index.md +361 -0
  188. package/skills/sentry/references/sdks/python/logging.md +234 -0
  189. package/skills/sentry/references/sdks/python/metrics.md +154 -0
  190. package/skills/sentry/references/sdks/python/profiling.md +120 -0
  191. package/skills/sentry/references/sdks/python/tracing.md +364 -0
  192. package/skills/sentry/references/sdks/react/error-monitoring.md +1607 -0
  193. package/skills/sentry/references/sdks/react/index.md +492 -0
  194. package/skills/sentry/references/sdks/react/logging.md +364 -0
  195. package/skills/sentry/references/sdks/react/profiling.md +322 -0
  196. package/skills/sentry/references/sdks/react/react-features.md +1272 -0
  197. package/skills/sentry/references/sdks/react/session-replay.md +1193 -0
  198. package/skills/sentry/references/sdks/react/tracing.md +1415 -0
  199. package/skills/sentry/references/sdks/react-native/error-monitoring.md +1481 -0
  200. package/skills/sentry/references/sdks/react-native/expo-config-plugin.md +45 -0
  201. package/skills/sentry/references/sdks/react-native/index.md +1030 -0
  202. package/skills/sentry/references/sdks/react-native/logging.md +444 -0
  203. package/skills/sentry/references/sdks/react-native/profiling.md +386 -0
  204. package/skills/sentry/references/sdks/react-native/session-replay.md +704 -0
  205. package/skills/sentry/references/sdks/react-native/tracing.md +1086 -0
  206. package/skills/sentry/references/sdks/react-native/user-feedback.md +815 -0
  207. package/skills/sentry/references/sdks/react-router-framework/error-monitoring.md +127 -0
  208. package/skills/sentry/references/sdks/react-router-framework/index.md +411 -0
  209. package/skills/sentry/references/sdks/react-router-framework/logging.md +66 -0
  210. package/skills/sentry/references/sdks/react-router-framework/profiling.md +57 -0
  211. package/skills/sentry/references/sdks/react-router-framework/react-router-framework-features.md +110 -0
  212. package/skills/sentry/references/sdks/react-router-framework/session-replay.md +67 -0
  213. package/skills/sentry/references/sdks/react-router-framework/tracing.md +96 -0
  214. package/skills/sentry/references/sdks/react-router-framework/user-feedback.md +71 -0
  215. package/skills/sentry/references/sdks/ruby/crons.md +184 -0
  216. package/skills/sentry/references/sdks/ruby/error-monitoring.md +248 -0
  217. package/skills/sentry/references/sdks/ruby/index.md +297 -0
  218. package/skills/sentry/references/sdks/ruby/logging.md +168 -0
  219. package/skills/sentry/references/sdks/ruby/metrics.md +196 -0
  220. package/skills/sentry/references/sdks/ruby/migration.md +321 -0
  221. package/skills/sentry/references/sdks/ruby/profiling.md +107 -0
  222. package/skills/sentry/references/sdks/ruby/tracing.md +388 -0
  223. package/skills/sentry/references/sdks/svelte/error-monitoring.md +456 -0
  224. package/skills/sentry/references/sdks/svelte/index.md +467 -0
  225. package/skills/sentry/references/sdks/svelte/logging.md +344 -0
  226. package/skills/sentry/references/sdks/svelte/session-replay.md +369 -0
  227. package/skills/sentry/references/sdks/svelte/tracing.md +406 -0
  228. package/skills/sentry/references/sdks/tanstack-start/error-monitoring.md +149 -0
  229. package/skills/sentry/references/sdks/tanstack-start/index.md +381 -0
  230. package/skills/sentry/references/sdks/tanstack-start/logging.md +74 -0
  231. package/skills/sentry/references/sdks/tanstack-start/session-replay.md +76 -0
  232. package/skills/sentry/references/sdks/tanstack-start/tanstackstart-features.md +128 -0
  233. package/skills/sentry/references/sdks/tanstack-start/tracing.md +123 -0
  234. package/skills/sentry/references/sdks/tanstack-start/user-feedback.md +81 -0
  235. package/skills/sentry/references/search-query-language.md +226 -0
  236. package/skills/sentry/references/semantics/angular.md +7 -0
  237. package/skills/sentry/references/semantics/app.md +28 -0
  238. package/skills/sentry/references/semantics/art.md +17 -0
  239. package/skills/sentry/references/semantics/aws.md +43 -0
  240. package/skills/sentry/references/semantics/browser.md +34 -0
  241. package/skills/sentry/references/semantics/cache.md +12 -0
  242. package/skills/sentry/references/semantics/client.md +8 -0
  243. package/skills/sentry/references/semantics/cloud.md +12 -0
  244. package/skills/sentry/references/semantics/cloudflare.md +23 -0
  245. package/skills/sentry/references/semantics/code.md +11 -0
  246. package/skills/sentry/references/semantics/culture.md +11 -0
  247. package/skills/sentry/references/semantics/db.md +21 -0
  248. package/skills/sentry/references/semantics/device.md +43 -0
  249. package/skills/sentry/references/semantics/error.md +7 -0
  250. package/skills/sentry/references/semantics/event.md +8 -0
  251. package/skills/sentry/references/semantics/exception.md +10 -0
  252. package/skills/sentry/references/semantics/faas.md +19 -0
  253. package/skills/sentry/references/semantics/file.md +8 -0
  254. package/skills/sentry/references/semantics/flag.md +7 -0
  255. package/skills/sentry/references/semantics/gcp.md +16 -0
  256. package/skills/sentry/references/semantics/gen_ai.md +53 -0
  257. package/skills/sentry/references/semantics/general.md +11 -0
  258. package/skills/sentry/references/semantics/graphql.md +9 -0
  259. package/skills/sentry/references/semantics/grpc.md +19 -0
  260. package/skills/sentry/references/semantics/http.md +34 -0
  261. package/skills/sentry/references/semantics/index.md +63 -0
  262. package/skills/sentry/references/semantics/jsonrpc.md +8 -0
  263. package/skills/sentry/references/semantics/jvm.md +12 -0
  264. package/skills/sentry/references/semantics/koa.md +7 -0
  265. package/skills/sentry/references/semantics/logger.md +7 -0
  266. package/skills/sentry/references/semantics/mcp.md +37 -0
  267. package/skills/sentry/references/semantics/mdc.md +7 -0
  268. package/skills/sentry/references/semantics/messaging.md +23 -0
  269. package/skills/sentry/references/semantics/middleware.md +7 -0
  270. package/skills/sentry/references/semantics/navigation.md +9 -0
  271. package/skills/sentry/references/semantics/nel.md +11 -0
  272. package/skills/sentry/references/semantics/network.md +17 -0
  273. package/skills/sentry/references/semantics/os.md +15 -0
  274. package/skills/sentry/references/semantics/otel.md +10 -0
  275. package/skills/sentry/references/semantics/params.md +7 -0
  276. package/skills/sentry/references/semantics/process.md +14 -0
  277. package/skills/sentry/references/semantics/react.md +7 -0
  278. package/skills/sentry/references/semantics/remix.md +7 -0
  279. package/skills/sentry/references/semantics/resource.md +7 -0
  280. package/skills/sentry/references/semantics/rpc.md +10 -0
  281. package/skills/sentry/references/semantics/score.md +10 -0
  282. package/skills/sentry/references/semantics/sentry.md +69 -0
  283. package/skills/sentry/references/semantics/server.md +8 -0
  284. package/skills/sentry/references/semantics/service.md +8 -0
  285. package/skills/sentry/references/semantics/session.md +7 -0
  286. package/skills/sentry/references/semantics/state.md +7 -0
  287. package/skills/sentry/references/semantics/thread.md +8 -0
  288. package/skills/sentry/references/semantics/timber.md +7 -0
  289. package/skills/sentry/references/semantics/trpc.md +8 -0
  290. package/skills/sentry/references/semantics/ui.md +18 -0
  291. package/skills/sentry/references/semantics/url.md +15 -0
  292. package/skills/sentry/references/semantics/user.md +17 -0
  293. package/skills/sentry/references/semantics/user_agent.md +7 -0
  294. package/skills/sentry/references/semantics/vercel.md +42 -0
  295. package/skills/sentry/references/setup-verification.md +39 -0
  296. package/skills/sentry/references/snapshots/github-actions-fanout.md +206 -0
  297. package/skills/sentry/references/snapshots/github-actions-simple.md +102 -0
  298. package/skills/sentry/references/snapshots/github-actions-swift-snapshot-testing.md +118 -0
  299. package/skills/sentry/references/snapshots/index.md +19 -0
  300. package/skills/sentry/references/snapshots/snapshot-previews.md +100 -0
  301. package/skills/sentry/references/snapshots/snapshots.md +123 -0
  302. package/skills/sentry/references/snapshots/wizard-setup.md +134 -0
  303. package/skills/testing/LICENSE +21 -0
  304. package/skills/testing/NOTICE +7 -0
  305. package/skills/testing/SKILL.md +13 -19
  306. package/skills/testing/agents/openai.yaml +1 -2
  307. package/skills/testing/references/selection.md +23 -0
  308. package/skills/testing/references/tdd.md +19 -0
  309. package/skills/testing/references/test-design.md +17 -0
  310. package/src/catalog.ts +1 -7
  311. package/skills/build-effect-apis/SKILL.md +0 -81
  312. package/skills/build-effect-apis/agents/openai.yaml +0 -4
  313. package/skills/build-effect-clis/SKILL.md +0 -92
  314. package/skills/build-effect-clis/agents/openai.yaml +0 -4
  315. package/skills/effect-architecture-audit/agents/openai.yaml +0 -4
  316. package/skills/effect-atom-state/SKILL.md +0 -97
  317. package/skills/effect-atom-state/agents/openai.yaml +0 -4
  318. package/skills/effect-ts/SKILL.md +0 -35
  319. package/skills/effect-ts/agents/openai.yaml +0 -4
  320. /package/skills/{build-effect-apis/references → effect-development/references/api}/cloudflare-workers.md +0 -0
  321. /package/skills/{build-effect-apis/references → effect-development/references/api}/runtime-assembly.md +0 -0
  322. /package/skills/{build-effect-apis/references → effect-development/references/api}/server-and-middleware.md +0 -0
  323. /package/skills/{build-effect-apis/references → effect-development/references/api}/shared-contracts.md +0 -0
  324. /package/skills/{effect-architecture-audit/references → effect-development/references/architecture}/service-and-boundary-audit.md +0 -0
  325. /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-lifecycle.md +0 -0
  326. /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-workflows.md +0 -0
  327. /package/skills/{effect-atom-state/references → effect-development/references/atom}/tanstack-start.md +0 -0
  328. /package/skills/{build-effect-clis/references → effect-development/references/cli}/command-design.md +0 -0
  329. /package/skills/{build-effect-clis/references → effect-development/references/cli}/processes-and-platform.md +0 -0
@@ -0,0 +1,942 @@
1
+ # Sentry Node.js / Bun / Deno SDK
2
+
3
+ Opinionated wizard that scans your project and guides you through complete Sentry setup
4
+ for server-side JavaScript and TypeScript runtimes: Node.js, Bun, and Deno.
5
+
6
+ > **NestJS?** Use [[`nestjs`](../nestjs/index.md)](../nestjs/index.md) instead — it uses
7
+ > `@sentry/nestjs` with NestJS-native decorators and filters.
8
+ > **Next.js?** Use [[`nextjs`](../nextjs/index.md)](../nextjs/index.md) instead — it
9
+ > handles the three-runtime architecture (browser, server, edge).
10
+
11
+ > **Note:** SDK versions below reflect current Sentry docs at time of writing
12
+ > (`@sentry/node` ≥10.42.0, `@sentry/bun` ≥10.42.0, `@sentry/deno` ≥10.42.0). Always
13
+ > verify against
14
+ > [docs.sentry.io/platforms/javascript/guides/node/](https://docs.sentry.io/platforms/javascript/guides/node/)
15
+ > before implementing.
16
+
17
+ ---
18
+
19
+ ## Phase 1: Detect
20
+
21
+ Run these commands to identify the runtime, framework, and existing Sentry setup:
22
+
23
+ ```bash
24
+ # Detect runtime
25
+ bun --version 2>/dev/null && echo "Bun detected"
26
+ deno --version 2>/dev/null && echo "Deno detected"
27
+ node --version 2>/dev/null && echo "Node.js detected"
28
+
29
+ # Detect existing Sentry packages
30
+ cat package.json 2>/dev/null | grep -E '"@sentry/'
31
+ cat deno.json deno.jsonc 2>/dev/null | grep -i sentry
32
+
33
+ # Detect Node.js framework
34
+ cat package.json 2>/dev/null | grep -E '"express"|"fastify"|"@hapi/hapi"|"koa"|"@nestjs/core"|"connect"'
35
+
36
+ # Detect Bun-specific frameworks
37
+ cat package.json 2>/dev/null | grep -E '"elysia"|"hono"'
38
+
39
+ # Detect Deno frameworks (deno.json imports)
40
+ cat deno.json deno.jsonc 2>/dev/null | grep -E '"oak"|"hono"|"fresh"'
41
+
42
+ # Detect module system (Node.js)
43
+ cat package.json 2>/dev/null | grep '"type"'
44
+ ls *.mjs *.cjs 2>/dev/null | head -5
45
+
46
+ # Detect existing instrument file
47
+ ls instrument.js instrument.mjs instrument.ts instrument.cjs 2>/dev/null
48
+
49
+ # Detect logging libraries
50
+ cat package.json 2>/dev/null | grep -E '"winston"|"pino"|"bunyan"'
51
+
52
+ # Detect cron / scheduling
53
+ cat package.json 2>/dev/null | grep -E '"node-cron"|"cron"|"agenda"|"bull"|"bullmq"'
54
+
55
+ # Detect AI / LLM usage
56
+ cat package.json 2>/dev/null | grep -E '"openai"|"@anthropic-ai"|"@langchain"|"@vercel/ai"|"@google/generative-ai"'
57
+
58
+ # Detect OpenTelemetry tracing
59
+ cat package.json 2>/dev/null | grep -E '"@opentelemetry/sdk-node"|"@opentelemetry/sdk-trace-node"|"@opentelemetry/sdk-trace-base"'
60
+ grep -rn "NodeTracerProvider\|trace\.getTracer\|startActiveSpan" \
61
+ --include="*.ts" --include="*.js" --include="*.mjs" 2>/dev/null | head -5
62
+
63
+ # Check for companion frontend
64
+ ls frontend/ web/ client/ ui/ 2>/dev/null
65
+ cat package.json 2>/dev/null | grep -E '"react"|"vue"|"svelte"|"next"'
66
+ ```
67
+
68
+ **What to determine:**
69
+
70
+ | Question | Impact |
71
+ | -------------------------------------------------- | ---------------------------------------------------------------------------- |
72
+ | Which runtime? (Node.js / Bun / Deno) | Determines package, init pattern, and preload flag |
73
+ | Node.js: ESM or CJS? | ESM requires `--import ./instrument.mjs`; CJS uses `require("./instrument")` |
74
+ | Framework detected? | Determines which error handler to register |
75
+ | `@sentry/*` already installed? | Skip install, go straight to feature config |
76
+ | `instrument.js` / `instrument.mjs` already exists? | Merge into it rather than overwrite |
77
+ | Logging library detected? | Recommend Sentry Logs |
78
+ | Cron / job scheduler detected? | Recommend Crons monitoring |
79
+ | AI library detected? | Recommend AI Monitoring |
80
+ | OpenTelemetry tracing detected? | Use OTLP path instead of native tracing |
81
+ | Companion frontend found? | Trigger Phase 4 cross-link |
82
+
83
+ ---
84
+
85
+ ## Phase 2: Recommend
86
+
87
+ Present a concrete recommendation based on what you found.
88
+ Don’t ask open-ended questions — lead with a proposal:
89
+
90
+ **Route from OTel detection:**
91
+
92
+ - **OTel tracing detected** (`@opentelemetry/sdk-node` or
93
+ `@opentelemetry/sdk-trace-node` in `package.json`, or `NodeTracerProvider` in source)
94
+ → use OTLP path: `otlpIntegration()` via `@sentry/node-core/light`; do **not** set
95
+ `tracesSampleRate`; Sentry links errors to OTel traces automatically
96
+
97
+ **Recommended (core coverage):**
98
+
99
+ - ✅ **Error Monitoring** — always; captures unhandled exceptions, promise rejections,
100
+ and framework errors
101
+ - ✅ **Tracing** — automatic HTTP, DB, and queue instrumentation via OpenTelemetry
102
+
103
+ **Optional (enhanced observability):**
104
+
105
+ - ⚡ **Logging** — structured logs via `Sentry.logger.*`; recommend when
106
+ `winston`/`pino`/`bunyan` or log search is needed
107
+ - ⚡ **Profiling** — continuous CPU profiling (Node.js only; not available on Bun or
108
+ Deno); **not available with OTLP path**
109
+ - ⚡ **AI Monitoring** — OpenAI, Anthropic, LangChain, Vercel AI SDK; recommend when
110
+ AI/LLM calls detected
111
+ - ⚡ **Crons** — detect missed or failed scheduled jobs; recommend when node-cron, Bull,
112
+ or Agenda is detected
113
+ - ⚡ **Metrics** — custom counters, gauges, distributions; recommend when custom KPIs
114
+ needed
115
+ - ⚡ **Runtime Metrics** — automatic collection of memory, CPU, and event loop metrics;
116
+ `nodeRuntimeMetricsIntegration()` (Node.js) / `bunRuntimeMetricsIntegration()` (Bun)
117
+
118
+ **Recommendation logic:**
119
+
120
+ | Feature | Recommend when … |
121
+ | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
122
+ | Error Monitoring | **Always** — non-negotiable baseline |
123
+ | OTLP Integration | OTel tracing detected — **replaces** native Tracing |
124
+ | Tracing | **Always for server apps** — HTTP spans + DB spans are high-value; **skip if OTel tracing detected** |
125
+ | Logging | App uses winston, pino, bunyan, or needs log-to-trace correlation |
126
+ | Profiling | **Node.js only** — performance-critical service; native addon compatible; **skip if OTel tracing detected** (requires `tracesSampleRate`, incompatible with OTLP) |
127
+ | AI Monitoring | App calls OpenAI, Anthropic, LangChain, Vercel AI, or Google GenAI |
128
+ | Crons | App uses node-cron, Bull, BullMQ, Agenda, or any scheduled task pattern |
129
+ | Metrics | App needs custom counters, gauges, or histograms |
130
+ | Runtime Metrics | Any Node.js or Bun service wanting automatic memory/CPU/event-loop visibility |
131
+
132
+ **OTel tracing detected:** _“I see OpenTelemetry tracing in the project.
133
+ I recommend Sentry’s OTLP integration for tracing (via your existing OTel setup) + Error
134
+ Monitoring + Sentry Logging [+ Metrics/Crons/AI Monitoring if applicable]. Shall I
135
+ proceed?”_
136
+
137
+ **No OTel:** _“I recommend setting up Error Monitoring + Tracing.
138
+ Want me to also add Logging or Profiling?”_
139
+
140
+ ---
141
+
142
+ ## Phase 3: Guide
143
+
144
+ ### Runtime: Node.js
145
+
146
+ #### Option 1: Wizard (Recommended for Node.js)
147
+
148
+ > **You need to run this yourself** — the wizard opens a browser for login and requires
149
+ > interactive input that the agent can’t handle.
150
+ > Copy-paste into your terminal:
151
+ >
152
+ > ```
153
+ > npx @sentry/wizard@latest -i node
154
+ > ```
155
+ >
156
+ > It handles login, org/project selection, SDK installation, `instrument.js` creation,
157
+ > and package.json script updates.
158
+ >
159
+ > **Once it finishes, come back and skip to [Verification](#verification).**
160
+
161
+ If the user skips the wizard, proceed with Option 2 (Manual Setup) below.
162
+
163
+ ---
164
+
165
+ #### Option 2: Manual Setup — Node.js
166
+
167
+ ##### Install
168
+
169
+ ```bash
170
+ npm install @sentry/node --save
171
+ # or
172
+ yarn add @sentry/node
173
+ # or
174
+ pnpm add @sentry/node
175
+ ```
176
+
177
+ ##### Create the Instrument File
178
+
179
+ **CommonJS (`instrument.js`):**
180
+
181
+ ```javascript
182
+ // instrument.js — must be loaded before all other modules
183
+ const Sentry = require("@sentry/node");
184
+
185
+ Sentry.init({
186
+ dsn: process.env.SENTRY_DSN ?? "___DSN___",
187
+
188
+ dataCollection: {
189
+ // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
190
+ // https://docs.sentry.io/platforms/javascript/guides/node/configuration/options/#dataCollection
191
+ // userInfo: false,
192
+ // httpBodies: [],
193
+ },
194
+
195
+ // 100% in dev, lower in production
196
+ tracesSampleRate: process.env.NODE_ENV === "development" ? 1.0 : 0.1,
197
+
198
+ // Capture local variable values in stack frames
199
+ includeLocalVariables: true,
200
+
201
+ enableLogs: true,
202
+ });
203
+ ```
204
+
205
+ **ESM (`instrument.mjs`):**
206
+
207
+ ```javascript
208
+ // instrument.mjs — loaded via --import flag before any other module
209
+ import * as Sentry from "@sentry/node";
210
+
211
+ Sentry.init({
212
+ dsn: process.env.SENTRY_DSN ?? "___DSN___",
213
+
214
+ dataCollection: {
215
+ // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
216
+ // https://docs.sentry.io/platforms/javascript/guides/node/configuration/options/#dataCollection
217
+ // userInfo: false,
218
+ // httpBodies: [],
219
+ },
220
+ tracesSampleRate: process.env.NODE_ENV === "development" ? 1.0 : 0.1,
221
+ includeLocalVariables: true,
222
+ enableLogs: true,
223
+ });
224
+ ```
225
+
226
+ ##### Start Your App with Sentry Loaded First
227
+
228
+ **CommonJS** — add `require("./instrument")` as the very first line of your entry file:
229
+
230
+ ```javascript
231
+ // app.js
232
+ require("./instrument"); // must be first
233
+
234
+ const express = require("express");
235
+ // ... rest of your app
236
+ ```
237
+
238
+ **ESM** — use the `--import` flag so Sentry loads before all other modules (Node.js
239
+ 18.19.0+ required):
240
+
241
+ ```bash
242
+ node --import ./instrument.mjs app.mjs
243
+ ```
244
+
245
+ Add to `package.json` scripts:
246
+
247
+ ```json
248
+ {
249
+ "scripts": {
250
+ "start": "node --import ./instrument.mjs server.mjs",
251
+ "dev": "node --import ./instrument.mjs --watch server.mjs"
252
+ }
253
+ }
254
+ ```
255
+
256
+ Or via environment variable (useful for wrapping existing start commands):
257
+
258
+ ```bash
259
+ NODE_OPTIONS="--import ./instrument.mjs" npm start
260
+ ```
261
+
262
+ ##### Framework Error Handlers
263
+
264
+ Register the Sentry error handler **after all routes** so it can capture framework
265
+ errors:
266
+
267
+ **Express:**
268
+
269
+ ```javascript
270
+ const express = require("express");
271
+ const Sentry = require("@sentry/node");
272
+
273
+ const app = express();
274
+
275
+ // ... your routes
276
+
277
+ // Add AFTER all routes — captures 5xx errors by default
278
+ Sentry.setupExpressErrorHandler(app);
279
+
280
+ // Optional: capture 4xx errors too
281
+ // Sentry.setupExpressErrorHandler(app, {
282
+ // shouldHandleError(error) { return error.status >= 400; },
283
+ // });
284
+
285
+ app.listen(3000);
286
+ ```
287
+
288
+ **Fastify:**
289
+
290
+ ```javascript
291
+ const Fastify = require("fastify");
292
+ const Sentry = require("@sentry/node");
293
+
294
+ const fastify = Fastify();
295
+
296
+ // Add BEFORE routes (unlike Express!)
297
+ Sentry.setupFastifyErrorHandler(fastify);
298
+
299
+ // ... your routes
300
+
301
+ await fastify.listen({ port: 3000 });
302
+ ```
303
+
304
+ **Koa:**
305
+
306
+ ```javascript
307
+ const Koa = require("koa");
308
+ const Sentry = require("@sentry/node");
309
+
310
+ const app = new Koa();
311
+
312
+ // Add as FIRST middleware (catches errors thrown by later middleware)
313
+ Sentry.setupKoaErrorHandler(app);
314
+
315
+ // ... your other middleware and routes
316
+
317
+ app.listen(3000);
318
+ ```
319
+
320
+ **Hapi (async — must await):**
321
+
322
+ ```javascript
323
+ const Hapi = require("@hapi/hapi");
324
+ const Sentry = require("@sentry/node");
325
+
326
+ const server = Hapi.server({ port: 3000 });
327
+
328
+ // ... your routes
329
+
330
+ // Must await — Hapi registration is async
331
+ await Sentry.setupHapiErrorHandler(server);
332
+
333
+ await server.start();
334
+ ```
335
+
336
+ **Connect:**
337
+
338
+ ```javascript
339
+ const connect = require("connect");
340
+ const Sentry = require("@sentry/node");
341
+
342
+ const app = connect();
343
+
344
+ // Add BEFORE routes (like Fastify and Koa)
345
+ Sentry.setupConnectErrorHandler(app);
346
+
347
+ // ... your middleware and routes
348
+
349
+ require("http").createServer(app).listen(3000);
350
+ ```
351
+
352
+ **NestJS** — has its own dedicated skill with full coverage:
353
+
354
+ > **Use the [[`nestjs`](../nestjs/index.md)](../nestjs/index.md) skill instead.** NestJS
355
+ > uses a separate package (`@sentry/nestjs`) with NestJS-native constructs:
356
+ > `SentryModule.forRoot()`, `SentryGlobalFilter`, `@SentryTraced`, `@SentryCron`
357
+ > decorators, and GraphQL/Microservices support.
358
+ > Load that skill for complete NestJS setup.
359
+
360
+ **Vanilla Node.js `http` module** — wrap request handler manually:
361
+
362
+ ```javascript
363
+ const http = require("http");
364
+ const Sentry = require("@sentry/node");
365
+
366
+ const server = http.createServer((req, res) => {
367
+ Sentry.withIsolationScope(() => {
368
+ try {
369
+ // your handler
370
+ res.end("OK");
371
+ } catch (err) {
372
+ Sentry.captureException(err);
373
+ res.writeHead(500);
374
+ res.end("Internal Server Error");
375
+ }
376
+ });
377
+ });
378
+
379
+ server.listen(3000);
380
+ ```
381
+
382
+ **Framework error handler summary:**
383
+
384
+ | Framework | Function | Placement | Async? |
385
+ | --------- | ---------------------------------------------------------- | ----------------------- | ------- |
386
+ | Express | `setupExpressErrorHandler(app)` | **After** all routes | No |
387
+ | Fastify | `setupFastifyErrorHandler(fastify)` | **Before** routes | No |
388
+ | Koa | `setupKoaErrorHandler(app)` | **First** middleware | No |
389
+ | Hapi | `setupHapiErrorHandler(server)` | Before `server.start()` | **Yes** |
390
+ | Connect | `setupConnectErrorHandler(app)` | **Before** routes | No |
391
+ | NestJS | → Use [[`nestjs`](../nestjs/index.md)](../nestjs/index.md) | Dedicated skill | — |
392
+
393
+ ---
394
+
395
+ ### Runtime: Bun
396
+
397
+ > **No wizard available for Bun.** Manual setup only.
398
+
399
+ #### Install
400
+
401
+ ```bash
402
+ bun add @sentry/bun
403
+ ```
404
+
405
+ #### Create `instrument.ts` (or `instrument.js`)
406
+
407
+ ```typescript
408
+ // instrument.ts
409
+ import * as Sentry from "@sentry/bun";
410
+
411
+ Sentry.init({
412
+ dsn: process.env.SENTRY_DSN ?? "___DSN___",
413
+
414
+ dataCollection: {
415
+ // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
416
+ // https://docs.sentry.io/platforms/javascript/guides/node/configuration/options/#dataCollection
417
+ // userInfo: false,
418
+ // httpBodies: [],
419
+ },
420
+ tracesSampleRate: process.env.NODE_ENV === "development" ? 1.0 : 0.1,
421
+ enableLogs: true,
422
+ });
423
+ ```
424
+
425
+ #### Start Your App with `--preload`
426
+
427
+ ```bash
428
+ bun --preload ./instrument.ts server.ts
429
+ ```
430
+
431
+ Add to `package.json`:
432
+
433
+ ```json
434
+ {
435
+ "scripts": {
436
+ "start": "bun --preload ./instrument.ts server.ts",
437
+ "dev": "bun --watch --preload ./instrument.ts server.ts"
438
+ }
439
+ }
440
+ ```
441
+
442
+ #### Bun.serve() — Auto-Instrumentation
443
+
444
+ `@sentry/bun` automatically instruments `Bun.serve()` via JavaScript Proxy.
445
+ No extra setup is required — just initialize with `--preload` and your `Bun.serve()`
446
+ calls are traced:
447
+
448
+ ```typescript
449
+ // server.ts
450
+ const server = Bun.serve({
451
+ port: 3000,
452
+ fetch(req) {
453
+ return new Response("Hello from Bun!");
454
+ },
455
+ });
456
+ ```
457
+
458
+ #### Framework Error Handlers on Bun
459
+
460
+ Bun can run Express, Fastify, Hono, and Elysia.
461
+ Use the same `@sentry/bun` import and the `@sentry/node` error handler functions
462
+ (re-exported by `@sentry/bun`):
463
+
464
+ ```typescript
465
+ import * as Sentry from "@sentry/bun";
466
+ import express from "express";
467
+
468
+ const app = express();
469
+ // ... routes
470
+ Sentry.setupExpressErrorHandler(app);
471
+ app.listen(3000);
472
+ ```
473
+
474
+ #### Bun Feature Support
475
+
476
+ | Feature | Bun Support | Notes |
477
+ | ---------------- | -------------------------- | -------------------------------------------------------------------------------------------- |
478
+ | Error Monitoring | ✅ Full | Same API as Node |
479
+ | Tracing | ✅ Via `@sentry/node` OTel | Most auto-instrumentations work |
480
+ | Logging | ✅ Full | `enableLogs: true` + `Sentry.logger.*` |
481
+ | Profiling | ❌ Not available | `@sentry/profiling-node` uses native addons incompatible with Bun |
482
+ | Metrics | ✅ Full | `Sentry.metrics.*` |
483
+ | Runtime Metrics | ✅ Full | `bunRuntimeMetricsIntegration()` — memory, CPU, event loop (no event loop delay percentiles) |
484
+ | Crons | ✅ Full | `Sentry.withMonitor()` |
485
+ | AI Monitoring | ✅ Full | OpenAI, Anthropic integrations work |
486
+
487
+ ---
488
+
489
+ ### Runtime: Deno
490
+
491
+ > **No wizard available for Deno.** Manual setup only.
492
+ > **Requires Deno 2.0+.** Deno 1.x is not supported.
493
+ > **Use `npm:` specifier.** The `deno.land/x/sentry` registry is deprecated.
494
+
495
+ #### Install via `deno.json` (Recommended)
496
+
497
+ ```json
498
+ {
499
+ "imports": {
500
+ "@sentry/deno": "npm:@sentry/deno@10.42.0"
501
+ }
502
+ }
503
+ ```
504
+
505
+ Or import directly with the `npm:` specifier:
506
+
507
+ ```typescript
508
+ import * as Sentry from "npm:@sentry/deno";
509
+ ```
510
+
511
+ #### Initialize — Add to Entry File
512
+
513
+ ```typescript
514
+ // main.ts — Sentry.init() must be called before any other code
515
+ import * as Sentry from "@sentry/deno";
516
+
517
+ Sentry.init({
518
+ dsn: Deno.env.get("SENTRY_DSN") ?? "___DSN___",
519
+
520
+ dataCollection: {
521
+ // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
522
+ // https://docs.sentry.io/platforms/javascript/guides/node/configuration/options/#dataCollection
523
+ // userInfo: false,
524
+ // httpBodies: [],
525
+ },
526
+ tracesSampleRate: Deno.env.get("DENO_ENV") === "development" ? 1.0 : 0.1,
527
+ enableLogs: true,
528
+ });
529
+
530
+ // Your application code follows
531
+ Deno.serve({ port: 8000 }, (req) => {
532
+ return new Response("Hello from Deno!");
533
+ });
534
+ ```
535
+
536
+ > Unlike Node.js and Bun, Deno does not have a `--preload` or `--import` flag.
537
+ > Sentry must be the first `import` in your entry file.
538
+
539
+ #### Required Deno Permissions
540
+
541
+ The SDK requires network access to reach your Sentry ingest domain:
542
+
543
+ ```bash
544
+ deno run \
545
+ --allow-net=o<ORG_ID>.ingest.sentry.io \
546
+ --allow-read=./src \
547
+ --allow-env=SENTRY_DSN,SENTRY_RELEASE \
548
+ main.ts
549
+ ```
550
+
551
+ For development, `--allow-all` works but is not recommended for production.
552
+
553
+ #### Deno Cron Integration
554
+
555
+ Deno provides native cron scheduling.
556
+ Use `denoCronIntegration` for automatic monitoring:
557
+
558
+ ```typescript
559
+ import * as Sentry from "@sentry/deno";
560
+ import { denoCronIntegration } from "@sentry/deno";
561
+
562
+ Sentry.init({
563
+ dsn: Deno.env.get("SENTRY_DSN") ?? "___DSN___",
564
+ integrations: [denoCronIntegration()],
565
+ });
566
+
567
+ // Cron is automatically monitored
568
+ Deno.cron("daily-cleanup", "0 0 * * *", () => {
569
+ // cleanup logic
570
+ });
571
+ ```
572
+
573
+ #### Deno Feature Support
574
+
575
+ | Feature | Deno Support | Notes |
576
+ | ---------------- | ---------------- | ------------------------------------------------------------ |
577
+ | Error Monitoring | ✅ Full | Unhandled exceptions + `captureException` |
578
+ | Tracing | ✅ Custom OTel | Automatic spans for `Deno.serve()` and `fetch` |
579
+ | Logging | ✅ Full | `enableLogs: true` + `Sentry.logger.*` |
580
+ | Profiling | ❌ Not available | No profiling addon for Deno |
581
+ | Metrics | ✅ Full | `Sentry.metrics.*` |
582
+ | Runtime Metrics | ❌ Not available | No runtime metrics integration for Deno |
583
+ | Crons | ✅ Full | `denoCronIntegration()` + `Sentry.withMonitor()` |
584
+ | AI Monitoring | ✅ Partial | Vercel AI SDK integration works; OpenAI/Anthropic via `npm:` |
585
+
586
+ ---
587
+
588
+ ### OTLP Integration (OTel-First Projects — Node.js Only)
589
+
590
+ > Use this path **only when OpenTelemetry tracing was detected** in Phase 1 (e.g.,
591
+ > `@opentelemetry/sdk-node` or `@opentelemetry/sdk-trace-node` in `package.json`). For
592
+ > projects without an existing OTel setup, use the standard `@sentry/node` path above.
593
+
594
+ The OTLP integration uses `@sentry/node-core/light` — a lightweight Sentry SDK that does
595
+ not bundle its own OpenTelemetry.
596
+ Instead, it hooks into the user’s existing OTel `TracerProvider` and exports spans to
597
+ Sentry via OTLP.
598
+
599
+ #### When to Use
600
+
601
+ | Scenario | Recommended path |
602
+ | --------------------------------------------- | --------------------------------------------------------------- |
603
+ | New project, no existing OTel | Standard `@sentry/node` (above) — includes built-in OTel |
604
+ | Existing OTel setup, want Sentry tracing | `@sentry/node-core/light` + `otlpIntegration()` |
605
+ | Existing OTel setup, sending to own Collector | `@sentry/node-core/light` + `otlpIntegration({ collectorUrl })` |
606
+
607
+ #### Install
608
+
609
+ ```bash
610
+ npm install @sentry/node-core @opentelemetry/api @opentelemetry/sdk-trace-node @opentelemetry/sdk-trace-base
611
+ # or
612
+ yarn add @sentry/node-core @opentelemetry/api @opentelemetry/sdk-trace-node @opentelemetry/sdk-trace-base
613
+ # or
614
+ pnpm add @sentry/node-core @opentelemetry/api @opentelemetry/sdk-trace-node @opentelemetry/sdk-trace-base
615
+ ```
616
+
617
+ > The `@opentelemetry/*` packages are peer dependencies.
618
+ > If the project already has them installed, skip duplicates.
619
+
620
+ #### Initialize
621
+
622
+ ```javascript
623
+ // instrument.mjs — load via --import flag before any other module
624
+ import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
625
+ import * as Sentry from "@sentry/node-core/light";
626
+ import { otlpIntegration } from "@sentry/node-core/light/otlp";
627
+
628
+ // Register the user's OTel TracerProvider first
629
+ const provider = new NodeTracerProvider();
630
+ provider.register();
631
+
632
+ Sentry.init({
633
+ dsn: process.env.SENTRY_DSN ?? "___DSN___",
634
+
635
+ dataCollection: {
636
+ // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
637
+ // https://docs.sentry.io/platforms/javascript/guides/node/configuration/options/#dataCollection
638
+ // userInfo: false,
639
+ // httpBodies: [],
640
+ },
641
+ enableLogs: true,
642
+
643
+ // Do NOT set tracesSampleRate — OTel controls sampling
644
+ integrations: [
645
+ otlpIntegration({
646
+ // Export OTel spans to Sentry via OTLP (default: true)
647
+ setupOtlpTracesExporter: true,
648
+ }),
649
+ ],
650
+ });
651
+ ```
652
+
653
+ **With a custom Collector endpoint:**
654
+
655
+ ```javascript
656
+ Sentry.init({
657
+ dsn: process.env.SENTRY_DSN ?? "___DSN___",
658
+ integrations: [
659
+ otlpIntegration({
660
+ collectorUrl: "http://localhost:4318/v1/traces",
661
+ }),
662
+ ],
663
+ });
664
+ ```
665
+
666
+ #### Start Your App
667
+
668
+ Same `--import` pattern as the standard Node.js setup:
669
+
670
+ ```bash
671
+ node --import ./instrument.mjs app.mjs
672
+ ```
673
+
674
+ #### Key Differences from Standard `@sentry/node`
675
+
676
+ | Aspect | `@sentry/node` (standard) | `@sentry/node-core/light` (OTLP) |
677
+ | --------------------- | ------------------------------------- | ------------------------------------ |
678
+ | OTel bundled | ✅ Yes — built-in TracerProvider | ❌ No — uses your existing provider |
679
+ | Tracing control | `tracesSampleRate` in `Sentry.init()` | OTel SDK controls sampling |
680
+ | Auto-instrumentation | ✅ Built-in (HTTP, DB, etc.) | ❌ You manage OTel instrumentations |
681
+ | Profiling | ✅ Available | ❌ Not compatible |
682
+ | Error ↔ trace linking | ✅ Automatic | ✅ Automatic (via `otlpIntegration`) |
683
+ | Package size | Larger (includes OTel) | Smaller (light mode) |
684
+
685
+ ---
686
+
687
+ ### For Each Agreed Feature
688
+
689
+ Load the corresponding reference file and follow its steps:
690
+
691
+ | Feature | Reference file | Load when … |
692
+ | ---------------- | -------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
693
+ | Error Monitoring | `./error-monitoring.md` | Always (baseline) — captures, scopes, enrichment, beforeSend |
694
+ | OTLP Integration | See [OTLP Integration](#otlp-integration-otel-first-projects--nodejs-only) above | OTel tracing detected — **replaces** native Tracing |
695
+ | Tracing | `./tracing.md` | OTel auto-instrumentation, custom spans, distributed tracing, sampling; **skip if OTel tracing detected** |
696
+ | Logging | `./logging.md` | Structured logs, `Sentry.logger.*`, log-to-trace correlation |
697
+ | Profiling | `./profiling.md` | Node.js only — CPU profiling, Bun/Deno gaps documented; **skip if OTel tracing detected** |
698
+ | Metrics | `./metrics.md` | Custom counters, gauges, distributions |
699
+ | Runtime Metrics | See inline below | Automatic memory, CPU, and event loop metrics for Node.js and Bun |
700
+ | Crons | `./crons.md` | Scheduled job monitoring, node-cron, Bull, Agenda, Deno.cron |
701
+ | AI Monitoring | `./ai-monitoring.md` | OpenAI, Anthropic, LangChain, Vercel AI, Google GenAI |
702
+
703
+ For each feature: read the reference file, follow its steps exactly, and verify before
704
+ moving on.
705
+
706
+ ### Runtime Metrics
707
+
708
+ Automatically collect Node.js and Bun runtime health metrics (memory, CPU utilization,
709
+ event loop delay/utilization, uptime) at a configurable interval.
710
+ Metrics appear in Sentry’s Metrics product under the `node.runtime.*` / `bun.runtime.*`
711
+ namespace.
712
+
713
+ **Node.js** — add `nodeRuntimeMetricsIntegration()` to your `instrument.js`:
714
+
715
+ ```javascript
716
+ const Sentry = require("@sentry/node");
717
+
718
+ Sentry.init({
719
+ dsn: process.env.SENTRY_DSN,
720
+ integrations: [
721
+ Sentry.nodeRuntimeMetricsIntegration(),
722
+ // Optional: change collection interval (default 30 000 ms)
723
+ // Sentry.nodeRuntimeMetricsIntegration({ collectionIntervalMs: 60_000 }),
724
+ ],
725
+ });
726
+ ```
727
+
728
+ Metrics collected by default: `node.runtime.mem.rss`, `node.runtime.mem.heap_used`,
729
+ `node.runtime.mem.heap_total`, `node.runtime.cpu.utilization`,
730
+ `node.runtime.event_loop.delay.p50`, `node.runtime.event_loop.delay.p99`,
731
+ `node.runtime.event_loop.utilization`, `node.runtime.process.uptime`.
732
+
733
+ **Bun** — add `bunRuntimeMetricsIntegration()` to your `instrument.ts`:
734
+
735
+ ```typescript
736
+ import * as Sentry from "@sentry/bun";
737
+ import { bunRuntimeMetricsIntegration } from "@sentry/bun";
738
+
739
+ Sentry.init({
740
+ dsn: process.env.SENTRY_DSN,
741
+ integrations: [
742
+ bunRuntimeMetricsIntegration(),
743
+ // Optional: change collection interval (default 30 000 ms)
744
+ // bunRuntimeMetricsIntegration({ collectionIntervalMs: 60_000 }),
745
+ ],
746
+ });
747
+ ```
748
+
749
+ Metrics collected: same as Node.js except no event loop delay percentiles (unavailable
750
+ in Bun). Prefixed with `bun.runtime.*`.
751
+
752
+ ---
753
+
754
+ ## Configuration Reference
755
+
756
+ ### `Sentry.init()` Core Options
757
+
758
+ | Option | Type | Default | Notes |
759
+ | ----------------------- | --------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
760
+ | `dsn` | `string` | — | Required. Also from `SENTRY_DSN` env var |
761
+ | `tracesSampleRate` | `number` | — | 0–1; required to enable tracing; **do not set when using OTLP path** |
762
+ | `dataCollection` | `object` | conservative unless set | Fine-grained control over auto-collected categories (`userInfo`, `cookies`, `httpHeaders`, `httpBodies`, `queryParams`, `genAI`). When omitted, the SDK falls back to `sendDefaultPii` (default `false`). Passing the object — even `{}` — flips unset categories to their permissive defaults; opt out per category. |
763
+ | `includeLocalVariables` | `boolean` | `false` | Add local variable values to stack frames (Node.js) |
764
+ | `enableLogs` | `boolean` | `false` | Enable Sentry Logs product (v9.41.0+) |
765
+ | `environment` | `string` | `"production"` | Also from `SENTRY_ENVIRONMENT` env var |
766
+ | `release` | `string` | — | Also from `SENTRY_RELEASE` env var |
767
+ | `debug` | `boolean` | `false` | Log SDK activity to console |
768
+ | `enabled` | `boolean` | `true` | Set `false` in tests to disable sending |
769
+ | `sampleRate` | `number` | `1.0` | Fraction of error events to send (0–1) |
770
+ | `shutdownTimeout` | `number` | `2000` | Milliseconds to flush events before process exit |
771
+
772
+ ### `nativeNodeFetchIntegration()` Options
773
+
774
+ Configures outgoing `fetch`/`undici` span capture.
775
+ Since `@opentelemetry/instrumentation-undici@0.22.0`, response headers like
776
+ `content-length` are no longer captured automatically — use `headersToSpanAttributes` to
777
+ opt in:
778
+
779
+ ```javascript
780
+ Sentry.init({
781
+ integrations: [
782
+ Sentry.nativeNodeFetchIntegration({
783
+ headersToSpanAttributes: {
784
+ requestHeaders: ["x-request-id"],
785
+ responseHeaders: ["content-length", "content-type"],
786
+ },
787
+ }),
788
+ ],
789
+ });
790
+ ```
791
+
792
+ | Option | Type | Default | Notes |
793
+ | ----------------------------------------- | ---------- | ------- | --------------------------------------------------- |
794
+ | `breadcrumbs` | `boolean` | `true` | Record breadcrumbs for outgoing fetch requests |
795
+ | `headersToSpanAttributes.requestHeaders` | `string[]` | — | Request header names to capture as span attributes |
796
+ | `headersToSpanAttributes.responseHeaders` | `string[]` | — | Response header names to capture as span attributes |
797
+
798
+ ### `otlpIntegration()` Options (`@sentry/node-core/light/otlp`)
799
+
800
+ For OTel-first projects using `@sentry/node-core/light`. Import:
801
+ `import { otlpIntegration } from '@sentry/node-core/light/otlp'`.
802
+
803
+ | Option | Type | Default | Purpose |
804
+ | ------------------------- | --------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
805
+ | `setupOtlpTracesExporter` | `boolean` | `true` | Auto-configure OTLP exporter to send spans to Sentry; set `false` if you already export to your own Collector |
806
+ | `collectorUrl` | `string` | `undefined` | OTLP HTTP endpoint of an OTel Collector (e.g., `http://localhost:4318/v1/traces`); when set, spans are sent to the collector instead of the DSN-derived Sentry endpoint |
807
+
808
+ ### Graceful Shutdown
809
+
810
+ Flush buffered events before process exit — important for short-lived scripts and
811
+ serverless:
812
+
813
+ ```javascript
814
+ process.on("SIGTERM", async () => {
815
+ await Sentry.close(2000); // flush with 2s timeout
816
+ process.exit(0);
817
+ });
818
+ ```
819
+
820
+ ### Environment Variables
821
+
822
+ | Variable | Purpose | Runtime |
823
+ | -------------------- | ----------------------------------------------- | ---------- |
824
+ | `SENTRY_DSN` | DSN (alternative to hardcoding in `init()`) | All |
825
+ | `SENTRY_ENVIRONMENT` | Deployment environment | All |
826
+ | `SENTRY_RELEASE` | Release version string (auto-detected from git) | All |
827
+ | `SENTRY_AUTH_TOKEN` | Source map upload token | Build time |
828
+ | `SENTRY_ORG` | Org slug for source map upload | Build time |
829
+ | `SENTRY_PROJECT` | Project slug for source map upload | Build time |
830
+ | `NODE_OPTIONS` | Set `--import ./instrument.mjs` for ESM | Node.js |
831
+
832
+ ### Source Maps (Node.js)
833
+
834
+ Readable stack traces in production require uploading source maps with `@sentry/cli` or
835
+ the webpack/esbuild/rollup plugins — for example, an inject + upload step in your build:
836
+
837
+ ```json
838
+ {
839
+ "scripts": {
840
+ "build": "tsc && sentry-cli sourcemaps inject ./dist && sentry-cli sourcemaps upload ./dist"
841
+ }
842
+ }
843
+ ```
844
+
845
+ Upload needs a `SENTRY_AUTH_TOKEN` (a build-time secret).
846
+
847
+ ---
848
+
849
+ ## Verification
850
+
851
+ After setup, verify Sentry is receiving events:
852
+
853
+ ```javascript
854
+ // Add temporarily to your entry file or a test route, then remove
855
+ import * as Sentry from "@sentry/node"; // or @sentry/bun / @sentry/deno
856
+
857
+ Sentry.captureException(new Error("Sentry test error — delete me"));
858
+ ```
859
+
860
+ Or trigger an unhandled exception:
861
+
862
+ ```javascript
863
+ // In a route handler or startup — will be captured automatically
864
+ throw new Error("Sentry test error — delete me");
865
+ ```
866
+
867
+ Then check your [Sentry Issues dashboard](https://sentry.io/issues/) — the error should
868
+ appear within ~30 seconds.
869
+
870
+ **Verification checklist:**
871
+
872
+ | Check | How |
873
+ | ------------------------------- | --------------------------------------------------- |
874
+ | Error captured | Throw in a handler, verify in Sentry Issues |
875
+ | Tracing working | Check Performance tab — should show HTTP spans |
876
+ | `includeLocalVariables` working | Stack frame in Sentry should show variable values |
877
+ | Source maps working | Stack trace shows readable file names, not minified |
878
+
879
+ ---
880
+
881
+ ## Phase 4: Cross-Link
882
+
883
+ After completing backend setup, check for companion services:
884
+
885
+ ```bash
886
+ # Frontend companion
887
+ ls frontend/ web/ client/ ui/ 2>/dev/null
888
+ cat package.json 2>/dev/null | grep -E '"react"|"vue"|"svelte"|"next"'
889
+
890
+ # Other backend services
891
+ ls ../go.mod ../requirements.txt ../Gemfile 2>/dev/null
892
+ ```
893
+
894
+ If a frontend, framework-specific SDK, or other backend is found, suggest the matching
895
+ skill:
896
+
897
+ **Dedicated JavaScript framework skills (prefer these over generic node-sdk):**
898
+
899
+ | Detected | Prefer skill | Why |
900
+ | ----------------------------------------- | ---------------------------------------------------- | ----------------------------------------------------------------------------------------- |
901
+ | NestJS (`@nestjs/core` in `package.json`) | [[`nestjs`](../nestjs/index.md)](../nestjs/index.md) | Uses `@sentry/nestjs` with NestJS-native decorators, filters, and GraphQL support |
902
+ | Next.js (`next` in `package.json`) | [[`nextjs`](../nextjs/index.md)](../nextjs/index.md) | Three-runtime architecture (browser, server, edge), `withSentryConfig`, source map upload |
903
+
904
+ **Frontend companions:**
905
+
906
+ | Detected | Suggest |
907
+ | ------------------------------------- | ---------------------------------------------------- |
908
+ | React app (`react` in `package.json`) | [[`react`](../react/index.md)](../react/index.md) |
909
+ | Svelte/SvelteKit | [[`svelte`](../svelte/index.md)](../svelte/index.md) |
910
+
911
+ **Other backend companions:**
912
+
913
+ | Detected | Suggest |
914
+ | ----------------------------------------------------- | ---------------------------------------------------- |
915
+ | Go backend (`go.mod`) | [[`go`](../go/index.md)](../go/index.md) |
916
+ | Python backend (`requirements.txt`, `pyproject.toml`) | [[`python`](../python/index.md)](../python/index.md) |
917
+ | Ruby backend (`Gemfile`) | [[`ruby`](../ruby/index.md)](../ruby/index.md) |
918
+
919
+ Connecting frontend and backend with the same DSN or linked projects enables
920
+ **distributed tracing** — stack traces that span your browser, API server, and database
921
+ in a single trace view.
922
+
923
+ ---
924
+
925
+ ## Troubleshooting
926
+
927
+ | Issue | Cause | Solution |
928
+ | --------------------------------------------- | ------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
929
+ | Events not appearing | `instrument.js` loaded too late | Ensure it’s the first `require()` / loaded via `--import` or `--preload` |
930
+ | Tracing spans missing | `tracesSampleRate` not set | Add `tracesSampleRate: 1.0` to `Sentry.init()` |
931
+ | ESM instrumentation not working | Missing `--import` flag | Run with `node --import ./instrument.mjs`; `import "./instrument.mjs"` inside app is not sufficient |
932
+ | `@sentry/profiling-node` install fails on Bun | Native addon incompatible | Profiling is not supported on Bun — remove `@sentry/profiling-node` |
933
+ | Deno: events not sent | Missing `--allow-net` permission | Run with `--allow-net=o<ORG_ID>.ingest.sentry.io` |
934
+ | Deno: `deno.land/x/sentry` not working | Deprecated and frozen at v8.55.0 | Switch to `npm:@sentry/deno` specifier |
935
+ | `includeLocalVariables` not showing values | Integration not activated or minified code | Ensure `includeLocalVariables: true` in init; check source maps |
936
+ | NestJS: errors not captured | Wrong SDK or missing filter | Use [[`nestjs`](../nestjs/index.md)](../nestjs/index.md) — NestJS needs `@sentry/nestjs`, not `@sentry/node` |
937
+ | Hapi: `setupHapiErrorHandler` timing issue | Not awaited | Must `await Sentry.setupHapiErrorHandler(server)` before `server.start()` |
938
+ | Shutdown: events lost | Process exits before flush | Add `await Sentry.close(2000)` in SIGTERM/SIGINT handler |
939
+ | Stack traces show minified code | Source maps not uploaded | Configure `@sentry/cli` source map upload in build step |
940
+ | No traces appearing (OTLP) | Missing `@opentelemetry/*` packages or `otlpIntegration` not added | Verify `@opentelemetry/sdk-trace-node` is installed; add `otlpIntegration()` to `integrations`; do **not** set `tracesSampleRate` |
941
+ | OTLP: errors not linked to traces | `otlpIntegration` not registered | Ensure `otlpIntegration()` is in the `integrations` array — it registers the propagation context that links errors to OTel traces |
942
+ | Profiling not starting (OTLP) | Profiling requires `tracesSampleRate` | Profiling is **not compatible** with the OTLP path; use the standard `@sentry/node` setup instead |