@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,406 @@
1
+ # Session Replay — Sentry Android SDK
2
+
3
+ > **Minimum SDK:** `io.sentry:sentry-android:8.33.0`\
4
+ > **Minimum Android API: 26 (Oreo)** — silently disabled on API 21-25\
5
+ > **Status:** Production-ready\
6
+ > **Docs:** https://docs.sentry.io/platforms/android/session-replay/
7
+
8
+ ---
9
+
10
+ ## ⚠️ API Level Requirement
11
+
12
+ Session Replay requires **Android API 26 (Oreo)** or higher.
13
+ On devices running API 21–25, replay is silently skipped with an `INFO` log — no crash,
14
+ no error, no recording.
15
+ Apps with `minSdk = 21` (covering ~4–5% of devices) have zero replay coverage on those
16
+ devices.
17
+
18
+ ```kotlin
19
+ // Guard in ReplayIntegration.kt (line 128):
20
+ // if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { return }
21
+ ```
22
+
23
+ ---
24
+
25
+ ## How Android Replay Works
26
+
27
+ Android Session Replay is **screenshot-based**, not DOM-based:
28
+
29
+ | Dimension | Web Replay | Android Replay |
30
+ | ----------------- | -------------------------- | ----------------------------------------- |
31
+ | Recording method | DOM serialization | Native view hierarchy screenshots |
32
+ | Frame rate | Variable / mutation-driven | ~1 frame per second |
33
+ | Privacy mechanism | CSS-based DOM masking | **Native pixel masking** over screenshots |
34
+ | Touch recording | Full pointer events | Tap breadcrumbs only |
35
+ | Text in replay | Selectable, searchable | Pixel-only — text is in screenshots |
36
+
37
+ ---
38
+
39
+ ## Installation
40
+
41
+ `sentry-android` bundles session replay — no separate dependency needed:
42
+
43
+ ```groovy
44
+ dependencies {
45
+ implementation("io.sentry:sentry-android:8.33.0")
46
+ }
47
+ ```
48
+
49
+ For a lighter build using explicit modules:
50
+
51
+ ```groovy
52
+ dependencies {
53
+ implementation("io.sentry:sentry-android-core:8.33.0")
54
+ implementation("io.sentry:sentry-android-replay:8.33.0")
55
+ }
56
+ ```
57
+
58
+ For Jetpack Compose masking support:
59
+
60
+ ```groovy
61
+ dependencies {
62
+ implementation("io.sentry:sentry-compose-android:8.33.0")
63
+ }
64
+ ```
65
+
66
+ ---
67
+
68
+ ## Basic Setup
69
+
70
+ ```kotlin
71
+ SentryAndroid.init(this) { options ->
72
+ options.dsn = "https://YOUR_KEY@sentry.io/YOUR_PROJECT_ID"
73
+
74
+ // Continuous recording — record 10% of all sessions
75
+ options.sessionReplay.sessionSampleRate = 0.1
76
+
77
+ // Error-triggered — buffer 30s and upload when an error occurs
78
+ options.sessionReplay.onErrorSampleRate = 1.0
79
+
80
+ // Production-recommended: both modes together
81
+ options.sessionReplay.sessionSampleRate = 0.05 // 5% continuous baseline
82
+ options.sessionReplay.onErrorSampleRate = 0.75 // 75% on error
83
+ }
84
+ ```
85
+
86
+ **Via AndroidManifest.xml:**
87
+
88
+ ```xml
89
+ <meta-data android:name="io.sentry.session-replay.session-sample-rate" android:value="0.1" />
90
+ <meta-data android:name="io.sentry.session-replay.on-error-sample-rate" android:value="1.0" />
91
+ ```
92
+
93
+ ---
94
+
95
+ ## Configuration Reference
96
+
97
+ Accessed via `options.sessionReplay` (Kotlin) or `options.getSessionReplay()` (Java).
98
+
99
+ | Option | Type | Default | Description |
100
+ | ------------------------ | ------------------------ | ---------------------------------------- | -------------------------------------------------------------------- |
101
+ | `sessionSampleRate` | `Double?` | `0.0` | Fraction of all sessions recorded continuously (0.0–1.0) |
102
+ | `onErrorSampleRate` | `Double?` | `0.0` | Fraction captured when an error occurs; buffers 30s prior |
103
+ | `quality` | `SentryReplayQuality` | `MEDIUM` | Video encoding quality preset |
104
+ | `screenshotStrategy` | `ScreenshotStrategyType` | `PIXEL_COPY` | Frame capture method (`PIXEL_COPY` or `CANVAS`) |
105
+ | `maskAllText` | `Boolean` | `true` | Mask all `TextView` subclasses (includes `Button`, `EditText`, etc.) |
106
+ | `maskAllImages` | `Boolean` | `true` | Mask all `ImageView` subclasses |
107
+ | `frameRate` | `Int` | `1` | Frames per second |
108
+ | `errorReplayDuration` | `Long` (ms) | `30_000` | Pre-error ring buffer size (30 seconds) |
109
+ | `sessionSegmentDuration` | `Long` (ms) | `5_000` | How often video segments are uploaded |
110
+ | `sessionDuration` | `Long` (ms) | `3_600_000` | Maximum session length (1 hour) |
111
+ | `networkDetailAllowUrls` | `List<String>` | `[]` | URL prefixes for network request/response capture |
112
+ | `networkDetailDenyUrls` | `List<String>` | `[]` | URL prefixes excluded from network capture |
113
+ | `networkCaptureBodies` | `Boolean` | `true` | Capture HTTP request/response bodies |
114
+ | `networkRequestHeaders` | `List<String>` | `[Content-Type, Content-Length, Accept]` | Request headers to capture |
115
+ | `networkResponseHeaders` | `List<String>` | `[Content-Type, Content-Length, Accept]` | Response headers to capture |
116
+ | `debug` | `Boolean` | `false` | Enable verbose replay diagnostic logging |
117
+ | `trackConfiguration` | `Boolean` | `true` | Track device orientation and configuration changes |
118
+
119
+ ---
120
+
121
+ ## Code Examples
122
+
123
+ ### Video Quality
124
+
125
+ ```kotlin
126
+ SentryAndroid.init(this) { options ->
127
+ // Choose based on bandwidth/battery vs. fidelity trade-off
128
+ options.sessionReplay.quality = SentryReplayQuality.LOW // 80% res, 50 kbps, JPEG q10
129
+ options.sessionReplay.quality = SentryReplayQuality.MEDIUM // 100% res, 75 kbps, JPEG q30 (default)
130
+ options.sessionReplay.quality = SentryReplayQuality.HIGH // 100% res, 100 kbps, JPEG q50
131
+ }
132
+ ```
133
+
134
+ ### Screenshot Strategy
135
+
136
+ ```kotlin
137
+ SentryAndroid.init(this) { options ->
138
+ // Default — stable, supports all custom masking
139
+ options.sessionReplay.screenshotStrategy = ScreenshotStrategyType.PIXEL_COPY
140
+
141
+ // Experimental — always masks ALL text and images; custom masking rules are ignored
142
+ options.sessionReplay.screenshotStrategy = ScreenshotStrategyType.CANVAS
143
+ }
144
+ ```
145
+
146
+ > **Canvas strategy warning:** When `CANVAS` is active, `addMaskViewClass()`, XML tags,
147
+ > Kotlin extensions, and Compose modifiers are **completely ignored**. Canvas always
148
+ > masks all text and images.
149
+ > Use only when total masking is acceptable.
150
+
151
+ ### Development Configuration
152
+
153
+ ```kotlin
154
+ SentryAndroid.init(this) { options ->
155
+ if (BuildConfig.DEBUG) {
156
+ options.sessionReplay.sessionSampleRate = 1.0 // record all sessions in dev
157
+ options.sessionReplay.debug = true // verbose diagnostic logging
158
+ } else {
159
+ options.sessionReplay.sessionSampleRate = 0.05
160
+ options.sessionReplay.onErrorSampleRate = 1.0
161
+ }
162
+ }
163
+ ```
164
+
165
+ ---
166
+
167
+ ## Privacy Masking
168
+
169
+ ### Default Masked Types
170
+
171
+ These view classes are masked by default:
172
+
173
+ ```
174
+ android.widget.TextView (+ ALL subclasses: Button, EditText, CheckBox, RadioButton, Switch...)
175
+ android.widget.ImageView
176
+ android.webkit.WebView
177
+ android.widget.VideoView
178
+ androidx.camera.view.PreviewView
179
+ androidx.media3.ui.PlayerView
180
+ com.google.android.exoplayer2.ui.PlayerView
181
+ com.google.android.exoplayer2.ui.StyledPlayerView
182
+ ```
183
+
184
+ > **Masking is hierarchical.** Masking `TextView` also masks every subclass
185
+ > automatically.
186
+
187
+ ### Disabling Default Masking
188
+
189
+ ```kotlin
190
+ // Only if you are certain your UI contains no PII in text or images
191
+ options.sessionReplay.maskAllText = false
192
+ options.sessionReplay.maskAllImages = false
193
+ ```
194
+
195
+ ### Class-Based Masking
196
+
197
+ ```kotlin
198
+ // Mask custom view class and all subclasses
199
+ options.sessionReplay.addMaskViewClass("com.example.ui.CreditCardInputView")
200
+ options.sessionReplay.addMaskViewClass("com.example.ui.SsnField")
201
+
202
+ // Unmask a subclass whose parent class is masked
203
+ options.sessionReplay.addUnmaskViewClass("com.example.ui.PublicLabelButton")
204
+ ```
205
+
206
+ ### Instance-Based Masking via XML
207
+
208
+ ```xml
209
+ <!-- Using the standard tag attribute -->
210
+ <View android:tag="sentry-mask" ... />
211
+ <TextView android:tag="sentry-unmask" android:text="@string/public_product_name" />
212
+
213
+ <!-- Using the dedicated Sentry privacy tag (preferred — doesn't conflict with other tag uses) -->
214
+ <View ...>
215
+ <tag android:id="@id/sentry_privacy" android:value="mask" />
216
+ </View>
217
+
218
+ <TextView android:text="@string/safe_label">
219
+ <tag android:id="@id/sentry_privacy" android:value="unmask" />
220
+ </TextView>
221
+ ```
222
+
223
+ ### Instance-Based Masking via Kotlin Extensions
224
+
225
+ ```kotlin
226
+ // On any View instance
227
+ creditCardInputView.sentryReplayMask()
228
+ productTitleLabel.sentryReplayUnmask()
229
+ ```
230
+
231
+ ### Jetpack Compose Masking
232
+
233
+ > **Requires:** `io.sentry:sentry-compose-android:8.33.0`\
234
+ > **Compose 1.8+ note:** A masking regression for Compose 1.8+ was fixed in SDK 8.32.x —
235
+ > use SDK ≥ 8.33.0 with Compose 1.8.
236
+
237
+ ```kotlin
238
+ // Mask an entire composable subtree
239
+ @Composable
240
+ fun PaymentForm() {
241
+ Column(modifier = Modifier.sentryReplayMask()) {
242
+ CreditCardField() // masked via parent
243
+ CvvField() // masked via parent
244
+ ExpiryDateField() // masked via parent
245
+ }
246
+ }
247
+
248
+ // Unmask safe elements inside an otherwise-masked region
249
+ @Composable
250
+ fun ProductCard(product: Product) {
251
+ Column(modifier = Modifier.sentryReplayMask()) {
252
+ Text(
253
+ text = product.name,
254
+ modifier = Modifier.sentryReplayUnmask() // product name is safe to show
255
+ )
256
+ Text(
257
+ text = userPaymentInfo,
258
+ // inherits parent mask — sensitive data stays masked
259
+ )
260
+ }
261
+ }
262
+
263
+ // Masking via Sentry tag modifier (alternative)
264
+ Text(
265
+ text = "Public info",
266
+ modifier = Modifier.sentryTag("sentry-unmask")
267
+ )
268
+ ```
269
+
270
+ > **Compose + view flattening:** Compose can optimize away wrapper composables.
271
+ > If masking is unexpectedly dropped, verify the composable is not being flattened by
272
+ > the Compose compiler.
273
+
274
+ ### Masking Priority Order (first match wins)
275
+
276
+ 1. **View-level unmask** — `sentry-unmask` tag / `.sentryReplayUnmask()` / Compose
277
+ `.sentryReplayUnmask()`
278
+ 2. **View-level mask** — `sentry-mask` tag / `.sentryReplayMask()` / Compose
279
+ `.sentryReplayMask()`
280
+ 3. **Class-level unmask** — `addUnmaskViewClass(className)`
281
+ 4. **Class-level mask** — `addMaskViewClass(className)` / `maskAllText` /
282
+ `maskAllImages`
283
+
284
+ > **ViewGroup inheritance:** A masked parent does NOT automatically mask its children.
285
+ > Each child must be independently masked.
286
+ > An unmasked parent does NOT override class-level masks on children.
287
+
288
+ ---
289
+
290
+ ## Network Capture
291
+
292
+ Requires `SentryOkHttpInterceptor` or `SentryOkHttpEventListener` from
293
+ `sentry-android-okhttp` (or `sentry-okhttp`):
294
+
295
+ ```kotlin
296
+ SentryAndroid.init(this) { options ->
297
+ options.sessionReplay.networkDetailAllowUrls = listOf(
298
+ "https://api.myapp.com/v2" // capture details for this prefix
299
+ )
300
+ options.sessionReplay.networkDetailDenyUrls = listOf(
301
+ "https://api.myapp.com/v2/auth", // exclude auth endpoints (tokens)
302
+ "https://api.myapp.com/v2/payment" // exclude payment endpoints
303
+ )
304
+ options.sessionReplay.networkCaptureBodies = true
305
+ options.sessionReplay.networkRequestHeaders = listOf("X-Request-ID", "Accept-Language")
306
+ options.sessionReplay.networkResponseHeaders = listOf("X-Response-Time", "X-Cache")
307
+ }
308
+ ```
309
+
310
+ > Retrofit and `HttpURLConnection` apps have no network capture in replay — only OkHttp
311
+ > is supported.
312
+
313
+ ---
314
+
315
+ ## Session Lifecycle
316
+
317
+ ```
318
+ App launches / comes to foreground
319
+
320
+
321
+ SDK init → ReplayIntegration.start()
322
+
323
+ │ [recording at 1 fps, uploading segments every 5s]
324
+
325
+ ├── app goes background ─────────► pause() + flush current segment
326
+ │ < 30s background
327
+ ├── app returns to foreground ───► resume() (SAME replay ID)
328
+ │ > 30s background
329
+ ├── app returns to foreground ───► stop() + start() (NEW replay ID)
330
+
331
+ ├── 60 minutes elapsed ──────────► session ends, new one begins
332
+
333
+ └── error occurs (onErrorSampleRate mode)
334
+
335
+ └─► last 30s of buffered frames are uploaded
336
+ ```
337
+
338
+ ---
339
+
340
+ ## Debug Masking Overlay
341
+
342
+ During development, enable a colored overlay to visually inspect which regions are
343
+ masked:
344
+
345
+ ```kotlin
346
+ // Get the ReplayIntegration instance
347
+ val replay = Sentry.getCurrentScopes().options.integrations
348
+ .filterIsInstance<ReplayIntegration>()
349
+ .firstOrNull()
350
+
351
+ replay?.enableDebugMaskingOverlay() // shows colored rectangles over masked regions
352
+ replay?.disableDebugMaskingOverlay()
353
+ ```
354
+
355
+ ---
356
+
357
+ ## Best Practices
358
+
359
+ 1. **Always set both sample rates for production** — `sessionSampleRate` for baseline
360
+ coverage, `onErrorSampleRate = 1.0` for debugging every error
361
+ 2. **Start with `MEDIUM` quality** — then adjust down to `LOW` if bandwidth or battery
362
+ becomes a concern
363
+ 3. **Use `maskAllText = true` (default)** — erring on the side of more masking is always
364
+ safer for user privacy
365
+ 4. **Use XML `sentry_privacy` tag over `android:tag`** — the dedicated tag doesn’t
366
+ conflict with other usages of `android:tag`
367
+ 5. **Use Compose `Modifier.sentryReplayMask()` at the layout level** — mask entire
368
+ sections (payment forms, PII screens) rather than individual fields
369
+ 6. **Never enable Canvas strategy in production without testing** — it ignores all
370
+ custom masking rules
371
+ 7. **Set `debug = true` during development** — helps verify masking is applied correctly
372
+ before releasing
373
+ 8. **Test on an API 26 device** — replay silently does nothing on API 21-25; don’t test
374
+ exclusively on newer devices and assume all users have coverage
375
+ 9. **Exclude auth and payment URLs from network capture** — `networkDetailDenyUrls`
376
+ prevents tokens and card data from appearing in replay
377
+
378
+ ---
379
+
380
+ ## Known Limitations
381
+
382
+ | Limitation | Details |
383
+ | --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
384
+ | API 26+ hard requirement | Silent no-op on API 21-25; no fallback or warning unless `debug = true` |
385
+ | Canvas strategy ignores all masking | `addMaskViewClass`, XML tags, Kotlin extensions, and Compose modifiers have zero effect with `CANVAS` |
386
+ | PixelCopy masking misalignment | Mask overlay can misalign on views with `setTranslationX/Y`, `setScaleX/Y`, or inside `RecyclerView` with `ItemAnimator` |
387
+ | 60-minute session cutoff | Sessions longer than 1 hour are truncated; a new session starts but replay continuity is broken |
388
+ | Compose 1.8 masking regression | Fixed in 8.32.x — requires SDK ≥ 8.33.0 for reliable masking with Compose 1.8+ |
389
+ | OkHttp required for network capture | `networkDetailAllowUrls` / `networkCaptureBodies` only work with Sentry OkHttp integration installed |
390
+ | Trailing frame loss on crash | In-memory frames from the current segment are lost if the app is killed mid-segment; completed segments are persisted to disk |
391
+ | No Retrofit/HttpURLConnection network capture | Only OkHttp-based networking is captured in replay |
392
+
393
+ ---
394
+
395
+ ## Troubleshooting
396
+
397
+ | Issue | Solution |
398
+ | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
399
+ | No replays appearing in Sentry | Check `sessionSampleRate` or `onErrorSampleRate` > 0; verify device is API 26+ (enable `debug = true` to see skip log on API 21-25) |
400
+ | Masking not applied to custom view | Add class to `addMaskViewClass("com.example.MyView")` or apply `sentry-mask` tag |
401
+ | Masking applied but view content still visible | Check masking priority order; a view-level unmask overrides class-level masks |
402
+ | Compose masking not working | Add `sentry-compose-android` dependency; ensure SDK ≥ 8.33.0 for Compose 1.8+ support |
403
+ | Canvas strategy masking all content | Expected — Canvas strategy masks all text and images regardless of masking configuration |
404
+ | Network requests not captured in replay | Add `SentryOkHttpInterceptor` and add the API base URL to `networkDetailAllowUrls` |
405
+ | High battery drain | Reduce quality to `LOW`; replay runs at 1 fps but PixelCopy is GPU-accelerated |
406
+ | Replay ID not linked to log events | Replay ID is auto-attached to logs and metrics when replay is active; verify both features are enabled |